Merge "Clarify fileexists-extension message"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 19 Jun 2014 12:16:26 +0000 (12:16 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 19 Jun 2014 12:16:26 +0000 (12:16 +0000)
1061 files changed:
.jscsrc
.jshintrc
HISTORY
RELEASE-NOTES-1.23 [deleted file]
RELEASE-NOTES-1.24
composer.json
docs/hooks.txt
docs/kss/README.txt
docs/kss/styleguide-template/index.html
includes/Article.php
includes/AutoLoader.php
includes/CategoryViewer.php
includes/ChangeTags.php
includes/Collation.php
includes/DefaultSettings.php
includes/Defines.php
includes/DeprecatedGlobal.php
includes/EditPage.php
includes/Export.php
includes/Feed.php
includes/GlobalFunctions.php
includes/HistoryBlob.php
includes/ImagePage.php
includes/Import.php
includes/Linker.php
includes/MagicWord.php
includes/MimeMagic.php
includes/OutputPage.php
includes/Preferences.php
includes/PrefixSearch.php
includes/ProtectionForm.php
includes/Revision.php
includes/Sanitizer.php
includes/Setup.php
includes/Skin.php
includes/SkinTemplate.php
includes/StubObject.php
includes/Title.php
includes/User.php
includes/WebRequest.php
includes/Wiki.php
includes/WikiPage.php
includes/actions/RenderAction.php
includes/api/ApiBase.php
includes/api/ApiCreateAccount.php
includes/api/ApiEditPage.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedContributions.php
includes/api/ApiFeedRecentChanges.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatXml.php
includes/api/ApiImport.php
includes/api/ApiLogin.php
includes/api/ApiMain.php
includes/api/ApiOpenSearch.php
includes/api/ApiParse.php
includes/api/ApiProtect.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllImages.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryAllPages.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiResult.php
includes/api/ApiRollback.php
includes/api/ApiUpload.php
includes/changes/ChangesList.php
includes/changes/EnhancedChangesList.php
includes/changes/OldChangesList.php
includes/changes/RCCacheEntryFactory.php
includes/changes/RecentChange.php
includes/config/Config.php
includes/config/ConfigException.php [new file with mode: 0644]
includes/config/ConfigFactory.php [new file with mode: 0644]
includes/config/GlobalConfig.php [deleted file]
includes/config/GlobalVarConfig.php [new file with mode: 0644]
includes/content/ContentHandler.php
includes/content/TextContent.php
includes/context/DerivativeContext.php
includes/context/RequestContext.php
includes/db/CloneDatabase.php
includes/db/Database.php
includes/db/DatabaseError.php
includes/db/DatabaseOracle.php
includes/db/DatabasePostgres.php
includes/db/DatabaseSqlite.php
includes/db/LBFactory.php
includes/db/LBFactoryMulti.php
includes/db/LoadBalancer.php
includes/deferred/HTMLCacheUpdate.php
includes/filebackend/FSFileBackend.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendStore.php
includes/filebackend/SwiftFileBackend.php
includes/filerepo/file/ArchivedFile.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/htmlform/HTMLCheckField.php [changed mode: 0644->0755]
includes/installer/Installer.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MysqlUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerOutput.php
includes/installer/i18n/ary.json
includes/installer/i18n/ba.json
includes/installer/i18n/bn.json
includes/installer/i18n/br.json
includes/installer/i18n/ce.json
includes/installer/i18n/cps.json
includes/installer/i18n/cs.json
includes/installer/i18n/cv.json
includes/installer/i18n/el.json
includes/installer/i18n/es-formal.json
includes/installer/i18n/es.json
includes/installer/i18n/fr.json
includes/installer/i18n/fy.json
includes/installer/i18n/gl.json
includes/installer/i18n/ht.json
includes/installer/i18n/ia.json
includes/installer/i18n/id.json
includes/installer/i18n/it.json
includes/installer/i18n/ka.json
includes/installer/i18n/kbd-cyrl.json
includes/installer/i18n/km.json
includes/installer/i18n/ksh.json
includes/installer/i18n/lad.json
includes/installer/i18n/li.json
includes/installer/i18n/lv.json
includes/installer/i18n/mg.json
includes/installer/i18n/min.json
includes/installer/i18n/ms.json
includes/installer/i18n/nb.json
includes/installer/i18n/ne.json
includes/installer/i18n/nl-informal.json
includes/installer/i18n/nl.json
includes/installer/i18n/oc.json
includes/installer/i18n/or.json
includes/installer/i18n/pt-br.json
includes/installer/i18n/ro.json
includes/installer/i18n/ru.json
includes/installer/i18n/sco.json
includes/installer/i18n/sdc.json
includes/installer/i18n/sh.json
includes/installer/i18n/shi.json
includes/installer/i18n/sr-ec.json
includes/installer/i18n/sr-el.json
includes/installer/i18n/srn.json
includes/installer/i18n/sv.json
includes/installer/i18n/te.json
includes/installer/i18n/tr.json
includes/installer/i18n/tt-cyrl.json
includes/installer/i18n/tt-latn.json
includes/installer/i18n/uk.json
includes/installer/i18n/vec.json
includes/installer/i18n/vep.json
includes/installer/i18n/wo.json
includes/installer/i18n/zea.json
includes/installer/i18n/zh-hans.json
includes/jobqueue/Job.php
includes/jobqueue/JobQueueFederated.php
includes/jobqueue/JobQueueGroup.php
includes/jobqueue/aggregator/JobQueueAggregatorRedis.php
includes/limit.sh
includes/logging/LogEntry.php
includes/media/DjVu.php
includes/media/MediaHandler.php
includes/media/SVG.php
includes/media/Tiff.php
includes/objectcache/MemcachedClient.php
includes/objectcache/SqlBagOStuff.php
includes/parser/Parser.php
includes/parser/ParserOptions.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/poolcounter/PoolCounter.php
includes/profiler/Profiler.php
includes/rcfeed/MachineReadableRCFeedFormatter.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderLESSFunctions.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/revisiondelete/RevisionDelete.php
includes/search/SearchEngine.php
includes/search/SearchMssql.php
includes/search/SearchMySQL.php
includes/search/SearchSqlite.php
includes/specialpage/ChangesListSpecialPage.php
includes/specialpage/SpecialPage.php
includes/specials/SpecialAllMessages.php [new file with mode: 0644]
includes/specials/SpecialAllPages.php [new file with mode: 0644]
includes/specials/SpecialAllmessages.php [deleted file]
includes/specials/SpecialAllpages.php [deleted file]
includes/specials/SpecialChangePassword.php
includes/specials/SpecialContributions.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListfiles.php
includes/specials/SpecialLog.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMostlinkedtemplates.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialRunJobs.php
includes/specials/SpecialSearch.php
includes/specials/SpecialTrackingCategories.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWatchlist.php
includes/specials/SpecialWhatlinkshere.php
includes/upload/UploadBase.php
includes/utils/IP.php
includes/utils/MWCryptHKDF.php [new file with mode: 0644]
includes/utils/MWCryptRand.php
includes/utils/ZipDirectoryReader.php
languages/Language.php
languages/data/plurals.xml [changed mode: 0755->0644]
languages/i18n/af.json
languages/i18n/am.json
languages/i18n/ang.json
languages/i18n/ar.json
languages/i18n/arc.json
languages/i18n/arz.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/bar.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cdo.json
languages/i18n/ce.json
languages/i18n/ckb.json
languages/i18n/co.json
languages/i18n/crh-cyrl.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/cu.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/fa.json
languages/i18n/fi.json
languages/i18n/fo.json
languages/i18n/fr.json
languages/i18n/frp.json
languages/i18n/frr.json
languages/i18n/gan-hans.json
languages/i18n/gan-hant.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/hak.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hr.json
languages/i18n/hrx.json
languages/i18n/hsb.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ilo.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/kiu.json
languages/i18n/kk-cyrl.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/la.json
languages/i18n/lb.json
languages/i18n/lez.json
languages/i18n/lmo.json
languages/i18n/lrc.json
languages/i18n/lv.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/nan.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nds.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/oc.json
languages/i18n/or.json
languages/i18n/pfl.json
languages/i18n/pl.json
languages/i18n/pms.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/sa.json
languages/i18n/sah.json
languages/i18n/sat.json
languages/i18n/sc.json
languages/i18n/scn.json
languages/i18n/sco.json
languages/i18n/sh.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/so.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/ta.json
languages/i18n/te.json
languages/i18n/th.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/tyv.json
languages/i18n/ug-arab.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/uz.json
languages/i18n/vec.json
languages/i18n/vi.json
languages/i18n/war.json
languages/i18n/wuu.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/MessagesAb.php
languages/messages/MessagesAce.php
languages/messages/MessagesAeb.php
languages/messages/MessagesAf.php
languages/messages/MessagesAk.php
languages/messages/MessagesAln.php
languages/messages/MessagesAm.php
languages/messages/MessagesAn.php
languages/messages/MessagesAng.php
languages/messages/MessagesAnp.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesArn.php
languages/messages/MessagesArq.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesAst.php
languages/messages/MessagesAv.php
languages/messages/MessagesAvk.php
languages/messages/MessagesAy.php
languages/messages/MessagesAz.php
languages/messages/MessagesAzb.php
languages/messages/MessagesBa.php
languages/messages/MessagesBar.php
languages/messages/MessagesBbc.php
languages/messages/MessagesBbc_latn.php
languages/messages/MessagesBcc.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBh.php
languages/messages/MessagesBho.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBm.php
languages/messages/MessagesBn.php
languages/messages/MessagesBo.php
languages/messages/MessagesBpy.php
languages/messages/MessagesBqi.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesBug.php
languages/messages/MessagesBxr.php
languages/messages/MessagesCa.php
languages/messages/MessagesCbk_zam.php
languages/messages/MessagesCdo.php
languages/messages/MessagesCe.php
languages/messages/MessagesCeb.php
languages/messages/MessagesCh.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCo.php
languages/messages/MessagesCrh.php
languages/messages/MessagesCrh_cyrl.php
languages/messages/MessagesCrh_latn.php
languages/messages/MessagesCs.php
languages/messages/MessagesCsb.php
languages/messages/MessagesCu.php
languages/messages/MessagesCv.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDe_at.php
languages/messages/MessagesDe_ch.php
languages/messages/MessagesDe_formal.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesDtp.php
languages/messages/MessagesDv.php
languages/messages/MessagesDz.php
languages/messages/MessagesEgl.php
languages/messages/MessagesEl.php
languages/messages/MessagesEml.php
languages/messages/MessagesEn.php
languages/messages/MessagesEn_gb.php
languages/messages/MessagesEn_rtl.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesExt.php
languages/messages/MessagesFa.php
languages/messages/MessagesFf.php
languages/messages/MessagesFi.php
languages/messages/MessagesFit.php
languages/messages/MessagesFo.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrc.php
languages/messages/MessagesFrp.php
languages/messages/MessagesFrr.php
languages/messages/MessagesFur.php
languages/messages/MessagesFy.php
languages/messages/MessagesGa.php
languages/messages/MessagesGag.php
languages/messages/MessagesGan.php
languages/messages/MessagesGan_hans.php
languages/messages/MessagesGan_hant.php
languages/messages/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesGlk.php
languages/messages/MessagesGn.php
languages/messages/MessagesGot.php
languages/messages/MessagesGrc.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesGv.php
languages/messages/MessagesHak.php
languages/messages/MessagesHaw.php
languages/messages/MessagesHe.php
languages/messages/MessagesHi.php
languages/messages/MessagesHif.php
languages/messages/MessagesHif_latn.php
languages/messages/MessagesHr.php
languages/messages/MessagesHrx.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHt.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIe.php
languages/messages/MessagesIg.php
languages/messages/MessagesIi.php
languages/messages/MessagesIlo.php
languages/messages/MessagesInh.php
languages/messages/MessagesIo.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesIu.php
languages/messages/MessagesJa.php
languages/messages/MessagesJut.php
languages/messages/MessagesJv.php
languages/messages/MessagesKa.php
languages/messages/MessagesKaa.php
languages/messages/MessagesKab.php
languages/messages/MessagesKbd.php
languages/messages/MessagesKbd_cyrl.php
languages/messages/MessagesKg.php
languages/messages/MessagesKhw.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKk.php
languages/messages/MessagesKk_arab.php
languages/messages/MessagesKk_cn.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_kz.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKk_tr.php
languages/messages/MessagesKl.php
languages/messages/MessagesKm.php
languages/messages/MessagesKn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKo_kp.php
languages/messages/MessagesKoi.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKs.php
languages/messages/MessagesKs_arab.php
languages/messages/MessagesKs_deva.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu.php
languages/messages/MessagesKu_arab.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesKv.php
languages/messages/MessagesKw.php
languages/messages/MessagesKy.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLbe.php
languages/messages/MessagesLez.php
languages/messages/MessagesLfn.php
languages/messages/MessagesLi.php
languages/messages/MessagesLij.php
languages/messages/MessagesLiv.php
languages/messages/MessagesLmo.php
languages/messages/MessagesLn.php
languages/messages/MessagesLo.php
languages/messages/MessagesLrc.php
languages/messages/MessagesLt.php
languages/messages/MessagesLtg.php
languages/messages/MessagesLv.php
languages/messages/MessagesLzh.php
languages/messages/MessagesLzz.php
languages/messages/MessagesMai.php
languages/messages/MessagesMap_bms.php
languages/messages/MessagesMdf.php
languages/messages/MessagesMg.php
languages/messages/MessagesMhr.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMn.php
languages/messages/MessagesMo.php
languages/messages/MessagesMr.php
languages/messages/MessagesMrj.php
languages/messages/MessagesMs.php
languages/messages/MessagesMt.php
languages/messages/MessagesMwl.php
languages/messages/MessagesMy.php
languages/messages/MessagesMyv.php
languages/messages/MessagesMzn.php
languages/messages/MessagesNah.php
languages/messages/MessagesNan.php
languages/messages/MessagesNap.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNe.php
languages/messages/MessagesNew.php
languages/messages/MessagesNl.php
languages/messages/MessagesNl_informal.php
languages/messages/MessagesNn.php
languages/messages/MessagesNso.php
languages/messages/MessagesNv.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPcd.php
languages/messages/MessagesPdc.php
languages/messages/MessagesPdt.php
languages/messages/MessagesPfl.php
languages/messages/MessagesPi.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPnb.php
languages/messages/MessagesPnt.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQu.php
languages/messages/MessagesQug.php
languages/messages/MessagesRgn.php
languages/messages/MessagesRm.php
languages/messages/MessagesRmy.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesRuq.php
languages/messages/MessagesRuq_cyrl.php
languages/messages/MessagesRuq_latn.php
languages/messages/MessagesSa.php
languages/messages/MessagesSah.php
languages/messages/MessagesSc.php
languages/messages/MessagesScn.php
languages/messages/MessagesSd.php
languages/messages/MessagesSdc.php
languages/messages/MessagesSe.php
languages/messages/MessagesSg.php
languages/messages/MessagesSgs.php
languages/messages/MessagesSh.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSli.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesSrn.php
languages/messages/MessagesStq.php
languages/messages/MessagesSu.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesSzl.php
languages/messages/MessagesTa.php
languages/messages/MessagesTcy.php
languages/messages/MessagesTe.php
languages/messages/MessagesTet.php
languages/messages/MessagesTg.php
languages/messages/MessagesTg_cyrl.php
languages/messages/MessagesTh.php
languages/messages/MessagesTk.php
languages/messages/MessagesTl.php
languages/messages/MessagesTly.php
languages/messages/MessagesTpi.php
languages/messages/MessagesTr.php
languages/messages/MessagesTt.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesTt_latn.php
languages/messages/MessagesTy.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUdm.php
languages/messages/MessagesUg.php
languages/messages/MessagesUg_arab.php
languages/messages/MessagesUk.php
languages/messages/MessagesUr.php
languages/messages/MessagesUz.php
languages/messages/MessagesVec.php
languages/messages/MessagesVep.php
languages/messages/MessagesVi.php
languages/messages/MessagesVls.php
languages/messages/MessagesVmf.php
languages/messages/MessagesVo.php
languages/messages/MessagesVot.php
languages/messages/MessagesVro.php
languages/messages/MessagesWa.php
languages/messages/MessagesWar.php
languages/messages/MessagesWo.php
languages/messages/MessagesWuu.php
languages/messages/MessagesXal.php
languages/messages/MessagesXmf.php
languages/messages/MessagesYi.php
languages/messages/MessagesYo.php
languages/messages/MessagesYue.php
languages/messages/MessagesZa.php
languages/messages/MessagesZea.php
languages/messages/MessagesZh.php
languages/messages/MessagesZh_cn.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
languages/messages/MessagesZh_hk.php
languages/messages/MessagesZh_mo.php
languages/messages/MessagesZh_my.php
languages/messages/MessagesZh_sg.php
languages/messages/MessagesZh_tw.php
maintenance/archives/patch-watchlist-user-notificationtimestamp-index.sql [new file with mode: 0644]
maintenance/convertUserOptions.php
maintenance/deleteBatch.php
maintenance/deleteEqualMessages.php
maintenance/dev/includes/php.sh
maintenance/dictionary/mediawiki.dic
maintenance/dumpLinks.php
maintenance/fixDoubleRedirects.php
maintenance/generateSitemap.php
maintenance/language/countMessages.php [deleted file]
maintenance/language/listVariants.php [new file with mode: 0644]
maintenance/language/validate.php [deleted file]
maintenance/namespaceDupes.php
maintenance/nextJobDB.php
maintenance/postgres/tables.sql
maintenance/rebuildrecentchanges.php
maintenance/tables.sql
mw-config/index.php
resources/Resources.php
resources/lib/jquery.effects/jquery.effects.blind.js [deleted file]
resources/lib/jquery.effects/jquery.effects.bounce.js [deleted file]
resources/lib/jquery.effects/jquery.effects.clip.js [deleted file]
resources/lib/jquery.effects/jquery.effects.core.js [deleted file]
resources/lib/jquery.effects/jquery.effects.drop.js [deleted file]
resources/lib/jquery.effects/jquery.effects.explode.js [deleted file]
resources/lib/jquery.effects/jquery.effects.fade.js [deleted file]
resources/lib/jquery.effects/jquery.effects.fold.js [deleted file]
resources/lib/jquery.effects/jquery.effects.highlight.js [deleted file]
resources/lib/jquery.effects/jquery.effects.pulsate.js [deleted file]
resources/lib/jquery.effects/jquery.effects.scale.js [deleted file]
resources/lib/jquery.effects/jquery.effects.shake.js [deleted file]
resources/lib/jquery.effects/jquery.effects.slide.js [deleted file]
resources/lib/jquery.effects/jquery.effects.transfer.js [deleted file]
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ar-DZ.js [new file with mode: 0644]
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ar.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-az.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-bg.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-bs.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ca.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-cs.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-cy-GB.js [new file with mode: 0644]
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-da.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-de.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-el.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-en-AU.js [new file with mode: 0644]
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-en-NZ.js [new file with mode: 0644]
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-eo.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-es.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-et.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-eu.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-fa.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-fi.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-fo.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js [new file with mode: 0644]
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-fr.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-gl.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-he.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-hr.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-hy.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-id.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-is.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-it.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ja.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-kk.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ko.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-lt.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-lv.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ml.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ms.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-nl-BE.js [new file with mode: 0644]
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-nl.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-no.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-pl.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-pt-BR.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-pt.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-rm.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ro.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ru.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sk.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sl.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sq.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sr-SR.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sr.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sv.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-th.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-tj.js [new file with mode: 0644]
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-tr.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-uk.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-vi.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-zh-CN.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-zh-HK.js
resources/lib/jquery.ui/i18n/jquery.ui.datepicker-zh-TW.js
resources/lib/jquery.ui/jquery.ui.accordion.js
resources/lib/jquery.ui/jquery.ui.autocomplete.js
resources/lib/jquery.ui/jquery.ui.button.js
resources/lib/jquery.ui/jquery.ui.core.js
resources/lib/jquery.ui/jquery.ui.datepicker.js
resources/lib/jquery.ui/jquery.ui.dialog.js
resources/lib/jquery.ui/jquery.ui.draggable.js
resources/lib/jquery.ui/jquery.ui.droppable.js
resources/lib/jquery.ui/jquery.ui.effect-blind.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect-bounce.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect-clip.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect-drop.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect-explode.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect-fade.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect-fold.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect-highlight.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect-pulsate.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect-scale.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect-shake.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect-slide.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect-transfer.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.effect.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.menu.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.mouse.js
resources/lib/jquery.ui/jquery.ui.position.js
resources/lib/jquery.ui/jquery.ui.progressbar.js
resources/lib/jquery.ui/jquery.ui.resizable.js
resources/lib/jquery.ui/jquery.ui.selectable.js
resources/lib/jquery.ui/jquery.ui.slider.js
resources/lib/jquery.ui/jquery.ui.sortable.js
resources/lib/jquery.ui/jquery.ui.spinner.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.tabs.js
resources/lib/jquery.ui/jquery.ui.tooltip.js [new file with mode: 0644]
resources/lib/jquery.ui/jquery.ui.widget.js
resources/lib/jquery.ui/themes/default/images/ui-bg_flat_0_aaaaaa_40x100.png [deleted file]
resources/lib/jquery.ui/themes/default/images/ui-bg_flat_75_ffffff_40x100.png [deleted file]
resources/lib/jquery.ui/themes/default/images/ui-bg_glass_55_fbf9ee_1x400.png [deleted file]
resources/lib/jquery.ui/themes/default/images/ui-bg_glass_65_ffffff_1x400.png [deleted file]
resources/lib/jquery.ui/themes/default/images/ui-bg_glass_75_dadada_1x400.png [deleted file]
resources/lib/jquery.ui/themes/default/images/ui-bg_glass_75_e6e6e6_1x400.png [deleted file]
resources/lib/jquery.ui/themes/default/images/ui-bg_glass_95_fef1ec_1x400.png [deleted file]
resources/lib/jquery.ui/themes/default/images/ui-bg_highlight-soft_75_cccccc_1x100.png [deleted file]
resources/lib/jquery.ui/themes/default/images/ui-icons_222222_256x240.png [deleted file]
resources/lib/jquery.ui/themes/default/images/ui-icons_2e83ff_256x240.png [deleted file]
resources/lib/jquery.ui/themes/default/images/ui-icons_454545_256x240.png [deleted file]
resources/lib/jquery.ui/themes/default/images/ui-icons_888888_256x240.png [deleted file]
resources/lib/jquery.ui/themes/default/images/ui-icons_cd0a0a_256x240.png [deleted file]
resources/lib/jquery.ui/themes/default/jquery.ui.accordion.css [deleted file]
resources/lib/jquery.ui/themes/default/jquery.ui.autocomplete.css [deleted file]
resources/lib/jquery.ui/themes/default/jquery.ui.button.css [deleted file]
resources/lib/jquery.ui/themes/default/jquery.ui.core.css [deleted file]
resources/lib/jquery.ui/themes/default/jquery.ui.datepicker.css [deleted file]
resources/lib/jquery.ui/themes/default/jquery.ui.dialog.css [deleted file]
resources/lib/jquery.ui/themes/default/jquery.ui.progressbar.css [deleted file]
resources/lib/jquery.ui/themes/default/jquery.ui.resizable.css [deleted file]
resources/lib/jquery.ui/themes/default/jquery.ui.selectable.css [deleted file]
resources/lib/jquery.ui/themes/default/jquery.ui.slider.css [deleted file]
resources/lib/jquery.ui/themes/default/jquery.ui.tabs.css [deleted file]
resources/lib/jquery.ui/themes/default/jquery.ui.theme.css [deleted file]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/images/ui-icons_222222_256x240.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/images/ui-icons_454545_256x240.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/images/ui-icons_888888_256x240.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png [new file with mode: 0755]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.accordion.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.autocomplete.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.button.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.datepicker.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.dialog.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.menu.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.progressbar.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.resizable.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.selectable.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.slider.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.spinner.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.tabs.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.theme.css [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.tooltip.css [new file with mode: 0644]
resources/lib/jquery/jquery.cycle.all.js [deleted file]
resources/lib/jquery/jquery.jStorage.js
resources/lib/jquery/jquery.migrate.js
resources/lib/oojs-ui/i18n/ast.json
resources/lib/oojs-ui/i18n/be.json
resources/lib/oojs-ui/i18n/bn.json
resources/lib/oojs-ui/i18n/bs.json
resources/lib/oojs-ui/i18n/ce.json
resources/lib/oojs-ui/i18n/ckb.json
resources/lib/oojs-ui/i18n/egl.json
resources/lib/oojs-ui/i18n/eml.json
resources/lib/oojs-ui/i18n/es.json
resources/lib/oojs-ui/i18n/et.json
resources/lib/oojs-ui/i18n/fi.json
resources/lib/oojs-ui/i18n/gl.json
resources/lib/oojs-ui/i18n/hr.json
resources/lib/oojs-ui/i18n/hu.json
resources/lib/oojs-ui/i18n/ia.json
resources/lib/oojs-ui/i18n/ilo.json
resources/lib/oojs-ui/i18n/kn.json
resources/lib/oojs-ui/i18n/ko.json
resources/lib/oojs-ui/i18n/lzh.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/min.json
resources/lib/oojs-ui/i18n/ne.json
resources/lib/oojs-ui/i18n/nl.json
resources/lib/oojs-ui/i18n/oc.json
resources/lib/oojs-ui/i18n/pfl.json
resources/lib/oojs-ui/i18n/pl.json
resources/lib/oojs-ui/i18n/pt.json
resources/lib/oojs-ui/i18n/ro.json
resources/lib/oojs-ui/i18n/scn.json
resources/lib/oojs-ui/i18n/sl.json
resources/lib/oojs-ui/i18n/sq.json
resources/lib/oojs-ui/i18n/sr-ec.json
resources/lib/oojs-ui/i18n/sr-el.json
resources/lib/oojs-ui/i18n/tl.json
resources/lib/oojs-ui/i18n/vec.json
resources/lib/oojs-ui/i18n/vi.json
resources/lib/oojs-ui/i18n/yi.json
resources/lib/oojs-ui/images/indicators/alert.svg
resources/lib/oojs-ui/images/indicators/arrow-down.png [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-down.svg [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-up.png [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-up.svg [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/down.png [deleted file]
resources/lib/oojs-ui/images/indicators/down.svg [deleted file]
resources/lib/oojs-ui/images/indicators/required.svg
resources/lib/oojs-ui/images/indicators/up.png [deleted file]
resources/lib/oojs-ui/images/indicators/up.svg [deleted file]
resources/lib/oojs-ui/oojs-ui-agora.css
resources/lib/oojs-ui/oojs-ui-apex.css
resources/lib/oojs-ui/oojs-ui.css
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/oojs-ui.svg.css
resources/lib/oojs-ui/themes/agora/images/icons/check.svg [new file with mode: 0644]
resources/src/jquery.tipsy/jquery.tipsy.js
resources/src/jquery.ui-themes/vector/jquery.ui.autocomplete.css
resources/src/jquery/jquery.highlightText.js
resources/src/jquery/jquery.makeCollapsible.js
resources/src/jquery/jquery.placeholder.js
resources/src/jquery/jquery.qunit.completenessTest.js
resources/src/jquery/jquery.suggestions.js
resources/src/jquery/jquery.tablesorter.js
resources/src/mediawiki.action/mediawiki.action.history.css [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.history.diff.css
resources/src/mediawiki.action/mediawiki.action.history.js
resources/src/mediawiki.api/mediawiki.api.js
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.page/mediawiki.page.watch.ajax.js
resources/src/mediawiki.skinning/content.parsoid.less [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.preferences.js
resources/src/mediawiki.special/mediawiki.special.unwatchedPages.js
resources/src/mediawiki.ui/settings/colors.less
resources/src/mediawiki.ui/styleguide.md
resources/src/mediawiki.ui/vector.less
resources/src/mediawiki/mediawiki.debug.profile.js
resources/src/mediawiki/mediawiki.htmlform.js
resources/src/mediawiki/mediawiki.jqueryMsg.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.searchSuggest.js
resources/src/mediawiki/mediawiki.user.js
resources/src/mediawiki/mediawiki.util.js
skins/.gitignore
skins/CologneBlue.php [deleted file]
skins/Modern.php [deleted file]
skins/MonoBook.php [deleted file]
skins/Vector.php [deleted file]
skins/cologneblue/print.css [deleted file]
skins/cologneblue/screen.css [deleted file]
skins/common/ajax.js
skins/common/commonPrint.css
skins/modern/audio.png [deleted file]
skins/modern/bullet.gif [deleted file]
skins/modern/discussionitem_icon.gif [deleted file]
skins/modern/document.png [deleted file]
skins/modern/external.png [deleted file]
skins/modern/file_icon.gif [deleted file]
skins/modern/footer-grad.png [deleted file]
skins/modern/link_icon.gif [deleted file]
skins/modern/lock_icon.gif [deleted file]
skins/modern/mail_icon.gif [deleted file]
skins/modern/main.css [deleted file]
skins/modern/news_icon.png [deleted file]
skins/modern/print.css [deleted file]
skins/modern/video.png [deleted file]
skins/monobook/MonoBook.php [new file with mode: 0644]
skins/vector/Vector.php [new file with mode: 0644]
skins/vector/collapsibleTabs.js
skins/vector/components/tabs.less
skins/vector/components/watchstar.less
skins/vector/variables.less
skins/vector/vector.js
tests/TestsAutoLoader.php
tests/frontend/Gruntfile.js
tests/frontend/package.json
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/ResourceLoaderTestCase.php
tests/phpunit/TODO
tests/phpunit/data/filerepo/video.png [new file with mode: 0644]
tests/phpunit/data/filerepo/wiki.png [new file with mode: 0644]
tests/phpunit/data/media/Bishzilla_blink.gif [new file with mode: 0644]
tests/phpunit/data/media/README
tests/phpunit/data/media/Soccer_ball_animated.svg [new file with mode: 0644]
tests/phpunit/data/parser/LoremIpsum.djvu [new file with mode: 0644]
tests/phpunit/data/parser/headbg.jpg [new file with mode: 0644]
tests/phpunit/data/parser/wiki.png [new file with mode: 0644]
tests/phpunit/data/upload/headbg.jpg [new file with mode: 0644]
tests/phpunit/includes/GlobalFunctions/wfTimestampTest.php
tests/phpunit/includes/ImportTest.php [new file with mode: 0644]
tests/phpunit/includes/LinkerTest.php
tests/phpunit/includes/StatusTest.php
tests/phpunit/includes/TimeAdjustTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/api/ApiMainTest.php
tests/phpunit/includes/config/ConfigFactoryTest.php [new file with mode: 0644]
tests/phpunit/includes/config/GlobalConfigTest.php [deleted file]
tests/phpunit/includes/config/GlobalVarConfigTest.php [new file with mode: 0644]
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/filerepo/StoreBatchTest.php
tests/phpunit/includes/filerepo/files/FileTest.php [new file with mode: 0644]
tests/phpunit/includes/libs/CSSMinTest.php
tests/phpunit/includes/media/DjVuTest.php
tests/phpunit/includes/media/ExifRotationTest.php
tests/phpunit/includes/media/FormatMetadataTest.php
tests/phpunit/includes/media/GIFTest.php
tests/phpunit/includes/media/JpegTest.php
tests/phpunit/includes/media/MediaWikiMediaTestCase.php [new file with mode: 0644]
tests/phpunit/includes/media/PNGTest.php
tests/phpunit/includes/media/SVGMetadataExtractorTest.php
tests/phpunit/includes/media/SVGTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/parser/ParserOutputTest.php
tests/phpunit/includes/poolcounter/PoolCounterTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderStartupModuleTest.php
tests/phpunit/includes/utils/IPTest.php
tests/phpunit/includes/utils/MWCryptHKDFTest.php [new file with mode: 0644]
tests/phpunit/structure/StructureTest.php
tests/phpunit/suites/UploadFromUrlTestSuite.php
tests/qunit/data/load.mock.php
tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js
tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.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.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.toc.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
tests/testHelpers.inc

diff --git a/.jscsrc b/.jscsrc
index b5481ea..0da9aa5 100644 (file)
--- a/.jscsrc
+++ b/.jscsrc
@@ -1,30 +1,94 @@
 {
-       "requireCurlyBraces": ["if", "else", "for", "while", "do"],
-       "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "function"],
-       "requireParenthesesAroundIIFE": true,
-       "requireSpacesInFunctionExpression": {
-               "beforeOpeningCurlyBrace": true
-       },
-       "requireMultipleVarDecl": true,
-       "disallowEmptyBlocks": true,
-       "requireSpacesInsideObjectBrackets": "all",
-       "disallowSpaceAfterObjectKeys": true,
-       "requireCommaBeforeLineBreak": true,
-       "disallowLeftStickedOperators": ["?", ">", ">=", "<", "<="],
-       "disallowRightStickedOperators": ["?", "/", "*", ":", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
-       "requireRightStickedOperators": ["!"],
-       "requireLeftStickedOperators": [","],
-       "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~"],
-       "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
-       "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
-       "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
-       "disallowKeywords": [ "with" ],
-       "disallowMultipleLineBreaks": true,
-       "validateLineBreaks": "LF",
-       "validateQuoteMarks": "'",
-       "disallowMixedSpacesAndTabs": "smart",
-       "disallowTrailingWhitespace": true,
-       "requireLineFeedAtFileEnd": true,
-       "requireCapitalizedConstructors": true,
-       "requireDotNotation": true
+    "requireCurlyBraces": [
+        "if",
+        "else",
+        "for",
+        "while",
+        "do",
+        "try",
+        "catch"
+    ],
+    "requireSpaceAfterKeywords": [
+        "if",
+        "else",
+        "for",
+        "while",
+        "do",
+        "switch",
+        "return",
+        "try",
+        "catch",
+        "function"
+    ],
+    "requireSpaceBeforeBlockStatements": true,
+    "requireParenthesesAroundIIFE": true,
+    "requireSpacesInConditionalExpression": true,
+    "disallowSpacesInNamedFunctionExpression": {
+        "beforeOpeningRoundBrace": true
+    },
+    "disallowSpacesInFunctionDeclaration": {
+        "beforeOpeningRoundBrace": true
+    },
+    "requireMultipleVarDecl": "onevar",
+    "requireBlocksOnNewline": 1,
+    "disallowEmptyBlocks": true,
+    "requireSpacesInsideObjectBrackets": "all",
+    "disallowSpaceAfterObjectKeys": true,
+    "requireCommaBeforeLineBreak": true,
+    "disallowSpaceAfterPrefixUnaryOperators": [
+        "++",
+        "--",
+        "+",
+        "-",
+        "~",
+        "!"
+    ],
+    "disallowSpaceBeforePostfixUnaryOperators": [
+        "++",
+        "--"
+    ],
+    "disallowSpaceBeforeBinaryOperators": [
+        ","
+    ],
+    "requireSpaceBeforeBinaryOperators": [
+        "=",
+        "+",
+        "-",
+        "/",
+        "*",
+        "==",
+        "===",
+        "!=",
+        "!==",
+        ">",
+        ">=",
+        "<",
+        "<="
+    ],
+    "requireSpaceAfterBinaryOperators": [
+        "=",
+        "+",
+        "-",
+        "/",
+        "*",
+        "==",
+        "===",
+        "!=",
+        "!==",
+        ">",
+        ">=",
+        "<",
+        "<="
+    ],
+    "disallowKeywords": [ "with" ],
+    "disallowMultipleLineBreaks": true,
+    "validateLineBreaks": "LF",
+    "validateQuoteMarks": "'",
+    "disallowMixedSpacesAndTabs": true,
+    "disallowTrailingWhitespace": true,
+    "disallowTrailingComma": true,
+    "requireLineFeedAtFileEnd": true,
+    "requireCapitalizedConstructors": true,
+    "requireDotNotation": true,
+    "disallowYodaConditions": true
 }
index 4eec7a0..c136dfc 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -1,37 +1,30 @@
 {
-       /* Common */
-
        // Enforcing
+       "bitwise": true,
        "eqeqeq": true,
        "es3": true,
+       "freeze": true,
        "latedef": true,
        "noarg": true,
        "nonew": true,
        "undef": true,
        "unused": true,
-
-       /* Local */
-
-       // FIXME: Deprecated, handle these with node-jscs instead.
-       // Handled here because we still have inline overrides in some places.
-       "camelcase": true,
-       "nomen": true,
-
-       // Enforcing
-       "bitwise": true,
-       "forin": false,
-       "regexp": false,
        "strict": false,
+
        // Relaxing
        "laxbreak": true,
-       "smarttabs": true,
        "multistr": true,
+
        // Environment
        "browser": true,
 
-       "predef": [
-               "mediaWiki",
-               "jQuery",
-               "QUnit"
-       ]
+       "globals": {
+               "mediaWiki": true,
+               "jQuery": false,
+               "QUnit": false
+       },
+
+       // Legacy (to be handled by jscs once supported)
+       "camelcase": true,
+       "nomen": true
 }
diff --git a/HISTORY b/HISTORY
index 12532db..8ba1a4b 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -1,5 +1,474 @@
 Change notes from older releases. For current info see RELEASE-NOTES-1.24.
 
+== MediaWiki 1.23 ==
+
+=== Configuration changes in 1.23 ===
+* (bug 13250) Restored method for clearing a watchlist in web UI
+  so that users with large watchlists don't have to perform
+  contortions to clear them.
+* When $wgJobRunRate is higher than zero, jobs are now executed via an
+  asynchronous HTTP request to a MediaWiki entry point. This may require
+  increasing the number of server worker threads. $wgRunJobsAsync has been
+  added to disable this feature if needed, falling back to executing the job
+  on the same process but making the execution synchronously.
+* $wgDebugLogGroups values may be set to an associative array with a
+  'destination' key specifying the log destination. The array may also contain
+  a 'sample' key with a positive integer value N indicating that the log group
+  should be sampled by dispatching one in every N messages on average. The
+  sampling is random.
+* In addition to the current exception log format, MediaWiki now serializes
+  exception metadata to JSON and logs it to the 'exception-json' log group.
+  This makes MediaWiki easier to integrate with log aggregation and analysis
+  tools.
+* $wgSquidServersNoPurge now supports the use of Classless Inter-Domain
+  Routing (CIDR) notation to specify contiguous blocks of IPv4 and/or IPv6
+  addresses that should be trusted to provide X-Forwarded-For headers.
+* Preferences 'watchcreations', 'watchdefault', 'enotifwatchlistpages' ("Add
+  pages I create and files I upload to my watchlist", "Add pages and files I
+  edit to my watchlist", "Email me when a page or file on my watchlist is
+  changed") are now enabled by default. In addition new user accounts' personal
+  and talk pages are now watched by them by default.
+* $wgLBFactoryConf: Class names have had underscores removed. The configuration
+  should be updated if LBFactory_Simple or LBFactory_Multi is configured.
+* $wgPasswordSenderName has been removed and is no longer functional. To set a
+  custom mailer name, the system message 'emailsender' should be modified
+  (default: "{{SITENAME}}").
+* (bug 63269) Email notifications were not correctly handling the
+  [[MediaWiki:Helppage]] message being set to a full URL (the default).
+  If you customized [[MediaWiki:Enotif body]] (the text of email notifications),
+  you'll need to edit it locally to include the URL via the new variable
+  $HELPPAGE instead of the parser functions fullurl and canonicalurl; otherwise
+  you don't have to do anything.
+* $wgDBAhandler was removed as the only class using it was also removed
+* The 'max threads' setting was removed from $wgDBservers.
+* Support for AdminSettings.php has been completely removed. All configuration
+  belongs in LocalSettings.php.
+* $wgSkipSkin, which has been replaceable by $wgSkipSkins since 2005 (r9249), is
+  now formally deprecated.
+* Removed deprecated $wgDisabledActions as it is hardly used anywhere.
+* $wgRateLimitLog has been deprecated and replaced by
+  $wgDebugLogGroup['ratelimit'].
+* $wgLocalInterwikis is an array containing multiple local interwiki prefixes
+  (interwiki prefixes that point back to the current wiki). This effectively
+  allows more than one value of $wgLocalInterwiki to be specified and
+  understood by the parser. The value of $wgLocalInterwiki is automatically
+  prepended to the start of this array.
+* $wgQueryPages has been removed. Query Pages should be added to by using the
+  wgQueryPages hook.
+* $wgHttpOnlyBlacklist has been removed.
+* $wgLicenseTerms has been removed as it was unused.
+* $wgProfileOnly is now deprecated; set the log file in
+  $wgDebugLogGroups['profileoutput'] to replace it.
+* $wgMaxBacklinksInvalidate was removed; use $wgJobBackoffThrottling instead
+* Deprecated ResourceLoaderGetStartupModules hook.
+
+=== New features in 1.23 ===
+* ResourceLoader can utilize the Web Storage API to cache modules client-side.
+  Compared to the browser cache, caching in Web Storage allows ResourceLoader
+  to be more granular about evicting stale modules from the cache while
+  retaining the ability to retrieve multiple modules in a single HTTP request.
+  This capability can be enabled by setting $wgResourceLoaderStorageEnabled to
+  true. This feature is currently considered experimental and should only be
+  enabled with care.
+* (bug 6092) Add expensive parser functions {{REVISIONID:}}, {{REVISIONUSER:}}
+  and {{REVISIONTIMESTAMP:}} (with friends).
+* Add "wgRelevantUserName" to mw.config containing the current
+  Skin::getRelevantUser value.
+* (bug 56033) Add content model to the page information.
+* Added Article::MissingArticleConditions hook to give extensions a chance to
+  hide their (unrelated) log entries.
+* Added LonelyPagesQuery hook to let extensions modify the query used to
+  generate Special:LonelyPages.
+* Added $wgOpenSearchDefaultLimit defining the default number of entries to show
+  on action=opensearch API call.
+* For namespaces with $wgNamespaceProtection (including the MediaWiki
+  namespace), the "protect" tab will be shown only if there are restriction
+  levels available that would restrict editing beyond what
+  $wgNamespaceProtection already applies. The protection form will offer only
+  those protection levels.
+* Added $wgAPIFormatModules, allowing extensions to add additional output
+  formatting modules for the API.
+* (bug 47812) The MediaWiki:Group-user.{css,js} pages can now be used to add
+  custom CSS or JavaScript enabled only for registered users.
+* (bug 52005) Special pages RecentChanges, RecentChangesLinked and Watchlist
+  now include a legend describing the symbols used in lists of changes.
+* Improved the accessibility of the tabs in Special:Preferences.
+* Added ApiBeforeMain hook, roughly equivalent to the BeforeInitialize hook:
+  it's called after everything is set up but before any major processing
+  happens.
+* The jquery.client module now performs a component-wise version comparison in
+  its #test method when strings are used in the browser map: version '1.10' is
+  now correctly considered larger than '1.2'. Using numbers in the version map
+  is not affected.
+* All API modules now support an assert parameter, which can either be
+  'user' or 'bot'. The API will throw an error if the user is not logged
+  in (user) or does not have the 'bot' userright (bot). Based off of the
+  AssertEdit extension by Steve Sanbeg.
+* [[Special:Diff]] was added, allowing users to create internal links to
+  revision comparison pages using syntax such as [[Special:Diff/12345]],
+  [[Special:Diff/12345/prev]] or [[Special:Diff/12345/98765]].
+* New user accounts' personal and talk pages are now watched by them by default.
+* Added SkinTemplateGetLanguageLink hook to allow changing the html of language
+  links.
+* Added MessageCache::get hook as a new way to customize messages across
+  multiple sites.
+* Added jquery.throttle-debounce ResourceLoader module to limit the number of
+  callbacks for frequently occurring events.
+* Special:ProtectedPages shows now a table. The timestamp, the reason and
+  the protecting user is also shown.
+* Added experimental support for using Microsoft SQL Server as the database
+  backend.
+** Added new Microsoft SQL Server-specific configuration variable
+   $wgDBWindowsAuthentication, which makes the web server authenticate against
+   the database server using Integrated Windows Authentication instead of
+   $wgDBuser/$wgDBpassword.
+* HTMLForm 'select', 'selectandother', 'selectorother', 'multiselect', and
+  'radio' fields can now use message keys as labels via the 'options-messages'
+  parameter, which overrides the 'options' parameter.
+* Admins can expire users users passwords manually, or on a schedule using the
+  $wgPasswordExpirationDays configuration setting.
+* Add new hook SendWatchlistEmailNotification, this will be used to determine
+  whether to send a watchlist email notification.
+* (bug 42026) Special:Contributions now includes an option to filter page
+  creations, similar to the topOnly option.
+* Add mediawiki.ui.button styling to all pages so wiki content can use styled
+  buttons.
+* Special:UserLogin/signup now does AJAX checks for invalid and taken usernames,
+  displaying the error live.
+* Added BaseTemplateAfterPortlet hook to allow injecting html after portlets in skins.
+* Support has been added for a JSON based localisation file format. The
+  installer has been updated to use it.
+* Changes to content typography (colors, line-height etc.). See
+  https://www.mediawiki.org/wiki/Typography_refresh for further information.
+* The Vector skin's visual treatment of external links has been simplified to a
+  single icon (from nine). This should not affect local rules unless they were
+  re-using these icons, which have now been deleted.
+* ResourceLoader: mw.loader.using() now implements a Promise interface.
+* Add new hook ChangesListInitRows accessed via ChangesList::initChangesListRows.
+  If called by the ChangesList consumer this gives extensions a chance to batch
+  process the result set prior to rendering.
+* A PoolCounterRedis class was added which can be make use of in $wgPoolCounterConf.
+  This requires at least one Redis 2.6+ server.
+* $wgProfileToDatabase was removed. Set $wgProfiler to ProfilerSimpleDB
+  in StartProfiler.php instead of using this.
+* (bug 63444) Made it possible to change the indent string (default: 4 spaces)
+  used by FormatJson::encode().
+
+=== Bug fixes in 1.23 ===
+* (bug 41759) The "updated since last visit" markers (on history pages, recent
+  changes and watchlist) and the talk page message indicator are now correctly
+  updated when the user is viewing old revisions of pages, instead of always
+  acting as if the latest revision was being viewed.
+* (bug 56443) Special:ConfirmEmail no longer shows a "Mail a confirmation code"
+  when the email address is already confirmed. Also, consistently use
+  "confirmed", rather than "authenticated", when messaging whether or not the
+  user has confirmed an email address.
+* (bug 19415) action=render no longer shows section edit links. This affects
+  behavior of several other features where (bogus) section edit links will
+  disappear, such as file description pages loaded via $wgUseInstantCommons or
+  pages transcluded cross-wiki via $wgEnableScaryTranscluding.
+* (bug 56912) Show correct link color on cached result of Special:DeadendPages.
+* Classes TitleListDependency and TitleDependency have been removed, as they
+  have been found unused in core and extensions for a long time.
+* (bug 57098) SpecialPasswordReset now obeys returnto parameter
+* (bug 37812) ResourceLoader will notice when a module's definition changes and
+  recompile it accordingly.
+* (bug 57201) SpecialRecentChangesFilters hook is now executed for feeds.
+* (bug 58640) Fixed a compatibility issue with PCRE 8.34 that caused pages
+  to appear blank or with missing text.
+* (bug 56931) Updated the plural rules to CLDR 24. They are in new format
+  which is detailed in UTS 35 Rev 33. The PHP parser and evaluator as well as
+  the JavaScript evaluator were updated to support the new format. Plural rules
+  for some languages have changed, most notably Russian. Affected software
+  messages have been updated and marked for review at translatewiki.net.
+* (bug 23542) imagelinks now stores both the redirect and target (as
+  templatelinks does).
+* (bug 58167) The web installer no longer throws an exception when PHP is
+  compiled without support for MySQL yet with support for another DBMS.
+* (bug 56199) Raw option of parser functions must now match complete word,
+  to take effect.
+* (bug 60543) Special:PrefixIndex forgot stripprefix=1 for "Next page" link
+* (bug 29762) Undoing an already-undone edit will now display an appropriate
+  message instead of leading the user to make a null edit.
+* (bug 52659) mediawiki.notification: Notification area remained visible when
+  empty and thus was stealing pointer events from links on the page.
+* (bug 26811) When a DBUnexpectedError occurs, DB server hostnames are now
+  hidden unless $wgShowExceptionDetails is true, and $wgShowDBErrorBacktrace
+  no longer applies in such cases.
+* (bug 60960) Avoid doing file_exist() checks on data: URIs, as they cause
+  warnings to be printed on Windows due to large path length.
+* (bug 48084) Fixed a bug in the installer that could cause $wgLogo to hold
+  the wrong path to the placeholder logo (skins/common/images/wiki.png).
+* (bug 64289) jquery.textSelection: Don't throw errors on empty collections.
+
+=== Web API changes in 1.23 ===
+* (bug 54884) action=parse&prop=categories now indicates hidden and missing
+  categories.
+* action=query&meta=filerepoinfo now returns additional information for each
+  repo.
+* action=parse&prop=languageshtml was deprecated in 1.18 and will be removed in
+  MediaWiki 1.24.
+* action=parse now has disabletoc flag to disable table of contents in output.
+* (bug 25702) list=allcategories, list=allimages, list=alllinks, list=allpages,
+  list=deletedrevs and list=filearchive did not handle case-sensitivity
+  properly for all parameters.
+* ApiQueryBase::titlePartToKey allows an extra parameter that indicates the
+  namespace in order to properly capitalize the title part.
+* (bug 57874) action=feedcontributions no longer has one item more than limit.
+* All API modules now support an assert parameter. See the new features section
+  for more details.
+* Added prop=contributors to fetch the list of contributors to the page.
+* The following API modules will now return entries where fields have been
+  revision-deleted: list=deletedrevs, list=filearchive, list=recentchanges,
+  list=watchlist. "hidden" indicators will be included, in the same style as is
+  already done for prop=revisions.
+* The following API modules will now return the content of revision-deleted
+  fields, in addition to the "hidden" indicators, if the querying user has the
+  necessary rights: list=logevents, list=usercontribs, prop=imageinfo,
+  prop=revisions.
+* The above modules, where applicable, will now return entries filtered by
+  revision-deleted fields if the querying user has the necessary rights. For
+  example, prop=revisions with rvuser or rvexcludeuser will no longer skip
+  revisions where the user was revision-deleted if the current user has the
+  deletedhistory right.
+* The 'hideuser' right, used when blocking, is no longer necessary or
+  sufficient for seeing contributions with revision-deleted in
+  list=usercontribs.
+* list=watchlist now uses the querying user's rights rather than the wlowner's
+  rights when checking whether wlprop=patrol is allowed.
+* (bug 32151) ApiWatch now has pageset capabilities (titles/pageids/generators).
+  Title parameter is now deprecated.
+* (bug 23005) Added action=revisiondelete.
+* Added siprop=restrictions to API action=query&meta=siteinfo for querying
+  possible page restriction (protection) levels and types.
+* Added prop 'limitreportdata' and 'limitreporthtml' to action=parse.
+* (bug 58627) Provide language names on action=parse&prop=langlinks.
+* Deprecated llurl= in favour of llprop=url for action=query&prop=langlinks.
+* Added llprop=langname and llprop=autonym for action=query&prop=langlinks.
+* prop=redirects is added, to return redirects to the pages in the query.
+* list=allredirects is added, to list all redirects pointing to a namespace.
+* (bug 42026) Added ucshow={new,!new,top,!top} to list=usercontribs.
+  Also added newonly to action=feedcontributions.
+* (bug 42026) Deprecated uctoponly in favor of ucshow=top.
+* list=search no longer has a "srredirects" parameter. Redirects are now
+  included in all searches.
+* Added list=prefixsearch that works like action=opensearch but can be used as
+  a generator.
+* (bug 24782) Various modules will now use unique continuation parameters.
+* (bug 63249) Cache RecentChanges Atom feed in varnish for 15 seconds.
+
+=== Languages updated in 1.23 ===
+
+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.
+
+* Support was added for Algerian Spoken Arabic (arq).
+* Support was added for Riograndenser Hunsrückisch (hrx).
+* Support was added for Northern Luri (lrc).
+
+=== Other changes in 1.23 ===
+* The rc_type field in the recentchanges table has been superseded by a new
+  rc_source field.  The rc_source field is a string representation of the
+  change type where rc_type was a numeric constant.  This field is not yet
+  queried but will be in a future release.
+** Utilize update.php to create and populate this new field.  On larger wikis
+   which do not wish to update recentchanges table in one large update please
+   review the SQL and comments in maintenance/archives/patch-rc_source.sql.
+** The rc_type field of recentchanges will be deprecated in a future release.
+* The global variable $wgArticle has been removed after a lengthy deprecation.
+* The global functions addButton and insertTags (for mw.toolbar.addButton and
+  mw.toolbar.insertTags) now emits mw.log.warn when accessed.
+* The ExpandTemplates extension has been moved into MediaWiki core.
+* (bug 52812) Removed "Disable search suggestions" from Preference.
+* (bug 52809) Removed "Disable browser page caching" from Preference.
+* Three new modules intended for use by custom skins were added:
+  'mediawiki.skinning.elements', 'mediawiki.skinning.content', and
+  'mediawiki.skinning.interface', representing three levels of standard
+  MediaWiki styling. Previously skin creators wishing to use them had to refer
+  to the file names of appropriate files directly, which is now discouraged.
+* The modules 'skins.vector' and 'skins.monobook' have been renamed to
+  'skins.vector.styles' and 'skins.monobook.styles', respectively,
+  and their definition was changed not to include the common*.css files;
+  the two skins now load the 'mediawiki.skinning.interface' module instead.
+* A page_links_updated field has been added to the page table.
+* SpecialPage::getTitle has been deprecated in favor of
+  SpecialPage::getPageTitle.
+* BREAKING CHANGE: Two potentially backwards-incompatible changes have been made
+  to the 'SpecialWatchlistQuery' hook's last parameter (array $values) to make
+  the hook more consistent with the 'SpecialRecentChangesQuery' one:
+** Several array keys have been renamed: hideMinor → hideminor,
+   hideBots → hidebots, hideAnons → hideanons, hideLiu → hideliu,
+   hidePatrolled → hidepatrolled, hideOwn → hidemyself.
+** The parameter value is now a FormOptions object, not a plain array (array
+   access operators should continue to work, as it implements the ArrayAccess
+   interface).
+* Option to mark hooks as deprecated has been added.
+* (bug 52811) Preference "Enable section editing via [edit] links" was removed.
+* (bug 52813) Preference "Show table of contents (for pages with more than
+  3 headings)" was removed.
+* (bug 52810) Preference "Justify paragraphs" was removed.
+* OutputPage::showErrorPage raises a notice if arguments are incoherent.
+* Thumbnails that keep failing to render in thumb.php will be rate-limited
+  againt further render attempts for 1 hour. $wgAttemptFailureEpoch can be
+  altered to reset all rate-limited thumbnails at once.
+* (bug 56572) Builds of the OOjs and OOjs UI libraries are now available.
+* mw.loader.go and mw.loader.version have been removed.
+* (bug 52815) Preference "Enable simplified search bar (Vector skin only)"
+  was removed.
+* A user_password_expires column has been added to the user table. The User
+  object expects this column to exist. Use update.php to create this new field.
+* The jquery.delayedBind ResourceLoader module was deprecated in favor of the
+  jquery.throttle-debounce module. It will be removed in MediaWiki 1.24.
+* mw.user.bucket has been deprecated.
+* On Special:PrefixIndex, a table#mw-prefixindex-list-table was changed to
+  table.mw-prefixindex-list-table to avoid duplicate ids when the special page
+  is transcluded.
+* (bug 62198) window.$j has been deprecated.
+* Preference "Disable link title conversion" was removed.
+* SpecialRecentChanges no longer includes any functionality for generating feeds
+  - it has been factored out to ApiFeedRecentChanges. Old URLs redirect to new
+  ones.
+* RecentChange::mExtra['lang'] is no longer set and should no longer be used.
+  Extensions should read from other configuration variables, including
+  $wgLocalInterwikis, to identify the current wiki.
+* Sections in the parser test framework have been renamed and the old
+  section names are deprecated.  Please use "!!wikitext" and "!!html"
+  (or "!!html/php") instead of "!!input" and "!!result".  This allows
+  us to extend parser tests to accommodate additional input/output
+  pairs, such as "!!html/parsoid" (for the output of the Parsoid
+  parser, where it differs from the PHP parser).
+* Special:Search no longer has an "include redirects" option on the advanced
+  tab. Redirects are now included in all searches.
+* mediawiki.api.category's getCategories() 'async' parameter was deprecated.
+* The locations of resources have been split between upstream libraries, now in
+  resources/lib/, local libaries in resources/src/, and local forks of upstream
+  libraries, also in resources/src/.
+* BREAKING CHANGE: The automatically-generated function closure with which
+  ResourceLoader wraps all modules' JavaScript code now binds the identifier
+  names 'jQuery' and '$' to the jQuery object of the version of jQuery that is
+  bundled with MediaWiki. If you bind these names to other objects in global
+  scope (like Zepto.js or document.querySelectorAll, for example) you will need
+  to use different names to or re-bind them at the top of each
+  ResourceLoader-loaded module.
+* (bug 52342) Preference "Remember my login" was removed.
+* The skin autodiscovery mechanism has been deprecated and will be removed in
+  MediaWiki 1.25. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery
+  for migration guide for creators and users of custom skins that relied on it.
+
+==== Removed classes ====
+* FakeMemCachedClient (deprecated in 1.18)
+* RdfMetaData (unused)
+* TitleDependency (unused)
+* TitleListDependency (unused)
+* WikiError (deprecated in 1.17)
+* WikiXmlError (deprecated in 1.17)
+* WikiErrorMsg (deprecated in 1.17)
+
+==== Renamed classes ====
+* CdbReader_DBA to CdbReaderDBA
+* CdbReader_PHP to CdbReaderPHP
+* CdbWriter_DBA to CdbWriterDBA
+* CdbWriter_PHP to CdbWriterPHP
+* DiffOp_Add to DiffOpAdd
+* DiffOp_Change to DiffOpChange
+* DiffOp_Copy to DiffOpCopy
+* DiffOp_Delete to DiffOpDelete
+* HWLDF_WordAccumulator to HWLDFWordAccumulator
+* LBFactory_Fake to LBFactoryFake
+* LBFactory_Multi to LBFactoryMulti
+* LBFactory_Simple to LBFactorySimple
+* LBFactory_Single to LBFactorySingle
+* LCStore_Accel to LCStoreAccel
+* LCStore_CDB to LCStoreCDB
+* LCStore_DB to LCStoreDB
+* LCStore_Null to LCStoreNull
+* LoadBalancer_Single to LoadBalancerSingle
+* LoadMonitor_MySQL to LoadMonitorMySQL
+* LoadMonitor_Null to LoadMonitorNull
+* LocalisationCache_BulkLoad to LocalisationCacheBulkLoad
+* csvStatsOutput to CsvStatsOutput
+* extensionLanguages to ExtensionLanguages
+* languages to Languages
+* statsOutput to StatsOutput
+* textStatsOutput to TextStatsOutput
+* wikiStatsOutput to WikiStatsOutput
+
+==== Removed methods ====
+* ApiBase::getValidNamespaces() (deprecated in 1.17)
+* ApiMain::setCachePrivate() (deprecated in 1.17)
+* ApiMain::setVaryCookie (deprecated in 1.17)
+* Article::doRedirect() (deprecated in 1.18)
+* Article::doUnwatch() (deprecated in 1.18)
+* Article::doWatch() (deprecated in 1.18)
+* Article::forUpdate() (deprecated in 1.18)
+* Article::markpatrolled() (deprecated in 1.18)
+* Article::unwatch() (deprecated in 1.18)
+* Article::watch() (deprecated in 1.18)
+* Block::clear() (deprecated in 1.18)
+* Block::decodeExpiry() (deprecated in 1.18)
+* Block::encodeExpiry() (deprecated in 1.18)
+* Block::forUpdate() (deprecated in 1.18)
+* Block::infinity() (deprecated in 1.18)
+* Block::load() (deprecated in 1.18)
+* Block::newFromDB() (deprecated in 1.18)
+* Block::normaliseRange() (deprecated in 1.18)
+* Block::parseExpiryInput() (deprecated in 1.18)
+* CategoryViewer::addSubcategory() (deprecated in 1.17)
+* EditPage::spamPage() (deprecated since 1.17)
+* Exif::getFormattedData() (deprecated in 1.18)
+* Exif::makeFormattedData() (deprecated in 1.18)
+* in_string (deprecated in 1.21)
+* Language::convertLinkToAllVariants() (deprecated in 1.17)
+* LanguageConverter::convertLinkToAllVariants() (deprecated in 1.17)
+* Linker::makeBrokenLink() (deprecated in 1.16)
+* Linker::makeBrokenLinkObj() (deprecated in 1.16)
+* Linker::makeColouredLinkObj() (deprecated in 1.16)
+* Linker::makeSizeLinkObj() (deprecated in 1.17)
+* MediaWiki::articleFromTitle() (deprecated in 1.18)
+* ParserOptions::getkin() (deprecated 1.18)
+* ProfilerSimple::getCpuTime (deprecated in 1.20)
+* Revision::revText() (deprecated in 1.17)
+* SkinTemplate::jstext() (deprecated in 1.21)
+* SpecialPage::__call() (deprecated in 1.17)
+* SpecialPage::executePath() (deprecated in 1.18)
+* SpecialPage::exists() (deprecated in 1.18)
+* SpecialPage::file() (deprecated in 1.18)
+* SpecialPage::func() (deprecated in 1.18)
+* SpecialPage::getGroup() (deprecated in 1.18)
+* SpecialPage::getPage() (deprecated in 1.18)
+* SpecialPage::getPageByAlias() (deprecated in 1.18)
+* SpecialPage::getLocalNameFor() (deprecated in 1.18)
+* SpecialPage::getRegularPages() (deprecated in 1.18)
+* SpecialPage::getRestrictedPages() (deprecated in 1.18)
+* SpecialPage::getTitleForAlias() (deprecated in 1.18)
+* SpecialPage::getUsablePages() (deprecated in 1.18)
+* SpecialPage::includable() (deprecated in 1.18)
+* SpecialPage::init()
+* SpecialPage::initAliasList() (deprecated in 1.18)
+* SpecialPage::initList() (deprecated in 1.18)
+* SpecialPage::name() (deprecated in 1.18)
+* SpecialPage::removePage() (deprecated in 1.18)
+* SpecialPage::resolveAlias() (deprecated in 1.18)
+* SpecialPage::resolveAliasWithSubpage() (deprecated in 1.18)
+* SpecialPage::restriction() (deprecated in 1.18)
+* SpecialPage::setGroup() (deprecated in 1.18)
+* SpecialRecentChanges::feedSetup()
+* SpecialRevisionDelete::extractBitField() (deprecated in 1.22)
+* User::getPageRenderingHash() (deprecated in 1.17)
+* WebRequest::getFileSize() (deprecated in 1.17)
+* WebRequest::isPathInfoBad() (deprecated in 1.17)
+* wfGenerateToken (deprecated in 1.20)
+* wfStreamFile (deprecated in 1.19)
+* wfUILang (deprecated in 1.18)
+* WikiPage::createUpdates() (deprecated in 1.18)
+* WikiPage::quickEdit() (deprecated in 1.18)
+* WikiPage::useParserCache() (deprecated in 1.18)
+* WikiPage::viewUpdates() (deprecated in 1.18)
+
+==== Removed globals ====
+* $wgBetterDirectionality (deprecated in 1.18)
+
 == MediaWiki 1.22 ==
 
 === Configuration changes in 1.22 ===
diff --git a/RELEASE-NOTES-1.23 b/RELEASE-NOTES-1.23
deleted file mode 100644 (file)
index d010358..0000000
+++ /dev/null
@@ -1,546 +0,0 @@
-Security reminder: MediaWiki does not require PHP's register_globals. If you
-have it on, turn it '''off''' if you can.
-
-== MediaWiki 1.23 ==
-
-THIS IS NOT A RELEASE YET
-
-MediaWiki 1.23 is an alpha-quality branch and is not recommended for use in
-production.
-
-=== Configuration changes in 1.23 ===
-* Introduced $wgPagePropsHaveSortkey as a backwards-compatibility switch,
-  for using the old schema of the page_props table, in case the respective
-  schema update was not applied.
-* When $wgJobRunRate is higher that zero, jobs are now executed via an
-  asynchronous HTTP request to a MediaWiki entry point. This may require
-  increasing the number of server worker threads. $wgRunJobsAsync has been
-  added to disable this feature if needed, falling back to executing the job
-  on the same process but making the execution synchronously.
-* $wgDebugLogGroups values may be set to an associative array with a
-  'destination' key specifying the log destination. The array may also contain
-  a 'sample' key with a positive integer value N indicating that the log group
-  should be sampled by dispatching one in every N messages on average. The
-  sampling is random.
-* In addition to the current exception log format, MediaWiki now serializes
-  exception metadata to JSON and logs it to the 'exception-json' log group.
-  This makes MediaWiki easier to integrate with log aggregation and analysis
-  tools.
-* $wgSquidServersNoPurge now supports the use of Classless Inter-Domain
-  Routing (CIDR) notation to specify contiguous blocks of IPv4 and/or IPv6
-  addresses that should be trusted to provide X-Forwarded-For headers.
-* Preferences 'watchcreations', 'watchdefault', 'enotifwatchlistpages' ("Add
-  pages I create and files I upload to my watchlist", "Add pages and files I
-  edit to my watchlist", "Email me when a page or file on my watchlist is
-  changed") are now enabled by default. In addition new user accounts' personal
-  and talk pages are now watched by them by default.
-* $wgLBFactoryConf: Class names have had underscores removed. The configuration
-  should be updated if LBFactory_Simple or LBFactory_Multi is configured.
-* $wgPasswordSenderName has been removed and is no longer functional. To set a
-  custom mailer name, the system message 'emailsender' should be modified
-  (default: "{{SITENAME}}").
-* (bug 63269) Email notifications were not correctly handling the
-  [[MediaWiki:Helppage]] message being set to a full URL (the default).
-  If you customized [[MediaWiki:Enotif body]] (the text of email notifications),
-  you'll need to edit it locally to include the URL via the new variable
-  $HELPPAGE instead of the parser functions fullurl and canonicalurl; otherwise
-  you don't have to do anything.
-* $wgDBAhandler was removed as the only class using it was also removed
-* The 'max threads' setting was removed from $wgDBservers.
-* Support for AdminSettings.php has been completely removed. All configuration
-  belongs in LocalSettings.php.
-* $wgSkipSkin, which has been replaceable by $wgSkipSkins since 2005 (r9249), is
-  now formally deprecated.
-* Removed deprecated $wgDisabledActions as it is hardly used anywhere.
-* $wgRateLimitLog has been deprecated and replaced by
-  $wgDebugLogGroup['ratelimit'].
-* $wgLocalInterwikis is an array containing multiple local interwiki prefixes
-  (interwiki prefixes that point back to the current wiki). This effectively
-  allows more than one value of $wgLocalInterwiki to be specified and
-  understood by the parser. The value of $wgLocalInterwiki is automatically
-  prepended to the start of this array.
-* $wgQueryPages has been removed. Query Pages should be added to by using the
-  wgQueryPages hook.
-* $wgHttpOnlyBlacklist has been removed.
-* $wgLicenseTerms has been removed as it was unused.
-* $wgProfileOnly is now deprecated; set the log file in
-  $wgDebugLogGroups['profileoutput'] to replace it.
-* $wgMaxBacklinksInvalidate was removed; use $wgJobBackoffThrottling instead
-* Deprecated ResourceLoaderGetStartupModules hook.
-
-=== New features in 1.23 ===
-* ResourceLoader can utilize the Web Storage API to cache modules client-side.
-  Compared to the browser cache, caching in Web Storage allows ResourceLoader
-  to be more granular about evicting stale modules from the cache while
-  retaining the ability to retrieve multiple modules in a single HTTP request.
-  This capability can be enabled by setting $wgResourceLoaderStorageEnabled to
-  true. This feature is currently considered experimental and should only be
-  enabled with care.
-* (bug 6092) Add expensive parser functions {{REVISIONID:}}, {{REVISIONUSER:}}
-  and {{REVISIONTIMESTAMP:}} (with friends).
-* Add "wgRelevantUserName" to mw.config containing the current
-  Skin::getRelevantUser value.
-* (bug 56033) Add content model to the page information.
-* Added Article::MissingArticleConditions hook to give extensions a chance to
-  hide their (unrelated) log entries.
-* Added LonelyPagesQuery hook to let extensions modify the query used to
-  generate Special:LonelyPages.
-* Added $wgOpenSearchDefaultLimit defining the default number of entries to show
-  on action=opensearch API call.
-* For namespaces with $wgNamespaceProtection (including the MediaWiki
-  namespace), the "protect" tab will be shown only if there are restriction
-  levels available that would restrict editing beyond what
-  $wgNamespaceProtection already applies. The protection form will offer only
-  those protection levels.
-* Added $wgAPIFormatModules, allowing extensions to add additional output
-  formatting modules for the API.
-* (bug 47812) The MediaWiki:Group-user.{css,js} pages can now be used to add
-  custom CSS or JavaScript enabled only for registered users.
-* (bug 52005) Special pages RecentChanges, RecentChangesLinked and Watchlist
-  now include a legend describing the symbols used in lists of changes.
-* Improved the accessibility of the tabs in Special:Preferences.
-* Added ApiBeforeMain hook, roughly equivalent to the BeforeInitialize hook:
-  it's called after everything is set up but before any major processing
-  happens.
-* The jquery.client module now performs a component-wise version comparison in
-  its #test method when strings are used in the browser map: version '1.10' is
-  now correctly considered larger than '1.2'. Using numbers in the version map
-  is not affected.
-* All API modules now support an assert parameter, which can either be
-  'user' or 'bot'. The API will throw an error if the user is not logged
-  in (user) or does not have the 'bot' userright (bot). Based off of the
-  AssertEdit extension by Steve Sanbeg.
-* WikitextContent will now render redirects with the expected "redirect"
-  header, rather than as an ordered list. Code calling Article::viewRedirect
-  can probably be changed to no longer special-case redirects.
-* [[Special:Diff]] was added, allowing users to create internal links to
-  revision comparison pages using syntax such as [[Special:Diff/12345]],
-  [[Special:Diff/12345/prev]] or [[Special:Diff/12345/98765]].
-* New user accounts' personal and talk pages are now watched by them by default.
-* Added SkinTemplateGetLanguageLink hook to allow changing the html of language
-  links.
-* Added MessageCache::get hook as a new way to customize messages across
-  multiple sites.
-* Added jquery.throttle-debounce ResourceLoader module to limit the number of
-  callbacks for frequently occurring events.
-* Special:ProtectedPages shows now a table. The timestamp, the reason and
-  the protecting user is also shown.
-* Added experimental support for using Microsoft SQL Server as the database
-  backend.
-** Added new Microsoft SQL Server-specific configuration variable
-   $wgDBWindowsAuthentication, which makes the web server authenticate against
-   the database server using Integrated Windows Authentication instead of
-   $wgDBuser/$wgDBpassword.
-* HTMLForm 'select', 'selectandother', 'selectorother', 'multiselect', and
-  'radio' fields can now use message keys as labels via the 'options-messages'
-  parameter, which overrides the 'options' parameter.
-* Admins can expire users users passwords manually, or on a schedule using the
-  $wgPasswordExpirationDays configuration setting.
-* Add new hook SendWatchlistEmailNotification, this will be used to determine
-  whether to send a watchlist email notification.
-* (bug 42026) Special:Contributions now includes an option to filter page
-  creations, similar to the topOnly option.
-* Add mediawiki.ui.button styling to all pages so wiki content can use styled
-  buttons.
-* Special:UserLogin/signup now does AJAX checks for invalid and taken usernames,
-  displaying the error live.
-* Added BaseTemplateAfterPortlet hook to allow injecting html after portlets in skins.
-* Support has been added for a JSON based localisation file format. The
-  installer has been updated to use it.
-* Changes to content typography (fonts, line-height, etc.). See
-  https://www.mediawiki.org/wiki/Typography_refresh for further information.
-* The Vector skin's visual treatment of external links has been simplified to a
-  single icon (from nine). This should not affect local rules unless they were
-  re-using these icons, which have now been deleted.
-* ResourceLoader: mw.loader.using() now implements a Promise interface.
-* Add new hook ChangesListInitRows accessed via ChangesList::initChangesListRows.
-  If called by the ChangesList consumer this gives extensions a chance to batch
-  process the result set prior to rendering.
-* A PoolCounterRedis class was added which can be make use of in $wgPoolCounterConf.
-  This requires at least one Redis 2.6+ server.
-* $wgProfileToDatabase was removed. Set $wgProfiler to ProfilerSimpleDB
-  in StartProfiler.php instead of using this.
-* (bug 63444) Made it possible to change the indent string (default: 4 spaces)
-  used by FormatJson::encode().
-
-=== Bug fixes in 1.23 ===
-* (bug 41759) The "updated since last visit" markers (on history pages, recent
-  changes and watchlist) and the talk page message indicator are now correctly
-  updated when the user is viewing old revisions of pages, instead of always
-  acting as if the latest revision was being viewed.
-* (bug 56443) Special:ConfirmEmail no longer shows a "Mail a confirmation code"
-  when the email address is already confirmed. Also, consistently use
-  "confirmed", rather than "authenticated", when messaging whether or not the
-  user has confirmed an email address.
-* (bug 19415) action=render no longer shows section edit links. This affects
-  behavior of several other features where (bogus) section edit links will
-  disappear, such as file description pages loaded via $wgUseInstantCommons or
-  pages transcluded cross-wiki via $wgEnableScaryTranscluding.
-* (bug 56912) Show correct link color on cached result of Special:DeadendPages.
-* Classes TitleListDependency and TitleDependency have been removed, as they
-  have been found unused in core and extensions for a long time.
-* (bug 57098) SpecialPasswordReset now obeys returnto parameter
-* (bug 37812) ResourceLoader will notice when a module's definition changes and
-  recompile it accordingly.
-* (bug 57201) SpecialRecentChangesFilters hook is now executed for feeds.
-* (bug 58640) Fixed a compatibility issue with PCRE 8.34 that caused pages
-  to appear blank or with missing text.
-* (bug 56931) Updated the plural rules to CLDR 24. They are in new format
-  which is detailed in UTS 35 Rev 33. The PHP parser and evaluator as well as
-  the JavaScript evaluator were updated to support the new format. Plural rules
-  for some languages have changed, most notably Russian. Affected software
-  messages have been updated and marked for review at translatewiki.net.
-* (bug 14323) Redirect pages, when viewed with redirect=no, no longer hide the
-  remaining page content.
-* (bug 23542) imagelinks now stores both the redirect and target (as
-  templatelinks does).
-* (bug 58167) The web installer no longer throws an exception when PHP is
-  compiled without support for MySQL yet with support for another DBMS.
-* (bug 56199) Raw option of parser functions must now match complete word,
-  to take effect.
-* (bug 60543) Special:PrefixIndex forgot stripprefix=1 for "Next page" link
-* (bug 29762) Undoing an already-undone edit will now display an appropriate
-  message instead of leading the user to make a null edit.
-* (bug 52659) mediawiki.notification: Notification area remained visible when
-  empty and thus was stealing pointer events from links on the page.
-* (bug 26811) When a DBUnexpectedError occurs, DB server hostnames are now
-  hidden unless $wgShowExceptionDetails is true, and $wgShowDBErrorBacktrace
-  no longer applies in such cases.
-* (bug 60960) Avoid doing file_exist() checks on data: URIs, as they cause
-  warnings to be printed on Windows due to large path length.
-* (bug 48084) Fixed a bug in the installer that could cause $wgLogo to hold
-  the wrong path to the placeholder logo (skins/common/images/wiki.png).
-
-=== Web API changes in 1.23 ===
-* (bug 54884) action=parse&prop=categories now indicates hidden and missing
-  categories.
-* action=query&meta=filerepoinfo now returns additional information for each
-  repo.
-* action=parse&prop=languageshtml was deprecated in 1.18 and will be removed in
-  MediaWiki 1.24.
-* action=parse now has disabletoc flag to disable table of contents in output.
-* (bug 25702) list=allcategories, list=allimages, list=alllinks, list=allpages,
-  list=deletedrevs and list=filearchive did not handle case-sensitivity
-  properly for all parameters.
-* ApiQueryBase::titlePartToKey allows an extra parameter that indicates the
-  namespace in order to properly capitalize the title part.
-* (bug 57874) action=feedcontributions no longer has one item more than limit.
-* All API modules now support an assert parameter. See the new features section
-  for more details.
-* Added prop=contributors to fetch the list of contributors to the page.
-* The following API modules will now return entries where fields have been
-  revision-deleted: list=deletedrevs, list=filearchive, list=recentchanges,
-  list=watchlist. "hidden" indicators will be included, in the same style as is
-  already done for prop=revisions.
-* The following API modules will now return the content of revision-deleted
-  fields, in addition to the "hidden" indicators, if the querying user has the
-  necessary rights: list=logevents, list=usercontribs, prop=imageinfo,
-  prop=revisions.
-* The above modules, where applicable, will now return entries filtered by
-  revision-deleted fields if the querying user has the necessary rights. For
-  example, prop=revisions with rvuser or rvexcludeuser will no longer skip
-  revisions where the user was revision-deleted if the current user has the
-  deletedhistory right.
-* The 'hideuser' right, used when blocking, is no longer necessary or
-  sufficient for seeing contributions with revision-deleted in
-  list=usercontribs.
-* list=watchlist now uses the querying user's rights rather than the wlowner's
-  rights when checking whether wlprop=patrol is allowed.
-* (bug 32151) ApiWatch now has pageset capabilities (titles/pageids/generators).
-  Title parameter is now deprecated.
-* (bug 23005) Added action=revisiondelete.
-* Added siprop=restrictions to API action=query&meta=siteinfo for querying
-  possible page restriction (protection) levels and types.
-* Added prop 'limitreportdata' and 'limitreporthtml' to action=parse.
-* (bug 58627) Provide language names on action=parse&prop=langlinks.
-* Deprecated llurl= in favour of llprop=url for action=query&prop=langlinks.
-* Added llprop=langname and llprop=autonym for action=query&prop=langlinks.
-* prop=redirects is added, to return redirects to the pages in the query.
-* list=allredirects is added, to list all redirects pointing to a namespace.
-* (bug 42026) Added ucshow={new,!new,top,!top} to list=usercontribs.
-  Also added newonly to action=feedcontributions.
-* (bug 42026) Deprecated uctoponly in favor of ucshow=top.
-* list=search no longer has a "srredirects" parameter. Redirects are now
-  included in all searches.
-* Added list=prefixsearch that works like action=opensearch but can be used as
-  a generator.
-* (bug 24782) Various modules will now use unique continuation parameters.
-* (bug 63249) Cache RecentChanges Atom feed in varnish for 15 seconds.
-
-=== Languages updated in 1.23 ===
-
-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.
-
-* Support was added for Algerian Spoken Arabic (arq).
-* Support was added for Riograndenser Hunsrückisch (hrx).
-* Support was added for Northern Luri (lrc).
-
-=== Other changes in 1.23 ===
-* Added pp_sortkey column to page_props table, so pages can be efficiently
-  queried and sorted by property value (bug 58032).
-  See $wgPagePropsHaveSortkey if you want to postpone the schema change.
-* The rc_type field in the recentchanges table has been superseded by a new
-  rc_source field.  The rc_source field is a string representation of the
-  change type where rc_type was a numeric constant.  This field is not yet
-  queried but will be in a future point release of 1.22.
-** Utilize update.php to create and populate this new field.  On larger wiki's
-   which do not wish to update recentchanges table in one large update please
-   review the sql and comments in maintenance/archives/patch-rc_source.sql.
-** The rc_type field of recentchanges will be deprecated in a future point
-   release.
-* The global variable $wgArticle has been removed after a lengthy deprecation.
-* The global functions addButton and insertTags (for mw.toolbar.addButton and
-  mw.toolbar.insertTags) now emits mw.log.warn when accessed.
-* The ExpandTemplates extension has been moved into MediaWiki core.
-* (bug 52812) Removed "Disable search suggestions" from Preference.
-* (bug 52809) Removed "Disable browser page caching" from Preference.
-* Three new modules intended for use by custom skins were added:
-  'mediawiki.skinning.elements', 'mediawiki.skinning.content', and
-  'mediawiki.skinning.interface', representing three levels of standard
-  MediaWiki styling. Previously skin creators wishing to use them had to refer
-  to the file names of appropriate files directly, which is now discouraged.
-* The modules 'skins.vector' and 'skins.monobook' have been renamed to
-  'skins.vector.styles' and 'skins.monobook.styles', respectively,
-  and their definition was changed not to include the common*.css files;
-  the two skins now load the 'mediawiki.skinning.interface' module instead.
-* A page_links_updated field has been added to the page table.
-* SpecialPage::getTitle has been deprecated in favor of
-  SpecialPage::getPageTitle.
-* BREAKING CHANGE: Two potentially backwards-incompatible changes have been made
-  to the 'SpecialWatchlistQuery' hook's last parameter (array $values) to make
-  the hook more consistent with the 'SpecialRecentChangesQuery' one:
-** Several array keys have been renamed: hideMinor → hideminor,
-   hideBots → hidebots, hideAnons → hideanons, hideLiu → hideliu,
-   hidePatrolled → hidepatrolled, hideOwn → hidemyself.
-** The parameter value is now a FormOptions object, not a plain array (array
-   access operators should continue to work, as it implements the ArrayAccess
-   interface).
-* Option to mark hooks as deprecated has been added.
-* (bug 52811) Preference "Enable section editing via [edit] links" was removed.
-* (bug 52813) Preference "Show table of contents (for pages with more than
-  3 headings)" was removed.
-* (bug 52810) Preference "Justify paragraphs" was removed.
-* OutputPage::showErrorPage raises a notice if arguments are incoherent.
-* Thumbnails that keep failing to render in thumb.php will be rate-limited
-  againt further render attempts for 1 hour. $wgAttemptFailureEpoch can be
-  altered to reset all rate-limited thumbnails at once.
-* (bug 56572) Builds of the OOjs and OOjs UI libraries are now available.
-* mw.loader.go and mw.loader.version have been removed.
-* (bug 52815) Preference "Enable simplified search bar (Vector skin only)"
-  was removed.
-* A user_password_expires column has been added to the user table. The User
-  object expects this column to exist. Use update.php to create this new field.
-* The jquery.delayedBind ResourceLoader module was deprecated in favor of the
-  jquery.throttle-debounce module. It will be removed in MediaWiki 1.24.
-* mw.user.bucket has been deprecated.
-* On Special:PrefixIndex, a table#mw-prefixindex-list-table was changed to
-  table.mw-prefixindex-list-table to avoid duplicate ids when the special page
-  is transcluded.
-* (bug 62198) window.$j has been deprecated.
-* Preference "Disable link title conversion" was removed.
-* SpecialRecentChanges no longer includes any functionality for generating feeds
-  - it has been factored out to ApiFeedRecentChanges. Old URLs redirect to new
-  ones.
-* RecentChange::mExtra['lang'] is no longer set and should no longer be used.
-  Extensions should read from other configuration variables, including
-  $wgLocalInterwikis, to identify the current wiki.
-* Sections in the parser test framework have been renamed and the old
-  section names are deprecated.  Please use "!!wikitext" and "!!html"
-  (or "!!html/php") instead of "!!input" and "!!result".  This allows
-  us to extend parser tests to accommodate additional input/output
-  pairs, such as "!!html/parsoid" (for the output of the Parsoid
-  parser, where it differs from the PHP parser).
-* Special:Search no longer has an "include redirects" option on the advanced
-  tab. Redirects are now included in all searches.
-* mediawiki.api.category's getCategories() 'async' parameter was deprecated.
-* The locations of resources have been split between upstream libraries, now in
-  resources/lib/, local libaries in resources/src/, and local forks of upstream
-  libraries, also in resources/src/.
-* BREAKING CHANGE: The automatically-generated function closure with which
-  ResourceLoader wraps all modules' JavaScript code now binds the identifier
-  names 'jQuery' and '$' to the jQuery object of the version of jQuery that is
-  bundled with MediaWiki. If you bind these names to other objects in global
-  scope (like Zepto.js or document.querySelectorAll, for example) you will need
-  to use different names to or re-bind them at the top of each
-  ResourceLoader-loaded module.
-* (bug 52342) Preference "Remember my login" was removed.
-
-==== Removed classes ====
-* FakeMemCachedClient (deprecated in 1.18)
-* RdfMetaData (unused)
-* TitleDependency (unused)
-* TitleListDependency (unused)
-* WikiError (deprecated in 1.17)
-* WikiXmlError (deprecated in 1.17)
-* WikiErrorMsg (deprecated in 1.17)
-
-==== Renamed classes ====
-* CdbReader_DBA to CdbReaderDBA
-* CdbReader_PHP to CdbReaderPHP
-* CdbWriter_DBA to CdbWriterDBA
-* CdbWriter_PHP to CdbWriterPHP
-* DiffOp_Add to DiffOpAdd
-* DiffOp_Change to DiffOpChange
-* DiffOp_Copy to DiffOpCopy
-* DiffOp_Delete to DiffOpDelete
-* HWLDF_WordAccumulator to HWLDFWordAccumulator
-* LBFactory_Fake to LBFactoryFake
-* LBFactory_Multi to LBFactoryMulti
-* LBFactory_Simple to LBFactorySimple
-* LBFactory_Single to LBFactorySingle
-* LCStore_Accel to LCStoreAccel
-* LCStore_CDB to LCStoreCDB
-* LCStore_DB to LCStoreDB
-* LCStore_Null to LCStoreNull
-* LoadBalancer_Single to LoadBalancerSingle
-* LoadMonitor_MySQL to LoadMonitorMySQL
-* LoadMonitor_Null to LoadMonitorNull
-* LocalisationCache_BulkLoad to LocalisationCacheBulkLoad
-* csvStatsOutput to CsvStatsOutput
-* extensionLanguages to ExtensionLanguages
-* languages to Languages
-* statsOutput to StatsOutput
-* textStatsOutput to TextStatsOutput
-* wikiStatsOutput to WikiStatsOutput
-
-==== Removed methods ====
-* ApiBase::getValidNamespaces() (deprecated in 1.17)
-* ApiMain::setCachePrivate() (deprecated in 1.17)
-* ApiMain::setVaryCookie (deprecated in 1.17)
-* Article::doRedirect() (deprecated in 1.18)
-* Article::doUnwatch() (deprecated in 1.18)
-* Article::doWatch() (deprecated in 1.18)
-* Article::forUpdate() (deprecated in 1.18)
-* Article::markpatrolled() (deprecated in 1.18)
-* Article::unwatch() (deprecated in 1.18)
-* Article::watch() (deprecated in 1.18)
-* Block::clear() (deprecated in 1.18)
-* Block::decodeExpiry() (deprecated in 1.18)
-* Block::encodeExpiry() (deprecated in 1.18)
-* Block::forUpdate() (deprecated in 1.18)
-* Block::infinity() (deprecated in 1.18)
-* Block::load() (deprecated in 1.18)
-* Block::newFromDB() (deprecated in 1.18)
-* Block::normaliseRange() (deprecated in 1.18)
-* Block::parseExpiryInput() (deprecated in 1.18)
-* CategoryViewer::addSubcategory() (deprecated in 1.17)
-* EditPage::spamPage() (deprecated since 1.17)
-* Exif::getFormattedData() (deprecated in 1.18)
-* Exif::makeFormattedData() (deprecated in 1.18)
-* in_string (deprecated in 1.21)
-* Language::convertLinkToAllVariants() (deprecated in 1.17)
-* LanguageConverter::convertLinkToAllVariants() (deprecated in 1.17)
-* Linker::makeBrokenLink() (deprecated in 1.16)
-* Linker::makeBrokenLinkObj() (deprecated in 1.16)
-* Linker::makeColouredLinkObj() (deprecated in 1.16)
-* Linker::makeSizeLinkObj() (deprecated in 1.17)
-* MediaWiki::articleFromTitle() (deprecated in 1.18)
-* ParserOptions::getkin() (deprecated 1.18)
-* ProfilerSimple::getCpuTime (deprecated in 1.20)
-* Revision::revText() (deprecated in 1.17)
-* SkinTemplate::jstext() (deprecated in 1.21)
-* SpecialPage::__call() (deprecated in 1.17)
-* SpecialPage::executePath() (deprecated in 1.18)
-* SpecialPage::exists() (deprecated in 1.18)
-* SpecialPage::file() (deprecated in 1.18)
-* SpecialPage::func() (deprecated in 1.18)
-* SpecialPage::getGroup() (deprecated in 1.18)
-* SpecialPage::getPage() (deprecated in 1.18)
-* SpecialPage::getPageByAlias() (deprecated in 1.18)
-* SpecialPage::getLocalNameFor() (deprecated in 1.18)
-* SpecialPage::getRegularPages() (deprecated in 1.18)
-* SpecialPage::getRestrictedPages() (deprecated in 1.18)
-* SpecialPage::getTitleForAlias() (deprecated in 1.18)
-* SpecialPage::getUsablePages() (deprecated in 1.18)
-* SpecialPage::includable() (deprecated in 1.18)
-* SpecialPage::init()
-* SpecialPage::initAliasList() (deprecated in 1.18)
-* SpecialPage::initList() (deprecated in 1.18)
-* SpecialPage::name() (deprecated in 1.18)
-* SpecialPage::removePage() (deprecated in 1.18)
-* SpecialPage::resolveAlias() (deprecated in 1.18)
-* SpecialPage::resolveAliasWithSubpage() (deprecated in 1.18)
-* SpecialPage::restriction() (deprecated in 1.18)
-* SpecialPage::setGroup() (deprecated in 1.18)
-* SpecialRecentChanges::feedSetup()
-* SpecialRevisionDelete::extractBitField() (deprecated in 1.22)
-* User::getPageRenderingHash() (deprecated in 1.17)
-* WebRequest::getFileSize() (deprecated in 1.17)
-* WebRequest::isPathInfoBad() (deprecated in 1.17)
-* wfGenerateToken (deprecated in 1.20)
-* wfStreamFile (deprecated in 1.19)
-* wfUILang (deprecated in 1.18)
-* WikiPage::createUpdates() (deprecated in 1.18)
-* WikiPage::quickEdit() (deprecated in 1.18)
-* WikiPage::useParserCache() (deprecated in 1.18)
-* WikiPage::viewUpdates() (deprecated in 1.18)
-
-==== Removed globals ====
-* $wgBetterDirectionality (deprecated in 1.18)
-
-== Compatibility ==
-
-MediaWiki 1.23 requires PHP 5.3.2 or later.
-
-MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
-support for them is somewhat less mature. There is experimental support for
-Oracle and Microsoft SQL Server.
-
-The supported versions are:
-
-* MySQL 5.0.2 or later
-* PostgreSQL 8.3 or later
-* SQLite 3.3.7 or later
-* Oracle 9.0.1 or later
-* Microsoft SQL Server 2005 (9.00.1399)
-
-== Upgrading ==
-
-1.23 has several database changes since 1.22, and will not work without schema
-updates. Note that due to changes to some very large tables like the revision
-table, the schema update may take quite long (minutes on a medium sized site,
-many hours on a large site).
-
-If upgrading from before 1.11, and you are using a wiki as a commons
-repository, make sure that it is updated as well. Otherwise, errors may arise
-due to database schema changes.
-
-If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
-new database fields are filled with data.
-
-If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to
-1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed
-with MediaWiki 1.21.
-
-Don't forget to always back up your database before upgrading!
-
-See the file UPGRADE for more detailed upgrade instructions.
-
-For notes on 1.22.x and older releases, see HISTORY.
-
-== Online documentation ==
-
-Documentation for both end-users and site administrators is available on
-MediaWiki.org, and is covered under the GNU Free Documentation License (except
-for pages that explicitly state that their contents are in the public domain):
-
-       https://www.mediawiki.org/wiki/Documentation
-
-== Mailing list ==
-
-A mailing list is available for MediaWiki user support and discussion:
-
-       https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
-
-A low-traffic announcements-only list is also available:
-
-       https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
-
-It's highly recommended that you sign up for one of these lists if you're
-going to run a public MediaWiki, so you can be notified of security fixes.
-
-== IRC help ==
-
-There's usually someone online in #mediawiki on irc.freenode.net.
index bb8dd22..72edd76 100644 (file)
@@ -11,6 +11,16 @@ production.
 === Configuration changes in 1.24 ===
 * The server's canonical hostname is available as $wgServerName, which is
   exposed in both mw.config and ApiQuerySiteInfo.
+* Introduced $wgPagePropsHaveSortkey as a backwards-compatibility switch,
+  for using the old schema of the page_props table, in case the respective
+  schema update was not applied.
+* $wgSearchEverythingOnlyLoggedIn was removed as the 'searcheverything'
+  user option was removed. Use $wgNamespacesToBeSearchedDefault instead or
+  if you used to have $wgDefaultUserOptions['searcheverything'] = 1.
+* $wgMasterWaitTimeout has been deprecated.
+* $wgDBClusterTimeout has been removed.
+* $wgProxyKey has been removed. It is no longer used by MediaWiki core.
+  Ensure $wgSecretKey is set in LocalSettings.php.
 
 === New features in 1.24 ===
 * Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
@@ -27,27 +37,88 @@ production.
 * Added a new hook, "SidebarBeforeOutput", to allow to edit the structure of
   the sidebar just before its display.
 * (bug 49156) Added the mediawiki.cookie ResourceLoader module, which wraps
-  jQuery.cookie so that getting/setting a cookie is syntactically and functionally
-  similar to using the WebRequest#getCookie/WebResponse#setcookie methods.
-* (bug 44740) jQuery upgraded from 1.8.3 to 1.11.1.
+  jquery.cookie so that getting/setting a cookie is syntactically and
+  functionally similar to using the WebRequest::getCookie() and
+  WebResponse::setcookie() methods.
+* (bug 44740) jQuery upgraded from 1.8.3 to 1.11.1. A new configuration option,
+  $wgIncludejQueryMigrate, also loads the jQuery Migrate hack to let extensions
+  and gadgets use the long-deprecated functions that were removed in jQuery 1.9.
+  This option is turned off by default, and will be removed in MediaWiki 1.25.
+* (bug 47076) jQuery UI upgraded from 1.8.24 to 1.9.2.
+* Changes to content typography (fonts, etc.). See
+  https://www.mediawiki.org/wiki/Typography_refresh for further information.
+* WikitextContent will now render redirects with the expected "redirect"
+  header, rather than as an ordered list. Code calling Article::viewRedirect
+  can probably be changed to no longer special-case redirects.
+* Header font set to a serif font stack. See
+  https://www.mediawiki.org/wiki/Typography_refresh for further information.
+* (bug 65567) Added a new hook, "BeforeHttpsRedirect", to allow cancellation of
+  the HTTP to HTTPS redirect due to forceHTTPS cookie, userRequires, etc. This
+  is only for page views, since this hook doesn't affect UserLogin, OAuth,
+  CentralAuth, etc. ATTENTION: This hook is likely to be removed soon due to
+  overall design of the system.
+* (bug 17367) It is now possible to add pages to your watchlist from
+  Special:UnwatchedPages without reloading the special page.
+* New methods setVolatile and isVolatile are added to PPFrame, so that
+  extensions such as Cite.php can mark that their output is volatile and
+  shouldn't be cached.
+* (bug 52817) Advanced search options are now saved on the search page itself,
+  rather than in a dedicated pane in the preferences panel.
+* (bug 44591) The dropdown actions menu (little triangle next to page tabs) in
+  the Vector skin has gained a label that should make it more discoverable.
+* MWCryptHKDF added for fast, cryptographically secure random number generation
+  that won't deplete openssl's entropy pool.
+* ResourceLoader: File modules can now provide a skip function that uses an
+  inline feature test to bypass loading of the module.
+* (bug 20210) Special pages may now provide autocompletion of their subpage
+  names in search suggestions. Right now the only useful implementation is in
+  Special:Log, but more are to come.
+* Special:MostLinkedTemplates is no longer limited to transclusions from the
+  Template namespace.
+* Skins can now use 'remoteSkinPath' when defining ResourceLoader modules.
+  This works the same as 'remoteExtPath' but is relative to the skins/ folder
+  instead of the extensions/ folder.
 
 === Bug fixes in 1.24 ===
 * (bug 49116) Footer copyright notice is now always displayed in user language
   rather than content language (same as copyright notice for editing interface).
 * (bug 62258) A bug was fixed in File::getUnscaledThumb when a height
-  restriction was present in the parameters.  Images with both the "frame"
+  restriction was present in the parameters. Images with both the "frame"
   option and a size specification set will now always ignore the provided
   size and display an unscaled image, as the documentation has always
   claimed it would.
 * (bug 39035) Improved Vector skin performance by removing collapsibleNav,
   which used to collapse some sidebar elements by default.
+  This removes -list id suffixes like p-lang-list: instead of using things like
+  #p-lang-list, you can do #p-lang .body ul.
 * (bug 890) Links in Special:RecentChanges and Special:Watchlist no longer
   follow redirects to their target pages.
 * Parser now dies early if called recursively, instead of producing subtle bugs.
+* (bug 14323) Redirect pages, when viewed with redirect=no, no longer hide the
+  remaining page content.
+* (bug 52587) Maintenance script deleteBatch.php no longer follows redirects
+  in the file namespace and delete the file on the target page. It will still
+  however delete the redirect page.
 
 === Web API changes in 1.24 ===
 * action=parse API now supports prop=modules, which provides the list of
   ResourceLoader modules that should be used to enhance the parsed content.
+* action=query&meta=siteinfo&siprop=interwikimap returns a new "protorel"
+  field which is true iff protocol-relative urls can be used to access
+  a particular interwiki map entry.
+* ApiQueryLogEvents now provides logpage, which is the page ID from the
+  logging table, if ids are requested and the user has the permissions.
+* action=edit now requires that appendtext, prependtext, or section=new be used
+  when using the 'redirect' parameter, to prevent clients accidentally
+  overwriting the target page with the content of the redirect.
+* action=logevents will now return an error if both letitle and leprefix are
+  specified.
+* action=logevents has a new parameter, lenamespace, to allow filtering by
+  namespace.
+* action=expandtemplates has a new parameter, prop, and a new output format.
+  The old format is still used if prop isn't provided, but this is deprecated.
+* meta=userinfo can now return the count of unread pages on the watchlist.
+* list=watchlist can now filter by unread status.
 
 === Languages updated in 1.24 ===
 
@@ -60,9 +131,34 @@ changes to languages because of Bugzilla reports.
 * The deprecated function mw.util.toggleToc was removed.
 * The Special:Search hooks SpecialSearchGo and SpecialSearchResultsAppend
   were removed as they were unused.
+* (bug 65477) User::pingLimiter() now has an additional profile point varying
+  by action being used.
 * mediawiki.util.$content no longer supports old versions of the Vector,
   Monobook, Modern and CologneBlue skins that don't yet implement the "mw-body"
   and/or "mw-body-primary" class name in their html.
+* Added pp_sortkey column to page_props table, so pages can be efficiently
+  queried and sorted by property value (bug 58032).
+  See $wgPagePropsHaveSortkey if you want to postpone the schema change.
+* BREAKING CHANGE: The Modern and Cologne Blue skins were moved out of MediaWiki
+  core to their own respective repositories. See also
+  https://www.mediawiki.org/wiki/Skin:Modern and
+  https://www.mediawiki.org/wiki/Skin:CologneBlue.
+* BREAKING CHANGE: Skins built for MediaWiki 1.15 and earlier that do not use
+  the "headelement" template key are no longer supported. Setting
+  $useHeadElement = false; is no longer supported and will not cause old keys
+  like "headlinks", "skinnameclass", etc. to be defined.
+* The deprecated 'SpecialVersionExtensionTypes' hook was removed.
+* (bug 63891) Add 'X-Robots-Tag: noindex' header in action=render pages.
+* SpecialPage no longer supports the syntax for invoking wfSpecial*() functions.
+  Special pages should subclass SpecialPage and implement the execute() method.
+* (bug 63755) The deprecated constants RC_MOVE and RC_MOVE_OVER_REDIRECT were
+  removed.
+* Special:MostLinkedTemplates has been renamed to Special:MostTranscludedPages.
+* The skin autodiscovery mechanism has been deprecated and will be removed in
+  MediaWiki 1.25. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery
+  for migration guide for creators and users of custom skins that relied on it.
+* ResourceLoaderFileModule#getAllStyleFiles now returns all style files and all
+  skin style files used by the module.
 
 ==== Renamed classes ====
 * CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
@@ -143,7 +239,7 @@ Don't forget to always back up your database before upgrading!
 
 See the file UPGRADE for more detailed upgrade instructions.
 
-For notes on 1.22.x and older releases, see HISTORY.
+For notes on 1.23.x and older releases, see HISTORY.
 
 == Online documentation ==
 
index ded3365..8389f00 100644 (file)
@@ -16,7 +16,8 @@
                "wiki": "https://www.mediawiki.org/"
        },
        "require": {
-               "php": ">=5.3.2"
+               "php": ">=5.3.2",
+               "psr/log": "1.0.0"
        },
        "require-dev": {
                "phpunit/phpunit": "*"
@@ -25,6 +26,7 @@
                "ext-fileinfo": "*",
                "ext-mbstring": "*",
                "ext-wikidiff2": "*",
-               "ext-apc": "*"
+               "ext-apc": "*",
+               "monolog/monolog": "*"
        }
 }
index 0c03375..4c2fd89 100644 (file)
@@ -313,11 +313,11 @@ $apiModule: the ApiCreateAccount module calling
 $loginForm: the LoginForm used
 &$result: associative array for API result data
 
-'AfterFinalPageOutput': At the end of OutputPage::output() but before final
-ob_end_flush() which will send the buffered output to the client. This allows
-for last-minute modification of the output within the buffer by using
-ob_get_clean().
-&$output: OutputPage object
+'AfterFinalPageOutput': Nearly at the end of OutputPage::output() but
+before OutputPage::sendCacheControl() and final ob_end_flush() which
+will send the buffered output to the client. This allows for last-minute
+modification of the output within the buffer by using ob_get_clean().
+$output: The OutputPage object where output() was called
 
 'AfterImportPage': When a page import is completed.
 $title: Title under which the revisions were imported
@@ -326,12 +326,6 @@ $revCount: Number of revisions in the XML file
 $sRevCount: Number of successfully imported revisions
 $pageInfo: associative array of page information
 
-'AfterFinalPageOutput': Nearly at the end of OutputPage::output() but
-before OutputPage::sendCacheControl() and final ob_end_flush() which
-will send the buffered output to the client. This allows for last-minute
-modification of the output within the buffer by using ob_get_clean().
-$output: The OutputPage object where output() was called
-
 'AjaxAddScript': Called in output page just before the initialisation
 of the javascript ajax engine. The hook is only called when ajax
 is enabled ( $wgUseAjax = true; ).
@@ -638,6 +632,7 @@ $title: Title corresponding to the article restored
 $create: Whether or not the restoration caused the page to be created (i.e. it
   didn't exist before).
 $comment: The comment associated with the undeletion.
+$oldPageId: ID of page previously deleted (from archive table)
 
 'ArticleUndeleteLogEntry': When a log entry is generated but not yet saved.
 $pageArchive: the PageArchive object
@@ -733,6 +728,13 @@ $mediaWiki: Mediawiki object
 &$out: OutputPage object
 &$skin: Skin object
 
+'BeforeHttpsRedirect': Prior to forcing HTTP->HTTPS redirect. Gives a chance to
+override how the redirect is output by modifying, or by returning false, and
+letting standard HTTP rendering take place.
+ATTENTION: This hook is likely to be removed soon due to overall design of the system.
+$context: IContextSource object
+&$redirect: string URL, modifiable
+
 'BeforePageRedirect': Prior to sending an HTTP redirect. Gives a chance to
 override how the redirect is output by modifying, or by returning false and
 taking over the output.
@@ -2037,6 +2039,16 @@ $oldtext : the text of the article before editing
 $subject : subject of the new section
 &$text : text of the new section
 
+'PostLoginRedirect': Modify the post login redirect behavior.
+Occurs after signing up or logging in, allows for interception of redirect.
+&$returnTo: The page name to return to, as a string
+&$returnToQuery: array of url parameters, mapping parameter names to values
+&$type: type of login redirect as string;
+  error: display a return to link ignoring $wgRedirectOnLogin
+  signup: display a return to link using $wgRedirectOnLogin if needed
+  success: display a return to link using $wgRedirectOnLogin if needed
+  successredirect: send an HTTP redirect using $wgRedirectOnLogin if needed
+
 'PreferencesGetLegend': Override the text used for the <legend> of a
 preferences section.
 $form: the PreferencesForm object. This is a ContextSource as well
@@ -2184,6 +2196,14 @@ $title : Current Title object being displayed in search results.
 'SearchableNamespaces': An option to modify which namespaces are searchable.
 &$arr : Array of namespaces ($nsId => $name) which will be used.
 
+'SelfLinkBegin': Called before a link to the current article is displayed to
+allow the display of the link to be customized.
+$nt: the Title object
+&$html: html to display for the link
+&$trail: optional text to display before $html
+&$prefix: optional text to display after $html
+&$ret: the value to return if your hook returns false
+
 'SetupAfterCache': Called in Setup.php, after cache objects are set
 
 'ShowMissingArticle': Called when generating the output for a non-existent page.
@@ -2506,11 +2526,6 @@ $term: string of search term
 Special:Upload.
 $form: The SpecialUpload object
 
-'SpecialVersionExtensionTypes': Called when generating the extensions credits,
-use this to change the tables headers. Deprecated since MediaWiki 1.17, use the
-ExtensionTypes hook instead.
-$extTypes: associative array of extensions types
-
 'SpecialVersionVersionUrl': Called when building the URL for Special:Version.
 $wgVersion: Current $wgVersion for you to use
 &$versionUrl: Raw url to link to (eg: release notes)
index f9473b8..c383af9 100644 (file)
@@ -1,6 +1,7 @@
 The Makefile, package.json, scripts, styleguide-template, and
-mediawiki.ui/styleguide.md files and directories in here support the automatic
-generation of CSS documentation from the source LESS files using kss for
+mediawiki.ui/styleguide.md files and directories here and in
+resources/src/mediawiki.ui/ support the automatic generation
+of CSS documentation from the source LESS files using kss for
 node.js, https://github.com/kneath/kss
 
 To build and open in your web browser, run:
index 99f3e4f..cb95197 100644 (file)
@@ -28,6 +28,7 @@
                        {{html overview}}
                {{else}}
                        {{#eachSection rootNumber}}
+                       <section>
                                {{#whenDepth 1}}
                                        <h1>{{ reference }}.0 - {{ header }}</h1>
                                {{else}}
                                {{/whenDepth}}
                                {{#ifAny markup modifiers}}
                                                <div>{{html description}}</div>
-                                               <strong>Default styling</strong><br>
-                                               {{modifierMarkup}}
+                                               <h4>Default styling</h4>
+                                               <blockquote>{{modifierMarkup}}</blockquote>
                                                {{#eachModifier}}
-                                               {{html description}}<br>
-                                               <p>{{name}}</p>
-                                               {{modifierMarkup}}
+                                                       <h4>{{name}}</h4>
+                                                       {{html description}}
+                                                       <blockquote>{{modifierMarkup}}</blockquote>
                                                {{/eachModifier}}
                                                <pre class="prettyprint lang-html">{{markup}}</pre>
                                {{else}}
@@ -53,6 +54,7 @@
                                                        {{html description}}
                                                {{/if}}
                                {{/ifAny}}
+                       </section>
                        {{/eachSection}}
                {{/if}}
        </article>
index 3bb1563..2d3240b 100644 (file)
  * @internal documentation reviewed 15 Mar 2010
  */
 class Article implements Page {
-       /**@{{
-        * @private
-        */
-
-       /**
-        * The context this Article is executed in
-        * @var IContextSource $mContext
-        */
+       /** @var IContextSource The context this Article is executed in */
        protected $mContext;
 
-       /**
-        * The WikiPage object of this instance
-        * @var WikiPage $mPage
-        */
+       /** @var WikiPage The WikiPage object of this instance */
        protected $mPage;
 
-       /**
-        * ParserOptions object for $wgUser articles
-        * @var ParserOptions $mParserOptions
-        */
+       /** @var ParserOptions ParserOptions object for $wgUser articles */
        public $mParserOptions;
 
        /**
-        * Text of the revision we are working on
-        * @var string $mContent
+        * @var string Text of the revision we are working on
+        * @todo BC cruft
         */
-       var $mContent;                    // !< #BC cruft
+       public $mContent;
 
        /**
-        * Content of the revision we are working on
-        * @var Content
+        * @var Content Content of the revision we are working on
         * @since 1.21
         */
-       var $mContentObject;              // !<
+       protected $mContentObject;
 
-       /**
-        * Is the content ($mContent) already loaded?
-        * @var bool $mContentLoaded
-        */
-       var $mContentLoaded = false;      // !<
+       /** @var bool Is the content ($mContent) already loaded? */
+       protected $mContentLoaded = false;
 
-       /**
-        * The oldid of the article that is to be shown, 0 for the
-        * current revision
-        * @var int|null $mOldId
-        */
-       var $mOldId;                      // !<
+       /** @var int|null The oldid of the article that is to be shown, 0 for the current revision */
+       protected $mOldId;
 
-       /**
-        * Title from which we were redirected here
-        * @var Title $mRedirectedFrom
-        */
-       var $mRedirectedFrom = null;
+       /** @var Title Title from which we were redirected here */
+       protected $mRedirectedFrom = null;
 
-       /**
-        * URL to redirect to or false if none
-        * @var string|bool $mRedirectUrl
-        */
-       var $mRedirectUrl = false;        // !<
+       /** @var string|bool URL to redirect to or false if none */
+       protected $mRedirectUrl = false;
 
-       /**
-        * Revision ID of revision we are working on
-        * @var int $mRevIdFetched
-        */
-       var $mRevIdFetched = 0;           // !<
+       /** @var int Revision ID of revision we are working on */
+       protected $mRevIdFetched = 0;
 
-       /**
-        * Revision we are working on
-        * @var Revision $mRevision
-        */
-       var $mRevision = null;
-
-       /**
-        * ParserOutput object
-        * @var ParserOutput $mParserOutput
-        */
-       var $mParserOutput;
+       /** @var Revision Revision we are working on */
+       protected $mRevision = null;
 
-       /**@}}*/
+       /** @var ParserOutput */
+       public $mParserOutput;
 
        /**
         * Constructor and clear the article
@@ -1366,7 +1328,7 @@ class Article implements Page {
                $outputPage = $this->getContext()->getOutput();
                $outputPage->addSubtitle( "<div id=\"mw-{$infomsg}\">" . wfMessage( $infomsg,
                        $td )->rawParams( $userlinks )->params( $revision->getID(), $tddate,
-                       $tdtime, $revision->getUser() )->parse() . "</div>" );
+                       $tdtime, $revision->getUser() )->rawParams( Linker::revComment( $revision, true, true ) )->parse() . "</div>" );
 
                $lnk = $current
                        ? wfMessage( 'currentrevisionlink' )->escaped()
@@ -1532,6 +1494,7 @@ class Article implements Page {
         * Handle action=render
         */
        public function render() {
+               $this->getContext()->getRequest()->response()->header( 'X-Robots-Tag: noindex' );
                $this->getContext()->getOutput()->setArticleBodyOnly( true );
                $this->getContext()->getOutput()->enableSectionEditLinks( false );
                $this->view();
index 338274c..d547cb1 100644 (file)
@@ -392,7 +392,9 @@ $wgAutoloadLocalClasses = array(
 
        # includes/config
        'Config' => 'includes/config/Config.php',
-       'GlobalConfig' => 'includes/config/GlobalConfig.php',
+       'ConfigException' => 'includes/config/ConfigException.php',
+       'ConfigFactory' => 'includes/config/ConfigFactory.php',
+       'GlobalVarConfig' => 'includes/config/GlobalVarConfig.php',
 
        # includes/content
        'AbstractContent' => 'includes/content/AbstractContent.php',
@@ -934,7 +936,7 @@ $wgAutoloadLocalClasses = array(
 
        # includes/specials
        'ActiveUsersPager' => 'includes/specials/SpecialActiveusers.php',
-       'AllmessagesTablePager' => 'includes/specials/SpecialAllmessages.php',
+       'AllMessagesTablePager' => 'includes/specials/SpecialAllMessages.php',
        'AncientPagesPage' => 'includes/specials/SpecialAncientpages.php',
        'BlockListPager' => 'includes/specials/SpecialBlockList.php',
        'BrokenRedirectsPage' => 'includes/specials/SpecialBrokenRedirects.php',
@@ -978,9 +980,9 @@ $wgAutoloadLocalClasses = array(
        'RandomPage' => 'includes/specials/SpecialRandompage.php',
        'ShortPagesPage' => 'includes/specials/SpecialShortpages.php',
        'SpecialActiveUsers' => 'includes/specials/SpecialActiveusers.php',
-       'SpecialAllmessages' => 'includes/specials/SpecialAllmessages.php',
+       'SpecialAllMessages' => 'includes/specials/SpecialAllMessages.php',
        'SpecialAllMyUploads' => 'includes/specials/SpecialMyRedirectPages.php',
-       'SpecialAllpages' => 'includes/specials/SpecialAllpages.php',
+       'SpecialAllPages' => 'includes/specials/SpecialAllPages.php',
        'SpecialBlankpage' => 'includes/specials/SpecialBlankpage.php',
        'SpecialBlock' => 'includes/specials/SpecialBlock.php',
        'SpecialBlockList' => 'includes/specials/SpecialBlockList.php',
@@ -1111,6 +1113,7 @@ $wgAutoloadLocalClasses = array(
        'HashtableReplacer' => 'includes/utils/StringUtils.php',
        'IP' => 'includes/utils/IP.php',
        'MWCryptRand' => 'includes/utils/MWCryptRand.php',
+       'MWCryptHKDF' => 'includes/utils/MWCryptHKDF.php',
        'MWFunction' => 'includes/utils/MWFunction.php',
        'RegexlikeReplacer' => 'includes/utils/StringUtils.php',
        'ReplacementArray' => 'includes/utils/StringUtils.php',
@@ -1177,14 +1180,10 @@ $wgAutoloadLocalClasses = array(
        'MyLocalSettingsGenerator' => 'mw-config/overrides.php',
 
        # skins
-       'CologneBlueTemplate' => 'skins/CologneBlue.php',
-       'ModernTemplate' => 'skins/Modern.php',
-       'MonoBookTemplate' => 'skins/MonoBook.php',
-       'SkinCologneBlue' => 'skins/CologneBlue.php',
-       'SkinModern' => 'skins/Modern.php',
-       'SkinMonoBook' => 'skins/MonoBook.php',
-       'SkinVector' => 'skins/Vector.php',
-       'VectorTemplate' => 'skins/Vector.php',
+       'MonoBookTemplate' => 'skins/monobook/MonoBook.php',
+       'SkinMonoBook' => 'skins/monobook/MonoBook.php',
+       'SkinVector' => 'skins/vector/Vector.php',
+       'VectorTemplate' => 'skins/vector/Vector.php',
 );
 
 class AutoLoader {
index 305a8e5..49818e6 100644 (file)
  */
 
 class CategoryViewer extends ContextSource {
-       var $limit, $from, $until,
-               $articles, $articles_start_char,
-               $children, $children_start_char,
-               $showGallery, $imgsNoGalley,
-               $imgsNoGallery_start_char,
-               $imgsNoGallery;
+       /** @var int */
+       public $limit;
 
-       /**
-        * @var array
-        */
-       var $nextPage;
+       /** @var array */
+       protected $from;
 
-       /**
-        * @var array
-        */
-       var $flip;
+       /** @var array */
+       protected $until;
 
-       /**
-        * @var Title
-        */
-       var $title;
+       /** @var string[] */
+       public $articles;
 
-       /**
-        * @var Collation
-        */
-       var $collation;
+       /** @var array */
+       public $articles_start_char;
 
-       /**
-        * @var ImageGallery
-        */
-       var $gallery;
+       /** @var array */
+       protected $children;
 
-       /**
-        * Category object for this page
-        * @var Category
-        */
+       /** @var array */
+       protected $children_start_char;
+
+       /** @var bool */
+       protected $showGallery;
+
+       /** @var array */
+       protected $imgsNoGallery_start_char;
+
+       /** @var array */
+       protected $imgsNoGallery;
+
+       /** @var array */
+       protected $nextPage;
+
+       /** @var array */
+       protected $flip;
+
+       /** @var Title */
+       protected $title;
+
+       /** @var Collation */
+       protected $collation;
+
+       /** @var ImageGallery */
+       protected $gallery;
+
+       /** @var Category Category object for this page. */
        private $cat;
 
-       /**
-        * The original query array, to be used in generating paging links.
-        * @var array
-        */
+       /** @var array The original query array, to be used in generating paging links. */
        private $query;
 
        /**
-        * Constructor
-        *
         * @since 1.19 $context is a second, required parameter
         * @param Title $title
         * @param IContextSource $context
index d3dd51a..28db8a1 100644 (file)
@@ -101,21 +101,20 @@ class ChangeTags {
                                'specified when adding a tag to a change!' );
                }
 
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbw = wfGetDB( DB_MASTER );
 
                // Might as well look for rcids and so on.
                if ( !$rc_id ) {
                        // Info might be out of date, somewhat fractionally, on slave.
-                       $dbr = wfGetDB( DB_MASTER );
                        if ( $log_id ) {
-                               $rc_id = $dbr->selectField(
+                               $rc_id = $dbw->selectField(
                                        'recentchanges',
                                        'rc_id',
                                        array( 'rc_logid' => $log_id ),
                                        __METHOD__
                                );
                        } elseif ( $rev_id ) {
-                               $rc_id = $dbr->selectField(
+                               $rc_id = $dbw->selectField(
                                        'recentchanges',
                                        'rc_id',
                                        array( 'rc_this_oldid' => $rev_id ),
@@ -124,14 +123,13 @@ class ChangeTags {
                        }
                } elseif ( !$log_id && !$rev_id ) {
                        // Info might be out of date, somewhat fractionally, on slave.
-                       $dbr = wfGetDB( DB_MASTER );
-                       $log_id = $dbr->selectField(
+                       $log_id = $dbw->selectField(
                                'recentchanges',
                                'rc_logid',
                                array( 'rc_id' => $rc_id ),
                                __METHOD__
                        );
-                       $rev_id = $dbr->selectField(
+                       $rev_id = $dbw->selectField(
                                'recentchanges',
                                'rc_this_oldid',
                                array( 'rc_id' => $rc_id ),
@@ -146,7 +144,9 @@ class ChangeTags {
                );
 
                ## Update the summary row.
-               $prevTags = $dbr->selectField( 'tag_summary', 'ts_tags', $tsConds, __METHOD__ );
+               // $prevTags can be out of date on slaves, especially when addTags is called consecutively,
+               // causing loss of tags added recently in tag_summary table.
+               $prevTags = $dbw->selectField( 'tag_summary', 'ts_tags', $tsConds, __METHOD__ );
                $prevTags = $prevTags ? $prevTags : '';
                $prevTags = array_filter( explode( ',', $prevTags ) );
                $newTags = array_unique( array_merge( $prevTags, $tags ) );
@@ -158,7 +158,6 @@ class ChangeTags {
                        return false;
                }
 
-               $dbw = wfGetDB( DB_MASTER );
                $dbw->replace(
                        'tag_summary',
                        array( 'ts_rev_id', 'ts_rc_id', 'ts_log_id' ),
index 4e0c6a4..71adb09 100644 (file)
@@ -523,28 +523,6 @@ class IcuCollation extends Collation {
                return count( $this->firstLetterData['chars'] );
        }
 
-       /**
-        * Do a binary search, and return the index of the largest item that sorts
-        * less than or equal to the target value.
-        *
-        * @deprecated since 1.23; use ArrayUtils::findLowerBound() instead
-        *
-        * @param array $valueCallback A function to call to get the value with
-        *     a given array index.
-        * @param int $valueCount The number of items accessible via $valueCallback,
-        *     indexed from 0 to $valueCount - 1
-        * @param array $comparisonCallback A callback to compare two values, returning
-        *     -1, 0 or 1 in the style of strcmp().
-        * @param string $target The target value to find.
-        *
-        * @return int|bool The item index of the lower bound, or false if the target value
-        *     sorts before all items.
-        */
-       function findLowerBound( $valueCallback, $valueCount, $comparisonCallback, $target ) {
-               wfDeprecated( __METHOD__, '1.23' );
-               return ArrayUtils::findLowerBound( $valueCallback, $valueCount, $comparisonCallback, $target );
-       }
-
        static function isCjk( $codepoint ) {
                foreach ( self::$cjkBlocks as $block ) {
                        if ( $codepoint >= $block[0] && $codepoint <= $block[1] ) {
index e011d4a..31ce080 100644 (file)
@@ -60,11 +60,14 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 $wgConf = new SiteConfiguration;
 
 /**
- * Class name to use for accessing Config.
- * Currently only 'GlobalConfig' is available
+ * Registry of factory functions to create config objects:
+ * The 'main' key must be set, and the value should be a valid
+ * callable.
  * @since 1.23
  */
-$wgConfigClass = 'GlobalConfig';
+$wgConfigRegistry = array(
+       'main' => 'GlobalVarConfig::newInstance'
+);
 
 /**
  * MediaWiki version number
@@ -1278,7 +1281,7 @@ $wgDjvuTxt = null;
  * Path of the djvutoxml executable
  * This works like djvudump except much, much slower as of version 3.5.
  *
- * For now we  recommend you use djvudump instead. The djvuxml output is
+ * For now we recommend you use djvudump instead. The djvuxml output is
  * probably more stable, so we'll switch back to it as soon as they fix
  * the efficiency problem.
  * http://sourceforge.net/tracker/index.php?func=detail&aid=1704049&group_id=32953&atid=406583
@@ -1292,7 +1295,7 @@ $wgDjvuToXML = null;
 
 /**
  * Shell command for the DJVU post processor
- * Default: pnmtopng, since ddjvu generates ppm output
+ * Default: pnmtojpeg, since ddjvu generates ppm output
  * Set this to false to output the ppm file directly.
  */
 $wgDjvuPostProcessor = 'pnmtojpeg';
@@ -1707,6 +1710,7 @@ $wgLBFactoryConf = array( 'class' => 'LBFactorySimple' );
 
 /**
  * How long to wait for a slave to catch up to the master
+ * @deprecated since 1.24
  */
 $wgMasterWaitTimeout = 10;
 
@@ -1735,11 +1739,6 @@ $wgDBerrorLog = false;
  */
 $wgDBerrorLogTZ = false;
 
-/**
- * When to give an error message
- */
-$wgDBClusterTimeout = 10;
-
 /**
  * Scale load balancer polling time so that under overload conditions, the
  * database server receives a SHOW STATUS query at an average interval of this
@@ -3218,6 +3217,15 @@ $wgResourceLoaderMinifierMaxLineLength = 1000;
  */
 $wgIncludeLegacyJavaScript = true;
 
+/**
+ * Whether to include the jQuery Migrate library, which lets legacy JS that
+ * requires jQuery 1.8.x to work and breaks with 1.9.x+.
+ *
+ * @since 1.24
+ * @deprecated since 1.24, to be removed in 1.25
+ */
+$wgIncludejQueryMigrate = false;
+
 /**
  * Whether to preload the mediawiki.util module as blocking module in the top
  * queue.
@@ -3357,7 +3365,6 @@ $wgResourceLoaderLESSFunctions = array(
  */
 $wgResourceLoaderLESSImportPaths = array(
        "$IP/resources/src/mediawiki.less/",
-       "$IP/skins/vector/",
 );
 
 /**
@@ -4815,11 +4822,6 @@ $wgSecretKey = false;
  */
 $wgProxyList = array();
 
-/**
- * @deprecated since 1.14
- */
-$wgProxyKey = false;
-
 /** @} */ # end of proxy scanner settings
 
 /************************************************************************//**
@@ -5320,25 +5322,6 @@ $wgNamespacesToBeSearchedDefault = array(
        NS_MAIN => true,
 );
 
-/**
- * Namespaces to be searched when user clicks the "Help" tab
- * on Special:Search.
- *
- * Same format as $wgNamespacesToBeSearchedDefault.
- */
-$wgNamespacesToBeSearchedHelp = array(
-       NS_PROJECT => true,
-       NS_HELP => true,
-);
-
-/**
- * If set to true the 'searcheverything' preference will be effective only for
- * logged-in users.
- * Useful for big wikis to maintain different search profiles for anonymous and
- * logged-in users.
- */
-$wgSearchEverythingOnlyLoggedIn = false;
-
 /**
  * Disable the internal MySQL-based search, to allow it to be
  * implemented by an extension instead.
@@ -5608,7 +5591,7 @@ $wgRC2UDPOmitBots = false;
  * The common options are:
  *   * 'uri' -- the address to which the notices are to be sent.
  *   * 'formatter' -- the class name (implementing RCFeedFormatter) which will
- *     produce the text to send.
+ *     produce the text to send. This can also be an object of the class.
  *   * 'omit_bots' -- whether the bot edits should be in the feed
  *   * 'omit_anon' -- whether anonymous edits should be in the feed
  *   * 'omit_user' -- whether edits by registered users should be in the feed
@@ -5789,24 +5772,42 @@ $wgUnwatchedPageThreshold = false;
  * To register a new one:
  * @code
  * $wgRecentChangesFlags['flag'] => array(
+ *   // message for the letter displayed next to rows on changes lists
  *   'letter' => 'letter-msg',
- *   'title' => 'tooltip-msg'
+ *   // message for the tooltip of the letter
+ *   'title' => 'tooltip-msg',
+ *   // optional (defaults to 'tooltip-msg'), message to use in the legend box
+ *   'legend' => 'legend-msg',
+ *   // optional (defaults to 'flag'), CSS class to put on changes lists rows
+ *   'class' => 'css-class',
  * );
  * @endcode
  *
- * Optional 'class' allows to set a css class different than the flag name.
- *
  * @since 1.22
  */
 $wgRecentChangesFlags = array(
-       'newpage' => array( 'letter' => 'newpageletter',
-               'title' => 'recentchanges-label-newpage' ),
-       'minor' => array( 'letter' => 'minoreditletter',
-               'title' => 'recentchanges-label-minor', 'class' => 'minoredit' ),
-       'bot' => array( 'letter' => 'boteditletter',
-               'title' => 'recentchanges-label-bot', 'class' => 'botedit' ),
-       'unpatrolled' => array( 'letter' => 'unpatrolledletter',
-               'title' => 'recentchanges-label-unpatrolled' ),
+       'newpage' => array(
+               'letter' => 'newpageletter',
+               'title' => 'recentchanges-label-newpage',
+               'legend' => 'recentchanges-legend-newpage',
+       ),
+       'minor' => array(
+               'letter' => 'minoreditletter',
+               'title' => 'recentchanges-label-minor',
+               'legend' => 'recentchanges-legend-minor',
+               'class' => 'minoredit',
+       ),
+       'bot' => array(
+               'letter' => 'boteditletter',
+               'title' => 'recentchanges-label-bot',
+               'legend' => 'recentchanges-legend-bot',
+               'class' => 'botedit',
+       ),
+       'unpatrolled' => array(
+               'letter' => 'unpatrolledletter',
+               'title' => 'recentchanges-label-unpatrolled',
+               'legend' => 'recentchanges-legend-unpatrolled',
+       ),
 );
 
 /** @} */ # end RC/watchlist }
@@ -6089,7 +6090,9 @@ $wgAutoloadAttemptLowercase = true;
  * view said file. When the 'license-name' key is specified, this file is
  * interpreted as wikitext.
  *
- * - $type: One of 'specialpage', 'parserhook', 'variable', 'media' or 'other'.
+ * - $type: One of 'specialpage', 'parserhook', 'variable', 'media', 'antispam',
+ *    'skin', 'api', or 'other', or any additional types as specified through the
+ *    ExtensionTypes hook as used in SpecialVersion::getExtensionTypes().
  *
  * - author: A string or an array of strings. Authors can be linked using
  *    the regular wikitext link syntax. To have an internationalized version of
@@ -7074,6 +7077,24 @@ $wgCompiledFiles = array();
  */
 $wgPagePropsHaveSortkey = true;
 
+/**
+ * Port where you have HTTPS running
+ * Supports HTTPS on non-standard ports
+ * @see bug 65184
+ * @since 1.24
+ */
+$wgHttpsPort = 443;
+
+/**
+ * Secret and algorithm for hmac-based key derivation function (fast,
+ * cryptographically secure random numbers).
+ * This should be set in LocalSettings.php, otherwise wgSecretKey will
+ * be used.
+ * @since 1.24
+ */
+$wgHKDFSecret = false;
+$wgHKDFAlgorithm = 'sha256';
+
 /**
  * For really cool vim folding this needs to be at the end:
  * vim: foldmarker=@{,@} foldmethod=marker
index 19801ec..ce4ede3 100644 (file)
@@ -177,9 +177,7 @@ define( 'MW_DATE_ISO', 'ISO 8601' );
  */
 define( 'RC_EDIT', 0 );
 define( 'RC_NEW', 1 );
-define( 'RC_MOVE', 2 ); // obsolete
 define( 'RC_LOG', 3 );
-define( 'RC_MOVE_OVER_REDIRECT', 4 ); // obsolete
 define( 'RC_EXTERNAL', 5 );
 /**@}*/
 
index 8a63786..14329d3 100644 (file)
  */
 
 class DeprecatedGlobal extends StubObject {
-       // The m's are to stay consistent with parent class.
-       protected $mRealValue, $mVersion;
+       protected $realValue, $version;
 
        function __construct( $name, $realValue, $version = false ) {
                parent::__construct( $name );
-               $this->mRealValue = $realValue;
-               $this->mVersion = $version;
+               $this->realValue = $realValue;
+               $this->version = $version;
        }
 
+       // @codingStandardsIgnoreStart
+       // PSR2.Methods.MethodDeclaration.Underscore
+       // PSR2.Classes.PropertyDeclaration.ScopeMissing
        function _newObject() {
+
                /* Put the caller offset for wfDeprecated as 6, as
                 * that gives the function that uses this object, since:
                 * 1 = this function ( _newObject )
@@ -48,7 +51,8 @@ class DeprecatedGlobal extends StubObject {
                 * sequences for this method, but that seems to be
                 * rather unlikely.
                 */
-               wfDeprecated( '$' . $this->mGlobal, $this->mVersion, false, 6 );
-               return $this->mRealValue;
+               wfDeprecated( '$' . $this->global, $this->version, false, 6 );
+               return $this->realValue;
        }
+       // @codingStandardsIgnoreEnd
 }
index 7be6274..98e0ec4 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Page edition user interface.
+ * User interface for page editing.
  *
  * 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
@@ -175,8 +175,9 @@ class EditPage {
         * The cookie will be removed instantly if the JavaScript runs.
         *
         * Otherwise, though, we don't want the cookies to accumulate.
-        * RFC 2109 ( https://www.ietf.org/rfc/rfc2109.txt ) specifies a possible limit of only 20 cookies per domain.
-        * This still applies at least to some versions of IE without full updates:
+        * RFC 2109 ( https://www.ietf.org/rfc/rfc2109.txt ) specifies a possible
+        * limit of only 20 cookies per domain. This still applies at least to some
+        * versions of IE without full updates:
         * https://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx
         *
         * A value of 20 minutes should be enough to take into account slow loads and minor
@@ -184,65 +185,160 @@ class EditPage {
         */
        const POST_EDIT_COOKIE_DURATION = 1200;
 
-       /**
-        * @var Article
-        */
-       var $mArticle;
+       /** @var Article */
+       public $mArticle;
 
-       /**
-        * @var Title
-        */
-       var $mTitle;
+       /** @var Title */
+       public $mTitle;
+
+       /** @var null|Title */
        private $mContextTitle = null;
-       var $action = 'submit';
-       var $isConflict = false;
-       var $isCssJsSubpage = false;
-       var $isCssSubpage = false;
-       var $isJsSubpage = false;
-       var $isWrongCaseCssJsPage = false;
-       var $isNew = false; // new page or new section
-       var $deletedSinceEdit;
-       var $formtype;
-       var $firsttime;
-       var $lastDelete;
-       var $mTokenOk = false;
-       var $mTokenOkExceptSuffix = false;
-       var $mTriedSave = false;
-       var $incompleteForm = false;
-       var $tooBig = false;
-       var $kblength = false;
-       var $missingComment = false;
-       var $missingSummary = false;
-       var $allowBlankSummary = false;
-       var $autoSumm = '';
-       var $hookError = '';
-       #var $mPreviewTemplates;
-
-       /**
-        * @var ParserOutput
-        */
-       var $mParserOutput;
-
-       /**
-        * Has a summary been preset using GET parameter &summary= ?
-        * @var bool
-        */
-       var $hasPresetSummary = false;
-
-       var $mBaseRevision = false;
-       var $mShowSummaryField = true;
+
+       /** @var string */
+       protected $action = 'submit';
+
+       /** @var bool */
+       public $isConflict = false;
+
+       /** @var bool */
+       public $isCssJsSubpage = false;
+
+       /** @var bool */
+       public $isCssSubpage = false;
+
+       /** @var bool */
+       public $isJsSubpage = false;
+
+       /** @var bool */
+       protected $isWrongCaseCssJsPage = false;
+
+       /** @var bool New page or new section */
+       protected $isNew = false;
+
+       /** @var bool */
+       protected $deletedSinceEdit;
+
+       /** @var string */
+       public $formtype;
+
+       /** @var bool */
+       public $firsttime;
+
+       /** @var bool|stdClass */
+       protected $lastDelete;
+
+       /** @var bool */
+       protected $mTokenOk = false;
+
+       /** @var bool */
+       protected $mTokenOkExceptSuffix = false;
+
+       /** @var bool */
+       protected $mTriedSave = false;
+
+       /** @var bool */
+       protected $incompleteForm = false;
+
+       /** @var bool */
+       protected $tooBig = false;
+
+       /** @var bool */
+       protected $kblength = false;
+
+       /** @var bool */
+       protected $missingComment = false;
+
+       /** @var bool */
+       protected $missingSummary = false;
+
+       /** @var bool */
+       protected $allowBlankSummary = false;
+
+       /** @var string */
+       protected $autoSumm = '';
+
+       /** @var string */
+       public $hookError = '';
+
+       /** @var ParserOutput */
+       protected $mParserOutput;
+
+       /** @var bool Has a summary been preset using GET parameter &summary= ? */
+       protected $hasPresetSummary = false;
+
+       /** @var bool */
+       protected $mBaseRevision = false;
+
+       /** @var bool */
+       public $mShowSummaryField = true;
 
        # Form values
-       var $save = false, $preview = false, $diff = false;
-       var $minoredit = false, $watchthis = false, $recreate = false;
-       var $textbox1 = '', $textbox2 = '', $summary = '', $nosummary = false;
-       var $edittime = '', $section = '', $sectiontitle = '', $starttime = '';
-       var $oldid = 0, $editintro = '', $scrolltop = null, $bot = true;
-       var $contentModel = null, $contentFormat = null;
+
+       /** @var bool */
+       public $save = false;
+
+       /** @var bool */
+       public $preview = false;
+
+       /** @var bool */
+       protected $diff = false;
+
+       /** @var bool */
+       public $minoredit = false;
+
+       /** @var bool */
+       protected $watchthis = false;
+
+       /** @var bool */
+       protected $recreate = false;
+
+       /** @var string */
+       public $textbox1 = '';
+
+       /** @var string */
+       public $textbox2 = '';
+
+       /** @var string */
+       public $summary = '';
+
+       /** @var bool */
+       protected $nosummary = false;
+
+       /** @var string */
+       public $edittime = '';
+
+       /** @var string */
+       public $section = '';
+
+       /** @var string */
+       public $sectiontitle = '';
+
+       /** @var string */
+       protected $starttime = '';
+
+       /** @var int */
+       public $oldid = 0;
+
+       /** @var string */
+       protected $editintro = '';
+
+       /** @var null */
+       public $scrolltop = null;
+
+       /** @var bool */
+       public $bot = true;
+
+       /** @var null|string */
+       public $contentModel = null;
+
+       /** @var null|string */
+       public $contentFormat = null;
 
        # Placeholders for text injection by hooks (must be HTML)
        # extensions should take care to _append_ to the present value
-       public $editFormPageTop = ''; // Before even the preview
+
+       /** @var string Before even the preview */
+       public $editFormPageTop = '';
        public $editFormTextTop = '';
        public $editFormTextBeforeContent = '';
        public $editFormTextAfterWarn = '';
@@ -258,13 +354,15 @@ class EditPage {
 
        public $suppressIntro = false;
 
-       /**
-        * Set to true to allow editing of non-text content types.
-        *
-        * @var bool
-        */
+       /** @var bool Set to true to allow editing of non-text content types. */
        public $allowNonTextContent = false;
 
+       /** @var bool */
+       protected $edit;
+
+       /** @var bool */
+       public $live;
+
        /**
         * @param Article $article
         */
@@ -411,6 +509,7 @@ class EditPage {
                $this->isCssJsSubpage = $this->mTitle->isCssJsSubpage();
                $this->isCssSubpage = $this->mTitle->isCssSubpage();
                $this->isJsSubpage = $this->mTitle->isJsSubpage();
+               // @todo FIXME: Silly assignment.
                $this->isWrongCaseCssJsPage = $this->isWrongCaseCssJsPage();
 
                # Show applicable editing introductions
@@ -514,7 +613,10 @@ class EditPage {
                wfRunHooks( 'EditPage::showReadOnlyForm:initial', array( $this, &$wgOut ) );
 
                $wgOut->setRobotPolicy( 'noindex,nofollow' );
-               $wgOut->setPageTitle( wfMessage( 'viewsource-title', $this->getContextTitle()->getPrefixedText() ) );
+               $wgOut->setPageTitle( wfMessage(
+                       'viewsource-title',
+                       $this->getContextTitle()->getPrefixedText()
+               ) );
                $wgOut->addBacklinkSubtitle( $this->getContextTitle() );
                $wgOut->addWikiText( $wgOut->formatPermissionsErrorMessage( $permErrors, 'edit' ) );
                $wgOut->addHTML( "<hr />\n" );
@@ -577,7 +679,9 @@ class EditPage {
                } elseif ( $this->section == 'new' ) {
                        // Nothing *to* preview for new sections
                        return false;
-               } elseif ( ( $wgRequest->getVal( 'preload' ) !== null || $this->mTitle->exists() ) && $wgUser->getOption( 'previewonfirst' ) ) {
+               } elseif ( ( $wgRequest->getVal( 'preload' ) !== null || $this->mTitle->exists() )
+                       && $wgUser->getOption( 'previewonfirst' )
+               ) {
                        // Standard preference behavior
                        return true;
                } elseif ( !$this->mTitle->exists()
@@ -693,9 +797,13 @@ class EditPage {
                                // suhosin.request.max_value_length (d'oh)
                                $this->incompleteForm = true;
                        } else {
-                               // edittime should be one of our last fields; if it's missing,
-                               // the submission probably broke somewhere in the middle.
-                               $this->incompleteForm = is_null( $this->edittime );
+                               // If we receive the last parameter of the request, we can fairly
+                               // claim the POST request has not been truncated.
+
+                               // TODO: softened the check for cutover.  Once we determine
+                               // that it is safe, we should complete the transition by
+                               // removing the "edittime" clause.
+                               $this->incompleteForm = ( !$request->getVal( 'wpUltimateParam' ) && is_null( $this->edittime ) );
                        }
                        if ( $this->incompleteForm ) {
                                # If the form is incomplete, force to preview.
@@ -747,7 +855,8 @@ class EditPage {
                        ) {
                                $this->allowBlankSummary = true;
                        } else {
-                               $this->allowBlankSummary = $request->getBool( 'wpIgnoreBlankSummary' ) || !$wgUser->getOption( 'forceeditsummary' );
+                               $this->allowBlankSummary = $request->getBool( 'wpIgnoreBlankSummary' )
+                                       || !$wgUser->getOption( 'forceeditsummary' );
                        }
 
                        $this->autoSumm = $request->getText( 'wpAutoSummary' );
@@ -764,7 +873,8 @@ class EditPage {
                        $this->save = false;
                        $this->diff = false;
                        $this->minoredit = false;
-                       $this->watchthis = $request->getBool( 'watchthis', false ); // Watch may be overridden by request parameters
+                       // Watch may be overridden by request parameters
+                       $this->watchthis = $request->getBool( 'watchthis', false );
                        $this->recreate = false;
 
                        // When creating a new section, we can preload a section title by passing it as the
@@ -790,17 +900,26 @@ class EditPage {
                $this->bot = $request->getBool( 'bot', true );
                $this->nosummary = $request->getBool( 'nosummary' );
 
-               $this->contentModel = $request->getText( 'model', $this->contentModel ); #may be overridden by revision
-               $this->contentFormat = $request->getText( 'format', $this->contentFormat ); #may be overridden by revision
+               // May be overridden by revision.
+               $this->contentModel = $request->getText( 'model', $this->contentModel );
+               // May be overridden by revision.
+               $this->contentFormat = $request->getText( 'format', $this->contentFormat );
 
-               if ( !ContentHandler::getForModelID( $this->contentModel )->isSupportedFormat( $this->contentFormat ) ) {
+               if ( !ContentHandler::getForModelID( $this->contentModel )
+                       ->isSupportedFormat( $this->contentFormat )
+               ) {
                        throw new ErrorPageError(
                                'editpage-notsupportedcontentformat-title',
                                'editpage-notsupportedcontentformat-text',
                                array( $this->contentFormat, ContentHandler::getLocalizedName( $this->contentModel ) )
                        );
                }
-               #TODO: check if the desired model is allowed in this namespace, and if a transition from the page's current model to the new model is allowed
+
+               /**
+                * @todo Check if the desired model is allowed in this namespace, and if
+                *   a transition from the page's current model to the new model is
+                *   allowed.
+                */
 
                $this->live = $request->getCheck( 'live' );
                $this->editintro = $request->getText( 'editintro',
@@ -1254,13 +1373,18 @@ class EditPage {
         * @param array|bool $resultDetails
         *
         * @throws ErrorPageError
-        * return bool false, if output is done, true if rest of the form should be displayed
+        * @return bool false, if output is done, true if rest of the form should be displayed
         */
        private function handleStatus( Status $status, $resultDetails ) {
                global $wgUser, $wgOut;
 
-               // FIXME: once the interface for internalAttemptSave() is made nicer, this should use the message in $status
-               if ( $status->value == self::AS_SUCCESS_UPDATE || $status->value == self::AS_SUCCESS_NEW_ARTICLE ) {
+               /**
+                * @todo FIXME: once the interface for internalAttemptSave() is made
+                *   nicer, this should use the message in $status
+                */
+               if ( $status->value == self::AS_SUCCESS_UPDATE
+                       || $status->value == self::AS_SUCCESS_NEW_ARTICLE
+               ) {
                        $this->didSave = true;
                        if ( !$resultDetails['nullEdit'] ) {
                                $this->setPostEditCookie( $status->value );
@@ -1296,7 +1420,10 @@ class EditPage {
                                $sectionanchor = $resultDetails['sectionanchor'];
 
                                // Give extensions a chance to modify URL query on update
-                               wfRunHooks( 'ArticleUpdateBeforeRedirect', array( $this->mArticle, &$sectionanchor, &$extraQuery ) );
+                               wfRunHooks(
+                                       'ArticleUpdateBeforeRedirect',
+                                       array( $this->mArticle, &$sectionanchor, &$extraQuery )
+                               );
 
                                if ( $resultDetails['redirect'] ) {
                                        if ( $extraQuery == '' ) {
@@ -1399,18 +1526,26 @@ class EditPage {
        /**
         * Attempt submission (no UI)
         *
-        * @param array $result Array to add statuses to, currently with the possible keys:
-        *  spam - string - Spam string from content if any spam is detected by matchSpamRegex
-        *  sectionanchor - string - Section anchor for a section save
-        *  nullEdit - boolean - Set if doEditContent is OK.  True if null edit, false otherwise.
-        *  redirect - boolean -  Set if doEditContent is OK.  True if resulting revision is a redirect
+        * @param array $result Array to add statuses to, currently with the
+        *   possible keys:
+        *   - spam (string): Spam string from content if any spam is detected by
+        *     matchSpamRegex.
+        *   - sectionanchor (string): Section anchor for a section save.
+        *   - nullEdit (boolean): Set if doEditContent is OK.  True if null edit,
+        *     false otherwise.
+        *   - redirect (bool): Set if doEditContent is OK. True if resulting
+        *     revision is a redirect.
         * @param bool $bot True if edit is being made under the bot right.
         *
-        * @return Status Status object, possibly with a message, but always with one of the AS_* constants in $status->value,
+        * @return Status Status object, possibly with a message, but always with
+        *   one of the AS_* constants in $status->value,
         *
-        * FIXME: This interface is TERRIBLE, but hard to get rid of due to various error display idiosyncrasies. There are
-        * also lots of cases where error metadata is set in the object and retrieved later instead of being returned, e.g.
-        * AS_CONTENT_TOO_BIG and AS_BLOCKED_PAGE_FOR_USER. All that stuff needs to be cleaned up some time.
+        * @todo FIXME: This interface is TERRIBLE, but hard to get rid of due to
+        *   various error display idiosyncrasies. There are also lots of cases
+        *   where error metadata is set in the object and retrieved later instead
+        *   of being returned, e.g. AS_CONTENT_TOO_BIG and
+        *   AS_BLOCKED_PAGE_FOR_USER. All that stuff needs to be cleaned up some
+        * time.
         */
        function internalAttemptSave( &$result, $bot = false ) {
                global $wgUser, $wgRequest, $wgParser, $wgMaxArticleSize;
@@ -1451,7 +1586,12 @@ class EditPage {
                        # Construct Content object
                        $textbox_content = $this->toEditContent( $this->textbox1 );
                } catch ( MWContentSerializationException $ex ) {
-                       $status->fatal( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
+                       $status->fatal(
+                               'content-failed-to-parse',
+                               $this->contentModel,
+                               $this->contentFormat,
+                               $ex->getMessage()
+                       );
                        $status->value = self::AS_PARSE_ERROR;
                        wfProfileOut( __METHOD__ . '-checks' );
                        wfProfileOut( __METHOD__ );
@@ -1461,7 +1601,8 @@ class EditPage {
                # Check image redirect
                if ( $this->mTitle->getNamespace() == NS_FILE &&
                        $textbox_content->isRedirect() &&
-                       !$wgUser->isAllowed( 'upload' ) ) {
+                       !$wgUser->isAllowed( 'upload' )
+               ) {
                                $code = $wgUser->isAnon() ? self::AS_IMAGE_REDIRECT_ANON : self::AS_IMAGE_REDIRECT_LOGGED;
                                $status->setResult( false, $code );
 
@@ -1500,7 +1641,10 @@ class EditPage {
                        wfProfileOut( __METHOD__ );
                        return $status;
                }
-               if ( !wfRunHooks( 'EditFilter', array( $this, $this->textbox1, $this->section, &$this->hookError, $this->summary ) ) ) {
+               if ( !wfRunHooks(
+                       'EditFilter',
+                       array( $this, $this->textbox1, $this->section, &$this->hookError, $this->summary ) )
+               ) {
                        # Error messages etc. could be handled within the hook...
                        $status->fatal( 'hookaborted' );
                        $status->value = self::AS_HOOK_ERROR;
@@ -1622,7 +1766,8 @@ class EditPage {
                                        $content = $content->addSectionHeader( $this->sectiontitle );
 
                                        // Jump to the new section
-                                       $result['sectionanchor'] = $wgParser->guessLegacySectionNameFromWikiText( $this->sectiontitle );
+                                       $result['sectionanchor'] =
+                                               $wgParser->guessLegacySectionNameFromWikiText( $this->sectiontitle );
 
                                        // If no edit summary was specified, create one automatically from the section
                                        // title and have it link to the new section. Otherwise, respect the summary as
@@ -1665,14 +1810,19 @@ class EditPage {
                                                // Probably a duplicate submission of a new comment.
                                                // This can happen when squid resends a request after
                                                // a timeout but the first one actually went through.
-                                               wfDebug( __METHOD__ . ": duplicate new section submission; trigger edit conflict!\n" );
+                                               wfDebug( __METHOD__
+                                                       . ": duplicate new section submission; trigger edit conflict!\n" );
                                        } else {
                                                // New comment; suppress conflict.
                                                $this->isConflict = false;
                                                wfDebug( __METHOD__ . ": conflict suppressed; new section\n" );
                                        }
-                               } elseif ( $this->section == '' && Revision::userWasLastToEdit( DB_MASTER, $this->mTitle->getArticleID(),
-                                                       $wgUser->getId(), $this->edittime ) ) {
+                               } elseif ( $this->section == ''
+                                       && Revision::userWasLastToEdit(
+                                               DB_MASTER, $this->mTitle->getArticleID(),
+                                               $wgUser->getId(), $this->edittime
+                                       )
+                               ) {
                                        # Suppress edit conflict with self, except for section edits where merging is required.
                                        wfDebug( __METHOD__ . ": Suppressing edit conflict, same user.\n" );
                                        $this->isConflict = false;
@@ -1689,13 +1839,23 @@ class EditPage {
                        $content = null;
 
                        if ( $this->isConflict ) {
-                               wfDebug( __METHOD__ . ": conflict! getting section '{$this->section}' for time '{$this->edittime}'"
-                                               . " (article time '{$timestamp}')\n" );
-
-                               $content = $this->mArticle->replaceSectionContent( $this->section, $textbox_content, $sectionTitle, $this->edittime );
+                               wfDebug( __METHOD__
+                                       . ": conflict! getting section '{$this->section}' for time '{$this->edittime}'"
+                                       . " (article time '{$timestamp}')\n" );
+
+                               $content = $this->mArticle->replaceSectionContent(
+                                       $this->section,
+                                       $textbox_content,
+                                       $sectionTitle,
+                                       $this->edittime
+                               );
                        } else {
                                wfDebug( __METHOD__ . ": getting section '{$this->section}'\n" );
-                               $content = $this->mArticle->replaceSectionContent( $this->section, $textbox_content, $sectionTitle );
+                               $content = $this->mArticle->replaceSectionContent(
+                                       $this->section,
+                                       $textbox_content,
+                                       $sectionTitle
+                               );
                        }
 
                        if ( is_null( $content ) ) {
@@ -1779,12 +1939,13 @@ class EditPage {
                                                ->rawParams( $cleanSummary )->inContentLanguage()->text();
                                }
                        } elseif ( $this->section != '' ) {
-                               # Try to get a section anchor from the section source, redirect to edited section if header found
-                               # XXX: might be better to integrate this into Article::replaceSection
-                               # for duplicate heading checking and maybe parsing
+                               # Try to get a section anchor from the section source, redirect
+                               # to edited section if header found.
+                               # XXX: Might be better to integrate this into Article::replaceSection
+                               # for duplicate heading checking and maybe parsing.
                                $hasmatch = preg_match( "/^ *([=]{1,6})(.*?)(\\1) *\\n/i", $this->textbox1, $matches );
-                               # we can't deal with anchors, includes, html etc in the header for now,
-                               # headline would need to be parsed to improve this
+                               # We can't deal with anchors, includes, html etc in the header for now,
+                               # headline would need to be parsed to improve this.
                                if ( $hasmatch && strlen( $matches[2] ) > 0 ) {
                                        $sectionanchor = $wgParser->guessLegacySectionNameFromWikiText( $matches[2] );
                                }
@@ -1803,7 +1964,7 @@ class EditPage {
                }
 
                // Check for length errors again now that the section is merged in
-                       $this->kblength = (int)( strlen( $this->toEditText( $content ) ) / 1024 );
+               $this->kblength = (int)( strlen( $this->toEditText( $content ) ) / 1024 );
                if ( $this->kblength > $wgMaxArticleSize ) {
                        $this->tooBig = true;
                        $status->setResult( false, self::AS_MAX_ARTICLE_SIZE_EXCEEDED );
@@ -1816,8 +1977,8 @@ class EditPage {
                        ( ( $this->minoredit && !$this->isNew ) ? EDIT_MINOR : 0 ) |
                        ( $bot ? EDIT_FORCE_BOT : 0 );
 
-                       $doEditStatus = $this->mArticle->doEditContent( $content, $this->summary, $flags,
-                                                                                                                       false, null, $this->contentFormat );
+               $doEditStatus = $this->mArticle->doEditContent( $content, $this->summary, $flags,
+                                                                                                               false, null, $this->contentFormat );
 
                if ( !$doEditStatus->isOK() ) {
                        // Failure from doEdit()
@@ -2018,9 +2179,14 @@ class EditPage {
                } elseif ( $contextTitle->exists() && $this->section != '' ) {
                        $msg = $this->section == 'new' ? 'editingcomment' : 'editingsection';
                } else {
-                       $msg = $contextTitle->exists() || ( $contextTitle->getNamespace() == NS_MEDIAWIKI && $contextTitle->getDefaultMessageText() !== false ) ?
-                               'editing' : 'creating';
+                       $msg = $contextTitle->exists()
+                               || ( $contextTitle->getNamespace() == NS_MEDIAWIKI
+                                       && $contextTitle->getDefaultMessageText() !== false
+                               )
+                               ? 'editing'
+                               : 'creating';
                }
+
                # Use the title defined by DISPLAYTITLE magic word when present
                $displayTitle = isset( $this->mParserOutput ) ? $this->mParserOutput->getDisplayTitle() : false;
                if ( $displayTitle === false ) {
@@ -2140,7 +2306,7 @@ class EditPage {
                        if ( $title instanceof Title && $title->exists() && $title->userCan( 'read' ) ) {
                                global $wgOut;
                                // Added using template syntax, to take <noinclude>'s into account.
-                               $wgOut->addWikiTextTitleTidy( '{{:' . $title->getFullText() . '}}', $this->mTitle );
+                               $wgOut->addWikiTextTitleTidy( '<div class="mw-editintro">{{:' . $title->getFullText() . '}}</div>', $this->mTitle );
                                return true;
                        }
                }
@@ -2154,14 +2320,16 @@ class EditPage {
         *
         * If $content is null or false or a string, $content is returned unchanged.
         *
-        * If the given Content object is not of a type that can be edited using the text base EditPage,
-        * an exception will be raised. Set $this->allowNonTextContent to true to allow editing of non-textual
+        * If the given Content object is not of a type that can be edited using
+        * the text base EditPage, an exception will be raised. Set
+        * $this->allowNonTextContent to true to allow editing of non-textual
         * content.
         *
         * @param Content|null|bool|string $content
         * @return string The editable text form of the content.
         *
-        * @throws MWException if $content is not an instance of TextContent and $this->allowNonTextContent is not true.
+        * @throws MWException if $content is not an instance of TextContent and
+        *   $this->allowNonTextContent is not true.
         */
        protected function toEditText( $content ) {
                if ( $content === null || $content === false ) {
@@ -2183,16 +2351,18 @@ class EditPage {
        /**
         * Turns the given text into a Content object by unserializing it.
         *
-        * If the resulting Content object is not of a type that can be edited using the text base EditPage,
-        * an exception will be raised. Set $this->allowNonTextContent to true to allow editing of non-textual
+        * If the resulting Content object is not of a type that can be edited using
+        * the text base EditPage, an exception will be raised. Set
+        * $this->allowNonTextContent to true to allow editing of non-textual
         * content.
         *
         * @param string|null|bool $text Text to unserialize
-        * @return Content The content object created from $text. If $text was false or null, false resp. null will be
-        *                 returned instead.
+        * @return Content The content object created from $text. If $text was false
+        *   or null, false resp. null will be  returned instead.
         *
-        * @throws MWException if unserializing the text results in a Content object that is not an instance of TextContent
-        *          and $this->allowNonTextContent is not true.
+        * @throws MWException if unserializing the text results in a Content
+        *   object that is not an instance of TextContent and
+        *   $this->allowNonTextContent is not true.
         */
        protected function toEditContent( $text ) {
                if ( $text === false || $text === null ) {
@@ -2260,9 +2430,16 @@ class EditPage {
 
                // @todo add EditForm plugin interface and use it here!
                //       search for textarea1 and textares2, and allow EditForm to override all uses.
-               $wgOut->addHTML( Html::openElement( 'form', array( 'id' => self::EDITFORM_ID, 'name' => self::EDITFORM_ID,
-                       'method' => 'post', 'action' => $this->getActionURL( $this->getContextTitle() ),
-                       'enctype' => 'multipart/form-data' ) ) );
+               $wgOut->addHTML( Html::openElement(
+                       'form',
+                       array(
+                               'id' => self::EDITFORM_ID,
+                               'name' => self::EDITFORM_ID,
+                               'method' => 'post',
+                               'action' => $this->getActionURL( $this->getContextTitle() ),
+                               'enctype' => 'multipart/form-data'
+                       )
+               ) );
 
                if ( is_callable( $formCallback ) ) {
                        call_user_func_array( $formCallback, array( &$wgOut ) );
@@ -2271,8 +2448,20 @@ class EditPage {
                // Add an empty field to trip up spambots
                $wgOut->addHTML(
                        Xml::openElement( 'div', array( 'id' => 'antispam-container', 'style' => 'display: none;' ) )
-                       . Html::rawElement( 'label', array( 'for' => 'wpAntiSpam' ), wfMessage( 'simpleantispam-label' )->parse() )
-                       . Xml::element( 'input', array( 'type' => 'text', 'name' => 'wpAntispam', 'id' => 'wpAntispam', 'value' => '' ) )
+                       . Html::rawElement(
+                               'label',
+                               array( 'for' => 'wpAntiSpam' ),
+                               wfMessage( 'simpleantispam-label' )->parse()
+                       )
+                       . Xml::element(
+                               'input',
+                               array(
+                                       'type' => 'text',
+                                       'name' => 'wpAntispam',
+                                       'id' => 'wpAntispam',
+                                       'value' => ''
+                               )
+                       )
                        . Xml::closeElement( 'div' )
                );
 
@@ -2389,11 +2578,19 @@ class EditPage {
                                $this->showConflict();
                        } catch ( MWContentSerializationException $ex ) {
                                // this can't really happen, but be nice if it does.
-                               $msg = wfMessage( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
+                               $msg = wfMessage(
+                                       'content-failed-to-parse',
+                                       $this->contentModel,
+                                       $this->contentFormat,
+                                       $ex->getMessage()
+                               );
                                $wgOut->addWikiText( '<div class="error">' . $msg->text() . '</div>' );
                        }
                }
 
+               // Marker for detecting truncated form data.  This must be the last
+               // parameter sent in order to be of use, so do not move me.
+               $wgOut->addHTML( Html::hidden( 'wpUltimateParam', true ) );
                $wgOut->addHTML( $this->editFormTextBottom . "\n</form>\n" );
 
                if ( !$wgUser->getOption( 'previewontop' ) ) {
@@ -2419,6 +2616,9 @@ class EditPage {
                }
        }
 
+       /**
+        * @return bool
+        */
        protected function showHeader() {
                global $wgOut, $wgUser, $wgMaxArticleSize, $wgLang;
 
@@ -2476,9 +2676,15 @@ class EditPage {
                                        // Let sysop know that this will make private content public if saved
 
                                        if ( !$revision->userCan( Revision::DELETED_TEXT, $wgUser ) ) {
-                                               $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", 'rev-deleted-text-permission' );
+                                               $wgOut->wrapWikiMsg(
+                                                       "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
+                                                       'rev-deleted-text-permission'
+                                               );
                                        } elseif ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
-                                               $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", 'rev-deleted-text-view' );
+                                               $wgOut->wrapWikiMsg(
+                                                       "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
+                                                       'rev-deleted-text-view'
+                                               );
                                        }
 
                                        if ( !$revision->isCurrent() ) {
@@ -2495,7 +2701,10 @@ class EditPage {
                }
 
                if ( wfReadOnly() ) {
-                       $wgOut->wrapWikiMsg( "<div id=\"mw-read-only-warning\">\n$1\n</div>", array( 'readonlywarning', wfReadOnlyReason() ) );
+                       $wgOut->wrapWikiMsg(
+                               "<div id=\"mw-read-only-warning\">\n$1\n</div>",
+                               array( 'readonlywarning', wfReadOnlyReason() )
+                       );
                } elseif ( $wgUser->isAnon() ) {
                        if ( $this->formtype != 'preview' ) {
                                $wgOut->wrapWikiMsg( "<div id=\"mw-anon-edit-warning\">\n$1</div>", 'anoneditwarning' );
@@ -2506,15 +2715,24 @@ class EditPage {
                        if ( $this->isCssJsSubpage ) {
                                # Check the skin exists
                                if ( $this->isWrongCaseCssJsPage ) {
-                                       $wgOut->wrapWikiMsg( "<div class='error' id='mw-userinvalidcssjstitle'>\n$1\n</div>", array( 'userinvalidcssjstitle', $this->mTitle->getSkinFromCssJsSubpage() ) );
+                                       $wgOut->wrapWikiMsg(
+                                               "<div class='error' id='mw-userinvalidcssjstitle'>\n$1\n</div>",
+                                               array( 'userinvalidcssjstitle', $this->mTitle->getSkinFromCssJsSubpage() )
+                                       );
                                }
                                if ( $this->formtype !== 'preview' ) {
                                        if ( $this->isCssSubpage ) {
-                                               $wgOut->wrapWikiMsg( "<div id='mw-usercssyoucanpreview'>\n$1\n</div>", array( 'usercssyoucanpreview' ) );
+                                               $wgOut->wrapWikiMsg(
+                                                       "<div id='mw-usercssyoucanpreview'>\n$1\n</div>",
+                                                       array( 'usercssyoucanpreview' )
+                                               );
                                        }
 
                                        if ( $this->isJsSubpage ) {
-                                               $wgOut->wrapWikiMsg( "<div id='mw-userjsyoucanpreview'>\n$1\n</div>", array( 'userjsyoucanpreview' ) );
+                                               $wgOut->wrapWikiMsg(
+                                                       "<div id='mw-userjsyoucanpreview'>\n$1\n</div>",
+                                                       array( 'userjsyoucanpreview' )
+                                               );
                                        }
                                }
                        }
@@ -2561,16 +2779,27 @@ class EditPage {
 
                if ( $this->tooBig || $this->kblength > $wgMaxArticleSize ) {
                        $wgOut->wrapWikiMsg( "<div class='error' id='mw-edit-longpageerror'>\n$1\n</div>",
-                               array( 'longpageerror', $wgLang->formatNum( $this->kblength ), $wgLang->formatNum( $wgMaxArticleSize ) ) );
+                               array(
+                                       'longpageerror',
+                                       $wgLang->formatNum( $this->kblength ),
+                                       $wgLang->formatNum( $wgMaxArticleSize )
+                               )
+                       );
                } else {
                        if ( !wfMessage( 'longpage-hint' )->isDisabled() ) {
                                $wgOut->wrapWikiMsg( "<div id='mw-edit-longpage-hint'>\n$1\n</div>",
-                                       array( 'longpage-hint', $wgLang->formatSize( strlen( $this->textbox1 ) ), strlen( $this->textbox1 ) )
+                                       array(
+                                               'longpage-hint',
+                                               $wgLang->formatSize( strlen( $this->textbox1 ) ),
+                                               strlen( $this->textbox1 )
+                                       )
                                );
                        }
                }
                # Add header copyright warning
                $this->showHeaderCopyrightWarning();
+
+               return true;
        }
 
        /**
@@ -2587,7 +2816,9 @@ class EditPage {
         *
         * @return array An array in the format array( $label, $input )
         */
-       function getSummaryInput( $summary = "", $labelText = null, $inputAttrs = null, $spanLabelAttrs = null ) {
+       function getSummaryInput( $summary = "", $labelText = null,
+               $inputAttrs = null, $spanLabelAttrs = null
+       ) {
                // Note: the maxlength is overridden in JS to 255 and to make it use UTF-8 bytes, not characters.
                $inputAttrs = ( is_array( $inputAttrs ) ? $inputAttrs : array() ) + array(
                        'id' => 'wpSummary',
@@ -2604,7 +2835,11 @@ class EditPage {
 
                $label = null;
                if ( $labelText ) {
-                       $label = Xml::tags( 'label', $inputAttrs['id'] ? array( 'for' => $inputAttrs['id'] ) : null, $labelText );
+                       $label = Xml::tags(
+                               'label',
+                               $inputAttrs['id'] ? array( 'for' => $inputAttrs['id'] ) : null,
+                               $labelText
+                       );
                        $label = Xml::tags( 'span', $spanLabelAttrs, $label );
                }
 
@@ -2635,7 +2870,12 @@ class EditPage {
                }
                $summary = $wgContLang->recodeForEdit( $summary );
                $labelText = wfMessage( $isSubjectPreview ? 'subject' : 'summary' )->parse();
-               list( $label, $input ) = $this->getSummaryInput( $summary, $labelText, array( 'class' => $summaryClass ), array() );
+               list( $label, $input ) = $this->getSummaryInput(
+                       $summary,
+                       $labelText,
+                       array( 'class' => $summaryClass ),
+                       array()
+               );
                $wgOut->addHTML( "{$label} {$input}" );
        }
 
@@ -2662,7 +2902,8 @@ class EditPage {
 
                $message = $isSubjectPreview ? 'subject-preview' : 'summary-preview';
 
-               $summary = wfMessage( $message )->parse() . Linker::commentBlock( $summary, $this->mTitle, $isSubjectPreview );
+               $summary = wfMessage( $message )->parse()
+                       . Linker::commentBlock( $summary, $this->mTitle, $isSubjectPreview );
                return Xml::tags( 'div', array( 'class' => 'mw-summary-preview' ), $summary );
        }
 
@@ -2754,7 +2995,11 @@ HTML
                        }
                }
 
-               $this->showTextbox( $textoverride !== null ? $textoverride : $this->textbox1, 'wpTextbox1', $attribs );
+               $this->showTextbox(
+                       $textoverride !== null ? $textoverride : $this->textbox1,
+                       'wpTextbox1',
+                       $attribs
+               );
        }
 
        protected function showTextbox2() {
@@ -2778,7 +3023,9 @@ HTML
                        'id' => $name,
                        'cols' => $wgUser->getIntOption( 'cols' ),
                        'rows' => $wgUser->getIntOption( 'rows' ),
-                       'style' => '' // avoid php notices when appending preferences (appending allows customAttribs['style'] to still work
+                       // Avoid PHP notices when appending preferences
+                       // (appending allows customAttribs['style'] to still work).
+                       'style' => ''
                );
 
                $pageLang = $this->mTitle->getPageLanguage();
@@ -2813,7 +3060,12 @@ HTML
                        try {
                                $this->showDiff();
                        } catch ( MWContentSerializationException $ex ) {
-                               $msg = wfMessage( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
+                               $msg = wfMessage(
+                                       'content-failed-to-parse',
+                                       $this->contentModel,
+                                       $this->contentFormat,
+                                       $ex->getMessage()
+                               );
                                $wgOut->addWikiText( '<div class="error">' . $msg->text() . '</div>' );
                        }
                }
@@ -3051,14 +3303,19 @@ HTML
                                array( 'class' => 'mw-editButtons-pipe-separator' ),
                                wfMessage( 'pipe-separator' )->text() );
                }
-               $edithelpurl = Skin::makeInternalOrExternalUrl( wfMessage( 'edithelppage' )->inContentLanguage()->text() );
+
+               $message = wfMessage( 'edithelppage' )->inContentLanguage()->text();
+               $edithelpurl = Skin::makeInternalOrExternalUrl( $message );
                $edithelp = '<a target="helpwindow" href="' . $edithelpurl . '">' .
                        wfMessage( 'edithelp' )->escaped() . '</a> ' .
                        wfMessage( 'newwindow' )->parse();
+
                $wgOut->addHTML( "      <span class='cancelLink'>{$cancel}</span>\n" );
                $wgOut->addHTML( "      <span class='editHelp'>{$edithelp}</span>\n" );
                $wgOut->addHTML( "</div><!-- editButtons -->\n" );
+
                wfRunHooks( 'EditPage::showStandardInputs:options', array( $this, $wgOut, &$tabindex ) );
+
                $wgOut->addHTML( "</div><!-- editOptions -->\n" );
        }
 
@@ -3145,6 +3402,9 @@ HTML
                return $this->deletedSinceEdit;
        }
 
+       /**
+        * @return bool|stdClass
+        */
        protected function getLastDelete() {
                $dbr = wfGetDB( DB_SLAVE );
                $data = $dbr->selectRow(
@@ -3180,6 +3440,7 @@ HTML
                                $data->log_comment = wfMessage( 'rev-deleted-comment' )->escaped();
                        }
                }
+
                return $data;
        }
 
@@ -3214,7 +3475,10 @@ HTML
                        $content = $this->toEditContent( $this->textbox1 );
 
                        $previewHTML = '';
-                       if ( !wfRunHooks( 'AlternateEditPreview', array( $this, &$content, &$previewHTML, &$this->mParserOutput ) ) ) {
+                       if ( !wfRunHooks(
+                               'AlternateEditPreview',
+                               array( $this, &$content, &$previewHTML, &$this->mParserOutput ) )
+                       ) {
                                wfProfileOut( __METHOD__ );
                                return $previewHTML;
                        }
@@ -3226,7 +3490,6 @@ HTML
                        if ( $this->mTriedSave && !$this->mTokenOk ) {
                                if ( $this->mTokenOkExceptSuffix ) {
                                        $note = wfMessage( 'token_suffix_mismatch' )->plain();
-
                                } else {
                                        $note = wfMessage( 'session_fail_preview' )->plain();
                                }
@@ -3284,7 +3547,11 @@ HTML
                        # But it's now deprecated, so never mind
 
                        $content = $content->preSaveTransform( $this->mTitle, $wgUser, $parserOptions );
-                       $parserOutput = $content->getParserOutput( $this->getArticle()->getTitle(), null, $parserOptions );
+                       $parserOutput = $content->getParserOutput(
+                               $this->getArticle()->getTitle(),
+                               null,
+                               $parserOptions
+                       );
 
                        $previewHTML = $parserOutput->getText();
                        $this->mParserOutput = $parserOutput;
@@ -3294,13 +3561,19 @@ HTML
                                $note .= "\n\n" . implode( "\n\n", $parserOutput->getWarnings() );
                        }
                } catch ( MWContentSerializationException $ex ) {
-                       $m = wfMessage( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
+                       $m = wfMessage(
+                               'content-failed-to-parse',
+                               $this->contentModel,
+                               $this->contentFormat,
+                               $ex->getMessage()
+                       );
                        $note .= "\n\n" . $m->parse();
                        $previewHTML = '';
                }
 
                if ( $this->isConflict ) {
-                       $conflict = '<h2 id="mw-previewconflict">' . wfMessage( 'previewconflict' )->escaped() . "</h2>\n";
+                       $conflict = '<h2 id="mw-previewconflict">'
+                               . wfMessage( 'previewconflict' )->escaped() . "</h2>\n";
                } else {
                        $conflict = '<hr />';
                }
@@ -3557,6 +3830,7 @@ HTML
        public function getEditButtons( &$tabindex ) {
                $buttons = array();
 
+               // @todo FIXME: Hardcoded square brackets.
                $temp = array(
                        'id' => 'wpSave',
                        'name' => 'wpSave',
@@ -3564,11 +3838,13 @@ HTML
                        'tabindex' => ++$tabindex,
                        'value' => wfMessage( 'savearticle' )->text(),
                        'accesskey' => wfMessage( 'accesskey-save' )->text(),
-                       'title' => wfMessage( 'tooltip-save' )->text() . ' [' . wfMessage( 'accesskey-save' )->text() . ']',
+                       'title' => wfMessage( 'tooltip-save' )->text()
+                               . ' [' . wfMessage( 'accesskey-save' )->text() . ']',
                );
                $buttons['save'] = Xml::element( 'input', $temp, '' );
 
                ++$tabindex; // use the same for preview and live preview
+               // @todo FIXME: Hardcoded square brackets.
                $temp = array(
                        'id' => 'wpPreview',
                        'name' => 'wpPreview',
@@ -3576,11 +3852,13 @@ HTML
                        'tabindex' => $tabindex,
                        'value' => wfMessage( 'showpreview' )->text(),
                        'accesskey' => wfMessage( 'accesskey-preview' )->text(),
-                       'title' => wfMessage( 'tooltip-preview' )->text() . ' [' . wfMessage( 'accesskey-preview' )->text() . ']',
+                       'title' => wfMessage( 'tooltip-preview' )->text()
+                               . ' [' . wfMessage( 'accesskey-preview' )->text() . ']',
                );
                $buttons['preview'] = Xml::element( 'input', $temp, '' );
                $buttons['live'] = '';
 
+               // @todo FIXME: Hardcoded square brackets.
                $temp = array(
                        'id' => 'wpDiff',
                        'name' => 'wpDiff',
@@ -3588,7 +3866,8 @@ HTML
                        'tabindex' => ++$tabindex,
                        'value' => wfMessage( 'showdiff' )->text(),
                        'accesskey' => wfMessage( 'accesskey-diff' )->text(),
-                       'title' => wfMessage( 'tooltip-diff' )->text() . ' [' . wfMessage( 'accesskey-diff' )->text() . ']',
+                       'title' => wfMessage( 'tooltip-diff' )->text()
+                               . ' [' . wfMessage( 'accesskey-diff' )->text() . ']',
                );
                $buttons['diff'] = Xml::element( 'input', $temp, '' );
 
@@ -3618,11 +3897,11 @@ HTML
                #$categories = $skin->getCategoryLinks();
 
                $s =
-               '<?xml version="1.0" encoding="UTF-8" ?>' . "\n" .
-               Xml::tags( 'livepreview', null,
-                       Xml::element( 'preview', null, $previewText )
-                       #.      Xml::element( 'category', null, $categories )
-               );
+                       '<?xml version="1.0" encoding="UTF-8" ?>' . "\n" .
+                       Xml::tags( 'livepreview', null,
+                               Xml::element( 'preview', null, $previewText )
+                               #.      Xml::element( 'category', null, $categories )
+                       );
                echo $s;
        }
 
@@ -3778,7 +4057,8 @@ HTML
                $bytesleft = 0;
                $result = "";
                $working = 0;
-               for ( $i = 0; $i < strlen( $invalue ); $i++ ) {
+               $valueLength = strlen( $invalue );
+               for ( $i = 0; $i < $valueLength; $i++ ) {
                        $bytevalue = ord( $invalue[$i] );
                        if ( $bytevalue <= 0x7F ) { // 0xxx xxxx
                                $result .= chr( $bytevalue );
index 7295a76..21fcd5a 100644 (file)
  * @ingroup SpecialPage Dump
  */
 class WikiExporter {
-       var $list_authors = false; # Return distinct author list (when not returning full history)
-       var $author_list = "";
+       /** @var bool Return distinct author list (when not returning full history) */
+       public $list_authors = false;
 
-       var $dumpUploads = false;
-       var $dumpUploadFileContents = false;
+       /** @var bool */
+       public $dumpUploads = false;
+
+       /** @var bool */
+       public $dumpUploadFileContents = false;
+
+       /** @var string */
+       protected $author_list = "";
 
        const FULL = 1;
        const CURRENT = 2;
@@ -49,14 +55,14 @@ class WikiExporter {
        const TEXT = 0;
        const STUB = 1;
 
-       var $buffer;
+       /** @var int */
+       protected $buffer;
 
-       var $text;
+       /** @var int */
+       protected $text;
 
-       /**
-        * @var DumpOutput
-        */
-       var $sink;
+       /** @var DumpOutput */
+       protected $sink;
 
        /**
         * Returns the export schema version.
@@ -664,12 +670,30 @@ class XmlDumpWriter {
                        $out .= "      " . Xml::elementClean( 'comment', array(), strval( $row->rev_comment ) ) . "\n";
                }
 
+               if ( isset( $row->rev_content_model ) && !is_null( $row->rev_content_model ) ) {
+                       $content_model = strval( $row->rev_content_model );
+               } else {
+                       // probably using $wgContentHandlerUseDB = false;
+                       $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+                       $content_model = ContentHandler::getDefaultModelFor( $title );
+               }
+
+               $content_handler = ContentHandler::getForModelID( $content_model );
+
+               if ( isset( $row->rev_content_format ) && !is_null( $row->rev_content_format ) ) {
+                       $content_format = strval( $row->rev_content_format );
+               } else {
+                       // probably using $wgContentHandlerUseDB = false;
+                       $content_format = $content_handler->getDefaultFormat();
+               }
+
                $text = '';
                if ( isset( $row->rev_deleted ) && ( $row->rev_deleted & Revision::DELETED_TEXT ) ) {
                        $out .= "      " . Xml::element( 'text', array( 'deleted' => 'deleted' ) ) . "\n";
                } elseif ( isset( $row->old_text ) ) {
                        // Raw text from the database may have invalid chars
                        $text = strval( Revision::getRevisionText( $row ) );
+                       $text = $content_handler->exportTransform( $text, $content_format );
                        $out .= "      " . Xml::elementClean( 'text',
                                array( 'xml:space' => 'preserve', 'bytes' => intval( $row->rev_len ) ),
                                strval( $text ) ) . "\n";
@@ -689,26 +713,7 @@ class XmlDumpWriter {
                        $out .= "      <sha1/>\n";
                }
 
-               if ( isset( $row->rev_content_model ) && !is_null( $row->rev_content_model ) ) {
-                       $content_model = strval( $row->rev_content_model );
-               } else {
-                       // probably using $wgContentHandlerUseDB = false;
-                       // @todo test!
-                       $title = Title::makeTitle( $row->page_namespace, $row->page_title );
-                       $content_model = ContentHandler::getDefaultModelFor( $title );
-               }
-
                $out .= "      " . Xml::element( 'model', null, strval( $content_model ) ) . "\n";
-
-               if ( isset( $row->rev_content_format ) && !is_null( $row->rev_content_format ) ) {
-                       $content_format = strval( $row->rev_content_format );
-               } else {
-                       // probably using $wgContentHandlerUseDB = false;
-                       // @todo test!
-                       $content_handler = ContentHandler::getForModelID( $content_model );
-                       $content_format = $content_handler->getDefaultFormat();
-               }
-
                $out .= "      " . Xml::element( 'format', null, strval( $content_format ) ) . "\n";
 
                wfRunHooks( 'XmlDumpWriterWriteRevision', array( &$this, &$out, $row, $text ) );
@@ -1144,7 +1149,6 @@ class DumpPipeOutput extends DumpFileOutput {
                        }
                }
        }
-
 }
 
 /**
@@ -1152,7 +1156,6 @@ class DumpPipeOutput extends DumpFileOutput {
  * @ingroup Dump
  */
 class DumpGZipOutput extends DumpPipeOutput {
-
        /**
         * @param string $file
         */
@@ -1166,7 +1169,6 @@ class DumpGZipOutput extends DumpPipeOutput {
  * @ingroup Dump
  */
 class DumpBZip2Output extends DumpPipeOutput {
-
        /**
         * @param string $file
         */
@@ -1180,7 +1182,6 @@ class DumpBZip2Output extends DumpPipeOutput {
  * @ingroup Dump
  */
 class Dump7ZipOutput extends DumpPipeOutput {
-
        /**
         * @param string $file
         */
@@ -1227,7 +1228,6 @@ class Dump7ZipOutput extends DumpPipeOutput {
  * @ingroup Dump
  */
 class DumpFilter {
-
        /**
         * @var DumpOutput
         * FIXME will need to be made protected whenever legacy code
@@ -1337,7 +1337,6 @@ class DumpFilter {
  * @ingroup Dump
  */
 class DumpNotalkFilter extends DumpFilter {
-
        /**
         * @param object $page
         * @return bool
@@ -1352,8 +1351,11 @@ class DumpNotalkFilter extends DumpFilter {
  * @ingroup Dump
  */
 class DumpNamespaceFilter extends DumpFilter {
-       var $invert = false;
-       var $namespaces = array();
+       /** @var bool */
+       protected $invert = false;
+
+       /** @var array */
+       protected $namespaces = array();
 
        /**
         * @param DumpOutput $sink
@@ -1417,7 +1419,13 @@ class DumpNamespaceFilter extends DumpFilter {
  * @ingroup Dump
  */
 class DumpLatestFilter extends DumpFilter {
-       var $page, $pageString, $rev, $revString;
+       protected $page;
+
+       protected $pageString;
+
+       protected $rev;
+
+       protected $revString;
 
        /**
         * @param object $page
@@ -1543,12 +1551,12 @@ class DumpMultiWriter {
                }
                return $filenames;
        }
-
 }
 
 /**
  * @param string $string
  * @return string
+ * @todo FIXME: Only used in OAI extension. Move over there.
  */
 function xmlsafe( $string ) {
        wfProfileIn( __FUNCTION__ );
index 7089c92..1674b13 100644 (file)
  * @ingroup Feed
  */
 class FeedItem {
-       /**
-        * @var Title
-        */
-       var $title;
+       /** @var Title */
+       protected $title;
+
+       protected $description;
+
+       protected $url;
+
+       protected $date;
 
-       var $description;
-       var $url;
-       var $date;
-       var $author;
-       var $uniqueId;
-       var $comments;
-       var $rssIsPermalink = false;
+       protected $author;
+
+       protected $uniqueId;
+
+       protected $comments;
+
+       public $rssIsPermalink = false;
 
        /**
         * Constructor
@@ -238,27 +242,35 @@ abstract class ChannelFeed extends FeedItem {
         * Return an internet media type to be sent in the headers.
         *
         * @return string
-        * @private
         */
-       function contentType() {
+       private function contentType() {
                global $wgRequest;
+
                $ctype = $wgRequest->getVal( 'ctype', 'application/xml' );
-               $allowedctypes = array( 'application/xml', 'text/xml', 'application/rss+xml', 'application/atom+xml' );
+               $allowedctypes = array(
+                       'application/xml',
+                       'text/xml',
+                       'application/rss+xml',
+                       'application/atom+xml'
+               );
+
                return ( in_array( $ctype, $allowedctypes ) ? $ctype : 'application/xml' );
        }
 
        /**
         * Output the initial XML headers with a stylesheet for legibility
         * if someone finds it in a browser.
-        * @private
         */
-       function outXmlHeader() {
+       protected function outXmlHeader() {
                global $wgStylePath, $wgStyleVersion;
 
                $this->httpHeaders();
                echo '<?xml version="1.0"?>' . "\n";
                echo '<?xml-stylesheet type="text/css" href="' .
-                       htmlspecialchars( wfExpandUrl( "$wgStylePath/common/feed.css?$wgStyleVersion", PROTO_CURRENT ) ) .
+                       htmlspecialchars( wfExpandUrl(
+                               "$wgStylePath/common/feed.css?$wgStyleVersion",
+                               PROTO_CURRENT
+                       ) ) .
                        '"?' . ">\n";
        }
 }
@@ -303,6 +315,7 @@ class RSSFeed extends ChannelFeed {
         * @param FeedItem $item Item to be output
         */
        function outItem( $item ) {
+               // @codingStandardsIgnoreStart Ignore long lines and formatting issues.
        ?>
                <item>
                        <title><?php print $item->getTitle(); ?></title>
@@ -314,6 +327,7 @@ class RSSFeed extends ChannelFeed {
                        <?php if ( $item->getComments() ) { ?><comments><?php print wfExpandUrl( $item->getComments(), PROTO_CURRENT ); ?></comments><?php }?>
                </item>
 <?php
+               // @codingStandardsIgnoreEnd
        }
 
        /**
@@ -348,6 +362,7 @@ class AtomFeed extends ChannelFeed {
                global $wgVersion;
 
                $this->outXmlHeader();
+               // @codingStandardsIgnoreStart Ignore long lines and formatting issues.
                ?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="<?php print $this->getLanguage() ?>">
                <id><?php print $this->getFeedId() ?></id>
                <title><?php print $this->getTitle() ?></title>
@@ -358,6 +373,7 @@ class AtomFeed extends ChannelFeed {
                <generator>MediaWiki <?php print $wgVersion ?></generator>
 
 <?php
+               // @codingStandardsIgnoreEnd
        }
 
        /**
@@ -367,18 +383,16 @@ class AtomFeed extends ChannelFeed {
         * have to change the id? Maybe? Maybe not.
         *
         * @return string
-        * @private
         */
-       function getFeedId() {
+       private function getFeedId() {
                return $this->getSelfUrl();
        }
 
        /**
         * Atom 1.0 requests a self-reference to the feed.
         * @return string
-        * @private
         */
-       function getSelfUrl() {
+       private function getSelfUrl() {
                global $wgRequest;
                return htmlspecialchars( $wgRequest->getFullRequestURL() );
        }
@@ -389,6 +403,7 @@ class AtomFeed extends ChannelFeed {
         */
        function outItem( $item ) {
                global $wgMimeType;
+               // @codingStandardsIgnoreStart Ignore long lines and formatting issues.
        ?>
        <entry>
                <id><?php print $item->getUniqueId(); ?></id>
@@ -412,5 +427,6 @@ class AtomFeed extends ChannelFeed {
         */
        function outFooter() {?>
        </feed><?php
+               // @codingStandardsIgnoreEnd
        }
 }
index 91724dd..c95c380 100644 (file)
@@ -104,6 +104,53 @@ if ( !function_exists( 'gzdecode' ) ) {
                return gzinflate( substr( $data, 10, -8 ) );
        }
 }
+
+// hash_equals function only exists in PHP >= 5.6.0
+if ( !function_exists( 'hash_equals' ) ) {
+       /**
+        * Check whether a user-provided string is equal to a fixed-length secret without
+        * revealing bytes of the secret through timing differences.
+        *
+        * This timing guarantee -- that a partial match takes the same time as a complete
+        * mismatch -- is why this function is used in some security-sensitive parts of the code.
+        * For example, it shouldn't be possible to guess an HMAC signature one byte at a time.
+        *
+        * Longer explanation: http://www.emerose.com/timing-attacks-explained
+        *
+        * @codeCoverageIgnore
+        * @param string $known_string Fixed-length secret to compare against
+        * @param string $user_string User-provided string
+        * @return bool True if the strings are the same, false otherwise
+        */
+       function hash_equals( $known_string, $user_string ) {
+               // Strict type checking as in PHP's native implementation
+               if ( !is_string( $known_string ) ) {
+                       trigger_error( 'hash_equals(): Expected known_string to be a string, ' .
+                               gettype( $known_string ) . ' given', E_USER_WARNING );
+
+                       return false;
+               }
+
+               if ( !is_string( $user_string ) ) {
+                       trigger_error( 'hash_equals(): Expected user_string to be a string, ' .
+                               gettype( $user_string ) . ' given', E_USER_WARNING );
+
+                       return false;
+               }
+
+               // Note that we do one thing PHP doesn't: try to avoid leaking information about
+               // relative lengths of $known_string and $user_string, and of multiple $known_strings.
+               // However, lengths may still inevitably leak through, for example, CPU cache misses.
+               $known_string_len = strlen( $known_string );
+               $user_string_len = strlen( $user_string );
+               $result = $known_string_len ^ $user_string_len;
+               for ( $i = 0; $i < $user_string_len; $i++ ) {
+                       $result |= ord( $known_string[$i % $known_string_len] ) ^ ord( $user_string[$i] );
+               }
+
+               return ( $result === 0 );
+       }
+}
 /// @endcond
 
 /**
@@ -497,7 +544,8 @@ function wfAppendQuery( $url, $query ) {
  *    no valid URL can be constructed
  */
 function wfExpandUrl( $url, $defaultProto = PROTO_CURRENT ) {
-       global $wgServer, $wgCanonicalServer, $wgInternalServer, $wgRequest;
+       global $wgServer, $wgCanonicalServer, $wgInternalServer, $wgRequest,
+               $wgHttpsPort;
        if ( $defaultProto === PROTO_CANONICAL ) {
                $serverUrl = $wgCanonicalServer;
        } elseif ( $defaultProto === PROTO_INTERNAL && $wgInternalServer !== false ) {
@@ -536,6 +584,13 @@ function wfExpandUrl( $url, $defaultProto = PROTO_CURRENT ) {
        }
 
        $bits = wfParseUrl( $url );
+
+       // ensure proper port for HTTPS arrives in URL
+       // https://bugzilla.wikimedia.org/show_bug.cgi?id=65184
+       if ( $defaultProto === PROTO_HTTPS && $wgHttpsPort != 443 ) {
+               $bits['port'] = $wgHttpsPort;
+       }
+
        if ( $bits && isset( $bits['path'] ) ) {
                $bits['path'] = wfRemoveDotSegments( $bits['path'] );
                return wfAssembleUrl( $bits );
@@ -1007,14 +1062,14 @@ function wfDebugTimer() {
 /**
  * Send a line giving PHP memory usage.
  *
- * @param bool $exact Print exact values instead of kilobytes (default: false)
+ * @param bool $exact Print exact byte values instead of kibibytes (default: false)
  */
 function wfDebugMem( $exact = false ) {
        $mem = memory_get_usage();
        if ( !$exact ) {
-               $mem = floor( $mem / 1024 ) . ' kilobytes';
+               $mem = floor( $mem / 1024 ) . ' KiB';
        } else {
-               $mem .= ' bytes';
+               $mem .= ' B';
        }
        wfDebug( "Memory usage: $mem\n" );
 }
index da54673..d0cae36 100644 (file)
@@ -25,8 +25,7 @@
  * two-part external storage URLs. Used for represent efficient concatenated
  * storage, and migration-related pointer objects.
  */
-interface HistoryBlob
-{
+interface HistoryBlob {
        /**
         * Adds an item of text, returns a stub object which points to the item.
         * You must call setLocation() on the stub object before storing it to the
@@ -71,8 +70,7 @@ interface HistoryBlob
  * Concatenated gzip (CGZ) storage
  * Improves compression ratio by concatenating like objects before gzipping
  */
-class ConcatenatedGzipHistoryBlob implements HistoryBlob
-{
+class ConcatenatedGzipHistoryBlob implements HistoryBlob {
        public $mVersion = 0, $mCompressed = false, $mItems = array(), $mDefaultHash = '';
        public $mSize = 0;
        public $mMaxSize = 10000000;
@@ -83,7 +81,8 @@ class ConcatenatedGzipHistoryBlob implements HistoryBlob
         */
        public function __construct() {
                if ( !function_exists( 'gzdeflate' ) ) {
-                       throw new MWException( "Need zlib support to read or write this kind of history object (ConcatenatedGzipHistoryBlob)\n" );
+                       throw new MWException( "Need zlib support to read or write this "
+                               . "kind of history object (ConcatenatedGzipHistoryBlob)\n" );
                }
        }
 
@@ -190,14 +189,21 @@ class ConcatenatedGzipHistoryBlob implements HistoryBlob
  */
 class HistoryBlobStub {
        /**
-        * One-step cache variable to hold base blobs; operations that
-        * pull multiple revisions may often pull multiple times from
-        * the same blob. By keeping the last-used one open, we avoid
-        * redundant unserialization and decompression overhead.
+        * @var array One-step cache variable to hold base blobs; operations that
+        * pull multiple revisions may often pull multiple times from the same
+        * blob. By keeping the last-used one open, we avoid redundant
+        * unserialization and decompression overhead.
         */
        protected static $blobCache = array();
 
-       var $mOldId, $mHash, $mRef;
+       /** @var int */
+       public $mOldId;
+
+       /** @var string */
+       public $mHash;
+
+       /** @var  */
+       public $mRef;
 
        /**
         * @param string $hash The content hash of the text
@@ -240,10 +246,16 @@ class HistoryBlobStub {
                        $obj = self::$blobCache[$this->mOldId];
                } else {
                        $dbr = wfGetDB( DB_SLAVE );
-                       $row = $dbr->selectRow( 'text', array( 'old_flags', 'old_text' ), array( 'old_id' => $this->mOldId ) );
+                       $row = $dbr->selectRow(
+                               'text',
+                               array( 'old_flags', 'old_text' ),
+                               array( 'old_id' => $this->mOldId )
+                       );
+
                        if ( !$row ) {
                                return false;
                        }
+
                        $flags = explode( ',', $row->old_flags );
                        if ( in_array( 'external', $flags ) ) {
                                $url = $row->old_text;
@@ -254,6 +266,7 @@ class HistoryBlobStub {
                                $row->old_text = ExternalStore::fetchFromUrl( $url );
 
                        }
+
                        if ( !in_array( 'object', $flags ) ) {
                                return false;
                        }
@@ -276,6 +289,7 @@ class HistoryBlobStub {
                        $obj->uncompress();
                        self::$blobCache = array( $this->mOldId => $obj );
                }
+
                return $obj->getItem( $this->mHash );
        }
 
@@ -298,7 +312,8 @@ class HistoryBlobStub {
  * on conversion if $wgLegacySchemaConversion is set to true.
  */
 class HistoryBlobCurStub {
-       var $mCurId;
+       /** @var int */
+       public $mCurId;
 
        /**
         * @param int $curid The cur_id pointed to
@@ -335,50 +350,43 @@ class HistoryBlobCurStub {
  * Requires xdiff 1.5+ and zlib
  */
 class DiffHistoryBlob implements HistoryBlob {
-       /** Uncompressed item cache */
-       var $mItems = array();
+       /** @var array Uncompressed item cache */
+       protected $mItems = array();
 
-       /** Total uncompressed size */
-       var $mSize = 0;
+       /** @var int Total uncompressed size */
+       protected $mSize = 0;
 
        /**
-        * Array of diffs. If a diff D from A to B is notated D = B - A, and Z is
-        * an empty string:
+        * @var array Array of diffs. If a diff D from A to B is notated D = B - A,
+        * and Z is an empty string:
         *
         *              { item[map[i]] - item[map[i-1]]   where i > 0
         *    diff[i] = {
         *              { item[map[i]] - Z                where i = 0
         */
-       var $mDiffs;
+       protected $mDiffs;
 
-       /** The diff map, see above */
-       var $mDiffMap;
+       /** @var array The diff map, see above */
+       protected $mDiffMap;
 
-       /**
-        * The key for getText()
+       /** @var int The key for getText()
         */
-       var $mDefaultKey;
+       protected $mDefaultKey;
 
-       /**
-        * Compressed storage
-        */
-       var $mCompressed;
+       /** @var string Compressed storage */
+       public $mCompressed;
 
-       /**
-        * True if the object is locked against further writes
-        */
-       var $mFrozen = false;
+       /** @var bool True if the object is locked against further writes */
+       protected $mFrozen = false;
 
        /**
-        * The maximum uncompressed size before the object becomes sad
+        * @var int The maximum uncompressed size before the object becomes sad
         * Should be less than max_allowed_packet
         */
-       var $mMaxSize = 10000000;
+       public $mMaxSize = 10000000;
 
-       /**
-        * The maximum number of text items before the object becomes sad
-        */
-       var $mMaxCount = 100;
+       /** @var int The maximum number of text items before the object becomes sad */
+       public $mMaxCount = 100;
 
        /** Constants from xdiff.h */
        const XDL_BDOP_INS = 1;
@@ -460,7 +468,8 @@ class DiffHistoryBlob implements HistoryBlob {
                );
                $smallFactor = 0.5;
 
-               for ( $i = 0; $i < count( $this->mItems ); $i++ ) {
+               $mItemsCount = count( $this->mItems );
+               for ( $i = 0; $i < $mItemsCount; $i++ ) {
                        $text = $this->mItems[$i];
                        if ( $i == 0 ) {
                                $seqName = 'main';
@@ -496,7 +505,8 @@ class DiffHistoryBlob implements HistoryBlob {
                                $this->mDiffs[] = $this->diff( $tail, $head );
                        }
                        $this->mDiffMap[] = $seq['map'][0];
-                       for ( $i = 1; $i < count( $seq['diffs'] ); $i++ ) {
+                       $diffsCount = count( $seq['diffs'] );
+                       for ( $i = 1; $i < $diffsCount; $i++ ) {
                                $this->mDiffs[] = $seq['diffs'][$i];
                                $this->mDiffMap[] = $seq['map'][$i];
                        }
@@ -606,7 +616,8 @@ class DiffHistoryBlob implements HistoryBlob {
                        return;
                }
                $tail = '';
-               for ( $diffKey = 0; $diffKey < count( $this->mDiffs ); $diffKey++ ) {
+               $mDiffsCount = count( $this->mDiffs );
+               for ( $diffKey = 0; $diffKey < $mDiffsCount; $diffKey++ ) {
                        $textKey = $this->mDiffMap[$diffKey];
                        $text = $this->patch( $tail, $this->mDiffs[$diffKey] );
                        $this->mItems[$textKey] = $text;
index a38b195..60db202 100644 (file)
@@ -1301,9 +1301,9 @@ class ImageHistoryList extends ContextSource {
                // Image dimensions + size
                $row .= '<td>';
                $row .= htmlspecialchars( $file->getDimensionsString() );
-               $row .= $this->msg( 'word-separator' )->plain();
+               $row .= $this->msg( 'word-separator' )->escaped();
                $row .= '<span style="white-space: nowrap;">';
-               $row .= $this->msg( 'parentheses' )->rawParams( Linker::formatSize( $file->getSize() ) )->plain();
+               $row .= $this->msg( 'parentheses' )->sizeParams( $file->getSize() )->escaped();
                $row .= '</span>';
                $row .= '</td>';
 
@@ -1316,7 +1316,7 @@ class ImageHistoryList extends ContextSource {
                } else {
                        if ( $local ) {
                                $row .= Linker::userLink( $userId, $userText );
-                               $row .= $this->msg( 'word-separator' )->plain();
+                               $row .= $this->msg( 'word-separator' )->escaped();
                                $row .= '<span style="white-space: nowrap;">';
                                $row .= Linker::userToolLinks( $userId, $userText );
                                $row .= '</span>';
index 59fa583..177d023 100644 (file)
@@ -40,12 +40,14 @@ class WikiImporter {
 
        /**
         * Creates an ImportXMLReader drawing from the source provided
-        * @param string $source
+        * @param ImportStreamSource $source
         */
-       function __construct( $source ) {
+       function __construct( ImportStreamSource $source ) {
                $this->reader = new XMLReader();
 
-               stream_wrapper_register( 'uploadsource', 'UploadSourceAdapter' );
+               if ( !in_array(  'uploadsource', stream_get_wrappers() ) ) {
+                       stream_wrapper_register( 'uploadsource', 'UploadSourceAdapter' );
+               }
                $id = UploadSourceAdapter::registerSource( $source );
                if ( defined( 'LIBXML_PARSEHUGE' ) ) {
                        $this->reader->open( "uploadsource://$id", null, LIBXML_PARSEHUGE );
@@ -218,7 +220,11 @@ class WikiImporter {
                        $this->mTargetRootPage = null;
                } elseif ( $rootpage !== '' ) {
                        $rootpage = rtrim( $rootpage, '/' ); //avoid double slashes
-                       $title = Title::newFromText( $rootpage, !is_null( $this->mTargetNamespace ) ? $this->mTargetNamespace : NS_MAIN );
+                       $title = Title::newFromText( $rootpage, !is_null( $this->mTargetNamespace )
+                               ? $this->mTargetNamespace
+                               : NS_MAIN
+                       );
+
                        if ( !$title || $title->isExternal() ) {
                                $status->fatal( 'import-rootpage-invalid' );
                        } else {
@@ -259,7 +265,7 @@ class WikiImporter {
         * @return bool
         */
        public function importRevision( $revision ) {
-               if ( !$revision->getContent()->getContentHandler()->canBeUsedOn( $revision->getTitle() ) ) {
+               if ( !$revision->getContentHandler()->canBeUsedOn( $revision->getTitle() ) ) {
                        $this->notice( 'import-error-bad-location',
                                $revision->getTitle()->getPrefixedText(),
                                $revision->getID(),
@@ -285,12 +291,12 @@ class WikiImporter {
 
        /**
         * Default per-revision callback, performs the import.
-        * @param WikiRevision $rev
+        * @param WikiRevision $revision
         * @return bool
         */
-       public function importLogItem( $rev ) {
+       public function importLogItem( $revision ) {
                $dbw = wfGetDB( DB_MASTER );
-               return $dbw->deadlockLoop( array( $rev, 'importLogItem' ) );
+               return $dbw->deadlockLoop( array( $revision, 'importLogItem' ) );
        }
 
        /**
@@ -310,7 +316,7 @@ class WikiImporter {
         * @param int $revCount
         * @param int $sRevCount
         * @param array $pageInfo
-        * @return
+        * @return bool
         */
        public function finishImportPage( $title, $origTitle, $revCount, $sRevCount, $pageInfo ) {
                $args = func_get_args();
@@ -387,6 +393,15 @@ class WikiImporter {
                }
        }
 
+       /**
+        * Retrieves the contents of the named attribute of the current element.
+        * @param string $attr the name of the attribute
+        * @return string the value of the attribute or an empty string if it is not set in the current element.
+        */
+       public function nodeAttribute( $attr ) {
+               return $this->reader->getAttribute( $attr );
+       }
+
        /**
         * Shouldn't something like this be built-in to XMLReader?
         * Fetches text contents of the current element, assuming
@@ -612,17 +627,28 @@ class WikiImporter {
                                                &$pageInfo ) ) ) {
                                // Do nothing
                        } elseif ( in_array( $tag, $normalFields ) ) {
-                               $pageInfo[$tag] = $this->nodeContents();
-                               if ( $tag == 'title' ) {
-                                       $title = $this->processTitle( $pageInfo['title'] );
+                               // An XML snippet:
+                               // <page>
+                               //     <id>123</id>
+                               //     <title>Page</title>
+                               //     <redirect title="NewTitle"/>
+                               //     ...
+                               // Because the redirect tag is built differently, we need special handling for that case.
+                               if ( $tag == 'redirect' ) {
+                                       $pageInfo[$tag] = $this->nodeAttribute( 'title' );
+                               } else {
+                                       $pageInfo[$tag] = $this->nodeContents();
+                                       if ( $tag == 'title' ) {
+                                               $title = $this->processTitle( $pageInfo['title'] );
 
-                                       if ( !$title ) {
-                                               $badTitle = true;
-                                               $skip = true;
-                                       }
+                                               if ( !$title ) {
+                                                       $badTitle = true;
+                                                       $skip = true;
+                                               }
 
-                                       $this->pageCallback( $title );
-                                       list( $pageInfo['_title'], $origTitle ) = $title;
+                                               $this->pageCallback( $title );
+                                               list( $pageInfo['_title'], $origTitle ) = $title;
+                                       }
                                }
                        } elseif ( $tag == 'revision' ) {
                                $this->handleRevision( $pageInfo );
@@ -690,9 +716,6 @@ class WikiImporter {
                if ( isset( $revisionInfo['id'] ) ) {
                        $revision->setID( $revisionInfo['id'] );
                }
-               if ( isset( $revisionInfo['text'] ) ) {
-                       $revision->setText( $revisionInfo['text'] );
-               }
                if ( isset( $revisionInfo['model'] ) ) {
                        $revision->setModel( $revisionInfo['model'] );
                }
@@ -701,6 +724,14 @@ class WikiImporter {
                }
                $revision->setTitle( $pageInfo['_title'] );
 
+               if ( isset( $revisionInfo['text'] ) ) {
+                       $handler = $revision->getContentHandler();
+                       $text = $handler->importTransform(
+                               $revisionInfo['text'],
+                               $revision->getFormat() );
+
+                       $revision->setText( $text );
+               }
                if ( isset( $revisionInfo['timestamp'] ) ) {
                        $revision->setTimestamp( $revisionInfo['timestamp'] );
                } else {
@@ -900,17 +931,23 @@ class WikiImporter {
 
 /** This is a horrible hack used to keep source compatibility */
 class UploadSourceAdapter {
-       static $sourceRegistrations = array();
+       /** @var array */
+       private static $sourceRegistrations = array();
 
+       /** @var string */
        private $mSource;
+
+       /** @var string */
        private $mBuffer;
+
+       /** @var int */
        private $mPosition;
 
        /**
-        * @param string $source
+        * @param ImportStreamSource $source
         * @return string
         */
-       static function registerSource( $source ) {
+       static function registerSource( ImportStreamSource $source ) {
                $id = wfRandomString();
 
                self::$sourceRegistrations[$id] = $source;
@@ -1042,30 +1079,83 @@ class XMLReader2 extends XMLReader {
  * @ingroup SpecialPage
  */
 class WikiRevision {
-       var $importer = null;
-
-       /**
-        * @var Title
-        */
-       var $title = null;
-       var $id = 0;
-       var $timestamp = "20010115000000";
-       var $user = 0;
-       var $user_text = "";
-       var $model = null;
-       var $format = null;
-       var $text = "";
-       var $content = null;
-       var $comment = "";
-       var $minor = false;
-       var $type = "";
-       var $action = "";
-       var $params = "";
-       var $fileSrc = '';
-       var $sha1base36 = false;
-       var $isTemp = false;
-       var $archiveName = '';
-       var $fileIsTemp;
+       /** @todo Unused? */
+       private $importer = null;
+
+       /** @var Title */
+       public $title = null;
+
+       /** @var int */
+       private $id = 0;
+
+       /** @var string */
+       public $timestamp = "20010115000000";
+
+       /**
+        * @var int
+        * @todo Can't find any uses. Public, because that's suspicious. Get clarity. */
+       public $user = 0;
+
+       /** @var string */
+       public $user_text = "";
+
+       /** @var string */
+       protected $model = null;
+
+       /** @var string */
+       protected $format = null;
+
+       /** @var string */
+       public $text = "";
+
+       /** @var int */
+       protected $size;
+
+       /** @var Content */
+       protected $content = null;
+
+       /** @var ContentHandler */
+       protected $contentHandler = null;
+
+       /** @var string */
+       public $comment = "";
+
+       /** @var bool */
+       protected $minor = false;
+
+       /** @var string */
+       protected $type = "";
+
+       /** @var string */
+       protected $action = "";
+
+       /** @var string */
+       protected $params = "";
+
+       /** @var string */
+       protected $fileSrc = '';
+
+       /** @var bool|string */
+       protected $sha1base36 = false;
+
+       /**
+        * @var bool
+        * @todo Unused?
+        */
+       private $isTemp = false;
+
+       /** @var string */
+       protected $archiveName = '';
+
+       protected $filename;
+
+       /** @var mixed */
+       protected $src;
+
+       /** @todo Unused? */
+       private $fileIsTemp;
+
+       /** @var bool */
        private $mNoUpdates = false;
 
        /**
@@ -1076,7 +1166,8 @@ class WikiRevision {
                if ( is_object( $title ) ) {
                        $this->title = $title;
                } elseif ( is_null( $title ) ) {
-                       throw new MWException( "WikiRevision given a null title in import. You may need to adjust \$wgLegalTitleChars." );
+                       throw new MWException( "WikiRevision given a null title in import. "
+                               . "You may need to adjust \$wgLegalTitleChars." );
                } else {
                        throw new MWException( "WikiRevision given non-object title in import." );
                }
@@ -1257,18 +1348,24 @@ class WikiRevision {
                return $this->text;
        }
 
+       /**
+        * @return ContentHandler
+        */
+       function getContentHandler() {
+               if ( is_null( $this->contentHandler ) ) {
+                       $this->contentHandler = ContentHandler::getForModelID( $this->getModel() );
+               }
+
+               return $this->contentHandler;
+       }
+
        /**
         * @return Content
         */
        function getContent() {
                if ( is_null( $this->content ) ) {
-                       $this->content =
-                               ContentHandler::makeContent(
-                                       $this->text,
-                                       $this->getTitle(),
-                                       $this->getModel(),
-                                       $this->getFormat()
-                               );
+                       $handler = $this->getContentHandler();
+                       $this->content = $handler->unserializeContent( $this->text, $this->getFormat() );
                }
 
                return $this->content;
@@ -1289,8 +1386,8 @@ class WikiRevision {
         * @return string
         */
        function getFormat() {
-               if ( is_null( $this->model ) ) {
-                       $this->format = ContentHandler::getForTitle( $this->getTitle() )->getDefaultFormat();
+               if ( is_null( $this->format ) ) {
+                       $this->format = $this->getContentHandler()->getDefaultFormat();
                }
 
                return $this->format;
@@ -1438,7 +1535,8 @@ class WikiRevision {
                        'page' => $pageId,
                        'content_model' => $this->getModel(),
                        'content_format' => $this->getFormat(),
-                       'text' => $this->getContent()->serialize( $this->getFormat() ), //XXX: just set 'content' => $this->getContent()?
+                       //XXX: just set 'content' => $this->getContent()?
+                       'text' => $this->getContent()->serialize( $this->getFormat() ),
                        'comment' => $this->getComment(),
                        'user' => $userId,
                        'user_text' => $userText,
@@ -1450,7 +1548,11 @@ class WikiRevision {
 
                if ( $changed !== false && !$this->mNoUpdates ) {
                        wfDebug( __METHOD__ . ": running updates\n" );
-                       $page->doEditUpdates( $revision, $userObj, array( 'created' => $created, 'oldcountable' => $oldcountable ) );
+                       $page->doEditUpdates(
+                               $revision,
+                               $userObj,
+                               array( 'created' => $created, 'oldcountable' => $oldcountable )
+                       );
                }
 
                return true;
@@ -1482,8 +1584,9 @@ class WikiRevision {
                );
                // @todo FIXME: This could fail slightly for multiple matches :P
                if ( $prior ) {
-                       wfDebug( __METHOD__ . ": skipping existing item for Log:{$this->type}/{$this->action}, timestamp " .
-                               $this->timestamp . "\n" );
+                       wfDebug( __METHOD__
+                               . ": skipping existing item for Log:{$this->type}/{$this->action}, timestamp "
+                               . $this->timestamp . "\n" );
                        return;
                }
                $log_id = $dbw->nextSequenceValue( 'logging_log_id_seq' );
@@ -1680,13 +1783,18 @@ class ImportStreamSource {
                }
                if ( !empty( $upload['error'] ) ) {
                        switch ( $upload['error'] ) {
-                               case 1: # The uploaded file exceeds the upload_max_filesize directive in php.ini.
+                               case 1:
+                                       # The uploaded file exceeds the upload_max_filesize directive in php.ini.
                                        return Status::newFatal( 'importuploaderrorsize' );
-                               case 2: # The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.
+                               case 2:
+                                       # The uploaded file exceeds the MAX_FILE_SIZE directive that
+                                       # was specified in the HTML form.
                                        return Status::newFatal( 'importuploaderrorsize' );
-                               case 3: # The uploaded file was only partially uploaded
+                               case 3:
+                                       # The uploaded file was only partially uploaded
                                        return Status::newFatal( 'importuploaderrorpartial' );
-                               case 6: #Missing a temporary folder.
+                               case 6:
+                                       # Missing a temporary folder.
                                        return Status::newFatal( 'importuploaderrortemp' );
                                # case else: # Currently impossible
                        }
@@ -1731,7 +1839,9 @@ class ImportStreamSource {
         * @param int $pageLinkDepth
         * @return Status
         */
-       public static function newFromInterwiki( $interwiki, $page, $history = false, $templates = false, $pageLinkDepth = 0 ) {
+       public static function newFromInterwiki( $interwiki, $page, $history = false,
+               $templates = false, $pageLinkDepth = 0
+       ) {
                if ( $page == '' ) {
                        return Status::newFatal( 'import-noarticle' );
                }
index 894c97d..7d88f25 100644 (file)
@@ -30,7 +30,6 @@
  * @ingroup Skins
  */
 class Linker {
-
        /**
         * Flags for userToolLinks()
         */
@@ -44,7 +43,8 @@ class Linker {
         * @param string $class The contents of the class attribute; if an empty
         *   string is passed, which is the default value, defaults to 'external'.
         * @return string
-        * @deprecated since 1.18 Just pass the external class directly to something using Html::expandAttributes
+        * @deprecated since 1.18 Just pass the external class directly to something
+        *   using Html::expandAttributes.
         */
        static function getExternalLinkAttributes( $class = 'external' ) {
                wfDeprecated( __METHOD__, '1.18' );
@@ -389,13 +389,15 @@ class Linker {
                if ( $target->getPrefixedText() === '' && $target->hasFragment() ) {
                        return htmlspecialchars( $target->getFragment() );
                }
+
                return htmlspecialchars( $target->getPrefixedText() );
        }
 
        /**
-        * Make appropriate markup for a link to the current article. This is currently rendered
-        * as the bold link text. The calling sequence is the same as the other make*LinkObj static functions,
-        * despite $query not being used.
+        * Make appropriate markup for a link to the current article. This is
+        * currently rendered as the bold link text. The calling sequence is the
+        * same as the other make*LinkObj static functions, despite $query not
+        * being used.
         *
         * @param Title $nt
         * @param string $html [optional]
@@ -403,10 +405,14 @@ class Linker {
         * @param string $trail [optional]
         * @param string $prefix [optional]
         *
-        *
         * @return string
         */
        public static function makeSelfLinkObj( $nt, $html = '', $query = '', $trail = '', $prefix = '' ) {
+               $ret = "<strong class=\"selflink\">{$prefix}{$html}</strong>{$trail}";
+               if ( !wfRunHooks( 'SelfLinkBegin', array( $nt, &$html, &$trail, &$prefix, &$ret ) ) ) {
+                       return $ret;
+               }
+
                if ( $html == '' ) {
                        $html = htmlspecialchars( $nt->getPrefixedText() );
                }
@@ -491,7 +497,8 @@ class Linker {
                $img = '';
                $success = wfRunHooks( 'LinkerMakeExternalImage', array( &$url, &$alt, &$img ) );
                if ( !$success ) {
-                       wfDebug( "Hook LinkerMakeExternalImage changed the output of external image with url {$url} and alt text {$alt} to {$img}\n", true );
+                       wfDebug( "Hook LinkerMakeExternalImage changed the output of external image "
+                               . "with url {$url} and alt text {$alt} to {$img}\n", true );
                        return $img;
                }
                return Html::element( 'img',
@@ -536,8 +543,9 @@ class Linker {
         * @since 1.20
         * @return string HTML for an image, with links, wrappers, etc.
         */
-       public static function makeImageLink( /*Parser*/ $parser, Title $title, $file, $frameParams = array(),
-               $handlerParams = array(), $time = false, $query = "", $widthOption = null
+       public static function makeImageLink( /*Parser*/ $parser, Title $title,
+               $file, $frameParams = array(), $handlerParams = array(), $time = false,
+               $query = "", $widthOption = null
        ) {
                $res = null;
                $dummy = new DummyLinker;
@@ -587,8 +595,14 @@ class Linker {
                                $hp['width'] = $file->getWidth( $page );
                        }
 
-                       if ( isset( $fp['thumbnail'] ) || isset( $fp['manualthumb'] ) || isset( $fp['framed'] ) || isset( $fp['frameless'] ) || !$hp['width'] ) {
+                       if ( isset( $fp['thumbnail'] )
+                               || isset( $fp['manualthumb'] )
+                               || isset( $fp['framed'] )
+                               || isset( $fp['frameless'] )
+                               || !$hp['width']
+                       ) {
                                global $wgThumbLimits, $wgThumbUpright;
+
                                if ( $widthOption === null || !isset( $wgThumbLimits[$widthOption] ) ) {
                                        $widthOption = User::getDefaultOption( 'thumbsize' );
                                }
@@ -597,7 +611,10 @@ class Linker {
                                if ( isset( $fp['upright'] ) && $fp['upright'] == 0 ) {
                                        $fp['upright'] = $wgThumbUpright;
                                }
-                               // For caching health: If width scaled down due to upright parameter, round to full __0 pixel to avoid the creation of a lot of odd thumbs
+
+                               // For caching health: If width scaled down due to upright
+                               // parameter, round to full __0 pixel to avoid the creation of a
+                               // lot of odd thumbs.
                                $prefWidth = isset( $fp['upright'] ) ?
                                        round( $wgThumbLimits[$widthOption] * $fp['upright'], -1 ) :
                                        $wgThumbLimits[$widthOption];
@@ -632,8 +649,9 @@ class Linker {
 
                if ( $file && isset( $fp['frameless'] ) ) {
                        $srcWidth = $file->getWidth( $page );
-                       # For "frameless" option: do not present an image bigger than the source (for bitmap-style images)
-                       # This is the same behavior as the "thumb" option does it already.
+                       # For "frameless" option: do not present an image bigger than the
+                       # source (for bitmap-style images). This is the same behavior as the
+                       # "thumb" option does it already.
                        if ( $srcWidth && !$file->mustRender() && $hp['width'] > $srcWidth ) {
                                $hp['width'] = $srcWidth;
                        }
@@ -831,7 +849,9 @@ class Linker {
                        $fp['link-url'] = $url;
                }
 
-               $s = "<div class=\"thumb t{$fp['align']}\"><div class=\"thumbinner\" style=\"width:{$outerWidth}px;\">";
+               $s = "<div class=\"thumb t{$fp['align']}\">"
+                       . "<div class=\"thumbinner\" style=\"width:{$outerWidth}px;\">";
+
                if ( !$exists ) {
                        $s .= self::makeBrokenImageLinkObj( $title, $fp['title'], '', '', '', $time == true );
                        $zoomIcon = '';
@@ -845,7 +865,9 @@ class Linker {
                        $params = array(
                                'alt' => $fp['alt'],
                                'title' => $fp['title'],
-                               'img-class' => ( isset( $fp['class'] ) && $fp['class'] !== '' ? $fp['class'] . ' ' : '' ) . 'thumbimage'
+                               'img-class' => ( isset( $fp['class'] ) && $fp['class'] !== ''
+                                       ? $fp['class'] . ' '
+                                       : '' ) . 'thumbimage'
                        );
                        $params = self::getImageLinkMTOParams( $fp, $query ) + $params;
                        $s .= $thumb->toHtml( $params );
@@ -858,7 +880,8 @@ class Linker {
                                                'class' => 'internal',
                                                'title' => wfMessage( 'thumbnail-more' )->text() ),
                                                Html::element( 'img', array(
-                                                       'src' => $wgStylePath . '/common/images/magnify-clip' . ( $wgContLang->isRTL() ? '-rtl' : '' ) . '.png',
+                                                       'src' => $wgStylePath . '/common/images/magnify-clip'
+                                                               . ( $wgContLang->isRTL() ? '-rtl' : '' ) . '.png',
                                                        'width' => 15,
                                                        'height' => 11,
                                                        'alt' => "" ) ) ) );
@@ -910,7 +933,9 @@ class Linker {
         * @param bool $time A file of a certain timestamp was requested
         * @return string
         */
-       public static function makeBrokenImageLinkObj( $title, $label = '', $query = '', $unused1 = '', $unused2 = '', $time = false ) {
+       public static function makeBrokenImageLinkObj( $title, $label = '',
+               $query = '', $unused1 = '', $unused2 = '', $time = false
+       ) {
                global $wgEnableUploads, $wgUploadMissingFileUrl, $wgUploadNavigationUrl;
                if ( ! $title instanceof Title ) {
                        return "<!-- ERROR -->" . htmlspecialchars( $label );
@@ -922,7 +947,9 @@ class Linker {
                $encLabel = htmlspecialchars( $label );
                $currentExists = $time ? ( wfFindFile( $title ) != false ) : false;
 
-               if ( ( $wgUploadMissingFileUrl || $wgUploadNavigationUrl || $wgEnableUploads ) && !$currentExists ) {
+               if ( ( $wgUploadMissingFileUrl || $wgUploadNavigationUrl || $wgEnableUploads )
+                       && !$currentExists
+               ) {
                        $redir = RepoGroup::singleton()->getLocalRepo()->checkRedirect( $title );
 
                        if ( $redir ) {
@@ -1013,7 +1040,8 @@ class Linker {
 
                if ( !wfRunHooks( 'LinkerMakeMediaLinkFile',
                        array( $title, $file, &$html, &$attribs, &$ret ) ) ) {
-                       wfDebug( "Hook LinkerMakeMediaLinkFile changed the output of link with url {$url} and text {$html} to {$ret}\n", true );
+                       wfDebug( "Hook LinkerMakeMediaLinkFile changed the output of link "
+                               . "with url {$url} and text {$html} to {$ret}\n", true );
                        return $ret;
                }
 
@@ -1047,7 +1075,9 @@ class Linker {
         * @param Title|null $title Title object used for title specific link attributes
         * @return string
         */
-       public static function makeExternalLink( $url, $text, $escape = true, $linktype = '', $attribs = array(), $title = null ) {
+       public static function makeExternalLink( $url, $text, $escape = true,
+               $linktype = '', $attribs = array(), $title = null
+       ) {
                global $wgTitle;
                $class = "external";
                if ( $linktype ) {
@@ -1070,7 +1100,8 @@ class Linker {
                $success = wfRunHooks( 'LinkerMakeExternalLink',
                        array( &$url, &$text, &$link, &$attribs, $linktype ) );
                if ( !$success ) {
-                       wfDebug( "Hook LinkerMakeExternalLink changed the output of link with url {$url} and text {$text} to {$link}\n", true );
+                       wfDebug( "Hook LinkerMakeExternalLink changed the output of link "
+                               . "with url {$url} and text {$text} to {$link}\n", true );
                        return $link;
                }
                $attribs['href'] = $url;
@@ -1111,7 +1142,8 @@ class Linker {
         * @param string $userText User name or IP address
         * @param bool $redContribsWhenNoEdits Should the contributions link be
         *   red if the user has no edits?
-        * @param int $flags Customisation flags (e.g. Linker::TOOL_LINKS_NOBLOCK and Linker::TOOL_LINKS_EMAIL)
+        * @param int $flags Customisation flags (e.g. Linker::TOOL_LINKS_NOBLOCK
+        *   and Linker::TOOL_LINKS_EMAIL).
         * @param int $edits User edit count (optional, for performance)
         * @return string HTML fragment
         */
@@ -1285,12 +1317,6 @@ class Linker {
                return $comment;
        }
 
-       /**
-        * @var Title
-        */
-       static $autocommentTitle;
-       static $autocommentLocal;
-
        /**
         * Converts autogenerated comments in edit summaries into section links.
         * The pattern for autogen comments is / * foo * /, which makes for
@@ -1305,79 +1331,59 @@ class Linker {
         * @return string Formatted comment
         */
        private static function formatAutocomments( $comment, $title = null, $local = false ) {
-               // Bah!
-               self::$autocommentTitle = $title;
-               self::$autocommentLocal = $local;
-               $comment = preg_replace_callback(
+               return preg_replace_callback(
                        '!(.*)/\*\s*(.*?)\s*\*/(.*)!',
-                       array( 'Linker', 'formatAutocommentsCallback' ),
-                       $comment );
-               self::$autocommentTitle = null;
-               self::$autocommentLocal = null;
-               return $comment;
-       }
-
-       /**
-        * Helper function for Linker::formatAutocomments
-        * @param array $match
-        * @return string
-        */
-       private static function formatAutocommentsCallback( $match ) {
-               global $wgLang;
-               $title = self::$autocommentTitle;
-               $local = self::$autocommentLocal;
-
-               $pre = $match[1];
-               $auto = $match[2];
-               $post = $match[3];
-               $comment = null;
-               wfRunHooks( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local ) );
-               if ( $comment === null ) {
-                       $link = '';
-                       if ( $title ) {
-                               $section = $auto;
-
-                               # Remove links that a user may have manually put in the autosummary
-                               # This could be improved by copying as much of Parser::stripSectionName as desired.
-                               $section = str_replace( '[[:', '', $section );
-                               $section = str_replace( '[[', '', $section );
-                               $section = str_replace( ']]', '', $section );
-
-                               $section = Sanitizer::normalizeSectionNameWhitespace( $section ); # bug 22784
-                               if ( $local ) {
-                                       $sectionTitle = Title::newFromText( '#' . $section );
-                               } else {
-                                       $sectionTitle = Title::makeTitleSafe( $title->getNamespace(),
-                                               $title->getDBkey(), $section );
-                               }
-                               if ( $sectionTitle ) {
-                                       $link = self::link( $sectionTitle,
-                                               $wgLang->getArrow(), array(), array(),
-                                               'noclasses' );
-                               } else {
+                       function ( $match ) use ( $title, $local ) {
+                               global $wgLang;
+
+                               $pre = $match[1];
+                               $auto = $match[2];
+                               $post = $match[3];
+                               $comment = null;
+                               wfRunHooks( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local ) );
+                               if ( $comment === null ) {
                                        $link = '';
+                                       if ( $title ) {
+                                               $section = $auto;
+                                               # Remove links that a user may have manually put in the autosummary
+                                               # This could be improved by copying as much of Parser::stripSectionName as desired.
+                                               $section = str_replace( '[[:', '', $section );
+                                               $section = str_replace( '[[', '', $section );
+                                               $section = str_replace( ']]', '', $section );
+
+                                               $section = Sanitizer::normalizeSectionNameWhitespace( $section ); # bug 22784
+                                               if ( $local ) {
+                                                       $sectionTitle = Title::newFromText( '#' . $section );
+                                               } else {
+                                                       $sectionTitle = Title::makeTitleSafe( $title->getNamespace(),
+                                                               $title->getDBkey(), $section );
+                                               }
+                                               if ( $sectionTitle ) {
+                                                       $link = Linker::link( $sectionTitle,
+                                                               $wgLang->getArrow(), array(), array(),
+                                                               'noclasses' );
+                                               } else {
+                                                       $link = '';
+                                               }
+                                       }
+                                       if ( $pre ) {
+                                               # written summary $presep autocomment (summary /* section */)
+                                               $pre .= wfMessage( 'autocomment-prefix' )->inContentLanguage()->escaped();
+                                       }
+                                       if ( $post ) {
+                                               # autocomment $postsep written summary (/* section */ summary)
+                                               $auto .= wfMessage( 'colon-separator' )->inContentLanguage()->escaped();
+                                       }
+                                       $auto = '<span class="autocomment">' . $auto . '</span>';
+                                       $comment = $pre . $link . $wgLang->getDirMark()
+                                               . '<span dir="auto">' . $auto . $post . '</span>';
                                }
-                       }
-                       if ( $pre ) {
-                               # written summary $presep autocomment (summary /* section */)
-                               $pre .= wfMessage( 'autocomment-prefix' )->inContentLanguage()->escaped();
-                       }
-                       if ( $post ) {
-                               # autocomment $postsep written summary (/* section */ summary)
-                               $auto .= wfMessage( 'colon-separator' )->inContentLanguage()->escaped();
-                       }
-                       $auto = '<span class="autocomment">' . $auto . '</span>';
-                       $comment = $pre . $link . $wgLang->getDirMark() . '<span dir="auto">' . $auto . $post . '</span>';
-               }
-               return $comment;
+                               return $comment;
+               },
+                       $comment
+               );
        }
 
-       /**
-        * @var Title
-        */
-       static $commentContextTitle;
-       static $commentLocal;
-
        /**
         * Formats wiki links and media links in text; all other wiki formatting
         * is ignored
@@ -1389,9 +1395,7 @@ class Linker {
         * @return string
         */
        public static function formatLinksInComment( $comment, $title = null, $local = false ) {
-               self::$commentContextTitle = $title;
-               self::$commentLocal = $local;
-               $html = preg_replace_callback(
+               return preg_replace_callback(
                        '/
                                \[\[
                                :? # ignore optional leading colon
@@ -1404,83 +1408,79 @@ class Linker {
                                \]\]
                                ([^[]*) # 3. link trail (the text up until the next link)
                        /x',
-                       array( 'Linker', 'formatLinksInCommentCallback' ),
-                       $comment );
-               self::$commentContextTitle = null;
-               self::$commentLocal = null;
-               return $html;
-       }
-
-       /**
-        * @param array $match
-        * @return mixed
-        */
-       protected static function formatLinksInCommentCallback( $match ) {
-               global $wgContLang;
+                       function ( $match ) use ( $title, $local ) {
+                               global $wgContLang;
 
-               $medians = '(?:' . preg_quote( MWNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|';
-               $medians .= preg_quote( $wgContLang->getNsText( NS_MEDIA ), '/' ) . '):';
+                               $medians = '(?:' . preg_quote( MWNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|';
+                               $medians .= preg_quote( $wgContLang->getNsText( NS_MEDIA ), '/' ) . '):';
 
-               $comment = $match[0];
+                               $comment = $match[0];
 
-               # fix up urlencoded title texts (copied from Parser::replaceInternalLinks)
-               if ( strpos( $match[1], '%' ) !== false ) {
-                       $match[1] = str_replace( array( '<', '>' ), array( '&lt;', '&gt;' ), rawurldecode( $match[1] ) );
-               }
+                               # fix up urlencoded title texts (copied from Parser::replaceInternalLinks)
+                               if ( strpos( $match[1], '%' ) !== false ) {
+                                       $match[1] = str_replace( array( '<', '>' ), array( '&lt;', '&gt;' ), rawurldecode( $match[1] ) );
+                               }
 
-               # Handle link renaming [[foo|text]] will show link as "text"
-               if ( $match[2] != "" ) {
-                       $text = $match[2];
-               } else {
-                       $text = $match[1];
-               }
-               $submatch = array();
-               $thelink = null;
-               if ( preg_match( '/^' . $medians . '(.*)$/i', $match[1], $submatch ) ) {
-                       # Media link; trail not supported.
-                       $linkRegexp = '/\[\[(.*?)\]\]/';
-                       $title = Title::makeTitleSafe( NS_FILE, $submatch[1] );
-                       if ( $title ) {
-                               $thelink = self::makeMediaLinkObj( $title, $text );
-                       }
-               } else {
-                       # Other kind of link
-                       if ( preg_match( $wgContLang->linkTrail(), $match[3], $submatch ) ) {
-                               $trail = $submatch[1];
-                       } else {
-                               $trail = "";
-                       }
-                       $linkRegexp = '/\[\[(.*?)\]\]' . preg_quote( $trail, '/' ) . '/';
-                       if ( isset( $match[1][0] ) && $match[1][0] == ':' ) {
-                               $match[1] = substr( $match[1], 1 );
-                       }
-                       list( $inside, $trail ) = self::splitTrail( $trail );
-
-                       $linkText = $text;
-                       $linkTarget = self::normalizeSubpageLink( self::$commentContextTitle,
-                               $match[1], $linkText );
-
-                       $target = Title::newFromText( $linkTarget );
-                       if ( $target ) {
-                               if ( $target->getText() == '' && !$target->isExternal()
-                                       && !self::$commentLocal && self::$commentContextTitle
-                               ) {
-                                       $newTarget = clone ( self::$commentContextTitle );
-                                       $newTarget->setFragment( '#' . $target->getFragment() );
-                                       $target = $newTarget;
+                               # Handle link renaming [[foo|text]] will show link as "text"
+                               if ( $match[2] != "" ) {
+                                       $text = $match[2];
+                               } else {
+                                       $text = $match[1];
+                               }
+                               $submatch = array();
+                               $thelink = null;
+                               if ( preg_match( '/^' . $medians . '(.*)$/i', $match[1], $submatch ) ) {
+                                       # Media link; trail not supported.
+                                       $linkRegexp = '/\[\[(.*?)\]\]/';
+                                       $title = Title::makeTitleSafe( NS_FILE, $submatch[1] );
+                                       if ( $title ) {
+                                               $thelink = Linker::makeMediaLinkObj( $title, $text );
+                                       }
+                               } else {
+                                       # Other kind of link
+                                       if ( preg_match( $wgContLang->linkTrail(), $match[3], $submatch ) ) {
+                                               $trail = $submatch[1];
+                                       } else {
+                                               $trail = "";
+                                       }
+                                       $linkRegexp = '/\[\[(.*?)\]\]' . preg_quote( $trail, '/' ) . '/';
+                                       if ( isset( $match[1][0] ) && $match[1][0] == ':' ) {
+                                               $match[1] = substr( $match[1], 1 );
+                                       }
+                                       list( $inside, $trail ) = Linker::splitTrail( $trail );
+
+                                       $linkText = $text;
+                                       $linkTarget = Linker::normalizeSubpageLink( $title, $match[1], $linkText );
+
+                                       $target = Title::newFromText( $linkTarget );
+                                       if ( $target ) {
+                                               if ( $target->getText() == '' && !$target->isExternal()
+                                                       && !$local && $title
+                                               ) {
+                                                       $newTarget = clone ( $title );
+                                                       $newTarget->setFragment( '#' . $target->getFragment() );
+                                                       $target = $newTarget;
+                                               }
+                                               $thelink = Linker::link(
+                                                       $target,
+                                                       $linkText . $inside
+                                               ) . $trail;
+                                       }
+                               }
+                               if ( $thelink ) {
+                                       // If the link is still valid, go ahead and replace it in!
+                                       $comment = preg_replace(
+                                               $linkRegexp,
+                                               StringUtils::escapeRegexReplacement( $thelink ),
+                                               $comment,
+                                               1
+                                       );
                                }
-                               $thelink = self::link(
-                                       $target,
-                                       $linkText . $inside
-                               ) . $trail;
-                       }
-               }
-               if ( $thelink ) {
-                       // If the link is still valid, go ahead and replace it in!
-                       $comment = preg_replace( $linkRegexp, StringUtils::escapeRegexReplacement( $thelink ), $comment, 1 );
-               }
 
-               return $comment;
+                               return $comment;
+                       },
+                       $comment
+               );
        }
 
        /**
@@ -1736,7 +1736,9 @@ class Linker {
         *
         * @return string HTML headline
         */
-       public static function makeHeadline( $level, $attribs, $anchor, $html, $link, $legacyAnchor = false ) {
+       public static function makeHeadline( $level, $attribs, $anchor, $html,
+               $link, $legacyAnchor = false
+       ) {
                $ret = "<h$level$attribs"
                        . "<span class=\"mw-headline\" id=\"$anchor\">$html</span>"
                        . $link
@@ -1792,10 +1794,13 @@ class Linker {
         * @param array $options
         * @return string
         */
-       public static function generateRollback( $rev, IContextSource $context = null, $options = array( 'verify' ) ) {
+       public static function generateRollback( $rev, IContextSource $context = null,
+               $options = array( 'verify' )
+       ) {
                if ( $context === null ) {
                        $context = RequestContext::getMain();
                }
+
                $editCount = false;
                if ( in_array( 'verify', $options ) ) {
                        $editCount = self::getRollbackEditCount( $rev, true );
@@ -1855,9 +1860,13 @@ class Linker {
                $moreRevs = false;
                foreach ( $res as $row ) {
                        if ( $rev->getRawUserText() != $row->rev_user_text ) {
-                               if ( $verify && ( $row->rev_deleted & Revision::DELETED_TEXT || $row->rev_deleted & Revision::DELETED_USER ) ) {
-                                       // If the user or the text of the revision we might rollback to is deleted in some way we can't rollback
-                                       // Similar to the sanity checks in WikiPage::commitRollback
+                               if ( $verify &&
+                                       ( $row->rev_deleted & Revision::DELETED_TEXT
+                                               || $row->rev_deleted & Revision::DELETED_USER
+                               ) ) {
+                                       // If the user or the text of the revision we might rollback
+                                       // to is deleted in some way we can't rollback. Similar to
+                                       // the sanity checks in WikiPage::commitRollback.
                                        return false;
                                }
                                $moreRevs = true;
@@ -1883,7 +1892,9 @@ class Linker {
         * @param int $editCount Number of edits that would be reverted
         * @return string HTML fragment
         */
-       public static function buildRollbackLink( $rev, IContextSource $context = null, $editCount = false ) {
+       public static function buildRollbackLink( $rev, IContextSource $context = null,
+               $editCount = false
+       ) {
                global $wgShowRollbackEditCount, $wgMiserMode;
 
                // To config which pages are effected by miser mode
@@ -1897,7 +1908,10 @@ class Linker {
                $query = array(
                        'action' => 'rollback',
                        'from' => $rev->getUserText(),
-                       'token' => $context->getUser()->getEditToken( array( $title->getPrefixedText(), $rev->getUserText() ) ),
+                       'token' => $context->getUser()->getEditToken( array(
+                               $title->getPrefixedText(),
+                               $rev->getUserText()
+                       ) ),
                );
                if ( $context->getRequest()->getBool( 'bot' ) ) {
                        $query['bot'] = '1';
@@ -1914,13 +1928,17 @@ class Linker {
                        }
                }
 
-               if ( !$disableRollbackEditCount && is_int( $wgShowRollbackEditCount ) && $wgShowRollbackEditCount > 0 ) {
+               if ( !$disableRollbackEditCount
+                       && is_int( $wgShowRollbackEditCount )
+                       && $wgShowRollbackEditCount > 0
+               ) {
                        if ( !is_numeric( $editCount ) ) {
                                $editCount = self::getRollbackEditCount( $rev, false );
                        }
 
                        if ( $editCount > $wgShowRollbackEditCount ) {
-                               $editCount_output = $context->msg( 'rollbacklinkcount-morethan' )->numParams( $wgShowRollbackEditCount )->parse();
+                               $editCount_output = $context->msg( 'rollbacklinkcount-morethan' )
+                                       ->numParams( $wgShowRollbackEditCount )->parse();
                        } else {
                                $editCount_output = $context->msg( 'rollbacklinkcount' )->numParams( $editCount )->parse();
                        }
@@ -1958,7 +1976,9 @@ class Linker {
         * @param Title|Message|string|null $more An escaped link for "More..." of the templates
         * @return string HTML output
         */
-       public static function formatTemplates( $templates, $preview = false, $section = false, $more = null ) {
+       public static function formatTemplates( $templates, $preview = false,
+               $section = false, $more = null
+       ) {
                global $wgLang;
                wfProfileIn( __METHOD__ );
 
@@ -2062,7 +2082,10 @@ class Linker {
                        $outText .= "</div><ul>\n";
 
                        foreach ( $hiddencats as $titleObj ) {
-                               $outText .= '<li>' . self::link( $titleObj, null, array(), array(), 'known' ) . "</li>\n"; # If it's hidden, it must exist - no need to check with a LinkBatch
+                               # If it's hidden, it must exist - no need to check with a LinkBatch
+                               $outText .= '<li>'
+                                       . self::link( $titleObj, null, array(), array(), 'known' )
+                                       . "</li>\n";
                        }
                        $outText .= '</ul>';
                }
@@ -2128,7 +2151,7 @@ class Linker {
                return $tooltip;
        }
 
-       static $accesskeycache;
+       private static $accesskeycache;
 
        /**
         * Given the id of an interface element, constructs the appropriate
@@ -2225,7 +2248,11 @@ class Linker {
                $html = wfMessage( $msgKey )->escaped();
                $tag = $restricted ? 'strong' : 'span';
                $link = self::link( $sp, $html, array(), $query, array( 'known', 'noclasses' ) );
-               return Xml::tags( $tag, array( 'class' => 'mw-revdelundel-link' ), wfMessage( 'parentheses' )->rawParams( $link )->escaped() );
+               return Xml::tags(
+                       $tag,
+                       array( 'class' => 'mw-revdelundel-link' ),
+                       wfMessage( 'parentheses' )->rawParams( $link )->escaped()
+               );
        }
 
        /**
index cd75f0b..3e327c3 100644 (file)
@@ -216,7 +216,7 @@ class MagicWord {
                'numberofadmins' => 3600,
                'numberofviews' => 3600,
                'numberingroup' => 3600,
-               );
+       );
 
        static public $mDoubleUnderscoreIDs = array(
                'notoc',
index 582ba60..f4d4697 100644 (file)
@@ -569,20 +569,30 @@ class MimeMagic {
         * @param string $file
         * @param mixed $ext
         * @return bool|string
+        * @throws MWException
         */
        private function doGuessMimeType( $file, $ext ) { // TODO: remove $ext param
                // Read a chunk of the file
                wfSuppressWarnings();
-               // @todo FIXME: Shouldn't this be rb?
-               $f = fopen( $file, 'rt' );
+               $f = fopen( $file, 'rb' );
                wfRestoreWarnings();
 
                if ( !$f ) {
                        return 'unknown/unknown';
                }
+
+               $fsize = filesize( $file );
+               if ( $fsize === false ) {
+                       return 'unknown/unknown';
+               }
+
                $head = fread( $f, 1024 );
-               fseek( $f, -65558, SEEK_END );
-               $tail = fread( $f, 65558 ); // 65558 = maximum size of a zip EOCDR
+               $tailLength = min( 65558, $fsize ); // 65558 = maximum size of a zip EOCDR
+               if ( fseek( $f, -1 * $tailLength, SEEK_END ) === -1 ) {
+                       throw new MWException(
+                               "Seeking $tailLength bytes from EOF failed in " . __METHOD__ );
+               }
+               $tail = fread( $f, $tailLength );
                fclose( $f );
 
                wfDebug( __METHOD__ . ": analyzing head and tail of $file for magic numbers.\n" );
index 72869e4..8fd7812 100644 (file)
@@ -473,8 +473,10 @@ class OutputPage extends ContextSource {
         * Get all registered JS and CSS tags for the header.
         *
         * @return string
+        * @deprecated since 1.24 Use OutputPage::headElement to build the full header.
         */
        function getScript() {
+               wfDeprecated( __METHOD__, '1.24' );
                return $this->mScripts . $this->getHeadItems();
        }
 
@@ -630,8 +632,11 @@ class OutputPage extends ContextSource {
         * Get all header items in a string
         *
         * @return string
+        * @deprecated since 1.24 Use OutputPage::headElement or
+        *   if absolutely necessary use OutputPage::getHeadItemsArray
         */
        function getHeadItems() {
+               wfDeprecated( __METHOD__, '1.24' );
                $s = '';
                foreach ( $this->mHeadItems as $item ) {
                        $s .= $item;
@@ -1884,7 +1889,12 @@ class OutputPage extends ContextSource {
         *   /w/index.php?title=Main_page&variant=zh-cn should never be served.
         */
        function addAcceptLanguage() {
-               $lang = $this->getTitle()->getPageLanguage();
+               $title = $this->getTitle();
+               if ( !$title instanceof Title ) {
+                       return;
+               }
+
+               $lang = $title->getPageLanguage();
                if ( !$this->getRequest()->getCheck( 'variant' ) && $lang->hasVariants() ) {
                        $variants = $lang->getVariants();
                        $aloption = array();
@@ -2585,15 +2595,18 @@ $templates
 
                $ret .= Html::element( 'title', null, $this->getHTMLTitle() ) . "\n";
 
-               $ret .= (
-                       $this->getHeadLinks() .
-                       "\n" .
-                       $this->buildCssLinks() .
-                       // No newline after buildCssLinks since makeResourceLoaderLink did that already
-                       $this->getHeadScripts() .
-                       "\n" .
-                       $this->getHeadItems()
-               );
+               foreach ( $this->getHeadLinksArray() as $item ) {
+                       $ret .= $item . "\n";
+               }
+
+               // No newline after buildCssLinks since makeResourceLoaderLink did that already
+               $ret .= $this->buildCssLinks();
+
+               $ret .= $this->getHeadScripts() . "\n";
+
+               foreach ( $this->mHeadItems as $item ) {
+                       $ret .= $item . "\n";
+               }
 
                $closeHead = Html::closeElement( 'head' );
                if ( $closeHead ) {
@@ -3269,13 +3282,13 @@ $templates
                                        'rel' => 'alternate',
                                        'type' => 'application/x-wiki',
                                        'title' => $msg,
-                                       'href' => $this->getTitle()->getLocalURL( 'action=edit' )
+                                       'href' => $this->getTitle()->getEditURL(),
                                ) );
                                // Alternate edit link
                                $tags['alternative-edit'] = Html::element( 'link', array(
                                        'rel' => 'edit',
                                        'title' => $msg,
-                                       'href' => $this->getTitle()->getLocalURL( 'action=edit' )
+                                       'href' => $this->getTitle()->getEditURL(),
                                ) );
                        }
                }
@@ -3434,8 +3447,11 @@ $templates
 
        /**
         * @return string HTML tag links to be put in the header.
+        * @deprecated since 1.24 Use OutputPage::headElement or if you have to,
+        *   OutputPage::getHeadLinksArray directly.
         */
        public function getHeadLinks() {
+               wfDeprecated( __METHOD__, '1.24' );
                return implode( "\n", $this->getHeadLinksArray() );
        }
 
index 1f1b7dd..081315e 100644 (file)
@@ -1010,29 +1010,11 @@ class Preferences {
         * @param array $defaultPreferences
         */
        static function searchPreferences( $user, IContextSource $context, &$defaultPreferences ) {
-               global $wgContLang;
-
-               $defaultPreferences['searcheverything'] = array(
-                       'type' => 'toggle',
-                       'label-message' => 'searcheverything-enable',
-                       'section' => 'searchoptions/advancedsearchoptions',
-               );
-
-               $nsOptions = $wgContLang->getFormattedNamespaces();
-               $nsOptions[0] = $context->msg( 'blanknamespace' )->text();
-               foreach ( $nsOptions as $ns => $name ) {
-                       if ( $ns < 0 ) {
-                               unset( $nsOptions[$ns] );
-                       }
+               foreach ( MWNamespace::getValidNamespaces() as $n ) {
+                       $defaultPreferences[ 'searchNs' . $n ] = array(
+                               'type' => 'api',
+                       );
                }
-
-               $defaultPreferences['searchnamespaces'] = array(
-                       'type' => 'multiselect',
-                       'label-message' => 'defaultns',
-                       'options' => array_flip( $nsOptions ),
-                       'section' => 'searchoptions/advancedsearchoptions',
-                       'prefix' => 'searchNs',
-               );
        }
 
        /**
index a796d35..13696ad 100644 (file)
@@ -166,10 +166,26 @@ abstract class PrefixSearch {
        protected function specialSearch( $search, $limit ) {
                global $wgContLang;
 
-               # normalize searchKey, so aliases with spaces can be found - bug 25675
-               $search = str_replace( ' ', '_', $search );
+               list( $searchKey, $subpageSearch ) = explode( '/', $search, 2 );
+
+               // Handle subpage search separately.
+               if ( $subpageSearch !== null ) {
+                       // Try matching the full search string as a page name
+                       $specialTitle = Title::makeTitleSafe( NS_SPECIAL, $searchKey );
+                       $special = SpecialPageFactory::getPage( $specialTitle->getText() );
+                       if ( $special ) {
+                               $subpages = $special->prefixSearchSubpages( $subpageSearch, $limit );
+                               return array_map( function ( $sub ) use ( $specialTitle ) {
+                                       return $specialTitle->getSubpage( $sub );
+                               }, $subpages );
+                       } else {
+                               return array();
+                       }
+               }
 
-               $searchKey = $wgContLang->caseFold( $search );
+               # normalize searchKey, so aliases with spaces can be found - bug 25675
+               $searchKey = str_replace( ' ', '_', $searchKey );
+               $searchKey = $wgContLang->caseFold( $searchKey );
 
                // Unlike SpecialPage itself, we want the canonical forms of both
                // canonical and alias title forms...
index d34ee03..456e4e6 100644 (file)
@@ -117,15 +117,12 @@ class ProtectionForm {
                                // Expiry selected from list
                                $this->mExpiry[$action] = '';
                                $this->mExpirySelection[$action] = $requestExpirySelection;
-                       } elseif ( $existingExpiry == 'infinity' ) {
-                               // Existing expiry is infinite, use "infinite" in drop-down
-                               $this->mExpiry[$action] = '';
-                               $this->mExpirySelection[$action] = 'infinite';
                        } elseif ( $existingExpiry ) {
                                // Use existing expiry in its own list item
                                $this->mExpiry[$action] = '';
                                $this->mExpirySelection[$action] = $existingExpiry;
                        } else {
+                               // Catches 'infinity' - Existing expiry is infinite, use "infinite" in drop-down
                                // Final default: infinite
                                $this->mExpiry[$action] = '';
                                $this->mExpirySelection[$action] = 'infinite';
index b0423fb..06f5bd0 100644 (file)
@@ -444,6 +444,7 @@ class Revision implements IDBAccessObject {
                        'ar_id',
                        'ar_page_id',
                        'ar_rev_id',
+                       'ar_text',
                        'ar_text_id',
                        'ar_timestamp',
                        'ar_comment',
@@ -524,7 +525,7 @@ class Revision implements IDBAccessObject {
        /**
         * Constructor
         *
-        * @param object $row Either a database row or an array
+        * @param object|array $row Either a database row or an array
         * @throws MWException
         * @access private
         */
@@ -1731,6 +1732,7 @@ class Revision implements IDBAccessObject {
         * 50 revisions for the sake of performance.
         *
         * @since 1.20
+        * @deprecated since 1.24
         *
         * @param DatabaseBase|int $db The Database to perform the check on. May be given as a
         *        Database object or a database identifier usable with wfGetDB.
index 1ea6523..6a568c2 100644 (file)
@@ -1507,11 +1507,11 @@ class Sanitizer {
         */
        static function setupAttributeWhitelist() {
                global $wgAllowRdfaAttributes, $wgAllowMicrodataAttributes;
-
                static $whitelist, $staticInitialised;
+
                $globalContext = implode( '-', compact( 'wgAllowRdfaAttributes', 'wgAllowMicrodataAttributes' ) );
 
-               if ( isset( $whitelist ) && $staticInitialised == $globalContext ) {
+               if ( $whitelist !== null && $staticInitialised == $globalContext ) {
                        return $whitelist;
                }
 
index a1bca22..51368b1 100644 (file)
@@ -601,6 +601,13 @@ $wgTitle = null;
 
 $wgDeferredUpdateList = array();
 
+// Enable default skins.
+// This is hacky and bad, but it will go away before 1.24 release (or so I hope).
+// These lines should eventually be placed in skins' meta definition files, and loaded by a
+// require_once for each skin file generated by the installer and placed in LocalSettings.php.
+$wgValidSkinNames['monobook'] = 'MonoBook';
+$wgValidSkinNames['vector'] = 'Vector';
+
 wfProfileOut( $fname . '-globals' );
 wfProfileIn( $fname . '-extensions' );
 
index c428079..0d165fe 100644 (file)
 
 /**
  * The main skin class which provides methods and properties for all other skins.
- * This base class is also the "Standard" skin.
  *
  * See docs/skin.txt for more information.
  *
  * @ingroup Skins
  */
 abstract class Skin extends ContextSource {
-       protected $skinname = 'standard';
+       protected $skinname = null;
        protected $mRelevantTitle = null;
        protected $mRelevantUser = null;
 
@@ -64,6 +63,29 @@ abstract class Skin extends ContextSource {
 
                                        if ( preg_match( '/^([^.]*)\.php$/', $file, $matches ) ) {
                                                $aSkin = $matches[1];
+
+                                               // Explicitly disallow loading core skins via the autodiscovery mechanism.
+                                               //
+                                               // They should be loaded already (in a non-autodicovery way), but old files might still
+                                               // exist on the server because our MW version upgrade process is widely documented as
+                                               // requiring just copying over all files, without removing old ones.
+                                               //
+                                               // This is one of the reasons we should have never used autodiscovery in the first
+                                               // place. This hack can be safely removed when autodiscovery is gone.
+                                               if ( in_array( $aSkin, array( 'CologneBlue', 'Modern', 'MonoBook', 'Vector' ) ) ) {
+                                                       wfLogWarning(
+                                                               "An old copy of the $aSkin skin was found in your skins/ directory. " .
+                                                               "You should remove it to avoid problems in the future." .
+                                                               "See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for details."
+                                                       );
+                                                       continue;
+                                               }
+
+                                               wfLogWarning(
+                                                       "A skin using autodiscovery mechanism, $aSkin, was found in your skins/ directory. " .
+                                                       "The mechanism will be removed in MediaWiki 1.25 and the skin will no longer be recognized. " .
+                                                       "See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for information how to fix this."
+                                               );
                                                $wgValidSkinNames[strtolower( $aSkin )] = $aSkin;
                                        }
                                }
@@ -82,7 +104,7 @@ abstract class Skin extends ContextSource {
        static function getSkinNameMessages() {
                $messages = array();
                foreach ( self::getSkinNames() as $skinKey => $skinName ) {
-                       // Messages: skinname-cologneblue, skinname-monobook, skinname-modern, skinname-vector
+                       // Messages: skinname-vector, skinname-monobook
                        $messages[] = "skinname-$skinKey";
                }
                return $messages;
@@ -119,8 +141,8 @@ abstract class Skin extends ContextSource {
        /**
         * Normalize a skin preference value to a form that can be loaded.
         * If a skin can't be found, it will fall back to the configured
-        * default (or the old 'Classic' skin if that's broken).
-        * @param string $key 'monobook', 'standard', etc.
+        * default, or the hardcoded default if that's broken.
+        * @param string $key 'monobook', 'vector', etc.
         * @return string
         */
        static function normalizeKey( $key ) {
@@ -160,7 +182,7 @@ abstract class Skin extends ContextSource {
 
        /**
         * Factory method for loading a skin of a given type
-        * @param string $key 'monobook', 'standard', etc.
+        * @param string $key 'monobook', 'vector', etc.
         * @return Skin
         */
        static function &newFromKey( $key ) {
@@ -185,7 +207,6 @@ abstract class Skin extends ContextSource {
                                # is no longer valid.
                                wfDebug( "Skin class does not exist: $className\n" );
                                $className = 'SkinVector';
-                               require_once "{$wgStyleDirectory}/Vector.php";
                        }
                }
                $skin = new $className( $key );
@@ -721,7 +742,6 @@ abstract class Skin extends ContextSource {
         * @return string
         */
        function subPageSubtitle() {
-               global $wgLang;
                $out = $this->getOutput();
                $subpages = '';
 
@@ -737,6 +757,7 @@ abstract class Skin extends ContextSource {
                                $c = 0;
                                $growinglink = '';
                                $display = '';
+                               $lang = $this->getLanguage();
 
                                foreach ( $links as $link ) {
                                        $growinglink .= $link;
@@ -752,7 +773,7 @@ abstract class Skin extends ContextSource {
                                                $c++;
 
                                                if ( $c > 1 ) {
-                                                       $subpages .= $wgLang->getDirMarkEntity() . $this->msg( 'pipe-separator' )->escaped();
+                                                       $subpages .= $lang->getDirMarkEntity() . $this->msg( 'pipe-separator' )->escaped();
                                                } else {
                                                        $subpages .= '&lt; ';
                                                }
index 08816ad..86bd979 100644 (file)
@@ -86,12 +86,6 @@ class SkinTemplate extends Skin {
         */
        public $template = 'QuickTemplate';
 
-       /**
-        * @var bool Whether this skin use OutputPage::headElement() to generate
-        *   the "<head>" tag.
-        */
-       public $useHeadElement = false;
-
        /**
         * Add specific styles for this skin
         *
@@ -290,26 +284,6 @@ class SkinTemplate extends Skin {
                $out = $this->getOutput();
                $tpl = $this->setupTemplateForOutput();
 
-               wfProfileIn( __METHOD__ . '-stuff-head' );
-               if ( !$this->useHeadElement ) {
-                       $tpl->set( 'pagecss', false );
-                       $tpl->set( 'usercss', false );
-
-                       $tpl->set( 'userjs', false );
-                       $tpl->set( 'userjsprev', false );
-
-                       $tpl->set( 'jsvarurl', false );
-
-                       $tpl->set( 'xhtmldefaultnamespace', 'http://www.w3.org/1999/xhtml' );
-                       $tpl->set( 'xhtmlnamespaces', $wgXhtmlNamespaces );
-                       $tpl->set( 'html5version', $wgHtml5Version );
-                       $tpl->set( 'headlinks', $out->getHeadLinks() );
-                       $tpl->set( 'csslinks', $out->buildCssLinks() );
-                       $tpl->set( 'pageclass', $this->getPageClasses( $title ) );
-                       $tpl->set( 'skinnameclass', ( 'skin-' . Sanitizer::escapeClass( $this->getSkinName() ) ) );
-               }
-               wfProfileOut( __METHOD__ . '-stuff-head' );
-
                wfProfileIn( __METHOD__ . '-stuff2' );
                $tpl->set( 'title', $out->getPageTitle() );
                $tpl->set( 'pagetitle', $out->getHTMLTitle() );
@@ -540,11 +514,7 @@ class SkinTemplate extends Skin {
                $tpl->set( 'nav_urls', $this->buildNavUrls() );
 
                // Set the head scripts near the end, in case the above actions resulted in added scripts
-               if ( $this->useHeadElement ) {
-                       $tpl->set( 'headelement', $out->headElement( $this ) );
-               } else {
-                       $tpl->set( 'headscripts', $out->getHeadScripts() . $out->getHeadItems() );
-               }
+               $tpl->set( 'headelement', $out->headElement( $this ) );
 
                $tpl->set( 'debug', '' );
                $tpl->set( 'debughtml', $this->generateDebugHTML() );
index 64df81b..6508bce 100644 (file)
  */
 class StubObject {
        /** @var null|string */
-       protected $mGlobal;
+       protected $global;
 
        /** @var null|string */
-       protected $mClass;
+       protected $class;
 
        /** @var array */
-       protected $mParams;
+       protected $params;
 
        /**
         * Constructor.
@@ -59,9 +59,9 @@ class StubObject {
         * @param array $params Parameters to pass to constructor of the real object.
         */
        function __construct( $global = null, $class = null, $params = array() ) {
-               $this->mGlobal = $global;
-               $this->mClass = $class;
-               $this->mParams = $params;
+               $this->global = $global;
+               $this->class = $class;
+               $this->params = $params;
        }
 
        /**
@@ -102,7 +102,7 @@ class StubObject {
         */
        function _call( $name, $args ) {
                $this->_unstub( $name, 5 );
-               return call_user_func_array( array( $GLOBALS[$this->mGlobal], $name ), $args );
+               return call_user_func_array( array( $GLOBALS[$this->global], $name ), $args );
        }
 
        /**
@@ -110,7 +110,7 @@ class StubObject {
         * @return object
         */
        function _newObject() {
-               return MWFunction::newObj( $this->mClass, $this->mParams );
+               return MWFunction::newObj( $this->class, $this->params );
        }
 
        /**
@@ -139,22 +139,22 @@ class StubObject {
        function _unstub( $name = '_unstub', $level = 2 ) {
                static $recursionLevel = 0;
 
-               if ( !$GLOBALS[$this->mGlobal] instanceof StubObject ) {
-                       return $GLOBALS[$this->mGlobal]; // already unstubbed.
+               if ( !$GLOBALS[$this->global] instanceof StubObject ) {
+                       return $GLOBALS[$this->global]; // already unstubbed.
                }
 
-               if ( get_class( $GLOBALS[$this->mGlobal] ) != $this->mClass ) {
-                       $fname = __METHOD__ . '-' . $this->mGlobal;
+               if ( get_class( $GLOBALS[$this->global] ) != $this->class ) {
+                       $fname = __METHOD__ . '-' . $this->global;
                        wfProfileIn( $fname );
                        $caller = wfGetCaller( $level );
                        if ( ++$recursionLevel > 2 ) {
                                wfProfileOut( $fname );
                                throw new MWException( "Unstub loop detected on call of "
-                                       . "\${$this->mGlobal}->$name from $caller\n" );
+                                       . "\${$this->global}->$name from $caller\n" );
                        }
-                       wfDebug( "Unstubbing \${$this->mGlobal} on call of "
-                               . "\${$this->mGlobal}::$name from $caller\n" );
-                       $GLOBALS[$this->mGlobal] = $this->_newObject();
+                       wfDebug( "Unstubbing \${$this->global} on call of "
+                               . "\${$this->global}::$name from $caller\n" );
+                       $GLOBALS[$this->global] = $this->_newObject();
                        --$recursionLevel;
                        wfProfileOut( $fname );
                }
index 67958ff..9d8614d 100644 (file)
@@ -2723,11 +2723,14 @@ class Title {
         * Cascading protection: Get the source of any cascading restrictions on this page.
         *
         * @param bool $getPages Whether or not to retrieve the actual pages
-        *        that the restrictions have come from.
-        * @return array|bool Array of Title objects of the pages from which cascading restrictions
-        *     have come, false for none, or true if such restrictions exist, but $getPages
-        *     was not set.  The restriction array is an array of each type, each of which
-        *     contains a array of unique groups.
+        *        that the restrictions have come from and the actual restrictions
+        *        themselves.
+        * @return array Two elements: First is an array of Title objects of the
+        *        pages from which cascading restrictions have come, false for
+        *        none, or true if such restrictions exist but $getPages was not
+        *        set. Second is an array like that returned by
+        *        Title::getAllRestrictions(), or an empty array if $getPages is
+        *        false.
         */
        public function getCascadeProtectionSources( $getPages = true ) {
                global $wgContLang;
@@ -2834,7 +2837,8 @@ class Title {
         * Accessor/initialisation for mRestrictions
         *
         * @param string $action Action that permission needs to be checked for
-        * @return array Array of Strings the array of groups allowed to edit this article
+        * @return array Restriction levels needed to take the action. All levels
+        *     are required.
         */
        public function getRestrictions( $action ) {
                if ( !$this->mRestrictionsLoaded ) {
@@ -2848,9 +2852,8 @@ class Title {
        /**
         * Accessor/initialisation for mRestrictions
         *
-        * @return array Array of Arrays of Strings the first level indexed by
-        * action, the second level containing the names of the groups
-        * allowed to perform each action
+        * @return array Keys are actions, values are arrays as returned by
+        *     Title::getRestrictions()
         * @since 1.23
         */
        public function getAllRestrictions() {
@@ -3932,7 +3935,7 @@ class Title {
 
                if ( $createRedirect ) {
                        if ( $this->getNamespace() == NS_CATEGORY
-                               && !wfMessage( 'category-move-redirect-override' )->isDisabled()
+                               && !wfMessage( 'category-move-redirect-override' )->inContentLanguage()->isDisabled()
                        ) {
                                $redirectContent = new WikitextContent(
                                        wfMessage( 'category-move-redirect-override' )
@@ -4728,6 +4731,10 @@ class Title {
                        return false;
                }
 
+               if ( $this->mArticleID === 0 ) {
+                       return true; // avoid gap locking if we know it's not there
+               }
+
                $method = __METHOD__;
                $dbw = wfGetDB( DB_MASTER );
                $conds = $this->pageCond();
index 6578341..f2d3d9b 100644 (file)
@@ -1146,7 +1146,7 @@ class User {
                        $token = rtrim( $proposedUser->getToken( false ) ); // correct token
                        // Make comparison in constant time (bug 61346)
                        $passwordCorrect = strlen( $token )
-                               && $this->compareSecrets( $token, $request->getCookie( 'Token' ) );
+                               && hash_equals( $token, $request->getCookie( 'Token' ) );
                        $from = 'cookie';
                } else {
                        // No session or persistent login cookie
@@ -1165,27 +1165,6 @@ class User {
                }
        }
 
-       /**
-        * A comparison of two strings, not vulnerable to timing attacks
-        * @param string $answer The secret string that you are comparing against.
-        * @param string $test Compare this string to the $answer.
-        * @return bool True if the strings are the same, false otherwise
-        */
-       protected function compareSecrets( $answer, $test ) {
-               if ( strlen( $answer ) !== strlen( $test ) ) {
-                       $passwordCorrect = false;
-               } else {
-                       $result = 0;
-                       $answerLength = strlen( $answer );
-                       for ( $i = 0; $i < $answerLength; $i++ ) {
-                               $result |= ord( $answer[$i] ) ^ ord( $test[$i] );
-                       }
-                       $passwordCorrect = ( $result == 0 );
-               }
-
-               return $passwordCorrect;
-       }
-
        /**
         * Load user and user_group data from the database.
         * $this->mId must be set, this is how the user is identified.
@@ -1274,9 +1253,6 @@ class User {
                        $this->mNewpassword = $row->user_newpassword;
                        $this->mNewpassTime = wfTimestampOrNull( TS_MW, $row->user_newpass_time );
                        $this->mEmail = $row->user_email;
-                       if ( isset( $row->user_options ) ) {
-                               $this->decodeOptions( $row->user_options );
-                       }
                        $this->mTouched = wfTimestamp( TS_MW, $row->user_touched );
                        $this->mToken = $row->user_token;
                        if ( $this->mToken == '' ) {
@@ -1672,6 +1648,9 @@ class User {
         * Primitive rate limits: enforce maximum actions per time period
         * to put a brake on flooding.
         *
+        * The method generates both a generic profiling point and a per action one
+        * (suffix being "-$action".
+        *
         * @note When using a shared cache like memcached, IP-address
         * last-hit counters will be shared across wikis.
         *
@@ -1698,6 +1677,7 @@ class User {
 
                global $wgMemc;
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $action );
 
                $limits = $wgRateLimits[$action];
                $keys = array();
@@ -1776,6 +1756,7 @@ class User {
                        }
                }
 
+               wfProfileOut( __METHOD__ . '-' . $action );
                wfProfileOut( __METHOD__ );
                return $triggered;
        }
@@ -2568,6 +2549,8 @@ class User {
        /**
         * Set the given option for a user.
         *
+        * You need to call saveSettings() to actually write to the database.
+        *
         * @param string $oname The option to set
         * @param mixed $val New value to set
         */
@@ -3318,34 +3301,6 @@ class User {
                }
        }
 
-       /**
-        * Set this user's options from an encoded string
-        * @param string $str Encoded options to import
-        *
-        * @deprecated since 1.19 due to removal of user_options from the user table
-        */
-       private function decodeOptions( $str ) {
-               wfDeprecated( __METHOD__, '1.19' );
-               if ( !$str ) {
-                       return;
-               }
-
-               $this->mOptionsLoaded = true;
-               $this->mOptionOverrides = array();
-
-               // If an option is not set in $str, use the default value
-               $this->mOptions = self::getDefaultOptions();
-
-               $a = explode( "\n", $str );
-               foreach ( $a as $s ) {
-                       $m = array();
-                       if ( preg_match( "/^(.[^=]*)=(.*)$/", $s, $m ) ) {
-                               $this->mOptions[$m[1]] = $m[2];
-                               $this->mOptionOverrides[$m[1]] = $m[2];
-                       }
-               }
-       }
-
        /**
         * Set a cookie on the user's client. Wrapper for
         * WebResponse::setCookie
@@ -4823,7 +4778,9 @@ class User {
        }
 
        /**
-        * @todo document
+        * Saves the non-default options for this user, as previously set e.g. via
+        * setOption(), in the database's "user_properties" (preferences) table.
+        * Usually used via saveSettings().
         */
        protected function saveOptions() {
                $this->loadOptions();
@@ -4838,13 +4795,13 @@ class User {
                }
 
                $userId = $this->getId();
-               $insert_rows = array();
+
+               $insert_rows = array(); // all the new preference rows
                foreach ( $saveOptions as $key => $value ) {
                        // Don't bother storing default values
                        $defaultOption = self::getDefaultOption( $key );
-                       if ( ( is_null( $defaultOption ) &&
-                               !( $value === false || is_null( $value ) ) ) ||
-                               $value != $defaultOption
+                       if ( ( $defaultOption === null && $value !== false && $value !== null )
+                               || $value != $defaultOption
                        ) {
                                $insert_rows[] = array(
                                        'up_user' => $userId,
@@ -4855,14 +4812,22 @@ class User {
                }
 
                $dbw = wfGetDB( DB_MASTER );
-               // Find and delete any prior preference rows...
+
                $res = $dbw->select( 'user_properties',
-                       array( 'up_property' ), array( 'up_user' => $userId ), __METHOD__ );
-               $priorKeys = array();
+                       array( 'up_property', 'up_value' ), array( 'up_user' => $userId ), __METHOD__ );
+
+               // Find prior rows that need to be removed or updated. These rows will
+               // all be deleted (the later so that INSERT IGNORE applies the new values).
+               $keysDelete = array();
                foreach ( $res as $row ) {
-                       $priorKeys[] = $row->up_property;
+                       if ( !isset( $saveOptions[$row->up_property] )
+                               || strcmp( $saveOptions[$row->up_property], $row->up_value ) != 0
+                       ) {
+                               $keysDelete[] = $row->up_property;
+                       }
                }
-               if ( count( $priorKeys ) ) {
+
+               if ( count( $keysDelete ) ) {
                        // Do the DELETE by PRIMARY KEY for prior rows.
                        // In the past a very large portion of calls to this function are for setting
                        // 'rememberpassword' for new accounts (a preference that has since been removed).
@@ -4871,7 +4836,7 @@ class User {
                        // updates would pile up on each other as they are for higher (newer) user IDs.
                        // It might not be necessary these days, but it shouldn't hurt either.
                        $dbw->delete( 'user_properties',
-                               array( 'up_user' => $userId, 'up_property' => $priorKeys ), __METHOD__ );
+                               array( 'up_user' => $userId, 'up_property' => $keysDelete ), __METHOD__ );
                }
                // Insert the new preference rows
                $dbw->insert( 'user_properties', $insert_rows, __METHOD__, array( 'IGNORE' ) );
index 391b49e..a703b64 100644 (file)
@@ -489,7 +489,7 @@ class WebRequest {
         * @param float $default
         * @return float
         */
-       public function getFloat( $name, $default = 0 ) {
+       public function getFloat( $name, $default = 0.0 ) {
                return floatval( $this->getVal( $name, $default ) );
        }
 
@@ -1119,6 +1119,9 @@ HTML;
 
                # collect the originating ips
                $ip = $this->getRawIP();
+               if ( !$ip ) {
+                       throw new MWException( 'Unable to determine IP.' );
+               }
 
                # Append XFF
                $forwardedFor = $this->getHeader( 'X-Forwarded-For' );
@@ -1126,34 +1129,35 @@ HTML;
                        $isConfigured = IP::isConfiguredProxy( $ip );
                        $ipchain = array_map( 'trim', explode( ',', $forwardedFor ) );
                        $ipchain = array_reverse( $ipchain );
-                       if ( $ip ) {
-                               array_unshift( $ipchain, $ip );
-                       }
+                       array_unshift( $ipchain, $ip );
 
                        # Step through XFF list and find the last address in the list which is a
                        # trusted server. Set $ip to the IP address given by that trusted server,
                        # unless the address is not sensible (e.g. private). However, prefer private
                        # IP addresses over proxy servers controlled by this site (more sensible).
+                       # Note that some XFF values might be "unknown" with Squid/Varnish.
                        foreach ( $ipchain as $i => $curIP ) {
-                               // ignore 'unknown' value from Squid when 'forwarded_for off' and try next
-                               if ( $curIP === 'unknown' ) {
-                                       continue;
-                               }
                                $curIP = IP::sanitizeIP( IP::canonicalize( $curIP ) );
-                               if ( IP::isTrustedProxy( $curIP ) && isset( $ipchain[$i + 1] ) ) {
-                                       if ( IP::isConfiguredProxy( $curIP ) || // bug 48919; treat IP as sane
-                                               IP::isPublic( $ipchain[$i + 1] ) ||
-                                               $wgUsePrivateIPs
-                                       ) {
-                                               $nextIP = IP::canonicalize( $ipchain[$i + 1] );
-                                               if ( !$nextIP && $isConfigured ) {
-                                                       // We have not yet made it past CDN/proxy servers of this site,
-                                                       // so either they are misconfigured or there is some IP spoofing.
-                                                       throw new MWException( "Invalid IP given in XFF '$forwardedFor'." );
-                                               }
-                                               $ip = $nextIP;
-                                               continue;
+                               if ( !$curIP || !isset( $ipchain[$i + 1] ) || $ipchain[$i + 1] === 'unknown'
+                                       || !IP::isTrustedProxy( $curIP )
+                               ) {
+                                       break; // IP is not valid/trusted or does not point to anything
+                               }
+                               if (
+                                       IP::isPublic( $ipchain[$i + 1] ) ||
+                                       $wgUsePrivateIPs ||
+                                       IP::isConfiguredProxy( $curIP ) // bug 48919; treat IP as sane
+                               ) {
+                                       // Follow the next IP according to the proxy
+                                       $nextIP = IP::canonicalize( $ipchain[$i + 1] );
+                                       if ( !$nextIP && $isConfigured ) {
+                                               // We have not yet made it past CDN/proxy servers of this site,
+                                               // so either they are misconfigured or there is some IP spoofing.
+                                               throw new MWException( "Invalid IP given in XFF '$forwardedFor'." );
                                        }
+                                       $ip = $nextIP;
+                                       // keep traversing the chain
+                                       continue;
                                }
                                break;
                        }
index eff251f..a8bafa3 100644 (file)
@@ -434,6 +434,7 @@ class MediaWiki {
                }
 
                if ( wfRunHooks( 'UnknownAction', array( $request->getVal( 'action', 'view' ), $page ) ) ) {
+                       $output->setStatusCode( 404 );
                        $output->showErrorPage( 'nosuchaction', 'nosuchactiontext' );
                }
 
@@ -532,6 +533,7 @@ class MediaWiki {
                // Note: Do this after $wgTitle is setup, otherwise the hooks run from
                // isLoggedIn() will do all sorts of weird stuff.
                if (
+                       $request->getProtocol() == 'http' &&
                        (
                                $request->getCookie( 'forceHTTPS', '' ) ||
                                // check for prefixed version for currently logged in users
@@ -541,34 +543,36 @@ class MediaWiki {
                                        $this->context->getUser()->isLoggedIn()
                                        && $this->context->getUser()->requiresHTTPS()
                                )
-                       ) &&
-                       $request->getProtocol() == 'http'
+                       )
                ) {
                        $oldUrl = $request->getFullRequestURL();
                        $redirUrl = preg_replace( '#^http://#', 'https://', $oldUrl );
 
-                       if ( $request->wasPosted() ) {
-                               // This is weird and we'd hope it almost never happens. This
-                               // means that a POST came in via HTTP and policy requires us
-                               // redirecting to HTTPS. It's likely such a request is going
-                               // to fail due to post data being lost, but let's try anyway
-                               // and just log the instance.
-                               //
-                               // @todo @fixme See if we could issue a 307 or 308 here, need
-                               // to see how clients (automated & browser) behave when we do
-                               wfDebugLog( 'RedirectedPosts', "Redirected from HTTP to HTTPS: $oldUrl" );
+                       // ATTENTION: This hook is likely to be removed soon due to overall design of the system.
+                       if ( wfRunHooks( 'BeforeHttpsRedirect', array( $this->context, &$redirUrl ) ) ) {
+
+                               if ( $request->wasPosted() ) {
+                                       // This is weird and we'd hope it almost never happens. This
+                                       // means that a POST came in via HTTP and policy requires us
+                                       // redirecting to HTTPS. It's likely such a request is going
+                                       // to fail due to post data being lost, but let's try anyway
+                                       // and just log the instance.
+                                       //
+                                       // @todo @fixme See if we could issue a 307 or 308 here, need
+                                       // to see how clients (automated & browser) behave when we do
+                                       wfDebugLog( 'RedirectedPosts', "Redirected from HTTP to HTTPS: $oldUrl" );
+                               }
+                               // Setup dummy Title, otherwise OutputPage::redirect will fail
+                               $title = Title::newFromText( NS_MAIN, 'REDIR' );
+                               $this->context->setTitle( $title );
+                               $output = $this->context->getOutput();
+                               // Since we only do this redir to change proto, always send a vary header
+                               $output->addVaryHeader( 'X-Forwarded-Proto' );
+                               $output->redirect( $redirUrl );
+                               $output->output();
+                               wfProfileOut( __METHOD__ );
+                               return;
                        }
-
-                       // Setup dummy Title, otherwise OutputPage::redirect will fail
-                       $title = Title::newFromText( NS_MAIN, 'REDIR' );
-                       $this->context->setTitle( $title );
-                       $output = $this->context->getOutput();
-                       // Since we only do this redir to change proto, always send a vary header
-                       $output->addVaryHeader( 'X-Forwarded-Proto' );
-                       $output->redirect( $redirUrl );
-                       $output->output();
-                       wfProfileOut( __METHOD__ );
-                       return;
                }
 
                if ( $wgUseFileCache && $title->getNamespace() >= 0 ) {
index 9a26c15..cedbcf9 100644 (file)
@@ -1387,6 +1387,8 @@ class WikiPage implements Page, IDBAccessObject {
         * If the given revision is newer than the currently set page_latest,
         * update the page record. Otherwise, do nothing.
         *
+        * @deprecated since 1.24, use updateRevisionOn instead
+        *
         * @param DatabaseBase $dbw
         * @param Revision $revision
         * @return bool
@@ -1477,7 +1479,7 @@ class WikiPage implements Page, IDBAccessObject {
         * @throws MWException
         * @return string New complete article text, or null if error.
         *
-        * @deprecated since 1.21, use replaceSectionContent() instead
+        * @deprecated since 1.21, use replaceSectionAtRev() instead
         */
        public function replaceSection( $section, $text, $sectionTitle = '',
                $edittime = null
@@ -1528,11 +1530,41 @@ class WikiPage implements Page, IDBAccessObject {
         * @return Content New complete article content, or null if error.
         *
         * @since 1.21
+        * @deprecated since 1.24, use replaceSectionAtRev instead
         */
        public function replaceSectionContent( $section, Content $sectionContent, $sectionTitle = '',
                $edittime = null ) {
                wfProfileIn( __METHOD__ );
 
+               $baseRevId = null;
+               if ( $edittime && $section !== 'new' ) {
+                       $dbw = wfGetDB( DB_MASTER );
+                       $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
+                       if ( $rev ) {
+                               $baseRevId = $rev->getId();
+                       }
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $this->replaceSectionAtRev( $section, $sectionContent, $sectionTitle, $baseRevId );
+       }
+
+       /**
+        * @param string|null|bool $section Null/false, a section number (0, 1, 2, T1, T2, ...) or "new".
+        * @param Content $sectionContent New content of the section.
+        * @param string $sectionTitle New section's subject, only if $section is "new".
+        * @param string $baseRevId integer|null
+        *
+        * @throws MWException
+        * @return Content New complete article content, or null if error.
+        *
+        * @since 1.24
+        */
+       public function replaceSectionAtRev( $section, Content $sectionContent,
+               $sectionTitle = '', $baseRevId = null
+       ) {
+               wfProfileIn( __METHOD__ );
+
                if ( strval( $section ) == '' ) {
                        // Whole-page edit; let the whole text through
                        $newContent = $sectionContent;
@@ -1544,15 +1576,16 @@ class WikiPage implements Page, IDBAccessObject {
                        }
 
                        // Bug 30711: always use current version when adding a new section
-                       if ( is_null( $edittime ) || $section == 'new' ) {
+                       if ( is_null( $baseRevId ) || $section == 'new' ) {
                                $oldContent = $this->getContent();
                        } else {
+                               // TODO: try DB_SLAVE first
                                $dbw = wfGetDB( DB_MASTER );
-                               $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
+                               $rev = Revision::loadFromId( $dbw, $baseRevId );
 
                                if ( !$rev ) {
-                                       wfDebug( "WikiPage::replaceSection asked for bogus section (page: " .
-                                               $this->getId() . "; section: $section; edittime: $edittime)\n" );
+                                       wfDebug( __METHOD__ . " asked for bogus section (page: " .
+                                               $this->getId() . "; section: $section)\n" );
                                        wfProfileOut( __METHOD__ );
                                        return null;
                                }
@@ -1566,7 +1599,6 @@ class WikiPage implements Page, IDBAccessObject {
                                return null;
                        }
 
-                       // FIXME: $oldContent might be null?
                        $newContent = $oldContent->replaceSection( $section, $sectionContent, $sectionTitle );
                }
 
@@ -1838,11 +1870,7 @@ class WikiPage implements Page, IDBAccessObject {
 
                                        // Update page
                                        //
-                                       // Note that we use $this->mLatest instead of fetching a value from the master DB
-                                       // during the course of this function. This makes sure that EditPage can detect
-                                       // edit conflicts reliably, either by $ok here, or by $article->getTimestamp()
-                                       // before this function is called. A previous function used a separate query, this
-                                       // creates a window where concurrent edits can cause an ignored edit conflict.
+                                       // We check for conflicts by comparing $oldid with the current latest revision ID.
                                        $ok = $this->updateRevisionOn( $dbw, $revision, $oldid, $oldIsRedirect );
 
                                        if ( !$ok ) {
@@ -2748,15 +2776,22 @@ class WikiPage implements Page, IDBAccessObject {
                        return $status;
                }
 
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->begin( __METHOD__ );
+
                if ( $id == 0 ) {
                        $this->loadPageData( 'forupdate' );
                        $id = $this->getID();
                        if ( $id == 0 ) {
+                               $dbw->rollback( __METHOD__ );
                                $status->error( 'cannotdelete', wfEscapeWikiText( $this->getTitle()->getPrefixedText() ) );
                                return $status;
                        }
                }
 
+               // we need to remember the old content so we can use it to generate all deletion updates.
+               $content = $this->getContent( Revision::RAW );
+
                // Bitfields to further suppress the content
                if ( $suppress ) {
                        $bitfield = 0;
@@ -2769,11 +2804,6 @@ class WikiPage implements Page, IDBAccessObject {
                        $bitfield = 'rev_deleted';
                }
 
-               // we need to remember the old content so we can use it to generate all deletion updates.
-               $content = $this->getContent( Revision::RAW );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->begin( __METHOD__ );
                // For now, shunt the revision data into the archive table.
                // Text is *not* removed from the text table; bulk storage
                // is left intact to avoid breaking block-compression or
@@ -2831,6 +2861,9 @@ class WikiPage implements Page, IDBAccessObject {
                        $dbw->delete( 'revision', array( 'rev_page' => $id ), __METHOD__ );
                }
 
+               // Clone the title, so we have the information we need when we log
+               $logTitle = clone $this->mTitle;
+
                $this->doDeleteUpdates( $id, $content );
 
                // Log the deletion, if the page was suppressed, log it at Oversight instead
@@ -2838,10 +2871,14 @@ class WikiPage implements Page, IDBAccessObject {
 
                $logEntry = new ManualLogEntry( $logtype, 'delete' );
                $logEntry->setPerformer( $user );
-               $logEntry->setTarget( $this->mTitle );
+               $logEntry->setTarget( $logTitle );
                $logEntry->setComment( $reason );
                $logid = $logEntry->insert();
-               $logEntry->publish( $logid );
+
+               $dbw->onTransactionPreCommitOrIdle( function() use ( $dbw, $logEntry, $logid ) {
+                       // Bug 56776: avoid deadlocks (especially from FileDeleteForm)
+                       $logEntry->publish( $logid );
+               } );
 
                if ( $commit ) {
                        $dbw->commit( __METHOD__ );
index c9b3f8f..16e407f 100644 (file)
@@ -41,7 +41,6 @@ class RenderAction extends FormlessAction {
        }
 
        public function show() {
-
                $this->page->render();
        }
 }
index a1e02ef..25a1714 100644 (file)
@@ -87,17 +87,19 @@ abstract class ApiBase extends ContextSource {
         */
        const GET_VALUES_FOR_HELP = 1;
 
-       private $mMainModule, $mModuleName, $mModulePrefix;
+       /** @var ApiMain */
+       private $mMainModule;
+       /** @var string */
+       private $mModuleName, $mModulePrefix;
        private $mSlaveDB = null;
        private $mParamCache = array();
 
        /**
-        * Constructor
         * @param ApiMain $mainModule
         * @param string $moduleName Name of this module
         * @param string $modulePrefix Prefix to use for parameter names
         */
-       public function __construct( $mainModule, $moduleName, $modulePrefix = '' ) {
+       public function __construct( ApiMain $mainModule, $moduleName, $modulePrefix = '' ) {
                $this->mMainModule = $mainModule;
                $this->mModuleName = $moduleName;
                $this->mModulePrefix = $modulePrefix;
@@ -720,6 +722,9 @@ abstract class ApiBase extends ContextSource {
 
        /**
         * Die if none or more than one of a certain set of parameters is set and not false.
+        *
+        * Call getRequireOnlyOneParameterErrorMessages() to get a list of possible errors.
+        *
         * @param array $params User provided set of parameters, as from $this->extractRequestParams()
         * @param string $required,... Names of parameters of which exactly one must be set
         */
@@ -767,6 +772,9 @@ abstract class ApiBase extends ContextSource {
 
        /**
         * Die if more than one of a certain set of parameters is set and not false.
+        *
+        * Call getRequireMaxOneParameterErrorMessages() to get a list of possible errors.
+        *
         * @param array $params User provided set of parameters, as from $this->extractRequestParams()
         * @param string $required,... Names of parameters of which at most one must be set
         */
@@ -807,6 +815,8 @@ abstract class ApiBase extends ContextSource {
        /**
         * Die if none of a certain set of parameters is set and not false.
         *
+        * Call getRequireAtLeastOneParameterErrorMessages() to get a list of possible errors.
+        *
         * @since 1.23
         * @param array $params User provided set of parameters, as from $this->extractRequestParams()
         * @param string $required,... Names of parameters of which at least one must be set
@@ -847,6 +857,11 @@ abstract class ApiBase extends ContextSource {
        }
 
        /**
+        * Get a WikiPage object from a title or pageid param, if possible.
+        * Can die, if no param is set or if the title or page id is not valid.
+        *
+        * Call getTitleOrPageIdErrorMessage() to get a list of possible errors.
+        *
         * @param array $params
         * @param bool|string $load Whether load the object's state from the database:
         *        - false: don't load (if the pageid is given, it will still be loaded)
@@ -884,6 +899,8 @@ abstract class ApiBase extends ContextSource {
        }
 
        /**
+        * Generates the possible error getTitleOrPageId() can die with
+        *
         * @return array
         */
        public function getTitleOrPageIdErrorMessage() {
@@ -892,6 +909,7 @@ abstract class ApiBase extends ContextSource {
                        array(
                                array( 'invalidtitle', 'title' ),
                                array( 'nosuchpageid', 'pageid' ),
+                               array( 'code' => 'pagecannotexist', 'info' => "Namespace doesn't allow actual pages" ),
                        )
                );
        }
@@ -1947,15 +1965,13 @@ abstract class ApiBase extends ContextSource {
         * @since 1.21
         */
        public function dieUsageMsgOrDebug( $error ) {
-               global $wgDebugAPI;
-               if ( $wgDebugAPI !== true ) {
+               if ( $this->getConfig()->get( 'DebugAPI' ) !== true ) {
                        $this->dieUsageMsg( $error );
                }
 
                if ( is_string( $error ) ) {
                        $error = array( $error );
                }
-
                $parsed = $this->parseMsg( $error );
                $this->setWarning( '$wgDebugAPI: ' . $parsed['code'] . ' - ' . $parsed['info'] );
        }
index be8286c..35bba17 100644 (file)
@@ -90,7 +90,6 @@ class ApiCreateAccount extends ApiBase {
                $result = array();
                if ( $status->isGood() ) {
                        // Success!
-                       global $wgEmailAuthentication;
                        $user = $status->getValue();
 
                        if ( $params['language'] ) {
@@ -106,7 +105,7 @@ class ApiCreateAccount extends ApiBase {
                                        'createaccount-title',
                                        'createaccount-text'
                                ) );
-                       } elseif ( $wgEmailAuthentication && Sanitizer::validateEmail( $user->getEmail() ) ) {
+                       } elseif ( $this->getConfig()->get( 'EmailAuthentication' ) && Sanitizer::validateEmail( $user->getEmail() ) ) {
                                // Send out an email authentication message if needed
                                $status->merge( $user->sendConfirmationMail() );
                        }
@@ -183,8 +182,6 @@ class ApiCreateAccount extends ApiBase {
        }
 
        public function getAllowedParams() {
-               global $wgEmailConfirmToEdit;
-
                return array(
                        'name' => array(
                                ApiBase::PARAM_TYPE => 'user',
@@ -195,7 +192,7 @@ class ApiCreateAccount extends ApiBase {
                        'token' => null,
                        'email' => array(
                                ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => $wgEmailConfirmToEdit
+                               ApiBase::PARAM_REQUIRED => $this->getConfig()->get( 'EmailConfirmToEdit' ),
                        ),
                        'realname' => null,
                        'mailpassword' => array(
@@ -293,10 +290,9 @@ class ApiCreateAccount extends ApiBase {
                );
 
                // 'passwordtooshort' has parameters. :(
-               global $wgMinimalPasswordLength;
                $errors[] = array(
                        'code' => 'passwordtooshort',
-                       'info' => wfMessage( 'passwordtooshort', $wgMinimalPasswordLength )
+                       'info' => wfMessage( 'passwordtooshort', $this->getConfig()->get( 'MinimalPasswordLength' ) )
                                ->inLanguage( 'en' )->useDatabase( false )->parse()
                );
 
index 635f6f8..884306a 100644 (file)
@@ -48,6 +48,9 @@ class ApiEditPage extends ApiBase {
                $apiResult = $this->getResult();
 
                if ( $params['redirect'] ) {
+                       if ( $params['prependtext'] === null && $params['appendtext'] === null && $params['section'] !== 'new' ) {
+                               $this->dieUsage( 'You have attempted to edit using the "redirect"-following mode, which must be used in conjuction with section=new, prependtext, or appendtext.', 'redirect-appendonly' );
+                       }
                        if ( $titleObj->isRedirect() ) {
                                $oldTitle = $titleObj;
 
@@ -396,7 +399,6 @@ class ApiEditPage extends ApiBase {
 
                $status = $ep->internalAttemptSave( $result, $user->isAllowed( 'bot' ) && $params['bot'] );
                $wgRequest = $oldRequest;
-               global $wgMaxArticleSize;
 
                switch ( $status->value ) {
                        case EditPage::AS_HOOK_ERROR:
@@ -420,7 +422,7 @@ class ApiEditPage extends ApiBase {
 
                        case EditPage::AS_MAX_ARTICLE_SIZE_EXCEEDED:
                        case EditPage::AS_CONTENT_TOO_BIG:
-                               $this->dieUsageMsg( array( 'contenttoobig', $wgMaxArticleSize ) );
+                               $this->dieUsageMsg( array( 'contenttoobig', $this->getConfig()->get( 'MaxArticleSize' ) ) );
 
                        case EditPage::AS_READ_ONLY_PAGE_ANON:
                                $this->dieUsageMsg( 'noedit-anon' );
@@ -496,8 +498,6 @@ class ApiEditPage extends ApiBase {
        }
 
        public function getPossibleErrors() {
-               global $wgMaxArticleSize;
-
                return array_merge( parent::getPossibleErrors(),
                        $this->getTitleOrPageIdErrorMessage(),
                        array(
@@ -516,7 +516,7 @@ class ApiEditPage extends ApiBase {
                                array( 'spamdetected', 'spam' ),
                                array( 'summaryrequired' ),
                                array( 'blockedtext' ),
-                               array( 'contenttoobig', $wgMaxArticleSize ),
+                               array( 'contenttoobig', $this->getConfig()->get( 'MaxArticleSize' ) ),
                                array( 'noedit-anon' ),
                                array( 'noedit' ),
                                array( 'actionthrottledtext' ),
@@ -526,7 +526,7 @@ class ApiEditPage extends ApiBase {
                                array( 'editconflict' ),
                                array( 'emptynewsection' ),
                                array( 'unknownerror', 'retval' ),
-                               array( 'code' => 'nosuchsection', 'info' => 'There is no section section.' ),
+                               array( 'code' => 'nosuchsection', 'info' => 'There is no such section.' ),
                                array(
                                        'code' => 'invalidsection',
                                        'info' => 'The section parameter must be a valid section id or \'new\''
@@ -542,6 +542,10 @@ class ApiEditPage extends ApiBase {
                                array(
                                        'code' => 'appendnotsupported',
                                        'info' => 'This type of page can not be edited by appending or prepending text.' ),
+                               array(
+                                       'code' => 'redirect-appendonly',
+                                       'info' => 'You have attempted to edit using the "redirect"-following mode, which must be used in conjuction with section=new, prependtext, or appendtext.',
+                               ),
                                array(
                                        'code' => 'badformat',
                                        'info' => 'The requested serialization format can not be applied to the page\'s content model'
index 28ed5e4..eb3f87c 100644 (file)
@@ -39,6 +39,15 @@ class ApiExpandTemplates extends ApiBase {
 
                // Get parameters
                $params = $this->extractRequestParams();
+               $this->requireMaxOneParameter( $params, 'prop', 'generatexml' );
+
+               if ( $params['prop'] === null ) {
+                       $this->setWarning( 'Because no values have been specified for the prop parameter, a legacy format has been used for the output.'
+                                . ' This format is deprecated, and in the future, a default value will be set for the prop parameter, causing the new format to always be used.' );
+                       $prop = array();
+               } else {
+                       $prop = array_flip( $params['prop'] );
+               }
 
                // Create title for parser
                $title_obj = Title::newFromText( $params['title'] );
@@ -56,7 +65,9 @@ class ApiExpandTemplates extends ApiBase {
                        $options->setRemoveComments( false );
                }
 
-               if ( $params['generatexml'] ) {
+               $retval = array();
+
+               if ( isset( $prop['parsetree'] ) || $params['generatexml'] ) {
                        $wgParser->startExternalParse( $title_obj, $options, OT_PREPROCESS );
                        $dom = $wgParser->preprocessToDom( $params['text'] );
                        if ( is_callable( array( $dom, 'saveXML' ) ) ) {
@@ -64,16 +75,53 @@ class ApiExpandTemplates extends ApiBase {
                        } else {
                                $xml = $dom->__toString();
                        }
-                       $xml_result = array();
-                       ApiResult::setContent( $xml_result, $xml );
-                       $result->addValue( null, 'parsetree', $xml_result );
+                       if ( isset( $prop['parsetree'] ) ) {
+                               unset( $prop['parsetree'] );
+                               $retval['parsetree'] = $xml;
+                       } else {
+                               // the old way
+                               $xml_result = array();
+                               ApiResult::setContent( $xml_result, $xml );
+                               $result->addValue( null, 'parsetree', $xml_result );
+                       }
                }
-               $retval = $wgParser->preprocess( $params['text'], $title_obj, $options );
 
-               // Return result
-               $retval_array = array();
-               ApiResult::setContent( $retval_array, $retval );
-               $result->addValue( null, $this->getModuleName(), $retval_array );
+               // if they didn't want any output except (probably) the parse tree,
+               // then don't bother actually fully expanding it
+               if ( $prop || $params['prop'] === null ) {
+                       $frame = $wgParser->getPreprocessor()->newFrame();
+                       $wikitext = $wgParser->preprocess( $params['text'], $title_obj, $options, null, $frame );
+                       if ( $params['prop'] === null ) {
+                               // the old way
+                               ApiResult::setContent( $retval, $wikitext );
+                       } else {
+                               if ( isset( $prop['categories'] ) ) {
+                                       $categories = $wgParser->getOutput()->getCategories();
+                                       if ( !empty( $categories ) ) {
+                                               $categories_result = array();
+                                               foreach ( $categories as $category => $sortkey ) {
+                                                       $entry = array();
+                                                       $entry['sortkey'] = $sortkey;
+                                                       ApiResult::setContent( $entry, $category );
+                                                       $categories_result[] = $entry;
+                                               }
+                                               $result->setIndexedTagName( $categories_result, 'category' );
+                                               $retval['categories'] = $categories_result;
+                                       }
+                               }
+                               if ( isset( $prop['volatile'] ) && $frame->isVolatile() ) {
+                                       $retval['volatile'] = '';
+                               }
+                               if ( isset( $prop['ttl'] ) && $frame->getTTL() !== null ) {
+                                       $retval['ttl'] = $frame->getTTL();
+                               }
+                               if ( isset( $prop['wikitext'] ) ) {
+                                       $retval['wikitext'] = $wikitext;
+                               }
+                       }
+               }
+               $result->setSubelements( $retval, array( 'wikitext', 'parsetree' ) );
+               $result->addValue( null, $this->getModuleName(), $retval );
        }
 
        public function getAllowedParams() {
@@ -85,8 +133,21 @@ class ApiExpandTemplates extends ApiBase {
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true,
                        ),
-                       'generatexml' => false,
+                       'prop' => array(
+                               ApiBase::PARAM_TYPE => array(
+                                       'wikitext',
+                                       'categories',
+                                       'volatile',
+                                       'ttl',
+                                       'parsetree',
+                               ),
+                               ApiBase::PARAM_ISMULTI => true,
+                       ),
                        'includecomments' => false,
+                       'generatexml' => array(
+                               ApiBase::PARAM_TYPE => 'boolean',
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ),
                );
        }
 
@@ -94,16 +155,47 @@ class ApiExpandTemplates extends ApiBase {
                return array(
                        'text' => 'Wikitext to convert',
                        'title' => 'Title of page',
-                       'generatexml' => 'Generate XML parse tree',
+                       'prop' => array(
+                               'Which pieces of information to get',
+                               ' wikitext   - The expanded wikitext',
+                               ' categories - Any categories present in the input that are not represented in the wikitext output',
+                               ' volatile   - Whether the output is volatile and should not be reused elsewhere within the page',
+                               ' ttl        - The maximum time after which caches of the result should be invalidated',
+                               ' parsetree  - The XML parse tree of the input',
+                               'Note that if no values are selected, the result will contain the wikitext,',
+                               'but the output will be in a deprecated format.',
+                       ),
                        'includecomments' => 'Whether to include HTML comments in the output',
+                       'generatexml' => 'Generate XML parse tree (replaced by prop=parsetree)',
                );
        }
 
        public function getResultProperties() {
                return array(
-                       '' => array(
-                               '*' => 'string'
-                       )
+                       'wikitext' => array(
+                               'wikitext' => 'string',
+                       ),
+                       'categories' => array(
+                               'categories' => array(
+                                       ApiBase::PROP_TYPE => 'array',
+                                       ApiBase::PROP_NULLABLE => true,
+                               ),
+                       ),
+                       'volatile' => array(
+                               'volatile' => array(
+                                       ApiBase::PROP_TYPE => 'boolean',
+                                       ApiBase::PROP_NULLABLE => true,
+                               ),
+                       ),
+                       'ttl' => array(
+                               'ttl' => array(
+                                       ApiBase::PROP_TYPE => 'integer',
+                                       ApiBase::PROP_NULLABLE => true,
+                               ),
+                       ),
+                       'parsetree' => array(
+                               'parsetree' => 'string',
+                       ),
                );
        }
 
index afd5a13..3392a5c 100644 (file)
@@ -41,30 +41,29 @@ class ApiFeedContributions extends ApiBase {
        public function execute() {
                $params = $this->extractRequestParams();
 
-               global $wgFeed, $wgFeedClasses, $wgFeedLimit, $wgSitename, $wgLanguageCode;
-
-               if ( !$wgFeed ) {
+               $config = $this->getConfig();
+               if ( !$config->get( 'Feed' ) ) {
                        $this->dieUsage( 'Syndication feeds are not available', 'feed-unavailable' );
                }
 
-               if ( !isset( $wgFeedClasses[$params['feedformat']] ) ) {
+               $feedClasses = $config->get( 'FeedClasses' );
+               if ( !isset( $feedClasses[$params['feedformat']] ) ) {
                        $this->dieUsage( 'Invalid subscription feed type', 'feed-invalid' );
                }
 
-               global $wgMiserMode;
-               if ( $params['showsizediff'] && $wgMiserMode ) {
+               if ( $params['showsizediff'] && $this->getConfig()->get( 'MiserMode' ) ) {
                        $this->dieUsage( 'Size difference is disabled in Miser Mode', 'sizediffdisabled' );
                }
 
                $msg = wfMessage( 'Contributions' )->inContentLanguage()->text();
-               $feedTitle = $wgSitename . ' - ' . $msg . ' [' . $wgLanguageCode . ']';
+               $feedTitle = $config->get( 'Sitename' ) . ' - ' . $msg . ' [' . $config->get( 'LanguageCode' ) . ']';
                $feedUrl = SpecialPage::getTitleFor( 'Contributions', $params['user'] )->getFullURL();
 
                $target = $params['user'] == 'newbies'
                        ? 'newbies'
                        : Title::makeTitleSafe( NS_USER, $params['user'] )->getText();
 
-               $feed = new $wgFeedClasses[$params['feedformat']] (
+               $feed = new $feedClasses[$params['feedformat']] (
                        $feedTitle,
                        htmlspecialchars( $msg ),
                        $feedUrl
@@ -82,8 +81,9 @@ class ApiFeedContributions extends ApiBase {
                        'showSizeDiff' => $params['showsizediff'],
                ) );
 
-               if ( $pager->getLimit() > $wgFeedLimit ) {
-                       $pager->setLimit( $wgFeedLimit );
+               $feedLimit = $this->getConfig()->get( 'FeedLimit' );
+               if ( $pager->getLimit() > $feedLimit ) {
+                       $pager->setLimit( $feedLimit );
                }
 
                $feedItems = array();
@@ -159,8 +159,7 @@ class ApiFeedContributions extends ApiBase {
        }
 
        public function getAllowedParams() {
-               global $wgFeedClasses;
-               $feedFormatNames = array_keys( $wgFeedClasses );
+               $feedFormatNames = array_keys( $this->getConfig()->get( 'FeedClasses' ) );
 
                return array(
                        'feedformat' => array(
index a2641ee..bb68d5a 100644 (file)
@@ -40,15 +40,16 @@ class ApiFeedRecentChanges extends ApiBase {
         * as an RSS/Atom feed.
         */
        public function execute() {
-               global $wgFeed, $wgFeedClasses;
+               $config = $this->getConfig();
 
                $this->params = $this->extractRequestParams();
 
-               if ( !$wgFeed ) {
+               if ( !$config->get( 'Feed' ) ) {
                        $this->dieUsage( 'Syndication feeds are not available', 'feed-unavailable' );
                }
 
-               if ( !isset( $wgFeedClasses[$this->params['feedformat']] ) ) {
+               $feedClasses = $config->get( 'FeedClasses' );
+               if ( !isset( $feedClasses[$this->params['feedformat']] ) ) {
                        $this->dieUsage( 'Invalid subscription feed type', 'feed-invalid' );
                }
 
@@ -110,8 +111,8 @@ class ApiFeedRecentChanges extends ApiBase {
        }
 
        public function getAllowedParams() {
-               global $wgFeedClasses, $wgAllowCategorizedRecentChanges, $wgFeedLimit;
-               $feedFormatNames = array_keys( $wgFeedClasses );
+               $config = $this->getConfig();
+               $feedFormatNames = array_keys( $config->get( 'FeedClasses' ) );
 
                $ret = array(
                        'feedformat' => array(
@@ -133,7 +134,7 @@ class ApiFeedRecentChanges extends ApiBase {
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 50,
                                ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => $wgFeedLimit,
+                               ApiBase::PARAM_MAX => $config->get( 'FeedLimit' ),
                                ApiBase::PARAM_TYPE => 'integer',
                        ),
                        'from' => array(
@@ -157,7 +158,7 @@ class ApiFeedRecentChanges extends ApiBase {
                        'showlinkedto' => false,
                );
 
-               if ( $wgAllowCategorizedRecentChanges ) {
+               if ( $config->get( 'AllowCategorizedRecentChanges' ) ) {
                        $ret += array(
                                'categories' => array(
                                        ApiBase::PARAM_TYPE => 'string',
index 64c3eec..983b6a8 100644 (file)
@@ -50,16 +50,16 @@ class ApiFeedWatchlist extends ApiBase {
         * Wrap the result as an RSS/Atom feed.
         */
        public function execute() {
-               global $wgFeed, $wgFeedClasses, $wgFeedLimit, $wgSitename, $wgLanguageCode;
-
+               $config = $this->getConfig();
+               $feedClasses = $config->get( 'FeedClasses' );
                try {
                        $params = $this->extractRequestParams();
 
-                       if ( !$wgFeed ) {
+                       if ( !$config->get( 'Feed' ) ) {
                                $this->dieUsage( 'Syndication feeds are not available', 'feed-unavailable' );
                        }
 
-                       if ( !isset( $wgFeedClasses[$params['feedformat']] ) ) {
+                       if ( !isset( $feedClasses[$params['feedformat']] ) ) {
                                $this->dieUsage( 'Invalid subscription feed type', 'feed-invalid' );
                        }
 
@@ -75,7 +75,7 @@ class ApiFeedWatchlist extends ApiBase {
                                'wlprop' => 'title|user|comment|timestamp|ids',
                                'wldir' => 'older', // reverse order - from newest to oldest
                                'wlend' => $endTime, // stop at this time
-                               'wllimit' => min( 50, $wgFeedLimit )
+                               'wllimit' => min( 50, $this->getConfig()->get( 'FeedLimit' ) )
                        );
 
                        if ( $params['wlowner'] !== null ) {
@@ -122,10 +122,10 @@ class ApiFeedWatchlist extends ApiBase {
 
                        $msg = wfMessage( 'watchlist' )->inContentLanguage()->text();
 
-                       $feedTitle = $wgSitename . ' - ' . $msg . ' [' . $wgLanguageCode . ']';
+                       $feedTitle = $this->getConfig()->get( 'Sitename' ) . ' - ' . $msg . ' [' . $this->getConfig()->get( 'LanguageCode' ) . ']';
                        $feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
 
-                       $feed = new $wgFeedClasses[$params['feedformat']] (
+                       $feed = new $feedClasses[$params['feedformat']] (
                                $feedTitle,
                                htmlspecialchars( $msg ),
                                $feedUrl
@@ -137,14 +137,14 @@ class ApiFeedWatchlist extends ApiBase {
                        $this->getMain()->setCacheMaxAge( 0 );
 
                        // @todo FIXME: Localise  brackets
-                       $feedTitle = $wgSitename . ' - Error - ' .
+                       $feedTitle = $this->getConfig()->get( 'Sitename' ) . ' - Error - ' .
                                wfMessage( 'watchlist' )->inContentLanguage()->text() .
-                               ' [' . $wgLanguageCode . ']';
+                               ' [' . $this->getConfig()->get( 'LanguageCode' ) . ']';
                        $feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
 
                        $feedFormat = isset( $params['feedformat'] ) ? $params['feedformat'] : 'rss';
                        $msg = wfMessage( 'watchlist' )->inContentLanguage()->escaped();
-                       $feed = new $wgFeedClasses[$feedFormat] ( $feedTitle, $msg, $feedUrl );
+                       $feed = new $feedClasses[$feedFormat] ( $feedTitle, $msg, $feedUrl );
 
                        if ( $e instanceof UsageException ) {
                                $errorCode = $e->getCodeString();
@@ -205,8 +205,7 @@ class ApiFeedWatchlist extends ApiBase {
        }
 
        public function getAllowedParams( $flags = 0 ) {
-               global $wgFeedClasses;
-               $feedFormatNames = array_keys( $wgFeedClasses );
+               $feedFormatNames = array_keys( $this->getConfig()->get( 'FeedClasses' ) );
                $ret = array(
                        'feedformat' => array(
                                ApiBase::PARAM_DFLT => 'rss',
index 8954abc..03a6843 100644 (file)
@@ -154,9 +154,9 @@ abstract class ApiFormatBase extends ApiBase {
                $this->getMain()->getRequest()->response()->header( "Content-Type: $mime; charset=utf-8" );
 
                //Set X-Frame-Options API results (bug 39180)
-               global $wgApiFrameOptions;
-               if ( $wgApiFrameOptions ) {
-                       $this->getMain()->getRequest()->response()->header( "X-Frame-Options: $wgApiFrameOptions" );
+               $apiFrameOptions = $this->getConfig()->get( 'ApiFrameOptions' );
+               if ( $apiFrameOptions ) {
+                       $this->getMain()->getRequest()->response()->header( "X-Frame-Options: $apiFrameOptions" );
                }
 
                if ( $isHtml ) {
index 8e1d39d..b3d5937 100644 (file)
@@ -147,6 +147,15 @@ class ApiFormatXml extends ApiFormatBase {
                                $subElemIndName = null;
                        }
 
+                       if ( isset( $elemValue['_subelements'] ) ) {
+                               foreach ( $elemValue['_subelements'] as $subElemId ) {
+                                       if ( isset( $elemValue[$subElemId] ) && !is_array( $elemValue[$subElemId] ) ) {
+                                               $elemValue[$subElemId] = array( '*' => $elemValue[$subElemId] );
+                                       }
+                               }
+                               unset( $elemValue['_subelements'] );
+                       }
+
                        $indElements = array();
                        $subElements = array();
                        foreach ( $elemValue as $subElemId => & $subElemValue ) {
index 1d960c9..3144fc1 100644 (file)
@@ -98,8 +98,6 @@ class ApiImport extends ApiBase {
        }
 
        public function getAllowedParams() {
-               global $wgImportSources;
-
                return array(
                        'token' => array(
                                ApiBase::PARAM_TYPE => 'string',
@@ -110,7 +108,7 @@ class ApiImport extends ApiBase {
                                ApiBase::PARAM_TYPE => 'upload',
                        ),
                        'interwikisource' => array(
-                               ApiBase::PARAM_TYPE => $wgImportSources
+                               ApiBase::PARAM_TYPE => $this->getConfig()->get( 'ImportSources' ),
                        ),
                        'interwikipage' => null,
                        'fullhistory' => false,
index 6336e81..f818c5f 100644 (file)
@@ -79,8 +79,6 @@ class ApiLogin extends ApiBase {
                $loginForm = new LoginForm();
                $loginForm->setContext( $context );
 
-               global $wgCookiePrefix, $wgPasswordAttemptThrottle;
-
                $authRes = $loginForm->authenticateUserData();
                switch ( $authRes ) {
                        case LoginForm::SUCCESS:
@@ -100,14 +98,14 @@ class ApiLogin extends ApiBase {
                                $result['lguserid'] = intval( $user->getId() );
                                $result['lgusername'] = $user->getName();
                                $result['lgtoken'] = $user->getToken();
-                               $result['cookieprefix'] = $wgCookiePrefix;
+                               $result['cookieprefix'] = $this->getConfig()->get( 'CookiePrefix' );
                                $result['sessionid'] = session_id();
                                break;
 
                        case LoginForm::NEED_TOKEN:
                                $result['result'] = 'NeedToken';
                                $result['token'] = $loginForm->getLoginToken();
-                               $result['cookieprefix'] = $wgCookiePrefix;
+                               $result['cookieprefix'] = $this->getConfig()->get( 'CookiePrefix' );
                                $result['sessionid'] = session_id();
                                break;
 
@@ -149,7 +147,8 @@ class ApiLogin extends ApiBase {
 
                        case LoginForm::THROTTLED:
                                $result['result'] = 'Throttled';
-                               $result['wait'] = intval( $wgPasswordAttemptThrottle['seconds'] );
+                               $throttle = $this->getConfig()->get( 'PasswordAttemptThrottle' );
+                               $result['wait'] = intval( $throttle['seconds'] );
                                break;
 
                        case LoginForm::USER_BLOCKED:
index ccf91dd..84db9ed 100644 (file)
@@ -186,12 +186,12 @@ class ApiMain extends ApiBase {
                        }
                }
 
-               global $wgAPIModules, $wgAPIFormatModules;
+               $config = $this->getConfig();
                $this->mModuleMgr = new ApiModuleManager( $this );
                $this->mModuleMgr->addModules( self::$Modules, 'action' );
-               $this->mModuleMgr->addModules( $wgAPIModules, 'action' );
+               $this->mModuleMgr->addModules( $config->get( 'APIModules' ), 'action' );
                $this->mModuleMgr->addModules( self::$Formats, 'format' );
-               $this->mModuleMgr->addModules( $wgAPIFormatModules, 'format' );
+               $this->mModuleMgr->addModules( $config->get( 'APIFormatModules' ), 'format' );
 
                $this->mResult = new ApiResult( $this );
                $this->mEnableWrite = $enableWrite;
@@ -465,8 +465,6 @@ class ApiMain extends ApiBase {
         * @return bool False if the caller should abort (403 case), true otherwise (all other cases)
         */
        protected function handleCORS() {
-               global $wgCrossSiteAJAXdomains, $wgCrossSiteAJAXdomainExceptions;
-
                $originParam = $this->getParameter( 'origin' ); // defaults to null
                if ( $originParam === null ) {
                        // No origin parameter, nothing to do
@@ -494,10 +492,11 @@ class ApiMain extends ApiBase {
                        return false;
                }
 
+               $config = $this->getConfig();
                $matchOrigin = self::matchOrigin(
                        $originParam,
-                       $wgCrossSiteAJAXdomains,
-                       $wgCrossSiteAJAXdomainExceptions
+                       $config->get( 'CrossSiteAJAXdomains' ),
+                       $config->get( 'CrossSiteAJAXdomainExceptions' )
                );
 
                if ( $matchOrigin ) {
@@ -554,29 +553,29 @@ class ApiMain extends ApiBase {
        }
 
        protected function sendCacheHeaders() {
-               global $wgUseXVO, $wgVaryOnXFP;
                $response = $this->getRequest()->response();
                $out = $this->getOutput();
 
-               if ( $wgVaryOnXFP ) {
+               $config = $this->getConfig();
+
+               if ( $config->get( 'VaryOnXFP' ) ) {
                        $out->addVaryHeader( 'X-Forwarded-Proto' );
                }
 
                if ( $this->mCacheMode == 'private' ) {
                        $response->header( 'Cache-Control: private' );
-
                        return;
                }
 
+               $useXVO = $config->get( 'UseXVO' );
                if ( $this->mCacheMode == 'anon-public-user-private' ) {
                        $out->addVaryHeader( 'Cookie' );
                        $response->header( $out->getVaryHeader() );
-                       if ( $wgUseXVO ) {
+                       if ( $useXVO ) {
                                $response->header( $out->getXVO() );
                                if ( $out->haveCacheVaryCookies() ) {
                                        // Logged in, mark this request private
                                        $response->header( 'Cache-Control: private' );
-
                                        return;
                                }
                                // Logged out, send normal public headers below
@@ -591,7 +590,7 @@ class ApiMain extends ApiBase {
 
                // Send public headers
                $response->header( $out->getVaryHeader() );
-               if ( $wgUseXVO ) {
+               if ( $useXVO ) {
                        $response->header( $out->getXVO() );
                }
 
@@ -644,8 +643,6 @@ class ApiMain extends ApiBase {
         * @return string
         */
        protected function substituteResultWithError( $e ) {
-               global $wgShowHostnames;
-
                $result = $this->getResult();
 
                // Printer may not be initialized if the extractRequestParams() fails for the main module
@@ -669,6 +666,8 @@ class ApiMain extends ApiBase {
                // Update raw mode flag for the selected printer.
                $result->setRawMode( $this->mPrinter->getNeedsRawData() );
 
+               $config = $this->getConfig();
+
                if ( $e instanceof UsageException ) {
                        // User entered incorrect parameters - print usage screen
                        $errMessage = $e->getMessageArray();
@@ -678,9 +677,8 @@ class ApiMain extends ApiBase {
                                ApiResult::setContent( $errMessage, $this->makeHelpMsg() );
                        }
                } else {
-                       global $wgShowSQLErrors, $wgShowExceptionDetails;
                        // Something is seriously wrong
-                       if ( ( $e instanceof DBQueryError ) && !$wgShowSQLErrors ) {
+                       if ( ( $e instanceof DBQueryError ) && !$config->get( 'ShowSQLErrors' ) ) {
                                $info = 'Database query error';
                        } else {
                                $info = "Exception Caught: {$e->getMessage()}";
@@ -692,7 +690,7 @@ class ApiMain extends ApiBase {
                        );
                        ApiResult::setContent(
                                $errMessage,
-                               $wgShowExceptionDetails ? "\n\n{$e->getTraceAsString()}\n\n" : ''
+                               $config->get( 'ShowExceptionDetails' ) ? "\n\n{$e->getTraceAsString()}\n\n" : ''
                        );
                }
 
@@ -707,7 +705,7 @@ class ApiMain extends ApiBase {
                if ( !is_null( $requestid ) ) {
                        $result->addValue( null, 'requestid', $requestid );
                }
-               if ( $wgShowHostnames ) {
+               if ( $config->get( 'ShowHostnames' ) ) {
                        // servedby is especially useful when debugging errors
                        $result->addValue( null, 'servedby', wfHostName() );
                }
@@ -725,8 +723,6 @@ class ApiMain extends ApiBase {
         * @return array
         */
        protected function setupExecuteAction() {
-               global $wgShowHostnames;
-
                // First add the id to the top element
                $result = $this->getResult();
                $requestid = $this->getParameter( 'requestid' );
@@ -734,7 +730,7 @@ class ApiMain extends ApiBase {
                        $result->addValue( null, 'requestid', $requestid );
                }
 
-               if ( $wgShowHostnames ) {
+               if ( $this->getConfig()->get( 'ShowHostnames' ) ) {
                        $servedby = $this->getParameter( 'servedby' );
                        if ( $servedby ) {
                                $result->addValue( null, 'servedby', wfHostName() );
@@ -792,7 +788,6 @@ class ApiMain extends ApiBase {
        protected function checkMaxLag( $module, $params ) {
                if ( $module->shouldCheckMaxlag() && isset( $params['maxlag'] ) ) {
                        // Check for maxlag
-                       global $wgShowHostnames;
                        $maxLag = $params['maxlag'];
                        list( $host, $lag ) = wfGetLB()->getMaxLag();
                        if ( $lag > $maxLag ) {
@@ -801,7 +796,7 @@ class ApiMain extends ApiBase {
                                $response->header( 'Retry-After: ' . max( intval( $maxLag ), 5 ) );
                                $response->header( 'X-Database-Lag: ' . intval( $lag ) );
 
-                               if ( $wgShowHostnames ) {
+                               if ( $this->getConfig()->get( 'ShowHostnames' ) ) {
                                        $this->dieUsage( "Waiting for $host: $lag seconds lagged", 'maxlag' );
                                }
 
@@ -957,7 +952,7 @@ class ApiMain extends ApiBase {
        /**
         * Encode a value in a format suitable for a space-separated log line.
         * @param string $s
-        * return string
+        * @return string
         */
        protected function encodeRequestLogValue( $s ) {
                static $table;
@@ -1057,8 +1052,7 @@ class ApiMain extends ApiBase {
         * @param bool $isError
         */
        protected function printResult( $isError ) {
-               global $wgDebugAPI;
-               if ( $wgDebugAPI !== false ) {
+               if ( $this->getConfig()->get( 'DebugAPI' ) !== false ) {
                        $this->setWarning( 'SECURITY WARNING: $wgDebugAPI is enabled' );
                }
 
@@ -1257,20 +1251,22 @@ class ApiMain extends ApiBase {
         * @return string
         */
        public function makeHelpMsg() {
-               global $wgMemc, $wgAPICacheHelpTimeout;
+               global $wgMemc;
                $this->setHelp();
                // Get help text from cache if present
                $key = wfMemcKey( 'apihelp', $this->getModuleName(),
                        str_replace( ' ', '_', SpecialVersion::getVersion( 'nodb' ) ) );
-               if ( $wgAPICacheHelpTimeout > 0 ) {
+
+               $cacheHelpTimeout = $this->getConfig()->get( 'APICacheHelpTimeout' );
+               if ( $cacheHelpTimeout > 0 ) {
                        $cached = $wgMemc->get( $key );
                        if ( $cached ) {
                                return $cached;
                        }
                }
                $retval = $this->reallyMakeHelpMsg();
-               if ( $wgAPICacheHelpTimeout > 0 ) {
-                       $wgMemc->set( $key, $retval, $wgAPICacheHelpTimeout );
+               if ( $cacheHelpTimeout > 0 ) {
+                       $wgMemc->set( $key, $retval, $cacheHelpTimeout );
                }
 
                return $retval;
index 68b62af..7fb045e 100644 (file)
@@ -45,7 +45,6 @@ class ApiOpenSearch extends ApiBase {
        }
 
        public function execute() {
-               global $wgEnableOpenSearchSuggest, $wgSearchSuggestCacheExpiry;
                $params = $this->extractRequestParams();
                $search = $params['search'];
                $limit = $params['limit'];
@@ -53,11 +52,11 @@ class ApiOpenSearch extends ApiBase {
                $suggest = $params['suggest'];
 
                // Some script that was loaded regardless of wgEnableOpenSearchSuggest, likely cached.
-               if ( $suggest && !$wgEnableOpenSearchSuggest ) {
+               if ( $suggest && !$this->getConfig()->get( 'EnableOpenSearchSuggest' ) ) {
                        $searches = array();
                } else {
                        // Open search results may be stored for a very long time
-                       $this->getMain()->setCacheMaxAge( $wgSearchSuggestCacheExpiry );
+                       $this->getMain()->setCacheMaxAge( $this->getConfig()->get( 'SearchSuggestCacheExpiry' ) );
                        $this->getMain()->setCacheMode( 'public' );
 
                        $searcher = new StringPrefixSearch;
@@ -70,12 +69,10 @@ class ApiOpenSearch extends ApiBase {
        }
 
        public function getAllowedParams() {
-               global $wgOpenSearchDefaultLimit;
-
                return array(
                        'search' => null,
                        'limit' => array(
-                               ApiBase::PARAM_DFLT => $wgOpenSearchDefaultLimit,
+                               ApiBase::PARAM_DFLT => $this->getConfig()->get( 'OpenSearchDefaultLimit' ),
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => 100,
index fcba5b5..a276117 100644 (file)
@@ -574,9 +574,9 @@ class ApiParse extends ApiBase {
                        'and will be removed in MediaWiki 1.24. Use "prop=langlinks" ' .
                        'to generate your own HTML.' );
 
-               global $wgContLang, $wgHideInterlanguageLinks;
+               global $wgContLang;
 
-               if ( $wgHideInterlanguageLinks || count( $languages ) == 0 ) {
+               if ( $this->getConfig()->get( 'HideInterlanguageLinks' ) || count( $languages ) == 0 ) {
                        return '';
                }
 
index 27f0f1e..b9f97e3 100644 (file)
@@ -29,7 +29,6 @@
  */
 class ApiProtect extends ApiBase {
        public function execute() {
-               global $wgRestrictionLevels;
                $params = $this->extractRequestParams();
 
                $pageObj = $this->getTitleOrPageId( $params, 'fromdbmaster' );
@@ -74,11 +73,11 @@ class ApiProtect extends ApiBase {
                        if ( !in_array( $p[0], $restrictionTypes ) && $p[0] != 'create' ) {
                                $this->dieUsageMsg( array( 'protect-invalidaction', $p[0] ) );
                        }
-                       if ( !in_array( $p[1], $wgRestrictionLevels ) && $p[1] != 'all' ) {
+                       if ( !in_array( $p[1], $this->getConfig()->get( 'RestrictionLevels' ) ) && $p[1] != 'all' ) {
                                $this->dieUsageMsg( array( 'protect-invalidlevel', $p[1] ) );
                        }
 
-                       if ( in_array( $expiry[$i], array( 'infinite', 'indefinite', 'never' ) ) ) {
+                       if ( in_array( $expiry[$i], array( 'infinite', 'indefinite', 'infinity', 'never' ) ) ) {
                                $expiryarray[$p[0]] = $db->getInfinity();
                        } else {
                                $exp = strtotime( $expiry[$i] );
@@ -188,7 +187,7 @@ class ApiProtect extends ApiBase {
                        'expiry' => array(
                                'Expiry timestamps. If only one timestamp is ' .
                                        'set, it\'ll be used for all protections.',
-                               'Use \'infinite\', \'indefinite\' or \'never\', for a never-expiring protection.'
+                               'Use \'infinite\', \'indefinite\', \'infinity\' or \'never\', for a never-expiring protection.'
                        ),
                        'reason' => 'Reason for (un)protecting',
                        'cascade' => array(
index e5d6a3c..981dc18 100644 (file)
@@ -54,17 +54,16 @@ class ApiPurge extends ApiBase {
 
                        if ( $forceLinkUpdate || $forceRecursiveLinkUpdate ) {
                                if ( !$this->getUser()->pingLimiter( 'linkpurge' ) ) {
-                                       global $wgEnableParserCache;
-
                                        $popts = $page->makeParserOptions( 'canonical' );
 
                                        # Parse content; note that HTML generation is only needed if we want to cache the result.
                                        $content = $page->getContent( Revision::RAW );
+                                       $enableParserCache = $this->getConfig()->get( 'EnableParserCache' );
                                        $p_result = $content->getParserOutput(
                                                $title,
                                                $page->getLatest(),
                                                $popts,
-                                               $wgEnableParserCache
+                                               $enableParserCache
                                        );
 
                                        # Update the links tables
@@ -74,7 +73,7 @@ class ApiPurge extends ApiBase {
 
                                        $r['linkupdate'] = '';
 
-                                       if ( $wgEnableParserCache ) {
+                                       if ( $enableParserCache ) {
                                                $pcache = ParserCache::singleton();
                                                $pcache->save( $p_result, $page, $popts );
                                        }
index fc115b8..a2f4121 100644 (file)
@@ -131,13 +131,13 @@ class ApiQuery extends ApiBase {
                $this->mModuleMgr = new ApiModuleManager( $this );
 
                // Allow custom modules to be added in LocalSettings.php
-               global $wgAPIPropModules, $wgAPIListModules, $wgAPIMetaModules;
+               $config = $this->getConfig();
                $this->mModuleMgr->addModules( self::$QueryPropModules, 'prop' );
-               $this->mModuleMgr->addModules( $wgAPIPropModules, 'prop' );
+               $this->mModuleMgr->addModules( $config->get( 'APIPropModules' ), 'prop' );
                $this->mModuleMgr->addModules( self::$QueryListModules, 'list' );
-               $this->mModuleMgr->addModules( $wgAPIListModules, 'list' );
+               $this->mModuleMgr->addModules( $config->get( 'APIListModules' ), 'list' );
                $this->mModuleMgr->addModules( self::$QueryMetaModules, 'meta' );
-               $this->mModuleMgr->addModules( $wgAPIMetaModules, 'meta' );
+               $this->mModuleMgr->addModules( $config->get( 'APIMetaModules' ), 'meta' );
 
                // Create PageSet that will process titles/pageids/revids/generator
                $this->mPageSet = new ApiPageSet( $this );
index 4266a8e..68d968f 100644 (file)
@@ -228,8 +228,7 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                }
 
                if ( !is_null( $params['mime'] ) ) {
-                       global $wgMiserMode;
-                       if ( $wgMiserMode ) {
+                       if ( $this->getConfig()->get( 'MiserMode' ) ) {
                                $this->dieUsage( 'MIME search disabled in Miser Mode', 'mimesearchdisabled' );
                        }
 
index 8d4af0b..c6171e9 100644 (file)
@@ -63,14 +63,13 @@ class ApiQueryAllMessages extends ApiQueryBase {
                if ( in_array( '*', $params['messages'] ) ) {
                        $message_names = Language::getMessageKeysFor( $langObj->getCode() );
                        if ( $params['includelocal'] ) {
-                               global $wgLanguageCode;
                                $message_names = array_unique( array_merge(
                                        $message_names,
                                        // Pass in the content language code so we get local messages that have a
                                        // MediaWiki:msgkey page. We might theoretically miss messages that have no
                                        // MediaWiki:msgkey page but do have a MediaWiki:msgkey/lang page, but that's
                                        // just a stupid case.
-                                       MessageCache::singleton()->getAllMessageKeys( $wgLanguageCode )
+                                       MessageCache::singleton()->getAllMessageKeys( $this->getConfig()->get( 'LanguageCode' ) )
                                ) );
                        }
                        sort( $message_names );
@@ -116,7 +115,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
                        global $wgContLang;
                        $lang = $langObj->getCode();
 
-                       $customisedMessages = AllmessagesTablePager::getCustomisedStatuses(
+                       $customisedMessages = AllMessagesTablePager::getCustomisedStatuses(
                                array_map( array( $langObj, 'ucfirst' ), $messages_target ), $lang, $lang != $wgContLang->getCode() );
 
                        $customised = $params['customised'] === 'modified';
index b283177..a3ba5ab 100644 (file)
@@ -225,8 +225,6 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               global $wgRestrictionLevels;
-
                return array(
                        'from' => null,
                        'continue' => null,
@@ -255,7 +253,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_ISMULTI => true
                        ),
                        'prlevel' => array(
-                               ApiBase::PARAM_TYPE => $wgRestrictionLevels,
+                               ApiBase::PARAM_TYPE => $this->getConfig()->get( 'RestrictionLevels' ),
                                ApiBase::PARAM_ISMULTI => true
                        ),
                        'prfiltercascade' => array(
index 42464ef..e32104f 100644 (file)
@@ -155,7 +155,6 @@ class ApiQueryAllUsers extends ApiQueryBase {
                }
 
                if ( $params['activeusers'] ) {
-                       global $wgActiveUserDays;
                        $this->addTables( 'recentchanges' );
 
                        $this->addJoinConds( array( 'recentchanges' => array(
@@ -165,7 +164,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        $this->addFields( array( 'recentedits' => 'COUNT(*)' ) );
 
                        $this->addWhere( 'rc_log_type IS NULL OR rc_log_type != ' . $db->addQuotes( 'newusers' ) );
-                       $timestamp = $db->timestamp( wfTimestamp( TS_UNIX ) - $wgActiveUserDays * 24 * 3600 );
+                       $timestamp = $db->timestamp( wfTimestamp( TS_UNIX ) - $this->getConfig()->get( 'ActiveUserDays' ) * 24 * 3600 );
                        $this->addWhere( 'rc_timestamp >= ' . $db->addQuotes( $timestamp ) );
 
                        $this->addOption( 'GROUP BY', $userFieldToSort );
@@ -368,8 +367,6 @@ class ApiQueryAllUsers extends ApiQueryBase {
        }
 
        public function getParamDescription() {
-               global $wgActiveUserDays;
-
                return array(
                        'from' => 'The user name to start enumerating from',
                        'to' => 'The user name to stop enumerating at',
@@ -391,7 +388,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        ),
                        'limit' => 'How many total user names to return',
                        'witheditsonly' => 'Only list users who have made edits',
-                       'activeusers' => "Only list users active in the last {$wgActiveUserDays} days(s)"
+                       'activeusers' => "Only list users active in the last {$this->getConfig()->get( 'ActiveUserDays' )} days(s)"
                );
        }
 
index 01384c0..8e014df 100644 (file)
@@ -321,8 +321,7 @@ abstract class ApiQueryBase extends ApiBase {
                );
                $this->profileDBOut();
 
-               global $wgAPIMaxDBRows;
-               if ( $rowcount > $wgAPIMaxDBRows ) {
+               if ( $rowcount > $this->getConfig()->get( 'APIMaxDBRows' ) ) {
                        return false;
                }
 
index 7d27a64..d62e87d 100644 (file)
@@ -109,14 +109,14 @@ class ApiQueryBlocks extends ApiQueryBase {
                        $this->addWhereFld( 'ipb_auto', 0 );
                }
                if ( isset( $params['ip'] ) ) {
-                       global $wgBlockCIDRLimit;
+                       $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
                        if ( IP::isIPv4( $params['ip'] ) ) {
                                $type = 'IPv4';
-                               $cidrLimit = $wgBlockCIDRLimit['IPv4'];
+                               $cidrLimit = $blockCIDRLimit['IPv4'];
                                $prefixLen = 0;
                        } elseif ( IP::isIPv6( $params['ip'] ) ) {
                                $type = 'IPv6';
-                               $cidrLimit = $wgBlockCIDRLimit['IPv6'];
+                               $cidrLimit = $blockCIDRLimit['IPv6'];
                                $prefixLen = 3; // IP::toHex output is prefixed with "v6-"
                        } else {
                                $this->dieUsage( 'IP parameter is not valid', 'param_ip' );
@@ -331,7 +331,7 @@ class ApiQueryBlocks extends ApiQueryBase {
        }
 
        public function getParamDescription() {
-               global $wgBlockCIDRLimit;
+               $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
                $p = $this->getModulePrefix();
 
                return array(
@@ -343,7 +343,7 @@ class ApiQueryBlocks extends ApiQueryBase {
                        'ip' => array(
                                'Get all blocks applying to this IP or CIDR range, including range blocks.',
                                "Cannot be used together with bkusers. CIDR ranges broader than " .
-                                       "IPv4/{$wgBlockCIDRLimit['IPv4']} or IPv6/{$wgBlockCIDRLimit['IPv6']} " .
+                                       "IPv4/{$blockCIDRLimit['IPv4']} or IPv6/{$blockCIDRLimit['IPv6']} " .
                                        "are not accepted"
                        ),
                        'limit' => 'The maximum amount of blocks to list',
@@ -427,18 +427,18 @@ class ApiQueryBlocks extends ApiQueryBase {
        }
 
        public function getPossibleErrors() {
-               global $wgBlockCIDRLimit;
+               $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
 
                return array_merge( parent::getPossibleErrors(),
                        $this->getRequireMaxOneParameterErrorMessages( array( 'users', 'ip' ) ),
                        array(
                                array(
                                        'code' => 'cidrtoobroad',
-                                       'info' => "IPv4 CIDR ranges broader than /{$wgBlockCIDRLimit['IPv4']} are not accepted"
+                                       'info' => "IPv4 CIDR ranges broader than /{$blockCIDRLimit['IPv4']} are not accepted"
                                ),
                                array(
                                        'code' => 'cidrtoobroad',
-                                       'info' => "IPv6 CIDR ranges broader than /{$wgBlockCIDRLimit['IPv6']} are not accepted"
+                                       'info' => "IPv6 CIDR ranges broader than /{$blockCIDRLimit['IPv6']} are not accepted"
                                ),
                                array( 'code' => 'param_ip', 'info' => 'IP parameter is not valid' ),
                                array( 'code' => 'param_user', 'info' => 'User parameter may not be empty' ),
index a3bc3b9..dc11071 100644 (file)
@@ -86,9 +86,8 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
 
                // Scanning large datasets for rare categories sucks, and I already told
                // how to have efficient subcategory access :-) ~~~~ (oh well, domas)
-               global $wgMiserMode;
                $miser_ns = array();
-               if ( $wgMiserMode ) {
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
                        $miser_ns = $params['namespace'];
                } else {
                        $this->addWhereFld( 'page_namespace', $params['namespace'] );
@@ -339,7 +338,6 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
        }
 
        public function getParamDescription() {
-               global $wgMiserMode;
                $p = $this->getModulePrefix();
                $desc = array(
                        'title' => "Which category to enumerate (required). Must include " .
@@ -374,7 +372,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                        'limit' => 'The maximum number of pages to return.',
                );
 
-               if ( $wgMiserMode ) {
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
                        $desc['namespace'] = array(
                                $desc['namespace'],
                                "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
index 070681c..33e8739 100644 (file)
@@ -59,9 +59,8 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                $this->addOption( 'USE INDEX', 'el_index' );
                $this->addWhere( 'page_id=el_from' );
 
-               global $wgMiserMode;
                $miser_ns = array();
-               if ( $wgMiserMode ) {
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
                        $miser_ns = $params['namespace'];
                } else {
                        $this->addWhereFld( 'page_namespace', $params['namespace'] );
@@ -209,7 +208,6 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
        }
 
        public function getParamDescription() {
-               global $wgMiserMode;
                $p = $this->getModulePrefix();
                $desc = array(
                        'prop' => array(
@@ -230,7 +228,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                        'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
                );
 
-               if ( $wgMiserMode ) {
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
                        $desc['namespace'] = array(
                                $desc['namespace'],
                                "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
index 5a82f19..4b49a80 100644 (file)
@@ -256,15 +256,13 @@ class ApiQueryImageInfo extends ApiQueryBase {
         * @return array Array of parameters for transform.
         */
        protected function mergeThumbParams( $image, $thumbParams, $otherParams ) {
-               global $wgThumbLimits;
-
                if ( !isset( $thumbParams['width'] ) && isset( $thumbParams['height'] ) ) {
                        // We want to limit only by height in this situation, so pass the
                        // image's full width as the limiting width. But some file types
                        // don't have a width of their own, so pick something arbitrary so
                        // thumbnailing the default icon works.
                        if ( $image->getWidth() <= 0 ) {
-                               $thumbParams['width'] = max( $wgThumbLimits );
+                               $thumbParams['width'] = max( $this->getConfig()->get( 'ThumbLimits' ) );
                        } else {
                                $thumbParams['width'] = $image->getWidth();
                        }
index f160791..8b6886d 100644 (file)
@@ -57,21 +57,20 @@ class ApiQueryInfo extends ApiQueryBase {
         * @return void
         */
        public function requestExtraData( $pageSet ) {
-               global $wgDisableCounters, $wgContentHandlerUseDB;
-
                $pageSet->requestField( 'page_restrictions' );
                // when resolving redirects, no page will have this field
                if ( !$pageSet->isResolvingRedirects() ) {
                        $pageSet->requestField( 'page_is_redirect' );
                }
                $pageSet->requestField( 'page_is_new' );
-               if ( !$wgDisableCounters ) {
+               $config = $this->getConfig();
+               if ( !$config->get( 'DisableCounters' ) ) {
                        $pageSet->requestField( 'page_counter' );
                }
                $pageSet->requestField( 'page_touched' );
                $pageSet->requestField( 'page_latest' );
                $pageSet->requestField( 'page_len' );
-               if ( $wgContentHandlerUseDB ) {
+               if ( $config->get( 'ContentHandlerUseDB' ) ) {
                        $pageSet->requestField( 'page_content_model' );
                }
        }
@@ -295,9 +294,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        : array();
                $this->pageIsNew = $pageSet->getCustomField( 'page_is_new' );
 
-               global $wgDisableCounters;
-
-               if ( !$wgDisableCounters ) {
+               if ( !$this->getConfig()->get( 'DisableCounters' ) ) {
                        $this->pageCounter = $pageSet->getCustomField( 'page_counter' );
                }
                $this->pageTouched = $pageSet->getCustomField( 'page_touched' );
@@ -359,11 +356,9 @@ class ApiQueryInfo extends ApiQueryBase {
                $pageInfo['pagelanguage'] = $title->getPageLanguage()->getCode();
 
                if ( $titleExists ) {
-                       global $wgDisableCounters;
-
                        $pageInfo['touched'] = wfTimestamp( TS_ISO_8601, $this->pageTouched[$pageid] );
                        $pageInfo['lastrevid'] = intval( $this->pageLatest[$pageid] );
-                       $pageInfo['counter'] = $wgDisableCounters
+                       $pageInfo['counter'] = $this->getConfig()->get( 'DisableCounters' )
                                ? ''
                                : intval( $this->pageCounter[$pageid] );
                        $pageInfo['length'] = intval( $this->pageLength[$pageid] );
@@ -711,15 +706,14 @@ class ApiQueryInfo extends ApiQueryBase {
         * Get the count of watchers and put it in $this->watchers
         */
        private function getWatcherInfo() {
-               global $wgUnwatchedPageThreshold;
-
                if ( count( $this->everything ) == 0 ) {
                        return;
                }
 
                $user = $this->getUser();
                $canUnwatchedpages = $user->isAllowed( 'unwatchedpages' );
-               if ( !$canUnwatchedpages && !is_int( $wgUnwatchedPageThreshold ) ) {
+               $unwatchedPageThreshold = $this->getConfig()->get( 'UnwatchedPageThreshold' );
+               if ( !$canUnwatchedpages && !is_int( $unwatchedPageThreshold ) ) {
                        return;
                }
 
@@ -737,7 +731,7 @@ class ApiQueryInfo extends ApiQueryBase {
                ) );
                $this->addOption( 'GROUP BY', array( 'wl_namespace', 'wl_title' ) );
                if ( !$canUnwatchedpages ) {
-                       $this->addOption( 'HAVING', "COUNT(*) >= $wgUnwatchedPageThreshold" );
+                       $this->addOption( 'HAVING', "COUNT(*) >= $unwatchedPageThreshold" );
                }
 
                $res = $this->select( __METHOD__ );
index bb424ee..3aad785 100644 (file)
@@ -43,6 +43,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
        public function execute() {
                $params = $this->extractRequestParams();
                $db = $this->getDB();
+               $this->requireMaxOneParameter( $params, 'title', 'prefix', 'namespace' );
 
                $prop = array_flip( $params['prop'] );
 
@@ -81,6 +82,10 @@ class ApiQueryLogEvents extends ApiQueryBase {
                ) );
 
                $this->addFieldsIf( 'page_id', $this->fld_ids );
+               // log_page is the page_id saved at log time, whereas page_id is from a
+               // join at query time.  This leads to different results in various
+               // scenarios, e.g. deletion, recreation.
+               $this->addFieldsIf( 'log_page', $this->fld_ids );
                $this->addFieldsIf( array( 'log_user', 'log_user_text', 'user_name' ), $this->fld_user );
                $this->addFieldsIf( 'log_user', $this->fld_userid );
                $this->addFieldsIf(
@@ -175,11 +180,14 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        $this->addWhereFld( 'log_title', $titleObj->getDBkey() );
                }
 
+               if ( $params['namespace'] !== null ) {
+                       $this->addWhereFld( 'log_namespace', $params['namespace'] );
+               }
+
                $prefix = $params['prefix'];
 
                if ( !is_null( $prefix ) ) {
-                       global $wgMiserMode;
-                       if ( $wgMiserMode ) {
+                       if ( $this->getConfig()->get( 'MiserMode' ) ) {
                                $this->dieUsage( 'Prefix search disabled in Miser Mode', 'prefixsearchdisabled' );
                        }
 
@@ -192,7 +200,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                }
 
                // Paranoia: avoid brute force searches (bug 17342)
-               if ( !is_null( $title ) || !is_null( $user ) ) {
+               if ( $params['namespace'] !== null || !is_null( $title ) || !is_null( $user ) ) {
                        if ( !$this->getUser()->isAllowed( 'deletedhistory' ) ) {
                                $titleBits = LogPage::DELETED_ACTION;
                                $userBits = LogPage::DELETED_USER;
@@ -203,7 +211,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                $titleBits = 0;
                                $userBits = 0;
                        }
-                       if ( !is_null( $title ) && $titleBits ) {
+                       if ( ( $params['namespace'] !== null || !is_null( $title ) ) && $titleBits ) {
                                $this->addWhere( $db->bitAnd( 'log_deleted', $titleBits ) . " != $titleBits" );
                        }
                        if ( !is_null( $user ) && $userBits ) {
@@ -364,6 +372,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                }
                                if ( $this->fld_ids ) {
                                        $vals['pageid'] = intval( $row->page_id );
+                                       $vals['logpage'] = intval( $row->log_page );
                                }
                                if ( $this->fld_details && $row->log_params !== '' ) {
                                        self::addLogParams(
@@ -439,10 +448,12 @@ class ApiQueryLogEvents extends ApiQueryBase {
                return $vals;
        }
 
+       /**
+        * @return array
+        */
        private function getAllowedLogActions() {
-               global $wgLogActions, $wgLogActionsHandlers;
-
-               return array_keys( array_merge( $wgLogActions, $wgLogActionsHandlers ) );
+               $config = $this->getConfig();
+               return array_keys( array_merge( $config->get( 'LogActions' ), $config->get( 'LogActionsHandlers' ) ) );
        }
 
        public function getCacheMode( $params ) {
@@ -462,8 +473,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
        }
 
        public function getAllowedParams( $flags = 0 ) {
-               global $wgLogTypes;
-
+               $config = $this->getConfig();
                return array(
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -482,7 +492,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                )
                        ),
                        'type' => array(
-                               ApiBase::PARAM_TYPE => $wgLogTypes
+                               ApiBase::PARAM_TYPE => $config->get( 'LogTypes' )
                        ),
                        'action' => array(
                                // validation on request is done in execute()
@@ -505,6 +515,9 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        ),
                        'user' => null,
                        'title' => null,
+                       'namespace' => array(
+                               ApiBase::PARAM_TYPE => 'namespace'
+                       ),
                        'prefix' => null,
                        'tag' => null,
                        'limit' => array(
@@ -545,6 +558,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        'dir' => $this->getDirectionDescription( $p ),
                        'user' => 'Filter entries to those made by the given user',
                        'title' => 'Filter entries to those related to a page',
+                       'namespace' => 'Filter entries to those in the given namespace',
                        'prefix' => 'Filter entries that start with this prefix. Disabled in Miser Mode',
                        'limit' => 'How many total event entries to return',
                        'tag' => 'Only list event entries tagged with this tag',
@@ -553,8 +567,6 @@ class ApiQueryLogEvents extends ApiQueryBase {
        }
 
        public function getResultProperties() {
-               global $wgLogTypes;
-
                return array(
                        'ids' => array(
                                'logid' => 'integer',
@@ -566,7 +578,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        ),
                        'type' => array(
                                'type' => array(
-                                       ApiBase::PROP_TYPE => $wgLogTypes
+                                       ApiBase::PROP_TYPE => $this->getConfig()->get( 'LogTypes' )
                                ),
                                'action' => 'string'
                        ),
@@ -614,12 +626,18 @@ class ApiQueryLogEvents extends ApiQueryBase {
        }
 
        public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => 'param_user', 'info' => 'User name $user not found' ),
-                       array( 'code' => 'param_title', 'info' => 'Bad title value \'title\'' ),
-                       array( 'code' => 'param_prefix', 'info' => 'Bad title value \'prefix\'' ),
-                       array( 'code' => 'prefixsearchdisabled', 'info' => 'Prefix search disabled in Miser Mode' ),
-               ) );
+               return array_merge(
+                       parent::getPossibleErrors(),
+                       $this->getRequireMaxOneParameterErrorMessages(
+                               array( 'title', 'prefix', 'namespace' ) ),
+                       array(
+                               array( 'code' => 'param_user', 'info' => 'User name $user not found' ),
+                               array( 'code' => 'param_title', 'info' => 'Bad title value \'title\'' ),
+                               array( 'code' => 'param_prefix', 'info' => 'Bad title value \'prefix\'' ),
+                               array( 'code' => 'prefixsearchdisabled',
+                                       'info' => 'Prefix search disabled in Miser Mode' ),
+                       )
+               );
        }
 
        public function getExamples() {
index 8f120c6..2cc18c5 100644 (file)
@@ -175,8 +175,6 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               global $wgRestrictionLevels;
-
                return array(
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -184,7 +182,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                        ),
                        'level' => array(
                                ApiBase::PARAM_ISMULTI => true,
-                               ApiBase::PARAM_TYPE => array_diff( $wgRestrictionLevels, array( '' ) )
+                               ApiBase::PARAM_TYPE => array_diff( $this->getConfig()->get( 'RestrictionLevels' ), array( '' ) )
                        ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
@@ -246,8 +244,6 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
        }
 
        public function getResultProperties() {
-               global $wgRestrictionLevels;
-
                return array(
                        '' => array(
                                'ns' => 'namespace',
@@ -277,7 +273,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                        ),
                        'level' => array(
                                'level' => array(
-                                       ApiBase::PROP_TYPE => array_diff( $wgRestrictionLevels, array( '' ) )
+                                       ApiBase::PROP_TYPE => array_diff( $this->getConfig()->get( 'RestrictionLevels' ), array( '' ) )
                                )
                        )
                );
index 45950e7..1a7f826 100644 (file)
@@ -35,10 +35,10 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
        public function __construct( ApiQuery $query, $moduleName ) {
                parent::__construct( $query, $moduleName, 'qp' );
                // Build mapping from special page names to QueryPage classes
-               global $wgAPIUselessQueryPages;
+               $uselessQueryPages = $this->getConfig()->get( 'APIUselessQueryPages' );
                $this->qpMap = array();
                foreach ( QueryPage::getPages() as $page ) {
-                       if ( !in_array( $page[1], $wgAPIUselessQueryPages ) ) {
+                       if ( !in_array( $page[1], $uselessQueryPages ) ) {
                                $this->qpMap[$page[1]] = $page[0];
                        }
                }
@@ -56,8 +56,6 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
         * @param ApiPageSet $resultPageSet
         */
        public function run( $resultPageSet = null ) {
-               global $wgQueryCacheLimit;
-
                $params = $this->extractRequestParams();
                $result = $this->getResult();
 
@@ -77,7 +75,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                                if ( $ts ) {
                                        $r['cachedtimestamp'] = wfTimestamp( TS_ISO_8601, $ts );
                                }
-                               $r['maxresults'] = $wgQueryCacheLimit;
+                               $r['maxresults'] = $this->getConfig()->get( 'QueryCacheLimit' );
                        }
                }
                $result->addValue( array( 'query' ), $this->getModuleName(), $r );
index c0c10b9..3067006 100644 (file)
@@ -174,7 +174,11 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                $this->addWhereFld( 'rc_namespace', $params['namespace'] );
 
                if ( !is_null( $params['type'] ) ) {
-                       $this->addWhereFld( 'rc_type', $this->parseRCType( $params['type'] ) );
+                       try {
+                               $this->addWhereFld( 'rc_type', RecentChange::parseToRCType( $params['type'] ) );
+                       } catch ( MWException $e ) {
+                               ApiBase::dieDebug( __METHOD__, $e->getMessage() );
+                       }
                }
 
                if ( !is_null( $params['show'] ) ) {
@@ -414,30 +418,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                $vals = array();
 
                $type = intval( $row->rc_type );
-
-               /* Determine what kind of change this was. */
-               switch ( $type ) {
-                       case RC_EDIT:
-                               $vals['type'] = 'edit';
-                               break;
-                       case RC_NEW:
-                               $vals['type'] = 'new';
-                               break;
-                       case RC_MOVE:
-                               $vals['type'] = 'move';
-                               break;
-                       case RC_LOG:
-                               $vals['type'] = 'log';
-                               break;
-                       case RC_EXTERNAL:
-                               $vals['type'] = 'external';
-                               break;
-                       case RC_MOVE_OVER_REDIRECT:
-                               $vals['type'] = 'move over redirect';
-                               break;
-                       default:
-                               $vals['type'] = $type;
-               }
+               $vals['type'] = RecentChange::parseFromRCType( $type );
 
                $anyHidden = false;
 
@@ -607,30 +588,6 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                return $vals;
        }
 
-       private function parseRCType( $type ) {
-               if ( is_array( $type ) ) {
-                       $retval = array();
-                       foreach ( $type as $t ) {
-                               $retval[] = $this->parseRCType( $t );
-                       }
-
-                       return $retval;
-               }
-
-               switch ( $type ) {
-                       case 'edit':
-                               return RC_EDIT;
-                       case 'new':
-                               return RC_NEW;
-                       case 'log':
-                               return RC_LOG;
-                       case 'external':
-                               return RC_EXTERNAL;
-                       default:
-                               ApiBase::dieDebug( __METHOD__, "Unknown type '$type'" );
-               }
-       }
-
        public function getCacheMode( $params ) {
                if ( isset( $params['show'] ) ) {
                        foreach ( $params['show'] as $show ) {
@@ -781,7 +738,6 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
        }
 
        public function getResultProperties() {
-               global $wgLogTypes;
                $props = array(
                        '' => array(
                                'type' => array(
@@ -857,7 +813,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                        ApiBase::PROP_NULLABLE => true
                                ),
                                'logtype' => array(
-                                       ApiBase::PROP_TYPE => $wgLogTypes,
+                                       ApiBase::PROP_TYPE => $config->get( 'LogTypes' ),
                                        ApiBase::PROP_NULLABLE => true
                                ),
                                'logaction' => array(
index 592c434..3ff6805 100644 (file)
@@ -209,7 +209,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                        $this->addWhereFld( 'ct_tag', $params['tag'] );
                }
 
-               if ( isset( $prop['content'] ) || !is_null( $this->difftotext ) ) {
+               if ( isset( $prop['content'] ) || !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
                        // For each page we will request, the user must have read rights for that page
                        $user = $this->getUser();
                        /** @var $title Title */
@@ -624,10 +624,9 @@ class ApiQueryRevisions extends ApiQueryBase {
                }
 
                if ( $content && ( !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) ) {
-                       global $wgAPIMaxUncachedDiffs;
                        static $n = 0; // Number of uncached diffs we've had
 
-                       if ( $n < $wgAPIMaxUncachedDiffs ) {
+                       if ( $n < $this->getConfig()->get( 'APIMaxUncachedDiffs' ) ) {
                                $vals['diff'] = array();
                                $context = new DerivativeContext( $this->getContext() );
                                $context->setTitle( $title );
index d67fac2..1c41113 100644 (file)
@@ -257,8 +257,6 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               global $wgSearchType;
-
                $params = array(
                        'search' => array(
                                ApiBase::PARAM_TYPE => 'string',
@@ -319,7 +317,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                $alternatives[0] = self::BACKEND_NULL_PARAM;
                        }
                        $params['backend'] = array(
-                               ApiBase::PARAM_DFLT => $wgSearchType,
+                               ApiBase::PARAM_DFLT => $this->getConfig()->get( 'SearchType' ),
                                ApiBase::PARAM_TYPE => $alternatives,
                        );
                }
index ea3a084..bb83110 100644 (file)
@@ -120,31 +120,34 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendGeneralInfo( $property ) {
-               global $wgContLang, $wgDisableLangConversion, $wgDisableTitleConversion;
+               global $wgContLang;
+
+               $config = $this->getConfig();
 
                $data = array();
                $mainPage = Title::newMainPage();
                $data['mainpage'] = $mainPage->getPrefixedText();
                $data['base'] = wfExpandUrl( $mainPage->getFullURL(), PROTO_CURRENT );
-               $data['sitename'] = $GLOBALS['wgSitename'];
+               $data['sitename'] = $config->get( 'Sitename' );
 
                // wgLogo can either be a relative or an absolute path
                // make sure we always return an absolute path
-               $data['logo'] = wfExpandUrl( $GLOBALS['wgLogo'], PROTO_RELATIVE );
+               $data['logo'] = wfExpandUrl( $config->get( 'Logo' ), PROTO_RELATIVE );
+
+               $data['generator'] = "MediaWiki {$config->get( 'Version' )}";
 
-               $data['generator'] = "MediaWiki {$GLOBALS['wgVersion']}";
                $data['phpversion'] = phpversion();
                $data['phpsapi'] = PHP_SAPI;
-               $data['dbtype'] = $GLOBALS['wgDBtype'];
+               $data['dbtype'] = $config->get( 'DBtype' );
                $data['dbversion'] = $this->getDB()->getServerVersion();
 
                $allowFrom = array( '' );
                $allowException = true;
-               if ( !$GLOBALS['wgAllowExternalImages'] ) {
-                       if ( $GLOBALS['wgEnableImageWhitelist'] ) {
+               if ( !$config->get( 'AllowExternalImages' ) ) {
+                       if ( $config->get( 'EnableImageWhitelist' ) ) {
                                $data['imagewhitelistenabled'] = '';
                        }
-                       $allowFrom = $GLOBALS['wgAllowExternalImagesFrom'];
+                       $allowFrom = $config->get( 'AllowExternalImagesFrom' );
                        $allowException = !empty( $allowFrom );
                }
                if ( $allowException ) {
@@ -152,11 +155,11 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $this->getResult()->setIndexedTagName( $data['externalimages'], 'prefix' );
                }
 
-               if ( !$wgDisableLangConversion ) {
+               if ( !$config->get( 'DisableLangConversion' ) ) {
                        $data['langconversion'] = '';
                }
 
-               if ( !$wgDisableTitleConversion ) {
+               if ( !$config->get( 'DisableTitleConversion' ) ) {
                        $data['titleconversion'] = '';
                }
 
@@ -177,22 +180,22 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $data['linktrail'] = '';
                }
 
-               $git = SpecialVersion::getGitHeadSha1( $GLOBALS['IP'] );
+               global $IP;
+               $git = SpecialVersion::getGitHeadSha1( $IP );
                if ( $git ) {
                        $data['git-hash'] = $git;
                        $data['git-branch'] =
                                SpecialVersion::getGitCurrentBranch( $GLOBALS['IP'] );
                } else {
-                       $svn = SpecialVersion::getSvnRevision( $GLOBALS['IP'] );
+                       $svn = SpecialVersion::getSvnRevision( $IP );
                        if ( $svn ) {
                                $data['rev'] = $svn;
                        }
                }
 
                // 'case-insensitive' option is reserved for future
-               $data['case'] = $GLOBALS['wgCapitalLinks'] ? 'first-letter' : 'case-sensitive';
-
-               $data['lang'] = $GLOBALS['wgLanguageCode'];
+               $data['case'] = $config->get( 'CapitalLinks' ) ? 'first-letter' : 'case-sensitive';
+               $data['lang'] = $config->get( 'LanguageCode' );
 
                $fallbacks = array();
                foreach ( $wgContLang->getFallbackLanguages() as $code ) {
@@ -222,12 +225,12 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $data['readonly'] = '';
                        $data['readonlyreason'] = wfReadOnlyReason();
                }
-               if ( $GLOBALS['wgEnableWriteAPI'] ) {
+               if ( $config->get( 'EnableWriteAPI' ) ) {
                        $data['writeapi'] = '';
                }
 
-               $tz = $GLOBALS['wgLocaltimezone'];
-               $offset = $GLOBALS['wgLocalTZoffset'];
+               $tz = $config->get( 'Localtimezone' );
+               $offset = $config->get( 'LocalTZoffset' );
                if ( is_null( $tz ) ) {
                        $tz = 'UTC';
                        $offset = 0;
@@ -236,33 +239,34 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                }
                $data['timezone'] = $tz;
                $data['timeoffset'] = intval( $offset );
-               $data['articlepath'] = $GLOBALS['wgArticlePath'];
-               $data['scriptpath'] = $GLOBALS['wgScriptPath'];
-               $data['script'] = $GLOBALS['wgScript'];
-               $data['variantarticlepath'] = $GLOBALS['wgVariantArticlePath'];
-               $data['server'] = $GLOBALS['wgServer'];
-               $data['servername'] = $GLOBALS['wgServerName'];
+               $data['articlepath'] = $config->get( 'ArticlePath' );
+               $data['scriptpath'] = $config->get( 'ScriptPath' );
+               $data['script'] = $config->get( 'Script' );
+               $data['variantarticlepath'] = $config->get( 'VariantArticlePath'  );
+               $data['server'] = $config->get( 'Server' );
+               $data['servername'] = $config->get( 'ServerName' );
                $data['wikiid'] = wfWikiID();
                $data['time'] = wfTimestamp( TS_ISO_8601, time() );
 
-               if ( $GLOBALS['wgMiserMode'] ) {
+               if ( $config->get( 'MiserMode' ) ) {
                        $data['misermode'] = '';
                }
 
                $data['maxuploadsize'] = UploadBase::getMaxUploadSize();
 
-               $data['thumblimits'] = $GLOBALS['wgThumbLimits'];
+               $data['thumblimits'] = $config->get( 'ThumbLimits' );
                $this->getResult()->setIndexedTagName( $data['thumblimits'], 'limit' );
                $data['imagelimits'] = array();
                $this->getResult()->setIndexedTagName( $data['imagelimits'], 'limit' );
-               foreach ( $GLOBALS['wgImageLimits'] as $k => $limit ) {
+               foreach ( $config->get( 'ImageLimits' ) as $k => $limit ) {
                        $data['imagelimits'][$k] = array( 'width' => $limit[0], 'height' => $limit[1] );
                }
 
-               if ( !empty( $GLOBALS['wgFavicon'] ) ) {
+                $favicon = $config->get( 'Favicon' );
+                if ( !empty( $favicon ) ) {
                        // wgFavicon can either be a relative or an absolute path
                        // make sure we always return an absolute path
-                       $data['favicon'] = wfExpandUrl( $GLOBALS['wgFavicon'], PROTO_RELATIVE );
+                       $data['favicon'] = wfExpandUrl( $favicon, PROTO_RELATIVE );
                }
 
                wfRunHooks( 'APIQuerySiteInfoGeneralInfo', array( $this, &$data ) );
@@ -309,8 +313,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendNamespaceAliases( $property ) {
-               global $wgNamespaceAliases, $wgContLang;
-               $aliases = array_merge( $wgNamespaceAliases, $wgContLang->getNamespaceAliases() );
+               global $wgContLang;
+               $aliases = array_merge( $this->getConfig()->get( 'NamespaceAliases' ), $wgContLang->getNamespaceAliases() );
                $namespaces = $wgContLang->getNamespaces();
                $data = array();
                foreach ( $aliases as $title => $ns ) {
@@ -396,6 +400,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                $val['language'] = $langNames[$prefix];
                        }
                        $val['url'] = wfExpandUrl( $row['iw_url'], PROTO_CURRENT );
+                       if (substr( $row['iw_url'], 0, 2) == '//') {
+                               $val['protorel'] = '';
+                       }
                        if ( isset( $row['iw_wikiid'] ) ) {
                                $val['wikiid'] = $row['iw_wikiid'];
                        }
@@ -412,11 +419,11 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendDbReplLagInfo( $property, $includeAll ) {
-               global $wgShowHostnames;
                $data = array();
                $lb = wfGetLB();
+               $showHostnames = $this->getConfig()->get( 'ShowHostnames' );
                if ( $includeAll ) {
-                       if ( !$wgShowHostnames ) {
+                       if ( !$showHostnames ) {
                                $this->dieUsage(
                                        'Cannot view all servers info unless $wgShowHostnames is true',
                                        'includeAllDenied'
@@ -433,7 +440,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                } else {
                        list( , $lag, $index ) = $lb->getMaxLag();
                        $data[] = array(
-                               'host' => $wgShowHostnames
+                               'host' => $showHostnames
                                                ? $lb->getServerName( $index )
                                                : '',
                                'lag' => intval( $lag )
@@ -447,11 +454,10 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendStatistics( $property ) {
-               global $wgDisableCounters;
                $data = array();
                $data['pages'] = intval( SiteStats::pages() );
                $data['articles'] = intval( SiteStats::articles() );
-               if ( !$wgDisableCounters ) {
+               if ( !$this->getConfig()->get( 'DisableCounters' ) ) {
                        $data['views'] = intval( SiteStats::views() );
                }
                $data['edits'] = intval( SiteStats::edits() );
@@ -467,33 +473,32 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendUserGroups( $property, $numberInGroup ) {
-               global $wgGroupPermissions, $wgAddGroups, $wgRemoveGroups;
-               global $wgGroupsAddToSelf, $wgGroupsRemoveFromSelf;
+               $config = $this->getConfig();
 
                $data = array();
                $result = $this->getResult();
-               foreach ( $wgGroupPermissions as $group => $permissions ) {
+               foreach ( $config->get( 'GroupPermissions' ) as $group => $permissions ) {
                        $arr = array(
                                'name' => $group,
                                'rights' => array_keys( $permissions, true ),
                        );
 
                        if ( $numberInGroup ) {
-                               global $wgAutopromote;
+                               $autopromote = $config->get( 'Autopromote' );
 
                                if ( $group == 'user' ) {
                                        $arr['number'] = SiteStats::users();
                                // '*' and autopromote groups have no size
-                               } elseif ( $group !== '*' && !isset( $wgAutopromote[$group] ) ) {
+                               } elseif ( $group !== '*' && !isset( $autopromote[$group] ) ) {
                                        $arr['number'] = SiteStats::numberInGroup( $group );
                                }
                        }
 
                        $groupArr = array(
-                               'add' => $wgAddGroups,
-                               'remove' => $wgRemoveGroups,
-                               'add-self' => $wgGroupsAddToSelf,
-                               'remove-self' => $wgGroupsRemoveFromSelf
+                               'add' => $config->get( 'AddGroups' ),
+                               'remove' => $config->get( 'RemoveGroups' ),
+                               'add-self' => $config->get( 'GroupsAddToSelf' ),
+                               'remove-self' => $config->get( 'GroupsRemoveFromSelf' )
                        );
 
                        foreach ( $groupArr as $type => $rights ) {
@@ -513,10 +518,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendFileExtensions( $property ) {
-               global $wgFileExtensions;
-
                $data = array();
-               foreach ( array_unique( $wgFileExtensions ) as $ext ) {
+               foreach ( array_unique( $this->getConfig()->get( 'FileExtensions' ) ) as $ext ) {
                        $data[] = array( 'ext' => $ext );
                }
                $this->getResult()->setIndexedTagName( $data, 'fe' );
@@ -525,9 +528,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendExtensions( $property ) {
-               global $wgExtensionCredits;
                $data = array();
-               foreach ( $wgExtensionCredits as $type => $extensions ) {
+               foreach ( $this->getConfig()->get( 'ExtensionCredits' ) as $type => $extensions ) {
                        foreach ( $extensions as $ext ) {
                                $ret = array();
                                $ret['type'] = $type;
@@ -608,10 +610,10 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendRightsInfo( $property ) {
-               global $wgRightsPage, $wgRightsUrl, $wgRightsText;
-               $title = Title::newFromText( $wgRightsPage );
-               $url = $title ? wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ) : $wgRightsUrl;
-               $text = $wgRightsText;
+               $config = $this->getConfig();
+               $title = Title::newFromText( $config->get( 'RightsPage' ) );
+               $url = $title ? wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ) : $config->get( 'RightsUrl' );
+               $text = $config->get( 'RightsText' );
                if ( !$text && $title ) {
                        $text = $title->getPrefixedText();
                }
@@ -625,14 +627,12 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendRestrictions( $property ) {
-               global $wgRestrictionTypes, $wgRestrictionLevels,
-                       $wgCascadingRestrictionLevels, $wgSemiprotectedRestrictionLevels;
-
+               $config = $this->getConfig();
                $data = array(
-                       'types' => $wgRestrictionTypes,
-                       'levels' => $wgRestrictionLevels,
-                       'cascadinglevels' => $wgCascadingRestrictionLevels,
-                       'semiprotectedlevels' => $wgSemiprotectedRestrictionLevels,
+                       'types' => $config->get( 'RestrictionTypes' ),
+                       'levels' => $config->get( 'RestrictionLevels' ),
+                       'cascadinglevels' => $config->get( 'CascadingRestrictionLevels' ),
+                       'semiprotectedlevels' => $config->get( 'SemiprotectedRestrictionLevels' ),
                );
 
                $this->getResult()->setIndexedTagName( $data['types'], 'type' );
@@ -706,9 +706,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        public function appendProtocols( $property ) {
-               global $wgUrlProtocols;
                // Make a copy of the global so we don't try to set the _element key of it - bug 45130
-               $protocols = array_values( $wgUrlProtocols );
+               $protocols = array_values( $this->getConfig()->get( 'UrlProtocols' ) );
                $this->getResult()->setIndexedTagName( $protocols, 'p' );
 
                return $this->getResult()->addValue( 'query', $property, $protocols );
@@ -723,15 +722,15 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        public function appendSubscribedHooks( $property ) {
-               global $wgHooks;
-               $myWgHooks = $wgHooks;
+               $hooks = $this->getConfig()->get( 'Hooks' );
+               $myWgHooks = $hooks;
                ksort( $myWgHooks );
 
                $data = array();
-               foreach ( $myWgHooks as $hook => $hooks ) {
+               foreach ( $myWgHooks as $name => $subscribers ) {
                        $arr = array(
-                               'name' => $hook,
-                               'subscribers' => array_map( array( 'SpecialVersion', 'arrayToString' ), $hooks ),
+                               'name' => $name,
+                               'subscribers' => array_map( array( 'SpecialVersion', 'arrayToString' ), $subscribers ),
                        );
 
                        $this->getResult()->setIndexedTagName( $arr['subscribers'], 's' );
index 568ccb5..24c4c20 100644 (file)
@@ -517,8 +517,8 @@ class ApiQueryContributions extends ApiQueryBase {
        }
 
        public function getParamDescription() {
-               global $wgRCMaxAge;
                $p = $this->getModulePrefix();
+               $RCMaxAge = $this->getConfig()->get( 'RCMaxAge' );
 
                return array(
                        'limit' => 'The maximum number of contributions to return',
@@ -548,7 +548,7 @@ class ApiQueryContributions extends ApiQueryBase {
                        'show' => array(
                                "Show only items that meet thse criteria, e.g. non minor edits only: {$p}show=!minor",
                                "NOTE: If {$p}show=patrolled or {$p}show=!patrolled is set, revisions older than",
-                               "\$wgRCMaxAge ($wgRCMaxAge) won't be shown",
+                               "\$wgRCMaxAge ($RCMaxAge) won't be shown",
                        ),
                        'tag' => 'Only list revisions tagged with this tag',
                        'toponly' => 'Only list changes which are the latest revision',
index ee5e458..140f35a 100644 (file)
@@ -31,6 +31,8 @@
  */
 class ApiQueryUserInfo extends ApiQueryBase {
 
+       const WL_UNREAD_LIMIT = 1000;
+
        private $prop = array();
 
        public function __construct( ApiQuery $query, $moduleName ) {
@@ -50,7 +52,6 @@ class ApiQueryUserInfo extends ApiQueryBase {
        }
 
        protected function getCurrentUserInfo() {
-               global $wgHiddenPrefs;
                $user = $this->getUser();
                $result = $this->getResult();
                $vals = array();
@@ -120,7 +121,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
                        $vals['ratelimits'] = $this->getRateLimits();
                }
 
-               if ( isset( $this->prop['realname'] ) && !in_array( 'realname', $wgHiddenPrefs ) ) {
+               if ( isset( $this->prop['realname'] ) && !in_array( 'realname', $this->getConfig()->get( 'HiddenPrefs' ) ) ) {
                        $vals['realname'] = $user->getRealName();
                }
 
@@ -153,11 +154,32 @@ class ApiQueryUserInfo extends ApiQueryBase {
                        $vals['acceptlang'] = $acceptLang;
                }
 
+               if ( isset( $this->prop['unreadcount'] ) ) {
+                       $dbr = $this->getQuery()->getNamedDB( 'watchlist', DB_SLAVE, 'watchlist' );
+
+                       $sql = $dbr->selectSQLText(
+                               'watchlist',
+                               array( 'dummy' => 1 ),
+                               array(
+                                       'wl_user' => $user->getId(),
+                                       'wl_notificationtimestamp IS NOT NULL',
+                               ),
+                               __METHOD__,
+                               array( 'LIMIT' => self::WL_UNREAD_LIMIT )
+                       );
+                       $count = $dbr->selectField( array( 'c' => "($sql)" ), 'COUNT(*)' );
+
+                       if ( $count >= self::WL_UNREAD_LIMIT ) {
+                               $vals['unreadcount'] = self::WL_UNREAD_LIMIT . '+';
+                       } else {
+                               $vals['unreadcount'] = (int)$count;
+                       }
+               }
+
                return $vals;
        }
 
        protected function getRateLimits() {
-               global $wgRateLimits;
                $user = $this->getUser();
                if ( !$user->isPingLimitable() ) {
                        return array(); // No limits
@@ -181,7 +203,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
 
                // Now get the actual limits
                $retval = array();
-               foreach ( $wgRateLimits as $action => $limits ) {
+               foreach ( $this->getConfig()->get( 'RateLimits' ) as $action => $limits ) {
                        foreach ( $categories as $cat ) {
                                if ( isset( $limits[$cat] ) && !is_null( $limits[$cat] ) ) {
                                        $retval[$action][$cat]['hits'] = intval( $limits[$cat][0] );
@@ -212,7 +234,8 @@ class ApiQueryUserInfo extends ApiQueryBase {
                                        'email',
                                        'realname',
                                        'acceptlang',
-                                       'registrationdate'
+                                       'registrationdate',
+                                       'unreadcount',
                                )
                        )
                );
@@ -237,6 +260,9 @@ class ApiQueryUserInfo extends ApiQueryBase {
                                '  acceptlang       - Echoes the Accept-Language header sent by ' .
                                        'the client in a structured format',
                                '  registrationdate - Adds the user\'s registration date',
+                               '  unreadcount      - Adds the count of unread pages on the user\'s watchlist ' .
+                                       '(maximum ' . ( self::WL_UNREAD_LIMIT - 1 ) . '; returns "' .
+                                       self::WL_UNREAD_LIMIT . '+" if more)',
                        )
                );
        }
index b198883..506fb59 100644 (file)
@@ -168,6 +168,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                || ( isset( $show['bot'] ) && isset( $show['!bot'] ) )
                                || ( isset( $show['anon'] ) && isset( $show['!anon'] ) )
                                || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
+                               || ( isset( $show['unread'] ) && isset( $show['!unread'] ) )
                        ) {
                                $this->dieUsageMsg( 'show' );
                        }
@@ -191,10 +192,16 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                        $this->addWhereIf( 'rc_user != 0', isset( $show['!anon'] ) );
                        $this->addWhereIf( 'rc_patrolled = 0', isset( $show['!patrolled'] ) );
                        $this->addWhereIf( 'rc_patrolled != 0', isset( $show['patrolled'] ) );
+                       $this->addWhereIf( 'wl_notificationtimestamp IS NOT NULL', isset( $show['unread'] ) );
+                       $this->addWhereIf( 'wl_notificationtimestamp IS NULL', isset( $show['!unread'] ) );
                }
 
                if ( !is_null( $params['type'] ) ) {
-                       $this->addWhereFld( 'rc_type', $this->parseRCType( $params['type'] ) );
+                       try {
+                               $this->addWhereFld( 'rc_type', RecentChange::parseToRCType( $params['type'] ) );
+                       } catch ( MWException $e ) {
+                               ApiBase::dieDebug( __METHOD__, $e->getMessage() );
+                       }
                }
 
                if ( !is_null( $params['user'] ) && !is_null( $params['excludeuser'] ) ) {
@@ -292,33 +299,8 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
 
                /* Our output data. */
                $vals = array();
-
                $type = intval( $row->rc_type );
-
-               /* Determine what kind of change this was. */
-               switch ( $type ) {
-                       case RC_EDIT:
-                               $vals['type'] = 'edit';
-                               break;
-                       case RC_NEW:
-                               $vals['type'] = 'new';
-                               break;
-                       case RC_MOVE:
-                               $vals['type'] = 'move';
-                               break;
-                       case RC_LOG:
-                               $vals['type'] = 'log';
-                               break;
-                       case RC_EXTERNAL:
-                               $vals['type'] = 'external';
-                               break;
-                       case RC_MOVE_OVER_REDIRECT:
-                               $vals['type'] = 'move over redirect';
-                               break;
-                       default:
-                               $vals['type'] = $type;
-               }
-
+               $vals['type'] = RecentChange::parseFromRCType( $type );
                $anyHidden = false;
 
                /* Create a new entry in the result for the title. */
@@ -449,35 +431,6 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                return $vals;
        }
 
-       /** Copied from ApiQueryRecentChanges.
-        *
-        * @param string $type
-        * @return string
-        */
-       private function parseRCType( $type ) {
-               if ( is_array( $type ) ) {
-                       $retval = array();
-                       foreach ( $type as $t ) {
-                               $retval[] = $this->parseRCType( $t );
-                       }
-
-                       return $retval;
-               }
-
-               switch ( $type ) {
-                       case 'edit':
-                               return RC_EDIT;
-                       case 'new':
-                               return RC_NEW;
-                       case 'log':
-                               return RC_LOG;
-                       case 'external':
-                               return RC_EXTERNAL;
-                       default:
-                               ApiBase::dieDebug( __METHOD__, "Unknown type '$type'" );
-               }
-       }
-
        public function getAllowedParams() {
                return array(
                        'allrev' => false,
@@ -540,6 +493,8 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                        '!anon',
                                        'patrolled',
                                        '!patrolled',
+                                       'unread',
+                                       '!unread',
                                )
                        ),
                        'type' => array(
@@ -607,8 +562,6 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
        }
 
        public function getResultProperties() {
-               global $wgLogTypes;
-
                return array(
                        '' => array(
                                'type' => array(
@@ -677,7 +630,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                        ApiBase::PROP_NULLABLE => true
                                ),
                                'logtype' => array(
-                                       ApiBase::PROP_TYPE => $wgLogTypes,
+                                       ApiBase::PROP_TYPE => $this->getConfig()->get( 'LogTypes' ),
                                        ApiBase::PROP_NULLABLE => true
                                ),
                                'logaction' => array(
index c351561..7d0a15a 100644 (file)
  * Each subarray may either be a dictionary - key-value pairs with unique keys,
  * or lists, where the items are added using $data[] = $value notation.
  *
- * There are two special key values that change how XML output is generated:
- *   '_element' This key sets the tag name for the rest of the elements in the current array.
- *              It is only inserted if the formatter returned true for getNeedsRawData()
- *   '*'        This key has special meaning only to the XML formatter, and is outputted as is
- *              for all others. In XML it becomes the content of the current element.
+ * There are three special key values that change how XML output is generated:
+ *   '_element'     This key sets the tag name for the rest of the elements in the current array.
+ *                  It is only inserted if the formatter returned true for getNeedsRawData()
+ *   '_subelements' This key causes the specified elements to be returned as subelements rather than attributes.
+ *                  It is only inserted if the formatter returned true for getNeedsRawData()
+ *   '*'            This key has special meaning only to the XML formatter, and is outputted as is
+ *                  for all others. In XML it becomes the content of the current element.
  *
  * @ingroup API
  */
@@ -211,6 +213,30 @@ class ApiResult extends ApiBase {
                }
        }
 
+       /**
+        * Causes the elements with the specified names to be output as
+        * subelements rather than attributes.
+        * @param array $arr
+        * @param array|string $names The element name(s) to be output as subelements
+        */
+       public function setSubelements( &$arr, $names ) {
+               // In raw mode, add the '_subelements', otherwise just ignore
+               if ( !$this->getIsRawMode() ) {
+                       return;
+               }
+               if ( $arr === null || $names === null || !is_array( $arr ) ) {
+                       ApiBase::dieDebug( __METHOD__, 'Bad parameter' );
+               }
+               if ( !is_array( $names ) ) {
+                       $names = array( $names );
+               }
+               if ( !isset( $arr['_subelements'] ) ) {
+                       $arr['_subelements'] = $names;
+               } else {
+                       $arr['_subelements'] = array_merge( $arr['_subelements'], $names );
+               }
+       }
+
        /**
         * In case the array contains indexed values (in addition to named),
         * give all indexed values the given tag name. This function MUST be
@@ -288,15 +314,14 @@ class ApiResult extends ApiBase {
         * @since 1.21 int $flags replaced boolean $override
         */
        public function addValue( $path, $name, $value, $flags = 0 ) {
-               global $wgAPIMaxResultSize;
-
                $data = &$this->mData;
                if ( $this->mCheckingSize ) {
                        $newsize = $this->mSize + self::size( $value );
-                       if ( $newsize > $wgAPIMaxResultSize ) {
+                       $maxResultSize = $this->getConfig()->get( 'APIMaxResultSize' );
+                       if ( $newsize > $maxResultSize ) {
                                $this->setWarning(
                                        "This result was truncated because it would otherwise be larger than the " .
-                                               "limit of {$wgAPIMaxResultSize} bytes" );
+                                               "limit of {$maxResultSize} bytes" );
 
                                return false;
                        }
index fbe87d2..80e09b6 100644 (file)
@@ -115,8 +115,8 @@ class ApiRollback extends ApiBase {
                $p = $this->getModulePrefix();
 
                return array(
-                       'title' => "Title of the page you want to delete. Cannot be used together with {$p}pageid",
-                       'pageid' => "Page ID of the page you want to delete. Cannot be used together with {$p}title",
+                       'title' => "Title of the page you want to roll back. Cannot be used together with {$p}pageid",
+                       'pageid' => "Page ID of the page you want to roll back. Cannot be used together with {$p}title",
                        'user' => 'Name of the user whose edits are to be rolled back. If ' .
                                'set incorrectly, you\'ll get a badtoken error.',
                        'token' => 'A rollback token previously retrieved through ' .
@@ -149,12 +149,16 @@ class ApiRollback extends ApiBase {
        }
 
        public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'invalidtitle', 'title' ),
-                       array( 'notanarticle' ),
-                       array( 'nosuchpageid', 'pageid' ),
-                       array( 'invaliduser', 'user' ),
-               ) );
+               return array_merge(
+                       parent::getPossibleErrors(),
+                       $this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) ),
+                       array(
+                               array( 'invalidtitle', 'title' ),
+                               array( 'notanarticle' ),
+                               array( 'nosuchpageid', 'pageid' ),
+                               array( 'invaliduser', 'user' ),
+                       )
+               );
        }
 
        public function needsToken() {
index 49306d7..5e6c962 100644 (file)
@@ -34,8 +34,6 @@ class ApiUpload extends ApiBase {
        protected $mParams;
 
        public function execute() {
-               global $wgEnableAsyncUploads;
-
                // Check whether upload is enabled
                if ( !UploadBase::isEnabled() ) {
                        $this->dieUsageMsg( 'uploaddisabled' );
@@ -47,7 +45,7 @@ class ApiUpload extends ApiBase {
                $this->mParams = $this->extractRequestParams();
                $request = $this->getMain()->getRequest();
                // Check if async mode is actually supported (jobs done in cli mode)
-               $this->mParams['async'] = ( $this->mParams['async'] && $wgEnableAsyncUploads );
+               $this->mParams['async'] = ( $this->mParams['async'] && $this->getConfig()->get( 'EnableAsyncUploads' ) );
                // Add the uploaded file to the params array
                $this->mParams['file'] = $request->getFileName( 'file' );
                $this->mParams['chunk'] = $request->getFileName( 'chunk' );
@@ -471,8 +469,6 @@ class ApiUpload extends ApiBase {
         * Performs file verification, dies on error.
         */
        protected function checkVerification( array $verification ) {
-               global $wgFileExtensions;
-
                // @todo Move them to ApiBase's message map
                switch ( $verification['status'] ) {
                        // Recoverable errors
@@ -504,7 +500,7 @@ class ApiUpload extends ApiBase {
                        case UploadBase::FILETYPE_BADTYPE:
                                $extradata = array(
                                        'filetype' => $verification['finalExt'],
-                                       'allowed' => array_values( array_unique( $wgFileExtensions ) )
+                                       'allowed' => array_values( array_unique( $this->getConfig()->get( 'FileExtensions' ) ) )
                                );
                                $this->getResult()->setIndexedTagName( $extradata['allowed'], 'ext' );
 
@@ -666,8 +662,7 @@ class ApiUpload extends ApiBase {
         * Checks if asynchronous copy uploads are enabled and throws an error if they are not.
         */
        protected function checkAsyncDownloadEnabled() {
-               global $wgAllowAsyncCopyUploads;
-               if ( !$wgAllowAsyncCopyUploads ) {
+               if ( !$this->getConfig()->get( 'AllowAsyncCopyUploads' ) ) {
                        $this->dieUsage( 'Asynchronous copy uploads disabled', 'asynccopyuploaddisabled' );
                }
        }
index 246f95d..cd43f82 100644 (file)
@@ -432,13 +432,11 @@ class ChangesList extends ContextSource {
         * @return string
         */
        public function insertComment( $rc ) {
-               if ( $rc->mAttribs['rc_type'] != RC_MOVE && $rc->mAttribs['rc_type'] != RC_MOVE_OVER_REDIRECT ) {
-                       if ( $this->isDeleted( $rc, Revision::DELETED_COMMENT ) ) {
-                               return ' <span class="history-deleted">' .
-                                       $this->msg( 'rev-deleted-comment' )->escaped() . '</span>';
-                       } else {
-                               return Linker::commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() );
-                       }
+               if ( $this->isDeleted( $rc, Revision::DELETED_COMMENT ) ) {
+                       return ' <span class="history-deleted">' .
+                               $this->msg( 'rev-deleted-comment' )->escaped() . '</span>';
+               } else {
+                       return Linker::commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() );
                }
 
                return '';
index 6c42601..0c073c6 100644 (file)
@@ -90,7 +90,6 @@ class EnhancedChangesList extends ChangesList {
        public function recentChangesLine( &$baseRC, $watched = false ) {
                wfProfileIn( __METHOD__ );
 
-               # If it's a new day, add the headline and flush the cache
                $date = $this->getLanguage()->userDate(
                        $baseRC->mAttribs['rc_timestamp'],
                        $this->getUser()
@@ -98,6 +97,7 @@ class EnhancedChangesList extends ChangesList {
 
                $ret = '';
 
+               # If it's a new day, add the headline and flush the cache
                if ( $date != $this->lastdate ) {
                        # Process current cache
                        $ret = $this->recentChangesBlock();
@@ -121,28 +121,37 @@ class EnhancedChangesList extends ChangesList {
         * @param RCCacheEntry $cacheEntry
         */
        protected function addCacheEntry( RCCacheEntry $cacheEntry ) {
+               $cacheGroupingKey = $this->makeCacheGroupingKey( $cacheEntry );
+
+               if ( !isset( $this->rc_cache[$cacheGroupingKey] ) ) {
+                       $this->rc_cache[$cacheGroupingKey] = array();
+               }
+
+               array_push( $this->rc_cache[$cacheGroupingKey], $cacheEntry );
+       }
+
+       /**
+        * @todo use rc_source to group, if set; fallback to rc_type
+        *
+        * @param RCCacheEntry $cacheEntry
+        *
+        * @return string
+        */
+       protected function makeCacheGroupingKey( RCCacheEntry $cacheEntry ) {
                $title = $cacheEntry->getTitle();
-               $secureName = $title->getPrefixedDBkey();
+               $cacheGroupingKey = $title->getPrefixedDBkey();
 
                $type = $cacheEntry->mAttribs['rc_type'];
 
-               if ( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) {
-                       # Use an @ character to prevent collision with page names
-                       $this->rc_cache['@@' . ( $this->rcMoveIndex++ )] = array( $cacheEntry );
-               } else {
-                       # Logs are grouped by type
-                       if ( $type == RC_LOG ) {
-                               $secureName = SpecialPage::getTitleFor(
-                                       'Log',
-                                       $cacheEntry->mAttribs['rc_log_type']
-                               )->getPrefixedDBkey();
-                       }
-                       if ( !isset( $this->rc_cache[$secureName] ) ) {
-                               $this->rc_cache[$secureName] = array();
-                       }
-
-                       array_push( $this->rc_cache[$secureName], $cacheEntry );
+               if ( $type == RC_LOG ) {
+                       // Group by log type
+                       $cacheGroupingKey = SpecialPage::getTitleFor(
+                               'Log',
+                               $cacheEntry->mAttribs['rc_log_type']
+                       )->getPrefixedDBkey();
                }
+
+               return $cacheGroupingKey;
        }
 
        /**
@@ -538,16 +547,12 @@ class EnhancedChangesList extends ChangesList {
 
                $r .= '<td class="mw-enhanced-rc"><span class="mw-enhancedchanges-arrow-space"></span>';
                # Flag and Timestamp
-               if ( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) {
-                       $r .= $this->recentChangesFlags( array() ); // no flags, but need the placeholders
-               } else {
-                       $r .= $this->recentChangesFlags( array(
-                               'newpage' => $type == RC_NEW,
-                               'minor' => $rcObj->mAttribs['rc_minor'],
-                               'unpatrolled' => $rcObj->unpatrolled,
-                               'bot' => $rcObj->mAttribs['rc_bot'],
-                       ) );
-               }
+               $r .= $this->recentChangesFlags( array(
+                       'newpage' => $type == RC_NEW,
+                       'minor' => $rcObj->mAttribs['rc_minor'],
+                       'unpatrolled' => $rcObj->unpatrolled,
+                       'bot' => $rcObj->mAttribs['rc_bot'],
+               ) );
                $r .= '&#160;' . $rcObj->timestamp . '&#160;</td><td>';
                # Article or log link
                if ( $logType ) {
index 458f21a..d590ff6 100644 (file)
@@ -53,10 +53,7 @@ class OldChangesList extends ChangesList {
                $classes[] = $watched && $rc->mAttribs['rc_timestamp'] >= $watched
                        ? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
 
-               // Moved pages (very very old, not supported anymore)
-               if ( $rc->mAttribs['rc_type'] == RC_MOVE || $rc->mAttribs['rc_type'] == RC_MOVE_OVER_REDIRECT ) {
-               // Log entries
-               } elseif ( $rc->mAttribs['rc_log_type'] ) {
+               if ( $rc->mAttribs['rc_log_type'] ) {
                        $logtitle = SpecialPage::getTitleFor( 'Log', $rc->mAttribs['rc_log_type'] );
                        $this->insertLog( $s, $logtitle, $rc->mAttribs['rc_log_type'] );
                // Log entries (old format) or log targets, and special pages
index 25a572b..c3fe183 100644 (file)
@@ -97,11 +97,8 @@ class RCCacheEntryFactory {
        private function buildCLink( RecentChange $cacheEntry ) {
                $type = $cacheEntry->mAttribs['rc_type'];
 
-               // Page moves, very old style, not supported anymore
-               if ( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) {
-                       $clink = '';
                // New unpatrolled pages
-               } elseif ( $cacheEntry->unpatrolled && $type == RC_NEW ) {
+               if ( $cacheEntry->unpatrolled && $type == RC_NEW ) {
                        $clink = Linker::linkKnown( $cacheEntry->getTitle() );
                // Log entries
                } elseif ( $type == RC_LOG ) {
@@ -171,7 +168,7 @@ class RCCacheEntryFactory {
        private function buildCurLink( RecentChange $cacheEntry, $showDiffLinks, $counter ) {
                $queryParams = $this->buildCurQueryParams( $cacheEntry );
                $curMessage = $this->getMessage( 'cur' );
-               $logTypes = array( RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT );
+               $logTypes = array( RC_LOG );
 
                if ( !$showDiffLinks || in_array( $cacheEntry->mAttribs['rc_type'], $logTypes ) ) {
                        $curLink = $curMessage;
@@ -206,7 +203,7 @@ class RCCacheEntryFactory {
        private function buildDiffLink( RecentChange $cacheEntry, $showDiffLinks, $counter ) {
                $queryParams = $this->buildDiffQueryParams( $cacheEntry );
                $diffMessage = $this->getMessage( 'diff' );
-               $logTypes = array( RC_NEW, RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT );
+               $logTypes = array( RC_NEW, RC_LOG );
 
                if ( !$showDiffLinks ) {
                        $diffLink = $diffMessage;
@@ -230,7 +227,7 @@ class RCCacheEntryFactory {
                $lastOldid = $cacheEntry->mAttribs['rc_last_oldid'];
                $lastMessage = $this->getMessage( 'last' );
                $type = $cacheEntry->mAttribs['rc_type'];
-               $logTypes = array( RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT );
+               $logTypes = array( RC_LOG );
 
                // Make "last" link
                if ( !$showDiffLinks || !$lastOldid || in_array( $type, $logTypes ) ) {
index f7beb0c..8fa6ed9 100644 (file)
@@ -102,6 +102,64 @@ class RecentChange {
                return $rc;
        }
 
+       /**
+        * Parsing text to RC_* constants
+        * @since 1.24
+        * @param string|array $type
+        * @throws MWException
+        * @return int|array RC_TYPE
+        */
+       public static function parseToRCType( $type ) {
+               if ( is_array( $type ) ) {
+                       $retval = array();
+                       foreach ( $type as $t ) {
+                               $retval[] = RecentChange::parseToRCType( $t );
+                       }
+
+                       return $retval;
+               }
+
+               switch ( $type ) {
+                       case 'edit':
+                               return RC_EDIT;
+                       case 'new':
+                               return RC_NEW;
+                       case 'log':
+                               return RC_LOG;
+                       case 'external':
+                               return RC_EXTERNAL;
+                       default:
+                               throw new MWException( "Unknown type '$type'" );
+               }
+       }
+
+       /**
+        * Parsing RC_* constants to human-readable test
+        * @since 1.24
+        * @param int $rc_type
+        * @return string $type
+        */
+       public static function parseFromRCType( $rcType ) {
+               switch ( $rcType ) {
+                       case RC_EDIT:
+                               $type = 'edit';
+                               break;
+                       case RC_NEW:
+                               $type = 'new';
+                               break;
+                       case RC_LOG:
+                               $type = 'log';
+                               break;
+                       case RC_EXTERNAL:
+                               $type = 'external';
+                               break;
+                       default:
+                               $type = "$rcType";
+               }
+
+               return $type;
+       }
+
        /**
         * No uses left in Gerrit on 2013-11-19.
         * @deprecated since 1.22
@@ -326,13 +384,17 @@ class RecentChange {
 
        /**
         * Notify all the feeds about the change.
+        * @param array $feeds Optional feeds to send to, defaults to $wgRCFeeds
         */
-       public function notifyRCFeeds() {
+       public function notifyRCFeeds( array $feeds = null ) {
                global $wgRCFeeds;
+               if ( $feeds === null ) {
+                       $feeds = $wgRCFeeds;
+               }
 
                $performer = $this->getPerformer();
 
-               foreach ( $wgRCFeeds as $feed ) {
+               foreach ( $feeds as $feed ) {
                        $feed += array(
                                'omit_bots' => false,
                                'omit_anon' => false,
@@ -361,7 +423,7 @@ class RecentChange {
                        }
 
                        /** @var $formatter RCFeedFormatter */
-                       $formatter = new $feed['formatter']();
+                       $formatter = is_object( $feed['formatter'] ) ? $feed['formatter'] : new $feed['formatter']();
                        $line = $formatter->getLine( $feed, $this, $actionComment );
 
                        $engine->send( $feed, $line );
index 04afdda..68e90b4 100644 (file)
  */
 
 /**
- * Abstract class for get settings for
+ * Interface for configuration instances
  *
  * @since 1.23
  */
-abstract class Config {
-       /**
-        * @param string $name configuration variable name without prefix
-        * @param string $prefix of the variable name
-        * @return mixed
-        */
-       abstract public function get( $name, $prefix = 'wg' );
+interface Config {
 
        /**
-        * @param string $name configuration variable name without prefix
-        * @param mixed $value to set
-        * @param string $prefix of the variable name
-        * @return Status object indicating success or failure
+        * Get a configuration variable such as "Sitename" or "UploadMaintenance."
+        *
+        * @param string $name Name of configuration option
+        * @return mixed Value configured
+        * @throws ConfigException
         */
-       abstract public function set( $name, $value, $prefix = 'wg' );
+       public function get( $name );
 
        /**
-        * @param string|null $type class name for Config object,
-        *        uses $wgConfigClass if not provided
-        * @return Config
+        * Set a configuration variable such a "Sitename" to something like "My Wiki"
+        *
+        * @param string $name Name of configuration option
+        * @param mixed $value Value to set
+        * @throws ConfigException
         */
-       public static function factory( $type = null ) {
-               if ( !$type ) {
-                       global $wgConfigClass;
-                       $type = $wgConfigClass;
-               }
-
-               return new $type;
-       }
+       public function set( $name, $value );
 }
diff --git a/includes/config/ConfigException.php b/includes/config/ConfigException.php
new file mode 100644 (file)
index 0000000..368ca5a
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Copyright 2014
+ *
+ * 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
+ */
+
+/**
+ * Exceptions for config failures
+ *
+ * @since 1.23
+ */
+class ConfigException extends MWException {}
diff --git a/includes/config/ConfigFactory.php b/includes/config/ConfigFactory.php
new file mode 100644 (file)
index 0000000..b09316b
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+
+/**
+ * Copyright 2014
+ *
+ * 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
+ */
+
+/**
+ * Factory class to create Config objects
+ *
+ * @since 1.23
+ */
+class ConfigFactory {
+
+       /**
+        * Map of config name => callback
+        * @var array
+        */
+       protected $factoryFunctions = array();
+
+       /**
+        * Config objects that have already been created
+        * name => Config object
+        * @var array
+        */
+       protected $configs = array();
+
+       public static function getDefaultInstance() {
+               static $self = null;
+               if ( !$self ) {
+                       $self = new self;
+                       global $wgConfigRegistry;
+                       foreach ( $wgConfigRegistry as $name => $callback ) {
+                               $self->register( $name, $callback );
+                       }
+               }
+               return $self;
+       }
+
+       /**
+        * Register a new config factory function
+        * Will override if it's already registered
+        * @param string $name
+        * @param callable $callback that takes this ConfigFactory as an argument
+        * @throws InvalidArgumentException if an invalid callback is provided
+        */
+       public function register( $name, $callback ) {
+               if ( !is_callable( $callback ) ) {
+                       throw new InvalidArgumentException( 'Invalid callback provided' );
+               }
+               $this->factoryFunctions[$name] = $callback;
+       }
+
+       /**
+        * Create a given Config using the registered callback for $name.
+        * If an object was already created, the same Config object is returned.
+        * @param string $name of the extension/component you want a Config object for
+        *                     'main' is used for core
+        * @throws ConfigException if a factory function isn't registered for $name
+        * @throws UnexpectedValueException if the factory function returns a non-Config object
+        * @return Config
+        */
+       public function makeConfig( $name ) {
+               if ( !isset( $this->configs[$name] ) ) {
+                       if ( !isset( $this->factoryFunctions[$name] ) ) {
+                               throw new ConfigException( "No registered builder available for $name." );
+                       }
+                       $conf = call_user_func( $this->factoryFunctions[$name], $this );
+                       if ( $conf instanceof Config ) {
+                               $this->configs[$name] = $conf;
+                       } else {
+                               throw new UnexpectedValueException( "The builder for $name returned a non-Config object." );
+                       }
+               }
+
+               return $this->configs[$name];
+       }
+}
diff --git a/includes/config/GlobalConfig.php b/includes/config/GlobalConfig.php
deleted file mode 100644 (file)
index e16a9ee..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-/**
- * Copyright 2014
- *
- * 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
- */
-
-/**
- * Accesses configuration settings from $GLOBALS
- *
- * @since 1.23
- */
-class GlobalConfig extends Config {
-
-       /**
-        * @see Config::get
-        */
-       public function get( $name, $prefix = 'wg' ) {
-               return $GLOBALS[$prefix . $name];
-       }
-
-       /**
-        * @see Config::set
-        */
-       public function set( $name, $value, $prefix = 'wg' ) {
-               $GLOBALS[$prefix . $name] = $value;
-
-               return Status::newGood();
-       }
-}
diff --git a/includes/config/GlobalVarConfig.php b/includes/config/GlobalVarConfig.php
new file mode 100644 (file)
index 0000000..61a76b7
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Copyright 2014
+ *
+ * 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
+ */
+
+/**
+ * Accesses configuration settings from $GLOBALS
+ *
+ * @since 1.23
+ */
+class GlobalVarConfig implements Config {
+
+       /**
+        * Prefix to use for configuration variables
+        * @var string
+        */
+       private $prefix;
+
+       /**
+        * Default builder function
+        * @return GlobalVarConfig
+        */
+       public static function newInstance() {
+               return new GlobalVarConfig();
+       }
+
+       public function __construct( $prefix = 'wg' ) {
+               $this->prefix = $prefix;
+       }
+
+       /**
+        * @see Config::get
+        */
+       public function get( $name ) {
+               return $this->getWithPrefix( $this->prefix, $name );
+       }
+
+       /**
+        * @see Config::set
+        */
+       public function set( $name, $value ) {
+               $this->setWithPrefix( $this->prefix, $name, $value );
+       }
+
+       /**
+        * Get a variable with a given prefix, if not the defaults.
+        *
+        * @param string $prefix Prefix to use on the variable, if one.
+        * @param string $name Variable name without prefix
+        * @throws ConfigException
+        * @return mixed
+        */
+       protected function getWithPrefix( $prefix, $name ) {
+               $var = $prefix . $name;
+               if ( !isset( $GLOBALS[ $var ] ) ) {
+                       throw new ConfigException( __METHOD__ . ": undefined variable: '$var'" );
+               }
+               return $GLOBALS[ $var ];
+       }
+
+       /**
+        * Get a variable with a given prefix, if not the defaults.
+        *
+        * @param string $prefix Prefix to use on the variable
+        * @param string $name Variable name without prefix
+        * @param mixed $value value to set
+        */
+       protected function setWithPrefix( $prefix, $name, $value ) {
+               $GLOBALS[ $prefix . $name ] = $value;
+       }
+}
index dd7e27d..b5b4d13 100644 (file)
@@ -430,6 +430,20 @@ abstract class ContentHandler {
         */
        abstract public function serializeContent( Content $content, $format = null );
 
+       /**
+        * Applies transformations on export (returns the blob unchanged per default).
+        * Subclasses may override this to perform transformations such as conversion
+        * of legacy formats or filtering of internal meta-data.
+        *
+        * @param string $blob The blob to be exported
+        * @param string|null $format The blob's serialization format
+        *
+        * @return string
+        */
+       public function exportTransform( $blob, $format = null ) {
+               return $blob;
+       }
+
        /**
         * Unserializes a Content object of the type supported by this ContentHandler.
         *
@@ -442,6 +456,21 @@ abstract class ContentHandler {
         */
        abstract public function unserializeContent( $blob, $format = null );
 
+       /**
+        * Apply import transformation (per default, returns $blob unchanged).
+        * This gives subclasses an opportunity to transform data blobs on import.
+        *
+        * @singe 1.24
+        *
+        * @param string $blob
+        * @param string|null $format
+        *
+        * @return string
+        */
+       public function importTransform( $blob, $format = null ) {
+               return $blob;
+       }
+
        /**
         * Creates an empty Content object of the type supported by this
         * ContentHandler.
index b772f17..c3daf83 100644 (file)
@@ -116,9 +116,7 @@ class TextContent extends AbstractContent {
         * @return string The raw text.
         */
        public function getNativeData() {
-               $text = $this->mText;
-
-               return $text;
+               return $this->mText;
        }
 
        /**
index 32a650f..4a7b466 100644 (file)
@@ -66,7 +66,7 @@ class DerivativeContext extends ContextSource {
        private $skin;
 
        /**
-        * @var SiteConfiguration
+        * @var Config
         */
        private $config;
 
@@ -81,9 +81,9 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the SiteConfiguration object
         *
-        * @param SiteConfiguration $s
+        * @param Config $s
         */
-       public function setConfig( SiteConfiguration $s ) {
+       public function setConfig( Config $s ) {
                $this->config = $s;
        }
 
index 4291e44..c87bfc0 100644 (file)
@@ -84,7 +84,9 @@ class RequestContext implements IContextSource {
         */
        public function getConfig() {
                if ( $this->config === null ) {
-                       $this->config = Config::factory();
+                       // @todo In the future, we could move this to WebStart.php so
+                       // the Config object is ready for when initialization happens
+                       $this->config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
                }
 
                return $this->config;
index 536d721..3017ea8 100644 (file)
@@ -71,7 +71,13 @@ class CloneDatabase {
         * Clone the table structure
         */
        public function cloneTableStructure() {
+               global $wgSharedTables, $wgSharedDB;
                foreach ( $this->tablesToClone as $tbl ) {
+                       if ( $wgSharedDB && in_array( $tbl, $wgSharedTables, true ) ) {
+                               // Shared tables don't work properly when cloning due to
+                               // how prefixes are handled (bug 65654)
+                               throw new MWException( "Cannot clone shared table $tbl." );
+                       }
                        # Clean up from previous aborted run.  So that table escaping
                        # works correctly across DB engines, we need to change the pre-
                        # fix back and forth so tableName() works right.
index 13efb81..16e1ef2 100644 (file)
@@ -1104,20 +1104,25 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        # Transaction is gone, like it or not
                        $hadTrx = $this->mTrxLevel; // possible lost transaction
                        $this->mTrxLevel = 0;
+                       $this->mTrxIdleCallbacks = array(); // bug 65263
+                       $this->mTrxPreCommitCallbacks = array(); // bug 65263
                        wfDebug( "Connection lost, reconnecting...\n" );
 
                        if ( $this->ping() ) {
+                               global $wgRequestTime;
                                wfDebug( "Reconnected\n" );
                                $sqlx = substr( $commentedSql, 0, 500 );
                                $sqlx = strtr( $sqlx, "\t\n", '  ' );
-                               global $wgRequestTime;
                                $elapsed = round( microtime( true ) - $wgRequestTime, 3 );
                                if ( $elapsed < 300 ) {
                                        # Not a database error to lose a transaction after a minute or two
                                        wfLogDBError( "Connection lost and reconnected after {$elapsed}s, query: $sqlx" );
                                }
-                               if ( !$hadTrx ) {
-                                       # Should be safe to silently retry
+                               if ( $hadTrx ) {
+                                       # Leave $ret as false and let an error be reported.
+                                       # Callers may catch the exception and continue to use the DB.
+                               } else {
+                                       # Should be safe to silently retry (no trx and thus no callbacks)
                                        $ret = $this->doQuery( $commentedSql );
                                }
                        } else {
@@ -3417,6 +3422,11 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        $this->runOnTransactionIdleCallbacks();
                }
 
+               # Avoid fatals if close() was called
+               if ( !$this->isOpen() ) {
+                       throw new DBUnexpectedError( $this, "DB connection was already closed." );
+               }
+
                $this->doBegin( $fname );
                $this->mTrxFname = $fname;
                $this->mTrxDoneWrites = false;
@@ -3475,6 +3485,11 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        }
                }
 
+               # Avoid fatals if close() was called
+               if ( !$this->isOpen() ) {
+                       throw new DBUnexpectedError( $this, "DB connection was already closed." );
+               }
+
                $this->runOnTransactionPreCommitCallbacks();
                $this->doCommit( $fname );
                if ( $this->mTrxDoneWrites ) {
@@ -3525,6 +3540,11 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        }
                }
 
+               # Avoid fatals if close() was called
+               if ( !$this->isOpen() ) {
+                       throw new DBUnexpectedError( $this, "DB connection was already closed." );
+               }
+
                $this->doRollback( $fname );
                $this->mTrxIdleCallbacks = array(); // cancel
                $this->mTrxPreCommitCallbacks = array(); // cancel
index 4d5c3dc..8229c99 100644 (file)
@@ -133,17 +133,13 @@ class DBConnectionError extends DBExpectedError {
         * @return string Unprocessed plain error text with parameters replaced
         */
        function msg( $key, $fallback /*[, params...] */ ) {
-               global $wgLang;
-
                $args = array_slice( func_get_args(), 2 );
 
                if ( $this->useMessageCache() ) {
-                       $message = $wgLang->getMessage( $key );
+                       return wfMessage( $key, $args )->useDatabase( false )->text();
                } else {
-                       $message = $fallback;
+                       return wfMsgReplaceArgs( $fallback, $args );
                }
-
-               return wfMsgReplaceArgs( $message, $args );
        }
 
        /**
index 396de4f..7686010 100644 (file)
@@ -1491,6 +1491,10 @@ class DatabaseOracle extends DatabaseBase {
                                        throw new DBUnexpectedError( $this, "Cannot create LOB descriptor: " . $e['message'] );
                                }
 
+                               if ( is_object( $val ) ) {
+                                       $val = $val->getData();
+                               }
+
                                if ( $col_type == 'BLOB' ) {
                                        $lob[$col]->writeTemporary( $val );
                                        oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, SQLT_BLOB );
index 131b758..3d7267a 100644 (file)
@@ -521,7 +521,6 @@ class DatabasePostgres extends DatabaseBase {
        }
 
        function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
-               /* Transaction stays in the ERROR state until rolledback */
                if ( $tempIgnore ) {
                        /* Check for constraint violation */
                        if ( $errno === '23505' ) {
@@ -530,8 +529,10 @@ class DatabasePostgres extends DatabaseBase {
                                return;
                        }
                }
-               /* Don't ignore serious errors */
-               $this->rollback( __METHOD__ );
+               /* Transaction stays in the ERROR state until rolledback */
+               if ( $this->mTrxLevel ) {
+                       $this->rollback( __METHOD__ );
+               };
                parent::reportQueryError( $error, $errno, $sql, $fname, false );
        }
 
@@ -1565,7 +1566,8 @@ SQL;
                //}
 
                if ( isset( $options['FOR UPDATE'] ) ) {
-                       $postLimitTail .= ' FOR UPDATE OF ' . implode( ', ', $options['FOR UPDATE'] );
+                       $postLimitTail .= ' FOR UPDATE OF ' .
+                               implode( ', ', array_map( array( &$this, 'tableName' ), $options['FOR UPDATE'] ) );
                } elseif ( isset( $noKeyOptions['FOR UPDATE'] ) ) {
                        $postLimitTail .= ' FOR UPDATE';
                }
index 468ed6d..3e063c6 100644 (file)
@@ -342,8 +342,13 @@ class DatabaseSqlite extends DatabaseBase {
         */
        function numFields( $res ) {
                $r = $res instanceof ResultWrapper ? $res->result : $res;
-
-               return is_array( $r ) ? count( $r[0] ) : 0;
+               if ( is_array($r) && count( $r ) > 0 ){
+                       // The size of the result array is twice the number of fields. (Bug: 65578)
+                       return count( $r[0] ) / 2 ;
+               } else {
+                       // If the result is empty return 0
+                       return 0;
+               }
        }
 
        /**
index bea195b..168d846 100644 (file)
@@ -236,7 +236,7 @@ class LBFactorySimple extends LBFactory {
         * @return LoadBalancer
         */
        function newMainLB( $wiki = false ) {
-               global $wgDBservers, $wgMasterWaitTimeout;
+               global $wgDBservers;
                if ( $wgDBservers ) {
                        $servers = $wgDBservers;
                } else {
@@ -267,7 +267,6 @@ class LBFactorySimple extends LBFactory {
 
                return new LoadBalancer( array(
                        'servers' => $servers,
-                       'masterWaitTimeout' => $wgMasterWaitTimeout
                ) );
        }
 
index 3c1885f..bda3dd6 100644 (file)
@@ -286,11 +286,9 @@ class LBFactoryMulti extends LBFactory {
         * @return LoadBalancer
         */
        function newLoadBalancer( $template, $loads, $groupLoads ) {
-               global $wgMasterWaitTimeout;
                $servers = $this->makeServerArray( $template, $loads, $groupLoads );
                $lb = new LoadBalancer( array(
                        'servers' => $servers,
-                       'masterWaitTimeout' => $wgMasterWaitTimeout
                ) );
 
                return $lb;
index 38c3d2d..ee35c13 100644 (file)
@@ -45,7 +45,6 @@ class LoadBalancer {
        /**
         * @param array $params with keys:
         *   servers           Required. Array of server info structures.
-        *   masterWaitTimeout Replication lag wait timeout
         *   loadMonitor       Name of a class used to fetch server lag and load.
         * @throws MWException
         */
@@ -54,12 +53,7 @@ class LoadBalancer {
                        throw new MWException( __CLASS__ . ': missing servers parameter' );
                }
                $this->mServers = $params['servers'];
-
-               if ( isset( $params['waitTimeout'] ) ) {
-                       $this->mWaitTimeout = $params['waitTimeout'];
-               } else {
-                       $this->mWaitTimeout = 10;
-               }
+               $this->mWaitTimeout = 10;
 
                $this->mReadIndex = -1;
                $this->mWriteIndex = -1;
index 0713a05..54fa594 100644 (file)
@@ -54,8 +54,8 @@ class HTMLCacheUpdate implements DeferrableUpdate {
                        )
                );
 
-               $count = $this->mTitle->getBacklinkCache()->getNumLinks( $this->mTable, 200 );
-               if ( $count >= 200 ) { // many backlinks
+               $count = $this->mTitle->getBacklinkCache()->getNumLinks( $this->mTable, 100 );
+               if ( $count >= 100 ) { // many backlinks
                        JobQueueGroup::singleton()->push( $job );
                        JobQueueGroup::singleton()->deduplicateRootJob( $job );
                } else { // few backlinks ($count might be off even if 0)
index 9586657..3f81a94 100644 (file)
@@ -213,7 +213,13 @@ class FSFileBackend extends FileBackendStore {
                                wfEscapeShellArg( $this->cleanPathSlashes( $tempFile->getPath() ) ),
                                wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
                        ) );
-                       $status->value = new FSFileOpHandle( $this, $params, 'Create', $cmd, $dest );
+                       $handler = function( $errors, Status $status, array $params, $cmd ) {
+                               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
+                                       $status->fatal( 'backend-fail-create', $params['dst'] );
+                                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
+                               }
+                       };
+                       $status->value = new FSFileOpHandle( $this, $params, $handler, $cmd, $dest );
                        $tempFile->bind( $status->value );
                } else { // immediate write
                        $this->trapWarnings();
@@ -230,16 +236,6 @@ class FSFileBackend extends FileBackendStore {
                return $status;
        }
 
-       /**
-        * @see FSFileBackend::doExecuteOpHandlesInternal()
-        */
-       protected function getResponseCreate( $errors, Status $status, array $params, $cmd ) {
-               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
-                       $status->fatal( 'backend-fail-create', $params['dst'] );
-                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
-               }
-       }
-
        protected function doStoreInternal( array $params ) {
                $status = Status::newGood();
 
@@ -256,7 +252,13 @@ class FSFileBackend extends FileBackendStore {
                                wfEscapeShellArg( $this->cleanPathSlashes( $params['src'] ) ),
                                wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
                        ) );
-                       $status->value = new FSFileOpHandle( $this, $params, 'Store', $cmd, $dest );
+                       $handler = function( $errors, Status $status, array $params, $cmd ) {
+                               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
+                                       $status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
+                                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
+                               }
+                       };
+                       $status->value = new FSFileOpHandle( $this, $params, $handler, $cmd, $dest );
                } else { // immediate write
                        $this->trapWarnings();
                        $ok = copy( $params['src'], $dest );
@@ -277,16 +279,6 @@ class FSFileBackend extends FileBackendStore {
                return $status;
        }
 
-       /**
-        * @see FSFileBackend::doExecuteOpHandlesInternal()
-        */
-       protected function getResponseStore( $errors, Status $status, array $params, $cmd ) {
-               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
-                       $status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
-                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
-               }
-       }
-
        protected function doCopyInternal( array $params ) {
                $status = Status::newGood();
 
@@ -318,7 +310,13 @@ class FSFileBackend extends FileBackendStore {
                                wfEscapeShellArg( $this->cleanPathSlashes( $source ) ),
                                wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
                        ) );
-                       $status->value = new FSFileOpHandle( $this, $params, 'Copy', $cmd, $dest );
+                       $handler = function( $errors, Status $status, array $params, $cmd ) {
+                               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
+                                       $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+                                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
+                               }
+                       };
+                       $status->value = new FSFileOpHandle( $this, $params, $handler, $cmd, $dest );
                } else { // immediate write
                        $this->trapWarnings();
                        $ok = ( $source === $dest ) ? true : copy( $source, $dest );
@@ -341,16 +339,6 @@ class FSFileBackend extends FileBackendStore {
                return $status;
        }
 
-       /**
-        * @see FSFileBackend::doExecuteOpHandlesInternal()
-        */
-       protected function getResponseCopy( $errors, Status $status, array $params, $cmd ) {
-               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
-                       $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
-                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
-               }
-       }
-
        protected function doMoveInternal( array $params ) {
                $status = Status::newGood();
 
@@ -382,7 +370,13 @@ class FSFileBackend extends FileBackendStore {
                                wfEscapeShellArg( $this->cleanPathSlashes( $source ) ),
                                wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
                        ) );
-                       $status->value = new FSFileOpHandle( $this, $params, 'Move', $cmd );
+                       $handler = function( $errors, Status $status, array $params, $cmd ) {
+                               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
+                                       $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+                                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
+                               }
+                       };
+                       $status->value = new FSFileOpHandle( $this, $params, $handler, $cmd );
                } else { // immediate write
                        $this->trapWarnings();
                        $ok = ( $source === $dest ) ? true : rename( $source, $dest );
@@ -398,16 +392,6 @@ class FSFileBackend extends FileBackendStore {
                return $status;
        }
 
-       /**
-        * @see FSFileBackend::doExecuteOpHandlesInternal()
-        */
-       protected function getResponseMove( $errors, Status $status, array $params, $cmd ) {
-               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
-                       $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
-                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
-               }
-       }
-
        protected function doDeleteInternal( array $params ) {
                $status = Status::newGood();
 
@@ -431,7 +415,13 @@ class FSFileBackend extends FileBackendStore {
                                wfIsWindows() ? 'DEL' : 'unlink',
                                wfEscapeShellArg( $this->cleanPathSlashes( $source ) )
                        ) );
-                       $status->value = new FSFileOpHandle( $this, $params, 'Copy', $cmd );
+                       $handler = function( $errors, Status $status, array $params, $cmd ) {
+                               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
+                                       $status->fatal( 'backend-fail-delete', $params['src'] );
+                                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
+                               }
+                       };
+                       $status->value = new FSFileOpHandle( $this, $params, $handler, $cmd );
                } else { // immediate write
                        $this->trapWarnings();
                        $ok = unlink( $source );
@@ -446,16 +436,6 @@ class FSFileBackend extends FileBackendStore {
                return $status;
        }
 
-       /**
-        * @see FSFileBackend::doExecuteOpHandlesInternal()
-        */
-       protected function getResponseDelete( $errors, Status $status, array $params, $cmd ) {
-               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
-                       $status->fatal( 'backend-fail-delete', $params['src'] );
-                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
-               }
-       }
-
        /**
         * @param string $fullCont
         * @param string $dirRel
@@ -716,8 +696,8 @@ class FSFileBackend extends FileBackendStore {
 
                foreach ( $fileOpHandles as $index => $fileOpHandle ) {
                        $status = Status::newGood();
-                       $function = 'getResponse' . $fileOpHandle->call;
-                       $this->$function( $errs[$index], $status, $fileOpHandle->params, $fileOpHandle->cmd );
+                       $function = $fileOpHandle->call;
+                       $function( $errs[$index], $status, $fileOpHandle->params, $fileOpHandle->cmd );
                        $statuses[$index] = $status;
                        if ( $status->isOK() && $fileOpHandle->chmodPath ) {
                                $this->chmod( $fileOpHandle->chmodPath );
@@ -812,7 +792,7 @@ class FSFileOpHandle extends FileBackendStoreOpHandle {
        /**
         * @param FSFileBackend $backend
         * @param array $params
-        * @param string $call
+        * @param callback $call
         * @param string $cmd
         * @param int|null $chmodPath
         */
index a9e312d..2820be2 100644 (file)
@@ -1231,12 +1231,13 @@ abstract class FileBackend {
         *
         * @param array $paths Storage paths
         * @param int $type LockManager::LOCK_* constant
+        * @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.24)
         * @return Status
         */
-       final public function lockFiles( array $paths, $type ) {
+       final public function lockFiles( array $paths, $type, $timeout = 0 ) {
                $paths = array_map( 'FileBackend::normalizeStoragePath', $paths );
 
-               return $this->lockManager->lock( $paths, $type );
+               return $this->lockManager->lock( $paths, $type, $timeout );
        }
 
        /**
@@ -1265,9 +1266,10 @@ abstract class FileBackend {
         * @param array $paths List of storage paths or map of lock types to path lists
         * @param int|string $type LockManager::LOCK_* constant or "mixed"
         * @param Status $status Status to update on lock/unlock
+        * @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.24)
         * @return ScopedLock|null Returns null on failure
         */
-       final public function getScopedFileLocks( array $paths, $type, Status $status ) {
+       final public function getScopedFileLocks( array $paths, $type, Status $status, $timeout = 0 ) {
                if ( $type === 'mixed' ) {
                        foreach ( $paths as &$typePaths ) {
                                $typePaths = array_map( 'FileBackend::normalizeStoragePath', $typePaths );
@@ -1276,7 +1278,7 @@ abstract class FileBackend {
                        $paths = array_map( 'FileBackend::normalizeStoragePath', $paths );
                }
 
-               return ScopedLock::factory( $this->lockManager, $paths, $type, $status );
+               return ScopedLock::factory( $this->lockManager, $paths, $type, $status, $timeout );
        }
 
        /**
index ce4dedd..340c315 100644 (file)
@@ -357,8 +357,8 @@ abstract class FileBackendStore extends FileBackend {
                        $status->merge( $this->doConcatenate( $params ) );
                        $sec = microtime( true ) - $start_time;
                        if ( !$status->isOK() ) {
-                               wfDebugLog( 'FileOperation', get_class( $this ) . " failed to concatenate " .
-                                       count( $params['srcs'] ) . " file(s) [$sec sec]" );
+                               wfDebugLog( 'FileOperation', get_class( $this ) . "-{$this->name}" .
+                                       " failed to concatenate " . count( $params['srcs'] ) . " file(s) [$sec sec]" );
                        }
                }
 
@@ -1122,6 +1122,8 @@ abstract class FileBackendStore extends FileBackend {
                                $subStatus->success[$i] = false;
                                ++$subStatus->failCount;
                        }
+                       wfDebugLog( 'FileOperation', get_class( $this ) . "-{$this->name} " .
+                               " stat failure; aborted operations: " . FormatJson::encode( $ops ) );
                }
 
                // Merge errors into status fields
index 9249a09..9ef23f8 100644 (file)
@@ -1066,10 +1066,11 @@ class SwiftFileBackend extends FileBackendStore {
                        list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $op['response'];
                        fclose( $op['stream'] ); // close open handle
                        if ( $rcode >= 200 && $rcode <= 299 ) {
+                               $size = $tmpFiles[$path] ? $tmpFiles[$path]->getSize() : 0;
                                // Double check that the disk is not full/broken
-                               if ( $tmpFiles[$path]->getSize() != $rhdrs['content-length'] ) {
+                               if ( $size != $rhdrs['content-length'] ) {
                                        $tmpFiles[$path] = null;
-                                       $rerr = "Got {$tmpFiles[$path]->getSize()}/{$rhdrs['content-length']} bytes";
+                                       $rerr = "Got {$size}/{$rhdrs['content-length']} bytes";
                                        $this->onError( null, __METHOD__,
                                                array( 'src' => $path ) + $ep, $rerr, $rcode, $rdesc );
                                }
index 845fd71..1eee6a2 100644 (file)
@@ -281,6 +281,10 @@ class ArchivedFile {
         * @return string
         */
        public function getName() {
+               if ( $this->name === false ) {
+                       $this->load();
+               }
+
                return $this->name;
        }
 
index 5895dda..1103e38 100644 (file)
@@ -1728,17 +1728,20 @@ abstract class File {
 
        /**
         * Get an image size array like that returned by getImageSize(), or false if it
-        * can't be determined.
+        * can't be determined. Loads the image size directly from the file ignoring caches.
         *
-        * @param string $fileName The filename
-        * @return array
+        * @note Use getWidth()/getHeight() instead of this method unless you have a
+        *  a good reason. This method skips all caches.
+        *
+        * @param string $fileName The path to the file (e.g. From getLocalPathRef() )
+        * @return array The width, followed by height, with optionally more things after
         */
-       function getImageSize( $fileName ) {
+       function getImageSize( $filePath ) {
                if ( !$this->getHandler() ) {
                        return false;
                }
 
-               return $this->handler->getImageSize( $this, $fileName );
+               return $this->handler->getImageSize( $this, $filePath );
        }
 
        /**
@@ -2015,4 +2018,13 @@ abstract class File {
                        throw new MWException( "A Title object is not set for this File.\n" );
                }
        }
+
+       /**
+        * True if creating thumbnails from the file is large or otherwise resource-intensive.
+        * @return bool
+        */
+       public function isExpensiveToThumbnail() {
+               $handler = $this->getHandler();
+               return $handler ? $handler->isExpensiveToThumbnail( $this ) : false;
+       }
 }
index a8fa8bd..300e68e 100644 (file)
@@ -1248,19 +1248,13 @@ class LocalFile extends File {
                        wfProfileOut( __METHOD__ . '-getProps' );
                }
 
+               # Imports or such might force a certain timestamp; otherwise we generate
+               # it and can fudge it slightly to keep (name,timestamp) unique on re-upload.
                if ( $timestamp === false ) {
-                       // Use FOR UPDATE in case lock()/unlock() did not start the transaction
-                       $ltimestamp = $dbw->selectField( 'image', 'img_timestamp',
-                               array( 'img_name' => $this->getName() ), __METHOD__, array( 'FOR UPDATE' ) );
-                       $ltime = $ltimestamp ? wfTimestamp( TS_UNIX, $ltimestamp ) : false;
-                       $ctime = time();
-                       // Avoid a timestamp that is not newer than the last version
-                       if ( $ctime > $ltime ) {
-                               $timestamp = $dbw->timestamp( $ctime );
-                       } else {
-                               sleep( 1 ); // fast enough uploads will go in to the future otherwise
-                               $timestamp = $dbw->timestamp( $ltime + 1 );
-                       }
+                       $timestamp = $dbw->timestamp();
+                       $allowTimeKludge = true;
+               } else {
+                       $allowTimeKludge = false;
                }
 
                $props['description'] = $comment;
@@ -1303,6 +1297,20 @@ class LocalFile extends File {
                        'IGNORE'
                );
                if ( $dbw->affectedRows() == 0 ) {
+                       if ( $allowTimeKludge ) {
+                               # Use FOR UPDATE to ignore any transaction snapshotting
+                               $ltimestamp = $dbw->selectField( 'image', 'img_timestamp',
+                                       array( 'img_name' => $this->getName() ), __METHOD__, array( 'FOR UPDATE' ) );
+                               $lUnixtime = $ltimestamp ? wfTimestamp( TS_UNIX, $ltimestamp ) : false;
+                               # Avoid a timestamp that is not newer than the last version
+                               # TODO: the image/oldimage tables should be like page/revision with an ID field
+                               if ( $lUnixtime && wfTimestamp( TS_UNIX, $timestamp ) <= $lUnixtime ) {
+                                       sleep( 1 ); // fast enough re-uploads would go far in the future otherwise
+                                       $timestamp = $dbw->timestamp( $lUnixtime + 1 );
+                                       $this->timestamp = wfTimestamp( TS_MW, $timestamp ); // DB -> TS_MW
+                               }
+                       }
+
                        # (bug 34993) Note: $oldver can be empty here, if the previous
                        # version of the file was broken. Allow registration of the new
                        # version to continue anyway, because that's better than having
@@ -1836,8 +1844,8 @@ class LocalFile extends File {
        /**
         * Start a transaction and lock the image for update
         * Increments a reference counter if the lock is already held
-        * @throws MWException
-        * @return bool True if the image exists, false otherwise
+        * @throws MWException Throws an error if the lock was not acquired
+        * @return bool success
         */
        function lock() {
                $dbw = $this->repo->getMasterDB();
@@ -1849,21 +1857,22 @@ class LocalFile extends File {
                        }
                        $this->locked++;
                        // Bug 54736: use simple lock to handle when the file does not exist.
-                       // SELECT FOR UPDATE only locks records not the gaps where there are none.
-                       $cache = wfGetMainCache();
-                       $key = $this->getCacheKey();
-                       if ( !$cache->lock( $key, 5 ) ) {
+                       // SELECT FOR UPDATE prevents changes, not other SELECTs with FOR UPDATE.
+                       // Also, that would cause contention on INSERT of similarly named rows.
+                       $backend = $this->getRepo()->getBackend();
+                       $lockPaths = array( $this->getPath() ); // represents all versions of the file
+                       $status = $backend->lockFiles( $lockPaths, LockManager::LOCK_EX, 5 );
+                       if ( !$status->isGood() ) {
                                throw new MWException( "Could not acquire lock for '{$this->getName()}.'" );
                        }
-                       $dbw->onTransactionIdle( function () use ( $cache, $key ) {
-                               $cache->unlock( $key ); // release on commit
+                       $dbw->onTransactionIdle( function () use ( $backend, $lockPaths ) {
+                               $backend->unlockFiles( $lockPaths, LockManager::LOCK_EX ); // release on commit
                        } );
                }
 
                $this->markVolatile(); // file may change soon
 
-               return $dbw->selectField( 'image', '1',
-                       array( 'img_name' => $this->getName() ), __METHOD__, array( 'FOR UPDATE' ) );
+               return true;
        }
 
        /**
@@ -2394,10 +2403,14 @@ class LocalFileRestoreBatch {
                        return $this->file->repo->newGood();
                }
 
-               $exists = $this->file->lock();
+               $this->file->lock();
+
                $dbw = $this->file->repo->getMasterDB();
                $status = $this->file->repo->newGood();
 
+               $exists = (bool)$dbw->selectField( 'image', '1',
+                       array( 'img_name' => $this->file->getName() ), __METHOD__, array( 'FOR UPDATE' ) );
+
                // Fetch all or selected archived revisions for the file,
                // sorted from the most recent to the oldest.
                $conditions = array( 'fa_name' => $this->file->getName() );
@@ -2758,7 +2771,8 @@ class LocalFileMoveBatch {
                $result = $this->db->select( 'oldimage',
                        array( 'oi_archive_name', 'oi_deleted' ),
                        array( 'oi_name' => $this->oldName ),
-                       __METHOD__
+                       __METHOD__,
+                       array( 'FOR UPDATE' ) // ignore snapshot
                );
 
                foreach ( $result as $row ) {
old mode 100644 (file)
new mode 100755 (executable)
index c7ec014..a0dd370
@@ -24,8 +24,7 @@ class HTMLCheckField extends HTMLFormField {
                                array(
                                        'class' => 'mw-ui-checkbox-label'
                                ),
-                               Xml::check( $this->mName, $value, $attr ) . // Html:rawElement doesn't escape contents.
-                               htmlspecialchars( $this->mLabel ) );
+                               Xml::check( $this->mName, $value, $attr ) . $this->mLabel );
                } else {
                        return Xml::check( $this->mName, $value, $attr )
                        . '&#160;'
index 17c5ab2..88478f4 100644 (file)
@@ -351,10 +351,23 @@ abstract class Installer {
        public function __construct() {
                global $wgMessagesDirs, $wgUser;
 
-               // Disable the i18n cache and LoadBalancer
+               // Disable the i18n cache
                Language::getLocalisationCache()->disableBackend();
+               // Disable LoadBalancer and wfGetDB etc.
                LBFactory::disableBackend();
 
+               // Disable object cache (otherwise CACHE_ANYTHING will try CACHE_DB and
+               // SqlBagOStuff will then throw since we just disabled wfGetDB)
+               $GLOBALS['wgMemc'] = new EmptyBagOStuff;
+               ObjectCache::clear();
+               $emptyCache = array( 'class' => 'EmptyBagOStuff' );
+               $GLOBALS['wgObjectCaches'] = array(
+                       CACHE_NONE => $emptyCache,
+                       CACHE_DB => $emptyCache,
+                       CACHE_ANYTHING => $emptyCache,
+                       CACHE_MEMCACHED => $emptyCache,
+               );
+
                // Load the installer's i18n.
                $wgMessagesDirs['MediawikiInstaller'] = __DIR__ . '/i18n';
 
@@ -389,7 +402,7 @@ abstract class Installer {
                $this->compiledDBs = $compiledDBs;
 
                $this->parserTitle = Title::newFromText( 'Installer' );
-               $this->parserOptions = new ParserOptions; // language will  be wrong :(
+               $this->parserOptions = new ParserOptions; // language will be wrong :(
                $this->parserOptions->setEditSection( false );
        }
 
index 4416aff..5e89ca4 100644 (file)
@@ -351,7 +351,7 @@ ${serverSetting}
 \$wgUpgradeKey = \"{$this->values['wgUpgradeKey']}\";
 
 ## Default skin: you can change the default skin. Use the internal symbolic
-## names, ie 'cologneblue', 'monobook', 'vector':
+## names, ie 'vector', 'monobook':
 \$wgDefaultSkin = \"{$this->values['wgDefaultSkin']}\";
 
 ## For attaching licensing metadata to pages, and displaying an
index 8b77cb1..2f77021 100644 (file)
@@ -254,6 +254,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        // 1.24
                        array( 'addField', 'page_props', 'pp_sortkey', 'patch-pp_sortkey.sql' ),
                        array( 'dropField', 'recentchanges', 'rc_cur_time', 'patch-drop-rc_cur_time.sql' ),
+                       array( 'addIndex', 'watchlist', 'wl_user_notificationtimestamp', 'patch-watchlist-user-notificationtimestamp-index.sql' ),
                );
        }
 
@@ -647,25 +648,23 @@ class MysqlUpdater extends DatabaseUpdater {
                );
 
                global $wgContLang;
-               foreach ( MWNamespace::getCanonicalNamespaces() as $ns => $name ) {
+               foreach ( $wgContLang->getNamespaces() as $ns => $name ) {
                        if ( $ns == 0 ) {
                                continue;
                        }
 
                        $this->output( "Cleaning up broken links for namespace $ns... " );
-
-                       $pagelinks = $this->db->tableName( 'pagelinks' );
-                       $name = $wgContLang->getNsText( $ns );
-                       $prefix = $this->db->strencode( $name );
-                       $likeprefix = str_replace( '_', '\\_', $prefix );
-
-                       $sql = "UPDATE $pagelinks
-                                          SET pl_namespace=$ns,
-                                                  pl_title=TRIM(LEADING '$prefix:' FROM pl_title)
-                                        WHERE pl_namespace=0
-                                          AND pl_title LIKE '$likeprefix:%'";
-
-                       $this->db->query( $sql, __METHOD__ );
+                       $this->db->update( 'pagelinks',
+                               array(
+                                       'pl_namespace' => $ns,
+                                       "pl_title = TRIM(LEADING {$this->db->addQuotes( "$name:" )} FROM pl_title)",
+                               ),
+                               array(
+                                       'pl_namespace' => 0,
+                                       'pl_title' . $this->db->buildLike( "$name:", $this->db->anyString() ),
+                               ),
+                               __METHOD__
+                       );
                        $this->output( "done.\n" );
                }
        }
index 8c81080..e8de7de 100644 (file)
@@ -250,6 +250,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addPgIndex', 'recentchanges', 'rc_timestamp_bot', '(rc_timestamp) WHERE rc_bot = 0' ),
                        array( 'addPgIndex', 'templatelinks', 'templatelinks_from', '(tl_from)' ),
                        array( 'addPgIndex', 'watchlist', 'wl_user', '(wl_user)' ),
+                       array( 'addPgIndex', 'watchlist', 'wl_user_notificationtimestamp', '(wl_user, wl_notificationtimestamp)' ),
                        array( 'addPgIndex', 'logging', 'logging_user_type_time',
                                '(log_user, log_type, log_timestamp)' ),
                        array( 'addPgIndex', 'logging', 'logging_page_id_time', '(log_page,log_timestamp)' ),
index 7813115..111d654 100644 (file)
@@ -132,6 +132,7 @@ class SqliteUpdater extends DatabaseUpdater {
                        // 1.24
                        array( 'addField', 'page_props', 'pp_sortkey', 'patch-pp_sortkey.sql' ),
                        array( 'dropField', 'recentchanges', 'rc_cur_time', 'patch-drop-rc_cur_time.sql' ),
+                       array( 'addIndex', 'watchlist', 'wl_user_notificationtimestamp', 'patch-watchlist-user-notificationtimestamp-index.sql' ),
                );
        }
 
index 085404b..46348f9 100644 (file)
@@ -180,12 +180,9 @@ class WebInstaller extends Installer {
                        return $this->session;
                }
 
-               $cssDir = $this->request->getVal( 'css' );
-               if ( $cssDir ) {
-                       $cssDir = ( $cssDir == 'rtl' ? 'rtl' : 'ltr' );
-                       $this->request->response()->header( 'Content-type: text/css' );
-                       echo $this->output->getCSS( $cssDir );
-
+               $isCSS = $this->request->getVal( 'css' );
+               if ( $isCSS ) {
+                       $this->outputCss();
                        return $this->session;
                }
 
@@ -354,8 +351,6 @@ class WebInstaller extends Installer {
                restore_error_handler();
 
                if ( $this->phpErrors ) {
-                       $this->showError( 'config-session-error', $this->phpErrors[0] );
-
                        return false;
                }
 
@@ -702,7 +697,8 @@ class WebInstaller extends Installer {
                $html = $this->parse( $text, true );
 
                return "<div class=\"mw-help-field-container\">\n" .
-                       "<span class=\"mw-help-field-hint\" title=\"" .  wfMessage( 'config-help-tooltip' )->escaped() . "\">" .
+                       "<span class=\"mw-help-field-hint\" title=\"" .
+                       wfMessage( 'config-help-tooltip' )->escaped() . "\">" .
                        wfMessage( 'config-help' )->escaped() . "</span>\n" .
                        "<span class=\"mw-help-field-data\">" . $html . "</span>\n" .
                        "</div>\n";
@@ -1157,4 +1153,19 @@ class WebInstaller extends Installer {
                return WebRequest::detectServer();
        }
 
+       /**
+        * Output stylesheet for web installer pages
+        */
+       public function outputCss() {
+               $this->request->response()->header( 'Content-type: text/css' );
+               echo $this->output->getCSS();
+       }
+
+       /**
+        * @return string[]
+        */
+       public function getPhpErrors() {
+               return $this->phpErrors;
+       }
+
 }
index c3fd51d..d81111b 100644 (file)
@@ -119,101 +119,53 @@ class WebInstallerOutput {
        }
 
        /**
-        * Get the raw vector CSS, flipping if needed
-        *
-        * @todo Possibly get rid of this function and use ResourceLoader in the manner it was
-        *   designed to be used in, rather than just grabbing a list of filenames from it,
-        *   and not properly handling such details as media types in module definitions.
-        *
-        * @param string $dir 'ltr' or 'rtl'
+        * Get the stylesheet of the MediaWiki skin.
         *
         * @return string
         */
-       public function getCSS( $dir ) {
-               // All CSS files these modules reference will be concatenated in sequence
-               // and loaded as one file.
+       public function getCSS() {
                $moduleNames = array(
+                       // See SkinTemplate::setupSkinUserCss
                        'mediawiki.legacy.shared',
+                       // See Vector::setupSkinUserCss
                        'mediawiki.skinning.interface',
                        'skins.vector.styles',
+
                        'mediawiki.legacy.config',
                );
 
-               $prepend = '';
                $css = '';
 
                $resourceLoader = new ResourceLoader();
+               $rlContext = new ResourceLoaderContext( $resourceLoader, new FauxRequest( array(
+                               'debug' => 'true',
+                               'lang' => $this->getLanguageCode(),
+                               'only' => 'styles',
+                               'skin' => 'vector',
+               ) ) );
                foreach ( $moduleNames as $moduleName ) {
                        /** @var ResourceLoaderFileModule $module */
                        $module = $resourceLoader->getModule( $moduleName );
-                       $cssFileNames = $module->getAllStyleFiles();
-
-                       wfSuppressWarnings();
-                       foreach ( $cssFileNames as $cssFileName ) {
-                               if ( !file_exists( $cssFileName ) ) {
-                                       $prepend .= ResourceLoader::makeComment( "Unable to find $cssFileName." );
-                                       continue;
-                               }
-
-                               if ( !is_readable( $cssFileName ) ) {
-                                       $prepend .= ResourceLoader::makeComment( "Unable to read $cssFileName. " .
-                                               "Please check file permissions." );
-                                       continue;
-                               }
-
-                               try {
-
-                                       if ( preg_match( '/\.less$/', $cssFileName ) ) {
-                                               // Run the LESS compiler for *.less files (bug 55589)
-                                               $compiler = ResourceLoader::getLessCompiler();
-                                               $cssFileContents = $compiler->compileFile( $cssFileName );
-                                       } else {
-                                               // Regular CSS file
-                                               $cssFileContents = file_get_contents( $cssFileName );
-                                       }
-
-                                       if ( $cssFileContents ) {
-                                               // Rewrite URLs, though don't bother embedding images. While static image
-                                               // files may be cached, CSS returned by this function is definitely not.
-                                               $cssDirName = dirname( $cssFileName );
-                                               $css .= CSSMin::remap(
-                                                       /* source */ $cssFileContents,
-                                                       /* local */ $cssDirName,
-                                                       /* remote */ '..' . str_replace(
-                                                               array( $GLOBALS['IP'], DIRECTORY_SEPARATOR ),
-                                                               array( '', '/' ),
-                                                               $cssDirName
-                                                       ),
-                                                       /* embedData */ false
-                                               );
-                                       } else {
-                                               $prepend .= ResourceLoader::makeComment( "Unable to read $cssFileName." );
-                                       }
-                               } catch ( Exception $e ) {
-                                       $prepend .= ResourceLoader::formatException( $e );
-                               }
-
-                               $css .= "\n";
-                       }
-                       wfRestoreWarnings();
-               }
 
-               $css = $prepend . $css;
+                       // Based on: ResourceLoaderFileModule::getStyles (without the DB query)
+                       $styles = ResourceLoader::makeCombinedStyles( $module->readStyleFiles(
+                               $module->getStyleFiles( $rlContext ),
+                               $module->getFlip( $rlContext )
+                       ) );
 
-               if ( $dir == 'rtl' ) {
-                       $css = CSSJanus::transform( $css, true );
+                       $css .= implode( "\n", $styles );
                }
 
                return $css;
        }
 
        /**
-        * "<link>" to index.php?css=foobar for the "<head>"
+        * "<link>" to index.php?css=1 for the "<head>"
         *
         * @return string
         */
        private function getCssUrl() {
-               return Html::linkedStyle( $_SERVER['PHP_SELF'] . '?css=' . $this->getDir() );
+               return Html::linkedStyle( $_SERVER['PHP_SELF'] . '?css=1' );
        }
 
        public function useShortHeader( $use = true ) {
index ab98254..48aa2d6 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "Enzoreg"
+                       "Enzoreg",
+                       "Seb35"
                ]
        },
        "mainpagetext": "'''MediaWiki ṫ'instala be najaḫ.'''",
-       "mainpagedocfooter": "Ila bġiṫiw meĝlomaṫ ĥrin baċ ṫesṫeĝmlo had l-lojisyél siro ċofo [//meta.wikimedia.org/wiki/Aide:Contenu Gid dyal l-mosṫeĥdim]\n\n== L-bdaya mĝa MediaWiki ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista dyal l-paramétraṫ dyal l-konfigurasyon]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr FAQ fe MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista dyal l-modakaraṫ ĝla versyonaṫ jdad dyal MediaWiki]"
+       "mainpagedocfooter": "Ila bġiṫiw meĝlomaṫ ĥrin baċ ṫesṫeĝmlo had l-lojisyél siro ċofo [//meta.wikimedia.org/wiki/Help:Contents/fr Gid dyal l-mosṫeĥdim]\n\n== L-bdaya mĝa MediaWiki ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista dyal l-paramétraṫ dyal l-konfigurasyon]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr FAQ fe MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista dyal l-modakaraṫ ĝla versyonaṫ jdad dyal MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 7060f50..cca993a 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "Haqmar"
+                       "Haqmar",
+                       "Seb35"
                ]
        },
        "mainpagetext": "«MediaWiki» уңышлы рәүештә ҡоролдо.",
-       "mainpagedocfooter": "Был вики менән эшләү тураһында мәғлүмәтте [//meta.wikimedia.org/wiki/Ярҙам:Белешмә ошонда] табып була.\n\n== Файҙалы сығанаҡтар ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Көйләүҙәр исемлеге (инг.)];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki тураһында йыш бирелгән һорауҙар һәм яуаптар (инг.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-ның яңы версиялары тураһында хәбәрҙәр алып тороу]."
+       "mainpagedocfooter": "Был вики менән эшләү тураһында мәғлүмәтте [//meta.wikimedia.org/wiki/Help:Contents ошонда] табып була.\n\n== Файҙалы сығанаҡтар ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Көйләүҙәр исемлеге (инг.)];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki тураһында йыш бирелгән һорауҙар һәм яуаптар (инг.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-ның яңы версиялары тураһында хәбәрҙәр алып тороу].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index ce8f95c..1192e2c 100644 (file)
@@ -11,6 +11,7 @@
        "config-title": "মিডিয়াউইকি $1 ইন্সটলেশন",
        "config-information": "তথ্য",
        "config-localsettings-key": "হালনাগাদ কি",
+       "config-localsettings-badkey": "আপনি যেই চাবিটি দিয়েছেন তা সঠিক নয়।",
        "config-session-error": "সেশন শুরুতে ত্রুটি: $1",
        "config-your-language": "আপনার ভাষা:",
        "config-your-language-help": "ইন্সটল করা সময় ব্যবহারের জন্য ভাষা নির্বাচন করুন।",
@@ -32,6 +33,7 @@
        "config-page-copying": "অনুলেপন",
        "config-page-upgradedoc": "হালনাগাদকরণ",
        "config-page-existingwiki": "ইতিমধ্যেই থাকা উইকি",
+       "config-help-restart": "আপনি কী সকল সংরক্ষিত উপাত্ত পরিষ্কার করতে যা আপনি প্রবেস করিয়েছিলেন এবং ইন্সটালেসন ব্যবস্থা পুনরায় আরম্ভ করতে চান?",
        "config-restart": "হ্যাঁ, পুনরায় চালু করুন",
        "config-env-php": "পিএইচপি $1 ইন্সটল করা হয়েছে।",
        "config-apc": "[http://www.php.net/apc এপিসি] ইনস্টল হয়েছে",
@@ -45,6 +47,7 @@
        "config-db-charset": "ডেটাবেজের অক্ষর সেট",
        "config-db-port": "ডেটাবেজ পোর্ট:",
        "config-db-schema": "মিডিয়াউইকির স্কিমা",
+       "config-pg-test-error": "উপাত্তশালা $1-এর সাথে সংযোগ দেয়া সম্ভব হয়নি। কারন:$2",
        "config-sqlite-dir": "এসকিউলাইট ডেটা ডিরেক্টরি:",
        "config-oracle-def-ts": "পূর্বনির্ধারিত টেবিলস্পেস",
        "config-oracle-temp-ts": "সাময়কি টেবিলস্পেস:",
@@ -56,6 +59,7 @@
        "config-missing-db-name": "আপনাকে অবশ্যই \"ডেটাবেজ নাম\"-এর জন্য একটি মান প্রবেশ করাতে হবে",
        "config-missing-db-host": "আপনাকে অবশ্যই \"ডেটাবেজ হোস্ট\"-এর জন্য একটি মান প্রবেশ করাতে হবে",
        "config-missing-db-server-oracle": "আপনাকে অবশ্যই \"ডেটাবেজ টিএনএস\"-এর জন্য একটি মান প্রবেশ করাতে হবে",
+       "config-connection-error": "$1।\n\n\nদয়া করে প্রস্তাবকারী, ব্যবহারকারী নাম ও শব্দচাবি দেখুন এবং পুনরায় চেষ্টা করুন।",
        "config-mysql-engine": "সংরক্ষণ ইঞ্জিন:",
        "config-mysql-innodb": "ইনোডিবি",
        "config-mysql-myisam": "মাইআইএসএএম",
index de69e20..ca6b37d 100644 (file)
@@ -92,6 +92,7 @@
        "config-db-username": "Anv implijer an diaz roadennoù :",
        "config-db-password": "Ger-tremen an diaz roadennoù :",
        "config-db-password-empty": "Lakait ur ger-tremen evit kont nevez an diaz roadennoù : $1.\nHa pa vefe posupl da grouiñ kontoù hep ger-tremen, n'eo ket erbedet evit abegoù surentez.",
+       "config-db-username-empty": "Ret eo deoc'h ebarzhiñ un talvoud evit  \"{{int:config-db-username}}\".",
        "config-db-install-username": "Ebarzhit an anv implijer a vo implijet da gevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ.\nN'eo ket anv implijer ar gont MediaWiki, an anv implijer evit ho tiaz roadennoù eo.",
        "config-db-install-password": "Ebarzhit ar ger-tremen a vo implijet da gevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ.\nN'eo ket ar ger-tremen evit ar gont MediaWiki, ar ger-tremen evit ho tiaz roadennoù eo.",
        "config-db-install-help": "Merkañ anv an implijer hag ar ger-tremen a vo implijet evit kevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ.",
        "config-install-mainpage-failed": "Ne c'haller ket ensoc'hañ ar bajenn bennañ: $1",
        "config-download-localsettings": "Pellgargañ <code>LocalSettings.php</code>",
        "config-help": "skoazell",
+       "config-help-tooltip": "klikañ evit astenn",
        "config-nofile": "N'eus ket bet gallet kavout ar restr \"$1\". Daoust ha dilamet eo bet ?",
        "mainpagetext": "'''Meziant MediaWiki staliet.'''",
        "mainpagedocfooter": "Sellit ouzh [//meta.wikimedia.org/wiki/Help:Contents Sturlevr an implijerien] evit gouzout hiroc'h war an doare da implijout ar meziant wiki.\n\n== Kregiñ ganti ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Roll an arventennoù kefluniañ]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAG MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Roll ar c'haozeadennoù diwar-benn dasparzhoù MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Lec'hiañ MediaWiki en ho yezh"
index 5e80058..72b6f73 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Sasan700",
-                       "Умар"
+                       "Умар",
+                       "Seb35"
                ]
        },
        "config-desc": "MediaWiki инсталлятор",
@@ -82,5 +83,5 @@
        "config-help": "гӀо",
        "config-nofile": "Файл \"$1\" каро цаелира. И дӀаяьккхина ярий?",
        "mainpagetext": "'''Вики-белха гlирс «MediaWiki» кхочуш дика дlахlоттийна.'''",
-       "mainpagedocfooter": "Викийца болх бан хаамаш карор бу хlокху чохь [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 нисвохааман куьйгаллица].\n\n== Цхьаболу пайде гlирсаш ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Гlирс нисбан тарлушболу могlам];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Сих сиха лушдолу хаттарш а жоьпаш оцу MediaWiki];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Хаам бохьуьйту араяларца башхонца керла MediaWiki]."
+       "mainpagedocfooter": "Викийца болх бан хаамаш карор бу хӀокху чохь [//meta.wikimedia.org/wiki/Help:Contents нисвохааман куьйгаллица].\n\n== Цхьаболу пайде гӀирсаш ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings ГӀирс нисбан тарлушболу могӀам];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Сих сиха лушдолу хаттарш а жоьпаш оцу MediaWiki];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Хаам бохьуьйту араяларца башхонца керла MediaWiki].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 9cda6c2..38dbab1 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "Oxyzen"
+                       "Oxyzen",
+                       "Seb35"
                ]
        },
        "mainpagetext": "'''Madalag-on nga na-install ang MediaWiki.'''",
-       "mainpagedocfooter": "Kunsultahon ang [//meta.wikimedia.org/wiki/Help:Pagtuytoy sa Manug-usar] para sa impormasyon sa paggamit sang wiki nga \"software\".\n\n==Pag-umpisa==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista sang mga setting sang konpigurayon]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Mga perme napangkot sa MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista sang mga ginapadal-an sang sulat sang MediaWiki]"
+       "mainpagedocfooter": "Kunsultahon ang [//meta.wikimedia.org/wiki/Help:Contents sa Manug-usar] para sa impormasyon sa paggamit sang wiki nga \"software\".\n\n==Pag-umpisa==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista sang mga setting sang konpigurayon]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Mga perme napangkot sa MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista sang mga ginapadal-an sang sulat sang MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index f1cf32a..dbfef20 100644 (file)
@@ -55,7 +55,7 @@
        "config-env-php-toolow": "Je nainstalováno PHP $1.\nMediaWiki ale vyžaduje PHP $2 nebo vyšší.",
        "config-unicode-using-utf8": "Pro normalizaci Unicode se používá utf8_normalize.so Briona Vibbera.",
        "config-unicode-using-intl": "Pro normalizaci Unicode se používá [http://pecl.php.net/intl PECL rozšíření intl].",
-       "config-unicode-pure-php-warning": "'''Upozornění''': Není dostupné [http://pecl.php.net/intl PECL rozšíření intl] pro normalizaci Unicode, bude se využívat pomalá implementace v čistém PHP.\nPokud provozujete wiki s velkým provozem, měli byste si přečíst něco o [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizaci Unicode].",
+       "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].",
        "config-no-db": "Nepodařilo se nalézt vhodný databázový ovladač! Musíte do PHP nainstalovat databázový ovladač.\nJsou podporovány následující typy databází: $1.\n\nPokud jste si PHP přeložili sami, překonfigurujte ho se zapnutým databázovým klientem, například pomocí <code>./configure --with-mysql</code>.\nPokud jste PHP nainstalovali z balíčku Debian či Ubuntu, potřebujete nainstalovat také modul php5-mysql.",
        "config-outdated-sqlite": "'''Upozornění''': Máte SQLite $1, které je starší než minimálně vyžadovaná verze $2. SQLite nebude dostupné.",
@@ -87,8 +87,8 @@
        "config-no-cli-uri": "<strong>Upozornění</strong>: Nebylo uvedeno <code>--scriptpath</code>, používá se implicitní hodnota: <code>$1</code>.",
        "config-using-server": "Použito jméno serveru „<nowiki>$1</nowiki>“.",
        "config-using-uri": "Použito URL serveru „<nowiki>$1$2</nowiki>“.",
-       "config-uploads-not-safe": "'''Upozornění:''' Váš implicitní adresář pro načítání souborů <code>$1</code> umožňuje provádění libovolných skriptů.\nPřestože MediaWiki všechny načítané soubory kontroluje proti bezpečnostním hrozbám, je důrazně doporučeno [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security tuto bezpečnostní díru zacelit] před povolením načítání souborů.",
-       "config-no-cli-uploads-check": "'''Upozornění:''' Váš implicitní adresář pro načítané soubory (<code>$1</code>) se při instalaci z příkazového řádku nekontroluje na bezpečnostní hrozbu provádění libovolných skriptů.",
+       "config-uploads-not-safe": "'''Upozornění:''' Váš výchozí adresář pro načítání souborů <code>$1</code> umožňuje spouštění libovolných skriptů.\nPřestože MediaWiki všechny načítané soubory kontroluje proti bezpečnostním hrozbám, je důrazně doporučeno [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security tuto bezpečnostní díru zacelit] před povolením načítání souborů.",
+       "config-no-cli-uploads-check": "'''Upozornění:''' Váš výchozí adresář pro načítané soubory (<code>$1</code>) se při instalaci z příkazového řádku nekontroluje na bezpečnostní hrozbu provádění libovolných skriptů.",
        "config-brokenlibxml": "Váš systém obsahuje kombinaci verzí PHP a libxml2, která je chybná a může v MediaWiki a dalších webových aplikacích způsobovat skryté poškozování dat.\nAktualizujte na libxml2 2.7.3 nebo novější ([https://bugs.php.net/bug.php?id=45996 chyba evidovaná u PHP]).\nInstalace přerušena.",
        "config-suhosin-max-value-length": "Je nainstalován Suhosin, který omezuje délku parametrů GET na $1 bajtů.\nKomponenta ResourceLoader z MediaWiki dokáže s tímto omezením pracovat, ale sníží to výkon.\nPokud to je alespoň trochu možné, měli byste v <code>php.ini</code> nastavit <code>suhosin.get.max_value_length</code> na 1024 nebo vyšší a na stejnou hodnotu nastavit v <code>LocalSettings.php</code> proměnnou <code>$wgResourceLoaderMaxQueryLength</code>.",
        "config-db-type": "Typ databáze:",
        "config-type-mysql": "MySQL (nebo kompatibilní)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Věštba",
+       "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki podporuje následující databázové systémy:\n\n$1\n\nPokud v nabídce níže nevidíte databázový systém, který chcete použít, musíte pro zapnutí podpory následovat instrukce odkázané výše.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] je pro MediaWiki hlavní platformou a je podporováno nejlépe. MediaWiki pracuje také s [{{int:version-db-mariadb-url}} MariaDB] a [{{int:version-db-percona-url}} Percona Server], které jsou s MySQL kompatibilní. ([http://www.php.net/manual/en/mysql.installation.php Jak zkompilovat PHP s podporou MySQL])",
index cddad9f..adf128e 100644 (file)
@@ -1,5 +1,9 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "Seb35"
+               ]
+       },
        "mainpagetext": "'''«MediaWiki» вики-движока лартасси ăнăçлă вĕçленчĕ.'''",
-       "mainpagedocfooter": "Ку википе ĕçлеме пулăшакан информацине [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 усăç руководствинче] тупма пултаратăр.\n\n== Пулăшма пултарĕç ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Ĕнерлевсен списокĕ];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki тăрăх час-часах ыйтакан ыйтусемпе хуравсем];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki çĕнĕ верси тухнине пĕлтерекен рассылка]."
+       "mainpagedocfooter": "Ку википе ĕçлеме пулăшакан информацине [//meta.wikimedia.org/wiki/Help:Contents/ru усăç руководствинче] тупма пултаратăр.\n\n== Пулăшма пултарĕç ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Ĕнерлевсен списокĕ];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki тăрăх час-часах ыйтакан ыйтусемпе хуравсем];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki çĕнĕ верси тухнине пĕлтерекен рассылка].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 94fc5e4..325ee98 100644 (file)
@@ -10,7 +10,9 @@
        "config-desc": "Το πρόγραμμα εγκατάστασης για το MediaWiki",
        "config-title": "Εγκατάσταση MediaWiki $1",
        "config-information": "Πληροφορίες",
+       "config-localsettings-key": "Κλειδί αναβάθμισης:",
        "config-localsettings-badkey": "Το κλειδί που δώσατε είναι εσφαλμένο.",
+       "config-upgrade-key-missing": "Έχει εντοπιστεί μια υπάρχουσα εγκατάσταση του MediaWiki.\nΓια να αναβαθμίσετε αυτήν την εγκατάσταση, παρακαλούμε να βάλετε την ακόλουθη γραμμή στο κάτω μέρος του <code>LocalSettings.php</code> σας:\n\n$1",
        "config-your-language": "Η γλώσσα σας:",
        "config-wiki-language": "Γλώσσα του wiki:",
        "config-back": "← Πίσω",
        "config-page-releasenotes": "Σημειώσεις έκδοσης",
        "config-page-copying": "Αντιγραφή",
        "config-page-upgradedoc": "Αναβάθμιση",
-       "config-page-existingwiki": "Υπάρχον βίκι",
-       "config-help-restart": "Θέλετε να καταργήσετε όλα τα αποθηκευμένα δεδομένα που έχετε εισάγει και να επανεκκινήσετε τη διαδικασία εγκατάστασης;",
+       "config-page-existingwiki": "Υπάρχον wiki",
+       "config-help-restart": "Î\98έλεÏ\84ε Î½Î± ÎºÎ±Ï\84αÏ\81γήÏ\83εÏ\84ε Ï\8cλα Ï\84α Î±Ï\80οθηκεÏ\85μένα Î´ÎµÎ´Î¿Î¼Î­Î½Î± Ï\80οÏ\85 Î­Ï\87εÏ\84ε ÎµÎ¹Ï\83αγάγει ÎºÎ±Î¹ Î½Î± ÎµÏ\80ανεκκινήÏ\83εÏ\84ε Ï\84η Î´Î¹Î±Î´Î¹ÎºÎ±Ï\83ία ÎµÎ³ÎºÎ±Ï\84άÏ\83Ï\84αÏ\83ηÏ\82;",
        "config-restart": "Ναι, κάντε επανεκκίνηση",
        "config-env-good": "Το περιβάλλον έχει ελεγχθεί.\nΜπορείτε να εγκαταστήσετε το MediaWiki.",
        "config-env-bad": "Το περιβάλλον έχει ελεγχθεί.\nΔεν μπορείτε να εγκαταστήσετε το MediaWiki.",
        "config-env-php": "H PHP $1 είναι εγκατεστημένη.",
-       "config-env-php-toolow": "PHP  $1 εγκαταστάθηκε.\nΩστόσο, το MediaWiki απαιτεί PHP  $2  ή μεταγενέστερη έκδοση.",
+       "config-env-php-toolow": "Η PHP $1 είναι εγκατεστημένη.\nΩστόσο, το MediaWiki απαιτεί την PHP $2 ή μεταγενέστερη έκδοση.",
+       "config-apc": "Το [http://www.php.net/apc APC] είναι εγκατεστημένο",
+       "config-diff3-bad": "Το GNU diff3 δεν βρέθηκε.",
        "config-db-type": "Τύπος βάσης δεδομένων:",
        "config-db-host": "Φιλοξενία βάσης δεδομένων:",
-       "config-db-wiki-settings": "Αναγνώριση αυτού του βίκι",
+       "config-db-host-oracle": "Βάση δεδομένων TNS:",
+       "config-db-wiki-settings": "Αναγνώριση αυτού του wiki",
        "config-db-name": "Όνομα βάσης δεδομένων:",
        "config-db-install-account": "Λογαριασμός χρήστη για την εγκατάσταση",
        "config-db-username": "Όνομα χρήστη βάσης δεδομένων:",
        "config-db-password": "Κωδικός πρόσβασης βάσης δεδομένων:",
+       "config-db-wiki-account": "Λογαριασμός χρήστη για κανονική λειτουργία",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 δυαδικό",
+       "config-db-port": "Θύρα βάσης δεδομένων:",
        "config-header-mysql": "Ρυθμίσεις MySQL",
        "config-header-postgres": "Ρυθμίσεις PostgreSQL",
        "config-header-sqlite": "Ρυθμίσεις SQLite",
        "config-header-oracle": "Ρυθμίσεις Oracle",
+       "config-header-mssql": "Ρυθμίσεις του Microsoft SQL Server",
        "config-invalid-db-type": "Μη έγκυρος τύπος βάσης δεδομένων",
+       "config-missing-db-name": "Πρέπει να εισαγάγετε μια τιμή για \"{{int:config-db-name}}\".",
+       "config-missing-db-host": "Πρέπει να εισαγάγετε μια τιμή για \"{{int:config-db-host}}\".",
+       "config-missing-db-server-oracle": "Πρέπει να εισαγάγετε μια τιμή για \"{{int:config-db-host-oracle}}\".",
+       "config-connection-error": "$1.\n\nΕλέγξτε τη διεύθυνση, το όνομα χρήστη και τον κωδικό πρόσβασης και προσπαθήστε ξανά.",
+       "config-sqlite-readonly": "Το αρχείο <code>$1</code> δεν είναι εγγράψιμο.",
+       "config-regenerate": "Αναδημιουργία LocalSettings.php →",
+       "config-mysql-engine": "Μηχανή αποθήκευσης:",
        "config-mysql-utf8": "UTF-8",
-       "config-site-name": "Όνομα του βίκι:",
+       "config-mssql-auth": "Τύπος ελέγχου ταυτότητας:",
+       "config-mssql-windowsauth": "Έλεγχος ταυτότητας των Windows",
+       "config-site-name": "Όνομα του wiki:",
+       "config-site-name-help": "Αυτό θα εμφανίζεται στη γραμμή τίτλου του προγράμματος περιήγησης και σε διάφορα άλλα μέρη.",
        "config-site-name-blank": "Εισαγάγετε όνομα ιστοχώρου.",
        "config-project-namespace": "Ονοματοχώρος εγχειρήματος:",
        "config-ns-generic": "Εγχείρημα",
        "config-admin-name": "Το όνομα χρήστη σας:",
        "config-admin-password": "Κωδικός πρόσβασης:",
        "config-admin-password-confirm": "Επανάληψη κωδικού πρόσβασης:",
+       "config-admin-password-mismatch": "Οι δύο κωδικοί πρόσβασης που εισηγάγατε δεν ταιριάζουν.",
        "config-admin-email": "Διεύθυνση ηλεκτρονικού ταχυδρομείου:",
+       "config-admin-error-bademail": "Έχετε εισαγάγει μη έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου.",
        "config-optional-continue": "Να ερωτηθώ περισσότερες ερωτήσεις.",
-       "config-profile-wiki": "Παραδοσιακό wiki",
+       "config-optional-skip": "Βαρέθηκα ήδη, απλά εγκαταστήστε το wiki.",
+       "config-profile": "Προφίλ δικαιωμάτων χρήστη:",
+       "config-profile-wiki": "Ανοικτό wiki",
        "config-profile-no-anon": "Απαιτείται η δημιουργία λογαριασμού",
+       "config-profile-fishbowl": "Εξουσιοδοτημένοι συντάκτες μόνο",
        "config-profile-private": "Ιδιωτικό wiki",
+       "config-license-cc-choose": "Επιλέξτε μια προσαρμοσμένη άδεια Creative Commons",
        "config-email-settings": "Ρυθμίσεις ηλεκτρονικού ταχυδρομείου",
+       "config-email-usertalk": "Ενεργοποίηση ειδοποίησης σελίδας συζήτησης χρήστη",
+       "config-email-auth": "Ενεργοποίηση ταυτοποίησης μέσω ηλεκτρονικού ταχυδρομείου",
        "config-upload-settings": "Ανέβασμα εικόνων και άλλων αρχείων",
        "config-upload-enable": "Ενεργοποιήστε το ανέβασμα αρχείων",
        "config-logo": "Διεύθυνση URL λογότυπου:",
        "config-cc-again": "Επιλέξτε ξανά...",
+       "config-advanced-settings": "Προηγμένες ρυθμίσεις παραμέτρων",
        "config-extensions": "Επεκτάσεις",
        "config-install-step-done": "έγινε",
        "config-install-step-failed": "απέτυχε",
+       "config-install-user-alreadyexists": "Ο χρήστης \"$1\" υπάρχει ήδη",
+       "config-install-tables": "Γίνεται δημιουργία πινάκων",
+       "config-install-tables-failed": "<strong>Σφάλμα:</strong>Η δημιουργία πινάκων απέτυχε με το ακόλουθο μήνυμα λάθους: $1",
+       "config-install-interwiki": "Γίνεται συμπλήρωση του προεπιλεγμένου πίνακα interwiki",
+       "config-install-interwiki-list": "Αδυναμία ανάγνωσης του αρχείου <code>interwiki.list</code>.",
        "config-help": "βοήθεια",
-       "mainpagetext": "'''To λογισμικό MediaWiki εγκαταστάθηκε με επιτυχία.'''",
+       "mainpagetext": "<strong>To MediaWiki εγκαταστάθηκε με επιτυχία.</strong>",
        "mainpagedocfooter": "Περισσότερες πληροφορίες σχετικά με τη χρήση και με τη ρύθμιση παραμέτρων θα βρείτε στους συνδέσμους: [//meta.wikimedia.org/wiki/MediaWiki_localisation Οδηγίες για τροποποίηση του περιβάλλοντος εργασίας] και [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Εγχειρίδιο χρήστη]."
 }
index 434db4d..3e8c7e5 100644 (file)
@@ -1,8 +1,9 @@
 {
        "@metadata": {
                "authors": [
-                       "Dferg"
+                       "Dferg",
+                       "Seb35"
                ]
        },
-       "mainpagedocfooter": "Consulte usted la [//meta.wikimedia.org/wiki/Ayuda:Contenido Guía de usuario] para obtener información sobre el uso del software wiki.\n\n== Empezando ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/es FAQ de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]"
+       "mainpagedocfooter": "Consulte usted la [//meta.wikimedia.org/wiki/Help:Contents/es Guía de usuario] para obtener información sobre el uso del software wiki.\n\n== Empezando ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/es FAQ de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Regionalizar MediaWiki para su idioma]"
 }
index dde6274..b37a1b7 100644 (file)
                        "Chocolate con galleta",
                        "Csbotero",
                        "Sporeunai",
-                       "Ihojose"
+                       "Ihojose",
+                       "Seb35",
+                       "McDutchie",
+                       "Miguel2706"
                ]
        },
        "config-desc": "El instalador de MediaWiki",
@@ -96,7 +99,7 @@
        "config-gd": "Se ha encontrado una biblioteca de gráficos GD integrada.\nLa miniaturización de imágenes se habilitará si habilitas las subidas.",
        "config-no-scaling": "No se ha encontrado ninguma biblioteca GD o ImageMagik.\nSe inhabilitará la miniaturización de imágenes.",
        "config-no-uri": "'''Error:''' No se pudo determinar el URI actual.\nSe interrumpió la instalación.",
-       "config-no-cli-uri": "''' Advertencia ''': No se ha especificado ningún <code>--scriptpath</code>, por defecto se usará: <code>$1</code> .",
+       "config-no-cli-uri": "<strong>Aviso:</strong> No se especificó <code>--scriptpath</code>; se usa el valor predeterminado: <code>$1</code>.",
        "config-using-server": "Utilizando el nombre de servidor \"<nowiki>$1</nowiki>\".",
        "config-using-uri": "Utilizando la dirección URL del servidor \"<nowiki>$1$2</nowiki>\".",
        "config-uploads-not-safe": "'''Atención:''' Su directorio por defecto para las cargas, <code>$1</code>, es vulnerable a la ejecución de scripts arbitrarios.\nAunque MediaWiki comprueba todos los archivos cargados por si hubiese amenazas de seguridad, es altamente recomendable [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security cerrar esta vulnerabilidad de seguridad] antes de activar las cargas.",
        "config-mysql-utf8": "UTF-8",
        "config-mysql-charset-help": "En '''modo binario''', MediaWiki almacena texto UTF-8 para la base de datos en campos binarios.\nEsto es más eficiente que el modo UTF-8 de MySQL y le permite utilizar la gama completa de caracteres Unicode.\n\nEn '''modo UTF-8''', MySQL sabrá qué conjunto de caracteres emplean sus datos y puede presentarlos y convertirlos adecuadamente, pero no le permitirá almacenar caracteres por encima del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plano multilingüe básico].",
        "config-mssql-auth": "Tipo de autentificación:",
-       "config-mssql-install-auth": "Seleccione el tipo de autenticación que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nSi selecciona \"{{int:config-mssql-windowsauth}}\", las credenciales del usuario que sea cual sea el servidor Web se ejecuta como será utilizado.",
+       "config-mssql-install-auth": "Seleccione el tipo de autenticación que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nSi selecciona \"{{int:config-mssql-windowsauth}}\", las credenciales de cualquier usuario de el servidor web que se está ejecutando van a ser utilizadas.",
        "config-mssql-web-auth": "Seleccione el tipo de autenticación que utilizará el servidor web para conectarse al servidor de base de datos, durante el funcionamiento normal de la wiki.\nSi selecciona \"{{int:config-mssql-windowsauth}}\", las credenciales del usuario que sea cual sea el servidor Web se ejecuta como será utilizado.",
        "config-mssql-sqlauth": "Autenticación de SQL Server",
        "config-mssql-windowsauth": "Autentificación de Windows",
        "config-nofile": "El archivo \"$1\" no se pudo encontrar. ¿Se ha eliminado?",
        "config-extension-link": "¿Sabías que tu wiki admite [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nPuedes navegar por las [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category categorías] o visitar el [//www.mediawiki.org/wiki/Extension_Matrix centro de extensiones] para ver una lista completa.",
        "mainpagetext": "'''MediaWiki ha sido instalado con éxito.'''",
-       "mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Ayuda:Guía del usuario de contenidos] para obtener información sobre el uso del software wiki.\n\n== Empezando ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/es FAQ de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Regionalizar MediaWiki para tu idioma]"
+       "mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Help:Contents/es Guía del usuario] para obtener información sobre el uso del software wiki.\n\n== Empezando ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Manual:FAQ/es FAQ de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Regionalizar MediaWiki para tu idioma]"
 }
index 11ab0ae..d9ef1ef 100644 (file)
@@ -20,7 +20,8 @@
                        "아라",
                        "Maxim21",
                        "Wladek92",
-                       "Scoopfinder"
+                       "Scoopfinder",
+                       "Seb35"
                ]
        },
        "config-desc": "Le programme d’installation de MediaWiki",
        "config-nofile": "Le fichier « $1 » est introuvable. A-t-il été supprimé ?",
        "config-extension-link": "Saviez-vous que votre wiki supporte [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions des extensions] ?\n\nVous pouvez consulter les [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions par catégorie].",
        "mainpagetext": "<strong>MediaWiki a été installé avec succès.</strong>",
-       "mainpagedocfooter": "Consultez le [//meta.wikimedia.org/wiki/Aide:Contenu Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.\n\n== Pour démarrer ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr FAQ sur MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]"
+       "mainpagedocfooter": "Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.\n\n== Pour démarrer ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]"
 }
index 64900ab..1eb0d89 100644 (file)
@@ -1,5 +1,9 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "Seb35"
+               ]
+       },
        "mainpagetext": "'''MediaWiki-program goed ynstallearre.'''",
-       "mainpagedocfooter": "Rieplachtsje de [//meta.wikimedia.org/wiki/Help:Ynhâldsopjefte hantlieding] foar ynformaasje oer it gebrûk fan 'e wikisoftware.\n\n== Mear help oer Mediawiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings List mei ynstellings]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Faak stelde fragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglist foar oankundigings fan nije ferzjes]"
+       "mainpagedocfooter": "Rieplachtsje de [//meta.wikimedia.org/wiki/Help:Contents Ynhâldsopjefte hantlieding] foar ynformaasje oer it gebrûk fan 'e wikisoftware.\n\n== Mear help oer Mediawiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings List mei ynstellings]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Faak stelde fragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglist foar oankundigings fan nije ferzjes]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index c18cb2e..6d5861b 100644 (file)
        "config-install-done": "'''Parabéns!'''\nInstalou correctamente MediaWiki.\n\nO programa de instalación xerou un ficheiro <code>LocalSettings.php</code>.\nEste ficheiro contén toda a súa configuración.\n\nTerá que descargalo e poñelo na base da instalación do seu wiki (no mesmo directorio ca index.php). A descarga debería comezar automaticamente.\n\nSe non comezou a descarga ou se a cancelou, pode facer que comece de novo premendo na ligazón que aparece a continuación:\n\n$3\n\n'''Nota:''' Se non fai iso agora, este ficheiro de configuración xerado non estará dispoñible máis adiante se sae da instalación sen descargalo.\n\nCando faga todo isto, xa poderá '''[$2 entrar no seu wiki]'''.",
        "config-download-localsettings": "Descargar o <code>LocalSettings.php</code>",
        "config-help": "axuda",
+       "config-help-tooltip": "prema para expandir",
        "config-nofile": "Non se puido atopar o ficheiro \"$1\". Se cadra, foi borrado.",
        "config-extension-link": "Sabía que o seu wiki soporta [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensións]?\n\nPode explorar as [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensións por categoría] ou a [//www.mediawiki.org/wiki/Extension_Matrix matriz de extensións] para ollar a lista completa de extensións.",
        "mainpagetext": "'''MediaWiki instalouse correctamente.'''",
index 149b4a4..f56f0ad 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "Boukman"
+                       "Boukman",
+                       "Seb35"
                ]
        },
        "mainpagetext": "'''MedyaWiki byen enstale l.'''",
-       "mainpagedocfooter": "Konsilte [//meta.wikimedia.org/wiki/Help:Konteni Gid Itilizatè] pou enfòmasyon sou kijan pou w itilize logisyèl wiki a.\n\n== Kijan pou kòmanse ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lis paramèt yo pou konfigirasyon]\n* [//www.mediawiki.org/wiki/Manyèl:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lis diskisyon ki parèt sou MediaWiki]"
+       "mainpagedocfooter": "Konsilte [//meta.wikimedia.org/wiki/Help:Contents Gid Itilizatè] pou enfòmasyon sou kijan pou w itilize logisyèl wiki a.\n\n== Kijan pou kòmanse ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lis paramèt yo pou konfigirasyon]\n* [//www.mediawiki.org/wiki/Manyèl:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lis diskisyon ki parèt sou MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 59c4e89..5c0e9db 100644 (file)
@@ -14,7 +14,7 @@
        "config-localsettings-badkey": "Le clave que tu forniva es incorrecte",
        "config-upgrade-key-missing": "Un installation existente de MediaWiki ha essite detegite.\nPro actualisar iste installation, es necessari adjunger le sequente linea al fin del file <code>LocalSettings.php</code>:\n\n$1",
        "config-localsettings-incomplete": "Le file <code>LocalSettings.php</code> existente pare esser incomplete.\nLe variabile $1 non es definite.\nPer favor cambia <code>LocalSettings.php</code> de sorta que iste variabile es definite, e clicca \"{{int:Config-continue}}\".",
-       "config-localsettings-connection-error": "Un error esseva incontrate durante le connexion al base de datos usante le configurationes specificate in <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Per favor repara iste configurationes e tenta lo de novo.\n\n$1",
+       "config-localsettings-connection-error": "Un error ha essite incontrate durante le connexion al base de datos usante le configuration specificate in <code>LocalSettings.php</code>. Per favor corrige iste configuration e reproba.\n\n$1",
        "config-session-error": "Error al comenciamento del session: $1",
        "config-session-expired": "Le datos de tu session pare haber expirate.\nLe sessiones es configurate pro un duration de $1.\nTu pote augmentar isto per definir <code>session.gc_maxlifetime</code> in php.ini.\nReinitia le processo de installation.",
        "config-no-session": "Le datos de tu session es perdite!\nVerifica tu php.ini e assecura te que un directorio appropriate es definite in <code>session.save_path</code>.",
        "config-db-username": "Nomine de usator del base de datos:",
        "config-db-password": "Contrasigno del base de datos:",
        "config-db-password-empty": "Per favor entra un contrasigno pro le nove usator del base de datos: $1.\nBen que il es possibile crear usatores sin contrasigno, isto non es secur.",
+       "config-db-username-empty": "Es necessari entrar un valor pro \"{{int:config-db-username}}\".",
        "config-db-install-username": "Entra le nomine de usator que essera usate pro connecter al base de datos durante le processo de installation. Isto non es le nomine de usator del conto MediaWiki; isto es le nomine de usator pro tu base de datos.",
        "config-db-install-password": "Entra le contrasigno que essera usate pro connecter al base de datos durante le processo de installation. Isto non es le contrasigno del conto MediaWiki; isto es le contrasigno pro tu base de datos.",
        "config-db-install-help": "Entra le nomine de usator e contrasigno que essera usate pro connecter al base de datos durante le processo de installation.",
        "config-header-oracle": "Configuration de Oracle",
        "config-header-mssql": "Configuration de Microsoft SQL Server",
        "config-invalid-db-type": "Typo de base de datos invalide",
-       "config-missing-db-name": "Tu debe entrar un valor pro \"Nomine de base de datos\"",
-       "config-missing-db-host": "Tu debe entrar un valor pro \"Host del base de datos\"",
-       "config-missing-db-server-oracle": "You must enter a value for \"TNS del base de datos\"",
+       "config-missing-db-name": "Es necessari entrar un valor pro \"{{int:config-db-name}}\".",
+       "config-missing-db-host": "Es necessari entrar un valor pro \"{{int:config-db-host}}\".",
+       "config-missing-db-server-oracle": "Es necessari entrar un valor pro \"{{int:config-db-host-oracle}}\".",
        "config-invalid-db-server-oracle": "TNS de base de datos \"$1\" invalide.\nUsa o \"TNS Name\" o un catena \"Easy Connect\". ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Methodos de nomenclatura de Oracle])",
        "config-invalid-db-name": "Nomine de base de datos \"$1\" invalide.\nUsa solmente litteras ASCII (a-z, A-Z), numeros (0-9), characteres de sublineamento (_) e tractos de union (-).",
        "config-invalid-db-prefix": "Prefixo de base de datos \"$1\" invalide.\nUsa solmente litteras ASCII (a-z, A-Z), numeros (0-9), characteres de sublineamento (_) e tractos de union (-).",
        "config-mysql-utf8": "UTF-8",
        "config-mysql-charset-help": "In '''modo binari''', MediaWiki immagazina le texto UTF-8 in le base de datos in campos binari.\nIsto es plus efficiente que le modo UTF-8 de MySQL, e permitte usar le rango complete de characteres Unicode.\n\nIn '''modo UTF-8''', MySQL cognoscera le codification de characteres usate pro tu dats, e pote presentar e converter lo appropriatemente, ma illo non permittera immagazinar characteres supra le [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Basic].",
        "config-mssql-auth": "Typo de authentication:",
-       "config-mssql-install-auth": "Selige le typo de authentication que essera usate pro connecter al base de datos durante le processo de installation.\nSi tu selige \"Authentication per Windows\", le credentiales del usator que executa le servitor web essera usate.",
-       "config-mssql-web-auth": "Selige le typo de authentication que le servitor web usara pro connecter al base de datos durante le operation ordinari del wiki.\nSi tu selige \"Authentication per Windows\", le credentiales del usator que executa le servitor web essera usate.",
+       "config-mssql-install-auth": "Selige le typo de authentication a usar pro connecter al base de datos durante le processo de installation.\nSi tu selige \"{{int:config-mssql-windowsauth}}\", le credentiales del usator que executa le servitor web essera usate.",
+       "config-mssql-web-auth": "Selige le typo de authentication que le servitor web usara pro connecter al base de datos durante le operation ordinari del wiki.\nSi tu selige \"{{int:config-mssql-windowsauth}}\", le credentiales del usator que executa le servitor web essera usate.",
        "config-mssql-sqlauth": "Authentication per SQL Server",
        "config-mssql-windowsauth": "Authentication per Windows",
        "config-site-name": "Nomine del wiki:",
        "config-install-done": "'''Felicitationes!'''\nTu ha installate MediaWiki con successo.\n\nLe installator ha generate un file <code>LocalSettings.php</code>.\nIste contine tote le configuration.\n\nEs necessari discargar lo e poner lo in le base del installation wiki (le mesme directorio que index.php).\nLe discargamento debe haber comenciate automaticamente.\n\nSi le discargamento non ha comenciate, o si illo esseva cancellate, es possibile recomenciar le discargamento con un clic sur le ligamine sequente:\n\n$3\n\n'''Nota''': Si tu non discarga iste file de configuration ora, illo non essera disponibile plus tarde.\n\nPost facer isto, tu pote '''[$2 entrar in tu wiki]'''.",
        "config-download-localsettings": "Discargar <code>LocalSettings.php</code>",
        "config-help": "adjuta",
+       "config-help-tooltip": "clicca pro displicar",
        "config-nofile": "Le file \"$1\" non poteva esser trovate. Ha illo essite delite?",
        "config-extension-link": "Sapeva tu que tu wiki supporta [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nTu pote explorar le [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensiones per category] o le [//www.mediawiki.org/wiki/Extension_Matrix matrice de extensiones] pro vider le lista complete de extensiones.",
        "mainpagetext": "'''MediaWiki ha essite installate con successo.'''",
index ee0773b..a37ed89 100644 (file)
@@ -6,7 +6,9 @@
                        "Kenrick95",
                        "Reedy",
                        "아라",
-                       "C5st4wr6ch"
+                       "C5st4wr6ch",
+                       "Seb35",
+                       "Arifin.wijaya"
                ]
        },
        "config-desc": "Penginstal untuk MediaWiki",
@@ -56,7 +58,7 @@
        "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.",
-       "config-no-db": "Pengandar basis data yang sesuai tidak ditemukan! Anda perlu menginstal pengandar basis data untuk PHP.\nJenis basis data yang didukung: $1.\n\nJika Anda menggunakan inang bersama, mintalah penyedia inang Anda untuk menginstal pengandar basis data yang sesuai.\nJika Anda mengompilasi sendiri PHP, ubahlah konfigurasinya dengan mengaktifkan klien basis data, misalnya menggunakan <code>./configure --with-mysql</code>.\nJika Anda menginstal PHP dari paket Debian atau Ubuntu, maka Anda juga perlu menginstal modul php5-mysql.",
+       "config-no-db": "Pengandar basis data yang sesuai tidak ditemukan! Anda perlu menginstal pengandar basis data untuk PHP.\nJenis basis data yang didukung: $1.\n\nJika Anda mengompilasi sendiri PHP, ubahlah konfigurasinya dengan mengaktifkan klien basis data, misalnya menggunakan <code>./configure --with-mysql</code>.\nJika Anda menginstal PHP dari paket Debian atau Ubuntu, maka Anda juga perlu menginstal modul php5-mysql.",
        "config-outdated-sqlite": "<strong>Peringatan:</strong> Anda menggunakan SQLite $1, yang lebih rendah dari versi minimum yang diperlukan $2. SQLite akan tidak tersedia.",
        "config-no-fts3": "'''Peringatan''': SQLite dikompilasi tanpa [//sqlite.org/fts3.html modul FTS3], fitur pencarian tidak akan tersedia pada konfigurasi ini.",
        "config-register-globals": "'''Peringatan: Opsi <code>[http://php.net/register_globals register_globals]</code> PHP diaktifkan.'''\n'''Nonaktifkan kalau bisa.'''\nMediaWiki akan bekerja, tetapi server Anda memiliki potensi kerentanan keamanan.",
        "config-mbstring": "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] aktif!'' '\nPilihan ini dapat menyebabkan kesalahan dan kerusakan data yang tidak terduga.\nAnda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.",
        "config-safe-mode": "''' Peringatan:''' [http://www.php.net/features.safe-mode Mode aman] PHP aktif.\nHal ini akan menyebabkan masalah, terutama jika menggunakan pengunggahan berkas dan dukungan <code>math</code>.",
        "config-xml-bad": "Modul XML PHP hilang.\nMediaWiki membutuhkan fungsi dalam modul ini dan tidak akan bekerja dalam konfigurasi ini.\nJika Anda menggunakan Mandrake, instal paket php-xml.",
+       "config-pcre-old": "<strong>Fatal:</strong> PCRE $1 atau kemudian diperlukan.\nBiner PHP Anda dihubungkan dengan PCRE $2. [https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Selengkapnya].",
        "config-pcre-no-utf8": "'''Fatal''': Modul PCRE PHP tampaknya dikompilasi tanpa dukungan PCRE_UTF8.\nMediaWiki memerlukan dukungan UTF-8 untuk berfungsi dengan benar.",
        "config-memory-raised": "<code>memory_limit</code> PHP adalah $1, dinaikkan ke $2.",
        "config-memory-bad": "'''Peringatan:''' <code>memory_limit</code> PHP adalah $1.\nIni terlalu rendah.\nInstalasi terancam gagal!",
+       "config-ctype": "<strong>Fatal:</strong> PHP harus disusun dengan dukungan untuk [http://www.php.net/manual/en/ctype.installation.php ekstensi Ctype].",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] telah diinstal",
        "config-apc": "[http://www.php.net/apc APC] telah diinstal",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] telah diinstal",
        "config-no-cache": "'''Peringatan:''' Tidak dapat menemukan [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache], atau [http://www.iis.net/download/WinCacheForPhp WinCache]. Pinggahan obyek tidak dinonaktifkan.",
        "config-mod-security": "<strong>Peringatan:</strong> Server web Anda memiliki [http://modsecurity.org/ mod_security] yang diaktifkan. Jika salah dalam mengkonfigurasi, ini dapat menyebabkan masalah untuk MediaWiki atau perangkat lunak lain yang memungkinkan pengguna untuk mengirim sembarang konten.\nLihat [http://modsecurity.org/documentation/ dokumentasi mod_security] atau hubungi layanan host Anda jika Anda mengalami kesalahan acak.",
        "config-diff3-bad": "GNU diff3 tidak ditemukan.",
+       "config-git": "Menemukan perangkat lunak kontrol versi Git: <code>$1</code>.",
+       "config-git-bad": "Perangkat lunak kontrol versi Git tidak ditemukan.",
        "config-imagemagick": "ImageMagick ditemukan: <code>$1</code> .\nPembuatan gambar mini akan diaktifkan jika Anda mengaktifkan pengunggahan.",
        "config-gd": "Pustaka grafis GD terpasang ditemukan.\nPembuatan gambar mini akan diaktifkan jika Anda mengaktifkan pengunggahan.",
        "config-no-scaling": "Pustaka GD atau ImageMagick tidak ditemukan.\nPembuatan gambar mini dinonaktifkan.",
        "config-no-uri": "'''Kesalahan:''' URI saat ini tidak dapat ditentukan.\nInstalasi dibatalkan.",
+       "config-no-cli-uri": "<strong>Peringatan:</strong> Tidak ada <code>--scriptpath</code> yang ditentukan, dengan menggunakan standar: <code>$1</code>.",
+       "config-using-server": "Menggunakan nama server \"<nowiki>$1</nowiki>\".",
+       "config-using-uri": "Menggunakan URL server \"<nowiki>$1$2</nowiki>\".",
        "config-uploads-not-safe": "'''Peringatan:''' Direktori bawaan pengunggahan <code>$1</code> Anda rentan terhadap eksekusi skrip yang sewenang-wenang.\nMeskipun MediaWiki memeriksa semua berkas unggahan untuk ancaman keamanan, sangat dianjurkan untuk [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security menutup kerentanan keamanan ini] sebelum mengaktifkan pengunggahan.",
        "config-brokenlibxml": "Sistem Anda memiliki kombinasi versi PHP dan libxml2 yang memiliki bug dan dapat menyebabkan kerusakan data tersembunyi pada MediaWiki dan aplikasi web lain.\nMutakhirkan ke PHP 5.2.9 atau yang lebih baru dan libxml2 2.7.3 atau yang lebih baru ([https://bugs.php.net/bug.php?id=45996 arsip bug di PHP]).\nInstalasi dibatalkan.",
        "config-suhosin-max-value-length": "Suhosin terpasang dan membatasi parameter GET <code>length</code> sebesar $1 bita. Komponen ResourceLoader MediaWiki akan berjalan dalam batasan ini, tetapi penanganannya akan menurunkan kinerja. Jika memungkinkan, Anda sebaiknya menetapkan nilai <code>suhosin.get.max_value_length</code> menjadi 1024 atau lebih tinggi dalam <code>php.ini</code> dan menyetel <code>$wgResourceLoaderMaxQueryLength</code> dengan nilai yang sama dalam <code>LocalSettings.php</code>.",
        "config-db-username": "Nama pengguna basis data:",
        "config-db-password": "Kata sandi basis data:",
        "config-db-password-empty": "Silakan masukkan sandi untuk pengguna basis data baru: $1.\nMeskipun dimungkinkan untuk membuat pengguna tanpa sandi, hal itu tidak aman.",
+       "config-db-username-empty": "Anda harus memasukkan nilai untuk \"{{int:config-db-username}}\".",
        "config-db-install-username": "Masukkan nama pengguna yang akan digunakan untuk terhubung ke basis data selama proses instalasi.\nIni bukan nama pengguna akun MediaWiki, melainkan nama pengguna untuk basis data Anda.",
        "config-db-install-password": "Masukkan sandi yang akan digunakan untuk terhubung ke basis data selama proses instalasi.\nIni bukan sandi untuk akun MediaWiki, melainkan sandi untuk basis data Anda.",
        "config-db-install-help": "Masukkan nama pengguna dan sandi yang akan digunakan untuk terhubung ke basis data pada saat proses instalasi.",
        "config-type-oracle": "Oracle",
        "config-support-info": "MediaWiki mendukung sistem basis data berikut:\n\n$1\n\nJika Anda tidak melihat sistem basis data yang Anda gunakan tercantum di bawah ini, ikuti petunjuk terkait di atas untuk mengaktifkan dukungan.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] adalah target utama MediaWiki dan memiliki dukungan terbaik. MediaWiki juga berjalan dengan [{{int:version-db-mariadb-url}} MariaDB] dan [{{int:version-db-percona-url}} Server Percona], yang kompatibel dengan MySQL. ([http://www.php.net/manual/en/mysql.installation.php Cara mengompilasi PHP dengan dukungan MySQL])",
-       "config-dbsupport-postgres": "* $1 adalah sistem basis data sumber terbuka populer sebagai alternatif untuk MySQL ([http://www.php.net/manual/en/pgsql.installation.php cara mengompilasi PHP dengan dukungan PostgreSQL]). Mungkin ada beberapa bug terbuka dan alternatif ini tidak direkomendasikan untuk dipakai dalam lingkungan produksi.",
-       "config-dbsupport-sqlite": "* $1 adalah sistem basis data yang ringan yang sangat baik dukungannya. ([http://www.php.net/manual/en/pdo.installation.php cara mengompilasi PHP dengan dukungan SQLite], menggunakan PDO)",
-       "config-dbsupport-oracle": "* $1 adalah basis data komersial untuka perusahaan. ([http://www.php.net/manual/en/oci8.installation.php cara mengompilasi PHP dengan dukungan OCI8])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] adalah sistem basis data sumber terbuka populer sebagai alternatif untuk MySQL. Mungkin ada beberapa bug terbuka dan alternatif ini tidak direkomendasikan untuk dipakai dalam lingkungan produksi. ([http://www.php.net/manual/en/pgsql.installation.php cara mengompilasi PHP dengan dukungan PostgreSQL])",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] adalah sistem basis data yang ringan yang sangat baik dukungannya. ([http://www.php.net/manual/en/pdo.installation.php cara mengompilasi PHP dengan dukungan SQLite], menggunakan PDO)",
+       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] adalah basis data komersial untuk perusahaan. ([http://www.php.net/manual/en/oci8.installation.php cara mengompilasi PHP dengan dukungan OCI8])",
+       "config-dbsupport-mssql": "[{{int:version-db-mssql-url}} Microsoft SQL Server] adalah database perusahaan komersial untuk Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Bagaimana cara mengkompilasi PHP dengan dukungan SQLSRV])",
        "config-header-mysql": "Pengaturan MySQL",
        "config-header-postgres": "Pengaturan PostgreSQL",
        "config-header-sqlite": "Pengaturan SQLite",
        "config-header-oracle": "Pengaturan Oracle",
        "config-header-mssql": "Setelan Microsoft SQL Server",
        "config-invalid-db-type": "Jenis basis data tidak sah",
-       "config-missing-db-name": "Anda harus memasukkan nilai untuk \"Nama basis data\"",
-       "config-missing-db-host": "Anda harus memasukkan nilai untuk \"Inang basis data\"",
-       "config-missing-db-server-oracle": "Anda harus memasukkan nilai untuk \"TNS basis data\"",
+       "config-missing-db-name": "Anda harus memasukkan nilai untuk \"{{int:config-db-name}}\"",
+       "config-missing-db-host": "Anda harus memasukkan nilai untuk \"{{int:config-db-host}}\"",
+       "config-missing-db-server-oracle": "Anda harus memasukkan nilai untuk \"{{int:config-db-host-oracle}}\"",
        "config-invalid-db-server-oracle": "TNS basis data \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan titik (.).",
        "config-invalid-db-name": "Nama basis data \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan tanda hubung (-).",
        "config-invalid-db-prefix": "Prefiks basis data \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan tanda hubung (-).",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
        "config-mysql-myisam-dep": "<strong>Peringatan:</strong> Anda telah memilih MyISAM sebagai mesin penyimpanan MySQL, yang tidak dianjurkan untuk digunakan dengan MediaWiki, karena:\n * nyaris tidak mendukung operasi bersamaan karena penguncian tabel\n * lebih rentan terhadap korupsi daripada mesin lain\n * basis kode MediaWiki tidak selalu menangani MyISAM sebagaimana mestinya\n\nJika instalasi MySQL Anda mendukung InnoDB, sangat disarankan bagi Anda memilih itu.\nJika instalasi MySQL tidak mendukung InnoDB, mungkin sudah waktunya untuk pemutakhiran.",
+       "config-mysql-only-myisam-dep": "<strong>Peringatan:</strong> MyISAM adalah satu-satunya mesin penyimpanan yang tersedia untuk MySQL pada mesin ini, dan hal ini tidak dianjurkan untuk digunakan dengan MediaWiki, karena:\n* hampir tidak mendukung konkurensi karena penguncian tabel\n* basis kode MediaWiki tidak selalu menangani MyISAM sebagaimana mestinya\n\nInstalasi MySQL Anda tidak mendukung InnoDB, mungkin sudah waktunya untuk peningkatan.",
        "config-mysql-engine-help": "'''InnoDB''' hampir selalu merupakan pilihan terbaik karena memiliki dukungan konkurensi yang baik.\n\n'''MyISAM''' mungkin lebih cepat dalam instalasi pengguna-tunggal atau hanya-baca.\nBasis data MyISAM cenderung lebih sering rusak daripada basis data InnoDB.",
        "config-mysql-charset": "Set karakter basis data:",
        "config-mysql-binary": "Biner",
        "config-mssql-auth": "Jenis otentikasi:",
        "config-mssql-install-auth": "Pilih jenis otentikasi yang akan digunakan untuk menyambung ke database selama proses instalasi.\nJika Anda memilih \"{{int:config-mssql-windowsauth}}\", kredensial dari pengguna apapun pada server web yang berjalan akan digunakan.",
        "config-mssql-web-auth": "Pilih jenis otentikasi yang akan digunakan oleh server web untuk menyambung ke server basis data, selama operasi biasa dari wiki.\nJika Anda memilih \"{{int:config-mssql-windowsauth}}\", kredensial dari pengguna apapun pada server web yang berjalan akan digunakan.",
+       "config-mssql-sqlauth": "Otentikasi Server SQL",
        "config-mssql-windowsauth": "Otentikasi Windows",
        "config-site-name": "Nama wiki:",
        "config-site-name-help": "Ini akan muncul di bilah judul peramban dan di berbagai tempat lainnya.",
        "config-install-pg-plpgsql": "Memeriksa bahasa PL / pgSQL",
        "config-pg-no-plpgsql": "Anda perlu menginstal bahasa PL/pgSQL pada basis data $1",
        "config-pg-no-create-privs": "Akun yang Anda tetapkan untuk instalasi tidak memiliki hak yang cukup untuk membuat akun.",
+       "config-pg-not-in-role": "Akun yang ditentukan untuk pengguna web sudah ada.\nAkun yang ditentukan untuk instalasi tidak superuser dan bukan anggota dari peran pengguna Web, sehingga tidak dapat membuat objek yang dimiliki oleh pengguna web.\n\nMediaWiki saat ini membutuhkan bahwa tabel dimiliki oleh pengguna web. Silakan tentukan nama account web lain, atau klik \"back\" dan tentukan pengguna yang terinstal sesuai istimewa.",
        "config-install-user": "Membuat pengguna basis data",
        "config-install-user-alreadyexists": "Pengguna \"$1\" sudah ada",
        "config-install-user-create-failed": "Pembuatan pengguna \"$1\" gagal: $2",
        "config-install-user-grant-failed": "Memberikan izin untuk pengguna \"$1\" gagal: $2",
        "config-install-user-missing": "Pengguna \"$1\" yang dimaksud tidak ditemukan.",
+       "config-install-user-missing-create": "Akun yang ditentukan \"$1\" tidak ada.\nSilahkan klik kotak centang \"Buat akun\" di bawah ini jika Anda ingin membuatnya.",
        "config-install-tables": "Membuat tabel",
        "config-install-tables-exist": "'''Peringatan''': Tabel MediaWiki sepertinya sudah ada.\nMelompati pembuatan.",
        "config-install-tables-failed": "'''Kesalahan''': Pembuatan tabel gagal dengan kesalahan berikut: $1",
        "config-install-done": "'''Selamat!'''\nAnda telah berhasil menginstal MediaWiki.\n\nPenginstal telah membuat berkas <code>LocalSettings.php</code>.\nBerkas itu berisi semua konfigurasi Anda.\n\nAnda perlu mengunduh berkas itu dan meletakkannya di direktori instalasi wiki (direktori yang sama dengan index.php). Pengunduhan akan dimulai secara otomatis.\n\nJika pengunduhan tidak terjadi, atau jika Anda membatalkannya, Anda dapat mengulangi pengunduhan dengan mengeklik tautan berikut:\n\n$3\n\n'''Catatan''': Jika Anda tidak melakukannya sekarang, berkas konfigurasi yang dihasilkan ini tidak akan tersedia lagi setelah Anda keluar dari proses instalasi tanpa mengunduhnya.\n\nSetelah melakukannya, Anda dapat '''[$2 memasuki wiki Anda]'''.",
        "config-download-localsettings": "Unduh <code>LocalSettings.php</code>",
        "config-help": "bantuan",
+       "config-help-tooltip": "klik untuk memperluas",
        "config-nofile": "Berkas \"$1\" tidak dapat ditemukan. Mungkin sudah dihapus?",
+       "config-extension-link": "Tahukah Anda bahwa wiki Anda mendukung [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions ekstensi]?\n\nAnda dapat menjelajahi [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category ekstensi menurut kategori] atau [//www.mediawiki.org/wiki/Extension_Matrix Ekstensi Matriks] untuk melihat daftar lengkap ekstensi.",
        "mainpagetext": "'''MediaWiki telah terpasang dengan sukses'''.",
-       "mainpagedocfooter": "Silakan baca [//www.mediawiki.org/wiki/Help:Contents/id Panduan Pengguna] untuk cara penggunaan perangkat lunak wiki ini.\n\n== Memulai penggunaan ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/id Daftar pengaturan konfigurasi]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/id Daftar pertanyaan yang sering diajukan mengenai MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Terjemahkan MediaWiki ke bahasa Anda]"
+       "mainpagedocfooter": "Silakan baca [//www.mediawiki.org/wiki/Help:Contents Panduan Pengguna] untuk cara penggunaan perangkat lunak wiki ini.\n\n== Memulai penggunaan ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/id Daftar pengaturan konfigurasi]\n* [//www.mediawiki.org/wiki/Manual:FAQ/id Daftar pertanyaan yang sering diajukan mengenai MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Terjemahkan MediaWiki ke bahasa Anda]"
 }
index d72d2cb..e0b9c11 100644 (file)
@@ -8,7 +8,9 @@
                        "Karika",
                        "아라",
                        "Lucas2",
-                       "Ontsed"
+                       "Ontsed",
+                       "Seb35",
+                       "Nemo bis"
                ]
        },
        "config-desc": "Il programma di installazione per MediaWiki",
        "config-db-schema-help": "Questo schema in genere andrà bene.\nDa cambiare solamente se si è sicuri di averne bisogno.",
        "config-pg-test-error": "Impossibile connettersi al database '''$1''': $2",
        "config-sqlite-dir": "Directory data di SQLite:",
-       "config-sqlite-dir-help": "SQLite memorizza tutti i dati in un unico file.\n\nLa directory che indicherai deve essere scrivibile dal server web durante l'installazione.\n\nDovrebbe essere <strong>non accessibile via web</strong>, è per questo che non la stiamo mettendo dove ci sono i file PHP.\n\nL'installatore scriverà insieme ad essa un file <code>.htaccess</code>, ma se il tentativo fallisse qualcuno potrebbe avere accesso al database grezzo.\nQuesto include dati utente grezzi (indirizzi, password cifrate) così come revisioni eliminate e altri dati ad accesso limitato del wiki.\n\nConsidera l'opportunità di sistemare allo stesso tempo il database da qualche altra parte, per esempio in <code>/var/lib/mediawiki/tuowiki</code>.",
+       "config-sqlite-dir-help": "SQLite memorizza tutti i dati in un unico file.\n\nLa directory che indicherai deve essere scrivibile dal server web durante l'installazione.\n\nDovrebbe essere <strong>non accessibile via web</strong>, è per questo che non la stiamo mettendo dove ci sono i file PHP.\n\nL'installatore scriverà insieme ad essa un file <code>.htaccess</code>, ma se il tentativo fallisse qualcuno potrebbe avere accesso al database grezzo.\nQuesto include dati utente grezzi (indirizzi, password cifrate) così come versioni eliminate e altri dati ad accesso limitato del wiki.\n\nConsidera l'opportunità di sistemare allo stesso tempo il database da qualche altra parte, per esempio in <code>/var/lib/mediawiki/tuowiki</code>.",
        "config-oracle-def-ts": "Tablespace di default:",
        "config-oracle-temp-ts": "Tablespace temporaneo:",
        "config-type-mysql": "MySQL (o compatibile)",
        "config-nofile": "Il file \"$1\" non può essere trovato. È stato eliminato?",
        "config-extension-link": "Sapevi che il tuo wiki supporta le  [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions estensioni]?\n\nPuoi navigare tra le [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category estensioni per categoria].",
        "mainpagetext": "'''Installazione di MediaWiki completata correttamente.'''",
-       "mainpagedocfooter": "Consultare la [//meta.wikimedia.org/wiki/Aiuto:Sommario Guida utente] per maggiori informazioni sull'uso di questo software wiki.\n\n== Per iniziare ==\nI seguenti collegamenti sono in lingua inglese:\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Impostazioni di configurazione]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Domande frequenti su MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annunci MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localizza MediaWiki nella tua lingua]"
+       "mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Special:MyLanguage/Help:Contents Guida utente] per maggiori informazioni sull'uso di questo software wiki.\n\n== Per iniziare ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Impostazioni di configurazione]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Domande frequenti su MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annunci MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localizza MediaWiki nella tua lingua]"
 }
index 08d4462..726b74d 100644 (file)
        "config-page-readme": "წამიკითხე",
        "config-page-copying": "ლიცენზია",
        "config-page-upgradedoc": "განახლება",
+       "config-page-existingwiki": "არსებული ვიკი",
        "config-restart": "დიახ, თავიდან დაიწყეთ",
        "config-sidebar": "* [//www.mediawiki.org მედიავიკის ვებ-გვერდი]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/ka მომხმარებლების დახმარება]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/ka ადმინისტრატორების დახმარება]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/ka FAQ]\n----\n* <doclink href=Readme>წამიკითხე</doclink>\n* <doclink href=ReleaseNotes>ინფორმაცია გამოშვებაზე</doclink>\n* <doclink href=Copying>ლიცენზია</doclink>\n* <doclink href=UpgradeDoc>განახლება</doclink>",
+       "config-xcache": "[http://xcache.lighttpd.net/ XCache] დაყენდა",
+       "config-apc": "[http://www.php.net/apc APC] დაყენდა",
+       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] დაყენდა",
+       "config-diff3-bad": "GNU diff3 ვერ მოიძებნა.",
        "config-db-type": "მონაცემთა ბაზის ტიპი:",
        "config-db-host-oracle": "მონაცემთა ბაზის TNS:",
        "config-db-name": "მონაცემთა ბაზის სახელი:",
@@ -38,6 +43,7 @@
        "config-header-sqlite": "SQLite-ის პარამეტრები",
        "config-header-oracle": "Oracle-ის პარამეტრები",
        "config-invalid-db-type": "არასწორი მონაცემთა ბაზის ტიპი",
+       "config-sqlite-readonly": "ფაილი <code>$1</code> ჩასაწერად მიუწვდომელია.",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
        "config-mysql-binary": "ორობითი",
        "config-admin-password": "პაროლი:",
        "config-admin-password-confirm": "პაროლი ხელმეორედ:",
        "config-admin-name-blank": "შეიყვანეთ ადმინისტრატორის მომხმარებლის სახელი.",
+       "config-admin-password-blank": "შეიყვანეთ ადმინისტრატორის ანგარიშის პაროლი.",
+       "config-admin-password-mismatch": "თქვენ მიერ შეყვანილი პაროლები ერთმანეთს არ ემთხვევა.",
        "config-admin-email": "ელ. ფოსტის მისამართი:",
+       "config-admin-error-bademail": "თქვენ მიერ შეყვანილი ელ.ფოსტა არასწორია.",
+       "config-subscribe": "გამოიწერეთ [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce მედიავიკის ახალი ვერსიის გამოსვლის სიახლეები].",
        "config-profile": "მომხმარებელთა უფლებების პროფილი:",
        "config-profile-wiki": "ღია ვიკი",
+       "config-profile-no-anon": "საჭიროა ანგარიშის შექმნა",
+       "config-profile-fishbowl": "მხოლოდ ავტორიზებული რედაქტორებისათვის",
        "config-profile-private": "დახურული ვიკი",
        "config-license": "საავტორო უფლები და ლიცენზია:",
        "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
        "config-upload-enable": "ფაილების ატვირთვის ჩართვა",
        "config-logo": "ლოგოს URL:",
        "config-cc-again": "აირჩიეთ კიდევ ერთხელ...",
+       "config-advanced-settings": "დამატებითი კონფიგურაცია",
        "config-extensions": "გაფართოებები",
        "config-install-step-done": "შესრულდა",
        "config-install-step-failed": "ვერ მოხერხდა",
+       "config-install-schema": "სქემის შექმნა",
        "config-install-tables": "ცხრილების შექმნა",
        "config-install-interwiki-list": "ვერ მოიძებნა ფაილი <code>interwiki.list</code>.",
        "config-download-localsettings": "<code>LocalSettings.php</code>-ის გადმოწერა",
        "config-help": "დახმარება",
+       "config-help-tooltip": "გასაშლელად დააწკაპუნეთ",
        "mainpagetext": "'''მედიავიკი წარმატებით ჩაიტვირთა.'''",
        "mainpagedocfooter": "ვიკი პროგრამის გამოყენების ინფორმაციისთვის იხილეთ [//meta.wikimedia.org/wiki/Help:Contents მომხმარებლის მეგზური].\n\n== დაწყება ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings კონფიგურაციის მაჩვენებლების სია]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce მედიავიკის გამოცემის დაგზავნის სია]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources მედიავიკის ლოკალიზება თქვენ ენაზე]"
 }
index c30ddd3..b08674f 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "Bogups"
+                       "Bogups",
+                       "Seb35"
                ]
        },
        "mainpagetext": "'''«MediaWiki» узыншу хэгъува.'''",
-       "mainpagedocfooter": "Мы виким и лэжьыгъэ хъыбархэр здэбгъуэтыфынур [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 дэӀэпыкъуэгъу тхылъым].\n\n\n== Къыщхьэпэгъуэ хъуфынухэр ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Зэгъэзэхуэгъуэ гуэрэхэм я тхылъ];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki-м упщӀэ нахъыбу ятхэмрэ я жэуапхэмрэ];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-м и версиэ щӀэуэ къэжахэм я къэӀохугъуэ]."
+       "mainpagedocfooter": "Мы виким и лэжьыгъэ хъыбархэр здэбгъуэтыфынур [//meta.wikimedia.org/wiki/Help:Contents/ru дэӀэпыкъуэгъу тхылъым].\n\n== Къыщхьэпэгъуэ хъуфынухэр ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Зэгъэзэхуэгъуэ гуэрэхэм я тхылъ];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki-м упщӀэ нахъыбу ятхэмрэ я жэуапхэмрэ];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-м и версиэ щӀэуэ къэжахэм я къэӀохугъуэ].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 02a7d6a..8318e9c 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Thearith",
                        "គីមស៊្រុន",
-                       "Sovichet"
+                       "Sovichet",
+                       "Seb35"
                ]
        },
        "config-desc": "កម្មវិធី​ដំឡើង​សម្រាប់ MediaWiki",
@@ -27,5 +28,5 @@
        "config-page-restart": "តំលើងឡើងវិញ",
        "config-help": "ជំនួយ",
        "mainpagetext": "'''មេឌាវិគីត្រូវបានដំឡើងសំរេចហើយ​។'''",
-       "mainpagedocfooter": "សូមពិនិត្យមើល [//meta.wikimedia.org/wiki/ជំនួយ​៖ ខ្លឹមសារ​ណែនាំ​ប្រើប្រាស់]សម្រាប់​ព័ត៌មាន​​បន្ថែមអំពី​ការប្រើប្រាស់សូហ្វវែរវិគី​។\n\n== ការចាប់ផ្ដើម ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings បញ្ជីការកំណត់នានា]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/km សំណួរញឹកញាប់​ក្នុងមេឌាវិគី]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce បញ្ជី​អ៊ីមែលផ្សព្វផ្សាយ​របស់​មេឌាវិគី]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources ការប្រែសម្រួលមេឌាវិគីសម្រាប់ភាសារបស់អ្នក]"
+       "mainpagedocfooter": "សូមពិនិត្យមើល [//meta.wikimedia.org/wiki/Help:Contents ខ្លឹមសារ​ណែនាំ​ប្រើប្រាស់]សម្រាប់​ព័ត៌មាន​​បន្ថែមអំពី​ការប្រើប្រាស់សូហ្វវែរវិគី​។\n\n== ការចាប់ផ្ដើម ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings បញ្ជីការកំណត់នានា]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/km សំណួរញឹកញាប់​ក្នុងមេឌាវិគី]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce បញ្ជី​អ៊ីមែលផ្សព្វផ្សាយ​របស់​មេឌាវិគី]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources ការប្រែសម្រួលមេឌាវិគីសម្រាប់ភាសារបស់អ្នក]"
 }
index 261f750..785b2b5 100644 (file)
        "config-mysql-charset-help": "Beim Schpeishere em <strong>binäre Fomaat</strong> deiht MediaWiki Täxt, dä em UTF-8 Fommaat kütt, en dä Daatebangk en binär kodeerte Daatefälder faßhallde.\nDat es flöcker un spaasaamer wi et UTF-8 Fommaat vum <i lang=\"en\">MySQL</i> un määd et müjjelesch, all un jeedes <i lang=\"en\">Unicode</i>-Zeische met faßzehallde.\n\nBeim Schpeishere em <strong>UTF-8 Fomaat<strong> deiht et <i lang=\"en\">MySQL</i> der Zeischesaz un de Kodeerung vun dä Daate känne, un kann se akeraat aanzeije un ömwandelle,\nallerdengs künne kein Zeische ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlääje Knubbel för vill Schprooche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeschpeischert wääde.",
        "config-mssql-auth": "De Zoot Aanmäldong:",
        "config-mssql-install-auth": "Söhk us, wi dat Aanmälde aan dä Daatebangk vor sesch jonn sull för de Enschtallazjuhn.\nWann De <em>{{int:Config-mssql-windowsauth}}</em> nemms, weed jenumme, met wat emmer dä Wäbßööver aam loufe es.",
-       "config-mssql-web-auth": "Söhk us, wi dat Aanmälde aan dä Daatebangk vor sesch jonn sull för de nommaale Ärbeid vum Wiki.\nWann De <em>{{int:Config-mssql-windowsauth}}</em> nemms, weed dat jenumme, wohmet dä Wäbßööver aam loufe es.",
+       "config-mssql-web-auth": "Söhk us, wi dat Aanmälde aan dä Daatebangk vör sesch jonn sull för de nommaale Ärbeid vum Wiki.\nWann De <em>{{int:Config-mssql-windowsauth}}</em> nemms, weed dat jenumme, wohmet dä Wäbßööver aam loufe es.",
        "config-mssql-sqlauth": "De Aanmäldong bemm <i lang=\"en\" xml:lang=\"en\">SQL</i>-ẞööver vun <i lang=\"en\" xml:lang=\"en\">Microsoft</i>",
        "config-mssql-windowsauth": "De Annmäldong bemm <i lang=\"en\" xml:lang=\"en\">Windows</i>",
        "config-site-name": "Däm Wiki singe Name:",
index 314f13f..d8708c4 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "Universal Life"
+                       "Universal Life",
+                       "Seb35"
                ]
        },
        "mainpagetext": "'''MedyaViki ya se kureó con reuxitá.'''",
-       "mainpagedocfooter": "Konsulta la [//meta.wikimedia.org/wiki/Ayudo:Contenido Guía de usador] para tomar enformasyones encima de como usar el lojikal viki.\n\n== En Empeçando ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings La lista de los arreglamientos de la konfiggurasyón]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/lad DDS de MedyaViki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce La lista de las letrales (e-mail) de MedyaViki]"
+       "mainpagedocfooter": "Konsulta la [//meta.wikimedia.org/wiki/Help:Contents/es Guía de usador] para tomar enformasyones encima de como usar el lojikal viki.\n\n== En Empeçando ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings La lista de los arreglamientos de la konfiggurasyón]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/lad DDS de MedyaViki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce La lista de las letrales (e-mail) de MedyaViki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 76d771d..ab9c0b8 100644 (file)
@@ -1,5 +1,9 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "Seb35"
+               ]
+       },
        "mainpagetext": "'''MediaWiki software succesvol geïnsjtalleerd.'''",
-       "mainpagedocfooter": "Raodpleeg de [//meta.wikimedia.org/wiki/NL_Help:Inhoudsopgave handjleiding] veur informatie euver 't gebroek van de wikisoftware.\n\n== Mieë hölp ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lies mit instellinge]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki VGV (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki mailinglies veur nuuj versies]"
+       "mainpagedocfooter": "Raodpleeg de [//meta.wikimedia.org/wiki/Help:Contents Inhoudsopgave handjleiding] veur informatie euver 't gebroek van de wikisoftware.\n\n== Mieë hölp ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lies mit instellinge]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki VGV (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki mailinglies veur nuuj versies]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 4e3e31c..eb66bbb 100644 (file)
@@ -22,6 +22,9 @@
        "config-page-restart": "Pārstartēt instalāciju",
        "config-page-readme": "Lasīt mani",
        "config-page-releasenotes": "Informācija par laidienu",
+       "config-page-copying": "Kopē",
+       "config-env-php": "PHP $1 ir uzstādīts.",
+       "config-diff3-bad": "GNU diff3 nav atrasts.",
        "config-db-charset": "Datubāzes rakstzīmju kopa",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 binārs",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
index 7243986..53324c6 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "Jagwar"
+                       "Jagwar",
+                       "Seb35"
                ]
        },
        "config-desc": "Fandaharana mametraka an'i MediaWiki",
@@ -60,5 +61,5 @@
        "config-install-keys": "Fanamboarana lakile miafina",
        "config-help": "fanoroana",
        "mainpagetext": "'''Tafajoro soa aman-tsara ny rindrankajy Wiki.'''",
-       "mainpagedocfooter": "Vangio ny [//meta.wikimedia.org/wiki/Aide:Contenu Fanoroana ho an'ny mpampiasa] ra te hitady fanoroana momba ny fampiasan'ity rindrankajy ity.\n\n== Hanomboka amin'ny MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lisitra ny paramètre de configuration]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr FAQ momba ny MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Resaka momba ny fizaràn'ny MediaWiki]"
+       "mainpagedocfooter": "Vangio ny [//meta.wikimedia.org/wiki/Help:Contents/fr Fanoroana ho an'ny mpampiasa] ra te hitady fanoroana momba ny fampiasan'ity rindrankajy ity.\n\n== Hanomboka amin'ny MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lisitra ny paramètre de configuration]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr FAQ momba ny MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Resaka momba ny fizaràn'ny MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 37e6914..9af4911 100644 (file)
@@ -2,9 +2,10 @@
        "@metadata": {
                "authors": [
                        "Iwan Novirion",
-                       "Luthfi94"
+                       "Luthfi94",
+                       "Seb35"
                ]
        },
        "mainpagetext": "'''MediaWiki alah tapasang jo sukses'''.",
-       "mainpagedocfooter": "Konsultasian [//meta.wikimedia.org/wiki/Help:Contents/min Panduan Panggunoan] untuak informasi caro panggunoan parangkaik lunak wiki.\n\n== Mamulai panggunoan ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/id Daftar pangaturan konfigurasi]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/id Daftar patanyoan nan acok diajukan manganai MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Palokalan MediaWiki untuak bahaso Sanak]"
+       "mainpagedocfooter": "Konsultasian [//meta.wikimedia.org/wiki/Help:Contents Panduan Panggunoan] untuak informasi caro panggunoan parangkaik lunak wiki.\n\n== Mamulai panggunoan ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/id Daftar pangaturan konfigurasi]\n* [//www.mediawiki.org/wiki/Manual:FAQ/id Daftar patanyoan nan acok diajukan manganai MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Palokalan MediaWiki untuak bahaso Sanak]"
 }
index 33817c2..26f1cc7 100644 (file)
        "config-license-cc-by": "Creative Commons Attribution",
        "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike",
        "config-license-cc-0": "Creative Commons Zero (Domain Awam)",
-       "config-license-gfdl": "Lesen Dokumentasi Bebas GNU 1.3 atau ke atas",
+       "config-license-gfdl": "Lesen Pendokumenan Bebas GNU 1.3 atau ke atas",
        "config-license-pd": "Domain Awam",
        "config-email-settings": "Tetapan e-mel",
        "config-install-step-done": "siap",
index 0439b13..c95e9df 100644 (file)
        "config-install-done": "<strong>Gratulrerer!</strong>\nDu har lykkes i å installere MediaWiki.\n\nInstallasjonsprogrammet har generert en <code>LocalSettings.php</code>-fil.\nDen inneholder alle dine konfigureringer.\n\nDu må laste den ned og legge den på hovedfolderen for din wiki-installasjon (der index.php ligger). Nedlastingen skulle ha startet automatisk.\n\nHvis ingen nedlasting ble tilbudt, eller du avbrøt den, kan du få den i gang ved å klikke på lenken under:\n\n$3\n\n<strong>OBS:</strong> Hvis du ikke gjør dette nå, vil den genererte konfigurasjonsfilen ikke være tilgjengelig for deg senere.\n\nNår dette er gjort, kan du <strong>[$2 gå inn i wikien]</strong>.",
        "config-download-localsettings": "Last ned <code>LocalSettings.php</code>",
        "config-help": "hjelp",
+       "config-help-tooltip": "klikk for å utvide",
        "config-nofile": "Filen \"$1\" ble ikke funnet. Kan den være blitt slettet?",
        "config-extension-link": "Visste du at wikien din kan brukes sammen med en mengde [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions utvidelser]?\n\nDu kan sjekke gjennom [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category utvidelser per kategori] eller [//www.mediawiki.org/wiki/Extension_Matrix utvidelsesmatrisen] for å se den komplette listen av utvidelser.",
        "mainpagetext": "'''MediaWiki-programvaren er nå installert.'''",
index 998389b..b2d4a04 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Bhawani Gautam",
                        "RajeshPandey",
-                       "सरोज कुमार ढकाल"
+                       "सरोज कुमार ढकाल",
+                       "Ganesh Paudel"
                ]
        },
        "config-page-name": "नाम",
@@ -13,6 +14,7 @@
        "config-page-restart": "स्थापना फेरि सुरु गर्ने",
        "config-page-readme": "पढ्नुहोस्",
        "config-page-releasenotes": "प्रकाशन टिप्पणी",
+       "config-help-tooltip": "विस्तार गर्न क्लीक गर्नुहोस्",
        "mainpagetext": "'''मीडिया सफलतापूर्वक कम्प्यूटरमा स्थापित भयो ।'''",
        "mainpagedocfooter": " विकी अनुप्रयोग कसरी प्रयोग गर्ने भन्ने जानकारीको लागि  [//meta.wikimedia.org/wiki/Help:Contents प्रयोगकर्ता सहायता] हेर्नुहोस्\n\n== सुरू गर्नको लागि  ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings विन्यास सेटिङ्ग सूची]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ मेडियाविकि सामान्य प्रश्नका उत्तरहरु]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce मेडियाविकि सुचना मेलिङ्ग सूची]"
 }
index aee04ce..e2bef3f 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "Siebrand"
+                       "Siebrand",
+                       "Seb35"
                ]
        },
        "config-localsettings-badkey": "De sleutel die je hebt opgegeven is onjuist",
@@ -74,5 +75,5 @@
        "config-pg-not-in-role": "De gebruiker die je hebt opgegeven voor de webgebruiker bestaat al.\nDe gebruiker die je hebt opgegeven voor installatie is geen superuser en geen lid van de rol van de webgebruiker, en kan het dus geen objecten aanmaken die van de webgebruiker zijn.\n\nMediaWiki vereist momenteel dat de tabellen van de webgebruiker zijn. Geef een andere webgebruikersnaam op, of klik op \"terug\" en geef een gebruiker op die voldoende installatierechten heeft.",
        "config-install-user-missing-create": "De opgegeven gebruiker \"$1\" bestaat niet.\nKlik op \"registreren\" onderaan als je de gebruiker wilt aanmaken.",
        "config-install-done": "'''Gefeliciteerd!'''\nJe hebt MediaWiki met geïnstalleerd.\n\nHet installatieprogramma heeft het bestand <code>LocalSettings.php</code> aangemaakt.\nDit bevat al je instellingen.\n\nJe moet het bestand downloaden en in de hoofdmap van uw wikiinstallatie plaatsten; in dezelfde map als index.php.\nDe download moet je automatisch zijn aangeboden.\n\nAls de download niet is aangeboden of als je de download hebt geannuleerd, dan kan je de download opnieuw starten door op de onderstaande koppeling te klikken:\n\n$3\n\n'''Let op''': als je dit niet nu doet, dan het is bestand als u later de installatieprocedure afsluit zonder het bestand te downloaden niet meer beschikbaar.\n\nNa het plaatsen van het bestand met instellingen kan je '''[$2 je wiki betreden]'''.",
-       "mainpagedocfooter": "Raadpleeg de [//meta.wikimedia.org/wiki/NL_Help:Inhoudsopgave handleiding] voor informatie over het gebruik van de wikisoftware.\n\n== Meer hulp over MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lijst met instellingen]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde vragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Maak MediaWiki beschikbaar in jouw taal]"
+       "mainpagedocfooter": "Raadpleeg de [//meta.wikimedia.org/wiki/Help:Contents Inhoudsopgave handleiding] voor informatie over het gebruik van de wikisoftware.\n\n== Meer hulp over MediaWiki ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lijst met instellingen]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde vragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Maak MediaWiki beschikbaar in jouw taal]"
 }
index 6fcb284..dda3d41 100644 (file)
@@ -10,7 +10,9 @@
                        "아라",
                        "Arent",
                        "JurgenNL",
-                       "Southparkfan"
+                       "Southparkfan",
+                       "Seb35",
+                       "Mar(c)"
                ]
        },
        "config-desc": "Het installatieprogramma voor MediaWiki",
        "config-install-done": "'''Gefeliciteerd!'''\nU hebt MediaWiki met succes geïnstalleerd.\n\nHet installatieprogramma heeft het bestand <code>LocalSettings.php</code> aangemaakt.\nDit bevat al uw instellingen.\n\nU moet het bestand downloaden en in de hoofdmap van uw wiki-installatie plaatsten, in dezelfde map als index.php.\nDe download moet u automatisch zijn aangeboden.\n\nAls de download niet is aangeboden of als u de download hebt geannuleerd, dan kunt u de download opnieuw starten door op de onderstaande koppeling te klikken:\n\n$3\n\n'''Let op''': als u dit niet nu doet, dan is het bestand als u later de installatieprocedure afsluit zonder het bestand te downloaden niet meer beschikbaar.\n\nNa het plaatsen van het bestand met instellingen kunt u '''[$2 uw wiki gebruiken]'''.",
        "config-download-localsettings": "<code>LocalSettings.php</code> downloaden",
        "config-help": "hulp",
+       "config-help-tooltip": "klik om uit te klappen",
        "config-nofile": "Het bestand \"$1\" is niet gevonden. Is het verwijderd?",
        "config-extension-link": "Weet u dat u [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions uitbreidingen] kunt gebruiken voor uw wiki?\nU kunt [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category uitbreidingen op categorie] bekijken of ga naar de [//www.mediawiki.org/wiki/Extension_Matrix uitbreidingenmatrix] om de volledige lijst met uitbreidingen te bekijken.",
        "mainpagetext": "'''De installatie van MediaWiki is geslaagd.'''",
-       "mainpagedocfooter": "Raadpleeg de [//meta.wikimedia.org/wiki/NL_Help:Inhoudsopgave handleiding] voor informatie over het gebruik van de wikisoftware.\n\n== Meer hulp over MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lijst met instellingen]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde vragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Maak MediaWiki beschikbaar in uw taal]"
+       "mainpagedocfooter": "Raadpleeg de [//meta.wikimedia.org/wiki/Special:MyLanguage/Help:Contents handleiding] voor informatie over het gebruik van de wikisoftware.\n\n== Meer hulp over MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lijst met instellingen]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde vragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Maak MediaWiki beschikbaar in uw taal]"
 }
index 85b3be6..e4bcb6e 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Cedric31",
-                       "Jfblanc"
+                       "Jfblanc",
+                       "Seb35"
                ]
        },
        "config-desc": "Lo programa d’installacion de MediaWiki",
        "config-download-localsettings": "Telecargar <code>LocalSettings.php</code>",
        "config-help": "ajuda",
        "mainpagetext": "'''MediaWiki es estat installat amb succès.'''",
-       "mainpagedocfooter": "Consultatz lo [//meta.wikimedia.org/wiki/Ajuda:Contengut Guida de l'utilizaire] per mai d'entresenhas sus l'utilizacion d'aqueste logicial de wiki.\n\n== Per començar ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista dels paramètres de configuracion]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr FAQ MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussions de las distribucions de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptatz MediaWiki dins vòstra lenga]"
+       "mainpagedocfooter": "Consultatz lo [//meta.wikimedia.org/wiki/Help:Contents/fr Guida de l'utilizaire] per mai d'entresenhas sus l'utilizacion d'aqueste logicial de wiki.\n\n== Per començar ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista dels paramètres de configuracion]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/oc FAQ MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussions de las distribucions de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptatz MediaWiki dins vòstra lenga]"
 }
index 91ed66c..83fb3d8 100644 (file)
@@ -5,12 +5,29 @@
                        "Psubhashish"
                ]
        },
+       "config-session-error": "ଅଧିବେଶନ ଆରମ୍ଭରେ ଅସୁବିଧା: $1",
+       "config-your-language": "ଆପଣଙ୍କ ଭାଷା:",
+       "config-your-language-help": "ଇନଷ୍ଟଲ କରିବା ବେଳେ ବ୍ୟବହାର ପାଇଁ ଏକ ଭାଷା ବାଛନ୍ତୁ ।",
+       "config-wiki-language": "ଉଇକି ଭାଷା:",
        "config-back": "← ପଛକୁ",
        "config-continue": "ଚାଲୁରଖିବେ →",
        "config-page-language": "ଭାଷା",
        "config-page-welcome": "ମେଡିଆଉଇକିକୁ ଆପଣଙ୍କୁ ସ୍ଵାଗତ",
+       "config-page-dbconnect": "ଡାଟାବେସ ସହ ଯୋଡ଼ନ୍ତୁ",
+       "config-page-upgrade": "ଏବେର ଇନଷ୍ଟଲେସନଟିକୁ ଅପଗ୍ରେଡ଼ କରନ୍ତୁ",
+       "config-page-dbsettings": "ଡାଟାବେସ ସଂରଚନା",
        "config-page-name": "ନାମ",
        "config-page-options": "ପସନ୍ଦସମୂହ",
+       "config-page-install": "ଇନଷ୍ଟଲ",
+       "config-page-complete": "ଶେଷ ହେଲା!",
+       "config-page-restart": "ଇନଷ୍ଟଲେସନ ପୁନଃଆରମ୍ଭ କରନ୍ତୁ",
+       "config-page-readme": "ପଢ଼ନ୍ତୁ",
+       "config-page-releasenotes": "ପ୍ରକାଶନ ସୂଚନା",
+       "config-page-copying": "ନକଲ କରୁଛି",
+       "config-page-upgradedoc": "ଅପଗ୍ରେଡ଼ କରୁଛି",
+       "config-page-existingwiki": "ଏବେକାର ଉଇକି",
+       "config-restart": "ହଁ, ଏହାକୁ ପୁନରାରମ୍ଭ କରନ୍ତୁ",
+       "config-env-php": "PHP $1 ଇନଷ୍ଟଲ ହେଲା ।",
        "config-license-cc-by-sa": "କ୍ରିଏଟିଭ କମନ୍ସ ଆଟ୍ରିବ୍ୟୁସନ-ସେଆର ଏଲାଇକ",
        "config-license-cc-by-nc-sa": "କ୍ରିଏଟିଭ କମନ୍ସ ଆଟ୍ରିବ୍ୟୁସନ-ନନକମର୍ସିଆଲ ସେଆର ଏଲାଇକ"
 }
index 2790f6c..d5a2d8f 100644 (file)
@@ -11,7 +11,8 @@
                        "Anaclaudiaml",
                        "Cybermandrake",
                        "Fabsouza1",
-                       "Rodrigo codignoli"
+                       "Rodrigo codignoli",
+                       "Tuliouel"
                ]
        },
        "config-desc": "O instalador do MediaWiki",
        "config-missing-db-name": "Você deve inserir um valor para \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Você deve inserir um valor para \"{{int:config-db-host}}\".",
        "config-missing-db-server-oracle": "Você deve inserir um valor para \"{{int:config-db-host-oracle}}\".",
-       "config-connection-error": "$1\n\nVerifique o servidor hospedeiro, nome de usuário e senha e tente novamente.",
+       "config-connection-error": "$1\n\nVerifique o servidor, nome de usuário e senha e tente novamente.",
        "config-db-sys-user-exists-oracle": "A conta de usuário $1 já existe. SYSDBA somente pode ser utilizado na criação de uma nova conta!",
        "config-postgres-old": "PostgreSQL $1 ou posterior é necessário. Você tem $2.",
        "config-mssql-old": "Microsoft SQL Server $1 ou posterior é necessário.Você tem $2.",
        "config-advanced-settings": "Configuração avançada",
        "config-extensions": "Extensões",
        "config-install-step-done": "feito",
+       "config-install-extensions": "Incluindo extensões",
        "config-install-database": "Criando base de dados",
+       "config-install-schema": "Criando esquema",
+       "config-install-pg-commit": "Enviando alterações",
+       "config-install-user": "Criando usuário de banco de dados",
+       "config-install-user-alreadyexists": "O usuário \"$1\" já existe!",
        "config-install-user-missing-create": "O usuário especificado \" $1 \" não existe.\nPor favor, clique na opção de \"criar conta\" abaixo se você deseja criá-lo.",
        "config-install-tables": "Criando tabelas",
        "config-install-tables-exist": "'''Aviso''': As tabelas do MediaWiki parecem já existir.\nA criação das tabelas será pulada.",
        "config-install-done": "<strong>Parabéns!</strong>\nVocê concluiu a instalação do MediaWiki.\n\nO instalador gerou um arquivo <code>LocalSettings.php</code>.\nEste arquivo contém todas as suas configurações.\n\nVocê precisa fazer o download desse arquivo e colocá-lo na raiz da sua instalação (o mesmo diretório onde está o arquivo <code>index.php</code>). Este download deve ter sido iniciado automaticamente.\n\nSe o download não foi iniciado, ou se ele foi cancelado, pode recomeçá-lo clicando no link abaixo:\n\n$3\n\n<strong>Nota</strong>: Se não fizer isto agora, o arquivo que foi gerado não estará disponível depois que você sair do processo de instalação sem baixá-lo.\n\nQuando isso tiver sido feito, pode <strong>[$2 entrar na sua wiki]</strong>.",
        "config-download-localsettings": "Baixar <code>LocalSettings.php</code>",
        "config-help": "ajuda",
-       "config-nofile": "O arquivo \"$1\" não pode ser encontrado. Este arquivo foi apagado?",
+       "config-nofile": "O arquivo \"$1\" não foi encontrado. Ele foi apagado?",
        "config-extension-link": "Você sabia que sua wiki suporta [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nVocê pode explorar as  [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria] ou visitar a [//www.mediawiki.org/wiki/Extension_Matrix Matriz de Extensões] para ver a lista completa.",
        "mainpagetext": "<strong>O MediaWiki foi instalado com sucesso.</strong>",
        "mainpagedocfooter": "Consulte o [//meta.wikimedia.org/wiki/Help:Contents Manual de Usuário] para informações de como usar o software wiki.\n\n== Começando ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de opções de configuração]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ do MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussão com avisos de novas versões do MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traduza o MediaWiki para seu idioma]"
index 2fcf9a5..7725734 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Firilacroco",
                        "Minisarm",
-                       "Stelistcristi"
+                       "Stelistcristi",
+                       "XXN"
                ]
        },
        "config-desc": "Programul de instalare pentru MediaWiki",
@@ -62,6 +63,7 @@
        "config-header-postgres": "Setări PostgreSQL",
        "config-header-sqlite": "Setări SQLite",
        "config-header-oracle": "Setări Oracle",
+       "config-header-mssql": "Setări Microsoft SQL Server",
        "config-invalid-db-type": "Tip de bază de date incorect",
        "config-missing-db-name": "Trebuie să introduci o valoare pentru „Numele bazei de date”",
        "config-connection-error": "$1.\n\nVerificați gazda, numele de utilizator și parola și reîncercați.",
index a538f9b..17f5fbc 100644 (file)
@@ -15,7 +15,9 @@
                        "Александр Сигачёв",
                        "Сrower",
                        "아라",
-                       "Meshkov.a"
+                       "Meshkov.a",
+                       "Eroha",
+                       "Seb35"
                ]
        },
        "config-desc": "Инсталлятор MediaWiki",
        "config-db-schema-help": "Эта схема обычно работает хорошо.\nИзменяйте её только если знаете, что Вам это нужно.",
        "config-pg-test-error": "Не удаётся подключиться к базе данных <strong>$1</strong>: $2",
        "config-sqlite-dir": "Директория данных SQLite:",
-       "config-sqlite-dir-help": "SQLite хранит все данные в одном файле.\n\nДиректория, которую вы должны указать, должна быть доступна для записи веб-сервером во время установки.\n\nОна '''не должна''' быть доступна через Интернет, поэтому не должна совпадать с той, где хранятся PHP файлы.\n\nУстановщик запишет в эту директорию файл <code>.htaccess</code>, но если это не сработает, кто-нибудь может получить доступ ко всей базе данных.\nВ этой базе находится в том числе и информация о пользователях (адреса электронной почты, хэши паролей), а также удалённые страницы и другие секретные данные о вики.\n\nПо возможности, расположите базу данных где-нибудь в стороне, например, в <code>/var/lib/mediawiki/yourwiki</code>.",
+       "config-sqlite-dir-help": "SQLite хранит все данные в одном файле.\n\nДиректория, указываемая вами, должна быть доступна для записи веб-сервером во время установки.\n\nОна '''не должна''' быть доступна через Интернет, поэтому не должна совпадать с той, где хранятся PHP файлы.\n\nУстановщик запишет в эту директорию файл <code>.htaccess</code>, но если это не сработает, кто-нибудь может получить доступ ко всей базе данных.\nВ этой базе находится в том числе и информация о пользователях (адреса электронной почты, хэши паролей), а также удалённые страницы и другие секретные данные о вики.\n\nПо возможности, расположите базу данных где-нибудь в стороне, например, в <code>/var/lib/mediawiki/yourwiki</code>.",
        "config-oracle-def-ts": "Пространство таблиц по умолчанию:",
        "config-oracle-temp-ts": "Временное пространство таблиц:",
        "config-type-mysql": "MySQL (или совместимая)",
        "config-nofile": "Файл \"$1\" не удается найти. Он был удален?",
        "config-extension-link": "Знаете ли вы, что ваш вики-проект поддерживает [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions расширения]?\n\nВы можете просмотреть [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category расширения по категориям] или [//www.mediawiki.org/wiki/Extension_Matrix матрицу расширений], чтобы увидеть их полный список.",
        "mainpagetext": "'''Вики-движок «MediaWiki» успешно установлен.'''",
-       "mainpagedocfooter": "Информацию по работе с этой вики можно найти в [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 справочном руководстве].\n\n== Некоторые полезные ресурсы ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Часто задаваемые вопросы и ответы по MediaWiki];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]"
+       "mainpagedocfooter": "Информацию по работе с этой вики можно найти в [//meta.wikimedia.org/wiki/Help:Contents/ru справочном руководстве].\n\n== Некоторые полезные ресурсы ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];\n* [//www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]"
 }
index 9f609ee..40d0876 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "AmaryllisGardener",
-                       "John Reid"
+                       "John Reid",
+                       "Seb35"
                ]
        },
        "config-desc": "The installer fer MediaWiki",
        "config-nofile": "File \"$1\" coudna be foond. Haes it been delytit?",
        "config-extension-link": "Did ye ken that yer wiki supports [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions]?\n\nYe can brouse [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions bi categorie] or the [//www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] tae see the full leet o extensions.",
        "mainpagetext": "<strong>MediaWiki haes been installit wi speed.</strong>",
-       "mainpagedocfooter": "Consult the [//meta.wikimedia.org/wiki/Help:Contents Uiser's Guide] fer information oan uisin the wiki saffware.\n\n== Gettin stairtit ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Confeeguration settins leet]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailin leet]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki fer yer leid]"
+       "mainpagedocfooter": "Consult the [//meta.wikimedia.org/wiki/Help:Contents/sco Uiser's Guide] fer information oan uisin the wiki saffware.\n\n== Gettin stairtit ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Confeeguration settins leet]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailin leet]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki fer yer leid]"
 }
index da5116a..9d7835a 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "Jun Misugi"
+                       "Jun Misugi",
+                       "Seb35"
                ]
        },
        "config-title": "Isthallazioni di MediaWiki $1",
@@ -14,5 +15,5 @@
        "config-page-language": "Linga",
        "config-page-welcome": "Binvinuddi in MediaWiki!",
        "mainpagetext": "'''Isthallazioni di MediaWiki accabadda currentementi.'''",
-       "mainpagedocfooter": "Cunsultha la [//meta.wikimedia.org/wiki/Aggiuddu:Summàriu Ghia utenti] pa maggiori infuimmazioni i l'usu di chisthu software wiki.\n\n== Pa ischuminzà ==\nLi sighenti cullegamenti so in linga ingrese:\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Impusthazioni di cunfigurazioni]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Prigonti friquenti i MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annùnzii MediaWiki]"
+       "mainpagedocfooter": "Cunsultha la [//meta.wikimedia.org/wiki/Help:Contents Ghia utenti] pa maggiori infuimmazioni i l'usu di chisthu software wiki.\n\n== Pa ischuminzà ==\nLi sighenti cullegamenti so in linga ingrese:\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Impusthazioni di cunfigurazioni]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Prigonti friquenti i MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annùnzii MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index f0300da..da8a16e 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "OC Ripper"
+                       "OC Ripper",
+                       "Seb35"
                ]
        },
        "mainpagetext": "'''MediaWiki softver is uspješno instaliran.'''",
-       "mainpagedocfooter": "Kontaktirajte [//meta.wikimedia.org/wiki/Help:Contents uputstva za korisnike] za informacije o upotrebi wiki programa.\n\n== Početak ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista postavki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki najčešće postavljana pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista E-Mail adresa MediaWiki]"
+       "mainpagedocfooter": "Kontaktirajte [//meta.wikimedia.org/wiki/Help:Contents uputstva za korisnike] za informacije o upotrebi wiki programa.\n\n== Početak ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista postavki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki najčešće postavljana pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista E-Mail adresa MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index d52cf93..beecd24 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "Dalinanir"
+                       "Dalinanir",
+                       "Seb35"
                ]
        },
        "mainpagetext": "'''MediaWiki tǧizn (tsrbk) bla tamukrist.'''",
-       "mainpagedocfooter": "Ẓr taǧttnn  [//meta.wikimedia.org/wiki/Aide:Contenu Guide de l’utilisateur] bac ad tawit inɣmisn yaḍn f manik sa tswwurt asɣẓan ad.\n\n== Izwir d MediaWiki ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Umuɣ n iɣwwarn n usgadda ]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Isqqsitn f MidyWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Umuɣ n imsgdaln f imbḍitn n MidyaWiki]"
+       "mainpagedocfooter": "Ẓr taǧttnn  [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] bac ad tawit inɣmisn yaḍn f manik sa tswwurt asɣẓan ad.\n\n== Izwir d MediaWiki ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Umuɣ n iɣwwarn n usgadda ]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Isqqsitn f MidyWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Umuɣ n imsgdaln f imbḍitn n MidyaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index bee8498..950ee44 100644 (file)
@@ -56,6 +56,7 @@
        "config-mssql-auth": "Тип провере идентитета:",
        "config-mssql-sqlauth": "Провера идентитета за SQL Server",
        "config-mssql-windowsauth": "Провера идентитета Windows-а",
+       "config-site-name": "Име викија:",
        "config-admin-name": "Корисничко име:",
        "config-admin-password": "Лозинка:",
        "config-admin-email": "Адреса е-поште:",
@@ -64,6 +65,7 @@
        "config-license-cc-by-sa": "Creative Commons Ауторство-Делити под истим условима (CC BY-SA)",
        "config-license-cc-by": "Creative Commons Ауторство (CC BY)",
        "config-license-cc-by-nc-sa": "Creative Commons Ауторство-Некомерцијално-Делити под истим условима (CC BY-NC-SA)",
+       "config-license-cc-0": "Creative Commons Zero (јавно власништво)",
        "config-license-gfdl": "ГНУ-ова лиценца за слободну документацију верзија 1.3 или новија верзија",
        "config-license-pd": "Јавно власништво",
        "mainpagetext": "'''Медијавики је успешно инсталиран.'''",
index 9ef85db..a0cd5f5 100644 (file)
@@ -1,5 +1,9 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "Milicevic01"
+               ]
+       },
        "config-session-error": "Greška pri započinjanju sesije: $1",
        "config-session-expired": "Vaši podaci o sesiji su istekli.\nSesije su podešene da traju $1.\nNjihov rok možete povećati postavljanjem <code>session.gc_maxlifetime</code> u php.ini.\nPonovo pokrenite instalaciju.",
        "config-no-session": "Vaši podaci o sesiji su izgubljeni!\nProverite Vaš php.ini i obezbedite da je <code>session.save_path</code> postavljen na odgovarajući direktorijum.",
@@ -28,6 +32,8 @@
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
+       "config-site-name": "Ime vikija:",
+       "config-license-cc-0": "Creative Commons Zero (javno vlasništvo)",
        "mainpagetext": "'''MedijaViki je uspešno instaliran.'''",
        "mainpagedocfooter": "Molimo vidite [//meta.wikimedia.org/wiki/Help:Contents korisnički vodič] za informacije o upotrebi viki softvera.\n\n== Za početak ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Pomoć u vezi sa podešavanjima]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Najčešće postavljena pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mejling lista o izdanjima MedijaVikija]"
 }
index ea4929e..5081d2a 100644 (file)
@@ -1,5 +1,9 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "Seb35"
+               ]
+       },
        "mainpagetext": "'''MediaWiki seti kon bun.'''",
-       "mainpagedocfooter": "Luku na ini a [//meta.wikimedia.org/wiki/Help:Yepi yepibuku] fu si fa fu kebrouki a wikisoftware.\n\n== Moro yepi ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Den seti]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Sani di ben aksi furu (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Boskopu grupu gi nyun meki]"
+       "mainpagedocfooter": "Luku na ini a [//meta.wikimedia.org/wiki/Help:Contents yepibuku] fu si fa fu kebrouki a wikisoftware.\n\n== Moro yepi ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Den seti]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Sani di ben aksi furu (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Boskopu grupu gi nyun meki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 2dc84c1..c04765b 100644 (file)
@@ -65,6 +65,7 @@
        "config-mbstring": "'''Kritiskt: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] är aktiv!'''\nDetta alternativ orsakar fel och kan korrumpera data oförutsägbart.\nDu kan inte installera eller använda MediaWiki om detta alternativ är aktiverat.",
        "config-safe-mode": "''' Varning:''' PHP:s [http://www.php.net/features.safe-mode felsäkra läge] är aktivt.\nDet kan orsaka problem, särskilt om du använder filuppladdningar och <code>math</code>-stöd.",
        "config-xml-bad": "PHP:s XML-modul saknas.\nMediaWiki kräver funktioner i denna modul och kommer inte att fungera i den här konfigurationen.\nOm du kör Mandrake, installera php-xml-paketet.",
+       "config-pcre-old": "'''Kritiskt:''' PCRE $1 eller senare krävs.\nDin PHP-binär är länkad till PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mer information].",
        "config-pcre-no-utf8": "'''Kritiskt:''' PHP:s PCRE-modul verkar vara kompilerat utan PCRE_UTF8-stöd.\nMediaWiki kräver stöd för UTF-8 för att fungera korrekt.",
        "config-memory-raised": "PHPs <code>memory_limit</code> är $1, ökad till $2.",
        "config-memory-bad": "''' Varning:''' PHP:s <code>memory_limit</code> är $1.\nDetta är förmodligen för lågt.\nInstallationen kan misslyckas!",
        "config-header-postgres": "PostgreSQL-inställningar",
        "config-header-sqlite": "SQLite-inställningar",
        "config-header-oracle": "Oracle-inställningar",
+       "config-header-mssql": "Inställningar för Microsoft SQL Server",
        "config-invalid-db-type": "Ogiltig databastyp",
        "config-missing-db-name": "Du måste ange ett värde för \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Du måste ange ett värde för \"{{int:config-db-host}}\".",
        "config-mysql-binary": "Binär",
        "config-mysql-utf8": "UTF-8",
        "config-mysql-charset-help": "I '''binärt läge''' lagrar MediaWiki UTF-8 text till databasen i binära fält.\nDetta är mer effektivt än MySQLs UTF-8-läge, och den tillåter dig att använda den fulla uppsättningen av Unicode-tecken.\n\nI '''UTF-8-läge''' vet MySQL vilket teckenuppsättning din data är i och kan presentera och konvertera den på ett lämpligt sätt, men den tillåter dig inte att lagra tecken över [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+       "config-mssql-auth": "Autentiseringstyp:",
        "config-mssql-sqlauth": "SQL Server-autentisering",
        "config-mssql-windowsauth": "Windows-autentisering",
        "config-site-name": "Namnet på wikin:",
        "config-ns-generic": "Projekt",
        "config-ns-site-name": "Samma som wikinamnet: $1",
        "config-ns-other": "Annan (specificera)",
+       "config-ns-other-default": "MinWiki",
        "config-ns-invalid": "Den angivna namnrymden \"<nowiki>$1</nowiki>\" är ogiltig.\nAnge en annan namnrymd för projektet.",
        "config-ns-conflict": "Den angivna namnrymden \"<nowiki>$1</nowiki>\" står i konflikt med en standardnamnrymd för MediaWiki.\nAnge en annan namnrymd för projektet.",
        "config-admin-box": "Administratörskonto",
        "config-install-done": "'''Grattis!'''\nDu har installerat MediaWiki.\n\nInstallationsprogrammet har genererat filen <code>LocalSettings.php</code>.\nDet innehåller alla dina konfigurationer.\n\nDu kommer att behöva ladda ner den och placera den i roten för din wiki-installation (samma katalog som index.php). Nedladdningen borde ha startats automatiskt.\n\nOm ingen nedladdning erbjöds, eller om du har avbrutit det kan du starta om nedladdningen genom att klicka på länken nedan:\n\n$3\n\n'''OBS''': Om du inte gör detta nu, kommer denna genererade konfigurationsfil inte vara tillgänglig för dig senare om du avslutar installationen utan att ladda ned den.\n\nNär det är klart, kan du '''[$2 gå in på din wiki]'''.",
        "config-download-localsettings": "Ladda ner <code>LocalSettings.php</code>",
        "config-help": "hjälp",
+       "config-help-tooltip": "klicka för att expandera",
        "config-nofile": "Filen \"$1\" kunde inte hittas. Har den raderats?",
        "config-extension-link": "Visste du att din wiki stödjer [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions tillägg]?\n\nDu kan bläddra [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category tillägg efter kategori].",
        "mainpagetext": "'''MediaWiki har installerats utan problem.'''",
index ffd98b2..86b760c 100644 (file)
@@ -73,6 +73,7 @@
        "config-db-username": "డేటాబేసు వాడుకరిపేరు:",
        "config-db-password": "డేటాబేసు సంకేతపదం:",
        "config-db-password-empty": "కొత్త డేటాబేసు వాడుకరి $1 కి ఓ సంకేతపదం ఇవ్వండి. \nసంకేతపదాలేమీ లేకుండా వాడుకరులను సృష్టించేవీలున్నప్పటికీ, అది సురక్షితం కాదు.",
+       "config-db-username-empty": "\"{{int:config-db-username}}\" కి మీరు తప్పకుండా ఏదో ఒక విలువ ఇవ్వాలి.",
        "config-db-install-username": "స్థాపన దశలో డేటాబేసుకు కనెక్టయ్యేందుకు వాడే వాడుకరిపేరును ఇవ్వండి.\nఇది MediaWiki ఖాతా యొక్క వాడుకరిపేరు కాదు; మీ డేటాబేసు కోసం వాడుకరిపేరు.",
        "config-db-install-password": "స్థాపన దశలో డేటాబేసుకు కనెక్టయ్యేందుకు వాడే సంకేతపదాన్ని ఇవ్వండి.\nఇది MediaWiki ఖాతా యొక్క సంకేతపదం కాదు; మీ డేటాబేసు కోసం సంకేతపదం.",
        "config-db-install-help": "స్థాపన దశలో డేటాబేసుకు కనెక్టయ్యేందుకు వాడే వాడుకరిపేరు, సంకేతపదం ఇవ్వండి.",
index d4f7e18..2ff58ab 100644 (file)
@@ -5,7 +5,8 @@
                        "Joseph",
                        "Rhinestorm",
                        "SiLveRLeaD",
-                       "Trncmvsr"
+                       "Trncmvsr",
+                       "Sayginer"
                ]
        },
        "config-desc": "MediaWiki yükleyicisi",
        "config-admin-name": "Kullanıcı adınız:",
        "config-admin-password": "Şifre:",
        "config-admin-password-confirm": "Şifre tekrar:",
+       "config-admin-help": "Buraya tercih ettiğiniz kullanıcı adını girin; örneğin \"Joe Bloggs\". Bu vikide oturum açmak için kullanacağınız addır.",
        "config-admin-name-blank": "Bir yönetici kullanıcı adını giriniz.",
        "config-admin-name-invalid": "Belirtilen ad \"<nowiki> $1 </nowiki>\" geçersiz.\nFarklı bir kullanıcı adı belirtin.",
        "config-admin-password-blank": "Yönetici hesabı için bir parola girin.",
        "config-optional-skip": "Şimdiden sıkıldım, sadece wikiyi yükle.",
        "config-profile": "Kullanıcı hakları profili:",
        "config-profile-wiki": "Açık wiki",
+       "config-profile-no-anon": "Hesap oluşturmak gerekli",
        "config-profile-fishbowl": "Yalnızca yetkili editörler",
        "config-profile-private": "Özel wiki",
+       "config-profile-help": "Vikiler, mümkün olan en fazla kişiye değişiklik imkânı verdiğinizde, en iyi şekilde çalışır.\nMediaWiki'de son değişiklikleri incelemek ve tecrübesiz veya kötü niyetli kullanıcıların verdiği zararları geri almak kolaydır.\n\nAncak birçok kişi MediaWiki'yi farklı şekillerde kullanışlı bulmaktadır ve bazen herkesi viki yolunun faydalarına ikna etmek zordur.\nYani seçim sizin.\n\n<strong>{{int:config-profile-wiki}}</strong> modeli, giriş yapmamış olsa bile herkese değişiklik izni verir.\n\n<strong>{{int:config-profile-no-anon}}</strong> kullanan bir viki ise daha izlenebilirdir ancak sıradan, basit, gündelik katkı yapan kullanıcıları caydırabilir.\n\n<strong>{{int:config-profile-fishbowl}}</strong> onaylanmış kullanıcıların değişikliklerine izin verir ama herkes sayfaları ve sayfa geçmişlerini görebilir.\n\n<strong>{{int:config-profile-private}}</strong> sadece onaylanmış kullanıcıları değişiklik yapma ve sayfaları görme imkânı tanır.\n\nDaha karmaşık kullanıcı hakkı ayarları, yüklemeden sonra görülebilir; [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights ilgili kılavuza] bakınız.",
        "config-license": "Telif Hakkı ve Lisans",
        "config-license-gfdl": "GNU Free Documentation License 1.3 veya üstü",
        "config-license-pd": "Kamu Malı",
        "config-email-settings": "E-posta ayarları",
        "config-enable-email": "Giden e-posta etkinleştirme",
        "config-email-user": "Kullanıcıdan kullanıcıya e-posta gönderimini etkinleştir",
+       "config-email-user-help": "Eğer tercihlerinde etkinleştirmişlerse, kullanıcıların birbirlerine e-posta göndermesine izin ver.",
        "config-email-watchlist": "Watchlist bildirimini etkinleştirmek",
        "config-email-auth": "E-posta kimlik doğrulamasını etkinleştir",
        "config-email-sender": "E-posta adresini ayarlayın",
index 6de3fc0..16f2e54 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "KhayR"
+                       "KhayR",
+                       "Seb35"
                ]
        },
        "mainpagetext": "«MediaWiki» уңышлы куелды.",
-       "mainpagedocfooter": "Бу вики турында мәгълүматны [//meta.wikimedia.org/wiki/Ярдәм:Эчтәлек биредә] табып була.\n\n== Кайбер файдалы ресурслар ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Көйләнмәләр исемлеге (инг.)];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki турында еш бирелгән сораулар һәм җаваплар (инг.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki'ның яңа версияләре турында хәбәрләр яздырып алу]."
+       "mainpagedocfooter": "Бу вики турында мәгълүматны [//meta.wikimedia.org/wiki/Help:Contents биредә] табып була.\n\n== Кайбер файдалы ресурслар ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Көйләнмәләр исемлеге (инг.)];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki турында еш бирелгән сораулар һәм җаваплар (инг.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki'ның яңа версияләре турында хәбәрләр яздырып алу];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]."
 }
index 7978883..b0ee3d4 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "Don Alessandro"
+                       "Don Alessandro",
+                       "Seb35"
                ]
        },
        "mainpagetext": "«MediaWiki» uñışlı quyıldı.",
-       "mainpagedocfooter": "Bu wiki turında mäğlümatnı [//meta.wikimedia.org/wiki/Yärdäm:Eçtälek biredä] tabıp bula.\n\n== Qayber faydalı resurslar ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Köylänmälär isemlege (ing.)];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki turında yış birelgän sorawlar häm cawaplar (ing.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki'nıñ yaña versiäläre turında xäbärlär yazdırıp alu]."
+       "mainpagedocfooter": "Bu wiki turında mäğlümatnı [//meta.wikimedia.org/wiki/Help:Contents biredä] tabıp bula.\n\n== Qayber faydalı resurslar ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Köylänmälär isemlege (ing.)];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki turında yış birelgän sorawlar häm cawaplar (ing.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki'nıñ yaña versiäläre turında xäbärlär yazdırıp alu];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]."
 }
index 4c92db1..2065352 100644 (file)
        "config-install-done": "'''Вітаємо!'''\nВи успішно встановили MediaWiki.\n\nІнсталятор згенерував файл <code>LocalSettings.php</code>, який містить усі Ваші налаштування.\n\nВам необхідно завантажити його і помістити у кореневу папку Вашої вікі (туди ж, де index.php). Завантаження мало початись автоматично.\n\nЯкщо завантаження не почалось або Ви його скасували, можете заново його почати, натиснувши на посилання внизу:\n\n$3\n\n'''Примітка''': Якщо Ви не зробите цього зараз, цей файл не буде доступним пізніше, коли Ви вийдете з встановлення, не скачавши його.\n\nПісля виконання дій, описаних вище, Ви зможете '''[$2 увійти у свою вікі]'''.",
        "config-download-localsettings": "Завантажити <code>LocalSettings.php</code>",
        "config-help": "допомога",
+       "config-help-tooltip": "натисніть, щоб розгорнути",
        "config-nofile": "Файл \"$1\" не знайдено. Його видалено?",
        "config-extension-link": "Чи знаєте ви, що ваше вікі підтримує [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions розширення]?\n\nВи можете переглядати [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category розширення по категорії] або в [//www.mediawiki.org/wiki/Extension_Matrix матрицю розширень] щоб побачити повний список розширень.",
        "mainpagetext": "Програмне забезпечення «MediaWiki» успішно встановлене.",
index 0626132..dd65180 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "Vajotwo"
+                       "Vajotwo",
+                       "Seb35"
                ]
        },
        "mainpagetext": "'''Instałasion de MediaWiki conpletà coretamente.'''",
-       "mainpagedocfooter": "Varda ła [//meta.wikimedia.org/wiki/Aiuto:Sommario Guida utente] par majori informasion so l'uso de sto software wiki.\n\n== Par scumisiar ==\n\nI seguenti cołegamenti i xé en łengua inglese:\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Inpostasion de configurasion]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Domande frequenti so MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list anunsi MediaWiki]"
+       "mainpagedocfooter": "Varda ła [//meta.wikimedia.org/wiki/Help:Contents Guida utente] par majori informasion so l'uso de sto software wiki.\n\n== Par scumisiar ==\n\nI seguenti cołegamenti i xé en łengua inglese:\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Inpostasion de configurasion]\n* [//www.mediawiki.org/wiki/Manual:FAQ/it Domande frequenti so MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list anunsi MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 1b4d9c6..78c3b7b 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "Игорь Бродский"
+                       "Игорь Бродский",
+                       "Seb35"
                ]
        },
        "mainpagetext": "'''MediaWiki-likutim om seižutadud jügedusita.'''",
-       "mainpagedocfooter": "Kc. [//meta.wikimedia.org/wiki/Help:Kävutajan abukirj], miše sada informacijad wikin kävutamižes.\n\n== Erased tarbhaižed resursad ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Järgendusiden nimikirjutez]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce počtnimikirjutez]"
+       "mainpagedocfooter": "Kc. [//meta.wikimedia.org/wiki/Help:Contents Kävutajan kirj], miše sada informacijad wikin kävutamižes.\n\n== Erased tarbhaižed resursad ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Järgendusiden nimikirjutez]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce počtnimikirjutez]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 12f81b2..5cee276 100644 (file)
@@ -1,5 +1,9 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "Seb35"
+               ]
+       },
        "mainpagetext": "'''Campug MediaWiki gi sotti na . '''",
-       "mainpagedocfooter": "Saytul [//meta.wikimedia.org/wiki/Ndimbal:Ndefu Gindikaayu jëfandikukat bi] ngir yeneeni xibaar ci jëfandiku gu tëriin gi.\n\n== Tambali ak MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Limu jumtukaayi kocc-koccal gi]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Limu waxtaan ci liy-génn ci MediaWiki]"
+       "mainpagedocfooter": "Saytul [//meta.wikimedia.org/wiki/Help:Contents Gindikaayu jëfandikukat bi] ngir yeneeni xibaar ci jëfandiku gu tëriin gi.\n\n== Tambali ak MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Limu jumtukaayi kocc-koccal gi]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Limu waxtaan ci liy-génn ci MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index dcdaa08..d545ed6 100644 (file)
@@ -1,5 +1,9 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "Seb35"
+               ]
+       },
        "mainpagetext": "'''De installaotie van MediaWiki is geslaegd.'''",
-       "mainpagedocfooter": "Raedpleeg de [//meta.wikimedia.org/wiki/ZEA_Ulpe:Inhoudsopgaeve andleidieng] voe informatie over 't gebruuk van de wikisoftware.\n\n== Meer ulpe over MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lieste mie instelliengen]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veehestelde vraehen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailienglieste voe ankondigiengen van nieuwe versies]"
+       "mainpagedocfooter": "Raedpleeg de [//meta.wikimedia.org/wiki/Help:Contents Inhoudsopgaeve andleidieng] voe informatie over 't gebruuk van de wikisoftware.\n\n== Meer ulpe over MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lieste mie instelliengen]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veehestelde vraehen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailienglieste voe ankondigiengen van nieuwe versies]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 55d13e8..fcb7a3e 100644 (file)
@@ -17,7 +17,9 @@
                        "Hudafu",
                        "Liuxinyu970226",
                        "Qiyue2001",
-                       "Kuailong"
+                       "Kuailong",
+                       "Zjzengdongyang",
+                       "Mywood"
                ]
        },
        "config-desc": "MediaWiki安装程序",
        "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons 即时共享资源]可以让wiki使用来自[//commons.wikimedia.org/ 维基共享资源]网站的图像、音频和其他媒体文件。要启用该功能,MediaWiki必须能够访问互联网。\n\n有关此功能的详细信息,包括如何将其他wiki网站设为具有类似共享功能的方法,请参考[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos 手册]。",
        "config-cc-error": "知识共享许可证挑选器无法找到结果,请手动输入许可证的名称。",
        "config-cc-again": "重新挑选……",
-       "config-cc-not-chosen": "选择您希望使用的知识共享许可证,并点击“继续”。",
+       "config-cc-not-chosen": "选择你想要的知识共享许可协议并单击“proceed”。",
        "config-advanced-settings": "高级设置",
        "config-cache-options": "对象缓存设置:",
        "config-cache-help": "对象缓存可通过缓存频繁使用的数据来提高MediaWiki的速度。高度推荐中到大型的网站启用该功能,小型网站亦能从其中受益。",
        "config-install-done": "'''恭喜!'''\n您已经成功地安装了MediaWiki。\n\n安装程序已经生成了<code>LocalSettings.php</code>文件,其中包含了您所有的配置。\n\n您需要下载该文件,并将其放在您wiki的根目录(index.php的同级目录)中。稍后下载将自动开始。\n\n如果浏览器没有提示您下载,或者您取消了下载,您可以点击下面的链接重新开始下载:\n\n$3\n\n'''注意''':如果您现在不完成本步骤,而是没有下载便退出了安装过程,此后您将无法获得自动生成的配置文件。\n\n当本步骤完成后,您可以 '''[$2 进入您的wiki]'''。",
        "config-download-localsettings": "下载<code>LocalSettings.php</code>",
        "config-help": "帮助",
+       "config-help-tooltip": "单击展开",
        "config-nofile": "找不到文件“$1”。它是否已被删除?",
        "config-extension-link": "您是否知道您的wiki支持[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 拓展]?\n您可浏览[//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category 拓展分类]。",
        "mainpagetext": "'''已成功安装MediaWiki。'''",
index 4ee370e..35b4f13 100644 (file)
@@ -291,6 +291,14 @@ abstract class Job implements IJobSpecification {
         * @return string
         */
        public function toString() {
+               $truncFunc = function( $value ) {
+                       $value = (string)$value;
+                       if ( mb_strlen( $value ) > 1024 ) {
+                               $value = "string(" . mb_strlen( $value ) . ")";
+                       }
+                       return $value;
+               };
+
                $paramString = '';
                if ( $this->params ) {
                        foreach ( $this->params as $key => $value ) {
@@ -298,16 +306,25 @@ abstract class Job implements IJobSpecification {
                                        $paramString .= ' ';
                                }
                                if ( is_array( $value ) ) {
-                                       $value = "array(" . count( $value ) . ")";
+                                       $filteredValue = array();
+                                       foreach ( $value as $k => $v ) {
+                                               if ( is_scalar( $v ) ) {
+                                                       $filteredValue[$k] = $truncFunc( $v );
+                                               } else {
+                                                       $filteredValue = null;
+                                                       break;
+                                               }
+                                       }
+                                       if ( $filteredValue ) {
+                                               $value = FormatJson::encode( $filteredValue );
+                                       } else {
+                                               $value = "array(" . count( $value ) . ")";
+                                       }
                                } elseif ( is_object( $value ) && !method_exists( $value, '__toString' ) ) {
                                        $value = "object(" . get_class( $value ) . ")";
                                }
-                               $value = (string)$value;
-                               if ( mb_strlen( $value ) > 1024 ) {
-                                       $value = "string(" . mb_strlen( $value ) . ")";
-                               }
 
-                               $paramString .= "$key=$value";
+                               $paramString .= "$key={$truncFunc( $value )}";
                        }
                }
 
index 58d5c67..d6f9560 100644 (file)
@@ -195,7 +195,7 @@ class JobQueueFederated extends JobQueue {
                $key = $this->getCacheKey( $type );
 
                $count = $this->cache->get( $key );
-               if ( is_int( $count ) ) {
+               if ( $count !== false ) {
                        return $count;
                }
 
index 16908a7..98a78c5 100644 (file)
@@ -389,6 +389,10 @@ class JobQueueGroup {
                        }
                }
 
+               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 ) {
index 2aec3c9..df9ae39 100644 (file)
@@ -75,7 +75,10 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                        return false;
                }
                try {
+                       $conn->multi( Redis::PIPELINE );
+                       $conn->hSetNx( $this->getQueueTypesKey(), $type, 'enabled' );
                        $conn->hSet( $this->getReadyQueueKey(), $this->encQueueName( $type, $wiki ), time() );
+                       $conn->exec();
 
                        return true;
                } catch ( RedisException $e ) {
@@ -115,16 +118,19 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
 
                                $pendingDBs = $this->findPendingWikiQueues(); // (type => list of wikis)
 
-                               $conn->delete( $this->getReadyQueueKey() . ":lock" ); // unlock
-
+                               $conn->multi( Redis::PIPELINE );
                                $now = time();
                                $map = array();
                                foreach ( $pendingDBs as $type => $wikis ) {
+                                       $conn->hSetNx( $this->getQueueTypesKey(), $type, 'enabled' );
                                        foreach ( $wikis as $wiki ) {
                                                $map[$this->encQueueName( $type, $wiki )] = $now;
                                        }
                                }
                                $conn->hMSet( $this->getReadyQueueKey(), $map );
+                               $conn->exec();
+
+                               $conn->delete( $this->getReadyQueueKey() . ":lock" ); // unlock
                        }
 
                        return $pendingDBs;
@@ -142,6 +148,7 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                }
                try {
                        $conn->delete( $this->getReadyQueueKey() );
+                       // leave key at getQueueTypesKey() alone
                } catch ( RedisException $e ) {
                        $this->handleException( $conn, $e );
 
@@ -185,6 +192,13 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                return "jobqueue:aggregator:h-ready-queues:v1"; // global
        }
 
+       /**
+        * @return string
+        */
+       private function getQueueTypesKey() {
+               return "jobqueue:aggregator:h-queue-types:v1"; // global
+       }
+
        /**
         * @param string $type
         * @param string $wiki
index 82197b5..d71e660 100644 (file)
@@ -76,7 +76,10 @@ if [ "$MW_MEM_LIMIT" -gt 0 ]; then
                # Memory
                echo $(($MW_MEM_LIMIT*1024)) > "$MW_CGROUP"/$$/memory.limit_in_bytes
                # Memory+swap
-               echo $(($MW_MEM_LIMIT*1024)) > "$MW_CGROUP"/$$/memory.memsw.limit_in_bytes
+               # This will be missing if there is no swap
+               if [ -e "$MW_CGROUP"/$$/memory.memsw.limit_in_bytes ]; then
+                       echo $(($MW_MEM_LIMIT*1024)) > "$MW_CGROUP"/$$/memory.memsw.limit_in_bytes
+               fi
        else
                ulimit -v "$MW_MEM_LIMIT"
        fi
index d893be5..bebe3a9 100644 (file)
@@ -504,6 +504,10 @@ class ManualLogEntry extends LogEntryBase {
                        'log_comment' => $comment,
                        'log_params' => serialize( (array)$this->getParameters() ),
                );
+               if ( isset( $this->deleted ) ) {
+                       $data['log_deleted'] = $this->deleted;
+               }
+
                $dbw->insert( 'logging', $data, __METHOD__ );
                $this->id = !is_null( $id ) ? $id : $dbw->insertId();
 
index 566efb2..200d526 100644 (file)
@@ -278,7 +278,14 @@ class DjVuHandler extends ImageHandler {
                $unser = unserialize( $metadata );
                wfRestoreWarnings();
                if ( is_array( $unser ) ) {
-                       return $unser['xml'];
+                       if ( isset( $unser['error'] ) ) {
+                               return false;
+                       } elseif ( isset( $unser['xml'] ) ) {
+                               return $unser['xml'];
+                       } else {
+                               // Should never ever reach here.
+                               throw new MWException( "Error unserializing DjVu metadata." );
+                       }
                }
 
                // unserialize failed. Guess it wasn't really serialized after all,
@@ -364,7 +371,8 @@ class DjVuHandler extends ImageHandler {
 
                $xml = $this->getDjVuImage( $image, $path )->retrieveMetaData();
                if ( $xml === false ) {
-                       return false;
+                       // Special value so that we don't repetitively try and decode a broken file.
+                       return serialize( array( 'error' => 'Error extracting metadata' ) );
                } else {
                        return serialize( array( 'xml' => $xml ) );
                }
index ab8fa14..efc02fe 100644 (file)
@@ -573,32 +573,27 @@ abstract class MediaHandler {
        }
 
        /**
-        * Used instead of getLongDesc if there is no handler registered for file.
+        * Short description. Shown on Special:Search results.
         *
         * @param File $file
         * @return string
         */
        function getShortDesc( $file ) {
-               global $wgLang;
-
-               return htmlspecialchars( $wgLang->formatSize( $file->getSize() ) );
+               return self::getGeneralShortDesc( $file );
        }
 
        /**
-        * Short description. Shown on Special:Search results.
+        * Long description. Shown under image on image description page surounded by ().
         *
         * @param File $file
         * @return string
         */
        function getLongDesc( $file ) {
-               global $wgLang;
-
-               return wfMessage( 'file-info', htmlspecialchars( $wgLang->formatSize( $file->getSize() ) ),
-                       $file->getMimeType() )->parse();
+               return self::getGeneralLongDesc( $file );
        }
 
        /**
-        * Long description. Shown under image on image description page surounded by ().
+        * Used instead of getShortDesc if there is no handler registered for file.
         *
         * @param File $file
         * @return string
@@ -606,20 +601,18 @@ abstract class MediaHandler {
        static function getGeneralShortDesc( $file ) {
                global $wgLang;
 
-               return $wgLang->formatSize( $file->getSize() );
+               return htmlspecialchars( $wgLang->formatSize( $file->getSize() ) );
        }
 
        /**
-        * Used instead of getShortDesc if there is no handler registered for file.
+        * Used instead of getLongDesc if there is no handler registered for file.
         *
         * @param File $file
         * @return string
         */
        static function getGeneralLongDesc( $file ) {
-               global $wgLang;
-
-               return wfMessage( 'file-info', $wgLang->formatSize( $file->getSize() ),
-                       $file->getMimeType() )->parse();
+               return wfMessage( 'file-info' )->sizeParams( $file->getSize() )
+                       ->params( $file->getMimeType() )->parse();
        }
 
        /**
@@ -812,4 +805,13 @@ abstract class MediaHandler {
        public function getLength( $file ) {
                return 0.0;
        }
+
+       /**
+        * True if creating thumbnails from the file is large or otherwise resource-intensive.
+        * @param File $file
+        * @return bool
+        */
+       public function isExpensiveToThumbnail( $file ) {
+               return false;
+       }
 }
index 5a10741..e28b38f 100644 (file)
@@ -116,7 +116,7 @@ class SvgHandler extends ImageHandler {
        /**
         * We do not support making animated svg thumbnails
         */
-       function canAnimateThumb( $file ) {
+       function canAnimateThumbnail( $file ) {
                return false;
        }
 
index 6964170..bea6cab 100644 (file)
@@ -27,6 +27,8 @@
  * @ingroup Media
  */
 class TiffHandler extends ExifBitmapHandler {
+       const EXPENSIVE_SIZE_LIMIT = 10485760; // TIFF files over 10M are considered expensive to thumbnail
+
        /**
         * Conversion to PNG for inline display can be disabled here...
         * Note scaling should work with ImageMagick, but may not with GD scaling.
@@ -97,4 +99,8 @@ class TiffHandler extends ExifBitmapHandler {
                        return '';
                }
        }
+
+       public function isExpensiveToThumbnail( $file ) {
+               return $file->getSize() > static::EXPENSIVE_SIZE_LIMIT;
+       }
 }
index 9de840b..7990053 100644 (file)
@@ -419,6 +419,12 @@ class MWMemcached {
                        $this->_debugprint( "get($key)\n" );
                }
 
+               if ( !is_array( $key ) && strval( $key ) === '' ) {
+                       $this->_debugprint( "Skipping key which equals to an empty string" );
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
                if ( !$this->_active ) {
                        wfProfileOut( __METHOD__ );
                        return false;
index bcd5942..483f8b9 100644 (file)
@@ -270,7 +270,6 @@ class SqlBagOStuff extends BagOStuff {
                                                        array( 'keyname' => $key, 'exptime' => $row->exptime ),
                                                        __METHOD__ );
                                                $db->commit( __METHOD__, 'flush' );
-                                               $values[$key] = false;
                                        } else { // HIT
                                                $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
                                        }
@@ -278,7 +277,6 @@ class SqlBagOStuff extends BagOStuff {
                                        $this->handleWriteError( $e, $row->serverIndex );
                                }
                        } else { // MISS
-                               $values[$key] = false;
                                $this->debug( 'get: no matching rows' );
                        }
                }
index d2a20df..66cfd55 100644 (file)
@@ -167,7 +167,6 @@ class Parser {
        var $mLinkID;
        var $mIncludeSizes, $mPPNodeCount, $mGeneratedPPNodeCount, $mHighestExpansionDepth;
        var $mDefaultSort;
-       var $mTplExpandCache; # empty-frame expansion cache
        var $mTplRedirCache, $mTplDomCache, $mHeadings, $mDoubleUnderscores;
        var $mExpensiveFunctionCount; # number of expensive parser function calls
        var $mShowToc, $mForceTocPosition;
@@ -321,7 +320,7 @@ class Parser {
                $this->mStripState = new StripState( $this->mUniqPrefix );
 
                # Clear these on every parse, bug 4549
-               $this->mTplExpandCache = $this->mTplRedirCache = $this->mTplDomCache = array();
+               $this->mTplRedirCache = $this->mTplDomCache = array();
 
                $this->mShowToc = true;
                $this->mForceTocPosition = false;
@@ -618,13 +617,15 @@ class Parser {
        /**
         * Expand templates and variables in the text, producing valid, static wikitext.
         * Also removes comments.
+        * Do not call this function recursively.
         * @param string $text
         * @param Title $title
         * @param ParserOptions $options
         * @param int|null $revid
+        * @param bool|PPFrame $frame
         * @return mixed|string
         */
-       function preprocess( $text, Title $title = null, ParserOptions $options, $revid = null ) {
+       function preprocess( $text, Title $title = null, ParserOptions $options, $revid = null, $frame = false ) {
                wfProfileIn( __METHOD__ );
                $magicScopeVariable = $this->lock();
                $this->startParse( $title, $options, self::OT_PREPROCESS, true );
@@ -633,7 +634,7 @@ class Parser {
                }
                wfRunHooks( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
                wfRunHooks( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) );
-               $text = $this->replaceVariables( $text );
+               $text = $this->replaceVariables( $text, $frame );
                $text = $this->mStripState->unstripBoth( $text );
                wfProfileOut( __METHOD__ );
                return $text;
@@ -2327,13 +2328,13 @@ class Parser {
                $result = $this->closeParagraph();
 
                if ( '*' === $char ) {
-                       $result .= "<ul>\n<li>";
+                       $result .= "<ul><li>";
                } elseif ( '#' === $char ) {
-                       $result .= "<ol>\n<li>";
+                       $result .= "<ol><li>";
                } elseif ( ':' === $char ) {
-                       $result .= "<dl>\n<dd>";
+                       $result .= "<dl><dd>";
                } elseif ( ';' === $char ) {
-                       $result .= "<dl>\n<dt>";
+                       $result .= "<dl><dt>";
                        $this->mDTopen = true;
                } else {
                        $result = '<!-- ERR 1 -->';
@@ -2377,20 +2378,20 @@ class Parser {
         */
        function closeList( $char ) {
                if ( '*' === $char ) {
-                       $text = "</li>\n</ul>";
+                       $text = "</li></ul>";
                } elseif ( '#' === $char ) {
-                       $text = "</li>\n</ol>";
+                       $text = "</li></ol>";
                } elseif ( ':' === $char ) {
                        if ( $this->mDTopen ) {
                                $this->mDTopen = false;
-                               $text = "</dt>\n</dl>";
+                               $text = "</dt></dl>";
                        } else {
-                               $text = "</dd>\n</dl>";
+                               $text = "</dd></dl>";
                        }
                } else {
                        return '<!-- ERR 3 -->';
                }
-               return $text . "\n";
+               return $text;
        }
        /**#@-*/
 
@@ -2488,6 +2489,9 @@ class Parser {
                                }
 
                                # Open prefixes where appropriate.
+                               if (  $lastPrefix && $prefixLength > $commonPrefixLength ) {
+                                       $output .= "\n";
+                               }
                                while ( $prefixLength > $commonPrefixLength ) {
                                        $char = substr( $prefix, $commonPrefixLength, 1 );
                                        $output .= $this->openList( $char );
@@ -2501,6 +2505,9 @@ class Parser {
                                        }
                                        ++$commonPrefixLength;
                                }
+                               if ( !$prefixLength && $lastPrefix ) {
+                                       $output .= "\n";
+                               }
                                $lastPrefix = $prefix2;
                        }
 
@@ -2582,12 +2589,18 @@ class Parser {
                                $this->mInPre = false;
                        }
                        if ( $paragraphStack === false ) {
-                               $output .= $t . "\n";
+                               $output .= $t;
+                               if ( $prefixLength === 0 ) {
+                                       $output .= "\n";
+                               }
                        }
                }
                while ( $prefixLength ) {
                        $output .= $this->closeList( $prefix2[$prefixLength - 1] );
                        --$prefixLength;
+                       if ( !$prefixLength ) {
+                               $output .= "\n";
+                       }
                }
                if ( $this->mLastSection != '' ) {
                        $output .= '</' . $this->mLastSection . '>';
@@ -3562,12 +3575,7 @@ class Parser {
                                $text = $newFrame->expand( $text, PPFrame::RECOVER_ORIG );
                        } elseif ( $titleText !== false && $newFrame->isEmpty() ) {
                                # Expansion is eligible for the empty-frame cache
-                               if ( isset( $this->mTplExpandCache[$titleText] ) ) {
-                                       $text = $this->mTplExpandCache[$titleText];
-                               } else {
-                                       $text = $newFrame->expand( $text );
-                                       $this->mTplExpandCache[$titleText] = $text;
-                               }
+                               $text = $newFrame->cachedExpand( $titleText, $text );
                        } else {
                                # Uncached expansion
                                $text = $newFrame->expand( $text );
index fa73cf2..90617b3 100644 (file)
@@ -663,7 +663,7 @@ class ParserOptions {
         * Generate a hash string with the values set on these ParserOptions
         * for the keys given in the array.
         * This will be used as part of the hash key for the parser cache,
-        * so users sharign the options with vary for the same page share
+        * so users sharing the options with vary for the same page share
         * the same cached data safely.
         *
         * Extensions which require it should install 'PageRenderingHash' hook,
index 931c088..09f714f 100644 (file)
@@ -573,10 +573,22 @@ class ParserOutput extends CacheTime {
                $this->mProperties[$name] = $value;
        }
 
+       /**
+        * @param string $name The property name to look up.
+        *
+        * @return mixed|false The value previously set using setProperty(). False if null or no value
+        * was set for the given property name.
+        *
+        * @note You need to use getProperties() to check for boolean and null properties.
+        */
        public function getProperty( $name ) {
                return isset( $this->mProperties[$name] ) ? $this->mProperties[$name] : false;
        }
 
+       public function unsetProperty( $name ) {
+               unset( $this->mProperties[$name] );
+       }
+
        public function getProperties() {
                if ( !isset( $this->mProperties ) ) {
                        $this->mProperties = array();
@@ -706,7 +718,7 @@ class ParserOutput extends CacheTime {
         *
         * @param string $key The key to look up.
         *
-        * @return mixed The value previously set for the given key using setExtensionData( $key ),
+        * @return mixed|null The value previously set for the given key using setExtensionData()
         *         or null if no value was set for this key.
         */
        public function getExtensionData( $key ) {
index b8e262a..dd5fc4f 100644 (file)
@@ -94,6 +94,11 @@ interface PPFrame {
         */
        function newChild( $args = false, $title = false, $indexOffset = 0 );
 
+       /**
+        * Expand a document tree node, caching the result on its parent with the given key
+        */
+       function cachedExpand( $key, $root, $flags = 0 );
+
        /**
         * Expand a document tree node
         */
@@ -160,6 +165,55 @@ interface PPFrame {
         */
        function isTemplate();
 
+       /**
+        * Set the "volatile" flag.
+        *
+        * Note that this is somewhat of a "hack" in order to make extensions
+        * with side effects (such as Cite) work with the PHP parser. New
+        * extensions should be written in a way that they do not need this
+        * function, because other parsers (such as Parsoid) are not guaranteed
+        * to respect it, and it may be removed in the future.
+        *
+        * @param bool $flag
+        */
+       function setVolatile( $flag = true );
+
+       /**
+        * Get the "volatile" flag.
+        *
+        * Callers should avoid caching the result of an expansion if it has the
+        * volatile flag set.
+        *
+        * @see self::setVolatile()
+        * @return bool
+        */
+       function isVolatile();
+
+       /**
+        * Get the TTL of the frame's output.
+        *
+        * This is the maximum amount of time, in seconds, that this frame's
+        * output should be cached for. A value of null indicates that no
+        * maximum has been specified.
+        *
+        * Note that this TTL only applies to caching frames as parts of pages.
+        * It is not relevant to caching the entire rendered output of a page.
+        *
+        * @return int|null
+        */
+       function getTTL();
+
+       /**
+        * Set the TTL of the output of this frame and all of its ancestors.
+        * Has no effect if the new TTL is greater than the one already set.
+        * Note that it is the caller's responsibility to change the cache
+        * expiry of the page as a whole, if such behavior is desired.
+        *
+        * @see self::getTTL()
+        * @param int $ttl
+        */
+       function setTTL( $ttl );
+
        /**
         * Get a title of frame
         *
index 0d12205..90af670 100644 (file)
@@ -91,7 +91,8 @@ class Preprocessor_DOM implements Preprocessor {
                if ( !$result ) {
                        // Try running the XML through UtfNormal to get rid of invalid characters
                        $xml = UtfNormal::cleanUp( $xml );
-                       // 1 << 19 == XML_PARSE_HUGE, needed so newer versions of libxml2 don't barf when the XML is >256 levels deep
+                       // 1 << 19 == XML_PARSE_HUGE, needed so newer versions of libxml2
+                       // don't barf when the XML is >256 levels deep
                        $result = $dom->loadXML( $xml, 1 << 19 );
                }
                wfProfileOut( __METHOD__ . '-loadXML' );
@@ -982,6 +983,14 @@ class PPFrame_DOM implements PPFrame {
         */
        var $depth;
 
+       private $volatile = false;
+       private $ttl = null;
+
+       /**
+        * @var array
+        */
+       protected $childExpansionCache;
+
        /**
         * Construct a new preprocessor frame.
         * @param Preprocessor $preprocessor The parent preprocessor
@@ -993,6 +1002,7 @@ class PPFrame_DOM implements PPFrame {
                $this->titleCache = array( $this->title ? $this->title->getPrefixedDBkey() : false );
                $this->loopCheckHash = array();
                $this->depth = 0;
+               $this->childExpansionCache = array();
        }
 
        /**
@@ -1042,6 +1052,18 @@ class PPFrame_DOM implements PPFrame {
                return new PPTemplateFrame_DOM( $this->preprocessor, $this, $numberedArgs, $namedArgs, $title );
        }
 
+       /**
+        * @throws MWException
+        * @param string|int $key
+        * @param string|PPNode_DOM|DOMDocument $root
+        * @param int $flags
+        * @return string
+        */
+       function cachedExpand( $key, $root, $flags = 0 ) {
+               // we don't have a parent, so we don't have a cache
+               return $this->expand( $root, $flags );
+       }
+
        /**
         * @throws MWException
         * @param string|PPNode_DOM|DOMDocument $root
@@ -1466,6 +1488,44 @@ class PPFrame_DOM implements PPFrame {
        function getTitle() {
                return $this->title;
        }
+
+       /**
+        * Set the volatile flag
+        *
+        * @param bool $flag
+        */
+       function setVolatile( $flag = true ) {
+               $this->volatile = $flag;
+       }
+
+       /**
+        * Get the volatile flag
+        *
+        * @return bool
+        */
+       function isVolatile() {
+               return $this->volatile;
+       }
+
+       /**
+        * Set the TTL
+        *
+        * @param int $ttl
+        */
+       function setTTL( $ttl ) {
+               if ( $ttl !== null && ( $this->ttl === null || $ttl < $this->ttl ) ) {
+                       $this->ttl = $ttl;
+               }
+       }
+
+       /**
+        * Get the TTL
+        *
+        * @return int|null
+        */
+       function getTTL() {
+               return $this->ttl;
+       }
 }
 
 /**
@@ -1525,6 +1585,24 @@ class PPTemplateFrame_DOM extends PPFrame_DOM {
                return $s;
        }
 
+       /**
+        * @throws MWException
+        * @param string|int $key
+        * @param string|PPNode_DOM|DOMDocument $root
+        * @param int $flags
+        * @return string
+        */
+       function cachedExpand( $key, $root, $flags = 0 ) {
+               if ( isset( $this->parent->childExpansionCache[$key] ) ) {
+                       return $this->parent->childExpansionCache[$key];
+               }
+               $retval = $this->expand( $root, $flags );
+               if ( !$this->isVolatile() ) {
+                       $this->parent->childExpansionCache[$key] = $retval;
+               }
+               return $retval;
+       }
+
        /**
         * Returns true if there are no arguments in this frame
         *
@@ -1602,6 +1680,16 @@ class PPTemplateFrame_DOM extends PPFrame_DOM {
        function isTemplate() {
                return true;
        }
+
+       function setVolatile( $flag = true ) {
+               parent::setVolatile( $flag );
+               $this->parent->setVolatile( $flag );
+       }
+
+       function setTTL( $ttl ) {
+               parent::setTTL( $ttl );
+               $this->parent->setTTL( $ttl );
+       }
 }
 
 /**
index a464461..bc2b686 100644 (file)
@@ -919,6 +919,14 @@ class PPFrame_Hash implements PPFrame {
         */
        var $depth;
 
+       private $volatile = false;
+       private $ttl = null;
+
+       /**
+        * @var array
+        */
+       protected $childExpansionCache;
+
        /**
         * Construct a new preprocessor frame.
         * @param Preprocessor $preprocessor The parent preprocessor
@@ -930,6 +938,7 @@ class PPFrame_Hash implements PPFrame {
                $this->titleCache = array( $this->title ? $this->title->getPrefixedDBkey() : false );
                $this->loopCheckHash = array();
                $this->depth = 0;
+               $this->childExpansionCache = array();
        }
 
        /**
@@ -972,6 +981,18 @@ class PPFrame_Hash implements PPFrame {
                return new PPTemplateFrame_Hash( $this->preprocessor, $this, $numberedArgs, $namedArgs, $title );
        }
 
+       /**
+        * @throws MWException
+        * @param string|int $key
+        * @param string|PPNode_Hash|DOMDocument $root
+        * @param int $flags
+        * @return string
+        */
+       function cachedExpand( $key, $root, $flags = 0 ) {
+               // we don't have a parent, so we don't have a cache
+               return $this->expand( $root, $flags );
+       }
+
        /**
         * @throws MWException
         * @param string|PPNode$root
@@ -1372,6 +1393,44 @@ class PPFrame_Hash implements PPFrame {
        function getTitle() {
                return $this->title;
        }
+
+       /**
+        * Set the volatile flag
+        *
+        * @param bool $flag
+        */
+       function setVolatile( $flag = true ) {
+               $this->volatile = $flag;
+       }
+
+       /**
+        * Get the volatile flag
+        *
+        * @return bool
+        */
+       function isVolatile() {
+               return $this->volatile;
+       }
+
+       /**
+        * Set the TTL
+        *
+        * @param int $ttl
+        */
+       function setTTL( $ttl ) {
+               if ( $ttl !== null && ( $this->ttl === null || $ttl < $this->ttl ) ) {
+                       $this->ttl = $ttl;
+               }
+       }
+
+       /**
+        * Get the TTL
+        *
+        * @return int|null
+        */
+       function getTTL() {
+               return $this->ttl;
+       }
 }
 
 /**
@@ -1426,6 +1485,24 @@ class PPTemplateFrame_Hash extends PPFrame_Hash {
                return $s;
        }
 
+       /**
+        * @throws MWException
+        * @param string|int $key
+        * @param string|PPNode_Hash|DOMDocument $root
+        * @param int $flags
+        * @return string
+        */
+       function cachedExpand( $key, $root, $flags = 0 ) {
+               if ( isset( $this->parent->childExpansionCache[$key] ) ) {
+                       return $this->parent->childExpansionCache[$key];
+               }
+               $retval = $this->expand( $root, $flags );
+               if ( !$this->isVolatile() ) {
+                       $this->parent->childExpansionCache[$key] = $retval;
+               }
+               return $retval;
+       }
+
        /**
         * Returns true if there are no arguments in this frame
         *
@@ -1524,6 +1601,16 @@ class PPTemplateFrame_Hash extends PPFrame_Hash {
        function isTemplate() {
                return true;
        }
+
+       function setVolatile( $flag = true ) {
+               parent::setVolatile( $flag );
+               $this->parent->setVolatile( $flag );
+       }
+
+       function setTTL( $ttl ) {
+               parent::setTTL( $ttl );
+               $this->parent->setTTL( $ttl );
+       }
 }
 
 /**
index 34953c0..f8d48cc 100644 (file)
@@ -53,8 +53,15 @@ abstract class PoolCounter {
 
        /** @var string All workers with the same key share the lock */
        protected $key;
-       /** @var int Maximum number of workers doing the task simultaneously */
+       /** @var int Maximum number of workers working on tasks with the same key simultaneously */
        protected $workers;
+       /**
+        * Maximum number of workers working on this task type, regardless of key.
+        * 0 means unlimited. Max allowed value is 65536.
+        * The way the slot limit is enforced is overzealous - this option should be used with caution.
+        * @var int
+        */
+       protected $slots = 0;
        /** @var int If this number of workers are already working/waiting, fail instead of wait */
        protected $maxqueue;
        /** @var float Maximum time in seconds to wait for the lock */
@@ -66,10 +73,17 @@ abstract class PoolCounter {
         * @param string $key
         */
        protected function __construct( $conf, $type, $key ) {
-               $this->key = $key;
                $this->workers = $conf['workers'];
                $this->maxqueue = $conf['maxqueue'];
                $this->timeout = $conf['timeout'];
+               if ( isset( $conf['slots'] ) ) {
+                       $this->slots = $conf['slots'];
+               }
+
+               if ( $this->slots ) {
+                       $key = $this->hashKeyIntoSlots( $key, $this->slots );
+               }
+               $this->key = $key;
        }
 
        /**
@@ -121,6 +135,20 @@ abstract class PoolCounter {
         * @return Status value is one of Released/NotLocked/Error
         */
        abstract public function release();
+
+       /**
+        * Given a key (any string) and the number of lots, returns a slot number (an integer from the [0..($slots-1)] range).
+        * This is used for a global limit on the number of instances  of a given type that can acquire a lock.
+        * The hashing is deterministic so that PoolCounter::$workers is always an upper limit of how many instances with
+        * the same key can acquire a lock.
+        *
+        * @param string $key PoolCounter instance key (any string)
+        * @param int $slots the number of slots (max allowed value is 65536)
+        * @return int
+        */
+       protected function hashKeyIntoSlots( $key, $slots ) {
+               return hexdec( substr( sha1( $key ), 0, 4 ) ) % $slots;
+       }
 }
 
 // @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
index f6bafd5..9633d0d 100644 (file)
@@ -357,8 +357,8 @@ abstract class Profiler {
  */
 class TransactionProfiler {
        /** @var float seconds */
-       protected $mDBLockThreshold = 5.0;
-       /** @var array DB/server name => (active trx count,timestamp) */
+       protected $mDBLockThreshold = 3.0;
+       /** @var array DB/server name => (active trx count, time, DBs involved) */
        protected $mDBTrxHoldingLocks = array();
        /** @var array DB/server name => list of (function name, elapsed time) */
        protected $mDBTrxMethodTimes = array();
@@ -377,9 +377,13 @@ class TransactionProfiler {
                if ( isset( $this->mDBTrxHoldingLocks[$name] ) ) {
                        ++$this->mDBTrxHoldingLocks[$name]['refs'];
                } else {
-                       $this->mDBTrxHoldingLocks[$name] = array( 'refs' => 1, 'start' => microtime( true ) );
+                       $this->mDBTrxHoldingLocks[$name] = array(
+                               'refs' => 1, 'start' => microtime( true ), 'conns' => array() );
                        $this->mDBTrxMethodTimes[$name] = array();
                }
+               foreach ( $this->mDBTrxHoldingLocks as $name => &$info ) {
+                       $info['conns'][$name] = 1; // track all DBs in transactions for this transaction
+               }
        }
 
        /**
@@ -424,15 +428,15 @@ class TransactionProfiler {
                if ( --$this->mDBTrxHoldingLocks[$name]['refs'] <= 0 ) {
                        $slow = false;
                        foreach ( $this->mDBTrxMethodTimes[$name] as $info ) {
-                               list( $method, $realtime ) = $info;
+                               $realtime = $info[1];
                                if ( $realtime >= $this->mDBLockThreshold ) {
                                        $slow = true;
                                        break;
                                }
                        }
                        if ( $slow ) {
-                               $dbs = implode( ', ', array_keys( $this->mDBTrxHoldingLocks ) );
-                               $msg = "Sub-optimal transaction on DB(s) {$dbs}:\n";
+                               $dbs = implode( ', ', array_keys( $this->mDBTrxHoldingLocks[$name]['conns'] ) );
+                               $msg = "Sub-optimal transaction on DB(s) [{$dbs}]:\n";
                                foreach ( $this->mDBTrxMethodTimes[$name] as $i => $info ) {
                                        list( $method, $realtime ) = $info;
                                        $msg .= sprintf( "%d\t%.6f\t%s\n", $i, $realtime, $method );
index 3f17bcd..18e6003 100644 (file)
@@ -46,7 +46,7 @@ abstract class MachineReadableRCFeedFormatter implements RCFeedFormatter {
                        // but there is no real reason not to expose it in other cases,
                        // and I can see how this may be potentially useful for clients.
                        'id' => $attrib['rc_id'],
-                       'type' => $attrib['rc_type'],
+                       'type' => RecentChange::parseFromRCType( $attrib['rc_type'] ),
                        'namespace' => $rc->getTitle()->getNamespace(),
                        'title' => $rc->getTitle()->getPrefixedText(),
                        'comment' => $attrib['rc_comment'],
@@ -87,6 +87,7 @@ abstract class MachineReadableRCFeedFormatter implements RCFeedFormatter {
                                break;
 
                        case RC_LOG:
+                               $packet['log_id'] = $attrib['rc_logid'];
                                $packet['log_type'] = $attrib['rc_log_type'];
                                $packet['log_action'] = $attrib['rc_log_action'];
                                if ( $attrib['rc_params'] ) {
index 680bd99..5ac874d 100644 (file)
@@ -35,6 +35,9 @@ class ResourceLoader {
        /** @var array */
        protected static $requiredSourceProperties = array( 'loadScript' );
 
+       /** @var bool */
+       protected static $debugMode = null;
+
        /** @var array Module name/ResourceLoaderModule object pairs */
        protected $modules = array();
 
@@ -145,9 +148,10 @@ class ResourceLoader {
         *
         * @param string $filter Name of filter to run
         * @param string $data Text to filter, such as JavaScript or CSS text
+        * @param string $cacheReport Whether to include the cache key report
         * @return string Filtered data, or a comment containing an error message
         */
-       protected function filter( $filter, $data ) {
+       public function filter( $filter, $data, $cacheReport = true ) {
                global $wgResourceLoaderMinifierStatementsOnOwnLine, $wgResourceLoaderMinifierMaxLineLength;
                wfProfileIn( __METHOD__ );
 
@@ -179,11 +183,15 @@ class ResourceLoader {
                                                $wgResourceLoaderMinifierStatementsOnOwnLine,
                                                $wgResourceLoaderMinifierMaxLineLength
                                        );
-                                       $result .= "\n/* cache key: $key */";
+                                       if ( $cacheReport ) {
+                                               $result .= "\n/* cache key: $key */";
+                                       }
                                        break;
                                case 'minify-css':
                                        $result = CSSMin::minify( $data );
-                                       $result .= "\n/* cache key: $key */";
+                                       if ( $cacheReport ) {
+                                               $result .= "\n/* cache key: $key */";
+                                       }
                                        break;
                        }
 
@@ -814,7 +822,7 @@ class ResourceLoader {
                                        // Don't create empty stylesheets like array( '' => '' ) for modules
                                        // that don't *have* any stylesheets (bug 38024).
                                        $stylePairs = $module->getStyles( $context );
-                                       if ( count ( $stylePairs ) ) {
+                                       if ( count( $stylePairs ) ) {
                                                // If we are in debug mode without &only= set, we'll want to return an array of URLs
                                                // See comment near shouldIncludeScripts() for more details
                                                if ( $context->getDebug() && !$context->getOnly() && $module->supportsURLLoading() ) {
@@ -988,7 +996,7 @@ class ResourceLoader {
         * @param array $stylePairs Array keyed by media type containing (arrays of) CSS strings
         * @return array
         */
-       private static function makeCombinedStyles( array $stylePairs ) {
+       public static function makeCombinedStyles( array $stylePairs ) {
                $out = array();
                foreach ( $stylePairs as $media => $styles ) {
                        // ResourceLoaderFileModule::getStyle can return the styles
@@ -1074,15 +1082,15 @@ class ResourceLoader {
         * Returns JS code which calls mw.loader.register with the given
         * parameters. Has three calling conventions:
         *
-        *   - ResourceLoader::makeLoaderRegisterScript( $name, $version, $dependencies, $group, $source ):
+        *   - ResourceLoader::makeLoaderRegisterScript( $name, $version, $dependencies, $group, $source, $skip ):
         *       Register a single module.
         *
         *   - ResourceLoader::makeLoaderRegisterScript( array( $name1, $name2 ) ):
         *       Register modules with the given names.
         *
         *   - ResourceLoader::makeLoaderRegisterScript( array(
-        *        array( $name1, $version1, $dependencies1, $group1, $source1 ),
-        *        array( $name2, $version2, $dependencies1, $group2, $source2 ),
+        *        array( $name1, $version1, $dependencies1, $group1, $source1, $skip1 ),
+        *        array( $name2, $version2, $dependencies1, $group2, $source2, $skip2 ),
         *        ...
         *     ) ):
         *        Registers modules with the given names and parameters.
@@ -1092,10 +1100,11 @@ class ResourceLoader {
         * @param array $dependencies List of module names on which this module depends
         * @param string $group Group which the module is in
         * @param string $source Source of the module, or 'local' if not foreign
+        * @param string $skip Script body of the skip function
         * @return string
         */
        public static function makeLoaderRegisterScript( $name, $version = null,
-               $dependencies = null, $group = null, $source = null
+               $dependencies = null, $group = null, $source = null, $skip = null
        ) {
                if ( is_array( $name ) ) {
                        return Xml::encodeJsCall(
@@ -1107,7 +1116,7 @@ class ResourceLoader {
                        $version = (int)$version > 1 ? (int)$version : 1;
                        return Xml::encodeJsCall(
                                'mw.loader.register',
-                               array( $name, $version, $dependencies, $group, $source ),
+                               array( $name, $version, $dependencies, $group, $source, $skip ),
                                ResourceLoader::inDebugMode()
                        );
                }
@@ -1201,13 +1210,24 @@ class ResourceLoader {
         * @return bool
         */
        public static function inDebugMode() {
-               global $wgRequest, $wgResourceLoaderDebug;
-               static $retval = null;
-               if ( is_null( $retval ) ) {
-                       $retval = $wgRequest->getFuzzyBool( 'debug',
-                               $wgRequest->getCookie( 'resourceLoaderDebug', '', $wgResourceLoaderDebug ) );
+               if ( self::$debugMode === null ) {
+                       global $wgRequest, $wgResourceLoaderDebug;
+                       self::$debugMode = $wgRequest->getFuzzyBool( 'debug',
+                               $wgRequest->getCookie( 'resourceLoaderDebug', '', $wgResourceLoaderDebug )
+                       );
                }
-               return $retval;
+               return self::$debugMode;
+       }
+
+       /**
+        * Reset static members used for caching.
+        *
+        * Global state and $wgRequest are evil, but we're using it right
+        * now and sometimes we need to be able to force ResourceLoader to
+        * re-evaluate the context because it has changed (e.g. in the test suite).
+        */
+       public static function clearCache() {
+               self::$debugMode = null;
        }
 
        /**
index 382bdd9..3a6d5d2 100644 (file)
@@ -106,6 +106,11 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         */
        protected $dependencies = array();
 
+       /**
+        * @var string File name containing the body of the skip function
+        */
+       protected $skipFunction = null;
+
        /**
         * @var array List of message keys used by this module
         * @par Usage:
@@ -176,6 +181,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *         'remoteBasePath' => [base path],
         *         // Equivalent of remoteBasePath, but relative to $wgExtensionAssetsPath
         *         'remoteExtPath' => [base path],
+        *         // Equivalent of remoteBasePath, but relative to $wgStylePath
+        *         'remoteSkinPath' => [base path],
         *         // Scripts to always include
         *         'scripts' => [file path string or array of file path strings],
         *         // Scripts to include in specific language contexts
@@ -204,6 +211,10 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *         'group' => [group name string],
         *         // Position on the page to load this module at
         *         'position' => ['bottom' (default) or 'top']
+        *         // Function that, if it returns true, makes the loader skip this module.
+        *         // The file must contain valid JavaScript for execution in a private function.
+        *         // The file must not contain the "function () {" and "}" wrapper though.
+        *         'skipFunction' => [file path]
         *     )
         * @endcode
         */
@@ -223,6 +234,11 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        $this->remoteBasePath = $wgExtensionAssetsPath . '/' . $options['remoteExtPath'];
                }
 
+               if ( isset( $options['remoteSkinPath'] ) ) {
+                       global $wgStylePath;
+                       $this->remoteBasePath = $wgStylePath . '/' . $options['remoteSkinPath'];
+               }
+
                foreach ( $options as $member => $option ) {
                        switch ( $member ) {
                                // Lists of file paths
@@ -267,6 +283,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                case 'position':
                                case 'localBasePath':
                                case 'remoteBasePath':
+                               case 'skipFunction':
                                        $this->{$member} = (string)$option;
                                        break;
                                // Single booleans
@@ -312,22 +329,22 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        }
 
        /**
-        * Gets loader script.
+        * Get loader script.
         *
-        * @return string JavaScript code to be added to startup module
+        * @return string|false JavaScript code to be added to startup module
         */
        public function getLoaderScript() {
-               if ( count( $this->loaderScripts ) == 0 ) {
+               if ( count( $this->loaderScripts ) === 0 ) {
                        return false;
                }
                return $this->readScriptFiles( $this->loaderScripts );
        }
 
        /**
-        * Gets all styles for a given context concatenated together.
+        * Get all styles for a given context.
         *
-        * @param ResourceLoaderContext $context Context in which to generate styles
-        * @return string CSS code for $context
+        * @param ResourceLoaderContext $context
+        * @return array CSS code for $context as an associative array mapping media type to CSS text.
         */
        public function getStyles( ResourceLoaderContext $context ) {
                $styles = $this->readStyleFiles(
@@ -410,6 +427,28 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                return $this->dependencies;
        }
 
+       /**
+        * Get the skip function.
+        *
+        * @return string|null
+        */
+       public function getSkipFunction() {
+               if ( !$this->skipFunction ) {
+                       return null;
+               }
+
+               global $wgResourceLoaderValidateStaticJS;
+               $localPath = $this->getLocalPath( $this->skipFunction );
+               if ( !file_exists( $localPath ) ) {
+                       throw new MWException( __METHOD__ . ": skip function file not found: \"$localPath\"" );
+               }
+               $contents = file_get_contents( $localPath );
+               if ( $wgResourceLoaderValidateStaticJS ) {
+                       $contents = $this->validateScriptFile( $fileName, $contents );
+               }
+               return $contents;
+       }
+
        /**
         * @return bool
         */
@@ -463,6 +502,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        self::tryForKey( $this->skinScripts, $context->getSkin(), 'default' ),
                        $this->loaderScripts
                );
+               if ( $this->skipFunction ) {
+                       $files[] = $this->skipFunction;
+               }
                $files = array_map( array( $this, 'getLocalPath' ), $files );
                // File deps need to be treated separately because they're already prefixed
                $files = array_merge( $files, $this->getFileDependencies( $context->getSkin() ) );
@@ -511,6 +553,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        'targets',
                        'group',
                        'position',
+                       'skipFunction',
                        'localBasePath',
                        'remoteBasePath',
                        'debugRaw',
@@ -581,13 +624,13 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        }
 
        /**
-        * Gets a list of element that match a key, optionally using a fallback key.
+        * Get a list of element that match a key, optionally using a fallback key.
         *
         * @param array $list List of lists to select from
         * @param string $key Key to look for in $map
         * @param string $fallback Key to look for in $list if $key doesn't exist
         * @return array List of elements from $map which matched $key or $fallback,
-        *     or an empty list in case of no match
+        *  or an empty list in case of no match
         */
        protected static function tryForKey( array $list, $key, $fallback = null ) {
                if ( isset( $list[$key] ) && is_array( $list[$key] ) ) {
@@ -602,7 +645,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        }
 
        /**
-        * Gets a list of file paths for all scripts in this module, in order of propper execution.
+        * Get a list of file paths for all scripts in this module, in order of proper execution.
         *
         * @param ResourceLoaderContext $context
         * @return array List of file paths
@@ -621,12 +664,12 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        }
 
        /**
-        * Gets a list of file paths for all styles in this module, in order of propper inclusion.
+        * Get a list of file paths for all styles in this module, in order of proper inclusion.
         *
         * @param ResourceLoaderContext $context
         * @return array List of file paths
         */
-       protected function getStyleFiles( ResourceLoaderContext $context ) {
+       public function getStyleFiles( ResourceLoaderContext $context ) {
                return array_merge_recursive(
                        self::collateFilePathListByOption( $this->styles, 'media', 'all' ),
                        self::collateFilePathListByOption(
@@ -638,20 +681,61 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        }
 
        /**
-        * Returns all style files used by this module
+        * Gets a list of file paths for all skin styles in the module used by
+        * the skin.
+        *
+        * @param string $skinName The name of the skin
+        * @return array A list of file paths collated by media type
+        */
+       protected function getSkinStyleFiles( $skinName ) {
+               return self::collateFilePathListByOption(
+                       self::tryForKey( $this->skinStyles, $skinName ),
+                       'media',
+                       'all'
+               );
+       }
+
+       /**
+        * Gets a list of file paths for all skin style files in the module,
+        * for all available skins.
+        *
+        * @return array A list of file paths collated by media type
+        */
+       protected function getAllSkinStyleFiles() {
+               $styleFiles = array();
+               $internalSkinNames = array_keys( Skin::getSkinNames() );
+               $internalSkinNames[] = 'default';
+
+               foreach ( $internalSkinNames as $internalSkinName ) {
+                       $styleFiles = array_merge_recursive(
+                               $styleFiles,
+                               $this->getSkinStyleFiles( $internalSkinName )
+                       );
+               }
+
+               return $styleFiles;
+       }
+
+       /**
+        * Returns all style files and all skin style files used by this module.
+        *
         * @return array
         */
        public function getAllStyleFiles() {
-               $files = array();
-               foreach ( (array)$this->styles as $key => $value ) {
-                       if ( is_array( $value ) ) {
-                               $path = $key;
-                       } else {
-                               $path = $value;
+               $collatedStyleFiles = array_merge_recursive(
+                       self::collateFilePathListByOption( $this->styles, 'media', 'all' ),
+                       $this->getAllSkinStyleFiles()
+               );
+
+               $result = array();
+
+               foreach ( $collatedStyleFiles as $media => $styleFiles ) {
+                       foreach ( $styleFiles as $styleFile ) {
+                               $result[] = $this->getLocalPath( $styleFile );
                        }
-                       $files[] = $this->getLocalPath( $path );
                }
-               return $files;
+
+               return $result;
        }
 
        /**
@@ -696,7 +780,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @return array List of concatenated and remapped CSS data from $styles,
         *     keyed by media type
         */
-       protected function readStyleFiles( array $styles, $flip ) {
+       public function readStyleFiles( array $styles, $flip ) {
                if ( empty( $styles ) ) {
                        return array();
                }
index e016a33..eb1461f 100644 (file)
@@ -62,6 +62,6 @@ class ResourceLoaderLESSFunctions {
 
                $data = CSSMin::encodeImageAsDataURI( $file );
                $less->addParsedFile( $file );
-               return 'url(' . $data . ')';
+               return CSSMin::buildUrlValue( $data );
        }
 }
index 9ddd184..f636105 100644 (file)
@@ -293,6 +293,24 @@ abstract class ResourceLoaderModule {
                return $this->targets;
        }
 
+       /**
+        * Get the skip function.
+        *
+        * Modules that provide fallback functionality can provide a "skip function". This
+        * function, if provided, will be passed along to the module registry on the client.
+        * When this module is loaded (either directly or as a dependency of another module),
+        * then this function is executed first. If the function returns true, the module will
+        * instantly be considered "ready" without requesting the associated module resources.
+        *
+        * The value returned here must be valid javascript for execution in a private function.
+        * It must not contain the "function () {" and "}" wrapper though.
+        *
+        * @return string|null A JavaScript function body returning a boolean value, or null
+        */
+       public function getSkipFunction() {
+               return null;
+       }
+
        /**
         * Get the files this module depends on indirectly for a given skin.
         * Currently these are only image files referenced by the module's CSS.
index 63a444b..8a936c6 100644 (file)
@@ -222,12 +222,24 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
 
                        // FIXME: Convert to numbers, wfTimestamp always gives us stings, even for TS_UNIX
 
+                       $skipFunction = $module->getSkipFunction();
+                       if ( $skipFunction !== null && !ResourceLoader::inDebugMode() ) {
+                               $skipFunction = $resourceLoader->filter( 'minify-js',
+                                       $skipFunction,
+                                       // There will potentially be lots of these little string in the registrations
+                                       // manifest, we don't want to blow up the startup module with
+                                       // "/* cache key: ... */" all over it in non-debug mode.
+                                       /* cacheReport = */ false
+                               );
+                       }
+
                        $registryData[ $name ] = array(
                                'version' => $mtime,
                                'dependencies' => $module->getDependencies(),
                                'group' => $module->getGroup(),
                                'source' => $module->getSource(),
                                'loader' => $module->getLoaderScript(),
+                               'skip' => $skipFunction,
                        );
                }
 
@@ -255,17 +267,25 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        if (
                                !count( $data['dependencies'] ) &&
                                $data['group'] === null &&
-                               $data['source'] === 'local'
+                               $data['source'] === 'local' &&
+                               $data['skip'] === null
                        ) {
-                               // Modules without dependencies, a group or a foreign source;
+                               // Modules with no dependencies, group, foreign source or skip function;
                                // call mw.loader.register(name, timestamp)
                                $registrations[] = array( $name, $data['version'] );
-                       } elseif ( $data['group'] === null && $data['source'] === 'local' ) {
-                               // Modules with dependencies but no group or foreign source;
+                       } elseif (
+                               $data['group'] === null &&
+                               $data['source'] === 'local' &&
+                               $data['skip'] === null
+                       ) {
+                               // Modules with dependencies but no group, foreign source or skip function;
                                // call mw.loader.register(name, timestamp, dependencies)
                                $registrations[] = array( $name, $data['version'], $data['dependencies'] );
-                       } elseif ( $data['source'] === 'local' ) {
-                               // Modules with a group but no foreign source;
+                       } elseif (
+                               $data['source'] === 'local' &&
+                               $data['skip'] === null
+                       ) {
+                               // Modules with a group but no foreign source or skip function;
                                // call mw.loader.register(name, timestamp, dependencies, group)
                                $registrations[] = array(
                                        $name,
@@ -273,8 +293,8 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                                        $data['dependencies'],
                                        $data['group']
                                );
-                       } else {
-                               // Modules with a foreign source;
+                       } elseif ( $data['skip'] === null ) {
+                               // Modules with a foreign source but no skip function;
                                // call mw.loader.register(name, timestamp, dependencies, group, source)
                                $registrations[] = array(
                                        $name,
@@ -283,6 +303,17 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                                        $data['group'],
                                        $data['source']
                                );
+                       } else {
+                               // Modules with a skip function;
+                               // call mw.loader.register(name, timestamp, dependencies, group, source, skip)
+                               $registrations[] = array(
+                                       $name,
+                                       $data['version'],
+                                       $data['dependencies'],
+                                       $data['group'],
+                                       $data['source'],
+                                       $data['skip']
+                               );
                        }
                }
 
index 7e0e45d..e7a09d7 100644 (file)
@@ -32,7 +32,7 @@
  */
 class RevDelRevisionList extends RevDelList {
        /** @var int */
-       protected $currentRevId;
+       var $currentRevId;
 
        public function getType() {
                return 'revision';
@@ -148,7 +148,8 @@ class RevDelRevisionList extends RevDelList {
  * Item class for a live revision table row
  */
 class RevDelRevisionItem extends RevDelItem {
-       protected $revision;
+       /** @var Revision */
+       var $revision;
 
        public function __construct( $list, $row ) {
                parent::__construct( $list, $row );
@@ -472,13 +473,13 @@ class RevDelArchivedRevisionItem extends RevDelArchiveItem {
  */
 class RevDelFileList extends RevDelList {
        /** @var array */
-       protected $storeBatch;
+       var $storeBatch;
 
        /** @var array */
-       protected $deleteBatch;
+       var $deleteBatch;
 
        /** @var array */
-       protected $cleanupBatch;
+       var $cleanupBatch;
 
        public function getType() {
                return 'oldimage';
@@ -578,7 +579,7 @@ class RevDelFileList extends RevDelList {
  */
 class RevDelFileItem extends RevDelItem {
        /** @var File */
-       protected $file;
+       var $file;
 
        public function __construct( $list, $row ) {
                parent::__construct( $list, $row );
index 907047e..4663ab8 100644 (file)
@@ -368,20 +368,8 @@ class SearchEngine {
         * @return array
         */
        public static function userNamespaces( $user ) {
-               global $wgSearchEverythingOnlyLoggedIn;
-
-               $searchableNamespaces = SearchEngine::searchableNamespaces();
-
-               // get search everything preference, that can be set to be read for logged-in users
-               // it overrides other options
-               if ( !$wgSearchEverythingOnlyLoggedIn || $user->isLoggedIn() ) {
-                       if ( $user->getOption( 'searcheverything' ) ) {
-                               return array_keys( $searchableNamespaces );
-                       }
-               }
-
                $arr = array();
-               foreach ( $searchableNamespaces as $ns => $name ) {
+               foreach ( SearchEngine::searchableNamespaces() as $ns => $name ) {
                        if ( $user->getOption( 'searchNs' . $ns ) ) {
                                $arr[] = $ns;
                        }
@@ -431,17 +419,6 @@ class SearchEngine {
                return $formatted;
        }
 
-       /**
-        * Return the help namespaces to be shown on Special:Search
-        *
-        * @return array
-        */
-       public static function helpNamespaces() {
-               global $wgNamespacesToBeSearchedHelp;
-
-               return array_keys( $wgNamespacesToBeSearchedHelp, true );
-       }
-
        /**
         * Return a 'cleaned up' search string
         *
index 4960c42..0d1663f 100644 (file)
@@ -162,9 +162,9 @@ class SearchMssql extends SearchDatabase {
                        }
                }
 
-               $searchon = $this->db->strencode( join( ',', $q ) );
+               $searchon = $this->db->addQuotes( join( ',', $q ) );
                $field = $this->getIndexField( $fulltext );
-               return "$field, '$searchon'";
+               return "$field, $searchon";
        }
 
        /**
index 77a0c43..8ff2640 100644 (file)
@@ -125,9 +125,9 @@ class SearchMySQL extends SearchDatabase {
                        wfDebug( __METHOD__ . ": Can't understand search query '{$filteredText}'\n" );
                }
 
-               $searchon = $this->db->strencode( $searchon );
+               $searchon = $this->db->addQuotes( $searchon );
                $field = $this->getIndexField( $fulltext );
-               return " MATCH($field) AGAINST('$searchon' IN BOOLEAN MODE) ";
+               return " MATCH($field) AGAINST($searchon IN BOOLEAN MODE) ";
        }
 
        function regexTerm( $string, $wildcard ) {
index 62fb236..8e820f3 100644 (file)
@@ -115,9 +115,9 @@ class SearchSqlite extends SearchDatabase {
                        wfDebug( __METHOD__ . ": Can't understand search query '{$filteredText}'\n" );
                }
 
-               $searchon = $this->db->strencode( $searchon );
+               $searchon = $this->db->addQuotes( $searchon );
                $field = $this->getIndexField( $fulltext );
-               return " $field MATCH '$searchon' ";
+               return " $field MATCH $searchon ";
        }
 
        function regexTerm( $string, $wildcard ) {
index f7c95d1..ad1ee36 100644 (file)
@@ -412,23 +412,16 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        unset( $legendItems['unpatrolled'] );
                }
                foreach ( $legendItems as $key => $item ) { # generate items of the legend
-                       $label = $item['title'];
+                       $label = isset( $item['legend'] ) ? $item['legend'] : $item['title'];
                        $letter = $item['letter'];
                        $cssClass = isset( $item['class'] ) ? $item['class'] : $key;
 
                        $legend .= Html::element( 'dt',
                                array( 'class' => $cssClass ), $context->msg( $letter )->text()
+                       ) . "\n" .
+                       Html::rawElement( 'dd', array(),
+                               $context->msg( $label )->parse()
                        ) . "\n";
-                       if ( $key === 'newpage' ) {
-                               $legend .= Html::openElement( 'dd' );
-                               $legend .= $context->msg( $label )->escaped();
-                               $legend .= ' ' . $context->msg( 'recentchanges-legend-newpage' )->parse();
-                               $legend .= Html::closeElement( 'dd' ) . "\n";
-                       } else {
-                               $legend .= Html::element( 'dd', array(),
-                                       $context->msg( $label )->text()
-                               ) . "\n";
-                       }
                }
                # (+-123)
                $legend .= Html::rawElement( 'dt',
index 82d6177..da51a33 100644 (file)
@@ -45,12 +45,6 @@ class SpecialPage {
        // Listed in Special:Specialpages?
        private $mListed;
 
-       // Function name called by the default execute()
-       private $mFunction;
-
-       // File which needs to be included before the function above can be called
-       private $mFile;
-
        // Whether or not this special page is being included from an article
        protected $mIncluding;
 
@@ -107,30 +101,18 @@ class SpecialPage {
         * @param string $name Name of the special page, as seen in links and URLs
         * @param string $restriction User right required, e.g. "block" or "delete"
         * @param bool $listed Whether the page is listed in Special:Specialpages
-        * @param callable|bool $function Function called by execute(). By default
-        *   it is constructed from $name
-        * @param string $file File which is included by execute(). It is also
-        *   constructed from $name by default
+        * @param callable|bool $function unused
+        * @param string $file unused
         * @param bool $includable Whether the page can be included in normal pages
         */
        public function __construct(
                $name = '', $restriction = '', $listed = true,
-               $function = false, $file = 'default', $includable = false
+               $function = false, $file = '', $includable = false
        ) {
                $this->mName = $name;
                $this->mRestriction = $restriction;
                $this->mListed = $listed;
                $this->mIncludable = $includable;
-               if ( !$function ) {
-                       $this->mFunction = 'wfSpecial' . $name;
-               } else {
-                       $this->mFunction = $function;
-               }
-               if ( $file === 'default' ) {
-                       $this->mFile = __DIR__ . "/specials/Special$name.php";
-               } else {
-                       $this->mFile = $file;
-               }
        }
 
        /**
@@ -347,6 +329,25 @@ class SpecialPage {
                }
        }
 
+       /**
+        * Return an array of subpages beginning with $search that this special page will accept.
+        *
+        * For example, if a page supports subpages "foo", "bar" and "baz" (as in Special:PageName/foo,
+        * etc.):
+        *
+        *   - `prefixSearchSubpages( "ba" )` should return `array( "bar", "baz" )`
+        *   - `prefixSearchSubpages( "f" )` should return `array( "foo" )`
+        *   - `prefixSearchSubpages( "z" )` should return `array()`
+        *   - `prefixSearchSubpages( "" )` should return `array( foo", "bar", "baz" )`
+        *
+        * @param string $search Prefix to search for
+        * @param integer $limit Maximum number of results to return
+        * @return string[] Matching subpages
+        */
+       public function prefixSearchSubpages( $search, $limit = 10 ) {
+               return array();
+       }
+
        /**
         * Sets headers - this should be called from the execute() method of all derived classes!
         */
@@ -414,7 +415,7 @@ class SpecialPage {
 
        /**
         * Default execute method
-        * Checks user permissions, calls the function given in mFunction
+        * Checks user permissions
         *
         * This must be overridden by subclasses; it will be made abstract in a future version
         *
@@ -423,14 +424,7 @@ class SpecialPage {
        public function execute( $subPage ) {
                $this->setHeaders();
                $this->checkPermissions();
-
-               $func = $this->mFunction;
-               // only load file if the function does not exist
-               if ( !is_callable( $func ) && $this->mFile ) {
-                       require_once $this->mFile;
-               }
                $this->outputHeader();
-               call_user_func( $func, $subPage, $this );
        }
 
        /**
@@ -580,6 +574,15 @@ class SpecialPage {
                return $this->getContext()->getLanguage();
        }
 
+       /**
+        * Shortcut to get main config object
+        * @return Config
+        * @since 1.24
+        */
+       public function getConfig() {
+               return $this->getContext()->getConfig();
+       }
+
        /**
         * Return the full title, including $par
         *
diff --git a/includes/specials/SpecialAllMessages.php b/includes/specials/SpecialAllMessages.php
new file mode 100644 (file)
index 0000000..d44b94e
--- /dev/null
@@ -0,0 +1,483 @@
+<?php
+/**
+ * Implements Special:Allmessages
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Use this special page to get a list of the MediaWiki system messages.
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+class SpecialAllMessages extends SpecialPage {
+       /**
+        * @var AllmessagesTablePager
+        */
+       protected $table;
+
+       /**
+        * Constructor
+        */
+       public function __construct() {
+               parent::__construct( 'Allmessages' );
+       }
+
+       /**
+        * Show the special page
+        *
+        * @param string $par Parameter passed to the page or null
+        */
+       public function execute( $par ) {
+               $request = $this->getRequest();
+               $out = $this->getOutput();
+
+               $this->setHeaders();
+
+               global $wgUseDatabaseMessages;
+               if ( !$wgUseDatabaseMessages ) {
+                       $out->addWikiMsg( 'allmessagesnotsupportedDB' );
+
+                       return;
+               } else {
+                       $this->outputHeader( 'allmessagestext' );
+               }
+
+               $out->addModuleStyles( 'mediawiki.special' );
+
+               $this->table = new AllmessagesTablePager(
+                       $this,
+                       array(),
+                       wfGetLangObj( $request->getVal( 'lang', $par ) )
+               );
+
+               $this->langcode = $this->table->lang->getCode();
+
+               $out->addHTML( $this->table->buildForm() .
+                       $this->table->getNavigationBar() .
+                       $this->table->getBody() .
+                       $this->table->getNavigationBar() );
+       }
+
+       protected function getGroupName() {
+               return 'wiki';
+       }
+}
+
+/**
+ * Use TablePager for prettified output. We have to pretend that we're
+ * getting data from a table when in fact not all of it comes from the database.
+ */
+class AllMessagesTablePager extends TablePager {
+       protected $filter, $prefix, $langcode, $displayPrefix;
+
+       public $mLimitsShown;
+
+       /**
+        * @var Language
+        */
+       public $lang;
+
+       /**
+        * @var null|bool
+        */
+       public $custom;
+
+       function __construct( $page, $conds, $langObj = null ) {
+               parent::__construct( $page->getContext() );
+               $this->mIndexField = 'am_title';
+               $this->mPage = $page;
+               $this->mConds = $conds;
+               $this->mDefaultDirection = true; // always sort ascending
+               $this->mLimitsShown = array( 20, 50, 100, 250, 500, 5000 );
+
+               global $wgContLang;
+
+               $this->talk = $this->msg( 'talkpagelinktext' )->escaped();
+
+               $this->lang = ( $langObj ? $langObj : $wgContLang );
+               $this->langcode = $this->lang->getCode();
+               $this->foreign = $this->langcode !== $wgContLang->getCode();
+
+               $request = $this->getRequest();
+
+               $this->filter = $request->getVal( 'filter', 'all' );
+               if ( $this->filter === 'all' ) {
+                       $this->custom = null; // So won't match in either case
+               } else {
+                       $this->custom = ( $this->filter === 'unmodified' );
+               }
+
+               $prefix = $this->getLanguage()->ucfirst( $request->getVal( 'prefix', '' ) );
+               $prefix = $prefix !== '' ?
+                       Title::makeTitleSafe( NS_MEDIAWIKI, $request->getVal( 'prefix', null ) ) :
+                       null;
+
+               if ( $prefix !== null ) {
+                       $this->displayPrefix = $prefix->getDBkey();
+                       $this->prefix = '/^' . preg_quote( $this->displayPrefix ) . '/i';
+               } else {
+                       $this->displayPrefix = false;
+                       $this->prefix = false;
+               }
+
+               // The suffix that may be needed for message names if we're in a
+               // different language (eg [[MediaWiki:Foo/fr]]: $suffix = '/fr'
+               if ( $this->foreign ) {
+                       $this->suffix = '/' . $this->langcode;
+               } else {
+                       $this->suffix = '';
+               }
+       }
+
+       function buildForm() {
+               global $wgScript;
+
+               $attrs = array( 'id' => 'mw-allmessages-form-lang', 'name' => 'lang' );
+               $msg = wfMessage( 'allmessages-language' );
+               $langSelect = Xml::languageSelector( $this->langcode, false, null, $attrs, $msg );
+
+               $out = Xml::openElement( 'form', array(
+                               'method' => 'get',
+                               'action' => $wgScript,
+                               'id' => 'mw-allmessages-form'
+                       ) ) .
+                       Xml::fieldset( $this->msg( 'allmessages-filter-legend' )->text() ) .
+                       Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
+                       Xml::openElement( 'table', array( 'class' => 'mw-allmessages-table' ) ) . "\n" .
+                       '<tr>
+                               <td class="mw-label">' .
+                       Xml::label( $this->msg( 'allmessages-prefix' )->text(), 'mw-allmessages-form-prefix' ) .
+                       "</td>\n
+                       <td class=\"mw-input\">" .
+                       Xml::input(
+                               'prefix',
+                               20,
+                               str_replace( '_', ' ', $this->displayPrefix ),
+                               array( 'id' => 'mw-allmessages-form-prefix' )
+                       ) .
+                       "</td>\n
+                       </tr>
+                       <tr>\n
+                       <td class='mw-label'>" .
+                       $this->msg( 'allmessages-filter' )->escaped() .
+                       "</td>\n
+                               <td class='mw-input'>" .
+                       Xml::radioLabel( $this->msg( 'allmessages-filter-unmodified' )->text(),
+                               'filter',
+                               'unmodified',
+                               'mw-allmessages-form-filter-unmodified',
+                               ( $this->filter === 'unmodified' )
+                       ) .
+                       Xml::radioLabel( $this->msg( 'allmessages-filter-all' )->text(),
+                               'filter',
+                               'all',
+                               'mw-allmessages-form-filter-all',
+                               ( $this->filter === 'all' )
+                       ) .
+                       Xml::radioLabel( $this->msg( 'allmessages-filter-modified' )->text(),
+                               'filter',
+                               'modified',
+                               'mw-allmessages-form-filter-modified',
+                               ( $this->filter === 'modified' )
+                       ) .
+                       "</td>\n
+                       </tr>
+                       <tr>\n
+                               <td class=\"mw-label\">" . $langSelect[0] . "</td>\n
+                               <td class=\"mw-input\">" . $langSelect[1] . "</td>\n
+                       </tr>" .
+
+                       '<tr>
+                               <td class="mw-label">' .
+                       Xml::label( $this->msg( 'table_pager_limit_label' )->text(), 'mw-table_pager_limit_label' ) .
+                       '</td>
+                       <td class="mw-input">' .
+                       $this->getLimitSelect() .
+                       '</td>
+                       <tr>
+                               <td></td>
+                               <td>' .
+                       Xml::submitButton( $this->msg( 'allmessages-filter-submit' )->text() ) .
+                       "</td>\n
+                       </tr>" .
+
+                       Xml::closeElement( 'table' ) .
+                       $this->getHiddenFields( array( 'title', 'prefix', 'filter', 'lang', 'limit' ) ) .
+                       Xml::closeElement( 'fieldset' ) .
+                       Xml::closeElement( 'form' );
+
+               return $out;
+       }
+
+       function getAllMessages( $descending ) {
+               wfProfileIn( __METHOD__ );
+               $messageNames = Language::getLocalisationCache()->getSubitemList( 'en', 'messages' );
+               if ( $descending ) {
+                       rsort( $messageNames );
+               } else {
+                       asort( $messageNames );
+               }
+
+               // Normalise message names so they look like page titles
+               $messageNames = array_map( array( $this->lang, 'ucfirst' ), $messageNames );
+
+               wfProfileOut( __METHOD__ );
+
+               return $messageNames;
+       }
+
+       /**
+        * Determine which of the MediaWiki and MediaWiki_talk namespace pages exist.
+        * Returns array( 'pages' => ..., 'talks' => ... ), where the subarrays have
+        * an entry for each existing page, with the key being the message name and
+        * value arbitrary.
+        *
+        * @param array $messageNames
+        * @param string $langcode What language code
+        * @param bool $foreign Whether the $langcode is not the content language
+        * @return array A 'pages' and 'talks' array with the keys of existing pages
+        */
+       public static function getCustomisedStatuses( $messageNames, $langcode = 'en', $foreign = false ) {
+               // FIXME: This function should be moved to Language:: or something.
+               wfProfileIn( __METHOD__ . '-db' );
+
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select( 'page',
+                       array( 'page_namespace', 'page_title' ),
+                       array( 'page_namespace' => array( NS_MEDIAWIKI, NS_MEDIAWIKI_TALK ) ),
+                       __METHOD__,
+                       array( 'USE INDEX' => 'name_title' )
+               );
+               $xNames = array_flip( $messageNames );
+
+               $pageFlags = $talkFlags = array();
+
+               foreach ( $res as $s ) {
+                       $exists = false;
+
+                       if ( $foreign ) {
+                               $titleParts = explode( '/', $s->page_title );
+                               if ( count( $titleParts ) === 2 &&
+                                       $langcode === $titleParts[1] &&
+                                       isset( $xNames[$titleParts[0]] )
+                               ) {
+                                       $exists = $titleParts[0];
+                               }
+                       } elseif ( isset( $xNames[$s->page_title] ) ) {
+                               $exists = $s->page_title;
+                       }
+
+                       $title = Title::newFromRow( $s );
+                       if ( $exists && $title->inNamespace( NS_MEDIAWIKI ) ) {
+                               $pageFlags[$exists] = true;
+                       } elseif ( $exists && $title->inNamespace( NS_MEDIAWIKI_TALK ) ) {
+                               $talkFlags[$exists] = true;
+                       }
+               }
+
+               wfProfileOut( __METHOD__ . '-db' );
+
+               return array( 'pages' => $pageFlags, 'talks' => $talkFlags );
+       }
+
+       /**
+        *  This function normally does a database query to get the results; we need
+        * to make a pretend result using a FakeResultWrapper.
+        * @param string $offset
+        * @param int $limit
+        * @param bool $descending
+        * @return FakeResultWrapper
+        */
+       function reallyDoQuery( $offset, $limit, $descending ) {
+               $result = new FakeResultWrapper( array() );
+
+               $messageNames = $this->getAllMessages( $descending );
+               $statuses = self::getCustomisedStatuses( $messageNames, $this->langcode, $this->foreign );
+
+               $count = 0;
+               foreach ( $messageNames as $key ) {
+                       $customised = isset( $statuses['pages'][$key] );
+                       if ( $customised !== $this->custom &&
+                               ( $descending && ( $key < $offset || !$offset ) || !$descending && $key > $offset ) &&
+                               ( ( $this->prefix && preg_match( $this->prefix, $key ) ) || $this->prefix === false )
+                       ) {
+                               $actual = wfMessage( $key )->inLanguage( $this->langcode )->plain();
+                               $default = wfMessage( $key )->inLanguage( $this->langcode )->useDatabase( false )->plain();
+                               $result->result[] = array(
+                                       'am_title' => $key,
+                                       'am_actual' => $actual,
+                                       'am_default' => $default,
+                                       'am_customised' => $customised,
+                                       'am_talk_exists' => isset( $statuses['talks'][$key] )
+                               );
+                               $count++;
+                       }
+
+                       if ( $count === $limit ) {
+                               break;
+                       }
+               }
+
+               return $result;
+       }
+
+       function getStartBody() {
+               return Xml::openElement( 'table', array(
+                               'class' => 'mw-datatable TablePager',
+                               'id' => 'mw-allmessagestable'
+                       ) ) .
+                       "\n" .
+                       "<thead><tr>
+                               <th rowspan=\"2\">" .
+                       $this->msg( 'allmessagesname' )->escaped() . "
+                               </th>
+                               <th>" .
+                       $this->msg( 'allmessagesdefault' )->escaped() .
+                       "</th>
+                       </tr>\n
+                       <tr>
+                               <th>" .
+                       $this->msg( 'allmessagescurrent' )->escaped() .
+                       "</th>
+                       </tr></thead><tbody>\n";
+       }
+
+       function formatValue( $field, $value ) {
+               switch ( $field ) {
+                       case 'am_title' :
+                               $title = Title::makeTitle( NS_MEDIAWIKI, $value . $this->suffix );
+                               $talk = Title::makeTitle( NS_MEDIAWIKI_TALK, $value . $this->suffix );
+                               $translation = Linker::makeExternalLink(
+                                       'https://translatewiki.net/w/i.php?' . wfArrayToCgi( array(
+                                               'title' => 'Special:SearchTranslations',
+                                               'group' => 'mediawiki',
+                                               'grouppath' => 'mediawiki',
+                                               'query' => 'language:' . $this->getLanguage()->getCode() . '^25 ' .
+                                                       'messageid:"MediaWiki:' . $value . '"^10 "' .
+                                                       $this->msg( $value )->inLanguage( 'en' )->plain() . '"'
+                                       ) ),
+                                       $this->msg( 'allmessages-filter-translate' )->text()
+                               );
+
+                               if ( $this->mCurrentRow->am_customised ) {
+                                       $title = Linker::linkKnown( $title, $this->getLanguage()->lcfirst( $value ) );
+                               } else {
+                                       $title = Linker::link(
+                                               $title,
+                                               $this->getLanguage()->lcfirst( $value ),
+                                               array(),
+                                               array(),
+                                               array( 'broken' )
+                                       );
+                               }
+                               if ( $this->mCurrentRow->am_talk_exists ) {
+                                       $talk = Linker::linkKnown( $talk, $this->talk );
+                               } else {
+                                       $talk = Linker::link(
+                                               $talk,
+                                               $this->talk,
+                                               array(),
+                                               array(),
+                                               array( 'broken' )
+                                       );
+                               }
+
+                               return $title . ' '
+                               . $this->msg( 'parentheses' )->rawParams( $talk )->escaped()
+                               . ' '
+                               . $this->msg( 'parentheses' )->rawParams( $translation )->escaped();
+
+                       case 'am_default' :
+                       case 'am_actual' :
+                               return Sanitizer::escapeHtmlAllowEntities( $value, ENT_QUOTES );
+               }
+
+               return '';
+       }
+
+       function formatRow( $row ) {
+               // Do all the normal stuff
+               $s = parent::formatRow( $row );
+
+               // But if there's a customised message, add that too.
+               if ( $row->am_customised ) {
+                       $s .= Xml::openElement( 'tr', $this->getRowAttrs( $row, true ) );
+                       $formatted = strval( $this->formatValue( 'am_actual', $row->am_actual ) );
+
+                       if ( $formatted === '' ) {
+                               $formatted = '&#160;';
+                       }
+
+                       $s .= Xml::tags( 'td', $this->getCellAttrs( 'am_actual', $row->am_actual ), $formatted )
+                               . "</tr>\n";
+               }
+
+               return $s;
+       }
+
+       function getRowAttrs( $row, $isSecond = false ) {
+               $arr = array();
+
+               if ( $row->am_customised ) {
+                       $arr['class'] = 'allmessages-customised';
+               }
+
+               if ( !$isSecond ) {
+                       $arr['id'] = Sanitizer::escapeId( 'msg_' . $this->getLanguage()->lcfirst( $row->am_title ) );
+               }
+
+               return $arr;
+       }
+
+       function getCellAttrs( $field, $value ) {
+               if ( $this->mCurrentRow->am_customised && $field === 'am_title' ) {
+                       return array( 'rowspan' => '2', 'class' => $field );
+               } elseif ( $field === 'am_title' ) {
+                       return array( 'class' => $field );
+               } else {
+                       return array( 'lang' => $this->langcode, 'dir' => $this->lang->getDir(), 'class' => $field );
+               }
+       }
+
+       // This is not actually used, as getStartBody is overridden above
+       function getFieldNames() {
+               return array(
+                       'am_title' => $this->msg( 'allmessagesname' )->text(),
+                       'am_default' => $this->msg( 'allmessagesdefault' )->text()
+               );
+       }
+
+       function getTitle() {
+               return SpecialPage::getTitleFor( 'Allmessages', false );
+       }
+
+       function isFieldSortable( $x ) {
+               return false;
+       }
+
+       function getDefaultSort() {
+               return '';
+       }
+
+       function getQueryInfo() {
+               return '';
+       }
+}
diff --git a/includes/specials/SpecialAllPages.php b/includes/specials/SpecialAllPages.php
new file mode 100644 (file)
index 0000000..17e080f
--- /dev/null
@@ -0,0 +1,396 @@
+<?php
+/**
+ * Implements Special:Allpages
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Implements Special:Allpages
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialAllPages extends IncludableSpecialPage {
+
+       /**
+        * Maximum number of pages to show on single subpage.
+        *
+        * @var int $maxPerPage
+        */
+       protected $maxPerPage = 345;
+
+       /**
+        * Determines, which message describes the input field 'nsfrom'.
+        *
+        * @var string $nsfromMsg
+        */
+       protected $nsfromMsg = 'allpagesfrom';
+
+       /**
+        * Constructor
+        *
+        * @param string $name name of the special page, as seen in links and URLs (default: 'Allpages')
+        */
+       function __construct( $name = 'Allpages' ) {
+               parent::__construct( $name );
+       }
+
+       /**
+        * Entry point : initialise variables and call subfunctions.
+        *
+        * @param string $par becomes "FOO" when called like Special:Allpages/FOO (default null)
+        */
+       function execute( $par ) {
+               $request = $this->getRequest();
+               $out = $this->getOutput();
+
+               $this->setHeaders();
+               $this->outputHeader();
+               $out->allowClickjacking();
+
+               # GET values
+               $from = $request->getVal( 'from', null );
+               $to = $request->getVal( 'to', null );
+               $namespace = $request->getInt( 'namespace' );
+               $hideredirects = $request->getBool( 'hideredirects', false );
+
+               $namespaces = $this->getContext()->getLanguage()->getNamespaces();
+
+               $out->setPageTitle(
+                       ( $namespace > 0 && array_key_exists( $namespace, $namespaces ) ) ?
+                               $this->msg( 'allinnamespace', str_replace( '_', ' ', $namespaces[$namespace] ) ) :
+                               $this->msg( 'allarticles' )
+               );
+               $out->addModuleStyles( 'mediawiki.special' );
+
+               if ( $par !== null ) {
+                       $this->showChunk( $namespace, $par, $to, $hideredirects );
+               } elseif ( $from !== null && $to === null ) {
+                       $this->showChunk( $namespace, $from, $to, $hideredirects );
+               } else {
+                       $this->showToplevel( $namespace, $from, $to, $hideredirects );
+               }
+       }
+
+       /**
+        * HTML for the top form
+        *
+        * @param int $namespace A namespace constant (default NS_MAIN).
+        * @param string $from DbKey we are starting listing at.
+        * @param string $to DbKey we are ending listing at.
+        * @param bool $hideredirects Dont show redirects  (default false)
+        * @return string
+        */
+       function namespaceForm( $namespace = NS_MAIN, $from = '', $to = '', $hideredirects = false ) {
+               global $wgScript;
+               $t = $this->getPageTitle();
+
+               $out = Xml::openElement( 'div', array( 'class' => 'namespaceoptions' ) );
+               $out .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
+               $out .= Html::hidden( 'title', $t->getPrefixedText() );
+               $out .= Xml::openElement( 'fieldset' );
+               $out .= Xml::element( 'legend', null, $this->msg( 'allpages' )->text() );
+               $out .= Xml::openElement( 'table', array( 'id' => 'nsselect', 'class' => 'allpages' ) );
+               $out .= "<tr>
+       <td class='mw-label'>" .
+                       Xml::label( $this->msg( 'allpagesfrom' )->text(), 'nsfrom' ) .
+                       "       </td>
+       <td class='mw-input'>" .
+                       Xml::input( 'from', 30, str_replace( '_', ' ', $from ), array( 'id' => 'nsfrom' ) ) .
+                       "       </td>
+</tr>
+<tr>
+       <td class='mw-label'>" .
+                       Xml::label( $this->msg( 'allpagesto' )->text(), 'nsto' ) .
+                       "       </td>
+                       <td class='mw-input'>" .
+                       Xml::input( 'to', 30, str_replace( '_', ' ', $to ), array( 'id' => 'nsto' ) ) .
+                       "               </td>
+</tr>
+<tr>
+       <td class='mw-label'>" .
+                       Xml::label( $this->msg( 'namespace' )->text(), 'namespace' ) .
+                       "       </td>
+                       <td class='mw-input'>" .
+                       Html::namespaceSelector(
+                               array( 'selected' => $namespace ),
+                               array( 'name' => 'namespace', 'id' => 'namespace' )
+                       ) . ' ' .
+                       Xml::checkLabel(
+                               $this->msg( 'allpages-hide-redirects' )->text(),
+                               'hideredirects',
+                               'hideredirects',
+                               $hideredirects
+                       ) . ' ' .
+                       Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) .
+                       "       </td>
+</tr>";
+               $out .= Xml::closeElement( 'table' );
+               $out .= Xml::closeElement( 'fieldset' );
+               $out .= Xml::closeElement( 'form' );
+               $out .= Xml::closeElement( 'div' );
+
+               return $out;
+       }
+
+       /**
+        * @param int $namespace (default NS_MAIN)
+        * @param string $from List all pages from this name
+        * @param string $to List all pages to this name
+        * @param bool $hideredirects Dont show redirects (default false)
+        */
+       function showToplevel( $namespace = NS_MAIN, $from = '', $to = '', $hideredirects = false ) {
+               $from = Title::makeTitleSafe( $namespace, $from );
+               $to = Title::makeTitleSafe( $namespace, $to );
+               $from = ( $from && $from->isLocal() ) ? $from->getDBkey() : null;
+               $to = ( $to && $to->isLocal() ) ? $to->getDBkey() : null;
+
+               $this->showChunk( $namespace, $from, $to, $hideredirects );
+       }
+
+       /**
+        * @param int $namespace Namespace (Default NS_MAIN)
+        * @param string $from List all pages from this name (default false)
+        * @param string $to List all pages to this name (default false)
+        * @param bool $hideredirects Dont show redirects (default false)
+        */
+       function showChunk( $namespace = NS_MAIN, $from = false, $to = false, $hideredirects = false ) {
+               $output = $this->getOutput();
+
+               $fromList = $this->getNamespaceKeyAndText( $namespace, $from );
+               $toList = $this->getNamespaceKeyAndText( $namespace, $to );
+               $namespaces = $this->getContext()->getLanguage()->getNamespaces();
+               $n = 0;
+
+               if ( !$fromList || !$toList ) {
+                       $out = $this->msg( 'allpagesbadtitle' )->parseAsBlock();
+               } elseif ( !array_key_exists( $namespace, $namespaces ) ) {
+                       // Show errormessage and reset to NS_MAIN
+                       $out = $this->msg( 'allpages-bad-ns', $namespace )->parse();
+                       $namespace = NS_MAIN;
+               } else {
+                       list( $namespace, $fromKey, $from ) = $fromList;
+                       list( , $toKey, $to ) = $toList;
+
+                       $dbr = wfGetDB( DB_SLAVE );
+                       $conds = array(
+                               'page_namespace' => $namespace,
+                               'page_title >= ' . $dbr->addQuotes( $fromKey )
+                       );
+
+                       if ( $hideredirects ) {
+                               $conds['page_is_redirect'] = 0;
+                       }
+
+                       if ( $toKey !== "" ) {
+                               $conds[] = 'page_title <= ' . $dbr->addQuotes( $toKey );
+                       }
+
+                       $res = $dbr->select( 'page',
+                               array( 'page_namespace', 'page_title', 'page_is_redirect', 'page_id' ),
+                               $conds,
+                               __METHOD__,
+                               array(
+                                       'ORDER BY' => 'page_title',
+                                       'LIMIT' => $this->maxPerPage + 1,
+                                       'USE INDEX' => 'name_title',
+                               )
+                       );
+
+                       if ( $res->numRows() > 0 ) {
+                               $out = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-chunk' ) );
+                               while ( ( $n < $this->maxPerPage ) && ( $s = $res->fetchObject() ) ) {
+                                       $t = Title::newFromRow( $s );
+                                       if ( $t ) {
+                                               $link = ( $s->page_is_redirect ? '<div class="allpagesredirect">' : '' ) .
+                                                       Linker::link( $t ) .
+                                                       ( $s->page_is_redirect ? '</div>' : '' );
+                                       } else {
+                                               $link = '[[' . htmlspecialchars( $s->page_title ) . ']]';
+                                       }
+
+                                       if ( $n % 3 == 0 ) {
+                                               $out .= '<tr>';
+                                       }
+
+                                       $out .= "<td style=\"width:33%\">$link</td>";
+                                       $n++;
+                                       if ( $n % 3 == 0 ) {
+                                               $out .= "</tr>\n";
+                                       }
+                               }
+
+                               if ( ( $n % 3 ) != 0 ) {
+                                       $out .= "</tr>\n";
+                               }
+                               $out .= Xml::closeElement( 'table' );
+                       } else {
+                               $out = '';
+                       }
+               }
+
+               if ( $this->including() ) {
+                       $output->addHTML( $out );
+                       return;
+               }
+
+               if ( $from == '' ) {
+                       // First chunk; no previous link.
+                       $prevTitle = null;
+               } else {
+                       # Get the last title from previous chunk
+                       $dbr = wfGetDB( DB_SLAVE );
+                       $res_prev = $dbr->select(
+                               'page',
+                               'page_title',
+                               array( 'page_namespace' => $namespace, 'page_title < ' . $dbr->addQuotes( $from ) ),
+                               __METHOD__,
+                               array( 'ORDER BY' => 'page_title DESC',
+                                       'LIMIT' => $this->maxPerPage, 'OFFSET' => ( $this->maxPerPage - 1 )
+                               )
+                       );
+
+                       # Get first title of previous complete chunk
+                       if ( $dbr->numrows( $res_prev ) >= $this->maxPerPage ) {
+                               $pt = $dbr->fetchObject( $res_prev );
+                               $prevTitle = Title::makeTitle( $namespace, $pt->page_title );
+                       } else {
+                               # The previous chunk is not complete, need to link to the very first title
+                               # available in the database
+                               $options = array( 'LIMIT' => 1 );
+                               if ( !$dbr->implicitOrderby() ) {
+                                       $options['ORDER BY'] = 'page_title';
+                               }
+                               $reallyFirstPage_title = $dbr->selectField( 'page', 'page_title',
+                                       array( 'page_namespace' => $namespace ), __METHOD__, $options );
+                               # Show the previous link if it s not the current requested chunk
+                               if ( $from != $reallyFirstPage_title ) {
+                                       $prevTitle = Title::makeTitle( $namespace, $reallyFirstPage_title );
+                               } else {
+                                       $prevTitle = null;
+                               }
+                       }
+               }
+
+               $self = $this->getPageTitle();
+
+               $topLinks = array(
+                       Linker::link( $self, $this->msg( 'allpages' )->escaped() )
+               );
+               $bottomLinks = array();
+
+               # Do we put a previous link ?
+               if ( $prevTitle && $pt = $prevTitle->getText() ) {
+                       $query = array( 'from' => $prevTitle->getText() );
+
+                       if ( $namespace ) {
+                               $query['namespace'] = $namespace;
+                       }
+
+                       if ( $hideredirects ) {
+                               $query['hideredirects'] = $hideredirects;
+                       }
+
+                       $prevLink = Linker::linkKnown(
+                               $self,
+                               $this->msg( 'prevpage', $pt )->escaped(),
+                               array(),
+                               $query
+                       );
+                       $topLinks[] = $prevLink;
+                       $bottomLinks[] = $prevLink;
+               }
+
+               if ( $n == $this->maxPerPage && $s = $res->fetchObject() ) {
+                       # $s is the first link of the next chunk
+                       $t = Title::makeTitle( $namespace, $s->page_title );
+                       $query = array( 'from' => $t->getText() );
+
+                       if ( $namespace ) {
+                               $query['namespace'] = $namespace;
+                       }
+
+                       if ( $hideredirects ) {
+                               $query['hideredirects'] = $hideredirects;
+                       }
+
+                       $nextLink = Linker::linkKnown(
+                               $self,
+                               $this->msg( 'nextpage', $t->getText() )->escaped(),
+                               array(),
+                               $query
+                       );
+                       $topLinks[] = $nextLink;
+                       $bottomLinks[] = $nextLink;
+               }
+
+               $nsForm = $this->namespaceForm( $namespace, $from, $to, $hideredirects );
+               $out2 = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-form' ) ) .
+                       '<tr>
+                                               <td>' .
+                       $nsForm .
+                       '</td>
+                                               <td class="mw-allpages-nav">' .
+                       $this->getLanguage()->pipeList( $topLinks ) .
+                       '</td></tr></table>';
+
+               $output->addHTML( $out2 . $out );
+
+               if ( count( $bottomLinks ) ) {
+                       $output->addHTML(
+                               Html::element( 'hr' ) .
+                                       Html::rawElement( 'div', array( 'class' => 'mw-allpages-nav' ),
+                                               $this->getLanguage()->pipeList( $bottomLinks )
+                                       )
+                       );
+               }
+       }
+
+       /**
+        * @param int $ns The namespace of the article
+        * @param string $text The name of the article
+        * @return array( int namespace, string dbkey, string pagename ) or null on error
+        */
+       protected function getNamespaceKeyAndText( $ns, $text ) {
+               if ( $text == '' ) {
+                       # shortcut for common case
+                       return array( $ns, '', '' );
+               }
+
+               $t = Title::makeTitleSafe( $ns, $text );
+               if ( $t && $t->isLocal() ) {
+                       return array( $t->getNamespace(), $t->getDBkey(), $t->getText() );
+               } elseif ( $t ) {
+                       return null;
+               }
+
+               # try again, in case the problem was an empty pagename
+               $text = preg_replace( '/(#|$)/', 'X$1', $text );
+               $t = Title::makeTitleSafe( $ns, $text );
+               if ( $t && $t->isLocal() ) {
+                       return array( $t->getNamespace(), '', '' );
+               } else {
+                       return null;
+               }
+       }
+
+       protected function getGroupName() {
+               return 'pages';
+       }
+}
diff --git a/includes/specials/SpecialAllmessages.php b/includes/specials/SpecialAllmessages.php
deleted file mode 100644 (file)
index 687cbd0..0000000
+++ /dev/null
@@ -1,483 +0,0 @@
-<?php
-/**
- * Implements Special:Allmessages
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup SpecialPage
- */
-
-/**
- * Use this special page to get a list of the MediaWiki system messages.
- *
- * @file
- * @ingroup SpecialPage
- */
-class SpecialAllmessages extends SpecialPage {
-       /**
-        * @var AllmessagesTablePager
-        */
-       protected $table;
-
-       /**
-        * Constructor
-        */
-       public function __construct() {
-               parent::__construct( 'Allmessages' );
-       }
-
-       /**
-        * Show the special page
-        *
-        * @param string $par Parameter passed to the page or null
-        */
-       public function execute( $par ) {
-               $request = $this->getRequest();
-               $out = $this->getOutput();
-
-               $this->setHeaders();
-
-               global $wgUseDatabaseMessages;
-               if ( !$wgUseDatabaseMessages ) {
-                       $out->addWikiMsg( 'allmessagesnotsupportedDB' );
-
-                       return;
-               } else {
-                       $this->outputHeader( 'allmessagestext' );
-               }
-
-               $out->addModuleStyles( 'mediawiki.special' );
-
-               $this->table = new AllmessagesTablePager(
-                       $this,
-                       array(),
-                       wfGetLangObj( $request->getVal( 'lang', $par ) )
-               );
-
-               $this->langcode = $this->table->lang->getCode();
-
-               $out->addHTML( $this->table->buildForm() .
-                       $this->table->getNavigationBar() .
-                       $this->table->getBody() .
-                       $this->table->getNavigationBar() );
-       }
-
-       protected function getGroupName() {
-               return 'wiki';
-       }
-}
-
-/**
- * Use TablePager for prettified output. We have to pretend that we're
- * getting data from a table when in fact not all of it comes from the database.
- */
-class AllmessagesTablePager extends TablePager {
-       protected $filter, $prefix, $langcode, $displayPrefix;
-
-       public $mLimitsShown;
-
-       /**
-        * @var Language
-        */
-       public $lang;
-
-       /**
-        * @var null|bool
-        */
-       public $custom;
-
-       function __construct( $page, $conds, $langObj = null ) {
-               parent::__construct( $page->getContext() );
-               $this->mIndexField = 'am_title';
-               $this->mPage = $page;
-               $this->mConds = $conds;
-               $this->mDefaultDirection = true; // always sort ascending
-               $this->mLimitsShown = array( 20, 50, 100, 250, 500, 5000 );
-
-               global $wgContLang;
-
-               $this->talk = $this->msg( 'talkpagelinktext' )->escaped();
-
-               $this->lang = ( $langObj ? $langObj : $wgContLang );
-               $this->langcode = $this->lang->getCode();
-               $this->foreign = $this->langcode !== $wgContLang->getCode();
-
-               $request = $this->getRequest();
-
-               $this->filter = $request->getVal( 'filter', 'all' );
-               if ( $this->filter === 'all' ) {
-                       $this->custom = null; // So won't match in either case
-               } else {
-                       $this->custom = ( $this->filter === 'unmodified' );
-               }
-
-               $prefix = $this->getLanguage()->ucfirst( $request->getVal( 'prefix', '' ) );
-               $prefix = $prefix !== '' ?
-                       Title::makeTitleSafe( NS_MEDIAWIKI, $request->getVal( 'prefix', null ) ) :
-                       null;
-
-               if ( $prefix !== null ) {
-                       $this->displayPrefix = $prefix->getDBkey();
-                       $this->prefix = '/^' . preg_quote( $this->displayPrefix ) . '/i';
-               } else {
-                       $this->displayPrefix = false;
-                       $this->prefix = false;
-               }
-
-               // The suffix that may be needed for message names if we're in a
-               // different language (eg [[MediaWiki:Foo/fr]]: $suffix = '/fr'
-               if ( $this->foreign ) {
-                       $this->suffix = '/' . $this->langcode;
-               } else {
-                       $this->suffix = '';
-               }
-       }
-
-       function buildForm() {
-               global $wgScript;
-
-               $attrs = array( 'id' => 'mw-allmessages-form-lang', 'name' => 'lang' );
-               $msg = wfMessage( 'allmessages-language' );
-               $langSelect = Xml::languageSelector( $this->langcode, false, null, $attrs, $msg );
-
-               $out = Xml::openElement( 'form', array(
-                               'method' => 'get',
-                               'action' => $wgScript,
-                               'id' => 'mw-allmessages-form'
-                       ) ) .
-                       Xml::fieldset( $this->msg( 'allmessages-filter-legend' )->text() ) .
-                       Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
-                       Xml::openElement( 'table', array( 'class' => 'mw-allmessages-table' ) ) . "\n" .
-                       '<tr>
-                               <td class="mw-label">' .
-                       Xml::label( $this->msg( 'allmessages-prefix' )->text(), 'mw-allmessages-form-prefix' ) .
-                       "</td>\n
-                       <td class=\"mw-input\">" .
-                       Xml::input(
-                               'prefix',
-                               20,
-                               str_replace( '_', ' ', $this->displayPrefix ),
-                               array( 'id' => 'mw-allmessages-form-prefix' )
-                       ) .
-                       "</td>\n
-                       </tr>
-                       <tr>\n
-                       <td class='mw-label'>" .
-                       $this->msg( 'allmessages-filter' )->escaped() .
-                       "</td>\n
-                               <td class='mw-input'>" .
-                       Xml::radioLabel( $this->msg( 'allmessages-filter-unmodified' )->text(),
-                               'filter',
-                               'unmodified',
-                               'mw-allmessages-form-filter-unmodified',
-                               ( $this->filter === 'unmodified' )
-                       ) .
-                       Xml::radioLabel( $this->msg( 'allmessages-filter-all' )->text(),
-                               'filter',
-                               'all',
-                               'mw-allmessages-form-filter-all',
-                               ( $this->filter === 'all' )
-                       ) .
-                       Xml::radioLabel( $this->msg( 'allmessages-filter-modified' )->text(),
-                               'filter',
-                               'modified',
-                               'mw-allmessages-form-filter-modified',
-                               ( $this->filter === 'modified' )
-                       ) .
-                       "</td>\n
-                       </tr>
-                       <tr>\n
-                               <td class=\"mw-label\">" . $langSelect[0] . "</td>\n
-                               <td class=\"mw-input\">" . $langSelect[1] . "</td>\n
-                       </tr>" .
-
-                       '<tr>
-                               <td class="mw-label">' .
-                       Xml::label( $this->msg( 'table_pager_limit_label' )->text(), 'mw-table_pager_limit_label' ) .
-                       '</td>
-                       <td class="mw-input">' .
-                       $this->getLimitSelect() .
-                       '</td>
-                       <tr>
-                               <td></td>
-                               <td>' .
-                       Xml::submitButton( $this->msg( 'allmessages-filter-submit' )->text() ) .
-                       "</td>\n
-                       </tr>" .
-
-                       Xml::closeElement( 'table' ) .
-                       $this->getHiddenFields( array( 'title', 'prefix', 'filter', 'lang', 'limit' ) ) .
-                       Xml::closeElement( 'fieldset' ) .
-                       Xml::closeElement( 'form' );
-
-               return $out;
-       }
-
-       function getAllMessages( $descending ) {
-               wfProfileIn( __METHOD__ );
-               $messageNames = Language::getLocalisationCache()->getSubitemList( 'en', 'messages' );
-               if ( $descending ) {
-                       rsort( $messageNames );
-               } else {
-                       asort( $messageNames );
-               }
-
-               // Normalise message names so they look like page titles
-               $messageNames = array_map( array( $this->lang, 'ucfirst' ), $messageNames );
-
-               wfProfileOut( __METHOD__ );
-
-               return $messageNames;
-       }
-
-       /**
-        * Determine which of the MediaWiki and MediaWiki_talk namespace pages exist.
-        * Returns array( 'pages' => ..., 'talks' => ... ), where the subarrays have
-        * an entry for each existing page, with the key being the message name and
-        * value arbitrary.
-        *
-        * @param array $messageNames
-        * @param string $langcode What language code
-        * @param bool $foreign Whether the $langcode is not the content language
-        * @return array A 'pages' and 'talks' array with the keys of existing pages
-        */
-       public static function getCustomisedStatuses( $messageNames, $langcode = 'en', $foreign = false ) {
-               // FIXME: This function should be moved to Language:: or something.
-               wfProfileIn( __METHOD__ . '-db' );
-
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( 'page',
-                       array( 'page_namespace', 'page_title' ),
-                       array( 'page_namespace' => array( NS_MEDIAWIKI, NS_MEDIAWIKI_TALK ) ),
-                       __METHOD__,
-                       array( 'USE INDEX' => 'name_title' )
-               );
-               $xNames = array_flip( $messageNames );
-
-               $pageFlags = $talkFlags = array();
-
-               foreach ( $res as $s ) {
-                       $exists = false;
-
-                       if ( $foreign ) {
-                               $titleParts = explode( '/', $s->page_title );
-                               if ( count( $titleParts ) === 2 &&
-                                       $langcode === $titleParts[1] &&
-                                       isset( $xNames[$titleParts[0]] )
-                               ) {
-                                       $exists = $titleParts[0];
-                               }
-                       } elseif ( isset( $xNames[$s->page_title] ) ) {
-                               $exists = $s->page_title;
-                       }
-
-                       $title = Title::newFromRow( $s );
-                       if ( $exists && $title->inNamespace( NS_MEDIAWIKI ) ) {
-                               $pageFlags[$exists] = true;
-                       } elseif ( $exists && $title->inNamespace( NS_MEDIAWIKI_TALK ) ) {
-                               $talkFlags[$exists] = true;
-                       }
-               }
-
-               wfProfileOut( __METHOD__ . '-db' );
-
-               return array( 'pages' => $pageFlags, 'talks' => $talkFlags );
-       }
-
-       /**
-        *  This function normally does a database query to get the results; we need
-        * to make a pretend result using a FakeResultWrapper.
-        * @param string $offset
-        * @param int $limit
-        * @param bool $descending
-        * @return FakeResultWrapper
-        */
-       function reallyDoQuery( $offset, $limit, $descending ) {
-               $result = new FakeResultWrapper( array() );
-
-               $messageNames = $this->getAllMessages( $descending );
-               $statuses = self::getCustomisedStatuses( $messageNames, $this->langcode, $this->foreign );
-
-               $count = 0;
-               foreach ( $messageNames as $key ) {
-                       $customised = isset( $statuses['pages'][$key] );
-                       if ( $customised !== $this->custom &&
-                               ( $descending && ( $key < $offset || !$offset ) || !$descending && $key > $offset ) &&
-                               ( ( $this->prefix && preg_match( $this->prefix, $key ) ) || $this->prefix === false )
-                       ) {
-                               $actual = wfMessage( $key )->inLanguage( $this->langcode )->plain();
-                               $default = wfMessage( $key )->inLanguage( $this->langcode )->useDatabase( false )->plain();
-                               $result->result[] = array(
-                                       'am_title' => $key,
-                                       'am_actual' => $actual,
-                                       'am_default' => $default,
-                                       'am_customised' => $customised,
-                                       'am_talk_exists' => isset( $statuses['talks'][$key] )
-                               );
-                               $count++;
-                       }
-
-                       if ( $count === $limit ) {
-                               break;
-                       }
-               }
-
-               return $result;
-       }
-
-       function getStartBody() {
-               return Xml::openElement( 'table', array(
-                               'class' => 'mw-datatable TablePager',
-                               'id' => 'mw-allmessagestable'
-                       ) ) .
-                       "\n" .
-                       "<thead><tr>
-                               <th rowspan=\"2\">" .
-                       $this->msg( 'allmessagesname' )->escaped() . "
-                               </th>
-                               <th>" .
-                       $this->msg( 'allmessagesdefault' )->escaped() .
-                       "</th>
-                       </tr>\n
-                       <tr>
-                               <th>" .
-                       $this->msg( 'allmessagescurrent' )->escaped() .
-                       "</th>
-                       </tr></thead><tbody>\n";
-       }
-
-       function formatValue( $field, $value ) {
-               switch ( $field ) {
-                       case 'am_title' :
-                               $title = Title::makeTitle( NS_MEDIAWIKI, $value . $this->suffix );
-                               $talk = Title::makeTitle( NS_MEDIAWIKI_TALK, $value . $this->suffix );
-                               $translation = Linker::makeExternalLink(
-                                       'https://translatewiki.net/w/i.php?' . wfArrayToCgi( array(
-                                               'title' => 'Special:SearchTranslations',
-                                               'group' => 'mediawiki',
-                                               'grouppath' => 'mediawiki',
-                                               'query' => 'language:' . $this->getLanguage()->getCode() . '^25 ' .
-                                                       'messageid:"MediaWiki:' . $value . '"^10 "' .
-                                                       $this->msg( $value )->inLanguage( 'en' )->plain() . '"'
-                                       ) ),
-                                       $this->msg( 'allmessages-filter-translate' )->text()
-                               );
-
-                               if ( $this->mCurrentRow->am_customised ) {
-                                       $title = Linker::linkKnown( $title, $this->getLanguage()->lcfirst( $value ) );
-                               } else {
-                                       $title = Linker::link(
-                                               $title,
-                                               $this->getLanguage()->lcfirst( $value ),
-                                               array(),
-                                               array(),
-                                               array( 'broken' )
-                                       );
-                               }
-                               if ( $this->mCurrentRow->am_talk_exists ) {
-                                       $talk = Linker::linkKnown( $talk, $this->talk );
-                               } else {
-                                       $talk = Linker::link(
-                                               $talk,
-                                               $this->talk,
-                                               array(),
-                                               array(),
-                                               array( 'broken' )
-                                       );
-                               }
-
-                               return $title . ' '
-                               . $this->msg( 'parentheses' )->rawParams( $talk )->escaped()
-                               . ' '
-                               . $this->msg( 'parentheses' )->rawParams( $translation )->escaped();
-
-                       case 'am_default' :
-                       case 'am_actual' :
-                               return Sanitizer::escapeHtmlAllowEntities( $value, ENT_QUOTES );
-               }
-
-               return '';
-       }
-
-       function formatRow( $row ) {
-               // Do all the normal stuff
-               $s = parent::formatRow( $row );
-
-               // But if there's a customised message, add that too.
-               if ( $row->am_customised ) {
-                       $s .= Xml::openElement( 'tr', $this->getRowAttrs( $row, true ) );
-                       $formatted = strval( $this->formatValue( 'am_actual', $row->am_actual ) );
-
-                       if ( $formatted === '' ) {
-                               $formatted = '&#160;';
-                       }
-
-                       $s .= Xml::tags( 'td', $this->getCellAttrs( 'am_actual', $row->am_actual ), $formatted )
-                               . "</tr>\n";
-               }
-
-               return $s;
-       }
-
-       function getRowAttrs( $row, $isSecond = false ) {
-               $arr = array();
-
-               if ( $row->am_customised ) {
-                       $arr['class'] = 'allmessages-customised';
-               }
-
-               if ( !$isSecond ) {
-                       $arr['id'] = Sanitizer::escapeId( 'msg_' . $this->getLanguage()->lcfirst( $row->am_title ) );
-               }
-
-               return $arr;
-       }
-
-       function getCellAttrs( $field, $value ) {
-               if ( $this->mCurrentRow->am_customised && $field === 'am_title' ) {
-                       return array( 'rowspan' => '2', 'class' => $field );
-               } elseif ( $field === 'am_title' ) {
-                       return array( 'class' => $field );
-               } else {
-                       return array( 'lang' => $this->langcode, 'dir' => $this->lang->getDir(), 'class' => $field );
-               }
-       }
-
-       // This is not actually used, as getStartBody is overridden above
-       function getFieldNames() {
-               return array(
-                       'am_title' => $this->msg( 'allmessagesname' )->text(),
-                       'am_default' => $this->msg( 'allmessagesdefault' )->text()
-               );
-       }
-
-       function getTitle() {
-               return SpecialPage::getTitleFor( 'Allmessages', false );
-       }
-
-       function isFieldSortable( $x ) {
-               return false;
-       }
-
-       function getDefaultSort() {
-               return '';
-       }
-
-       function getQueryInfo() {
-               return '';
-       }
-}
diff --git a/includes/specials/SpecialAllpages.php b/includes/specials/SpecialAllpages.php
deleted file mode 100644 (file)
index ad92298..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-<?php
-/**
- * Implements Special:Allpages
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup SpecialPage
- */
-
-/**
- * Implements Special:Allpages
- *
- * @ingroup SpecialPage
- */
-class SpecialAllpages extends IncludableSpecialPage {
-
-       /**
-        * Maximum number of pages to show on single subpage.
-        *
-        * @var int $maxPerPage
-        */
-       protected $maxPerPage = 345;
-
-       /**
-        * Determines, which message describes the input field 'nsfrom'.
-        *
-        * @var string $nsfromMsg
-        */
-       protected $nsfromMsg = 'allpagesfrom';
-
-       /**
-        * Constructor
-        *
-        * @param string $name name of the special page, as seen in links and URLs (default: 'Allpages')
-        */
-       function __construct( $name = 'Allpages' ) {
-               parent::__construct( $name );
-       }
-
-       /**
-        * Entry point : initialise variables and call subfunctions.
-        *
-        * @param string $par becomes "FOO" when called like Special:Allpages/FOO (default null)
-        */
-       function execute( $par ) {
-               $request = $this->getRequest();
-               $out = $this->getOutput();
-
-               $this->setHeaders();
-               $this->outputHeader();
-               $out->allowClickjacking();
-
-               # GET values
-               $from = $request->getVal( 'from', null );
-               $to = $request->getVal( 'to', null );
-               $namespace = $request->getInt( 'namespace' );
-               $hideredirects = $request->getBool( 'hideredirects', false );
-
-               $namespaces = $this->getContext()->getLanguage()->getNamespaces();
-
-               $out->setPageTitle(
-                       ( $namespace > 0 && array_key_exists( $namespace, $namespaces ) ) ?
-                               $this->msg( 'allinnamespace', str_replace( '_', ' ', $namespaces[$namespace] ) ) :
-                               $this->msg( 'allarticles' )
-               );
-               $out->addModuleStyles( 'mediawiki.special' );
-
-               if ( $par !== null ) {
-                       $this->showChunk( $namespace, $par, $to, $hideredirects );
-               } elseif ( $from !== null && $to === null ) {
-                       $this->showChunk( $namespace, $from, $to, $hideredirects );
-               } else {
-                       $this->showToplevel( $namespace, $from, $to, $hideredirects );
-               }
-       }
-
-       /**
-        * HTML for the top form
-        *
-        * @param int $namespace A namespace constant (default NS_MAIN).
-        * @param string $from DbKey we are starting listing at.
-        * @param string $to DbKey we are ending listing at.
-        * @param bool $hideredirects Dont show redirects  (default false)
-        * @return string
-        */
-       function namespaceForm( $namespace = NS_MAIN, $from = '', $to = '', $hideredirects = false ) {
-               global $wgScript;
-               $t = $this->getPageTitle();
-
-               $out = Xml::openElement( 'div', array( 'class' => 'namespaceoptions' ) );
-               $out .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
-               $out .= Html::hidden( 'title', $t->getPrefixedText() );
-               $out .= Xml::openElement( 'fieldset' );
-               $out .= Xml::element( 'legend', null, $this->msg( 'allpages' )->text() );
-               $out .= Xml::openElement( 'table', array( 'id' => 'nsselect', 'class' => 'allpages' ) );
-               $out .= "<tr>
-       <td class='mw-label'>" .
-                       Xml::label( $this->msg( 'allpagesfrom' )->text(), 'nsfrom' ) .
-                       "       </td>
-       <td class='mw-input'>" .
-                       Xml::input( 'from', 30, str_replace( '_', ' ', $from ), array( 'id' => 'nsfrom' ) ) .
-                       "       </td>
-</tr>
-<tr>
-       <td class='mw-label'>" .
-                       Xml::label( $this->msg( 'allpagesto' )->text(), 'nsto' ) .
-                       "       </td>
-                       <td class='mw-input'>" .
-                       Xml::input( 'to', 30, str_replace( '_', ' ', $to ), array( 'id' => 'nsto' ) ) .
-                       "               </td>
-</tr>
-<tr>
-       <td class='mw-label'>" .
-                       Xml::label( $this->msg( 'namespace' )->text(), 'namespace' ) .
-                       "       </td>
-                       <td class='mw-input'>" .
-                       Html::namespaceSelector(
-                               array( 'selected' => $namespace ),
-                               array( 'name' => 'namespace', 'id' => 'namespace' )
-                       ) . ' ' .
-                       Xml::checkLabel(
-                               $this->msg( 'allpages-hide-redirects' )->text(),
-                               'hideredirects',
-                               'hideredirects',
-                               $hideredirects
-                       ) . ' ' .
-                       Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) .
-                       "       </td>
-</tr>";
-               $out .= Xml::closeElement( 'table' );
-               $out .= Xml::closeElement( 'fieldset' );
-               $out .= Xml::closeElement( 'form' );
-               $out .= Xml::closeElement( 'div' );
-
-               return $out;
-       }
-
-       /**
-        * @param int $namespace (default NS_MAIN)
-        * @param string $from List all pages from this name
-        * @param string $to List all pages to this name
-        * @param bool $hideredirects Dont show redirects (default false)
-        */
-       function showToplevel( $namespace = NS_MAIN, $from = '', $to = '', $hideredirects = false ) {
-               $from = Title::makeTitleSafe( $namespace, $from );
-               $to = Title::makeTitleSafe( $namespace, $to );
-               $from = ( $from && $from->isLocal() ) ? $from->getDBkey() : null;
-               $to = ( $to && $to->isLocal() ) ? $to->getDBkey() : null;
-
-               $this->showChunk( $namespace, $from, $to, $hideredirects );
-       }
-
-       /**
-        * @param int $namespace Namespace (Default NS_MAIN)
-        * @param string $from List all pages from this name (default false)
-        * @param string $to List all pages to this name (default false)
-        * @param bool $hideredirects Dont show redirects (default false)
-        */
-       function showChunk( $namespace = NS_MAIN, $from = false, $to = false, $hideredirects = false ) {
-               $output = $this->getOutput();
-
-               $fromList = $this->getNamespaceKeyAndText( $namespace, $from );
-               $toList = $this->getNamespaceKeyAndText( $namespace, $to );
-               $namespaces = $this->getContext()->getLanguage()->getNamespaces();
-               $n = 0;
-
-               if ( !$fromList || !$toList ) {
-                       $out = $this->msg( 'allpagesbadtitle' )->parseAsBlock();
-               } elseif ( !array_key_exists( $namespace, $namespaces ) ) {
-                       // Show errormessage and reset to NS_MAIN
-                       $out = $this->msg( 'allpages-bad-ns', $namespace )->parse();
-                       $namespace = NS_MAIN;
-               } else {
-                       list( $namespace, $fromKey, $from ) = $fromList;
-                       list( , $toKey, $to ) = $toList;
-
-                       $dbr = wfGetDB( DB_SLAVE );
-                       $conds = array(
-                               'page_namespace' => $namespace,
-                               'page_title >= ' . $dbr->addQuotes( $fromKey )
-                       );
-
-                       if ( $hideredirects ) {
-                               $conds['page_is_redirect'] = 0;
-                       }
-
-                       if ( $toKey !== "" ) {
-                               $conds[] = 'page_title <= ' . $dbr->addQuotes( $toKey );
-                       }
-
-                       $res = $dbr->select( 'page',
-                               array( 'page_namespace', 'page_title', 'page_is_redirect', 'page_id' ),
-                               $conds,
-                               __METHOD__,
-                               array(
-                                       'ORDER BY' => 'page_title',
-                                       'LIMIT' => $this->maxPerPage + 1,
-                                       'USE INDEX' => 'name_title',
-                               )
-                       );
-
-                       if ( $res->numRows() > 0 ) {
-                               $out = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-chunk' ) );
-                               while ( ( $n < $this->maxPerPage ) && ( $s = $res->fetchObject() ) ) {
-                                       $t = Title::newFromRow( $s );
-                                       if ( $t ) {
-                                               $link = ( $s->page_is_redirect ? '<div class="allpagesredirect">' : '' ) .
-                                                       Linker::link( $t ) .
-                                                       ( $s->page_is_redirect ? '</div>' : '' );
-                                       } else {
-                                               $link = '[[' . htmlspecialchars( $s->page_title ) . ']]';
-                                       }
-
-                                       if ( $n % 3 == 0 ) {
-                                               $out .= '<tr>';
-                                       }
-
-                                       $out .= "<td style=\"width:33%\">$link</td>";
-                                       $n++;
-                                       if ( $n % 3 == 0 ) {
-                                               $out .= "</tr>\n";
-                                       }
-                               }
-
-                               if ( ( $n % 3 ) != 0 ) {
-                                       $out .= "</tr>\n";
-                               }
-                               $out .= Xml::closeElement( 'table' );
-                       } else {
-                               $out = '';
-                       }
-               }
-
-               if ( $this->including() ) {
-                       $output->addHTML( $out );
-                       return;
-               }
-
-               if ( $from == '' ) {
-                       // First chunk; no previous link.
-                       $prevTitle = null;
-               } else {
-                       # Get the last title from previous chunk
-                       $dbr = wfGetDB( DB_SLAVE );
-                       $res_prev = $dbr->select(
-                               'page',
-                               'page_title',
-                               array( 'page_namespace' => $namespace, 'page_title < ' . $dbr->addQuotes( $from ) ),
-                               __METHOD__,
-                               array( 'ORDER BY' => 'page_title DESC',
-                                       'LIMIT' => $this->maxPerPage, 'OFFSET' => ( $this->maxPerPage - 1 )
-                               )
-                       );
-
-                       # Get first title of previous complete chunk
-                       if ( $dbr->numrows( $res_prev ) >= $this->maxPerPage ) {
-                               $pt = $dbr->fetchObject( $res_prev );
-                               $prevTitle = Title::makeTitle( $namespace, $pt->page_title );
-                       } else {
-                               # The previous chunk is not complete, need to link to the very first title
-                               # available in the database
-                               $options = array( 'LIMIT' => 1 );
-                               if ( !$dbr->implicitOrderby() ) {
-                                       $options['ORDER BY'] = 'page_title';
-                               }
-                               $reallyFirstPage_title = $dbr->selectField( 'page', 'page_title',
-                                       array( 'page_namespace' => $namespace ), __METHOD__, $options );
-                               # Show the previous link if it s not the current requested chunk
-                               if ( $from != $reallyFirstPage_title ) {
-                                       $prevTitle = Title::makeTitle( $namespace, $reallyFirstPage_title );
-                               } else {
-                                       $prevTitle = null;
-                               }
-                       }
-               }
-
-               $self = $this->getPageTitle();
-
-               $topLinks = array(
-                       Linker::link( $self, $this->msg( 'allpages' )->escaped() )
-               );
-               $bottomLinks = array();
-
-               # Do we put a previous link ?
-               if ( isset( $prevTitle ) && $pt = $prevTitle->getText() ) {
-                       $query = array( 'from' => $prevTitle->getText() );
-
-                       if ( $namespace ) {
-                               $query['namespace'] = $namespace;
-                       }
-
-                       if ( $hideredirects ) {
-                               $query['hideredirects'] = $hideredirects;
-                       }
-
-                       $prevLink = Linker::linkKnown(
-                               $self,
-                               $this->msg( 'prevpage', $pt )->escaped(),
-                               array(),
-                               $query
-                       );
-                       $topLinks[] = $prevLink;
-                       $bottomLinks[] = $prevLink;
-               }
-
-               if ( $n == $this->maxPerPage && $s = $res->fetchObject() ) {
-                       # $s is the first link of the next chunk
-                       $t = Title::makeTitle( $namespace, $s->page_title );
-                       $query = array( 'from' => $t->getText() );
-
-                       if ( $namespace ) {
-                               $query['namespace'] = $namespace;
-                       }
-
-                       if ( $hideredirects ) {
-                               $query['hideredirects'] = $hideredirects;
-                       }
-
-                       $nextLink = Linker::linkKnown(
-                               $self,
-                               $this->msg( 'nextpage', $t->getText() )->escaped(),
-                               array(),
-                               $query
-                       );
-                       $topLinks[] = $nextLink;
-                       $bottomLinks[] = $nextLink;
-               }
-
-               $nsForm = $this->namespaceForm( $namespace, $from, $to, $hideredirects );
-               $out2 = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-form' ) ) .
-                       '<tr>
-                                               <td>' .
-                       $nsForm .
-                       '</td>
-                                               <td class="mw-allpages-nav">' .
-                       $this->getLanguage()->pipeList( $topLinks ) .
-                       '</td></tr></table>';
-
-               $output->addHTML( $out2 . $out );
-
-               if ( count( $bottomLinks ) ) {
-                       $output->addHTML(
-                               Html::element( 'hr' ) .
-                                       Html::rawElement( 'div', array( 'class' => 'mw-allpages-nav' ),
-                                               $this->getLanguage()->pipeList( $bottomLinks )
-                                       )
-                       );
-               }
-       }
-
-       /**
-        * @param int $ns The namespace of the article
-        * @param string $text The name of the article
-        * @return array( int namespace, string dbkey, string pagename ) or null on error
-        */
-       protected function getNamespaceKeyAndText( $ns, $text ) {
-               if ( $text == '' ) {
-                       # shortcut for common case
-                       return array( $ns, '', '' );
-               }
-
-               $t = Title::makeTitleSafe( $ns, $text );
-               if ( $t && $t->isLocal() ) {
-                       return array( $t->getNamespace(), $t->getDBkey(), $t->getText() );
-               } elseif ( $t ) {
-                       return null;
-               }
-
-               # try again, in case the problem was an empty pagename
-               $text = preg_replace( '/(#|$)/', 'X$1', $text );
-               $t = Title::makeTitleSafe( $ns, $text );
-               if ( $t && $t->isLocal() ) {
-                       return array( $t->getNamespace(), '', '' );
-               } else {
-                       return null;
-               }
-       }
-
-       protected function getGroupName() {
-               return 'pages';
-       }
-}
index f4ce882..dcd2443 100644 (file)
@@ -83,7 +83,7 @@ class SpecialChangePassword extends FormSpecialPage {
                $request = $this->getRequest();
 
                $oldpassMsg = $this->mOldPassMsg;
-               if ( !isset( $oldpassMsg ) ) {
+               if ( $oldpassMsg === null ) {
                        $oldpassMsg = $user->isLoggedIn() ? 'oldpassword' : 'resetpass-temp-password';
                }
 
index 0571d0d..7481b0c 100644 (file)
@@ -203,11 +203,13 @@ class SpecialContributions extends IncludableSpecialPage {
                                        $out->showLagWarning( $lag );
                                }
 
-                               $out->addHTML(
-                                       '<p>' . $pager->getNavigationBar() . '</p>' .
-                                               $pager->getBody() .
-                                               '<p>' . $pager->getNavigationBar() . '</p>'
-                               );
+                               $output = $pager->getBody();
+                               if ( !$this->including() ) {
+                                       $output = '<p>' . $pager->getNavigationBar() . '</p>' .
+                                               $output.
+                                               '<p>' . $pager->getNavigationBar() . '</p>';
+                               }
+                               $out->addHTML( $output );
                        }
                        $out->preventClickjacking( $pager->getPreventClickjacking() );
 
index ebbef17..02d8d70 100644 (file)
@@ -117,6 +117,21 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                }
        }
 
+       /**
+        * Return an array of subpages beginning with $search that this special page will accept.
+        *
+        * @param string $search Prefix to search for
+        * @param integer $limit Maximum number of results to return
+        * @return string[] Matching subpages
+        */
+       public function prefixSearchSubpages( $search, $limit = 10 ) {
+               // SpecialWatchlist uses SpecialEditWatchlist::getMode, so new types should be added
+               // here and there - no 'edit' here, because that the default for this page
+               $subpages = array( 'clear', 'raw' );
+               $escaped = preg_quote( $search );
+               return array_slice( preg_grep( "/^$escaped/i", $subpages ), 0, $limit );
+       }
+
        /**
         * Extract a list of titles from a blob of text, returning
         * (prefixed) strings; unwatchable titles are ignored
index 9cf5a73..b6c9d55 100644 (file)
@@ -101,7 +101,7 @@ class FileDuplicateSearchPage extends QueryPage {
                $this->setHeaders();
                $this->outputHeader();
 
-               $this->filename = isset( $par ) ? $par : $this->getRequest()->getText( 'filename' );
+               $this->filename = $par !== null ? $par : $this->getRequest()->getText( 'filename' );
                $this->file = null;
                $this->hash = '';
                $title = Title::newFromText( $this->filename, NS_FILE );
index c44e8e1..b88e196 100644 (file)
@@ -209,7 +209,7 @@ class LinkSearchPage extends QueryPage {
                global $wgMiserMode;
                $params = array();
                $params['target'] = $this->mProt . $this->mQuery;
-               if ( isset( $this->mNs ) && !$wgMiserMode ) {
+               if ( $this->mNs !== null && !$wgMiserMode ) {
                        $params['namespace'] = $this->mNs;
                }
 
@@ -244,7 +244,7 @@ class LinkSearchPage extends QueryPage {
                        'options' => array( 'USE INDEX' => $clause )
                );
 
-               if ( isset( $this->mNs ) && !$wgMiserMode ) {
+               if ( $this->mNs !== null && !$wgMiserMode ) {
                        $retval['conds']['page_namespace'] = $this->mNs;
                }
 
index 6b54fe8..3715b8b 100644 (file)
@@ -170,9 +170,14 @@ class ImageListPager extends TablePager {
                                'img_name' => $this->msg( 'listfiles_name' )->text(),
                                'thumb' => $this->msg( 'listfiles_thumb' )->text(),
                                'img_size' => $this->msg( 'listfiles_size' )->text(),
-                               'img_user_text' => $this->msg( 'listfiles_user' )->text(),
-                               'img_description' => $this->msg( 'listfiles_description' )->text(),
                        );
+                       if ( is_null( $this->mUserName ) ) {
+                               // Do not show username if filtering by username
+                               $this->mFieldNames['img_user_text'] = $this->msg( 'listfiles_user' )->text();
+                       }
+                       // img_description down here, in order so that its still after the username field.
+                       $this->mFieldNames['img_description'] = $this->msg( 'listfiles_description' )->text();
+
                        if ( !$wgMiserMode && !$this->mShowAll ) {
                                $this->mFieldNames['count'] = $this->msg( 'listfiles_count' )->text();
                        }
index 6da6674..aaa55a3 100644 (file)
@@ -115,6 +115,22 @@ class SpecialLog extends SpecialPage {
                $this->show( $opts, $qc );
        }
 
+       /**
+        * Return an array of subpages beginning with $search that this special page will accept.
+        *
+        * @param string $search Prefix to search for
+        * @param integer $limit Maximum number of results to return
+        * @return string[] Matching subpages
+        */
+       public function prefixSearchSubpages( $search, $limit = 10 ) {
+               global $wgLogTypes;
+               $subpages = $wgLogTypes;
+               $subpages[] = 'all';
+               sort( $subpages );
+               $escaped = preg_quote( $search );
+               return array_slice( preg_grep( "/^$escaped/i", $subpages ), 0, $limit );
+       }
+
        private function parseParams( FormOptions $opts, $par ) {
                global $wgLogTypes;
 
index 013fc26..cb9dac9 100644 (file)
@@ -51,6 +51,11 @@ class MIMEsearchPage extends QueryPage {
        }
 
        public function getQueryInfo() {
+               $minorType = array();
+               if ( $this->minor !== '*' ) {
+                       // Allow wildcard searching
+                       $minorType['img_minor_mime'] = $this->minor;
+               }
                $qi = array(
                        'tables' => array( 'image' ),
                        'fields' => array(
@@ -67,7 +72,6 @@ class MIMEsearchPage extends QueryPage {
                        ),
                        'conds' => array(
                                'img_major_mime' => $this->major,
-                               'img_minor_mime' => $this->minor,
                                // This is in order to trigger using
                                // the img_media_mime index in "range" mode.
                                'img_media_type' => array(
@@ -81,7 +85,7 @@ class MIMEsearchPage extends QueryPage {
                                        MEDIATYPE_TEXT,
                                        MEDIATYPE_EXECUTABLE,
                                        MEDIATYPE_ARCHIVE,
-                               ),
+                               ) + $minorType,
                        ),
                );
 
@@ -104,6 +108,7 @@ class MIMEsearchPage extends QueryPage {
                global $wgScript;
 
                $mime = $par ? $par : $this->getRequest()->getText( 'mime' );
+               $mime = trim( $mime );
 
                $this->setHeaders();
                $this->outputHeader();
index 8ee583b..8e6a596 100644 (file)
@@ -68,7 +68,6 @@ class MostlinkedTemplatesPage extends QueryPage {
                                'title' => 'tl_title',
                                'value' => 'COUNT(*)'
                        ),
-                       'conds' => array( 'tl_namespace' => NS_TEMPLATE ),
                        'options' => array( 'GROUP BY' => array( 'tl_namespace', 'tl_title' ) )
                );
        }
index 14f3ccd..c60b347 100644 (file)
@@ -210,7 +210,8 @@ class SpecialPasswordReset extends FormSpecialPage {
                $firstUser = $users[0];
 
                if ( !$firstUser instanceof User || !$firstUser->getID() ) {
-                       return array( array( 'nosuchuser', $data['Username'] ) );
+                       // Don't parse username as wikitext (bug 65501)
+                       return array( array( 'nosuchuser', wfEscapeWikiText( $data['Username'] ) ) );
                }
 
                // Check against the rate limiter
@@ -237,7 +238,7 @@ class SpecialPasswordReset extends FormSpecialPage {
                // All the users will have the same email address
                if ( $firstUser->getEmail() == '' ) {
                        // This won't be reachable from the email route, so safe to expose the username
-                       return array( array( 'noemail', $firstUser->getName() ) );
+                       return array( array( 'noemail', wfEscapeWikiText( $firstUser->getName() ) ) );
                }
 
                // We need to have a valid IP address for the hook, but per bug 18347, we should
index b6b60d4..2a1bf11 100644 (file)
@@ -26,7 +26,7 @@
  *
  * @ingroup SpecialPage
  */
-class SpecialPrefixindex extends SpecialAllpages {
+class SpecialPrefixindex extends SpecialAllPages {
 
        /**
         * Whether to remove the searched prefix from the displayed link. Useful
@@ -76,7 +76,7 @@ class SpecialPrefixindex extends SpecialAllpages {
                );
 
                $showme = '';
-               if ( isset( $par ) ) {
+               if ( $par !== null ) {
                        $showme = $par;
                } elseif ( $prefix != '' ) {
                        $showme = $prefix;
@@ -167,6 +167,7 @@ class SpecialPrefixindex extends SpecialAllpages {
                $fromList = $this->getNamespaceKeyAndText( $namespace, $from );
                $prefixList = $this->getNamespaceKeyAndText( $namespace, $prefix );
                $namespaces = $wgContLang->getNamespaces();
+               $res = null;
 
                if ( !$prefixList || !$fromList ) {
                        $out = $this->msg( 'allpagesbadtitle' )->parseAsBlock();
@@ -261,9 +262,7 @@ class SpecialPrefixindex extends SpecialAllpages {
                                '</td>
                                <td id="mw-prefixindex-nav-form" class="mw-prefixindex-nav">';
 
-                       if ( isset( $res ) && $res && ( $n == $this->maxPerPage ) &&
-                               ( $s = $res->fetchObject() )
-                       ) {
+                       if ( $res && ( $n == $this->maxPerPage ) && ( $s = $res->fetchObject() ) ) {
                                $query = array(
                                        'from' => $s->page_title,
                                        'prefix' => $prefix,
index 797f588..d3b168b 100644 (file)
@@ -572,12 +572,12 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                // from dropdown
                $listReason = $this->getRequest()->getText( 'wpRevDeleteReasonList', 'other' );
                $comment = $listReason;
-               if ( $comment != 'other' && $this->otherReason != '' ) {
+               if ( $comment === 'other' ) {
+                       $comment = $this->otherReason;
+               } elseif ( $this->otherReason !== '' ) {
                        // Entry from drop down menu + additional comment
                        $comment .= $this->msg( 'colon-separator' )->inContentLanguage()->text()
                                . $this->otherReason;
-               } elseif ( $comment == 'other' ) {
-                       $comment = $this->otherReason;
                }
                # Can the user set this field?
                if ( $bitParams[Revision::DELETED_RESTRICTED] == 1
index 63eff36..4c8c8f3 100644 (file)
@@ -64,19 +64,7 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                $cSig = self::getQuerySignature( $squery ); // correct signature
                $rSig = $params['signature']; // provided signature
 
-               // Constant-time signature verification
-               // http://www.emerose.com/timing-attacks-explained
-               // @todo Make a common method for this
-               if ( !is_string( $rSig ) || strlen( $rSig ) !== strlen( $cSig ) ) {
-                       $verified = false;
-               } else {
-                       $result = 0;
-                       $cSigLength = strlen( $cSig );
-                       for ( $i = 0; $i < $cSigLength; $i++ ) {
-                               $result |= ord( $cSig[$i] ) ^ ord( $rSig[$i] );
-                       }
-                       $verified = ( $result == 0 );
-               }
+               $verified = is_string( $rSig ) && hash_equals( $cSig, $rSig );
                if ( !$verified || $params['sigexpiry'] < time() ) {
                        header( "HTTP/1.0 400 Bad Request" );
                        print 'Invalid or stale signature provided';
index 2713a5f..1cc5930 100644 (file)
@@ -30,7 +30,7 @@
 class SpecialSearch extends SpecialPage {
        /**
         * Current search profile. Search profile is just a name that identifies
-        * the active search tab on the search page (content, help, discussions...)
+        * the active search tab on the search page (content, discussions...)
         * For users tt replaces the set of enabled namespaces from the query
         * string when applicable. Extensions can add new profiles with hooks
         * with custom search options just for that profile.
@@ -207,8 +207,10 @@ class SpecialSearch extends SpecialPage {
 
                $profile = new ProfileSection( __METHOD__ );
                $search = $this->getSearchEngine();
-               $search->setLimitOffset( $this->limit, $this->offset );
+               // Request an extra result to determine whether a "next page" link is useful
+               $search->setLimitOffset( $this->limit + 1, $this->offset );
                $search->setNamespaces( $this->namespaces );
+               $this->saveNamespaces();
                $search->prefix = $this->mPrefix;
                $term = $search->transformSearchTerm( $term );
 
@@ -373,7 +375,7 @@ class SpecialSearch extends SpecialPage {
                                        $this->offset,
                                        $this->limit,
                                        $this->powerSearchOptions() + array( 'search' => $term ),
-                                       max( $titleMatchesNum, $textMatchesNum ) < $this->limit
+                                       max( $titleMatchesNum, $textMatchesNum ) <= $this->limit
                                );
                        }
                        wfRunHooks( 'SpecialSearchResults', array( $term, &$titleMatches, &$textMatches ) );
@@ -410,7 +412,7 @@ class SpecialSearch extends SpecialPage {
                if ( $num === 0 ) {
                        if ( $textStatus ) {
                                $out->addHTML( '<div class="error">' .
-                                       htmlspecialchars( $textStatus->getWikiText( 'search-error' ) ) . '</div>' );
+                                       $textStatus->getMessage( 'search-error' ) . '</div>' );
                        } else {
                                $out->wrapWikiMsg( "<p class=\"mw-search-nonefound\">\n$1</p>",
                                        array( 'search-nonefound', wfEscapeWikiText( $term ) ) );
@@ -522,6 +524,37 @@ class SpecialSearch extends SpecialPage {
                return $opt + $this->extraParams;
        }
 
+       /**
+        * Save namespace preferences when we're supposed to
+        *
+        * @return bool Whether we wrote something
+        */
+       protected function saveNamespaces() {
+               $user = $this->getUser();
+               $request = $this->getRequest();
+
+               if ( $user->isLoggedIn() &&
+                       !is_null( $request->getVal( 'nsRemember' ) ) &&
+                       $user->matchEditToken( $request->getVal( 'nsToken' ) )
+               ) {
+                       // Reset namespace preferences: namespaces are not searched
+                       // when they're not mentioned in the URL parameters.
+                       foreach ( MWNamespace::getValidNamespaces() as $n ) {
+                               $user->setOption( 'searchNs' . $n, false );
+                       }
+                       // The request parameters include all the namespaces we just searched.
+                       // Even if they're the same as an existing profile, they're not eaten.
+                       foreach ( $this->namespaces as $n ) {
+                               $user->setOption( 'searchNs' . $n, true );
+                       }
+
+                       $user->saveSettings();
+                       return true;
+               }
+
+               return false;
+       }
+
        /**
         * Show whole set of results
         *
@@ -537,9 +570,11 @@ class SpecialSearch extends SpecialPage {
 
                $out = "<ul class='mw-search-results'>\n";
                $result = $matches->next();
-               while ( $result ) {
+               $count = 0;
+               while ( $result && $count < $this->limit ) {
                        $out .= $this->showHit( $result, $terms );
                        $result = $matches->next();
+                       $count++;
                }
                $out .= "</ul>\n";
 
@@ -940,6 +975,19 @@ class SpecialSearch extends SpecialPage {
                        $hidden .= Html::hidden( $key, $value );
                }
 
+               # Stuff to feed saveNamespaces()
+               $remember = '';
+               $user = $this->getUser();
+               if ( $user->isLoggedIn() ) {
+                       $remember .= Html::hidden( 'nsToken', $user->getEditToken() ) .
+                       Xml::checkLabel(
+                               wfMessage( 'powersearch-remember' )->text(),
+                               'nsRemember',
+                               'mw-search-powersearch-remember',
+                               false
+                       );
+               }
+
                // Return final output
                return Xml::openElement(
                        'fieldset',
@@ -951,6 +999,8 @@ class SpecialSearch extends SpecialPage {
                        Xml::element( 'div', array( 'class' => 'divider' ), '', false ) .
                        implode( Xml::element( 'div', array( 'class' => 'divider' ), '', false ), $showSections ) .
                        $hidden .
+                       Xml::element( 'div', array( 'class' => 'divider' ), '', false ) .
+                       $remember .
                        Xml::closeElement( 'fieldset' );
        }
 
@@ -975,14 +1025,6 @@ class SpecialSearch extends SpecialPage {
                                'tooltip' => 'searchprofile-images-tooltip',
                                'namespaces' => array( NS_FILE ),
                        ),
-                       'help' => array(
-                               'message' => 'searchprofile-project',
-                               'tooltip' => 'searchprofile-project-tooltip',
-                               'namespaces' => SearchEngine::helpNamespaces(),
-                               'namespace-messages' => SearchEngine::namespacesAsText(
-                                       SearchEngine::helpNamespaces()
-                               ),
-                       ),
                        'all' => array(
                                'message' => 'searchprofile-everything',
                                'tooltip' => 'searchprofile-everything-tooltip',
index 9ec3c5b..bea65ba 100644 (file)
@@ -69,18 +69,42 @@ class SpecialTrackingCategories extends SpecialPage {
                        $allMsgs = array();
                        $catDesc = $catMsg . '-desc';
                        $catMsgTitle = Title::makeTitleSafe( NS_MEDIAWIKI, $catMsg );
+                       if ( !$catMsgTitle ) {
+                               continue;
+                       }
                        $catMsgTitleText = Linker::link(
                                $catMsgTitle,
                                htmlspecialchars( $catMsg )
                        );
 
-                       if ( strpos( $msgObj->plain(), '{{NAMESPACE}}' ) !== false ) {
+                       // Match things like {{NAMESPACE}} and {{NAMESPACENUMBER}}.
+                       // False positives are ok, this is just an efficiency shortcut
+                       if ( strpos( $msgObj->plain(), '{{' ) !== false ) {
                                $ns = MWNamespace::getValidNamespaces();
                                foreach ( $ns as $namesp ) {
                                        $tempTitle = Title::makeTitleSafe( $namesp, $catMsg );
+                                       if ( !$tempTitle ) {
+                                               continue;
+                                       }
                                        $catName = $msgObj->title( $tempTitle )->text();
-                                       if ( !$msgObj->isDisabled() ) {
+                                       # Allow tracking categories to be disabled by setting them to "-"
+                                       if ( $catName !== '-' ) {
                                                $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
+                                               if ( $catTitle ) {
+                                                       $catTitleText = Linker::link(
+                                                               $catTitle,
+                                                               htmlspecialchars( $catName )
+                                                       );
+                                                       $allMsgs[] = $catTitleText;
+                                               }
+                                       }
+                               }
+                       } else {
+                               $catName = $msgObj->text();
+                               # Allow tracking categories to be disabled by setting them to "-"
+                               if ( $catName !== '-' ) {
+                                       $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
+                                       if ( $catTitle ) {
                                                $catTitleText = Linker::link(
                                                        $catTitle,
                                                        htmlspecialchars( $catName )
@@ -88,19 +112,11 @@ class SpecialTrackingCategories extends SpecialPage {
                                                $allMsgs[] = $catTitleText;
                                        }
                                }
-                       } else {
-                               $catName = $msgObj->text();
-                               if ( !$msgObj->isDisabled() ) {
-                                       $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
-                                       $catTitleText = Linker::link(
-                                               $catTitle,
-                                               htmlspecialchars( $catName )
-                                       );
-                                       $classes = array();
-                               } else {
-                                       $catTitleText = $this->msg( 'trackingcategories-disabled' )->parse();
-                               }
-                               $allMsgs[] = $catTitleText;
+                       }
+
+                       # Extra message, when no category was found
+                       if ( !count( $allMsgs ) ) {
+                               $allMsgs[] = $this->msg( 'trackingcategories-disabled' )->parse();
                        }
 
                        /*
index 6d6b2c1..04b36c7 100644 (file)
@@ -492,15 +492,12 @@ class PageArchive {
                        $previousTimestamp = 0;
                }
 
-               if ( $restoreAll ) {
-                       $oldones = '1 = 1'; # All revisions...
-               } else {
-                       $oldts = implode( ',',
-                               array_map( array( &$dbw, 'addQuotes' ),
-                                       array_map( array( &$dbw, 'timestamp' ),
-                                               $timestamps ) ) );
-
-                       $oldones = "ar_timestamp IN ( {$oldts} )";
+               $oldWhere = array(
+                       'ar_namespace' => $this->title->getNamespace(),
+                       'ar_title' => $this->title->getDBkey(),
+               );
+               if ( !$restoreAll ) {
+                       $oldWhere['ar_timestamp'] = array_map( array( &$dbw, 'timestamp' ), $timestamps );
                }
 
                $fields = array(
@@ -529,10 +526,7 @@ class PageArchive {
                 */
                $result = $dbw->select( 'archive',
                        $fields,
-                       /* WHERE */ array(
-                               'ar_namespace' => $this->title->getNamespace(),
-                               'ar_title' => $this->title->getDBkey(),
-                               $oldones ),
+                       $oldWhere,
                        __METHOD__,
                        /* options */ array( 'ORDER BY' => 'ar_timestamp' )
                );
@@ -550,6 +544,7 @@ class PageArchive {
 
                $ret->seek( $rev_count - 1 ); // move to last
                $row = $ret->fetchObject(); // get newest archived rev
+               $oldPageId = (int)$row->ar_page_id; // pass this to ArticleUndelete hook
                $ret->seek( 0 ); // move back
 
                // grab the content to check consistency with global state before restoring the page.
@@ -617,10 +612,7 @@ class PageArchive {
                }
                # Now that it's safely stored, take it out of the archive
                $dbw->delete( 'archive',
-                       /* WHERE */ array(
-                               'ar_namespace' => $this->title->getNamespace(),
-                               'ar_title' => $this->title->getDBkey(),
-                               $oldones ),
+                       $oldWhere,
                        __METHOD__ );
 
                // Was anything restored at all?
@@ -642,7 +634,7 @@ class PageArchive {
                        );
                }
 
-               wfRunHooks( 'ArticleUndelete', array( &$this->title, $created, $comment ) );
+               wfRunHooks( 'ArticleUndelete', array( &$this->title, $created, $comment, $oldPageId ) );
 
                if ( $this->title->getNamespace() == NS_FILE ) {
                        $update = new HTMLCacheUpdate( $this->title, 'imagelinks' );
index bee94f8..1ef96c3 100644 (file)
@@ -929,7 +929,8 @@ class LoginForm extends SpecialPage {
                                break;
                        case self::ABORTED:
                                $error = $this->mAbortLoginErrorMsg ?: 'login-abort-generic';
-                               $this->mainLoginForm( $this->msg( $error )->text() );
+                               $this->mainLoginForm( $this->msg( $error,
+                                               wfEscapeWikiText( $this->mUsername ) )->text() );
                                break;
                        default:
                                throw new MWException( 'Unhandled case value' );
@@ -1009,7 +1010,7 @@ class LoginForm extends SpecialPage {
                wfRunHooks( 'UserLoginComplete', array( &$currentUser, &$injected_html ) );
 
                if ( $injected_html !== '' ) {
-                       $this->displaySuccessfulAction( $this->msg( 'loginsuccesstitle' ),
+                       $this->displaySuccessfulAction( 'success', $this->msg( 'loginsuccesstitle' ),
                                'loginsuccess', $injected_html );
                } else {
                        $this->executeReturnTo( 'successredirect' );
@@ -1037,18 +1038,22 @@ class LoginForm extends SpecialPage {
                 */
                wfRunHooks( 'BeforeWelcomeCreation', array( &$welcome_creation_msg, &$injected_html ) );
 
-               $this->displaySuccessfulAction( $this->msg( 'welcomeuser', $this->getUser()->getName() ),
-                       $welcome_creation_msg, $injected_html );
+               $this->displaySuccessfulAction(
+                       'signup',
+                       $this->msg( 'welcomeuser', $this->getUser()->getName() ),
+                       $welcome_creation_msg, $injected_html
+               );
        }
 
        /**
-        * Display an "successful action" page.
+        * Display a "successful action" page.
         *
+        * @param string $type condition of return to; see `executeReturnTo`
         * @param string|Message $title Page's title
         * @param string $msgname
         * @param string $injected_html
         */
-       private function displaySuccessfulAction( $title, $msgname, $injected_html ) {
+       private function displaySuccessfulAction( $type, $title, $msgname, $injected_html ) {
                $out = $this->getOutput();
                $out->setPageTitle( $title );
                if ( $msgname ) {
@@ -1057,7 +1062,7 @@ class LoginForm extends SpecialPage {
 
                $out->addHTML( $injected_html );
 
-               $this->executeReturnTo( 'success' );
+               $this->executeReturnTo( $type );
        }
 
        /**
@@ -1103,6 +1108,7 @@ class LoginForm extends SpecialPage {
         *
         * @param string $type One of the following:
         *    - error: display a return to link ignoring $wgRedirectOnLogin
+        *    - signup: display a return to link using $wgRedirectOnLogin if needed
         *    - success: display a return to link using $wgRedirectOnLogin if needed
         *    - successredirect: send an HTTP redirect using $wgRedirectOnLogin if needed
         * @param string $returnTo
@@ -1124,6 +1130,7 @@ class LoginForm extends SpecialPage {
         *
         * @param string $type One of the following:
         *    - error: display a return to link ignoring $wgRedirectOnLogin
+        *    - signup: display a return to link using $wgRedirectOnLogin if needed
         *    - success: display a return to link using $wgRedirectOnLogin if needed
         *    - successredirect: send an HTTP redirect using $wgRedirectOnLogin if needed
         */
@@ -1138,6 +1145,9 @@ class LoginForm extends SpecialPage {
                        $returnToQuery = wfCgiToArray( $this->mReturnToQuery );
                }
 
+               // Allow modification of redirect behavior
+               wfRunHooks( 'PostLoginRedirect', array( &$returnTo, &$returnToQuery, &$type ) );
+
                $returnToTitle = Title::newFromText( $returnTo );
                if ( !$returnToTitle ) {
                        $returnToTitle = Title::newMainPage();
index 8a5ba1d..411970e 100644 (file)
@@ -547,7 +547,7 @@ class UserrightsPage extends SpecialPage {
                                ->rawParams( $userToolLinks )->parse() .
                        $this->msg( 'userrights-groups-help', $user->getName() )->parse() .
                        $grouplist .
-                       Xml::tags( 'p', null, $this->groupCheckboxes( $groups, $user ) ) .
+                       $this->groupCheckboxes( $groups, $user ) .
                        Xml::openElement( 'table', array( 'id' => 'mw-userrights-table-outer' ) ) .
                                "<tr>
                                        <td class='mw-label'>" .
index 41847dc..657999c 100644 (file)
@@ -377,9 +377,7 @@ class SpecialVersion extends SpecialPage {
         * Returns an array with the base extension types.
         * Type is stored as array key, the message as array value.
         *
-        * TODO: ideally this would return all extension types, including
-        * those added by SpecialVersionExtensionTypes. This is not possible
-        * since this hook is passing along $this though.
+        * TODO: ideally this would return all extension types.
         *
         * @since 1.17
         *
@@ -433,8 +431,6 @@ class SpecialVersion extends SpecialPage {
 
                $extensionTypes = self::getExtensionTypes();
 
-               wfRunHooks( 'SpecialVersionExtensionTypes', array( &$this, &$extensionTypes ), '1.17' );
-
                $out = Xml::element(
                                'h2',
                                array( 'id' => 'mw-version-ext' ),
index 490e81f..2aec8df 100644 (file)
@@ -79,6 +79,20 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                parent::execute( $subpage );
        }
 
+       /**
+        * Return an array of subpages beginning with $search that this special page will accept.
+        *
+        * @param string $search Prefix to search for
+        * @param integer $limit Maximum number of results to return
+        * @return string[] Matching subpages
+        */
+       public function prefixSearchSubpages( $search, $limit = 10 ) {
+               // See also SpecialEditWatchlist::prefixSearchSubpages
+               $subpages = array( 'clear', 'edit', 'raw' );
+               $escaped = preg_quote( $search );
+               return array_slice( preg_grep( "/^$escaped/i", $subpages ), 0, $limit );
+       }
+
        /**
         * Get a FormOptions object containing the default options
         *
index 6488810..d980f79 100644 (file)
@@ -64,7 +64,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                $opts->validateIntBounds( 'limit', 0, 5000 );
 
                // Give precedence to subpage syntax
-               if ( isset( $par ) ) {
+               if ( $par !== null ) {
                        $opts->setValue( 'target', $par );
                }
 
index b32780f..b8ca434 100644 (file)
@@ -1298,6 +1298,8 @@ abstract class UploadBase {
        public function checkSvgScriptCallback( $element, $attribs ) {
                list( $namespace, $strippedElement ) = $this->splitXmlNamespace( $element );
 
+               // We specifically don't include:
+               // http://www.w3.org/1999/xhtml (bug 60771)
                static $validNamespaces = array(
                        '',
                        'adobe:ns:meta/',
@@ -1328,11 +1330,14 @@ abstract class UploadBase {
                        'http://purl.org/dc/elements/1.1',
                        'http://schemas.microsoft.com/visio/2003/svgextensions/',
                        'http://sodipodi.sourceforge.net/dtd/sodipodi-0.dtd',
+                       'http://taptrix.com/inkpad/svg_extensions',
                        'http://web.resource.org/cc/',
                        'http://www.freesoftware.fsf.org/bkchem/cdml',
                        'http://www.inkscape.org/namespaces/inkscape',
+                       'http://www.opengis.net/gml',
                        'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
                        'http://www.w3.org/2000/svg',
+                       'http://www.w3.org/tr/rec-rdf-syntax/',
                );
 
                if ( !in_array( $namespace, $validNamespaces ) ) {
index 1f38631..e4e1cfd 100644 (file)
@@ -66,7 +66,8 @@ define( 'IP_ADDRESS_STRING',
  */
 class IP {
        /** @var IPSet */
-       private static $ipSet = null;
+       private static $proxyIpSet = null;
+
        /**
         * Determine if a string is as valid IP address or network (CIDR prefix).
         * SIIT IPv4-translated addresses are rejected.
@@ -301,16 +302,6 @@ class IP {
                }
        }
 
-       /**
-        * Given an unsigned integer, returns an IPv6 address in octet notation
-        *
-        * @param $ip_int String: IP address.
-        * @return String
-        */
-       public static function toOctet( $ip_int ) {
-               return self::hexToOctet( wfBaseConvert( $ip_int, 10, 16, 32, false ) );
-       }
-
        /**
         * Convert an IPv4 or IPv6 hexadecimal representation back to readable format
         *
@@ -374,67 +365,19 @@ class IP {
         * @return Boolean
         */
        public static function isPublic( $ip ) {
-               if ( self::isIPv6( $ip ) ) {
-                       return self::isPublic6( $ip );
-               }
-               $n = self::toUnsigned( $ip );
-               if ( !$n ) {
-                       return false;
-               }
-
-               // ip2long accepts incomplete addresses, as well as some addresses
-               // followed by garbage characters. Check that it's really valid.
-               if ( $ip != long2ip( $n ) ) {
-                       return false;
-               }
-
-               static $privateRanges = false;
-               if ( !$privateRanges ) {
-                       $privateRanges = array(
-                               array( '10.0.0.0', '10.255.255.255' ), # RFC 1918 (private)
-                               array( '172.16.0.0', '172.31.255.255' ), # RFC 1918 (private)
-                               array( '192.168.0.0', '192.168.255.255' ), # RFC 1918 (private)
-                               array( '0.0.0.0', '0.255.255.255' ), # this network
-                               array( '127.0.0.0', '127.255.255.255' ), # loopback
-                       );
-               }
-
-               foreach ( $privateRanges as $r ) {
-                       $start = self::toUnsigned( $r[0] );
-                       $end = self::toUnsigned( $r[1] );
-                       if ( $n >= $start && $n <= $end ) {
-                               return false;
-                       }
-               }
-
-               return true;
-       }
-
-       /**
-        * Determine if an IPv6 address really is an IP address, and if it is public,
-        * i.e. not RFC 4193 or similar
-        *
-        * @param $ip String
-        * @return Boolean
-        */
-       private static function isPublic6( $ip ) {
-               static $privateRanges = false;
-               if ( !$privateRanges ) {
-                       $privateRanges = array(
-                               array( 'fc00::', 'fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' ), # RFC 4193 (local)
-                               array( '0:0:0:0:0:0:0:1', '0:0:0:0:0:0:0:1' ), # loopback
-                       );
-               }
-               $n = self::toHex( $ip );
-               foreach ( $privateRanges as $r ) {
-                       $start = self::toHex( $r[0] );
-                       $end = self::toHex( $r[1] );
-                       if ( $n >= $start && $n <= $end ) {
-                               return false;
-                       }
-               }
-
-               return true;
+               static $privateSet = null;
+               if ( !$privateSet ) {
+                       $privateSet = new IPSet( array(
+                               '10.0.0.0/8', # RFC 1918 (private)
+                               '172.16.0.0/12', # RFC 1918 (private)
+                               '192.168.0.0/16', # RFC 1918 (private)
+                               '0.0.0.0/8', # this network
+                               '127.0.0.0/8', # loopback
+                               'fc00::/7', # RFC 4193 (local)
+                               '0:0:0:0:0:0:0:1', # loopback
+                       ) );
+               }
+               return !$privateSet->match( $ip );
        }
 
        /**
@@ -446,16 +389,29 @@ class IP {
         * hexadecimal string which sorts after the IPv4 addresses.
         *
         * @param string $ip quad dotted/octet IP address.
-        * @return String
+        * @return String|bool false on failure
         */
        public static function toHex( $ip ) {
                if ( self::isIPv6( $ip ) ) {
                        $n = 'v6-' . self::IPv6ToRawHex( $ip );
-               } else {
-                       $n = self::toUnsigned( $ip );
+               } elseif ( self::isIPv4( $ip ) ) {
+                       // Bug 60035: an IP with leading 0's fails in ip2long sometimes (e.g. *.08)
+                       $ip = preg_replace( '/(?<=\.)0+(?=[1-9])/', '', $ip );
+                       $n = ip2long( $ip );
+                       if ( $n < 0 ) {
+                               $n += pow( 2, 32 );
+                               # On 32-bit platforms (and on Windows), 2^32 does not fit into an int,
+                               # so $n becomes a float. We convert it to string instead.
+                               if ( is_float( $n ) ) {
+                                       $n = (string)$n;
+                               }
+                       }
                        if ( $n !== false ) {
-                               $n = wfBaseConvert( $n, 10, 16, 8, false );
+                               # Floating points can handle the conversion; faster than wfBaseConvert()
+                               $n = strtoupper( str_pad( base_convert( $n, 10, 16 ), 8, '0', STR_PAD_LEFT ) );
                        }
+               } else {
+                       $n = false;
                }
 
                return $n;
@@ -465,12 +421,12 @@ class IP {
         * Given an IPv6 address in octet notation, returns a pure hex string.
         *
         * @param string $ip octet ipv6 IP address.
-        * @return String: pure hex (uppercase)
+        * @return String|bool pure hex (uppercase); false on failure
         */
        private static function IPv6ToRawHex( $ip ) {
                $ip = self::sanitizeIP( $ip );
                if ( !$ip ) {
-                       return null;
+                       return false;
                }
                $r_ip = '';
                foreach ( explode( ':', $ip ) as $v ) {
@@ -480,41 +436,6 @@ class IP {
                return $r_ip;
        }
 
-       /**
-        * Given an IP address in dotted-quad/octet notation, returns an unsigned integer.
-        * Like ip2long() except that it actually works and has a consistent error return value.
-        *
-        * @param string $ip quad dotted IP address.
-        * @return Mixed: string/int/false
-        */
-       public static function toUnsigned( $ip ) {
-               if ( self::isIPv6( $ip ) ) {
-                       $n = self::toUnsigned6( $ip );
-               } else {
-                       // Bug 60035: an IP with leading 0's fails in ip2long sometimes (e.g. *.08)
-                       $ip = preg_replace( '/(?<=\.)0+(?=[1-9])/', '', $ip );
-                       $n = ip2long( $ip );
-                       if ( $n < 0 ) {
-                               $n += pow( 2, 32 );
-                               # On 32-bit platforms (and on Windows), 2^32 does not fit into an int,
-                               # so $n becomes a float. We convert it to string instead.
-                               if ( is_float( $n ) ) {
-                                       $n = (string)$n;
-                               }
-                       }
-               }
-
-               return $n;
-       }
-
-       /**
-        * @param $ip
-        * @return String
-        */
-       private static function toUnsigned6( $ip ) {
-               return wfBaseConvert( self::IPv6ToRawHex( $ip ), 16, 10 );
-       }
-
        /**
         * Convert a network specification in CIDR notation
         * to an integer network and a number of bits
@@ -585,13 +506,10 @@ class IP {
                                return self::parseRange6( $range );
                        }
                        if ( self::isIPv4( $start ) && self::isIPv4( $end ) ) {
-                               $start = self::toUnsigned( $start );
-                               $end = self::toUnsigned( $end );
+                               $start = self::toHex( $start );
+                               $end = self::toHex( $end );
                                if ( $start > $end ) {
                                        $start = $end = false;
-                               } else {
-                                       $start = sprintf( '%08X', $start );
-                                       $end = sprintf( '%08X', $end );
                                }
                        } else {
                                $start = $end = false;
@@ -676,20 +594,14 @@ class IP {
                                $start = "v6-$start";
                                $end = "v6-$end";
                        }
-       // Explicit range notation...
+               // Explicit range notation...
                } elseif ( strpos( $range, '-' ) !== false ) {
                        list( $start, $end ) = array_map( 'trim', explode( '-', $range, 2 ) );
-                       $start = self::toUnsigned6( $start );
-                       $end = self::toUnsigned6( $end );
+                       $start = self::toHex( $start );
+                       $end = self::toHex( $end );
                        if ( $start > $end ) {
                                $start = $end = false;
-                       } else {
-                               $start = wfBaseConvert( $start, 10, 16, 32, false );
-                               $end = wfBaseConvert( $end, 10, 16, 32, false );
                        }
-                       # see toHex() comment
-                       $start = "v6-$start";
-                       $end = "v6-$end";
                } else {
                        # Single IP
                        $start = $end = self::toHex( $range );
@@ -806,12 +718,13 @@ class IP {
 
                // Check against addresses and CIDR nets in the NoPurge list
                if ( !$trusted ) {
-                       if ( !self::$ipSet ) {
-                               self::$ipSet = new IPSet( $wgSquidServersNoPurge );
+                       if ( !self::$proxyIpSet ) {
+                               self::$proxyIpSet = new IPSet( $wgSquidServersNoPurge );
                        }
-                       $trusted = self::$ipSet->match( $ip );
+                       $trusted = self::$proxyIpSet->match( $ip );
                }
                wfProfileOut( __METHOD__ );
+
                return $trusted;
        }
 
@@ -820,6 +733,6 @@ class IP {
         * Use this only for unit tests.
         */
        public static function clearCaches() {
-               self::$ipSet = null;
+               self::$proxyIpSet = null;
        }
 }
diff --git a/includes/utils/MWCryptHKDF.php b/includes/utils/MWCryptHKDF.php
new file mode 100644 (file)
index 0000000..6b6655e
--- /dev/null
@@ -0,0 +1,331 @@
+<?php
+/**
+ * Extract-and-Expand Key Derivation Function (HKDF). A cryptographicly
+ * secure key expansion function based on RFC 5869.
+ *
+ * This relies on the secrecy of $wgSecretKey (by default), or $wgHKDFSecret.
+ * By default, sha256 is used as the underlying hashing algorithm, but any other
+ * algorithm can be used. Finding the secret key from the output would require
+ * an attacker to discover the input key (the PRK) to the hmac that generated
+ * the output, and discover the particular data, hmac'ed with an evolving key
+ * (salt), to produce the PRK. Even with md5, no publicly known attacks make
+ * this currently feasible.
+ *
+ * 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
+ *
+ * @author Chris Steipp
+ * @file
+ */
+
+class MWCryptHKDF {
+
+       /**
+        * Singleton instance for public use
+        */
+       protected static $singleton = null;
+
+       /**
+        * The persistant cache
+        */
+       protected $cache = null;
+
+       /**
+        * Cache key we'll use for our salt
+        */
+       protected $cacheKey = null;
+
+       /**
+        * The hash algorithm being used
+        */
+       protected $algorithm = null;
+
+       /**
+        * binary string, the salt for the HKDF
+        */
+       protected $salt;
+
+       /**
+        * The pseudorandom key
+        */
+       private $prk;
+
+       /**
+        * The secret key material. This must be kept secret to preserve
+        * the security properties of this RNG.
+        */
+       private $skm;
+
+       /**
+        * The last block (K(i)) of the most recent expanded key
+        */
+       protected $lastK;
+
+       /**
+        * a "context information" string CTXinfo (which may be null)
+        * See http://eprint.iacr.org/2010/264.pdf Section 4.1
+        */
+       protected $context = array();
+
+       /**
+        * Round count is computed based on the hash'es output length,
+        * which neither php nor openssl seem to provide easily.
+        */
+       public static $hashLength = array(
+               'md5' => 16,
+               'sha1' => 20,
+               'sha224' => 28,
+               'sha256' => 32,
+               'sha384' => 48,
+               'sha512' => 64,
+               'ripemd128' => 16,
+               'ripemd160' => 20,
+               'ripemd256' => 32,
+               'ripemd320' => 40,
+               'whirlpool' => 64,
+       );
+
+
+       /**
+        * @param string $hash Name of hashing algorithm
+        * @param BagOStuff $cache
+        * @param string|array $context to mix into HKDF context
+        */
+       public function __construct( $secretKeyMaterial, $algorithm, $cache, $context ) {
+               if ( strlen( $secretKeyMaterial ) < 16 ) {
+                       throw new MWException( "MWCryptHKDF secret was too short." );
+               }
+               $this->skm = $secretKeyMaterial;
+               $this->algorithm = $algorithm;
+               $this->cache = $cache;
+               $this->salt = ''; // Initialize a blank salt, see getSaltUsingCache()
+               $this->prk = '';
+               $this->context = is_array( $context ) ? $context : array( $context );
+
+               // To prevent every call from hitting the same memcache server, pick
+               // from a set of keys to use. mt_rand is only use to pick a random
+               // server, and does not affect the security of the process.
+               $this->cacheKey = wfMemcKey( 'HKDF', mt_rand( 0, 16 ) );
+       }
+
+       /**
+        * Save the last block generated, so the next user will compute a different PRK
+        * from the same SKM. This should keep things unpredictable even if an attacker
+        * is able to influence CTXinfo.
+        */
+       function __destruct() {
+               if ( $this->lastK ) {
+                       $this->cache->set( $this->cacheKey, $this->lastK );
+               }
+       }
+
+       /**
+        * MW specific salt, cached from last run
+        * @return string binary string
+        */
+       protected function getSaltUsingCache() {
+               if ( $this->salt == '' ) {
+                       $lastSalt = $this->cache->get( $this->cacheKey );
+                       if ( $lastSalt === false ) {
+                               // If we don't have a previous value to use as our salt, we use
+                               // 16 bytes from MWCryptRand, which will use a small amount of
+                               // entropy from our pool. Note, "XTR may be deterministic or keyed
+                               // via an optional “salt value”  (i.e., a non-secret random
+                               // value)..." - http://eprint.iacr.org/2010/264.pdf. However, we
+                               // use a strongly random value since we can.
+                               $lastSalt = MWCryptRand::generate( 16 );
+                       }
+                       // Get a binary string that is hashLen long
+                       $this->salt = hash( $this->algorithm, $lastSalt, true );
+               }
+               return $this->salt;
+       }
+
+       /**
+        * Return a singleton instance, based on the global configs.
+        * @return HKDF
+        */
+       protected static function singleton() {
+               global $wgHKDFAlgorithm, $wgHKDFSecret, $wgSecretKey;
+
+               $secret = $wgHKDFSecret ?: $wgSecretKey;
+               if ( !$secret ) {
+                       throw new MWException( "Cannot use MWCryptHKDF without a secret." );
+               }
+
+               // In HKDF, the context can be known to the attacker, but this will
+               // keep simultaneous runs from producing the same output.
+               $context = array();
+               $context[] = microtime();
+               $context[] = getmypid();
+               $context[] = gethostname();
+
+               // Setup salt cache. Use APC, or fallback to the main cache if it isn't setup
+               try {
+                       $cache = ObjectCache::newAccelerator( array() );
+               } catch ( Exception $e ) {
+                       $cache = wfGetMainCache();
+               }
+
+               if ( is_null( self::$singleton ) ) {
+                       self::$singleton = new self( $secret, $wgHKDFAlgorithm, $cache, $context );
+               }
+
+               return self::$singleton;
+       }
+
+       /**
+        * Produce $bytes of secure random data. As a side-effect,
+        * $this->lastK is set to the last hashLen block of key material.
+        * @param int $bytes number of bytes of data
+        * @param string $context to mix into CTXinfo
+        * @return string binary string of length $bytes
+        */
+       protected function realGenerate( $bytes, $context = '' ) {
+
+               if ( $this->prk === '' ) {
+                       $salt = $this->getSaltUsingCache();
+                       $this->prk = self::HKDFExtract(
+                               $this->algorithm,
+                               $salt,
+                               $this->skm
+                       );
+               }
+
+               $CTXinfo = implode( ':', array_merge( $this->context, array( $context ) ) );
+
+               return self::HKDFExpand(
+                       $this->algorithm,
+                       $this->prk,
+                       $CTXinfo,
+                       $bytes,
+                       $this->lastK
+               );
+       }
+
+
+       /**
+        * RFC5869 defines HKDF in 2 steps, extraction and expansion.
+        * From http://eprint.iacr.org/2010/264.pdf:
+        *
+        * The scheme HKDF is specifed as:
+        *      HKDF(XTS, SKM, CTXinfo, L) = K(1) || K(2) || ... || K(t)
+        * where the values K(i) are defined as follows:
+        *      PRK = HMAC(XTS, SKM)
+        *      K(1) = HMAC(PRK, CTXinfo || 0);
+        *      K(i+1) = HMAC(PRK, K(i) || CTXinfo || i), 1 <= i < t;
+        * where t = [L/k] and the value K(t) is truncated to its first d = L mod k bits;
+        * the counter i is non-wrapping and of a given fixed size, e.g., a single byte.
+        * Note that the length of the HMAC output is the same as its key length and therefore
+        * the scheme is well defined.
+        *
+        * XTS is the "extractor salt"
+        * SKM is the "secret keying material"
+        *
+        * N.B. http://eprint.iacr.org/2010/264.pdf seems to differ from RFC 5869 in that the test
+        * vectors from RFC 5869 only work if K(0) = '' and K(1) = HMAC(PRK, K(0) || CTXinfo || 1)
+        *
+        * @param string $hash the hashing function to use (e.g., sha256)
+        * @param string $ikm the input keying material
+        * @param string $salt the salt to add to the ikm, to get the prk
+        * @param string $info optional context (change the output without affecting
+        *      the randomness properties of the output)
+        * @param integer $L number of bytes to return
+        * @return string cryptographically secure pseudorandom binary string
+        */
+       public static function HKDF( $hash, $ikm, $salt, $info, $L ) {
+               $prk = self::HKDFExtract( $hash, $salt, $ikm );
+               $okm = self::HKDFExpand( $hash, $prk, $info, $L );
+               return $okm;
+       }
+
+       /**
+        * Extract the PRK, PRK = HMAC(XTS, SKM)
+        * Note that the hmac is keyed with XTS (the salt),
+        * and the SKM (source key material) is the "data".
+        *
+        * @param string $hash the hashing function to use (e.g., sha256)
+        * @param string $ikm the input keying material
+        * @param string $salt the salt to add to the ikm, to get the prk
+        * @return string binary string (pseudorandm key) used as input to HKDFExpand
+        */
+       private static function HKDFExtract( $hash, $salt, $ikm ) {
+               return hash_hmac( $hash, $ikm, $salt, true );
+       }
+
+       /**
+        * Expand the key with the given context
+        *
+        * @param $hash Hashing Algorithm
+        * @param $prk a pseudorandom key of at least HashLen octets
+         *     (usually, the output from the extract step)
+        * @param $info optional context and application specific information
+         *     (can be a zero-length string)
+        * @param $bytes length of output keying material in bytes
+         *     (<= 255*HashLen)
+        * @param &$lastK set by this function to the last block of the expansion.
+        *      In MediaWiki, this is used to seed future Extractions.
+        * @return string cryptographically secure random string $bytes long
+        */
+       private static function HKDFExpand( $hash, $prk, $info, $bytes, &$lastK = '' ) {
+               $hashLen = MWCryptHKDF::$hashLength[$hash];
+               $rounds = ceil( $bytes / $hashLen );
+               $output = '';
+
+               if ( $bytes > 255 * $hashLen ) {
+                       throw new MWException( "Too many bytes requested from HDKFExpand" );
+               }
+
+               // K(1) = HMAC(PRK, CTXinfo || 1);
+               // K(i) = HMAC(PRK, K(i-1) || CTXinfo || i); 1 < i <= t;
+               for ( $counter = 1; $counter <= $rounds; ++$counter ) {
+                       $lastK = hash_hmac(
+                               $hash,
+                               $lastK . $info . chr($counter),
+                               $prk,
+                               true
+                       );
+                       $output .= $lastK;
+               }
+
+               return substr( $output, 0, $bytes );
+       }
+
+       /**
+        * Generate cryptographically random data and return it in raw binary form.
+        *
+        * @param int $bytes the number of bytes of random data to generate
+        * @param string $context string to mix into HMAC context
+        * @return string binary string of length $bytes
+        */
+       public static function generate( $bytes, $context ) {
+               return self::singleton()->realGenerate( $bytes, $context );
+       }
+
+       /**
+        * Generate cryptographically random data and return it in hexadecimal string format.
+        * See MWCryptRand::realGenerateHex for details of the char-to-byte conversion logic.
+        *
+        * @param int $chars the number of hex chars of random data to generate
+        * @param string $context string to mix into HMAC context
+        * @return string random hex characters, $chars long
+        */
+       public static function generateHex( $chars, $context = '' ) {
+               $bytes = ceil( $chars / 2 );
+               $hex = bin2hex( self::singleton()->realGenerate( $bytes, $context ) );
+               return substr( $hex, 0, $chars );
+       }
+
+}
index 0172974..eb74d12 100644 (file)
@@ -134,12 +134,10 @@ class MWCryptRand {
                // It's mostly worthless but throw the wiki's id into the data for a little more variance
                $state .= wfWikiID();
 
-               // If we have a secret key or proxy key set then throw it into the state as well
-               global $wgSecretKey, $wgProxyKey;
+               // If we have a secret key set then throw it into the state as well
+               global $wgSecretKey;
                if ( $wgSecretKey ) {
                        $state .= $wgSecretKey;
-               } elseif ( $wgProxyKey ) {
-                       $state .= $wgProxyKey;
                }
 
                return $state;
index 1419bbb..6be186f 100644 (file)
@@ -546,6 +546,9 @@ class ZipDirectoryReader {
         * If there are not enough bytes in the file to satisfy the request, the
         * return value will be truncated. If a request is made for a segment beyond
         * the end of the file, an empty string will be returned.
+        *
+        * @param int $segIndex
+        *
         * @return string
         */
        function getSegment( $segIndex ) {
index 38d3af5..e505b28 100644 (file)
@@ -1880,7 +1880,7 @@ class Language {
        /**
         * Used by date() and time() to adjust the time output.
         *
-        * @param int $ts The time in date('YmdHis') format
+        * @param string $ts The time in date('YmdHis') format
         * @param mixed $tz Adjust the time by this amount (default false, mean we
         *   get user timecorrection setting)
         * @return int
@@ -2020,7 +2020,7 @@ class Language {
        }
 
        /**
-        * @param mixed $ts The time format which needs to be turned into a
+        * @param string $ts The time format which needs to be turned into a
         *   date('YmdHis') format with wfTimestamp(TS_MW,$ts)
         * @param bool $adj Whether to adjust the time output according to the
         *   user configured offset ($timecorrection)
@@ -2039,7 +2039,7 @@ class Language {
        }
 
        /**
-        * @param mixed $ts The time format which needs to be turned into a
+        * @param string $ts The time format which needs to be turned into a
         *   date('YmdHis') format with wfTimestamp(TS_MW,$ts)
         * @param bool $adj Whether to adjust the time output according to the
         *   user configured offset ($timecorrection)
@@ -2058,7 +2058,7 @@ class Language {
        }
 
        /**
-        * @param mixed $ts The time format which needs to be turned into a
+        * @param string $ts The time format which needs to be turned into a
         *   date('YmdHis') format with wfTimestamp(TS_MW,$ts)
         * @param bool $adj Whether to adjust the time output according to the
         *   user configured offset ($timecorrection)
@@ -2149,7 +2149,7 @@ class Language {
         * Internal helper function for userDate(), userTime() and userTimeAndDate()
         *
         * @param string $type Can be 'date', 'time' or 'both'
-        * @param mixed $ts The time format which needs to be turned into a
+        * @param string $ts The time format which needs to be turned into a
         *   date('YmdHis') format with wfTimestamp(TS_MW,$ts)
         * @param User $user User object used to get preferences for timezone and format
         * @param array $options Array, can contain the following keys:
@@ -3981,9 +3981,11 @@ class Language {
        }
 
        /**
+        * @deprecated since 1.24, will be removed in 1.25
         * @return Language
         */
        function getLangObj() {
+               wfDeprecated( __METHOD__, '1.24' );
                return $this;
        }
 
old mode 100755 (executable)
new mode 100644 (file)
index 68d3d11..d17d38c 100644 (file)
        "vector-view-view": "Lees",
        "vector-view-viewsource": "Wys bronteks",
        "actions": "Aksies",
+       "vector-more-actions": "Meer",
        "namespaces": "Naamruimtes",
        "variants": "Variante",
        "navigation-heading": "Navigasie-keuseskerm",
        "jumptonavigation": "navigasie",
        "jumptosearch": "soek",
        "view-pool-error": "Jammer, die bedieners is tans oorbelas.\nTe veel gebruikers probeer om na hierdie bladsy te kyk.\nWag asseblief 'n rukkie voordat u weer probeer om die bladsy op te roep.\n\n$1",
+       "generic-pool-error": "Jammer, die bedieners is tans oorbelas.\nTe veel gebruikers probeer om na hierdie bladsy te kyk.\nWag asseblief 'n rukkie voordat u weer probeer.",
        "pool-timeout": "Die maksimum wagtyd vir 'n databasisversperring is oorskry.",
        "pool-queuefull": "Die poel se wagtou is vol",
        "pool-errorunknown": "Onbekende fout",
+       "pool-servererror": "Die \"pool counter\"-diens is nie beskikbaar nie ($1).",
        "aboutsite": "Inligting oor {{SITENAME}}",
        "aboutpage": "Project:Omtrent",
        "copyright": "Inhoud is onderhewig aan $1, tensy anders vermeld",
        "gotaccountlink": "Meld aan",
        "userlogin-resetlink": "U besonderhede vergeet?",
        "userlogin-resetpassword-link": "Wagwoord vergeet?",
+       "userlogin-helplink2": "Hulp met aanmelding",
        "userlogin-loggedin": "U is reeds aangemeld as {{GENDER:$1|$1}}.\nGebruik die onderstaande vorm om as 'n ander gebruiker aan te meld.",
        "userlogin-createanother": "Skep nog 'n rekening",
        "createacct-emailrequired": "E-posadres",
        "undo-success": "Die wysiging kan ongedaan gemaak word.\nKontroleer die vergelyking hieronder om seker te maak dis wat u wil doen, en stoor dan om die terugrol te voltooi.",
        "undo-failure": "Die wysiging kan nie ongedaan gemaak word nie omdat dit met intermediêre wysigings bots.",
        "undo-norev": "Die wysiging kon nie ongedaan gemaak word nie omdat dit nie bestaan nie of reeds verwyder is.",
+       "undo-nochange": "Die wysiging is klaarblyklik reeds teruggerol.",
        "undo-summary": "Rol weergawe $1 deur [[Special:Contributions/$2|$2]] ([[User talk:$2|bespreek]]) terug.",
        "undo-summary-username-hidden": "Rol weergawe $1 deur 'n versteekte gebruiker terug",
        "cantcreateaccounttitle": "Kan nie rekening skep nie",
        "revdelete-hide-user": "Steek redigeerder se gebruikersnaam/IP weg",
        "revdelete-hide-restricted": "Onderdruk data van administrateurs asook andere",
        "revdelete-radio-same": "(moenie verander nie)",
-       "revdelete-radio-set": "Ja",
-       "revdelete-radio-unset": "Nee",
+       "revdelete-radio-set": "Versteek",
+       "revdelete-radio-unset": "Sigbaar",
        "revdelete-suppress": "Onderdruk data van administrateurs en ander.",
        "revdelete-unsuppress": "Verwyder beperkinge op herstelde weergawes",
        "revdelete-log": "Rede:",
        "searchmenu-exists": "'''Daar is reeds 'n bladsy genaamd \"[[:$1]]\" op die wiki'''",
        "searchmenu-new": "<strong>Skep die bladsy \"[[:$1]]\" op hierdie wiki</strong> {{PLURAL:$2|0=|Sien ook die bladsy wat in u soektog gevind is.|Sien ook die soekresultate wat gevind is.}}",
        "searchprofile-articles": "Inhoudelike bladsye",
-       "searchprofile-project": "Hulp- en projekbladsye",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alles",
        "searchprofile-advanced": "Uitgebreid",
        "searchprofile-articles-tooltip": "Soek in $1",
-       "searchprofile-project-tooltip": "Soek in $1",
        "searchprofile-images-tooltip": "Soek na lêers",
        "searchprofile-everything-tooltip": "Soek deur alle inhoud (ook besprekingsbladsye)",
        "searchprofile-advanced-tooltip": "Soek in spesifieke naamruimtes",
        "search-interwiki-default": "Resultate van $1:",
        "search-interwiki-more": "(meer)",
        "search-relatedarticle": "Verwante",
-       "searcheverything-enable": "Soek in alle naamruimtes",
        "searchrelated": "verwante",
        "searchall": "alle",
        "showingresults": "Hier volg {{PLURAL:$1|'''1''' resultaat|'''$1''' resultate}} vanaf #'''$2'''.",
        "allowemail": "Laat e-pos van ander toe",
        "prefs-searchoptions": "Soek",
        "prefs-namespaces": "Naamruimtes",
-       "defaultns": "Anders, soek in hierdie naamruimtes:",
        "default": "verstek",
        "prefs-files": "Lêers",
        "prefs-custom-css": "Persoonlike CSS",
        "prefs-signature": "Handtekening",
        "prefs-dateformat": "Datumformaat",
        "prefs-timeoffset": "Tydsverskil",
-       "prefs-advancedediting": "Algemeen",
+       "prefs-advancedediting": "Algemene instellings",
        "prefs-editor": "Redigeerder",
        "prefs-preview": "Voorskou",
        "prefs-advancedrc": "Gevorderde instellings",
        "right-move": "Skuif bladsye",
        "right-move-subpages": "skuif bladsye met hul subblaaie",
        "right-move-rootuserpages": "Skuif gebruikersblaaie op hoogste vlak",
+       "right-move-categorypages": "Skuif kategoriebladsye",
        "right-movefile": "Skuif lêers",
        "right-suppressredirect": "Geen aansture agterlaat by die skuif van bladsye nie",
        "right-upload": "Laai lêers op",
        "action-createpage": "skep bladsye",
        "action-createtalk": "skep besprekingsblaaie",
        "action-createaccount": "skep die gebruiker",
+       "action-history": "wys die bladsy se geskiedenis",
        "action-minoredit": "merk die wysiging as 'n klein verandering",
        "action-move": "skuif die bladsy",
        "action-move-subpages": "skuif die bladsy met sy subbladsye",
        "action-move-rootuserpages": "gebruikersbladsye van die hoogste vlak te skuif nie",
+       "action-move-categorypages": "skuif kategoriebladsye",
        "action-movefile": "skuif die lêer",
        "action-upload": "laai die lêer op",
        "action-reupload": "oorskryf die bestaande lêer",
        "listusers": "Gebruikerslys",
        "listusers-editsonly": "Slegs gebruikers met wysigings",
        "listusers-creationsort": "Sorteer volgens registrasiedatum",
+       "listusers-desc": "Sorteer in aflopende volgorde",
        "usereditcount": "$1 {{PLURAL:$1|wysiging|wysigings}}",
        "usercreated": "{{GENDER:$3|Geregistreer}} op $1 om $2",
        "newpages": "Nuwe bladsye",
        "listgrouprights-removegroup-self": "Die volgende {{PLURAL:$2|groep|groepe}} verwyder van eie gebruiker: $1",
        "listgrouprights-addgroup-self-all": "Alle groepe byvoeg tot eie gebruiker",
        "listgrouprights-removegroup-self-all": "Alle groepe verwyder van eie gebruiker",
+       "listgrouprights-namespaceprotection-header": "Naamruimtebeperkings",
        "listgrouprights-namespaceprotection-namespace": "Naamruimte",
+       "trackingcategories-msg": "Volg kategorie",
        "trackingcategories-name": "Boodskapnaam",
        "trackingcategories-nodesc": "Geen beskrywing beskikbaar nie.",
        "trackingcategories-disabled": "Kategorie is gedeaktiveer",
        "pageinfo-category-pages": "Aantal bladsye",
        "pageinfo-category-subcats": "Aantal subkategorieë",
        "pageinfo-category-files": "Aantal lêers",
-       "skinname-cologneblue": "Keulen blou",
        "markaspatrolleddiff": "Merk as gekontroleerd",
        "markaspatrolledtext": "Merk hierdie bladsy as gekontroleerd",
        "markedaspatrolled": "As gekontroleerd gemerk",
        "watchlistedit-raw-done": "U dophoulys is opgedateer.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 titel|$1 titels}} was bygevoeg:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 titel|$1 titels}} verwyder:",
+       "watchlistedit-clear-titles": "Titels:",
+       "watchlistedit-clear-done": "U dophoulys is uitgevee.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 titel|$1 titels}} is verwyder:",
+       "watchlisttools-clear": "Vee dophoulys uit",
        "watchlisttools-view": "Besigtig veranderinge",
        "watchlisttools-edit": "Bekyk en wysig dophoulys",
        "watchlisttools-raw": "Wysig bronkode",
        "htmlform-no": "Nee",
        "htmlform-yes": "Ja",
        "htmlform-chosen-placeholder": "Kies 'n opsie",
+       "htmlform-cloner-create": "Meer meer by",
        "htmlform-cloner-delete": "Verwyder",
        "htmlform-cloner-required": "Ten minste één waarde verwag.",
        "sqlite-has-fts": "Weergawe $1 met ondersteuning vir vol-teks soektogte (\"full-text search\")",
index 3752ef0..6672085 100644 (file)
        "userlogin-yourname-ph": "የብዕር ስም ያስገቡ",
        "createacct-another-username-ph": "የብዕር ስም ያስገቡ",
        "yourpassword": "Password / መግቢያ ቃል",
+       "userlogin-yourpassword": "የይለፍ ቃል",
        "userlogin-yourpassword-ph": "የመግቢያ ቃል ያስገቡ",
+       "createacct-yourpassword-ph": "የይለፍ ቃል ያስገቡ",
        "yourpasswordagain": "መግቢያ ቃልዎን ዳግመኛ ይስጡ",
        "createacct-yourpasswordagain": "የመግቢያ ቃሉን ይድገሙ",
        "createacct-yourpasswordagain-ph": "የመግቢያ ቃሉን ይድገሙ",
        "gotaccount": "(አባልነት አሁን ካለዎ፥ '''$1''' ይግቡ)",
        "gotaccountlink": "በዚህ",
        "userlogin-resetlink": "የመግቢያ ዝርዝርዎን ረተዋልን?",
+       "userlogin-resetpassword-link": "የይለፍ ቃልዎን አጡ?",
        "createacct-emailrequired": "ኢ-ሜይል አድራሻ",
        "createacct-email-ph": "ኢ-ሜይል አድራሻዎን ያስገቡ",
        "createaccountmail": "በኢ-ሜል",
        "loginlanguagelabel": "ቋምቋ፦ $1",
        "pt-login": "ለመግባት",
        "pt-login-button": "ለመግባት",
+       "pt-userlogout": "መውጫ",
        "user-mail-no-addy": "እሚደርስበት ኢ-ሜል አድራሻ ሳይታወቅ መላክ አይቻልም።",
        "changepassword": "መግቢያ ቃልዎን ለመቀየር",
        "resetpass_announce": "በኢ-ሜል በተላከ ጊዜያዊ ኮድ ገብተዋል። መግባትዎን ለመጨርስ፣ አዲስ መግቢያ ቃል እዚህ መምረጥ አለብዎ።",
        "edit-gone-missing": "ገጹን ማሳደስ አልተቻለም።  እንደ ጠፋ ይመስላል።",
        "edit-conflict": "ተቃራኒ ለውጥ።",
        "edit-no-change": "በጽሕፈቱ አንዳችም አልተለወጠምና ለውጥዎ ቸል ተብሏል።",
+       "postedit-confirmation-saved": "እርማትዎ ተቆጥቧል",
        "edit-already-exists": "አዲስ ገጽ ለመፍጠር አልተቻለም፤\nገና ይኖራልና።",
        "defaultmessagetext": "የቆየው ጽሕፈት",
        "content-model-javascript": "ጃቫ ስክሪፕት",
        "searchmenu-exists": "'''\"[[:$1]]\" የሚባል መጣጥፍ በዚሁ ዊኪ ላይ አለ።'''",
        "searchmenu-new": "'''\"[[:$1]]\" የሚባል መጣጥፍ ይፈጠር?'''",
        "searchprofile-articles": "ይዞታ ያላቸው መጣጥፎች",
-       "searchprofile-project": "የዕርዳታ እና የመርሃግብሩ ገጾች",
        "searchprofile-images": "ፋይሎች",
        "searchprofile-everything": "ሁሉም",
        "searchprofile-advanced": "የተደረጀ ፍለጋ",
        "searchprofile-articles-tooltip": "በ$1 ለመፈለግ",
-       "searchprofile-project-tooltip": "በ$1 ለመፈለግ",
        "searchprofile-images-tooltip": "ለፋይሎች ለመፈለግ",
        "searchprofile-everything-tooltip": "ይዞታውን ሁሉ (ከነውይይት ገጾች) ለመፈለግ",
        "searchprofile-advanced-tooltip": "በልዩ ክፍለ-ዊኪዎች ለመፈለግ",
        "search-interwiki-default": "$1 ውጤቶች፦",
        "search-interwiki-more": "(ተጨማሪ)",
        "search-relatedarticle": "የተዛመደ",
-       "searcheverything-enable": "በክፍለ-ዊኪዎች ሁሉ ለመፈለግ",
        "searchrelated": "የተዛመደ",
        "searchall": "ሁሉ",
        "showingresults": "ከ ቁ.#<b>$2</b> ጀምሮ እስከ <b>$1</b> ውጤቶች ድረስ ከዚህ በታች ይታያሉ።",
        "allowemail": "ኢሜል ከሌሎች ተጠቃሚዎች ለመፍቀድ",
        "prefs-searchoptions": "የፍለጋ ምርጫዎች",
        "prefs-namespaces": "ክፍለ-ዊኪዎች",
-       "defaultns": "በመጀመርያው ፍለጋዎ በነዚህ ክፍለ-ዊኪዎች ብቻ ይደረግ:",
        "default": "ቀዳሚ",
        "prefs-files": "የስዕሎች መጠን",
        "prefs-custom-css": "ልዩ CSS",
        "prefs-emailconfirm-label": "የኢ-ሜል ማረጋገጫ",
        "youremail": "ኢ-ሜል *",
        "username": "የብዕር ስም:",
-       "uid": "የገባበት ቁ.: #",
        "prefs-memberingroups": "ተጠቃሚው {{PLURAL:$1|ያለበት ስብስባ|ያለባቸው ስብስባዎች}}፦",
        "prefs-registration": "የተመዘገበበት ሰዓት፦",
        "yourrealname": "ዕውነተኛ ስም፦",
        "logempty": "(በመዝገቡ ምንም የለም...)",
        "log-title-wildcard": "ከዚህ ፊደል ጀምሮ አርዕስቶችን ለመፈልግ",
        "allpages": "ገጾች ሁሉ በሙሉ",
-       "alphaindexline": "$1 እስከ $2 ድረስ",
        "nextpage": "የሚቀጥለው ገጽ (ከ$1 ጀምሮ)",
        "prevpage": "ፊተኛው ገጽ (ከ$1 ጀምሮ)",
        "allpagesfrom": "ገጾች ከዚሁ ፊደል ጀምሮ ይታዩ፦",
index 41eb136..e05a19a 100644 (file)
        "newwindow": "(openaþ in nīwum ēagþyrele)",
        "cancel": "Undōn",
        "moredotdotdot": "Mā...",
-       "morenotlisted": "Mā þe nis on getæle...",
+       "morenotlisted": "Þis getæl nis fulfyled.",
        "mypage": "Mīn tramet",
        "mytalk": "Mīn mōtung",
        "anontalk": "Þisses IP naman mōtung",
        "articlepage": "Sēon innunge tramet",
        "talk": "Mōtung",
        "views": "Sihþa",
-       "toolbox": "Tōlmearc",
+       "toolbox": "Tōlas",
        "userpage": "Sēon brūcendes tramet",
        "projectpage": "Sēon weorces tramet",
        "imagepage": "Sēon ymelan tramet",
        "pool-errorunknown": "Uncūþ wōh",
        "aboutsite": "Gecȳþness ymbe {{GRAMMAR:wrēgendlīc|{{SITENAME}}}}",
        "aboutpage": "Project:Gecȳþness",
-       "copyright": "Man mæg innunge under $1 findan.",
+       "copyright": "Man mæg innunge under $1 findan, būton þǣr hit is elles amearcod.",
        "copyrightpage": "{{ns:project}}:Gelīcnessriht",
        "currentevents": "Gelimpunga þisses tīman",
        "currentevents-url": "Project:Gelimpunga þisses tīman",
        "youhavenewmessages": "Þū hæfst $1 ($2).",
        "youhavenewmessagesfromusers": "Þū hafast $1 fram {{PLURAL:$3|ōðrum brūcende|$3 brūcenda}} ($2).",
        "youhavenewmessagesmanyusers": "Þū hafast $1 fram manigum brūcendum ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|nīwe ǣrendgewrit|nīwra ǣrendgewrita}}",
+       "newmessageslinkplural": "{{PLURAL:$1|nīwe ǣrendgewrit|999=nīwra ǣrendgewrita}}",
        "youhavenewmessagesmulti": "Þū hæfst nīwu ǣrendu on $1",
        "editsection": "adihtan",
        "editold": "adihtan",
        "viewsource-title": "Fruman for $1 sēon",
        "cascadeprotected": "Þes trament wæs geborgen wiþ adihtunge, for þǣm þe hē is befangen in þissum {{PLURAL:$1|tramente, þe is| tramentum, þe sind}} geborgen settum wyrcende þǣm cyre \"cascading\": $2",
        "exception-nologin": "Ne inloggod",
-       "virus-badscanner": "Bad configuration: Unknown virus scanner: $1",
+       "virus-badscanner": "Yfel gesetedness: Uncūþ wyrmsēcend: <em>$1</em>",
        "virus-unknownscanner": "uncūþ andgund:",
        "logouttext": "'''Þū eart nū ūtmeldod.'''\n\nÞū canst ætfeolan þǣre nytte {{SITENAME}} tō ungecūðum, oþþe þū canst <span class='plainlinks'>[$1 inmeldian eft]</span> tō þǣm ylcan oþþe ōðrum brūcende.\nCnāw þæt sume trametas mihten gīet wesan geīwde swā þū wǣre gīet inmeldod, oþ þæt þū clǣnsie þīnes sēcendtōles hord.",
        "welcomeuser": "Wilcume, $1!",
        "userlogout": "Ūtmeldian",
        "notloggedin": "Nā ingemeldod",
        "userlogin-noaccount": "Næfst þu hordcleofan?",
-       "userlogin-joinproject": "Join {{SITENAME}}",
+       "userlogin-joinproject": "Ƿeorðan gylda of {{SITENAME}}",
        "nologin": "Næfst þū reccinge? $1",
        "nologinlink": "Scieppan reccinge",
        "createaccount": "Scieppan reccinge",
        "gotaccount": "Hafast þū reccinge ǣr? $1.",
        "gotaccountlink": "Inmeldian",
        "userlogin-resetpassword-link": "Forgēate þū þīn gelēafword?",
-       "createaccountmail": "Notian sceortne tīman hlētlic þafungword and sendan hit to þǣm spearcǣrenda naman þe is niðer",
+       "createaccountmail": "Notian hwīlendlic hlīetlic þafungword and sendan hit tō þǣm genamodan spearcǣrendnaman",
        "createaccountreason": "Racu:",
        "badretype": "Þā þafungword þe write þū, bēoþ ungelīc.",
        "userexists": "Se brūcendnama is ǣr gebrocen. Cēos lā ōðerne naman.",
        "nosuchuser": "Þǣr nis nān brūcend þe hæfþ þone naman \"$1\".\nStafena micelnessa sind hefiga and ānlica on brūcendnamum.\nScēawa þīne wrītunge eft, oþþe [[Special:UserLogin/signup|sciepp nīwe reccinge]].",
        "nosuchusershort": "Þǣr nis nān brūcend mid þǣm naman \"$1\".  Scēawa þīne wrītunge.",
        "passwordtooshort": "Þafungword sculon habban læst {{PLURAL:$1|1 stafan|$1 stafena}}.",
-       "mailmypassword": "Sendan nīwe þafungword on spearcǣrende",
+       "mailmypassword": "Settan þafungword eft",
        "acct_creation_throttle_hit": "Nēosiende tō þissum wici, þe þīnne IP-Stōwe brȳcþ, hæfþ gesett {{PLURAL:$1|1 hordcleofan|$1 hordcleofan}} in þǣm læsten dæge. Þu ne canst settan ǣnige māran. Þǣrfram ne cunnon Nēosiende, þe þisne IP-Stōwe brȳcþ, settan ǣnige hordcleofan māran on þisse handhwīle.",
        "accountcreated": "Scōp reccinge",
        "loginlanguagelabel": "Sprǣc: $1",
        "newarticle": "(Nīwe)",
        "newarticletext": "Þū hæfst hlencan tō tramete þe nū gīet ne stent gefolgod.\nTō scieppene þone tramet, onginn tō wrītenne in þǣre mearce þe is beneoþan (seoh þone [$1 helpes tramet] ymb mā cȳþþu).\nGif þū hider be misfēnge cōme, cnoca þīnes webbsēcendes '''on bæc''' cnæpp.",
        "usercssyoucanpreview": "'''Rǣd:''' Brūc þone \"{{int:Forescēaƿian}}\" cnæpp tō costnienne þīne nīwan css/js wrītunge ǣr hit sīe hordod.",
-       "userjsyoucanpreview": "'''Rǣd:''' Brūc þone 'Forescēawian' cnæpp tō āfandienne þīne nīwe css/js beforan sparunge.",
+       "userjsyoucanpreview": "'''Rǣd:''' Brūc þone 'Īwan fōrebysene' cnæpp tō costienne þīnre nīwan JavaScrip fadunge ǣr þū hordie.",
        "updated": "(Ednīwed)",
        "note": "'''Gewritincel:'''",
        "previewnote": "'''Beþenc þe þis is gīet efne fōrebysen.'''\nÞīna andwendunga gīet ne sind hordoda!",
        "template-semiprotected": "(sāmborgen)",
        "hiddencategories": "Þes tramet is gesibb {{PLURAL:$1|1 gehȳdedum flocce|$1 gehȳdedra flocca}}:",
        "nocreate-loggedin": "Þū ne hæfst þafunge to scieppenne nīwe trametas.",
-       "permissionserrors": "Þafunga wōh",
+       "permissionserrors": "Þafunge wōh",
        "permissionserrorstext-withaction": "Þū ne hæfst þafunge tō $2, for {{PLURAL:$1|þisre race|þissum racum}}:",
        "recreate-moveddeleted-warn": "'''Warnung: Þū edsciepst tramet þe wæs ǣr forloren.'''\n\nÞu sceoldest smēagan, hwæðer hit gerādlīc sīe, forþ tō gānne mid þǣre adihtunge þisses trametes.\nÞæt forlēosunge and wegunge ealdhord þisses trametes is hēr geīeht for behēfnesse:",
        "viewpagelogs": "Sēon þisses trametes ealdhold",
        "rev-delundel": "īwan/hȳdan",
        "rev-showdeleted": "īwan",
        "revdelete-show-file-submit": "Gēa",
-       "revdelete-hide-text": "Hȳdan ednīwunge traht",
+       "revdelete-hide-text": "Nēosunge traht",
        "revdelete-hide-image": "Hȳdan ymelan innunge",
-       "revdelete-hide-comment": "Hȳdan adihtunge sceortnesse",
-       "revdelete-hide-user": "Hȳdan adihtendes brūcendnaman/IP address",
+       "revdelete-hide-comment": "Adihtunge sceortness",
+       "revdelete-hide-user": "Adihtendes brūcendnama/IP nama",
        "revdelete-radio-same": "(nā andwendan)",
        "revdelete-radio-set": "Gehȳdd",
        "revdelete-radio-unset": "Gesīene",
        "prevn": "ǣror {{PLURAL:$1|$1}}",
        "nextn": "nīehst {{PLURAL:$1|$1}}",
        "viewprevnext": "Sēon ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-new": "'''Scieppan þone tramet \"[[:$1]]\" on þissum wiki!'''",
+       "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-project": "Helpes and Weorca trametas",
        "searchprofile-images": "Missenendebyrdness",
        "searchprofile-everything": "Gehwæt",
        "searchprofile-articles-tooltip": "Sēcan in $1",
-       "searchprofile-project-tooltip": "Sēcan in $1",
        "searchprofile-images-tooltip": "Sēcan ymelan",
        "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 worda}})",
        "search-redirect": "(edlǣded fram \"$1\")",
        "search-section": "(dǣl $1)",
        "search-suggest": "Mǣnst þū: $1",
        "search-interwiki-caption": "Sweostorweorc",
-       "search-interwiki-default": "$1 becymas:",
+       "search-interwiki-default": "Þing fram $1:",
        "search-interwiki-more": "(mā)",
        "searchrelated": "gesibb",
        "searchall": "eall",
        "savedprefs": "Þīna fōreberunga wurdon gehordod.",
        "timezonelegend": "Tīdgeard",
        "servertime": "Þegntōles tīd is nū:",
-       "defaultns": "Elles sēcan on þissum namstedum:",
        "default": "gewunelic",
        "youremail": "Spearcǣrenda nama:",
        "username": "{{GENDER:$1|Brūcendnama}}:",
        "yourrealname": "Þīn sōða nama:",
        "yourlanguage": "Brūcendofermearces sprǣc",
        "yourvariant": "Sprǣce wendung:",
-       "yourgender": "Gecynd:",
-       "gender-male": "Wer",
-       "gender-female": "Wīf",
+       "yourgender": "Hū līcaþ þē wesan amearcod?",
+       "gender-male": "Hē adihteþ wikitrametas",
+       "gender-female": "Hēo adihteþ wikitrametas",
        "email": "Spearcǣrend",
        "userrights-user-editname": "Wrīt brūcendnaman:",
        "editusergroup": "Adihtan brūcendhēapas",
        "group-user-member": "{{GENDER:$1|brūcend|brūcicge}}",
        "group-bot-member": "{{GENDER:$1|searuþrǣl}}",
        "group-sysop-member": "{{GENDER:$1|bewitend|bewiticge}}",
-       "group-suppress-member": "oferȝesiht",
+       "group-suppress-member": "{{GENDER:$1|uncūþ}}",
        "grouppage-sysop": "{{ns:project}}:Bewitendas",
        "newuserlogpage": "Brūcenda scieppunge ealdhord",
        "rightslog": "Brūcenda riht cranic",
        "recentchanges-label-newpage": "Þēos adihtung scōp nīwne tramet",
        "recentchanges-label-minor": "Þēos is lytel adihtung",
        "recentchanges-label-bot": "Searuþrǣl fremede þās adihtunge",
-       "recentchanges-legend-newpage": "$1 - nīƿu sīde",
-       "rcnotefrom": "Niðer sind þā andwendunga fram '''$2''' (mǣst īweþ '''$1''').",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (seoh ēac [[Special:NewPages|getæl nīwra trameta]])",
+       "rcnotefrom": "Niðer sind þā andwendunga fram <strong>$2</strong> (mǣst īweþ <strong>$1</strong>).",
        "rclistfrom": "Īwan nīwa andwendunga fram $3 $2 and siþþan",
        "rcshowhideminor": "$1 lytela adihtunga",
        "rcshowhidebots": "$1 searuþrǣlas",
-       "rcshowhideliu": "$1 inmeldode brūcendas",
+       "rcshowhideliu": "$1 brūcendas on nambēc",
        "rcshowhideanons": "$1 uncūðe brūcendas",
        "rcshowhidemine": "$1 mīna adihtunga",
        "rclinks": "Īwan þā nīwostan $1 andwendunga in þissum nīehstum $2 daga<br />$3",
        "license-header": "Lēaf:",
        "nolicense": "Nān is gecoren",
        "license-nopreview": "(Fōrebysen nis gearu)",
-       "listfiles-summary": "Þes syndriga tramet īweþ ealla forþ gehladena ymelan.\nGif se brūcend asifte hine. synderlīce sind ymelan geīwda þǣre þe se brūcend forþ hlōd þā nīwostan fadunge.",
+       "listfiles-summary": "Þes syndriga tramet īweþ ealla forþ gehladena ymelan.",
        "listfiles_search_for": "Sēcan missenendebyrdnesse naman:",
        "imgfile": "ymele",
        "listfiles": "Ymelena getæl",
        "withoutinterwiki": "Trametas būtan sprǣchlencum",
        "withoutinterwiki-summary": "Þā folgiendan trametas nabbaþ hlencan tō ōðrum sprǣcfadungum.",
        "nbytes": "$1 {{PLURAL:$1|bita|bitena}}",
-       "ncategories": "$1 {{PLURAL:$1|flocca|flocca}}",
+       "ncategories": "$1 {{PLURAL:$1|flocc|flocca}}",
        "nlinks": "$1 {{PLURAL:$1|hlenca|hlencena}}",
        "nmembers": "$1 {{PLURAL:$1|gesīþ|gesīða}}",
        "specialpage-empty": "Nis þǣr nāht þe āh cȳðan þes tramet.",
        "speciallogtitlelabel": "Ende (trametes titul oþþe brūcendes nama):",
        "log": "Ealdhord",
        "allpages": "Ealle trametas",
-       "alphaindexline": "$1 oþ $2",
        "nextpage": "Nīehst tramet ($1)",
        "prevpage": "Ǣrra tramet ($1)",
        "allpagesfrom": "Īwan trametas fram:",
        "watchthispage": "Behealdan þisne tramet",
        "unwatch": "Ablinnan behealdunge",
        "unwatchthispage": "Ablinnan behealdunge",
-       "watchlist-details": "{{PLURAL:$1|Þǣr is $1 tramet|Þǣr sind $1 trameta}} on þīnum behealdunggetæle, nā arīmedum mōtunga trametum.",
+       "watchlist-details": "{{PLURAL:$1|Þǣr is $1 tramet|Þǣr sind $1 trameta}} on þīnum behealdunggetæle, nā sunderlīce arīmedum mōtunga trametum.",
        "wlshowlast": "Īwan þā nīwostan $1 tīda $2 daga $3",
        "watchlist-options": "Behealdungtæles cyras",
        "watching": "Behealdende...",
        "contributions": "{{GENDER:$1|Brūcendes}} forðunga",
        "contributions-title": "Brūcendes forðunga for $1",
        "mycontris": "Mīna forðunga",
-       "contribsub2": "For $1 ($2)",
+       "contribsub2": "For {{GENDER:$3|$1}} ($2)",
        "uctop": "(genge)",
        "month": "Fram mōnþe (and ǣr)",
        "year": "Fram iēare (and ǣr)",
        "file-info-size": "$1 × $2 pixels, ymelan micelu: $3, MIME cynn: $4",
        "file-nohires": "Þǣr nis nǣnig māre micelness.",
        "svg-long-desc": "SVG ymele, rihte $1 × $2 pixela, ymelan micelness: $3",
-       "show-big-image": "Full micelness",
+       "show-big-image": "Frumlicu ymele",
        "imagelisttext": "Niðer is getæl '''$1''' {{PLURAL:$1|ymelan|ymelena}}, endebyrded on $2.",
        "noimages": "Nāht tō sēonne.",
        "ilsubmit": "Sēcan",
index 4649132..f8d7e74 100644 (file)
@@ -44,7 +44,8 @@
                        "وهراني",
                        "아라",
                        "Test Create account",
-                       "Kuwaity26"
+                       "Kuwaity26",
+                       "Calak"
                ]
        },
        "tog-underline": "سطر تحت الوصلات:",
        "vector-view-view": "اقرأ",
        "vector-view-viewsource": "اعرض المصدر",
        "actions": "أفعال",
+       "vector-more-actions": "مزيد",
        "namespaces": "فضاءات التسمية",
        "variants": "المتغيرات",
        "navigation-heading": "قائمة التصفح",
        "node-count-exceeded-category": "تجاوزات تعداد العقد",
        "node-count-exceeded-warning": "تجاوزت هذه الصفحة تعداد العقد",
        "expansion-depth-exceeded-category": "تجاوزات عمق التوسيع",
+       "expansion-depth-exceeded-category-desc": "هذا تصنيف للصفحات التي تتجاوز عمق التوسيع.",
        "expansion-depth-exceeded-warning": "الصفحة تجاوزت عمق التوسيع",
        "parser-unstrip-loop-warning": "حلقة معراة تم الكشف عنها",
        "parser-unstrip-recursion-limit": "تعدى حد العودية Unstrip  ($1)",
        "revdelete-show-file-confirm": "هل أنت متأكد أنك تريد رؤية مراجعة محذوفة للملف \"<nowiki>$1</nowiki>\" بتاريخ $2 الساعة $3؟",
        "revdelete-show-file-submit": "نعم",
        "logdelete-selected": "{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:",
+       "revdelete-text-others": "سيتمكن الإداريون الآخرون على {{SITENAME}} من الوصول إلى المحتوى المخفي وإلغاء حذفه مجددا من خلال ذات الواجهة ما لم تطبق قيود إضافية.",
        "revdelete-confirm": "الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.\nمن فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].",
        "revdelete-suppress-text": "ينبغي للإخفاء أن يستخدم '''فقط''' في الحالات التالية:\n* معلومات يحتمل أن تكون تشهيرية\n* معلومات شخصية غير ملائمة\n*: ''عناوين المنازل وأرقام الهواتف وأرقام الهويات الوطنية إلى آخره.''",
        "revdelete-legend": "وضع ضوابط رؤية",
        "searchmenu-exists": "'''توجد صفحة اسمها \"[[:$1]]\" على هذه الويكي.''' {{PLURAL:$2|0=|انظر ايضا نتائج البحث الأخرى.}}",
        "searchmenu-new": "<strong>أنشئ الصفحة \"[[:$1]]\" على هذه الويكي!</strong>  {{PLURAL:$2|0=|انظر أيضا الصفحة التي تم العثور عليها من بحثك.|انظر ايضا نتائج البحث.}}",
        "searchprofile-articles": "صفحات المحتوى",
-       "searchprofile-project": "صفحات المساعدة والمشروع",
        "searchprofile-images": "الوسائط المتعددة",
        "searchprofile-everything": "الكل",
        "searchprofile-advanced": "متقدم",
        "searchprofile-articles-tooltip": "ابحث في $1",
-       "searchprofile-project-tooltip": "ابحث في $1",
        "searchprofile-images-tooltip": "ابحث عن الصور",
        "searchprofile-everything-tooltip": "ابحث في كل المحتوى (شاملا صفحات النقاش)",
        "searchprofile-advanced-tooltip": "ابحث في النطاقات المخصصة",
        "search-interwiki-default": "نتائح من $1:",
        "search-interwiki-more": "(المزيد)",
        "search-relatedarticle": "مرتبطة",
-       "searcheverything-enable": "ابحث في جميع النطاقات",
        "searchrelated": "مرتبطة",
        "searchall": "الكل",
        "showingresults": "معروض بالأسفل {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} بدءا من رقم '''$2'''.",
        "powersearch-togglelabel": "اختر:",
        "powersearch-toggleall": "الكل",
        "powersearch-togglenone": "لا شيء",
+       "powersearch-remember": "تذكر الاختيار لبحث المستقبل",
        "search-external": "بحث خارجي",
        "searchdisabled": "البحث في {{SITENAME}} معطل.\nيمكنك البحث من خلال جوجل في الوقت الحالي.\nلاحظ أن فهارسه لمحتوى {{SITENAME}} ربما تكون غير محدثة.",
        "search-error": "حدث خطأ ما أثناء البحث: $1",
        "allowemail": "مكن تلقي البريد الإلكتروني من المستخدمين الآخرين",
        "prefs-searchoptions": "البحث",
        "prefs-namespaces": "أسماء النطاقات",
-       "defaultns": "أو ابحث في هذه النطاقات:",
        "default": "افتراضي",
        "prefs-files": "ملفات",
        "prefs-custom-css": "CSS مخصص",
        "recentchanges-label-unpatrolled": "لم يراجع هذا التعديل إلى الآن",
        "recentchanges-label-plusminus": "حجم الصفحة تغير بهذا العدد من وحدات البايت",
        "recentchanges-legend-heading": "شرح",
-       "recentchanges-legend-newpage": "(راجع أيضا [[Special:NewPages|قائمة الصفحات الجديدة]])",
-       "rcnotefrom": "بالأسفل التغييرات منذ '''$2''' (إلى '''$1''' معروضة).",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (راجع أيضا [[Special:NewPages|قائمة الصفحات الجديدة]])",
+       "rcnotefrom": "بالأسفل التغييرات منذ <strong>$2</strong> (إلى <strong>$1</strong> معروضة).",
        "rclistfrom": "أظهر التغييرات بدء من $3 $2",
        "rcshowhideminor": "$1 التعديلات الطفيفة",
        "rcshowhideminor-show": "أظهر",
        "pageswithprop-prophidden-binary": "قيمة الخاصية الثنائية المخفية ($1)",
        "doubleredirects": "تحويلات مزدوجة",
        "doubleredirectstext": "هذه الصفحة تعرض الصفحات التي تحول إلى صفحات تحويل أخرى.\nكل سطر يحتوي على وصلات للتحويلة الأولى والثانية وهدف التحويلة الثانية، والذي عادة ما يشير إلى صفحة الهدف \"الحقيقية\"، التي من المفترض أن تحول إليها التحويلة الأولى.\nالمدخلات <del>المشطوبة</del> صححت.",
-       "double-redirect-fixed-move": "[[$1]] تم نقلها، هي الآن تحويلة إلى [[$2]]",
-       "double-redirect-fixed-maintenance": "تصليح تحويلة مزدوجة من [[$1]] إلى [[$2]].",
+       "double-redirect-fixed-move": "نُقلت [[$1]].\nحُدّثت تلقائيا وهي الآن تحويلة إلى [[$2]].",
+       "double-redirect-fixed-maintenance": "تصحيح تلقائي لتحويلة مزدوجة من [[$1]] إلى [[$2]] في مهمة صيانة.",
        "double-redirect-fixer": "مصلح التحويل",
        "brokenredirects": "تحويلات مكسورة",
        "brokenredirectstext": "التحويلات التالية تصل لصفحات غير موجودة:",
        "wantedtemplates": "قوالب مطلوبة",
        "mostlinked": "أكثر الصفحات وصلا",
        "mostlinkedcategories": "أكثر التصنيفات ارتباطا",
-       "mostlinkedtemplates": "أكثر القوالب وصلا",
+       "mostlinkedtemplates": "أكثر الصفحات تضمينا",
        "mostcategories": "أكثر الصفحات تصنيفا",
        "mostimages": "أكثر الملفات ارتباطا",
        "mostinterwikis": "الصفحات التي تحتوي على أغلب وصلات الإنترويكي",
        "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}}.",
+       "trackingcategories-msg": "تصانيف التتبع",
        "trackingcategories-name": "اسم الرسالة",
        "trackingcategories-desc": "معايير إدراج تصنيف",
+       "noindex-category-desc": "هذه الصفحة لا تفهرسها الروبوتات لأن فيها الكلمة السحرية <code><nowiki>__NOINDEX__</nowiki></code> ولأنها في نطاق يسمح بهذا العلم.",
+       "index-category-desc": "الصفحة فيها <code><nowiki>__INDEX__</nowiki></code> (وهي في نطاق يسمح بهذا العلم) ولذا فالروبوتات تفهرسها بينما الأصل ألا تفعل.",
+       "post-expand-template-inclusion-category-desc": "بعد توسيع جميع القوالب حجم الصفحة أكبر من <code><nowiki>__INDEX__</nowiki></code> ولذا فبعض القوالب لا تُوسّع.",
+       "post-expand-template-argument-category-desc": "بعد توسيع معطى قالب (الموجود بين أقواس معقوفة ثلاثة مثل <code>{{{شيء}}}</code>) الصفحة أكبر من <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "دوال المعالجة المكلفة (مثل <code>#ifexist</code>) كثيرة جدا. راجع [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "يضاف التصنيف إذا كانت الصفحة تحتوي وصلة معطوبة (وصلة لتضمين ملف والملف غير موجود)",
+       "hidden-category-category-desc": "التصنيف الذي فيه <code><nowiki>__HIDDENCAT__</nowiki></code> والذي يمنع مبدئيا عرضه في صندوق وصلات التصانيف في الصفحات.",
+       "trackingcategories-nodesc": "لا يتوفر وصف.",
        "trackingcategories-disabled": "التصنيف غير مفعل",
        "mailnologin": "لا يوجد عنوان للإرسال",
        "mailnologintext": "يجب أن تقوم [[Special:UserLogin|بتسجيل الدخول]] وإدخال بريد إلكتروني صالح في صفحة [[Special:Preferences|التفضيلات]] لتتمكن من إرسال الرسائل لمستخدمين آخرين.",
        "emailuser-title-target": "راسل بالبريد الإلكتروني هذا  {{GENDER:$1| المستخدم}}",
        "emailuser-title-notarget": "مراسلة المستخدم",
        "emailpage": "إرسال رسالة للمستخدم",
-       "emailpagetext": "يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى {{GENDER:$1|هذا المستخدم|هذه المستخدمة}}.\nسيظهر عنوان البريد الإلكتروني الذي أدخلته في [[Special:Preferences|تفضيلاتك]] كعنوان المرسل في البريد الإلكتروني، كي يستطيع المتلقي الرد عليك مباشرة.",
+       "emailpagetext": "يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى {{GENDER:$1|هذا المستخدم|هذه المستخدمة}}.\n'''يمكن أن يرى المرسل إليه عنوان بريدك الإلكتروني''' الذي أدخلته في [[Special:Preferences|تفضيلاتك]] كعنوان المرسل في البريد الإلكتروني، كي يستطيع المتلقي الرد عليك مباشرة.",
        "defemailsubject": "رسالة {{SITENAME}} من المستخدم \"$1\"",
        "usermaildisabled": "بريد المستخدم الإلكتروني معطل",
        "usermaildisabledtext": "لا يمكنك إرسال بريد إلكتروني إلى مستخدمين آخرين على هذه الويكي",
        "watchnologin": "غير مسجل الدخول",
        "addwatch": "إضافة إلى قائمة المراقبة",
        "addedwatchtext": "أضيفت الصفحة  \"[[:$1]]\" إلى [[Special:Watchlist|قائمة مراقبتك]].\nالتغييرات القادمة على هذه الصفحة وصفحة نقاشها سيتم وضعها هناك.",
+       "addedwatchtext-short": "أضيفت صفحة \"$1\" إلى قائمة مراقبتك.",
        "removewatch": "إزالة من قائمة المراقبة",
        "removedwatchtext": "أزيلت الصفحة \"[[:$1]]\" من [[Special:Watchlist|قائمة مراقبتك]].",
+       "removedwatchtext-short": "أزيلت صفحة \"$1\" من قائمة مراقبتك.",
        "watch": "راقب",
        "watchthispage": "راقب هذه الصفحة",
        "unwatch": "أوقف المراقبة",
        "unwatchthispage": "أوقف المراقبة",
        "notanarticle": "ليست صفحة محتوى",
        "notvisiblerev": "المراجعة تم حذفها",
-       "watchlist-details": "{{PLURAL:$1||صÙ\81حة Ù\88احدة|صÙ\81حتاÙ\86|$1 ØµÙ\81حات|$1 ØµÙ\81حة}} Ù\81Ù\8a Ù\82ائÙ\85Ø© Ù\85راÙ\82بتÙ\83Ø\8c Ø¨Ø¯Ù\88Ù\86 Ø¹Ø¯ ØµÙ\81حات Ø§Ù\84Ù\86Ù\82اش.",
+       "watchlist-details": "{{PLURAL:$1||صÙ\81حة Ù\88احدة|صÙ\81حتاÙ\86|$1 ØµÙ\81حات|$1 ØµÙ\81حة}} Ù\81Ù\8a Ù\82ائÙ\85Ø© Ù\85راÙ\82بتÙ\83Ø\8c Ø¯Ù\88Ù\86 Ø§Ø¹ØªØ¨Ø§Ø± ØµÙ\81حات Ø§Ù\84Ù\86Ù\82اش ØµÙ\81حات Ù\85Ù\86Ù\81صÙ\84Ø©.",
        "wlheader-enotif": "الإخطار بالبريد الإلكتروني مُفعّل.",
        "wlheader-showupdated": "الصفحات التي تم تحريرها بعد مطالعتك إياها آخر مرة عناوينها بالخط '''الغليظ'''",
        "wlnote2": "فيما يلي تعرض التعديلات التي أجريت في آخر {{PLURAL:$1|ساعة|ساعتين|<strong>$1</strong> ساعات|<strong>$1</strong> ساعة}}، وذلك اعتبارا من $2، $3.",
        "enotif_lastvisited": "انظر $1 لكل التغييرات منذ زيارتك الأخيرة.",
        "enotif_lastdiff": "انظر $1 لرؤية هذا التغيير.",
        "enotif_anon_editor": "مستخدم مجهول $1",
-       "enotif_body": "عزيزي $WATCHINGUSERNAME\n\n$PAGEINTRO $NEWPAGE\n\nملخص التعديل: $PAGESUMMARY $PAGEMINOREDIT\n\nاتصل بالمحرر:\nالبريد: $PAGEEDITOR_EMAIL\nويكي: $PAGEEDITOR_WIKI\n\nلن يكون هناك إخطارات أخرى في حالة حدوث مزيد من التغييرات إلا إذا قمت بزيارة تلك الصفحة أثناء تواجدك. يمكنك أيضاً إزالة العلامات عن جميع الصفحات في قائمة مراقبتك.\n\nنظام {{SITENAME}} للإشعار\n\n--\nلتغيير إعدادات الإشعار بالبريد الإلكتروني الخاص بك، قم بزيارة\n{{canonicalurl:{{#special:Preferences}}}}\n\nلتغيير إعدادات قائمة مراقبتك، قم بزيارة\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nلحذف الصفحة من قائمة مراقبتك، قم بزيارة\n$UNWATCHURL\n\nللمقترحات وللحصول على مساعدة إضافية:\n{{canonicalurl: {{MediaWiki:Helppage}}}}",
+       "enotif_body": "عزيزي $WATCHINGUSERNAME\n\n$PAGEINTRO $NEWPAGE\n\nملخص التعديل: $PAGESUMMARY $PAGEMINOREDIT\n\nاتصل بالمحرر:\nالبريد: $PAGEEDITOR_EMAIL\nويكي: $PAGEEDITOR_WIKI\n\nلن يكون هناك إخطارات أخرى في حالة حدوث مزيد من التغييرات إلا إذا قمت بزيارة تلك الصفحة أثناء تواجدك. يمكنك أيضاً إزالة العلامات عن جميع الصفحات في قائمة مراقبتك.\n\nنظام {{SITENAME}} للإشعار\n\n--\nلتغيير إعدادات الإشعار بالبريد الإلكتروني الخاص بك، قم بزيارة\n{{canonicalurl:{{#special:Preferences}}}}\n\nلتغيير إعدادات قائمة مراقبتك، قم بزيارة\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nلحذف الصفحة من قائمة مراقبتك، قم بزيارة\n$UNWATCHURL\n\nللمقترحات وللحصول على مساعدة إضافية:\n$HELPPAGE",
        "created": "أنشئت",
        "changed": "غيرت",
        "deletepage": "حذف الصفحة",
        "protect-locked-blocked": "لا يمكنك تغيير مستويات الحماية وأنت ممنوع.\nالإعدادات الحالية للصفحة '''$1''' هي:",
        "protect-locked-dblock": "لا يمكن تغيير مستويات الحماية بسبب غلق قاعدة البيانات حاليا.\nالإعدادات الحالية للصفحة '''$1''' هي:",
        "protect-locked-access": "لا يملك حسابك هذا صلاحية تغيير مستوى حماية الصفحة.\nالإعدادات الحالية للصفحة '''$1''' هي:",
-       "protect-cascadeon": "هذه الصفحة محمية لكونها مضمنة في {{PLURAL:$1|الصفحة|الصفحات}} التالية، والتي بها خيار حماية الصفحات المدمجة فعال.\nيمكنك تغيير مستوى حماية هذه الصفحة بدون التأثير على حماية الصفحات المدمجة الأخرى.",
+       "protect-cascadeon": "هذه الصفحة محمية لكونها مضمنة في {{PLURAL:$1||الصفحة التالية|الصفحتين التاليتين|الصفحات التالية}}، والتي بها خيار حماية الصفحات المدمجة فعال.\nلن يؤثر تغيير مستوى حماية هذه الصفحة على حماية الصفحات المدمجة.",
        "protect-default": "اسمح لكل المستخدمين",
        "protect-fallback": "السماح فقط للمستخدمين ذوي الصلاحية \"$1\"",
        "protect-level-autoconfirmed": "السماح فقط للمستخدمين المؤكدين تلقائيا",
        "contributions-title": "مساهمات {{GENDER:$1|المستخدم|المستخدمة}} $1",
        "mycontris": "مساهماتي",
        "contribsub2": "ل{{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "حساب المستخدم \"$1\" غير مسجل.",
        "nocontribs": "لم يتم العثور على تغييرات تطابق هذه المحددات.",
        "uctop": "حالي",
        "month": "من شهر (وأقدم):",
        "movepagetalktext": "صفحة النقاش المرفقة سيتم نقلها كذلك، '''إلا في حالة''':\n* توجد صفحة نقاش غير فارغة تحت العنوان الجديد، أو\n* قمت بإزالة اختيار الصندوق بالأسفل.\n\nوفي هذه الحالات، يجب عليك نقل أو دمج محتويات الصفحة يدويا، إذا رغب في ذلك.",
        "movearticle": "انقل الصفحة:",
        "moveuserpage-warning": "'''تحذير: أنت على وشك نقل صفحة مستخدم. من فضلك لاحظ أن الصفحة وحدها سوف تنقل وأن المستخدم لن يعاد تسميته.'''",
+       "movecategorypage-warning": "<strong>تحذير:</strong> أنت على وشك نقل صفحة تصنيف. نرجو التنبه إلى أن ذلك سينقل الصفحة فقط و<em>لن</em>  يعاد تصنيف أي صفحة في التصنيف السابق إلى التصنيف الجديد.",
        "movenologintext": "يجب أن تكون مستخدماً مسجلاً وأن  [[Special:UserLogin|تسجل دخولك]] لكي تنقل صفحة.",
        "movenotallowed": "أنت لا تمتلك الصلاحية لنقل الصفحات.",
        "movenotallowedfile": "أنت لا تمتلك الصلاحية لنقل الملفات.",
        "cant-move-user-page": "أنت لا تمتلك الصلاحية لنقل صفحات المستخدم الرئيسية.",
        "cant-move-to-user-page": "أنت لا تمتلك الصلاحية لنقل صفحة إلى صفحة مستخدم (ماعدا إلى صفحة مستخدم فرعية).",
+       "cant-move-category-page": "أنت لا تمتلك صلاحية نقل صفحات التصانيف.",
+       "cant-move-to-category-page": "أنت لا تمتلك صلاحية نقل صفحة إلى صفحة تصنيف.",
        "newtitle": "إلى العنوان الجديد:",
        "move-watch": "راقب هذه الصفحة",
        "movepagebtn": "انقل الصفحة",
        "tooltip-preferences-save": "احفظ التغييرات",
        "tooltip-summary": "أدخل ملخصا قصيرا",
        "common.css": "/* ستؤثر الأنماط المتراصة (CSS) المعروضة هنا على كل الواجهات */",
-       "cologneblue.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة كولون بلو */",
        "monobook.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة مونوبوك */",
-       "modern.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة مودرن */",
        "vector.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة فكتور */",
        "print.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على ناتج الطباعة */",
        "noscript.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على المستخدمين الذين الجافاسكريبت لديهم معطلة */",
        "group-sysop.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على الإداريين فقط */",
        "group-bureaucrat.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على البيروقراطيين فقط */",
        "common.js": "/* الجافاسكريبت الموضوع هنا سيتم تحميله لكل المستخدمين مع كل تحميل للصفحة. */",
-       "cologneblue.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة كولون بلو */",
        "monobook.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة مونوبوك */",
-       "modern.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة مودرن */",
        "vector.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة فكتور */",
        "group-autoconfirmed.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين المؤكدين تلقائيا فقط */",
        "group-bot.js": "/* أي جافاسكريبت هنا سيتم تحميلها للبوتات فقط */",
        "pageinfo-category-pages": "عدد الصفحات",
        "pageinfo-category-subcats": "عدد التصنيفات الفرعية",
        "pageinfo-category-files": "عدد الملفات",
-       "skinname-cologneblue": "كولون بلو",
        "skinname-monobook": "مونوبوك",
-       "skinname-modern": "مودرن",
        "skinname-vector": "فكتور",
        "markaspatrolleddiff": "علم بعلامة المراجعة",
        "markaspatrolledtext": "علم هذه الصفحة بعلامة المراجعة",
        "watchlistedit-raw-done": "قائمة مراقبتك تم تحديثها.",
        "watchlistedit-raw-added": "تمت إضافة {{PLURAL:$1||عنوان واحد|عنوانين|$1 عناوين|$1 عنوانا|$1 عنوان}}:",
        "watchlistedit-raw-removed": "تمت إزالة {{PLURAL:$1||عنوان واحد|عنوانين|$1 عناوين|$1 عنوانا|$1 عنوان}}:",
+       "watchlistedit-clear-title": "قائمة مراقبة ممسوحة",
+       "watchlistedit-clear-legend": "امسح قائمة المراقبة",
+       "watchlistedit-clear-explain": "ستحذف جميع الصفحات من قائمة مراقبتك",
        "watchlistedit-clear-titles": "العناوين:",
+       "watchlistedit-clear-submit": "امسح قائمة المراقبة (هذا دائم!)",
+       "watchlistedit-clear-done": "مُسِحت قائمة مراقبتك.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1||أزيل العنوان التالي|أزيل العنوانان التاليان|أزيلت العناوين ال$1 التالية}}:",
+       "watchlistedit-too-many": "الصفحات أكثر من أن تعرض هنا.",
+       "watchlisttools-clear": "امسح قائمة المراقبة",
        "watchlisttools-view": "اعرض التغييرات المرتبطة",
        "watchlisttools-edit": "اعرض قائمة المراقبة وعدلها",
        "watchlisttools-raw": "عدل قائمة المراقبة الخام",
index 3cc092e..917f8c7 100644 (file)
        "permissionserrors": "ܦܘܕܐ ܕܦܣܣܐ",
        "permissionserrorstext-withaction": "ܠܝܬ ܠܟ ܦܣܣܐ ܠ$2, ܒ{{PLURAL:$1|ܥܠܬܐ|ܥܠܬ̈ܐ}} ܕ:",
        "log-fulllog": "ܚܙܝ ܣܓܠܐ ܓܡܝܪܐ",
-       "postedit-confirmation": "ܫܘܚܠܦܟ ܐܬܠܒܟ.",
+       "postedit-confirmation-saved": "ܫܘܚܠܦܟ ܐܬܠܒܟ.",
        "edit-already-exists": "ܒܪܝܐ ܕܦܐܬܐ ܚܕܬܐ ܠܐ ܡܬܡܨܝܢܐ.\nܗܕܐ ܦܐܬܐ ܐܝܬ ܡܢ ܟܕܘ.",
        "editwarning-warning": "ܐܢ ܫܒܩܬ ܦܐܬܐ ܗܕܐ ܡܬܡܨܝܢܬܐ ܐܝܬܝܗ ܕܚܣܪܬ ܟܠ ܫܘܚܠܦ̈ܐ ܕܥܒܝܕܬ ܗܪܟܐ.\nܡܨܬ ܕܬܒܛܠ ܙܘܗܪܐ ܗܢܐ ܐܢ ܥܠܝܠܐ ܐܝܬܝܟ ܒܡܢܬܐ ܕ\"ܫܚܠܦܬܐ\" ܒܨܒܝܢܝܘܬ̈ܐ.",
        "undo-summary": "ܠܐ ܬܥܒܕ $1 ܒܝܕ [[Special:Contributions/$2|$2]] ([[User talk:$2|ܡܡܠܠܐ]])",
        "searchmenu-exists": "'''ܐܝܬ ܦܐܬܐ ܒܫܡ \"[[:$1]]\" ܥܠ ܗܢܐ ܘܝܩܝ'''",
        "searchmenu-new": "'''ܒܪܝ ܦܐܬܐ \"[[:$1]]\" ܥܠ ܗܢܐ ܘܝܩܝ!'''",
        "searchprofile-articles": "ܦܐܬܬ̈ܐ ܕܚܒܝܫܬ̈ܐ",
-       "searchprofile-project": "ܦܐܬܬ̈ܐ ܕܬܪ̈ܡܝܬܐ ܘܕܥܘܕܪܢܐ",
        "searchprofile-images": "ܡܝܕ̈ܝܐ ܣܓܝܐ̈ܐ (Multimedia)",
        "searchprofile-everything": "ܟܠ ܡܕܡ",
        "searchprofile-advanced": "ܡܬܩܕܡܢܐ",
        "searchprofile-articles-tooltip": "ܒܨܝ ܒܓܘ $1",
-       "searchprofile-project-tooltip": "ܒܨܝ ܒ $1",
        "searchprofile-images-tooltip": "ܒܨܝ ܥܠ ܠܦܦ̈ܐ",
        "search-result-size": "$1 ({{PLURAL:$2|1 ܡܠܬܐ|$2 ܡܠ̈ܐ}})",
        "search-redirect": "(ܨܝܒ $1)",
        "search-interwiki-default": "ܦܠܛ̈ܐ ܕ $1:",
        "search-interwiki-more": "(ܝܬܝܪ)",
        "search-relatedarticle": "ܐܚܝܢܝ̈ܐ",
-       "searcheverything-enable": "ܒܨܝ ܒܟܠ ܚܩܠܬ̈ܐ",
        "searchrelated": "ܐܚܝܢܝ̈ܐ",
        "searchall": "ܟܠ",
        "showingresults": "ܚܘܘܝܐ ܠܬܚܬ {{PLURAL:$1|'''1''' ܦܠܛܐ|'''$1''' ܦܠܛ̈ܐ}} ܫܪܐ ܡܢ ܡܢܝܢܐ '''$2'''.",
        "timezoneregion-pacific": "ܐܘܩܝܢܘܣ ܫܩܛܝܐ",
        "prefs-searchoptions": "ܒܨܝܐ",
        "prefs-namespaces": "ܚܩܠܬ̈ܐ",
-       "defaultns": "ܐܘ ܒܨܝ ܒܚܩܠܬ̈ܐ ܗܢܝܢ",
        "prefs-files": "ܠܦܦ̈ܐ",
        "prefs-emailconfirm-label": "ܫܘܪܪܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ:",
        "youremail": "ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ:",
        "username": "{{GENDER:$1|ܫܡܐ ܕܡܦܠܚܢܐ|ܫܡܐ ܕܡܦܠܚܢܬܐ}}:",
-       "uid": "ܗܝܝܘܬܐ ܕ{{GENDER:$1|ܡܦܠܚܢܐ|ܡܦܠܚܢܬܐ}}:",
        "prefs-memberingroups": "{{GENDER:$2|ܗܕܡܐ}} ܕ{{PLURAL:$1|ܟܢܘܫܬܐ|ܟܢܘܫܬ̈ܐ}}:",
        "prefs-registration": "ܙܒܢܐ ܕܣܘܓܠܐ:",
        "yourrealname": "ܫܡܐ ܫܪܝܪܐ:",
        "recentchanges-label-unpatrolled": "ܫܘܚܠܦܐ ܗܢܐ ܠܐ ܗܘ ܟܪܝܟܐ ܠܗܫܐ",
        "recentchanges-label-plusminus": "ܥܓܪܐ ܕܦܐܬܐ ܐܫܬܚܠܦ ܒܗܢܐ ܡܢܝܢܐ ܡܢ ܒܝܛ̈",
        "recentchanges-legend-heading": "'''ܦܘܫܩܐ:'''",
-       "recentchanges-legend-newpage": "(ܐܦ ܚܙܝ [[Special:NewPages|ܡܟܬܒܘܬܐ ܕܦܐܬܬ̈ܐ ܚܕ̈ܬܬܐ]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ܐܦ ܚܙܝ [[Special:NewPages|ܡܟܬܒܘܬܐ ܕܦܐܬܬ̈ܐ ܚܕ̈ܬܬܐ]])",
        "rcnotefrom": "ܠܬܚܬ ܫܘܚܠܦ̈ܐ ܕܡܢ '''$2''' (ܥܕ '''$1''' ܡܬܚܙܝܢ̈ܐ).",
        "rclistfrom": "ܚܘܝ ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܡܢ $3 $2",
        "rcshowhideminor": "$1 ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ",
        "log-title-wildcard": "ܒܨܝ ܥܠ ܟܘܢܝ̈ܐ ܕܫܪܝܢ ܥܡ ܟܬܒܬܐ ܗܕܐ",
        "showhideselectedlogentries": "ܚܘܝ/ܛܫܝ ܣܓܠ̈ܐ ܕܥܠܠܐ ܓܒܝ̈ܐ",
        "allpages": "ܟܠ ܦܐܬܬ̈ܐ",
-       "alphaindexline": "$1 ܠ $2",
        "nextpage": "ܦܐܬܐ ܕܒܬܪ ($1)",
        "prevpage": "ܦܐܬܐ ܕܩܕܡ ($1)",
        "allpagesfrom": "ܚܘܝ ܦܐܬܬ̈ܐ ܕܫܪܐ ܥܡ:",
        "unblock": "ܫܩܘܠ ܚܪܡܐ ܡܢ ܡܦܠܚܢܐ",
        "blockip": "ܚܪܘܡ ܡܦܠܚܢܐ",
        "blockip-legend": "ܚܪܘܡ ܡܦܠܚܢܐ",
-       "ipadressorusername": "ܐܝ ܦܝ (IP) ܐܘ ܫܡܐ ܕܡܦܠܚܢܐ:",
+       "ipaddressorusername": "ܐܝ ܦܝ (IP) ܐܘ ܫܡܐ ܕܡܦܠܚܢܐ:",
        "ipbexpiry": "ܡܬܚܐ ܕܚܪܡܐ:",
        "ipbreason": "ܥܠܬܐ:",
        "ipbsubmit": "ܚܪܘܡ ܡܦܠܚܢܐ ܗܢܐ",
        "newimages": "ܒܝܬ ܓܠܚܐ ܕܠܦܦ̈ܐ ܚܕܬ̈ܐ",
        "newimages-legend": "ܡܨܦܝܢܝܬܐ",
        "newimages-label": "ܫܡܐ ܕܠܦܦܐ (ܐܘ ܡܢܬܐ ܡܢܗ)",
-       "showhidebots": "($1 ܒܘܬ̈ܐ)",
        "noimages": "ܠܝܬ ܡܕܡ ܠܚܙܝܐ.",
        "ilsubmit": "ܒܨܝ",
        "bydate": "ܒܣܝܩܘܡܐ",
index ae9538a..232683c 100644 (file)
        "searchmenu-exists": "'''فيه صفحه اسمها \"[[:$1]]\" على الويكى ده.''' {{PLURAL:$2|0=|بص كمان على نتايج البحث التانيه.}}",
        "searchmenu-new": "'''ابتدى الصفحه \"[[:$1]]\" ع الويكى دا!''' {{PLURAL:$2|0=|بص كمان على الصفحه اللى لقيناها من بحثك.|بص كمان على نتايج البحث اللى لقيناها.}}",
        "searchprofile-articles": "صفحات محتوى",
-       "searchprofile-project": "صفحات  المساعده و المشروع",
        "searchprofile-images": "مالتيميديا",
        "searchprofile-everything": "كل شىء",
        "searchprofile-advanced": "متقدم",
        "searchprofile-articles-tooltip": "دور فى $1",
-       "searchprofile-project-tooltip": "دور فى $1",
        "searchprofile-images-tooltip": "دور على الصور",
        "searchprofile-everything-tooltip": "دور فى  كل المحتوى (شامل صفحات النقاش)",
        "searchprofile-advanced-tooltip": "دور فى النطاقات المخصصة",
        "search-interwiki-default": "$1 نتيجة:",
        "search-interwiki-more": "(اأكتر)",
        "search-relatedarticle": "مرتبطه",
-       "searcheverything-enable": "دور فى النطاقات كلها.",
        "searchrelated": "مرتبطه",
        "searchall": "الكل",
        "showingresults": "القائمة دى بتعرض {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} من أول  رقم '''$2'''.",
        "allowemail": "السماح لليوزرز التانيين يبعتولى ايميل",
        "prefs-searchoptions": "اختيارات التدوير",
        "prefs-namespaces": "أسماء النطاقات",
-       "defaultns": "أو دور فى النطاقات دى:",
        "default": "اوتوماتيكي",
        "prefs-files": "ملفات",
        "prefs-custom-css": "CSS مخصص",
        "prefs-emailconfirm-label": "التأكد من الايميل:",
        "youremail": "الايميل:",
        "username": "{{GENDER:$1|اسم اليوزر}}:",
-       "uid": "رقم {{GENDER:$1|اليوزر}}:",
        "prefs-memberingroups": "{{GENDER:$2|عضو}} فى {{PLURAL:$1|مجموعه|مجموعات}}:",
        "prefs-registration": "وقت التسجيل:",
        "yourrealname": "الاسم الحقيقى:",
        "recentchanges-label-minor": "ده تعديل صغير",
        "recentchanges-label-bot": "التعديل ده عمله بوت",
        "recentchanges-label-unpatrolled": "التعديل ده مإتراجعش لسه",
-       "recentchanges-legend-newpage": "(بص كمان على [[Special:NewPages|قايمه الصفحات الجديده]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بص كمان على [[Special:NewPages|قايمه الصفحات الجديده]])",
        "rcnotefrom": "دى التعديلات من '''$2''' (ل '''$1''' معروضه).",
        "rclistfrom": "اظهر التعديلات بدايه من $3 $2",
        "rcshowhideminor": "$1 تعديلات صغيره",
        "logempty": "مافيش  سجلات مطابقة فى السجل.",
        "log-title-wildcard": "التدوير على عناوين تبتدى بالنص دا",
        "allpages": "كل الصفحات",
-       "alphaindexline": "$1 ل $2",
        "nextpage": "الصفحه اللى بعد كده ($1)",
        "prevpage": "الصفحه اللى قبل كده ($1)",
        "allpagesfrom": "عرض الصفحات بدايه من:",
        "tooltip-summary": "اكتب ملخص قصير",
        "interlanguage-link-title": "ل $1 – $2",
        "common.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على كل الواجهات */",
-       "cologneblue.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمى واجهة كولون بلو */",
        "monobook.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمى واجهة مونوبوك */",
-       "modern.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمى واجهة مودرن */",
        "vector.css": "/* CSS اللى هنا حتأثر على اليوزرز اللى بيستخدموا واجهة فكتور */",
        "print.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على ناتج الطباعة */",
        "common.js": "/*  أى جافاسكريبت  هناح يتحمل لكل اليوزرز مع كل تحميل للصفحة. */",
-       "cologneblue.js": "/* أى جافاسكريبت هنا ح تتحمل لليوزرز اللى بيستعملو واجهة كولون بلو */",
        "monobook.js": "/* أى جافاسكريبت هنا ح تتحمل لليوزرز اللى بيستعملو واجهة مونوبوك */",
-       "modern.js": "/* أى جافاسكريبت هنا ح تتحمل لليوزرز اللى بيستعملو واجهة مودرن */",
        "vector.js": "/* اى جافاسكريبت هنا حتتحمل لكل يوزر بيستخدم واجهة فكتور */",
        "anonymous": "{{PLURAL:$1|يوزر مجهول|يوزرز مجهولين}} ل {{SITENAME}}",
        "siteuser": "يوزر {{SITENAME}} $1",
        "spam_reverting": "ترجيع آخر نسخة مافيهاش لينكات لـ $1",
        "spam_blanking": "كل النسخ فيها لينكات ل $1، فضيها",
        "simpleantispam-label": "اختبار انتي-سبام.\n'''ماتعبيش''' دا!",
-       "skinname-cologneblue": "كولون بلو",
        "skinname-monobook": "مونوبوك",
-       "skinname-modern": "مودرن",
        "markaspatrolleddiff": "علم عليها انها متراجعة",
        "markaspatrolledtext": "علم على المقاله دى إنها متراجعة",
        "markedaspatrolled": "اتعلم عليها متراجعة",
index c4f45d0..2b7fe74 100644 (file)
        "searchmenu-exists": "'''এই ৱিকিত \"[[:$1]]\" নামৰ এটা পৃষ্ঠা আছে।'''\n{{PLURAL:$2|0=|আন সন্ধান ফলাফলবোৰ চাওক।}}",
        "searchmenu-new": "<strong>এই ৱিকিত \"[[:$1]]\" পৃষ্ঠাটো সৃষ্টি কৰক!</strong> \n{{PLURAL:$2|0=|আপোনাৰ সন্ধানত পোৱা পৃষ্ঠাবোৰো চাওক।|সন্ধান ফলাফলসমূহো চাওক।}}",
        "searchprofile-articles": "বিষয়বস্তুৰ পৃষ্ঠা",
-       "searchprofile-project": "সহায় আৰু প্ৰকল্প পৃষ্ঠাসমূহ",
        "searchprofile-images": "মাল্টিমিডিয়া",
        "searchprofile-everything": "সকলো",
        "searchprofile-advanced": "উচ্চতৰ",
        "searchprofile-articles-tooltip": "$1-ত অনুসন্ধান কৰক",
-       "searchprofile-project-tooltip": "$1-ত অনুসন্ধান",
        "searchprofile-images-tooltip": "ফাইলৰ বাবে অনুসন্ধান",
        "searchprofile-everything-tooltip": "সকলো বিষয়বস্তু অনুসন্ধান কৰক (কথা-বতৰা পৃষ্ঠা সহ)",
        "searchprofile-advanced-tooltip": "স্বনিৰ্ধাৰিত নামস্থানত অনুসন্ধান কৰক",
        "search-interwiki-default": "$1ৰ ফলাফলসমূহ:",
        "search-interwiki-more": "(আৰু)",
        "search-relatedarticle": "সম্পৰ্কিত",
-       "searcheverything-enable": "সকলো নামস্থানত অনুসন্ধান কৰক",
        "searchrelated": "সম্পৰ্কিত",
        "searchall": "সকলো",
        "showingresults": "তলত #'''$2'''ৰ পৰা {{PLURAL:$1|'''1''' ফলাফল|'''$1''' ফলাফল}} দেখুওৱা হৈছে।",
        "allowemail": "অন্য সদস্যৰ পৰা ই-মেইল সমৰ্থ কৰক",
        "prefs-searchoptions": "সন্ধান কৰক",
        "prefs-namespaces": "নামস্থান",
-       "defaultns": "অন্যথা এই নামস্থান সমূহত অনুসন্ধান কৰিব:",
        "default": "অবিচল",
        "prefs-files": "ফাইলসমূহ",
        "prefs-custom-css": "স্বনিৰ্ধাৰিত CSS",
        "recentchanges-label-unpatrolled": "এই সম্পাদনাটো এতিয়াও পৰীক্ষা কৰা হোৱা নাই",
        "recentchanges-label-plusminus": "পৃষ্ঠাৰ আকাৰ এই পৰিমাণৰ বাইট পৰিৱৰ্তন হৈছে",
        "recentchanges-legend-heading": "'''ব্যাখ্যা:'''",
-       "recentchanges-legend-newpage": "(লগতে [[Special:NewPages|নতুন পৃষ্ঠাসমূহৰ তালিকা]] চাওক)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (লগতে [[Special:NewPages|নতুন পৃষ্ঠাসমূহৰ তালিকা]] চাওক)",
        "recentchanges-legend-plusminus": "(''±১২৩'')",
        "rcnotefrom": "তলত '''$2''' ৰ পৰা হোৱা ('''$1''' লৈকে) পৰিৱৰ্তন দেখুৱা হৈছে ।",
        "rclistfrom": "$3 $2ৰ পৰা নতুন সালসলনি দেখুৱাওক",
        "file-no-thumb-animation-gif": "'''টোকা: কাৰিকৰী অসুবিধাবশতঃ উচ্চ ৰিজ'লিউচনৰ GIF চিত্ৰ যেনে এইখন এনিমেটেড নহ'ব।'''",
        "newimages": "নতুন ফাইলৰ বিথীকা",
        "imagelisttext": "তলত '''$1''' {{PLURAL:$1|file|files}} সজোঁৱা $2 -ৰ এটা তালিকা দিয়া আছে।",
-       "newimages-summary": "à¦\8fà¦\87 à¦¬à¦¿à¦¶à§\87ষ à¦ªà§\83ষà§\8dঠাà¦\96নত à¦¸à§°à§\8dবশà§\87ষত à¦\86পল'ড à¦\95ৰা à¦«à¦¾à¦\87লসমà§\82হ à¦¦à§\87à¦\96িব ।",
+       "newimages-summary": "à¦\8fà¦\87 à¦¬à¦¿à¦¶à§\87ষ à¦ªà§\83ষà§\8dঠাà¦\9fà§\8bত à¦¶à§\87হতà§\80য়াà¦\95à§\88 à¦\86পল'ড à¦\95ৰা à¦«à¦¾à¦\87লসমà§\82হ à¦¦à§\87à¦\96িব।",
        "newimages-legend": "ছেকনী",
        "newimages-label": "নথিৰ নাম (বা তাৰ এটা অংশ)",
        "noimages": "চাবলৈ একো নাই ।",
index bb61034..caa9810 100644 (file)
        "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)",
        "language-converter-depth-warning": "Se pasó la llende de fondura del convertidor de llingües ($1)",
-       "node-count-exceeded-category": "Páxines onde se pasó la cuenta de nodios",
+       "node-count-exceeded-category": "Páxines onde se pasó la cuenta de noyos",
+       "node-count-exceeded-category-desc": "Una categoría pa les páxines onde se supera la cuenta de noyos.",
        "node-count-exceeded-warning": "La páxina pasó la cuenta de nodios",
        "expansion-depth-exceeded-category": "Páxines onde se pasó la fondura d'espansión",
+       "expansion-depth-exceeded-category-desc": "Esta ye una categoría pa les páxines onde se pasó la fondura d'espansión.",
        "expansion-depth-exceeded-warning": "La páxina pasó la fondura d'espansión",
        "parser-unstrip-loop-warning": "Deteutóse un bucle \"unstrip\"",
        "parser-unstrip-recursion-limit": "Pasóse la llende de recursividá d'unstrip ($1)",
        "searchmenu-exists": "'''Hai una páxina nomada \"[[$1]]\" nesta wiki'''",
        "searchmenu-new": "<strong>¡Crear la páxina «[[:$1]]» nesta wiki!</strong> {{PLURAL:$2|0=|Vea tamién la páxina que s'alcontró cola gueta.|Vea tamién los resultaos qu'alcontró la gueta.}}",
        "searchprofile-articles": "Páxines de conteníu",
-       "searchprofile-project": "Páxines de proyeutu y ayuda",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Too",
        "searchprofile-advanced": "Avanzao",
        "searchprofile-articles-tooltip": "Buscar en $1",
-       "searchprofile-project-tooltip": "Buscar en $1",
        "searchprofile-images-tooltip": "Buscar ficheros",
        "searchprofile-everything-tooltip": "Buscar tol conteníu (incluyendo páxines d'alderique)",
        "searchprofile-advanced-tooltip": "Buscar nos espacios de nomes personalizaos",
        "search-interwiki-default": "Resultaos de $1:",
        "search-interwiki-more": "(más)",
        "search-relatedarticle": "Rellacionáu",
-       "searcheverything-enable": "Buscar en tolos espacios de nome",
        "searchrelated": "rellacionáu",
        "searchall": "toos",
        "showingresults": "Abaxo {{PLURAL:$1|amuésase '''un''' resultáu|amuésense '''$1''' resultaos}}, entamando col #'''$2'''.",
        "allowemail": "Dexar a los otros usuarios mandate correos",
        "prefs-searchoptions": "Buscar",
        "prefs-namespaces": "Espacios de nome",
-       "defaultns": "Sinón, buscar nestos espacios de nome:",
        "default": "predetermináu",
        "prefs-files": "Ficheros",
        "prefs-custom-css": "CSS personalizada",
        "recentchanges-label-unpatrolled": "Esta edición ta ensin patrullar entá",
        "recentchanges-label-plusminus": "El tamañu d'esta páxina cambió nesti númberu de bytes",
        "recentchanges-legend-heading": "'''Lleenda:'''",
-       "recentchanges-legend-newpage": "(ver tamién la  [[Special:NewPages|llista de páxines nueves]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ver tamién la  [[Special:NewPages|llista de páxines nueves]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Abaxo tan los cambeos dende <strong>$2</strong> (s'amuesen fasta <strong>$1</strong>).",
        "rclistfrom": "Amosar los nuevos cambios dende $3 $2",
        "watchnologin": "Non identificáu",
        "addwatch": "Amestar a la llista de siguimientu",
        "addedwatchtext": "La páxina \"[[:$1]]\" s'amestó a la to [[Special:Watchlist|llista de llista de siguimientu]].\nLos cambeos futuros nesta páxina y na so páxina d'alderique asociada apaecerán allí.",
+       "addedwatchtext-short": "Amestóse la páxina «$1» a la to llista de siguimientu.",
        "removewatch": "Desaniciar de la llista de siguimientu",
        "removedwatchtext": "La páxina \"[[:$1]]\" desanicióse de la [[Special:Watchlist|to llista de siguimientu]].",
+       "removedwatchtext-short": "Desanicióse la páxina «$1» de la to llista de siguimientu.",
        "watch": "Vixilar",
        "watchthispage": "Vixilar esta páxina",
        "unwatch": "Dexar de vixilar",
        "tooltip-summary": "Escribi un resume curtiu",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* Los CSS allugaos equí s'aplicarán a tolos aspeutos */",
-       "cologneblue.css": "/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Cologne Blue */",
        "monobook.css": "/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Monobook */",
-       "modern.css": "/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Modern */",
        "vector.css": "/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Vector */",
        "print.css": "/* Los CSS allugaos equí afeutarán a la salida pola imprentadora */",
        "noscript.css": "/* Los CSS allugaos equí afeutarán a los usuarios col JavaScript desactiváu */",
        "group-sysop.css": "/* Los CSS allugaos equí afeutarán a los sysops namái */",
        "group-bureaucrat.css": "/* Los CSS allugaos equí afeutarán a los burócrates namái */",
        "common.js": "/* Cualesquier JavaScript que tea equí se cargará pa tolos usuarios en cada carga de páxina. */",
-       "cologneblue.js": "/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Cologne Blue */",
        "monobook.js": "/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu MonoBook */",
-       "modern.js": "/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Modern */",
        "vector.js": "/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Vector */",
        "group-autoconfirmed.js": "/* Cualesquier JavaScript que tea equí se cargará pa los usuarios autoconfirmaos namái */",
        "group-bot.js": "/* Cualesquier JavaScript que tea equí se cargará pa los bots namái */",
        "pageinfo-category-pages": "Númberu de páxines",
        "pageinfo-category-subcats": "Númberu de subcategoríes",
        "pageinfo-category-files": "Númberu de ficheros",
-       "skinname-cologneblue": "Azul Colonia",
-       "skinname-modern": "Modernu",
        "markaspatrolleddiff": "Marcar como supervisada",
        "markaspatrolledtext": "Marcar esta páxina como supervisada",
        "markedaspatrolled": "Marcar como supervisada",
index bd8c2bf..a04b01c 100644 (file)
@@ -22,7 +22,8 @@
                        "Vugar 1981",
                        "Wertuose",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Arystanbek"
                ]
        },
        "tog-underline": "Keçidlərin altını xətlə:",
@@ -62,7 +63,7 @@
        "tog-showhiddencats": "Gizli kateqoriyaları göstər",
        "tog-norollbackdiff": "Geri qaytardıqdan sonra, edilmiş dəyişikikləri dəyişikliklər siyahısından sil",
        "tog-useeditwarning": "Qeyd edilməmiş dəyişikliyə sahib bir dəyişiklik səhifəsindən çıxarkən məni xəbərdar et",
-       "tog-prefershttps": "Sessiya aaçarkən hər zaman etibarlı bağlantıdan istifadə et.",
+       "tog-prefershttps": "Sessiya açarkən hər zaman etibarlı bağlantıdan istifadə et.",
        "underline-always": "Həmişə",
        "underline-never": "Heç vaxt",
        "underline-default": "Susmaya görə brouzer",
        "vector-view-view": "Oxu",
        "vector-view-viewsource": "Mənbəyə bax",
        "actions": "Hərəkətlər",
+       "vector-more-actions": "Daha",
        "namespaces": "Adlar fəzası",
        "variants": "Variantlar",
        "navigation-heading": "Naviqasiya menyusu",
        "sectioneditnotsupported-text": "Bölüm redaktəsi bu səhifədə dəstəklənmir.",
        "permissionserrors": "İcazə xətası",
        "permissionserrorstext": "Siz, bunu aşağıdakı {{PLURAL:$1|səbəbə|səbəblərə}} görə edə bilməzsiniz:",
-       "permissionserrorstext-withaction": "Aşağıdakı {{PLURAL:$1|səbəbə|səbəblərə}} görə $2 hüququnuz yoxdur:",
+       "permissionserrorstext-withaction": "Aşağıdakı {{PLURAL:$1|səbəbə|səbəblərə}} görə, $2 hüququnuz yoxdur:",
        "recreate-moveddeleted-warn": "'''Diqqət! Siz əvvəllər silinmiş səhifəni bərpa etmək istəyirsiz.'''\n\nBu səhifəni yenidən yaratmağın nə qədər zəruri olduğunu bir daha yoxlayın.\nBu səhifə üçün silmə qeydləri aşağıda göstərilmişdir:",
        "moveddeleted-notice": "Bu səhifə silinmişdir.\nMəlumat üçün aşağıda bu səhifənin tarixçəsindən müvafiq silmə qeydləri göstərilmişdir.",
        "log-fulllog": "Bütöv məlumatı göstər",
        "searchmenu-exists": "'''Bu vikidə \"[[:$1]]\" adında səhifə mövcuddur'''",
        "searchmenu-new": "<strong>Bu vikidə \"[[:$1]]\" səhifəsini yarat!</strong> {{PLURAL:$2|0=|Həmçinin, axtarışınız əsasında çıxan səhifəyə baxın.|Həmçinin, axtarışınız əsasında çıxan nəticələrə baxın.}}",
        "searchprofile-articles": "Məqalələr",
-       "searchprofile-project": "Kömək və Layihə səhifələri",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Hər şey",
        "searchprofile-advanced": "Ətraflı",
        "searchprofile-articles-tooltip": "Axtarış $1",
-       "searchprofile-project-tooltip": "Axtarış $1",
        "searchprofile-images-tooltip": "Fayllar üçün axtarış",
        "searchprofile-everything-tooltip": "Bütün daxili axtar (müzakirə səhifəsi daxil olmaqla)",
        "searchprofile-advanced-tooltip": "Ad aralığında axtar",
        "search-interwiki-default": "$1 nəticə:",
        "search-interwiki-more": "(yenə)",
        "search-relatedarticle": "əlaqədar",
-       "searcheverything-enable": "Ad aralığında axtar:",
        "searchrelated": "əlaqəli",
        "searchall": "bütün",
        "showingresults": "Aşağıda #'''$2''' ilə başlayan {{PLURAL:$1|'''$1'''-ə qədər}} nəticə göstərilib.",
        "allowemail": "Digər istifadəçilər mənə e-məktub göndərə bilər",
        "prefs-searchoptions": "Axtarış kriteriyaları",
        "prefs-namespaces": "Adlar fəzası",
-       "defaultns": "Yaxud bu adlar fəzasında axtar:",
        "default": "boş",
        "prefs-files": "Fayllar",
        "prefs-custom-css": "Xüsusi CSS",
        "prefs-emailconfirm-label": "E-poçtun təsdiqlənməsi:",
        "youremail": "E-məktub:",
        "username": "İstifadəçi adı:",
-       "uid": "İstifadəçi ID:",
        "prefs-memberingroups": "Üzvü olduğu {{PLURAL:$1|qrup|qrup}}:",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "Qeydiyyat vaxtı:",
        "logempty": "Jurnalda uyğun qeyd tapılmadı.",
        "log-title-wildcard": "Bu mətnlə başlayan başlıqları axtar",
        "allpages": "Bütün səhifələr",
-       "alphaindexline": "$1 məqaləsindən $2 məqaləsinə kimi",
        "nextpage": "Sonrakı səhifə ($1)",
        "prevpage": "Əvvəlki səhifə ($1)",
        "allpagesfrom": "Bu hərflə başlayan səhifələri göstər:",
        "tooltip-preferences-save": "Nizamlamaları saxla",
        "tooltip-summary": "Qısa rezyume daxil edin",
        "common.css": "/* Burada yerləşən CSS bütün skinlərə tətbiq olunur */",
-       "cologneblue.css": "/* Burada yerləşən CSS Cologne Blue skin istifadəçilərinə tətbiq olunur */",
        "monobook.css": "/* Burada yerləşən CSS Monobook skin istifadəçilərinə tətbiq olunur */",
-       "modern.css": "/* Burada yerləşən CSS Modern skin istifadəçilərinə tətbiq olunur */",
        "vector.css": "/* Burada yerləşən CSS Vector istifadəçilərinə tətbiq olunur */",
        "group-autoconfirmed.css": "/* Burada yerləşən CSS yalnız avtotəsdiqlənmiş istifadəçilərə şamil olunur */",
        "group-bot.css": "/* Burada yerləşən CSS yalnız botlara şamil olunur */",
        "group-sysop.css": "/* Burada yerləşən CSS yalnız idarəçilərə şamil olunur */",
        "group-bureaucrat.css": "/* Burada yerləşən CSS yalnız bürokratlara şamil olunur */",
        "common.js": "/* Burada istifadəçilərin hamısı üçün bütün səhifələrdə istənilən JavaScript yüklənəcək */",
-       "cologneblue.js": "/* Burada Cologne Blue skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */",
        "monobook.js": "/* Burada MonoBook skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */",
-       "modern.js": "/* Burada Modern skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */",
        "vector.js": "/* Burada Vector skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */",
        "group-autoconfirmed.js": "/* Burada istənilən JavaScript yalnız avtotəsdiqlənmiş istifadəçilər üçün yüklənəcək */",
        "group-bot.js": "/* Burada istənilən JavaScript yalnız botlar üçün yüklənəcək */",
        "pageinfo-redirectsto": "İstiqamətləndirmə",
        "pageinfo-redirectsto-info": "məlumat",
        "pageinfo-contentpage-yes": "Bəli",
-       "skinname-cologneblue": "Cologne Blue",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Modern",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "Yoxlanıldı",
        "markaspatrolledtext": "Səhifəni patrullanmış kimi işarələ",
index b51d2b2..4898f0c 100644 (file)
        "searchmenu-exists": "'''بو ویکی‌ده «[[:$1]]» آدلی صحیفه واردیر.'''",
        "searchmenu-new": "'''بو ویکی‌ده «[[:$1]]» صحیفه‌‌سینی يارات!'''",
        "searchprofile-articles": "مقاله‌لر",
-       "searchprofile-project": "یاردیم و پروژه صحیفه‌لری",
        "searchprofile-images": "مولتی‌مئدیا",
        "searchprofile-everything": "هرشئی",
        "searchprofile-advanced": "گلیشمیش",
        "searchprofile-articles-tooltip": "$1-ده آختار",
-       "searchprofile-project-tooltip": "$1-ده آختار",
        "searchprofile-images-tooltip": "فایل‌لار اوچون آختار",
        "searchprofile-everything-tooltip": "بوتون متنلری آختار (دانیشیق صحیفه‌لری اولماقلا)",
        "searchprofile-advanced-tooltip": "تاپشیریلان آدفضالاریندا آختار",
        "search-interwiki-default": "$1 سونوج:",
        "search-interwiki-more": "(داها)",
        "search-relatedarticle": "ایلگیلی",
-       "searcheverything-enable": "بوتون آدفضالاریندا آختار",
        "searchrelated": "ایلگیلی",
        "searchall": "بوتون",
        "showingresults": "آشاغیدا نومره '''$2'''-دن باشلایان {{PLURAL:$1|'''بیر'''|'''$1'''}} سونوجا قدر گؤستریلیر.",
        "allowemail": "باشقا ایستیفاده‌چیلردن ایمیل آلماغی آچ",
        "prefs-searchoptions": "آختار",
        "prefs-namespaces": "آدلار فضاسی:",
-       "defaultns": "یوخسا بو آدفضالاریندا آختار:",
        "default": "فرض ائدیلن",
        "prefs-files": "فایل‌لار",
        "prefs-custom-css": "شخصی سی‌اس‌اس",
        "recentchanges-label-bot": "بو دییشیک بیر بوت طرفیندن ائدیلیب‌دیر",
        "recentchanges-label-unpatrolled": "بو دییشیکلیک هله گؤزدن گئچیریلمه‌ییب‌دیر",
        "recentchanges-legend-heading": "'''ایختیصارلار:'''",
-       "recentchanges-legend-newpage": "(هم‌ده [[Special:NewPages|یئنی صحیفه‌لرین لیستینه]] باخین)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (هم‌ده [[Special:NewPages|یئنی صحیفه‌لرین لیستینه]] باخین)",
        "rcnotefrom": "آشاغیدا '''$2'''-دن ('''$1'''-ه قدر) ديَیشیکلیکلر گلیبلر.",
        "rclistfrom": "$3 $2 واختیندان باشلایاراق یئنی دییشیکلری گؤستر",
        "rcshowhideminor": "کیچیک دَییشیکلری $1",
index d2efc3a..c0e0311 100644 (file)
@@ -13,7 +13,8 @@
                        "Wikifan",
                        "bar.wikipedia.org administrators",
                        "✓",
-                       "아라"
+                       "아라",
+                       "Matthias Klostermayr"
                ]
        },
        "tog-underline": "Links unterstreichen:",
@@ -61,7 +62,7 @@
        "editfont-monospace": "Schrift mid ner festen Zeichenbreaden",
        "editfont-sansserif": "Serifenlose Groteskschrift",
        "editfont-serif": "Schrift mid Serifen",
-       "sunday": "Sundog",
+       "sunday": "Sunda",
        "monday": "Mondog",
        "tuesday": "Deansdog",
        "wednesday": "Midwoch",
        "querypage-no-updates": "'''Dé Aktualisiarungsfunkzión voh derer Seiten is derzeid deaktivird. Dé Daaten wern bis auf Weiders néd daneiert.'''",
        "viewsource": "Quejtext ozoagn",
        "viewsource-title": "Quöntext voh da Seiten $1 auhschauh",
-       "actionthrottled": "Akziónszoi limitird",
-       "actionthrottledtext": "Im Råmen voh ner Anti-Spam-Moossnåm kå dé Akzión do in am kurzen Zeidobstånd netter begrenzd ausgfyrd wern. Dé Grenzen host ywerschritten.\nBittscheh vasuachs in a por Minunten nuamoi.",
+       "actionthrottled": "Aktionsfrequenz drossld",
+       "actionthrottledtext": "A Anti-Spam-Skript begrenzd de Ozoi vo de Vaendarunga pro Minutn. Vasuachs in a boar Minutn wieda.",
        "protectedpagetext": "Dé Seiten is gschytzd worn, um Beorweitungen z' vahindern.",
        "viewsourcetext": "Du kåst ower 'n Quötext åschaung und kópirn:",
        "viewyourtext": "Du kåst 'n Quejtext vah '''deiner Beorwatung''' derer Seiten betrochten und kópiern:",
        "anoneditwarning": "Obocht: Du bist ned eigloggt.\nDei IP-Adress wead in da Versionsgschicht afzoachnet.",
        "missingsummary": "'''Hiwais:''' du host koa Zåmmfossung ågeem. Wånn du ernait auf „{{int:savearticle}}“ druckst, werd dai Enderung one a Zåmmfossung ywernumma.",
        "missingcommenttext": "Bittschee gib a Zåmmfossung ai.",
-       "summary-preview": "Vurschau vo da Zåmmfossung:",
+       "summary-preview": "Voaschau vo da Zammfossung:",
        "subject-preview": "Vurschau vom Bedreff:",
        "blockedtitle": "Da Benytzer is gsperrt",
        "whitelistedittext": "Du muasst de $1, um Saiten beorwaiten z' kenna.",
        "loginreqtitle": "'s braucht a Åmöidung",
        "loginreqlink": "åmöden",
        "loginreqpagetext": "Du muasst dé $1, daas d' Seiten leesen kauhst.",
-       "accmailtitle": "Passwort is vaschickt worn",
+       "accmailtitle": "Kennwoat vaschickt",
        "accmailtext": "E zuafällig genariards Posswort fyr [[User talk:$1|$1]] is an $2 gschickt worn.\n\nDes Posswort fyr des naiche Benutzerkonto kå auf da Speziaalseiten  „[[Special:ChangePassword|Posswort ändern]]“ gändert wern.",
        "newarticle": "(Neich)",
        "newarticletext": "Du bist am Link gfoigt, wos no koa Seitn gibt.\nUm de Seitn ozlegn, trog dein Text im untan Kostn ei (schaug af da [$1 Huifeseitn] fia mea Infos).\nWens a Irrtum is, dassd do bist, nach druck in Zruck-Knopf vom Brausa.",
        "searchmenu-exists": "'''Es gibt a Seiten, wo „[[:$1]]“ hoasst.'''",
        "searchmenu-new": "'''De Seitn „[[:$1]]“ in em Wiki eastejn.'''",
        "searchprofile-articles": "Inhoidsseitn",
-       "searchprofile-project": "Huif- und Projektseitn",
        "searchprofile-images": "Muitimedia",
        "searchprofile-everything": "Ollas",
        "searchprofile-advanced": "Daweitad",
        "searchprofile-articles-tooltip": "Suacha in $1",
-       "searchprofile-project-tooltip": "Suacha in $1",
        "searchprofile-images-tooltip": "Noch Datein suacha",
        "searchprofile-everything-tooltip": "In gsamtn Inhoid duachsuacha (inkl. Dischkriaseitn)",
        "searchprofile-advanced-tooltip": "Suach in weidna Namasramm",
        "logempty": "Koane passenden Einträg.",
        "log-title-wildcard": "Da Titel faungt auh mid ....",
        "allpages": "Olle Seitn",
-       "alphaindexline": "$1 bis $2",
        "nextpage": "Naxde Seiten ($1)",
        "prevpage": "Vurherige Seiten ($1)",
        "allpagesfrom": "Seiten auhzoang ob:",
        "delete-legend": "Léschen",
        "historywarning": "'''Ochtung:''' Dé Seiten, dé du léschen mecherst, hod a Versiónsgschicht mid epper $1 {{PLURAL:$1|Versión|Versiónen}}:",
        "confirmdeletetext": "Du bist dabei, a Seiten mid olle zuaghering ödern Versiónen z' léschen. Bittscheh bstätig dodazua, daas da d' Kónsequenzen bewusst san und daas du in Ywereihstimmung mid d' [[{{MediaWiki:Policy-url}}|Richtlinien]] haundelst.",
-       "actioncomplete": "Aktion beendt",
-       "actionfailed": "Akzion fejgschlogn",
+       "actioncomplete": "Aktion fiate",
+       "actionfailed": "Aktion faigschlogn",
        "deletedtext": "„$1“ is glöscht worn. Im $2 findn Sie a Listn vo de letzten Löschungen.",
        "dellogpage": "Lesch-Logbuach",
        "deletionlog": "Lösch-Logbuach",
index f98f58a..af60e83 100644 (file)
@@ -7,7 +7,8 @@
                        "Mostafadaneshvar",
                        "Reedy",
                        "ZxxZxxZ",
-                       "아라"
+                       "아라",
+                       "RigiMahnoor"
                ]
        },
        "tog-underline": ":لینکانآ خط کش",
        "tog-hidepatrolled": "ته نوکین تغییرات اصلاحاتی که گردگ بیتگن پناه کن",
        "tog-newpageshidepatrolled": "پناه کتن صفحاتی که گردگ بوتگن چه لیست نوکین صفحه",
        "tog-extendwatchlist": "لیست چارگ مزن کن دان کل تغییرات پیش داریت نه که فقط نوکینءَ",
-       "tog-usenewrc": "کارÙ\85رز Ú©ØªÙ\86 ØªØºÛ\8cÛ\8cرات Ù\86Ù\88Ú©Û\8cÙ\86 Ø¨Ù\87تر Ø¨Ù\88تگÛ\8cÙ\86(جاÙ\88ا Ø§Ø³Ú©Ø±Û\8cپت)",
+       "tog-usenewrc": "گرÙ\88پء ØªØºÛ\8cÛ\8cراÙ\86 ØªØ§Ú©Ø¡ Ù\88استÙ\87 Ù\85اÙ\86 Ù\86Ù\88Ú©Û\8cÙ\86 ØªØºÛ\8cÛ\8cراÙ\86 Ø¡Ù\8f Ú\86ارÙ\88Ú© Ù\84Û\8cست",
        "tog-numberheadings": "اتوماتیک شماره کتن عناوین",
-       "tog-showtoolbar": "میله ابزار اصلاح پیش درا(جاوا)",
-       "tog-editondblclick": "صفحات گون دو کلیک اصلاح کن(جاوا)",
-       "tog-editsectiononrightclick": "Ù\81عاÙ\84 Ú©ØªÙ\86 Ø§ØµÙ\84اح Ú©Ø³Ù\85ت Ú¯Ù\88Ù\86 Ú©Ù\84Û\8cÚ© Ø±Ø§Ø³Øª Ø§Ù\88ر Ú©Ø³Ù\85ت Ø¹Ù\86اÙ\88Û\8cÙ\86(جاÙ\88ا)",
-       "tog-watchcreations": "Ù\87Ù\88ر Ú©Ù\86 Ù\85Ù\86Û\8c ØµÙ\81حاتÛ\8c Ú©Ù\87 Ù\85Ù\86 ØªÙ\87 Ù\84Û\8cست Ú\86ارگ Ø´Ø±Ú©ØªØª",
-       "tog-watchdefault": "Ù\87Ù\88رکÙ\86 ØµÙ\81حاتÛ\8c Ú©Ù\87 Ù\85Ù\86 Ø§ØµÙ\84اح Ú©ØªÙ\86 ØªÙ\87 Ù\85Ù\86Û\8c Ù\84Û\8cست Ú\86ارگ",
-       "tog-watchmoves": "Ù\87Ù\88ر Ú©Ù\86 ØµÙ\81حاتÛ\8c Ú©Ù\87 Ù\85Ù\86 Ø¬Ø§Ù\87 Ù¾Ù\87 Ø¬Ø§Ù\87 Ú©Øª ØªÙ\87 Ù\85Ù\86Û\8c Ù\84Û\8cست Ú\86ارگ",
-       "tog-watchdeletion": "Ù\87Ù\88ر Ú©Ù\86 ØµÙ\81حاتÛ\8c Ú©Ù\87 Ù\85Ù\86 ØªÙ\87 Ù\84Û\8cست Ú\86ارگ Ú©Ù\87 Ù\85Ù\86 Ø­Ø°Ù\81 Ú©Øªن",
+       "tog-showtoolbar": "اصلاح کنوکین میلگ ابزارء پیش بدار",
+       "tog-editondblclick": "ویبتاکانء مان دو کلیک ٹگل بدئ",
+       "tog-editsectiononrightclick": "Ù\81عاÙ\84 Ú©ØªÙ\86 Ø²Ø±ØªÚ¯Û\8cÙ\86 Ø¨Ù\87رء Ø§ØµÙ\84اح Ú©ØªÙ\86 Ú¯Ù\88Ù\86 Ú©Ù\84Û\8cÚ© Ø²Ø±ØªÚ¯Û\8cÙ\86 Ø¹Ù\86Ù\88اÙ\86اÙ\86Ø¡ Ø³Ø±Ø§",
+       "tog-watchcreations": "Ù\85Ù\86Û\8c Ø§Ú\88 Ú©ØªÚ¯Û\8cÙ\86 Ù¾Û\8cج Ù\88 Ø§Ù¾Ù\84Ù\88د Ú©ØªÚ¯Û\8cÙ\86 Ù\81اÛ\8cÙ\84اÙ\86Ø¡ Ú\86ارگ Ù\84Û\8cستء ØªÙ\88کا Ù\87Ù\88ار Ú©Ù\86",
+       "tog-watchdefault": "Ù\85Ù\86Û\8c Ø§ØµÙ\84اح Ú©ØªÚ¯Û\8cÙ\86 Ù\81اÛ\8cÙ\84 Ù\88 Ù¾Û\8cجاÙ\86Ø¡ Ú\86ارگ Ù\84Û\8cستء ØªÙ\88کا Ù\87Ù\88ار Ú©Ù\86",
+       "tog-watchmoves": "Ù\85Ù\86Û\8c Ø³Ù\8fرÛ\8cÙ\86تگÛ\8cÙ\86 Ù\81اÛ\8cÙ\84 Ù\88 Ù¾Û\8cجاÙ\86Ø¡ Ú\86ارگ Ù\84Û\8cستء ØªÙ\88کا Ù\87Ù\88ار Ú©Ù\86",
+       "tog-watchdeletion": "Ù\85Ù\86Û\8c Ø­Ø°Ù\81 Ú©ØªÚ¯Û\8cÙ\86 Ù\81اÛ\8cÙ\84 Ù\88 Ù¾Û\8cجاÙ\86Ø¡ Ú\86ارگ Ù\84Û\8cستء ØªÙ\88کا Ù\87Ù\88ار Ø¨Ú©ن",
        "tog-minordefault": "په طور پیش فرض کل اصلاحات آ په داب جزی مشخص کن",
        "tog-previewontop": "بازبین پیش دار پیش چه جعبه اصلاح",
        "tog-previewonfirst": "ته اولین اصلاح بازبینی پیش دار",
-       "tog-enotifwatchlistpages": "Ù\85Ù\86Û\8c Ø§Û\8cÙ\85Û\8cÙ\84 Ø¬Ù\86 Ù\88Ù\87دÛ\8c Ú©Ù\87 Û\8cÚ© ØµÙ\81Ø­Ù\87 Ø§Û\8c ØªÙ\87 Ù\85Ù\86Û\8c Ù\84Û\8cست Ú\86ارگ Ø¹Ù\88ص Ø¨Û\8cت",
+       "tog-enotifwatchlistpages": "Ù\88Ù\87دÛ\8c Ú©Ù\87 Û\8cÚ© Ù¾Û\8cج Û\8cاÙ\86 Ú©Ù\87 Ù\81اÛ\8cÙ\84Ø¡ Ù¹Ú¯Ù\84 Ù\88ارت Ù¾Ø± Ù\85Ù\86Ø¡ Ø§Û\8cÙ\85Û\8cÙ\84 Ø¯Û\8cÙ\85 Ø¨Ø¯Ø¦",
        "tog-enotifusertalkpages": "منآ ایمیل جن وهدی که صفحه ی گپ کاربر من عوض بیت",
-       "tog-enotifminoredits": "Ù\85Ù\86 Ø§Û\8cÙ\85Û\8cÙ\84 Ø¬Ù\86 Ù\87Ù\85Û\8c Ø¯Ø§Ø¨ Ù¾Ù\87 Ù\87Ù\88ردÛ\8cÙ\86 Ø§ØµÙ\84احات ØµÙ\81حات",
+       "tog-enotifminoredits": "Ù\87Ù\86Ú\86Ù\88Ø´ Ù¾Ø± Ù\87Ù\88ردÛ\8cÙ\86 Ù¹Ú¯Ù\84 Ù\85اÙ\86 Ù¾Û\8cج Ù\88 Ù\81اÛ\8cÙ\84اÙ\86 Ù¾Ø± Ù\85Ù\86Ø¡ Ø§Û\8cÙ\85Û\8cÙ\84 Ø¯Û\8cÙ\85 Ø¨Ø¯Ø¦",
        "tog-enotifrevealaddr": "منی ایمیل پیش دار ته ایمیل أن هوژاری",
        "tog-shownumberswatching": "پیش دار تعداد کاربرانی که چارگتن",
+       "tog-oldsig": "انیگین ایمزا کنوک",
        "tog-fancysig": "امضاءَ په داب ویکی متنی بزان(بی اتوماتیکی لینک)",
-       "tog-uselivepreview": "چه زنده این بازبین استفاده کن(جاوا)(تجربی)",
+       "tog-uselivepreview": "لایو پیشچارگء کارمرز بکن(تجربی)",
        "tog-forceeditsummary": "من آ هال دی وهدی وارد کتن یک هالیکین خلاصه ی اصلاح",
        "tog-watchlisthideown": "منی اصلاحات آ چه لیست چارگ پناه کن",
        "tog-watchlisthidebots": "اصلاحات بوت چه لیست چارگ پناه کن",
        "tog-diffonly": "چیر تفاوت محتوای صفحه ی پیش مدار",
        "tog-showhiddencats": "پناه ین دسته یان پیش دار",
        "tog-norollbackdiff": "تفاوتء حذف کن بعد چه اجرای یک ترینگ",
+       "tog-useeditwarning": "وهدی دربیگ مان اصلاح کتگین پیج اگان تغییران سیو نبوت اتنت منء هشتار بدئ",
+       "tog-prefershttps": "پر مان بوتنء واسته هروهدء یک ایمنین کنکشنء کارمرز بکن",
        "underline-always": "یکسره",
        "underline-never": "هچ وهد",
-       "underline-default": "پیشفرضین بروزر",
+       "underline-default": "وفاولتء پێم پر برۆزر یان پۆسته",
+       "editfont-style": "اصلاح کنۆکێن فۆنتء استایل",
+       "editfont-default": "دفاۆلتێن برۆزر",
+       "editfont-monospace": "فۆنت گۆن مالومێن پاسلگ",
+       "editfont-sansserif": "بئ گۆشگێن فۆنت",
+       "editfont-serif": "گۆشه دارێن فۆنت",
        "sunday": "یک شنبه",
        "monday": "دوشنبه",
        "tuesday": "سی شنبه",
        "oct": "اکت",
        "nov": "نو",
        "dec": "دس",
+       "january-date": "جانری، بهارگاه $1",
+       "february-date": "فبراری، اۆستپان $1",
+       "march-date": "مارچ، مۆلمان $1",
+       "april-date": "اپریل، کرا $1",
+       "may-date": "مئ، سۆچکان $1",
+       "june-date": "جون، جلکان $1",
+       "july-date": "جولئ، سهێل $1",
+       "august-date": "اگست، ساچان $1",
+       "september-date": "سپتمبر، تۆمشان $1",
+       "october-date": "اکتۆبر، سارتان $1",
+       "november-date": "نومبر، گۆپشان $1",
+       "december-date": "دسمبر، تاکشان $1",
        "pagecategories": "{{PLURAL:$1|دسته|دسته جات}}",
        "category_header": "صفحات ته دسته \"$1\"",
        "subcategories": "زیردسته جات",
        "category-file-count": "{{PLURAL:$2|ای دسته فقط شامل جهلیگین فایل انت.|جهلیگین {{PLURAL:$1|افایل انت|$1 فایلان انت}}ته ای دسته, چه $2کلl.}}",
        "category-file-count-limited": "جهلیگین {{PLURAL:$1|فایل|$1 فایلان}} ته هنوکین دسته اینت",
        "listingcontinuesabbrev": "ادامه.",
+       "index-category": "سرتاک بوتگێن پێجان",
+       "noindex-category": "سرتاک نبوتگین پیجان",
+       "broken-file-category": "پیج گون پرشتگین لینک فایل",
        "about": "باره",
        "article": "محتوا صفحه",
        "newwindow": "(ته نوکین پنچره ی پچ کن)",
        "cancel": "کنسل",
        "moredotdotdot": "گیشتر...",
-       "mypage": "می صفحه",
-       "mytalk": "منی گپ",
+       "morenotlisted": "ائ لیست پکا نه انت",
+       "mypage": "تاک",
+       "mytalk": "گپ",
        "anontalk": "گپ کن گون ای آی پی",
        "navigation": "گردگ",
        "and": "&#32;و",
        "vector-action-move": "جاه په جاه",
        "vector-action-protect": "حفاظت",
        "vector-action-undelete": "ترینگ",
-       "vector-action-unprotect": "حفاظت درگیزگ",
+       "vector-action-unprotect": "پروتکشنء ٹگل بدئ",
        "vector-view-create": "شرکتن",
        "vector-view-edit": "اصلاح",
        "vector-view-history": "چارتن تاریح",
        "vector-view-view": "وانتن",
        "vector-view-viewsource": "پیشدارگ بن جاه",
        "actions": "کاران",
+       "vector-more-actions": "گیشتر",
        "namespaces": "فضانامان",
        "variants": "گوشگان",
+       "navigation-heading": "منوء ناویگ",
        "errorpagetitle": "حطا",
        "returnto": "تررگ به $1.",
        "tagline": "چه {{SITENAME}}",
        "printableversion": "نسخه چهاپی",
        "permalink": "دایمی لینک",
        "print": "چهاپ",
+       "view": "چارگ",
+       "view-foreign": "بچار مان $1",
        "edit": "اصلاح",
+       "edit-local": "لوکال دسکریپشنء اصلاح کن",
        "create": "شرکتن",
+       "create-local": "لوکال دسکریپشنء هوار کن",
        "editthispage": "ای صفحه اصلاح کن",
        "create-this-page": "ای صفحه شرکتن کن",
        "delete": "حذف",
        "deletethispage": "ای صفحه حذف کن",
+       "undeletethispage": "ائ تاکء دلیت مکن",
        "undelete_short": "حذف مکن {{PLURAL:$1|one edit|$1 edits}}",
+       "viewdeleted_short": "چارگ {{باز،زیاتیگ:$1|یکین حذف بوتگین اصلاح|$1 اصلاح کتگانء حذف بکن}}",
        "protect": "حفاظت",
        "protect_change": "عوض کن",
        "protectthispage": "ای صفحه حفاظت کن",
-       "unprotect": "Ù\85حاÙ\81ظت Ù\85Ú©Ù\86",
-       "unprotectthispage": "ای صفحه محافظت مکن",
+       "unprotect": "پرÙ\88تکشÙ\86Ø¡ Ù¹Ú¯Ù\84 Ø¨Ø¯Ø¦",
+       "unprotectthispage": "ائ تاکء پروتکشنء ٹگل بدئ",
        "newpage": "نوکین صفحه",
        "talkpage": "ای صفحه بحث کن",
        "talkpagelinktext": "گپ کن",
        "articlepage": "محتوا صفحه به گند",
        "talk": "بحث",
        "views": "چارگان",
-       "toolbox": "جعبÙ\87 Ø§Ø¨Ø²Ø§Ø±",
+       "toolbox": "ابزار",
        "userpage": "به گند صفحه کاربر",
        "projectpage": "به گند صفحه",
        "imagepage": "به چار فایل صفحه ءَ",
        "jumptonavigation": "گردگ",
        "jumptosearch": "گردگ",
        "view-pool-error": "متاسفانه، سرور هنون بازگین باری سر انت.\nبازگین کاربری این تاک ءَ چارگنت.\nلطفا کمی صبر کنیت پیش چه شی که دگه ای تاک بچاریت.\n\n$1",
+       "generic-pool-error": "پر بژنء سرورء زیاتیگین بارئ سر انت. بازین کاربر انیگء ائ تاکء چارگء لوٹنت. دزبندی انت کمئ موه بداریت پیسر چه ایشی که ائ تاکء توکا رهشون به بیت.",
+       "pool-timeout": "شمئی انتظارء وهد پر قفل کنگء آسر بوت",
+       "pool-queuefull": "مهزنء صف پر انت",
+       "pool-errorunknown": "ناپجارین ارور",
+       "pool-servererror": "سرویسء پول سینٹر ودی نبیت ($1).",
        "aboutsite": "باره {{SITENAME}}",
        "aboutpage": "Project:باره",
-       "copyright": "محتوا موجودانت تحت $1.",
+       "copyright": "محتوا مان اجازت نامهٔ $1 انت مگان ایشی که آئی هلاپء آرگ ببیت انت.",
        "copyrightpage": "{{ns:project}}:حق کپی",
        "currentevents": "هنوکین رویداد",
        "currentevents-url": "Project:هنوکین رویداد",
        "ok": "هوبنت",
        "retrievedfrom": "درگیجگ بیت چه  \"$1\"",
        "youhavenewmessages": "شما هست  $1 ($2).",
+       "youhavenewmessagesfromusers": "شما چه {{PLURAL:$3|یک دگرین کاربر|$3  کاربر}} $1 داریت ($2).",
+       "youhavenewmessagesmanyusers": "شما چه لهتئ کاربر $1 داریت ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|نوکین کله|999=نوکین کله هان}}",
+       "newmessagesdifflinkplural": "$1 {{PLURAL:$1|ٹگل داتن|پهکین ٹگل}}",
        "youhavenewmessagesmulti": "شما را نوکین کوله یان هست ته   $1",
        "editsection": "اصلاح",
        "editold": "اصلاح",
        "toc": "محتوا",
        "showtoc": "پیش دار",
        "hidetoc": "پناه کن",
+       "collapsible-collapse": "چیر داتن",
+       "collapsible-expand": "تچک کتن",
        "thisisdeleted": "به گند یا پچ ترین $1?",
        "viewdeleted": "به گند $1?",
        "restorelink": "{{PLURAL:$1|یک حذف اصلاح|$1 حذف اصلاح}}",
        "feed-atom": "اتم",
        "feed-rss": "ار اس اس",
        "red-link-title": "$1 (هنگت  نیستن)",
+       "sort-descending": "نزولی نز آرتن",
+       "sort-ascending": "صعودی نز آرتن",
        "nstab-main": "صفحه",
        "nstab-user": "صفحه کاربر",
        "nstab-media": "صفحه مدیا",
        "nospecialpagetext": "<strong>شما یک نامعتبرین صفحه حاصین درخواست کت.</strong>\n\nیک لیستی چه معتبرین صفحات حاص در کپیت ته [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "حطا",
        "databaseerror": "حطا دیتابیس",
+       "databaseerror-text": "یک ارورء مان دیتابیسء شوهازیگء ودی بیت. هنچوش بیتء کنت ائ یک نکسء مان سفتورء هن پیداگ بکنت انت.",
+       "databaseerror-textcl": "یک ارورء مان دیتابیسء شوهازیگء پیداگ بوت.",
+       "databaseerror-query": "شوهاز: $1",
+       "databaseerror-function": "Function: $1",
+       "databaseerror-error": "ارور: $1",
        "laggedslavemode": "هوژاری: صفحه شاید نوکین په روچ بییگان داشته می بیت",
        "readonly": "دیتابیس کبلنت",
        "enterlockreason": "یک دلیلی په کبل وارد کنیت، شامل یک برآوردی چه وهد کبل ویل بیت",
        "unexpected": "ارزش نه لوٹتیگن : \"$1\"=\"$2\".",
        "formerror": "حطا: نه تونیت فرم دیم دنت",
        "badarticleerror": "ای کار ته ای صفحه اجرای نه بیت",
-       "cannotdelete": "نه نونیت فایل یا صفحه مشخص بیتگین آ حذف کن.\nشاید گون یکی دگه  حذف بوتت",
+       "cannotdelete": "تاک یان پیکچرء هزپ کنگ «$1» بیت نه کنت.\nبلکین پیسرء دگر شهسء آئرا هزپ کتگ.",
+       "cannotdelete-title": "نبیت تاکء «$1» هزپ به بیت.",
+       "delete-hook-aborted": "هزپ گون قلابء واسته ایر دارگ بوت.\nائ بابتء توضیحء درشان نه بوت.",
+       "no-null-revision": "امکان نوکین هالیگ نسخهء اڈ کتن پر تاکء «$1» نه انت",
        "badtitle": "عنوان بد",
        "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.",
+       "perfcached": "جهلیگین دیتا مان چیرداتگین حافظهء ذخیره بیتگ انت و بلکین نوک نه انت. زیاتیگ چه {{PLURAL:$1|one result is|$1 results are}} مان چیرداتگین حافظهء ودی بیت انت.",
+       "perfcachedts": "جهلیگین دیتا مان چیرداتگین حافظهء ذخیره بوتگ انت و آهرین باریگ مان  $1 چه نوک بیت انت. زیاتیگء {{PLURAL:$4|یک نتیجه|$4 نتیجه}} مان چیرداتگین حافظهء ودی بیت انت.",
        "querypage-no-updates": "په روچ بیگان په ای صفحه الان غیر فعالنت. دیتا ادان الان نوکین نهنت.",
        "viewsource": "به گند منبع آ",
+       "viewsource-title": "منبعء پیش دارگ پر $1",
        "actionthrottled": "کار گیر نت",
        "actionthrottledtext": "په خاطر یک معیار ضد اسپم شما چه انجام ای کار ته یک کمی زمان محدود بیتگیت، و شما چه ای محدودیت رد بیتگیت.\nلطفا چند دقیقه بعد کوشست کن",
-       "protectedpagetext": "ای صفحه کبل بوتت په حاطر اصلاح بیگ",
+       "protectedpagetext": "ائ تاک پر دیم دارگ چه ادگرانی اصلاح کتن یان کارمرز کتن پراتکتء بوتگ انت.",
        "viewsourcetext": "شما تونیت به گند و کپی کنیت منبع ای صفحه آ",
-       "protectedinterface": "ای صفحه فراهم آریت مداخله ی متنی په برنامه و کبل بیتت په جلوگیری چه سو استفاده.",
-       "editinginterface": "'''هوژاری:''' شما یک صفحه ای اصلاح کنیت که به عنوان مداخله گر متنی برنامه استفاده بیت.\nتغییرات ای صفحه کاربرد مداخله گر په دگه کابران تاثیر هلیت.\n  [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net],  په ترجمه یان لطفا توجه کنیت په استفاده پروژه ملکی کتن مدیا وی کی",
+       "viewyourtext": "توانیت منبعی کد چه '''شمئ اصلاح کتگان''' مان ائ تاکء بگند ات و کپی بکن ات:",
+       "protectedinterface": "ائ پیجء توکا تکستء پر واسط کاربری ائ سفتورء مان ائ ویکی انت و پر دست دارگ چه ٹگل داتنء پراتکت بیتگ انت.\n\nپر هوار کتن یانکه رجانکء ٹگل پر پهکین ویکی هان، دزبندی انت چه [//translatewiki.net/ translatewiki.net]، محلی‌سازیء پراجکت پر مدیاویکی، کارمرز به کنیت.",
+       "editinginterface": "'''هوژاری:''' ائ پیجء که انیگء ٹگل دئیت یک تکستء هوار انت که مان ائ سفتورء واسط کاربری کارمرز بیتگ انت.\nائ پیجء ٹگل بیتن واسط کاربریء ظاهرءادگر کاربرانء ٹگل دنت انت.\nپر هوار کتن یانکه رجانکء ٹگل پر پهکین ویکی هان، دزبندی انت چه [//translatewiki.net/ translatewiki.net]، محلی‌سازیء پراجکت پر مدیاویکی، کارمرز به کنیت.",
        "cascadeprotected": "ای صفحه محافظت بیت چه اصلاح چرا که آیی شامل جهلیگین {{PLURAL:$1|صفحه, که|صفحات, که}} محافظتی گون the \"cascading\" option turned on:\n$2",
        "namespaceprotected": "شما اجازت په اصلاح صفحات ته  '''$1'' نام فضا نیست",
+       "customcssprotected": "شما ائ پیجء سی اس اسء اصلاح کتنء اجازتء نداریت، پرچا که آئی توکا وتیگین تنظیمان چه ادگر کاربرء انت.",
+       "customjsprotected": "شما رء ائ جاوا اسکریپتین پیجء اصلاح کتنء اجازتء نه انت، پرچا که آئی توکا وتیگین تنظیمان چه ادگر کاربرء انت.",
+       "mycustomcssprotected": "شما رء اجازت پر ائ سی اس اسین پیجء اصلاح کتن نه انت.",
+       "mycustomjsprotected": "شما رء ائ جاوا اسکریپتین پیجء اصلاح کتنء اجازتء نه انت.",
+       "myprivateinfoprotected": "شما رء اجازت پر وتیگین اینفارمیشنء اصلاح کتنء نه انت.",
+       "mypreferencesprotected": "شما رء اجازت پر وتی تنظیماتء اصلاح کتنء نه انت.",
        "ns-specialprotected": "حاصین صفحات اصلاح نه بنت",
        "titleprotected": "ای عنوان محافظت بوتت چه سربیگ به وسیله  [[User:$1|$1]].\nای دلیل دییگ بیتت ''$2''.",
+       "filereadonlyerror": "ائ فایل ٹگل «$1» بیت نکنت پرچا که ائ فایلء مهزن «$2» مان تهناوانتنیء حالت ایر انت.\n\nهما ماسٹر که آئرا کبل کتگ چوشین توضیحئ درشان کتگ:  «$3».",
+       "invalidtitle-knownnamespace": "نامهتبرین عنوان گون نامء جاگاه «$2» ءُ تکست «$3»",
+       "invalidtitle-unknownnamespace": "نامهتبرین نام گون ناشناسین نامء جاگاه نمبر $1 ءُ تکست «$2»",
+       "exception-nologin": "مان نبیتگ ات",
+       "exception-nologin-text": "دزبندی انت سیستمء تها [[Special:Userlogin|مان بئیت]] تانکه بتوان ات ائ تاکء بگند ات.",
+       "exception-nologin-text-manual": "دزبندی انت  $1  تانکه شمارء پر ائ تاک یانکه اکشنء دزرس ببیت انت.",
        "virus-badscanner": "تنظیم بد: ناشناسین اسکنر ویروس: ''$1''",
        "virus-scanfailed": "اسکن پروش وارت(کد $1)",
        "virus-unknownscanner": "ناشناسین آنتی ویروس:",
-       "logouttext": "''' شما الان در بوتت.'''\n\nشما تونیت چه {{SITENAME}} ناشناس استفاده کنیت یا شما تونیت دگه وراد بیت گون دگه یا هما کاربر.\nتوجه بیت که لهتی صفحات شاید په داب هما وهدی که شما وراد بوتتیت پیش درگ بند تا وهدی که ذخیره بروزر وتی پاک کنیت.",
+       "logouttext": "''' شما انیگء در شُت ات'''\nبزان که تانکه شمئی بروزرء چیرداتگین هافظه پهک مبیت، لهتئ چه تاکان ممکن انت رندا هم هنچوش پیش دارگ ببنت که انگار شما لاگین کتگ ات.",
+       "welcomeuser": "وشاتک ات $1!",
+       "welcomecreation-msg": "انیگء شمئی اکانت اڈ بیتگ انت.\nمشموش ات که وتی [[Special:Preferences|ترجیحات {{SITENAME}}]] رء ٹگل دئیت.",
        "yourname": "نام کاربری",
+       "userlogin-yourname": "اکانتء نام",
+       "userlogin-yourname-ph": "وتی یوزرنامء بلک ات",
+       "createacct-another-username-ph": "وتی یوزرنامء بلک ات",
        "yourpassword": "کلمه رمز",
+       "userlogin-yourpassword": "پسورد",
+       "userlogin-yourpassword-ph": "وتی پسوردء بلک ات",
+       "createacct-yourpassword-ph": "یک پسوردء بلک ات",
        "yourpasswordagain": "کلمه رمز دگه نویس",
+       "createacct-yourpasswordagain": "چه دوبارگ پسوردء بلک ات",
+       "createacct-yourpasswordagain-ph": "چه دوبارگ پسوردء بلک ات",
        "remembermypassword": "می ورودءَ ته ای کامپیوتر بدار (په $1 {{PLURAL:$1|روچ|روچ}})",
+       "userlogin-remembermypassword": "منء همک وهد برجاه بدار",
+       "userlogin-signwithsecure": "چه ایمنین کنکشنء کارمرز بکن ات",
        "yourdomainname": "شمی دامین",
+       "password-change-forbidden": "شما نتوان ات پسوردان مان ائ ویکیء رء ٹگل دئیت.",
        "externaldberror": "یک حطا دیتابیس تصدیق هویت دراییگی هست یا شما را اجازت نیست وتی حساب درایی په روچ کنیت.",
        "login": "ورود",
        "nav-login-createaccount": "ورود/شرکتن حساب",
        "loginprompt": "شما بایدن په وارد بیگ ته {{SITENAME}} کوکی فعال کنیت",
        "userlogin": "ورود/شرکتن حساب",
+       "userloginnocreate": "لاگین",
        "logout": "در بیگ",
        "userlogout": "در بیگ",
        "notloggedin": "وارد نهت",
+       "userlogin-noaccount": "شما رء اکانت نه انت؟",
+       "userlogin-joinproject": "مان {{SITENAME}} ناملکی بکن ات!",
        "nologin": "حسابء  نیستن؟ '''$1'''.",
        "nologinlink": "شرکتن یک حساب",
        "createaccount": "حساب شرکن",
        "gotaccount": "یک حساب الان هست؟'''$1'''.",
        "gotaccountlink": "ورود",
-       "createaccountmail": "گون ایمیل",
+       "userlogin-resetlink": "وتی لاگینء جزئیاتء رء شموش کتگ ات؟",
+       "userlogin-resetpassword-link": "وتی پسوردء رء شموش کتگ ات؟",
+       "userlogin-helplink2": "کمک گون لاگین",
+       "userlogin-loggedin": "شما انیگء {{GENDER:$1|$1}}ء حالتء مان بیتگ ات.\nچه جهلیگین فرم پر لاگین مان ادگر کاربرء حالتء کارمرز بکن ات.",
+       "userlogin-createanother": "ادگر اکانتء اڈ بکن ات",
+       "createacct-emailrequired": "ایمیل",
+       "createacct-emailoptional": "ایمیل (ایهتیاری)",
+       "createacct-email-ph": "وتی ایمیلء بلک ات",
+       "createacct-another-email-ph": "ایمیلء ادرسء بلک ات",
+       "createaccountmail": "کارمرز چه وتکارین موقتین پسورد ءُ رندا آئی دیم داتن پر مالومین ایمیل",
+       "createacct-realname": "شمئی اصلیگین نام (ایهتیاری)",
+       "createacct-reason-ph": "پرچا شما ادگر نوکین اکانتء اڈ کن ات",
+       "createacct-captcha": "سکیوریتی چک",
+       "createacct-imgcaptcha-ph": "برزین سیاهگء ادان بلک ات",
+       "createacct-submit": "وتی اکانتء اڈ کن ات",
+       "createacct-another-submit": "ادگر اکانتء اڈ بکن ات",
+       "createacct-benefit-heading": "{{SITENAME}} شهسانی واسته هنچوش که شمئیء اڈ بیتگ",
+       "createacct-benefit-body1": "$1 {{PLURAL:$1|اصلاح|اصلاح کتگان}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|تاک|تاکان}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|هوار بیتگ}} نوکین",
        "badretype": "کلماتی رمزی که شما وارد کتگیت یک نهنت.",
-       "userexists": "وارد بیتگیت نام کاربری الان استفاده بیت.\nلطفا دگه دابین نامی بزوریت.",
+       "userexists": "ائ یوزرنامء که لکتگ ات پیسریگء کارمرز بیتگ انت.\nدزبندی انت ادگر نامء بزیریت.",
        "loginerror": "حطا ورود",
+       "createacct-error": "ارور مان اکانتء اڈ کنگء",
+       "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": "اشتباهین کلمه رمز وارد بوت. دگه سعی کن.",
        "wrongpasswordempty": "کلمه رمز وارد بیتگین هالیکنت. دگه سعی کن",
-       "passwordtooshort": "شمی کلمه رمز نامعتبر یا باز هوردنت.\nآیی بایدن حداقل {{PLURAL:$1|1 کاراکتر|$1 کاراکتر}} کاراکتر بیت و چه نام کاربری متفاوت بیت.",
-       "mailmypassword": "نوکین کلمه رمزء ایمیل کن",
+       "passwordtooshort": "پسورد ضرورانت چکم {{PLURAL:$1|۱ کرکتر|$1 کرکتر}} داشتگ بیت.",
+       "password-name-match": "شمئی پسورد ضرورنت چه شمئی یوزرنامء پرک بیت انت.",
+       "password-login-forbidden": "ائ یوزرنام ءُ پسوردء کارمرز اجازت نه انت.",
+       "mailmypassword": "نوکین پسوردء بلوٹ",
        "passwordremindertitle": "نوکین هنگین کلمه رمز په {{SITENAME}}",
        "passwordremindertext": "یک نفری(شاید شما، چه آی پی $1)\nلوٹتگی که ما شما را یک نوکین کلمه رمز دیم دهین په {{SITENAME}} ($4).\nکلمه رمز په کاربر \"$2\" الان شینت\"$3\".\nشما بایدن وارد بیت و وتی کلمه رمزآ بدل کنیت انو.\nشمی موقتین کلمه رمز دا {{PLURAL:$5|یک روچ|$5 روچ}} هلیت\n\nاگه دگه کسی په شما ای درخواست دیم داته و یا شما وتی کلمه رمزآ خاطر داریت و نه لوٹتیت آیآ عوض کنیت، شما تونیت این کوله یا شموشیت و گون هما قدیمی کلمه رمز ادامه دهیت",
        "noemail": "هچ آدرس ایمیلی په کاربر \"$1\" ثبت نه بیتت.",
+       "noemailcreate": "پیکن یک مهتبرین ایمیلء بلک ات.",
        "passwordsent": "یک نوکین کلمه رمزی په آدرس ایمیل ثبت بوتگین په \"$1\" دیم دهگ بیت.\nلطفا بعد چه دریافت وارد بیت",
        "blocked-mailpassword": "شمی آدرس آی پی چه اصلاح کتن محدود بوتت و اجازت نداریت په خاطر جلوگیری چه سو استفاده چه عملگر کلمه رمز استفاده بکنت.",
-       "eauthentsent": "یک ایمیل تاییدی په نامتگین آدرس ایمیل دیم دهگ بوت.\nپیش چه هردابین ایمیلی په حساب دیم دیگ بین، شما بایدن چه دستور العملی که ته ایمیل آتکه پیروی کنیت په شی که شمی حساب که شمی گنت تایید بیت.",
-       "throttled-mailpassword": "یک کلمه رمز یاد آوری پیش تر دیم دهگ بوتت ته  {{PLURAL:$1|ساعت|$1 ساعت}}  ساعت پیش.\nپه جلوگرگ چه سو استفاده فقط یک کلمه رمز یاد آوری هر$1  ساعت دیم دهگ بیت.",
+       "eauthentsent": "یک ایمیلء پر شمئی ایمیل ادرسء تاییدء پر لکتگین ایمیلء راهیگ بوت.\nپیسر چریشی که ادگر ایمیلء راهیگ بیت، ایمیلء توضیحانء پر ائ واسته که هما ادرس المء شمئیگ انت رهچار بکن ات.",
+       "throttled-mailpassword": "یک ایمیلء پر پسوردء واترء مان $1 {{PLURAL:$1|ساهت|ساهت}} پیسریگء راهیگ بیتگ انت.\nپر هلاپء دیمداریء، هر $1 {{PLURAL:$1|ساهت|ساهت}} تهنا یک ایمیلء گون پسوردء واترء راهیگ بیت انت.",
        "mailerror": "حطا دیم دهگ ایمیل:$1",
        "acct_creation_throttle_hit": "شرمنده، لهتی پیسرگین چارون گون شمی آی زیگ لهتی {{PLURAL:$1|1 حساب|$1 حساب}}   شر کتت , که گیشترین حد مجاز ته ای زمان انت.\nهنچوش چاروکان گون ای آی پی ن توننت گیشتر الان حساب شرکننت.",
-       "emailauthenticated": " $3 شمی آدرس ایمیل ته $2  تصدیق بوت.",
-       "emailnotauthenticated": "په آدرس ایمیل هنگت تصدیق نه بوتت.\nهچ ایمیلی په جهلیگین ویژگی دیم دهگ نه بیت.",
+       "emailauthenticated": "شمئی ایمیلء مان $2 ساهت $3 تائید بوت.",
+       "emailnotauthenticated": "شمئی ایمیل ادرسء انیگء تائید نبیتگ انت.\nپر جهلیگین بابت ان هچ ایمیلء راهیگ نبیت.",
        "noemailprefs": "یک آدرس ایمیل په کار کتن ای ویژگیان مشخص کنیت.",
        "emailconfirmlink": "وتی آدرس ایمیل تایید کن",
        "invalidemailaddress": "آدرس ایمیل قبول نه بیت چوش که جاه کیت یک فرمت نامعتبری هست.\nلطفا یک آدرس ایمیل هو-فرمتی وارد کنیت یا ای فیلد هالیک بلیت.",
+       "cannotchangeemail": "مان ائ ویکیء اکانتء ایمیلان ڈگل بیت نکنت انت.",
+       "emaildisabled": "ائ سایتء نتوانیت ایمیل راهیگ بکنت انت.",
        "accountcreated": "حساب شر بوت",
-       "accountcreatedtext": "حساب Ú©Ø§Ø±Ø¨Ø± Ù¾Ù\87 $1 Ø´Ø± Ø¨Ù\88ت.",
+       "accountcreatedtext": "اکاÙ\86تء Ù¾Ø± [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|تراÙ\86]]) Ø§Ú\88 Ø¨Û\8cتگ Ø§Ù\86ت.",
        "createaccount-title": "شرکتن حساب په {{SITENAME}}",
        "createaccount-text": "یکی یک حساب په شمی آدرس ایمیل ته  {{SITENAME}} گون نام ($4)  \"$2\"، گون کلمه رمز \"$3\" شرکتت.\nشما بایدن وارد بیت و وتی کلمه رمز الان عوض کنیت.\n\nشما شاید ای پیام شموشیت اگه ای ای حساب گون حطا شر بوتت.",
-       "login-throttled": "شما په کلمه رمز ای حساب باز جهد کتت نوکی. لطفا صبر کنیت و. رندا جهد کنیت.",
+       "login-throttled": "شما انیگ پر لاگین کتنء چنت بار جهد کتگ ات. دزبندی انت پیسر چه پدایین جهدء $1 موه بداریت.",
+       "login-abort-generic": "شمئی لاگینء پکا نبیت - Aborted",
        "loginlanguagelabel": "زبان: $1",
+       "suspicious-userlogout": "شمئی لوٹ پر در شتن چه سیستمء رد بوت پرچا که چوش که پیداگ انت ائ لوٹ چه هرابین بروزر یانکه پراکسیء راهیگ بیتگ انت.",
+       "createacct-another-realname-tip": "اصلیگین نام ایهتیاری انت.\nاگان آئرا بلک ات رهشونء درگتء پر شمئی سیاهگان چه اصلیگین نام کارمرز بیت انت.",
+       "pt-login": "لاگین",
+       "pt-login-button": "لاگین",
+       "pt-createaccount": "اکانتء اڈ بکن",
+       "pt-userlogout": "در شُتن",
+       "php-mail-error-unknown": "نامالومین ارور مان تابع  mail()‎ پی‌اچ‌پی",
+       "user-mail-no-addy": "جهد پر ایمیلء راهیگ گیر چه ایمیل ادرس",
+       "user-mail-no-body": "جهد پر هالیگ یانکه هوردین ایمیلء راهیگء",
        "changepassword": "کلمه رمز عوض کن",
-       "resetpass_announce": "شما گون یک هنوکین کد ایمیل بوتگین وارد بوتءیت.\nپه تمام کتن ورود، شما باید یک نوکین کلمه رمز اداں شرکنیت",
+       "resetpass_announce": "شما پر وتی لاگینء آسر کتنء، نوکین پسوردء تیار بکن ات.",
        "resetpass_text": "<!-- متن دان هورکن -->",
        "resetpass_header": "حساب کلمه رمزءَ عوض کن",
        "oldpassword": "کلمه رمز کهنگین:",
        "newpassword": "نوکین کلمه رمز:",
        "retypenew": "کلمه رمز دگه بنویس",
        "resetpass_submit": "تنظیم کلمه رمز و ورود",
-       "changepassword-success": "شمی کلمه رمز گون موفقیت عوض بون! هنو شما وارد بیگیت...",
+       "changepassword-success": "شمئی پسورد پر درستیء ٹگل بیت!",
+       "changepassword-throttled": "شما انیگ پر لاگین کتنء چنت بار جهد کتگ ات. دزبندی انت پیسر چه پدایین جهدء $1 موه بداریت.",
        "resetpass_forbidden": "کلمات رمز نه توننت عوض بنت.",
        "resetpass-no-info": "په مستقیمین دسترسی په ای صفحه شما بایدن وارد سایت بیت",
        "resetpass-submit-loggedin": "عوض کتن کلمه رمز",
+       "resetpass-submit-cancel": "کنسیل",
        "resetpass-wrong-oldpass": "کلمه رمز موقت یا هنوکین رمز شر نهنت.\nبلیکن شما الان وتی کلمه رمز عوض کتت یا یک نوکین موقتین رمزی لوٹت.",
+       "resetpass-recycled": "دزبندی انت وتی پسوردء پر ادگرین چیزء گیر چه انیگین پسوردء ٹگل دئیت.",
+       "resetpass-temp-emailed": "شما گون یک موکتین ایمیل کدء مان بیتگ ات.\nپر لاگینء آسرء، شما ضرورنت نوکین پسوردء ادان لاک ات:",
        "resetpass-temp-password": "موقتین کلمه رمز:",
+       "resetpass-abort-generic": "پسوردء ٹگل گون یک اکتنشنء واسته کنسیل بیتگ انت.",
+       "resetpass-expired": "شمئی پسوردء مالومین وهد هلتگ انت. دزبندی انت پر لاگین کتن نوکین پسوردء تیار کن ات.",
+       "resetpass-expired-soft": "شمئی پسوردء مالومین وهد هلتگ انت ءُ نوکین پسوردء اڈ کتن ضرور انت. دزبندی انت انیگء نوکین پسوردء بزیر ات، یانکه پر رندیگین تیار کتنء، ائ بٹنء  \"{{int:resetpass-submit-cancel}}\" سرء کلیک کن ات.",
+       "resetpass-validity-soft": "شمئی پسورد درست نه انت: $1\nدزبندی انت انیگء نوکین پسوردء بزیر ات یانکه ائ بٹنء «{{int:resetpass-submit-cancel}}» سرء کلیک کن ات که رندا آئرا تیار کن ات.",
+       "passwordreset": "نوکین پسوردء بلوٹ",
+       "passwordreset-text-one": "پر وتی پسوردء واترء ائ فرمء پکا کن ات.",
+       "passwordreset-text-many": "{{PLURAL:$1|اگان لوٹت ایمیلء گون موکتین پسوردء پر شما راهیگ ببیت، یکئ چه ائ جاگاهانء پر بکن ات.}}",
+       "passwordreset-legend": "نوکین پسوردء بلوٹ",
+       "passwordreset-disabled": "پسوردء واتر کتن مان ائ ویکیء نافعال بیتگ انت.",
+       "passwordreset-emaildisabled": "ایمیلء حالتان مان ائ ویکیء نافعال بیتگ انت.",
+       "passwordreset-username": "یوزرنام:",
+       "passwordreset-domain": "دامین:",
+       "passwordreset-capture": "آسریگین ایمیل پیش دارگ بیت؟",
+       "passwordreset-capture-help": "اگان ائ گزینگ رء نشانیگ بهل ات، یک ایمیلء (گون موکتین پسوردء) شما رء پیش دارگ بیت ءُ هنچوش پر کاربرء راهیگ بیت انت.",
+       "passwordreset-email": "ایمیل ادرس:",
+       "passwordreset-emailtitle": "اکانتء جزئیات مان {{SITENAME}}",
+       "passwordreset-emailtext-ip": "یک شهسء (بلکین شما، گون آی‌پیء نشانیگ $1) شمئی پسوردء واترء {{SITENAME}} ($4) لوٹتگ انت. {{PLURAL:$3|اکانت|اکانتان}} گون ائ ایمیل ادرسء همگرنچ انت:\n\n$2\n\n{{PLURAL:$3|ائ موکتین پسورد|ائ موکتین پسوردان}} رند چه {{PLURAL:$5|یک روچ|$5 روچ}} باطل بیت انت.\nشما پیکن انیگء لاگین کن ات ءُ نوکین پسوردء بزیر ات. اگان شمئی پگر انت که ادگر شهسء ائ لوٹء راهیگ کتگ یانکه وتی پیسریگین پسوردء هیال کت ات ءُ رندء نلوٹیت آئرا ٹگل دئیت، بیت که ائ پیگامء ناگند بزان ات ءُ وتی پیسریگین پسوردء کارمرز کن ات.",
+       "passwordreset-emailtext-user": "کاربر $1 چه {{SITENAME}} شمئی پسوردء واترء لوٹ مان {{SITENAME}} ($4) کتگ انت. {{PLURAL:$3|اکانت|اکانتان}} چیریگین کاربر گون ائ ایمیل ادرس همگرنچ انت:\n\n$2\n\n{{PLURAL:$3|ائ موکتین پسورد|ائ موکتین پسوردان}} رند چه {{PLURAL:$5|یک روچ|$5 روچ}} باطل بیت انت.\nشما ضرور انت انیگء لاگین کن ات ءُ نوکین پسوردء بزیر ات. اگان ادگر شهسء ائ لوٹء راهیگ کتگ انت، یانکه وتی اصلیگین پسوردء هیال کت ات ءُ رندء نلوٹ ات آئرا ٹگل دئیت، بیت که ائ پیگامء نگند بزان ات ءُ وتی پیسریگین پسوردء کارمرز کن ات.",
+       "passwordreset-emailelement": "یوزرنام: $1\nموکتین پسورد: $2",
+       "passwordreset-emailsent": "یک ایمیلء گون پسوردء واترء راهیگ بوت.",
+       "passwordreset-emailsent-capture": "یک ایمیلء پر پسورد واترء واسته که جهلیگء پیش دارگ بیت، راهیگ بیتگ انت.",
+       "passwordreset-emailerror-capture": "واترین ایمیل، که جهلیگء پیش دارگ بیت، اڈ بوت، بلئی آئی راهیگ پر {{GENDER:$2|کاربر}} پکا نبوت: $1",
+       "changeemail": "ایمیل ادرسء ٹگل بدئ",
+       "changeemail-header": "وتی اکانتء ایمیل ادرسء ٹگل بدئ",
+       "changeemail-text": "ائ فرمء پکا کن ات تانکه شمئی ایمیلء ٹگل به بیت. پریشی که ائ تغییرء تایید کن ات ضرور انت وتی پسوردء بلک ات.",
+       "changeemail-no-info": "پر یکپارگین دزرسی مان ائ تاکء پیکن لاگین کن ات.",
+       "changeemail-oldemail": "انیگین ایمیل ادرس:",
+       "changeemail-newemail": "نوکین ایمیل ادرس:",
+       "changeemail-none": "هج کجام",
+       "changeemail-password": " {{SITENAME}} شمئی پسورد:",
+       "changeemail-submit": "ایمیلء ٹگل بدئ",
+       "changeemail-cancel": "کنسیل",
+       "changeemail-throttled": "شما انیگ پر لاگین کتنء چنت بار جهد کتگ ات. دزبندی انت پیسر چه پدایین جهدء $1 موه بداریت.",
+       "resettokens": "پجاروکان(tokens)ی واتر",
+       "resettokens-text": "شما توان ات پجاروکان(tokens) که دزرسیء اجازت پر شمئی وتیگین دیتا همگرنچ گون شمئی اکانتء دینت، واتر بکن ات.\nهما درگتء ائ کار بیت کنت که نامالومین شهسء شمئی اکانتء لاگین کتگ انت.",
+       "resettokens-no-tokens": "هچ پجاروکء پر واترء ودی نبوت.",
+       "resettokens-legend": "پجاروکان(tokens)ی واتر",
+       "resettokens-tokens": "پجاروکان(tokens):",
+       "resettokens-token-label": "$1 (انیگین اندازگ: $2)",
+       "resettokens-watchlist-token": "ویب فیدء پجاروک [[Special:Watchlist|پیجانی تغییرات که آهانء رهگر کن ات]] (اتم/آراس‌اس)",
+       "resettokens-done": "پجاروکانی واتر.",
+       "resettokens-resetbutton": "درچتگین پجاروکانء واتر بکن",
        "bold_sample": "پررنگین متن",
        "bold_tip": "پررنگین متن",
        "italic_sample": "ایتالیکی متن",
        "showpreview": "بازبین پیش دار",
        "showdiff": "تغییرات پیش دار",
        "anoneditwarning": "'''هوژاری:''' شما وارد نه بیتگیت.\nشمی آی پی ته تاریح اصلاح ای صفحه ثبت بیت.",
+       "anonpreviewwarning": "''شما مان سیستمء لاگین نکتگ. ذخیره کتنء حالت شمئی آی‌پیء نشانیگ مان ائ پیجء هاپزگ سبت بیت انت.''",
        "missingsummary": "'''یادآوری:''' شما یک خلاصه چه اصلاح وارد نه کرت.\nاگر دگه کلیک کنیت ذخیره آ، شمی اصلاح به بی آی ذخیره بنت.",
        "missingcommenttext": "لطفا یک نظری وارد کنیت جهل آ",
-       "missingcommentheader": "'''یاداوری:'' شما یک موضوع/سرخط په ای نظر وارد نکتت.\nاگر شما دگه ذخیره کلیک کنیت، شمی اصلاح بی آی ذخیره بنت.",
+       "missingcommentheader": "'''هالداری:'' شما یک موضوع/سرهت پر ائ کامنت نهشتگ ات.\nاگان دوبارگ بٹن «{{int:savearticle}}» سرء کلیک کن ات شمئی ویرایش گیر چه آئیء ذخیرگ بیت انت.",
        "summary-preview": "خلاصه بازبینی:",
        "subject-preview": "بازبین موضوع/سرخط:",
        "blockedtitle": "کاربر محدود بوتت",
        "blockednoreason": "هچ دلیلی دهگ نه بیته",
        "whitelistedittext": "شما باید $1به اصلاح کتن صفحات.",
        "confirmedittext": "شما بایدن وتی آدرس ایمیل آ پیش چه اصلاح کتن صفحات تایید کنیت.\nلطفا وتی آدرس ایمیل آی چه طریق [[Special:Preferences|ترجحات کاربر]] تنظیم و معتبر کنیت.",
-       "nosuchsectiontitle": "هچ چوشن بخش",
-       "nosuchsectiontext": "Ø´Ù\85ا Ø³Ø¹Û\8c Ú©Øª Û\8cÚ© Ø¨Ø®Ø´Û\8c Ø§ØµÙ\84اح Ú©Ù\86Û\8cت Ú©Ù\87 Ù\86Û\8cستÙ\86.",
+       "nosuchsectiontitle": "هنچوشین بهرء ودی نبوت",
+       "nosuchsectiontext": "Ø´Ù\85ا Ø¬Ù\87د Ú©ØªÚ¯ Ù¾Ø± Û\8cÚ© Ø¨Ù\87رء Ø§Ø¯Û\8cت Ú©ØªÙ\86Ø¡ Ú©Ù\87 Ù\85Ù\88جÙ\88د Ù\86Ù\87 Ø§Ù\86ت .\nÙ\85Ù\85Ú©Ù\86 Ø§Ù\86ت Ù\87Ù\85ئ Ø¯Ø±Ú¯ØªØ¡ Ú©Ù\87 Ø´Ù\85ا Ù¾Û\8cجء Ú\86ارگ Ú©ØªÚ¯ Ø§Øª Ø§Ø¦ Ø³Ù\8fرÛ\8cÙ\86Ú¯ Û\8cاÙ\86Ú©Ù\87 Ù\87زپ Ø¨Û\8cتگ Ø§Ù\86ت.",
        "loginreqtitle": "ورود نیازنت",
        "loginreqlink": "ورود",
        "loginreqpagetext": "شما باید $1 په گندگ دگه صفحات.",
        "accmailtitle": "کلمه رمز دیم دات",
-       "accmailtext": "کلمه رمز په [[User talk:$1|$1]]  دیم دهگ بوت په $2.\nکلمه رمز په نوکین حساب ته صفحه ''[[Special:ChangePassword|عوض کتن رمز]]'' وهدی که وارد بیتت تونیت بدل بیتن",
+       "accmailtext": "یک پسوردء [[User talk:$1|$1]] پر $2 راهیگ بوت. بیت آئرا چه پیجء ''[[Special:ChangePassword|پسوردء ٹگل]]'' که لاگینء درگتء پیش دارگ بیت ٹگل دئیت.",
        "newarticle": "(نوکین)",
        "newarticletext": "شما رند چه یک لینکی په یک صفحه ی که هنو نیستند اتکگیت.\nپه شر کتن صفحه، شروع کن نوشتن ته جعبه جهلی(بچار  [$1 صفحه کمک]  په گیشترین اطلاعات).\nاگر شما اشتباهی ادانیت ته وتی بروزر دکمه ''Back'' بجن.",
        "anontalkpagetext": "----'' ای صفحه بحث انت په یک ناشناس کاربری که هنگت یک حسابی شر نه کتت یا آی ا ستفاده نه کتت. اچه ما بایدن آدرس آی پی عددی په پچاه آرگ آیی استفاده کنین.\nچوشن آدرس آی پی گون چندین کاربر استفاده بیت.\nاگه شما یک کاربر ناشناس ایت وی حس کنیت بی ربطین نظر مربوط شمی هست، لطفا [[Special:UserLogin|وارد بیت ]] یا [[Special:UserLogin/signup|حسابی شرکن]] دان چه هور بییگ گون ناسناسین کاربران پرهیز بیت.''",
        "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}}|ائ عنوانء رء پٹوپول بکن ات]]،\nیانکه <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} مان یکپیمیگین سیاهگان شوهاز بکن ات]</span> بلئ شما رء پر ائ پیجء اڈ کتنء اجازت نه انت.",
+       "missing-revision": "ویرایش #$1 چه پیجء «{{FULLPAGENAME}}» موجود نه انت.\n\nبلکین چه نوک نکتنء بابتء هزپ بیتگ انت.\nتوان ات گیشترین جزئیات رء مان [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ] ودی بکن ات.",
        "userpage-userdoesnotexist": "حساب کاربر \"<nowiki>$1</nowiki>\" ثبت نهنت. لطفا کنترل کنیت اگه شما لوٹیت ای صفحه یا شر/اصلاح کنیت.",
-       "clearyourcache": "'''توجه:''' بعد چه ذخیره کتن، شما شاید مجبور بیت چه وتی ذخیره ی بروزر رد بیت تا تغییرات بگندیت. '''Mozilla / Firefox / Safari:'' ''Shift'' جهل داریت همی وهدی که کلیک کنیت ''Reload'' یا بداریت ''Ctrl-Shift-R'' (''Cmd-Shift-R'' on Apple Mac);'''IE:''' ''Ctrl''  بداری وهدی که کلیک ''Refresh' یا 'Ctrl-F5''; '''Konqueror:''':  راحت کلیک کن دکمه ''Reload'' یا بدار ''F5''; '''Opera''' کاربر بایدن ته ''Tools→Preferences'' ذخیره پاک کنت.",
-       "usercssyoucanpreview": "'''نکته:''' چه دکمه 'Show preview' په آزمایش کتن  CSS پیش چه ذخیره کتن استفاده کن",
-       "userjsyoucanpreview": "'''نکته:''' چه دکمه 'Show preview' په آزمایش کتن  JS پیش چه ذخیره کتن استفاده کن",
+       "userpage-userdoesnotexist-view": "ائ یوزر اکانت «$1» سبت نبیتگ انت.",
+       "blocked-notice-logextract": "ائ کاربر انیگء بلاک بیتگ انت.\nآهرین سیاهگئ که گون بلاکء همگرنچ انت جهلیگء آتکگ انت:",
+       "clearyourcache": "<strong>بزان:</strong> رند چه ذخیرگ کتنء ممکن انت پر ٹگلانی گندگء وتی بروزرئ هاپزگء پهک کتن لوٹ به بیت.\n*<strong>پایرپاکس / ساپاری:</strong> کلیت <em>Shift</em> رء جهل بدار ات ءُ رندء ائ بٹنء <em>Reload</em> کلیک بکن ات، یانکه ائ کلیتان <em>Ctrl-F5</em> یانکه <em>Ctrl-R</em> رء گون همدگرء جهل بدار ات (مان اپل ءُ مکینتاشء سیستمان ائ کلیتان <em>⌘-R</em>)\n*<strong>گوگل کروم:</strong> ائ کلیتان <em>Ctrl+Shift+R</em> رء گون هم جهل بدار ات (مان اپل ءُ مکینتاشء سیستمان ائ کلیتان <em>⌘-Shift-R</em>)\n*<strong>اینترنت اکسپلورر:</strong> کلیت <em>Ctrl</em> رء جهل بدار ات ءُ رندء ائ بٹنء <em>Refresh</em> کلیک بکن ات، یان ائ کلیتان <em>Ctrl-F5</em> رء گون همدگرء جهل بدار ات.\n*<strong>اپرا:</strong> وتی بروزرء چیرداتگین هاپزگ رء چه ائ منو  <em>Tools &rarr; Preferences</em> پهک بکن ات.",
+       "usercssyoucanpreview": "'''بزان:''' پیسر چه سی اس اسء ذخیرگ کتنء، گون ائ بٹن '''{{int:showpreview}}''' بچکاس ات.",
+       "userjsyoucanpreview": "'''بزان:''' پیسر چه جاوا اسکریپتء ذخیرگ کتنء، گون ائ بٹن '''{{int:showpreview}}''' بچکاس ات.",
        "usercsspreview": "''''بزان که شما فقط وتی CSS کاربری بازبینی کنین. هنگنت آیی ذخیره نه بوتت!''''",
        "userjspreview": "''''په یاد دار که شما فقط وتی کاربری  JavaScript بازبینی/آزمایش کنگیت، هنگت ذخیره نه بوتت!''''",
+       "sitecsspreview": "<strong> شمارء هیالداری ببیت که انیگء تهنا پیشچارگ چه ائ سی اس اسء رء گند ات.\nآئی انگت ذخیرگ نبیتگ انت </strong>",
+       "sitejspreview": "<strong> شمارء هیالداری ببیت که انیگء تهنا پیشچارگ چه ائ جاوا اسکریپٹء رء گند ات.\nآئی انگت ذخیرگ نبیتگ انت </strong>",
        "userinvalidcssjstitle": "'''هوژاری:''هچ جلدی نیست\"$1\".\nبزان که صفحات .css و .js چه عناوین گون هوردین حرف استفاده کننت، مثلا {{ns:user}}:Foo/vector.css بدل به په {{ns:user}}:Foo/Vector.css.",
        "updated": "(په روچ بیتگین)",
        "note": "'''یادداشت:'''",
-       "previewnote": "'''شی فقط یک بازبینی انت;\nتغییرات هنگت ذخیره نهنت. '''",
+       "previewnote": "<strong> بزان که ائ تهنا یک پیشچارگء انت</strong>\nشمئی ٹگلان انگتء ذخیرگ نبیتگ انت!",
+       "continue-editing": "شتن پر ادیت کنوکین جاگاه",
        "previewconflict": "ای بازبین متنء پیش داریت ته منطفه بالدی اصلاحی هنچوش که پیش دارگ بیت اگه شما انتخاب کنیت ذخیره",
        "session_fail_preview": "'''شرمنده! ما نه تونست شمی اصلاحء په خاطر گار کتن دیتا دیوان پردازش کنین.\nطلف دگه سعی کنیت. اگر هنگت کار نکنت یک بری [[Special:UserLogout|دربیت]] و پیدا وارد بیت.'''",
        "session_fail_preview_html": "'''شرمنده! ما نه تونست شمی اصلاحء په خاطر گار کتن دیتا دیوان پردازش کنین.'''\n\n''په چی که {{SITENAME}} HTML هام فعالنت، بازبین په خاطر حملات JavaScript پناهنت.''\n\n''' اگر شی یک قانونی تلاش اصلاحنت، دگه کوشش کنیت. اگر هنگت کار نکنت یک بری [[Special:UserLogout|دربیت]] و دگه وارد بیت.'''",
        "token_suffix_mismatch": "''' شمی اصلاح رد بوت په چی که شمی کلاینت نویسگ کاراکترانی په هم جتت.\nاصلاح رد بوت داں چه هراب بیگ متن صفحه جلوگیری بیت.\nشی لهتی وهد پیش کت که شما چه یک هرابین سرویس پروکسی وبی استفاده کنیت.'''",
+       "edit_form_incomplete": "<strong>لهتی چه ادیت فرمء بهران پر سرورء نرستگ انت؛ پکا بزان ات که شمئی ادیتان پکا انت و رندء چدوبارگ جهد کن ات</strong>",
        "editing": "اصلاح $1",
+       "creating": "اڈ کتن $1",
        "editingsection": "اصلاح $1(بخش)",
        "editingcomment": "اصلاح $1 (نوکین بخش)",
        "editconflict": "جنگ ورگ اصلاح: $1",
        "yourdiff": "تفاوتان",
        "copyrightwarning": "لطفا توجه بیت که کل نوشته یات ته {{SITENAME}}  تحت $2 نشر بنت.(بچار په جزیات$1).\nاگه شما لوٹیت شمی نوشتانک اصلاح و دگه چهاپ مبنت، اچه آیانا ادان مهلیت.\nشما ما را قول دهیت که وتی چیزا بنویسیت یا چه یک دامین عمومی کپی کتگیت.\n''' نوشتانکی که کپی رایت دارند بی اجازه ادا هور مکنیت'''",
        "copyrightwarning2": "لطفا توجه کنیت که کل مشارکاتن ته {{SITENAME}} شاید اصلاح, عوض و یا توسط دگه شرکت کننده آن حذف بنت.\nاگر شما نه لوٹیت شمی نوشتاک گون بی رحمی اصلاح مه بنت، اچه شما آیء ادان دیم مه دهیت.<br />\nشما هنچوش ما را قول دهیت که شما شی وت نوشتت یا ایء چه یک دامین عمومی یا هنچوشین آزاتین منبع کپی کتیت.(بچار $1 په جزییات).\n''' نوشتاکی که حق کپی دارنت بی اجازت دیم مه دهیت!'''",
-       "longpageerror": "'''حطا: Ù\85تÙ\86Û\8c Ú©Ù\87 Ø´Ù\85ا Ø¯Û\8cÙ\85 Ø¯Ø§ØªØª $1 Ú©Û\8cÙ\84Ù\88 Ø¨Ø§Û\8cتتØ\8c Ú©Ù\87 Ú\86Ù\87 Ú¯Û\8cشترÛ\8cÙ\86 Ø­Ø¯ $2 Ú©Û\8cÙ\84Ù\88باÛ\8cت Ù\85زÙ\86\nØ¢Û\8c Ù\86Ù\87 ØªÙ\88Ù\86Û\8cت Ø°Ø®Û\8cرÙ\87 Ø¨Ù\88ت.'''",
-       "readonlywarning": "'''هوژاری: دیتابیس به تعمیرات کبلنت، اچه شما نه تونیت وتی اصلاحات هنو ذخیره کنیت.\nشما شاید بلوٹیت متنء تع یم فایل متنی کپی و پیست کنیت و آیء ذخیره کنیت.'''\nمدیری که آیء کبل کتت ای توضیحی داتت: $1",
-       "protectedpagewarning": "'''هوژاری: ای صفحه په کبلنت چی که فقط کابران گون اجازت مدیر سیستم توننت آیء اصلاح کننت.'''",
-       "semiprotectedpagewarning": "''''توجه:'''' ای صفحه کبلنت چوش که فقط ثبت نامی کابران توننت آیء اصلاح کننت.",
+       "longpageerror": "'''ارÙ\88ر: Ø§Ø¦ Ø³Û\8cاÙ\87گء Ú©Ù\87 Ø±Ø§Ù\87Û\8cÚ¯ Ú©ØªÚ¯ Ø§Øª {{PULAR:$1|Û\8cÚ© Ú©Û\8cÙ\84Ù\88باÛ\8cت|$1 Ú©Û\8cÙ\84Ù\88باÛ\8cت}} Ø§Ù\86دازگ Ø¯Ø§Ø±Û\8cت. Ø§Ø¦ Ø§Ù\86دازگ Ú\86Ù\87 Ù\85اکسÛ\8cÙ\85Ù\85Ø¡ {{PLURAL:$2|Û\8cÚ© Ú©Û\8cÙ\84Ù\88باÛ\8cت|$2 Ú©Û\8cÙ\84Ù\88باÛ\8cت}} Ú¯Û\8cشتر Ø§Ù\86ت.'''\nÙ\86بÛ\8cت Ú©Ù\87 Ø¢Ø¦Ø±Ø§ Ø°Ø®Û\8cرگ Ø¨Ú©Ù\86 Ø§Øª.",
+       "readonlywarning": "'''هژاری: دیتابیس پر جوڑ کتنء واسته کبل بیتگ انت، پمیشکا انیگء نبیت که وتی ادیتانء ذخیرگ بکن ات.'''\nاگان لوٹ ات وتی سیاهگء مان یک تکست فایلء کپی و پر آیوکء ذخیرگ بکن ات.\n\nهما ماسٹر که آئرا کبل کتگ ائ توضیحء درشان کتگ انت: $1",
+       "protectedpagewarning": "'''هوژاری: ائ تاک پراتکت بیتگ انت، گڑا تهنا کاربرانء گون ماسٹری حالتء توان انت که آئرا ادیت بکن انت'''\nآهرین سیاهگ که گون ائ بابتء همگرنچ انت جهلیگء آتکگ انت:",
+       "semiprotectedpagewarning": "'''بزان:''' ائ پیج کبل بیتگ تانکه تهنا رجستر کتگین کاربران بتوان انت آئرا ادیت بکن انت.\nآهرین سیاهگ که گون ائ بابتء همگرنچ انت جهلیگء آتکگ:",
        "cascadeprotectedwarning": "''هوژاری''ای صفحه کبلنت چوش که فقط کابران گون دسترسی مدیر سیستم توننت آییء اصلاح کننت،په چی که آیی ته چهلین حمایت آبشاری {{PLURAL:$1|صفحات|صفحه}}:",
-       "titleprotectedwarning": "'''هوژاری: ای صفحه کبلنت چوش که فقط لهتی کاربر گون [[Special:ListGroupRights|خاصین حق]] تواننت آیء شر کننت.'''",
+       "titleprotectedwarning": "'''هوژاری: ائ پیجء پر ائ پیمء کبل بیتگ که پر آئیء اڈ کتنء  [[Special:ListGroupRights|خاصین اجازت]] ضرور انت.'''\nآهریگین سیاهگ که گون ائ بابتء همگرنچ انت جهلیگء آتکگ انت:",
        "templatesused": "{{PLURAL:$1|تمپلت|تمپلت}} که ته ای صفحه کارمز بیتت:",
        "templatesusedpreview": "{{PLURAL:$1|تمپلت|تمپلت}} ته ای بازبینی کارمرز بوتت",
-       "templatesusedsection": "تمپلتانی که ته ای بخش به کار رونت",
+       "templatesusedsection": "{{PLURAL:$1|تمپلٹ|تمپلٹ}} کارمرز بوتگین مان ائ بهر:",
        "template-protected": "(محافظتین)",
        "template-semiprotected": "(نیم محافظتی)",
        "hiddencategories": "ای صفحه عضوی چه {{PLURAL:$1|1 hidden category|$1 پناهین دسته جات}}:",
        "edittools": "<!-- <strong>په کپی و پست کتن چه CTRL+V , CTRL+C استفاده کنیت.</strong> -->",
        "nocreatetext": "{{SITENAME}} شما را چه شرکتن نوکین صفحه منه کته.\nشما تونیت برگردیت و یک پیشگین صفحه ای اصلاح کنیت، یا [[Special:UserLogin|وارد بیت یان یک حسابی شرکنیت]].",
        "nocreate-loggedin": "شما را اجازت په شرکتن نوکین صفحات نیست.",
-       "permissionserrors": "حطای اجازت",
+       "sectioneditnotsupported-title": "ائ بهرانئ ادیت کتن ساپورٹ نه بیت",
+       "sectioneditnotsupported-text": "ائ بهرانئ ادیت کتن مان ائ پیجء ساپورٹ نه بیت",
+       "permissionserrors": "ارور جاگاه دزرسی",
        "permissionserrorstext": "شما را اجازت په انجام آی نیست، په جهلیگین دلیل {{PLURAL:$1|دلیل|دلایل}}:",
        "permissionserrorstext-withaction": "شما را اجازت په $2, په خاطر جهلیگین {{PLURAL:$1|دلیل|دلایل}}:",
        "recreate-moveddeleted-warn": "هوژاری: شما یک صفحه ای دگه شرکنگیت که پیشتر حذف بوتت.'''\n\nشما بایدن توجه کنیت که ادامه اصلاح ای صفحه درستنت.\nآمار حذف و جاه په جاهی ای صفحه په شمی حاطرء ادان هستن:",
        "edit-gone-missing": "نه تونیت صفحهء په روچی کنت.\nچوش که جاه کیت آیی حذف بوتگت.",
        "edit-conflict": "جنگ اصلاحی",
        "edit-no-change": "شمی اصلاح نادید گرگ بوت، په چی که هچ تغییری په متن دهگ نه بوت.",
+       "postedit-confirmation-created": "تاک اڈ بوت.",
+       "postedit-confirmation-restored": "تاک واتر بوت.",
+       "postedit-confirmation-saved": "شمئی ادیت ذخیرگ بوت.",
        "edit-already-exists": "نه تونیت یک نوکین صفحه ای شر کنت.\nهنو شی هستن.",
+       "defaultmessagetext": "اصلیگین پیگامء سیاهگ",
+       "content-failed-to-parse": "تجزیگء $2 توکداریگ پر $1 مدل: $3 پکا نبوت",
+       "invalid-content-data": "توکداریگء دیتا مهتبر نه انت",
+       "content-not-allowed-here": "توکداریگ «$1» مان ائ پیج[[$2]] اجازت نه انت",
+       "editwarning-warning": "گون در شتن چه ائ پیج ممکن انت شمئی پهکین شانس که تان انیگء کٹ کتگ ات بیران بیت.\nاگان شما لاگین کتگ ات، بیت که ائ هژاریء مان ای بهر «{{int:prefs-editing}}» وتی پریفرنسء نافعال بکن ات..",
+       "editpage-notsupportedcontentformat-title": "توکداریگء فرمت ساپورٹ نه بیت",
+       "editpage-notsupportedcontentformat-text": "ائ توکداریگء فرمت $1 مان ائ توکداریگء تهر $2 ساپورٹ نبیتگ انت.",
+       "content-model-wikitext": "ویکیسیاهگ",
+       "content-model-text": "سادگین سیاهگ",
+       "content-model-javascript": "جاوا اسکریپٹ",
+       "content-model-css": "سی اس اس",
        "expensive-parserfunction-warning": "هوژاری: ای صفحه شامل بازگین توار عملگر تجریه کنوک سنگیننت.\nآیی بایدن کمتر چه  $2{{PLURAL:$2|توار|توار}}, داشته بیت ادان هنو  $1 هست.",
        "expensive-parserfunction-category": " صفحات گونبازگین توار عملگر تجریه کنوک",
        "post-expand-template-inclusion-warning": "هوژاری: اندازه شامل تمپلت باز مزننت.\nلهتی تمپلتان هور نه بینت.",
        "searchmenu-exists": "'''صفحه گون نام \"[[$1]]\" ته ای ویکی نیستن'''",
        "searchmenu-new": "'''شر کن صفحه ای \"[[:$1]]\" ته ای ویکی!'''",
        "searchprofile-articles": "صفحات محتوا",
-       "searchprofile-project": "کمک و صفحات پروژه ای",
        "searchprofile-images": "ملتیمدیا",
        "searchprofile-everything": "هر چیز",
        "searchprofile-advanced": "پیشرفتگین",
        "searchprofile-articles-tooltip": "گردگ ته $1",
-       "searchprofile-project-tooltip": "گردگ ته $1",
        "searchprofile-images-tooltip": "گردگ په فایلان ته",
        "searchprofile-everything-tooltip": "گردگ په کل محتوا (هور گون صفحات گپ)",
        "searchprofile-advanced-tooltip": "گردگ ته نام فضایان دل واه",
        "search-interwiki-default": "$1 نتایج:",
        "search-interwiki-more": "(گیشتر)",
        "search-relatedarticle": "مربوطین",
-       "searcheverything-enable": "گردگ ته کل فضانامان",
        "searchrelated": "مربوط",
        "searchall": "کل",
        "showingresults": "جهل پیش دارگنت تا  {{PLURAL:$1|'''1'''نتیجه|'''$1''' نتایج}} شروع بنت گون #'''$2'''.",
        "allowemail": "فعال کن ایمیل چه دگه کابران",
        "prefs-searchoptions": "گردگ انتخابان",
        "prefs-namespaces": "نام فصا",
-       "defaultns": "گردگ ته ای نام فضا آن په طور پیش فرض:",
        "default": "پیش فرض",
        "prefs-files": "فایلان",
        "prefs-custom-css": "رسمی سی‌اس‌اس",
        "prefs-emailconfirm-label": "تایید کتن پست الکترونیک:",
        "youremail": "ایمیل:",
        "username": "نام کاربری:",
-       "uid": "کاربر شناسگ:",
        "prefs-memberingroups": "عضو گروه {{PLURAL:$1|group|groups}}:",
        "prefs-registration": "ثبت نام وهد:",
        "yourrealname": "راستین  نام:",
        "logempty": "هچ آیتم هم دپ ته آمار",
        "log-title-wildcard": "بگرد عناوین که گون ای متن شروع بنت",
        "allpages": "کل صفحات",
-       "alphaindexline": "$1 په $2",
        "nextpage": "صفحه ی بعدی ($1)",
        "prevpage": " ($1)پیشگین صفحه",
        "allpagesfrom": "پیش در صفحات شروع بنت ته:",
        "spam_reverting": "عوض کتن په آهری نسحه که شامل لینکان می بیت په $1",
        "spam_blanking": "کل بازبینی آن شامل لینکان په $1, بوتت  هالیکی",
        "simpleantispam-label": "کنترل ضد اسپم.\nای شیء پر ''مکن''",
-       "skinname-cologneblue": "نیلی کولاجن",
        "skinname-monobook": "منوبوک",
-       "skinname-modern": "مدرن",
        "markaspatrolleddiff": "نشان کن په داب نظارت بوتگین",
        "markaspatrolledtext": "ای صفحه نشان کن په داب نظارت بوتگین",
        "markedaspatrolled": "نشاننت په داب نظارتی",
index 2a84873..562b3e2 100644 (file)
        "permalink": "Permanenteng kilyawan",
        "print": "Imprintaron",
        "view": "Tanawon",
+       "view-foreign": "Hilngon sa $1",
        "edit": "Liwatón",
+       "edit-local": "Liwaton an lokal na deskripsyon",
        "create": "Muknaon",
+       "create-local": "Idugang an lokal na deskripsyon",
        "editthispage": "Liwata ining pahina",
        "create-this-page": "Muknaon ining pahina",
        "delete": "Puraon",
        "jumptonavigation": "nabigasyon",
        "jumptosearch": "hanapon",
        "view-pool-error": "Sori tabi, an mga server kargado sa oras na ini.\nGrabe kadakol an mga paragamit na pinagprubaran mahiling an pahinang ini.\nMakihalat tabi nin kadikit na panahon bago ka magprubara na makapaglaog sa pahinang ini.\n\n$1",
+       "generic-pool-error": "Sori tabi, an mga serbidor grabe kakargado sa oras na ini. Kadakulon na gayo an mga paragamit na minaprubar na hilngon ining kaggikanan. Tabi pakihalat kadikit bago ka magprubar otro na makapaglaog sa kaggikanang ini.",
        "pool-timeout": "Timeout naghahalat para makapanugpon",
        "pool-queuefull": "An grupong panproseso panoon",
        "pool-errorunknown": "Bakong bistadong sala",
        "gotaccountlink": "Maglaog",
        "userlogin-resetlink": "Nakalingaw ka sa panlaog mong detalye?",
        "userlogin-resetpassword-link": "Nalingawan mo an saimong pasa-taramon?",
+       "userlogin-helplink2": "Katabangan sa paglalaog",
        "userlogin-loggedin": "Ika nakalaog na tabi bilang si {{GENDER:$1|$1}}.\nGamita an porma sa ibaba sa paglaog bilang ibang paragamit.",
        "userlogin-createanother": "Magmukna nin ibang panindog",
        "createacct-emailrequired": "Estada kan e-surat",
        "suspicious-userlogout": "An hinahagad mong magluwas pinagpundo nin huli ta ini gayod pinagpadara sa paagi nin sarong pasang kilyaw o proksing hilom.",
        "createacct-another-realname-tip": "An totoong pangaran opsyonal.\nKun gustuhon mong itao ini, ini paggagamiton sa pagtatao nin pagkakabistohan kan paragamit para sa saindang mga kaggibohan.",
        "pt-login": "Maglaog",
+       "pt-login-button": "Maglaog",
        "pt-createaccount": "Magmukna nin panindog",
        "pt-userlogout": "Magluwas",
        "php-mail-error-unknown": "Bakong bantog na kasalaan sa PHP mail() function.",
        "resetpass-temp-password": "Temporaryong sekretong panlaog:",
        "resetpass-abort-generic": "Pagliwat kan sikretong panlaog ipinagpauntok kan sarong ekstensyon.",
        "resetpass-expired": "An saimong pasa-taramon nagpalso na. Tabi man pakikaag nin sarong baguhong pasa-taramon tanganing makalaog ka.",
-       "resetpass-expired-soft": "An saimong pasa-taramon nagpalso na, asin kinakaipuhan na baguhan. Tabi man pakipili nin sarong baguhong pasa-taramon ngunyan, o i-klik an kanselaron sa pagbago kaini aro-atyan.",
+       "resetpass-expired-soft": "An saimong pasa-taramon nagpalso na, asin kinakaipuhan na baguhon. Tabi man pakipili nin sarong baguhong pasa-taramon ngunyan, o i-klik an \"{{int:resetpass-submit-cancel}}\" kun baguhon sa aro-atyan.",
        "passwordreset": "Pakibago kan sekretong panlaog",
        "passwordreset-text-one": "Kumpletuhon ining porma sa pagliwat otro kan saimong pasa-taramon.",
        "passwordreset-text-many": "{{PLURAL:$1|Kaagi an saro sa mga kaaganan tanganing makaresibe nin sarong temporaryong pasa-taramon sa paagi kan e-surat.}}",
        "edit-gone-missing": "Dae makakapagdagdag sa pahina.\nIni minapahiwatig tabi na pinagpura na.",
        "edit-conflict": "Igwang iregularidad sa pagliwat.",
        "edit-no-change": "An saimong pagliwat pinagbalewala, nin huli ta mayong pagbabago an pinaghimo sa teksto.",
+       "postedit-confirmation-created": "An pahina nakamukna na.",
+       "postedit-confirmation-restored": "An pahina naibalik na otro.",
        "postedit-confirmation-saved": "An saimong niliwat ipinagtagama na.",
        "edit-already-exists": "Dai maggibo an bàgong pahina.\nIgwa na kaini.",
        "defaultmessagetext": "Tugmadong mensahe sa teksto",
        "content-failed-to-parse": "Nagpalya sa paglunhay an $2 na laman para sa $1 na modelo: $3",
        "invalid-content-data": "Imbalidong datos nin laman",
        "content-not-allowed-here": "\"$1\" na laman dae pinagtutugutan sa pahina [[$2]]",
-       "editwarning-warning": "Sa pagbaya kaining pahina magkakausa saimo na mawara an anuman na mga kaliwatan na saimong ginibo. Kun ika maglaog, mapuwede mong untukon ining patanid sa \"Pagliliwat\" na seksyon kan saimong mga kamuyahan.",
+       "editwarning-warning": "Sa pagbaya kaining pahina magkakausa saimo na mawara an anuman na mga kaliwatan na saimong pinaghimo. Kun ika nakapaglaog na, ika puwedeng makapagpauntok kaining patanid sa \"{{int:prefs-editing}}\" na seksyon kan saimong mga kamuyahan.",
        "editpage-notsupportedcontentformat-title": "Kalamnan nin pormat bakong suportado",
        "editpage-notsupportedcontentformat-text": "An pormat nin kalamnan na $1 bakong suportado kan modelong kalamnan na $2.",
        "content-model-wikitext": "wiki-teksto",
        "searchmenu-exists": "'''Igwa nin sarong pahina na pinagngaranan na \"[[:$1]]\" sa wiking ini.'''",
        "searchmenu-new": "'''Muknaon an pahina \"[[:$1]]\" sa wiking ini!'''",
        "searchprofile-articles": "Mga pahina nin laog",
-       "searchprofile-project": "Mga pahina nin Tabang asin Proyekto",
        "searchprofile-images": "Multimidya",
        "searchprofile-everything": "Gabós na bagay",
        "searchprofile-advanced": "Adbansiyado",
        "searchprofile-articles-tooltip": "Hanapon sa $1",
-       "searchprofile-project-tooltip": "Maghanap sa $1",
        "searchprofile-images-tooltip": "Maghanap nin mga sagunson",
        "searchprofile-everything-tooltip": "Maghanap nin gabos na laog (kabali an mga pahina nin olay)",
        "searchprofile-advanced-tooltip": "Maghanap nin pankustombreng espasyong-ngaran",
        "search-interwiki-default": "$1 na mga resulta:",
        "search-interwiki-more": "(dakol pa)",
        "search-relatedarticle": "Kauyon",
-       "searcheverything-enable": "Maghanap sa gabos na mga espasyong-ngaran",
        "searchrelated": "kauyon",
        "searchall": "gabós",
        "showingresults": "Pigpapahiling sa babâ sagkod sa {{PLURAL:$1|'''1''' resulta|'''$1''' mga resulta}} poon sa #'''$2'''.",
        "allowemail": "Togotan an mga ''e''-surat halî sa ibang mga parágamit",
        "prefs-searchoptions": "Hanapa",
        "prefs-namespaces": "Pangarang mga espasyo",
-       "defaultns": "Kun laen maghanap sa laog kaining pangarang mga espasyo:",
        "default": "pwestong normal",
        "prefs-files": "Mga dokumento",
        "prefs-custom-css": "Kustombreng CSS",
        "prefs-emailconfirm-label": "Kumpirmasyon sa E-koreo",
        "youremail": "E-surat:",
        "username": "{{GENDER:$1|Pangaran nin paragamit}}:",
-       "uid": "{{GENDER:$1|Paragamit}} ID:",
        "prefs-memberingroups": "{{GENDER:$2|Miyembro}} kan {{PLURAL:$1|grupo|mga grupo}}:",
        "prefs-registration": "Rehistrasyong oras:",
        "yourrealname": "Totoong pangaran:",
        "recentchanges-label-unpatrolled": "Ining pagliwat dae pa tabi pinagpatrolyahan",
        "recentchanges-label-plusminus": "An kadakulaan nin pahina pinagliwat sa paagi kaining numero nin mga bayta",
        "recentchanges-legend-heading": "'''Kabalaynan:'''",
-       "recentchanges-legend-newpage": "(hilngon man [[Special:NewPages|listahan kan mga baguhong pahina]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (hilngon man [[Special:NewPages|listahan kan mga baguhong pahina]])",
        "recentchanges-legend-plusminus": "(''±saro-duwa-tolo'')",
        "rcnotefrom": "Sa ibaba iyo an mga kaliwatan poon kan '''$2''' (sagkod sa '''$1''' na ipinapahiling).",
        "rclistfrom": "Ipahiling an baguhon na mga kaliwatan magpoon kan $3 $2",
        "rcshowhideminor": "$1 saradit na mga pagliwat",
+       "rcshowhideminor-show": "Ipatanaw",
+       "rcshowhideminor-hide": "Tagoa",
        "rcshowhidebots": "$1 mga gantaw",
+       "rcshowhidebots-show": "Ipatanaw",
+       "rcshowhidebots-hide": "Tagoa",
        "rcshowhideliu": "$1 rehistradong mga paragamit",
+       "rcshowhideliu-show": "Ipatanaw",
+       "rcshowhideliu-hide": "Tagoa",
        "rcshowhideanons": "$1 mga dae bistong paragamit",
+       "rcshowhideanons-show": "Ipatanaw",
+       "rcshowhideanons-hide": "Tagoa",
        "rcshowhidepatr": "$1 patrolyadong mga pagliwat",
+       "rcshowhidepatr-show": "Ipatanaw",
+       "rcshowhidepatr-hide": "Tagoa",
        "rcshowhidemine": "$1 sakong mga pagliliwat",
+       "rcshowhidemine-show": "Ipatanaw",
+       "rcshowhidemine-hide": "Tagoa",
        "rclinks": "Ipahilíng an $1 huring mga kaliwatan sa laog nin huring $2 na mga aldaw<br />$3",
        "diff": "kalaenan",
        "hist": "sagaysay",
        "log-title-wildcard": "Hanapon an mga titulong napopoon sa tekstong ini",
        "showhideselectedlogentries": "Ipahiling/itago an pinagpiling mga entrada sa talaan",
        "allpages": "Gabos na mga pahina",
-       "alphaindexline": "$1 sagkod sa $2",
        "nextpage": "Sunod na pahina ($1)",
        "prevpage": "Nakaaging pahina ($1)",
        "allpagesfrom": "Ipahiling an mga páhina poon sa:",
        "pageinfo-category-pages": "Bilang nin mga pahina",
        "pageinfo-category-subcats": "Bilang nin mga sub-kategorya",
        "pageinfo-category-files": "Bilang nin mga sagunson",
-       "skinname-modern": "Bago",
        "markaspatrolleddiff": "Markahan bilang pigpapatrolya",
        "markaspatrolledtext": "Markahan iníng pahina na pigpapatrolya",
        "markedaspatrolled": "Minarkahan na pigpapatrolya",
index affd2bf..0e4df24 100644 (file)
@@ -13,7 +13,8 @@
                        "Wizardist",
                        "Zedlik",
                        "Тест",
-                       "아라"
+                       "아라",
+                       "Liashko"
                ]
        },
        "tog-underline": "Падкрэсьліваць спасылкі:",
        "october-date": "$1 кастрычніка",
        "november-date": "$1 лістапада",
        "december-date": "$1 сьнежня",
-       "pagecategories": "{{PLURAL:$1|Катэгорыя|Катэгорыі|Катэгорыі}}",
+       "pagecategories": "{{PLURAL:$1|1=Катэгорыя|Катэгорыі}}",
        "category_header": "Старонкі ў катэгорыі «$1»",
        "subcategories": "Падкатэгорыі",
        "category-media-header": "Файлы ў катэгорыі «$1»",
-       "category-empty": "''Гэтая катэгорыя ня ўтрымлівае ні старонак, ні файлаў.''",
+       "category-empty": "<em>Гэтая катэгорыя ня ўтрымлівае ні старонак, ні файлаў.</em>",
        "hidden-categories": "{{PLURAL:$1|1=Схаваная катэгорыя|Схаваныя катэгорыі}}",
        "hidden-category-category": "Схаваныя катэгорыі",
        "category-subcat-count": "{{PLURAL:$2|1=Гэтая катэгорыя зьмяшчае наступную падкатэгорыю.|Гэтая катэгорыя зьмяшчае {{PLURAL:$1|наступную $1 падкатэгорыю|наступныя $1 падкатэгорыі|наступныя $1 падкатэгорыяў}} з $2 агулам.}}",
        "vector-view-view": "Чытаць",
        "vector-view-viewsource": "Паказаць крыніцу",
        "actions": "Дзеяньні",
+       "vector-more-actions": "Болей",
        "namespaces": "Прасторы назваў",
        "variants": "Варыянты",
        "navigation-heading": "Навігацыйнае мэню",
        "currentrev": "Цяперашняя вэрсія",
        "currentrev-asof": "Цяперашняя вэрсія на $1",
        "revisionasof": "Вэрсія ад $1",
-       "revision-info": "Вэрсія ад $1, аўтар $2",
+       "revision-info": "Вэрсія ад $1, {{GENDER:$6|аўтар $2|аўтарка $2}}$7",
        "previousrevision": "← Папярэдняя вэрсія",
        "nextrevision": "Наступная вэрсія →",
        "currentrevisionlink": "Цяперашняя вэрсія",
        "searchmenu-exists": "* Старонка '''[[$1]]'''",
        "searchmenu-new": "<strong>Стварыць старонку «[[:$1]]» у {{GRAMMAR:месны|{{SITENAME}}}}!</strong> {{PLURAL:$2|0=|Глядзіце таксама старонку, знойдзеную ў выніку пошуку.|Глядзіце таксама вынікі пошуку.}}",
        "searchprofile-articles": "Старонкі са зьместам",
-       "searchprofile-project": "Старонкі дапамогі і праекту",
        "searchprofile-images": "Мультымэдыя",
        "searchprofile-everything": "Усё",
        "searchprofile-advanced": "Пашыраны",
        "searchprofile-articles-tooltip": "Пошук у $1",
-       "searchprofile-project-tooltip": "Пошук у $1",
        "searchprofile-images-tooltip": "Пошук файлаў",
        "searchprofile-everything-tooltip": "Шукаць усюды (уключна са старонкамі абмеркаваньня)",
        "searchprofile-advanced-tooltip": "Шукаць у дадатковых прасторах назваў",
        "search-interwiki-default": "Вынікі з $1:",
        "search-interwiki-more": "(яшчэ)",
        "search-relatedarticle": "Зьвязаны",
-       "searcheverything-enable": "Шукаць ва ўсіх прасторах назваў",
        "searchrelated": "зьвязаны",
        "searchall": "усе",
        "showingresults": "Ніжэй {{PLURAL:$1|паданы|паданыя|паданыя}} да '''$1''' {{PLURAL:$1|выніку|вынікаў|вынікаў}}, пачынаючы з #<b>$2</b>.",
        "powersearch-togglelabel": "Пазначыць:",
        "powersearch-toggleall": "Усе",
        "powersearch-togglenone": "Нічога",
+       "powersearch-remember": "Запомніць выбар для будучых пошукаў",
        "search-external": "Вонкавы пошук",
        "searchdisabled": "Функцыя пошуку ў {{GRAMMAR:месны|{{SITENAME}}}} адключаная.\nВы можаце пашукаць з дапамогай Google, але заўважце, што там інфармацыя пра старонкі {{GRAMMAR:родны|{{SITENAME}}}} можа быць састарэлай.",
        "search-error": "Узьнікла памылка пры пошуку: $1",
        "allowemail": "Дазволіць атрыманьне лістоў ад іншых удзельнікаў і ўдзельніц",
        "prefs-searchoptions": "Пошук",
        "prefs-namespaces": "Прасторы назваў",
-       "defaultns": "Інакш шукаць у наступных прасторах назваў:",
        "default": "па змоўчваньні",
        "prefs-files": "Файлы",
        "prefs-custom-css": "Індывідуальны CSS",
        "recentchanges-label-unpatrolled": "Гэтае рэдагаваньне яшчэ не было адпатруляванае",
        "recentchanges-label-plusminus": "Памер старонкі зьмяніўся на такую колькасьць байтаў",
        "recentchanges-legend-heading": "'''Легенда:'''",
-       "recentchanges-legend-newpage": "(глядзіце таксама [[Special:NewPages|сьпіс новых старонак]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (глядзіце таксама [[Special:NewPages|сьпіс новых старонак]])",
        "rcnotefrom": "Ніжэй знаходзяцца зьмены з <strong>$2</strong> (да <strong>$1</strong> на старонку).",
        "rclistfrom": "Паказаць зьмены з $2 $3",
        "rcshowhideminor": "$1 дробныя праўкі",
        "wantedtemplates": "Запатрабаваныя шаблёны",
        "mostlinked": "Старонкі, на якія найчасьцей спасылаюцца",
        "mostlinkedcategories": "Катэгорыі з найбольшай колькасьцю старонак",
-       "mostlinkedtemplates": "ШаблÑ\91нÑ\8b, Ñ\8fкÑ\96Ñ\8f Ð½Ð°Ð¹Ñ\87аÑ\81Ñ\8cÑ\86ей Ð²Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eваÑ\8eÑ\86Ñ\86а",
+       "mostlinkedtemplates": "СÑ\82аÑ\80онкÑ\96, Ñ\8fкÑ\96Ñ\8f Ð½Ð°Ð¹Ñ\87аÑ\81Ñ\8cÑ\86ей Ñ\83клÑ\8eÑ\87аÑ\8eÑ\86Ñ\86а Ñ\9e Ñ\96нÑ\88Ñ\8bÑ\8f Ñ\81Ñ\82аÑ\80онкÑ\96",
        "mostcategories": "Старонкі з найбольшай колькасьцю катэгорыяў",
        "mostimages": "Файлы, на якія найчасьцей спасылаюцца",
        "mostinterwikis": "Старонкі з найбольшай колькасьцю інтэрвікі",
        "addedwatchtext-short": "Старонка «$1» была дададзеная ў ваш сьпіс назіраньня.",
        "removewatch": "Выдаліць са сьпісу назіраньня",
        "removedwatchtext": "Старонка «[[:$1]]» была выдаленая з [[Special:Watchlist|Вашага сьпісу назіраньня]].",
+       "removedwatchtext-short": "Старонка «$1» была выдаленая з вашага сьпісу назіраньня.",
        "watch": "Назіраць",
        "watchthispage": "Назіраць за гэтай старонкай",
        "unwatch": "Не назіраць",
        "contributions-title": "Унёсак {{GENDER:$1|удзельніка|удзельніцы}} $1",
        "mycontris": "Унёсак",
        "contribsub2": "Для {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Рахунак удзельніка «$1» не зарэгістраваны.",
        "nocontribs": "Ня знойдзена зьменаў, якія адпавядаюць гэтым крытэрыям.",
        "uctop": "(апошняя)",
        "month": "Ад месяца (і раней):",
        "movepagetalktext": "Старонка абмеркаваньня будзе перанесеная разам з асноўнай старонкай, '''за выключэньнем:'''\n* Не пустая старонка абмеркаваньня ўжо існуе пад новай назвай, альбо\n* Вы не паставілі адзнаку ў полі ніжэй.\n\nУ такіх выпадках Вы можаце перанесьці ці аб’яднаць старонку абмеркаваньня самастойна.",
        "movearticle": "Перанесьці старонку:",
        "moveuserpage-warning": "'''Папярэджаньне:''' Вы зьбіраецеся перанесьці старонку ўдзельніка. Калі ласка заўважце, што старонка будзе перанесеная, але імя ўдзельніка ''ня'' будзе зьмененае.",
+       "movecategorypage-warning": "<strong>Увага:</strong> вы зьбіраецеся перанесьці старонку катэгорыі. Калі ласка, заўважце, што будзе перанесеная толькі гэтая старонка, а ўсе старонкі з старой катэгорыі <em>ня</em> будуць перанесеныя ў новую.",
        "movenologintext": "Вам неабходна [[Special:UserLogin|ўвайсьці ў сыстэму]], каб перанесьці старонкі.",
        "movenotallowed": "Вы ня маеце дазволу на перанос старонак.",
        "movenotallowedfile": "Вы ня маеце правоў на перайменаваньне файлаў.",
        "cant-move-user-page": "Вы ня маеце правоў для пераносу старонак удзельнікаў (апрача падстаронак).",
        "cant-move-to-user-page": "Вы ня маеце правоў для пераносу старонкі ў прастору ўдзельніка (апрача падстаронак).",
+       "cant-move-category-page": "Вы ня маеце правоў для пераносу старонак катэгорыяў.",
+       "cant-move-to-category-page": "Вы ня маеце правоў для пераносу старонак у прастору назваў катэгорыяў.",
        "newtitle": "Новая назва:",
        "move-watch": "Назіраць за гэтай старонкай",
        "movepagebtn": "Перанесьці старонку",
        "pageinfo-category-pages": "Колькасьць старонак",
        "pageinfo-category-subcats": "Колькасьць падкатэгорыяў",
        "pageinfo-category-files": "Колькасьць файлаў",
-       "skinname-cologneblue": "Кёльнскі смутак",
        "skinname-monobook": "Монакніга",
-       "skinname-modern": "Сучаснае",
        "skinname-vector": "Вэктар",
        "markaspatrolleddiff": "Пазначыць як «патруляваную»",
        "markaspatrolledtext": "Пазначыць гэтую старонку як «патруляваную»",
        "newimages-summary": "Гэтая спэцыяльная старонка паказвае нядаўна загружаныя файлы.",
        "newimages-legend": "Фільтар",
        "newimages-label": "Назва файла (альбо яе частка):",
+       "newimages-showbots": "Паказаць загружаныя робатамі",
        "noimages": "Выявы адсутнічаюць.",
        "ilsubmit": "Шукаць",
        "bydate": "па даце",
        "imgmultigoto": "Перайсьці на старонку $1",
        "img-lang-default": "(мова па змоўчаньні)",
        "img-lang-info": "Паказаць гэтую выяву наступнай мовай: $1. $2",
+       "img-lang-go": "Паказаць",
        "ascending_abbrev": "узраст.",
        "descending_abbrev": "зьмянш.",
        "table_pager_next": "Наступная старонка",
        "watchlistedit-raw-done": "Ваш сьпіс назіраньня быў абноўлены.",
        "watchlistedit-raw-added": "$1 {{PLURAL:$1|запіс быў дададзены|запісы былі дададзеныя|запісаў былі дададзеныя}}:",
        "watchlistedit-raw-removed": "$1 {{PLURAL:$1|запіс быў выдалены|запісы былі выдаленыя|запісаў былі выдаленыя}}:",
+       "watchlistedit-clear-title": "Чыстка сьпісу назіраньня",
+       "watchlistedit-clear-legend": "Ачысьціць сьпіс назіраньня",
+       "watchlistedit-clear-explain": "Усе старонкі будуць выдаленыя з вашага сьпісу назіраньня",
+       "watchlistedit-clear-titles": "Старонкі:",
+       "watchlistedit-clear-submit": "Ачысьціць сьпіс назіраньня (гэта незваротна!)",
+       "watchlistedit-clear-done": "Ваш сьпіс назіраньня быў ачышчаны.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|$1 запіс быў выдалены|$1 запісы былі выдаленыя|$1 запісаў былі выдаленыя}}:",
+       "watchlistedit-too-many": "Зашмат старонак, каб паказаць іх тут.",
+       "watchlisttools-clear": "Ачысьціць сьпіс назіраньня",
        "watchlisttools-view": "Паказаць зьмены ў старонках зь сьпісу",
        "watchlisttools-edit": "Праглядзець альбо рэдагаваць сьпіс назіраньня",
        "watchlisttools-raw": "Рэдагаваць як тэкст",
        "version-version": "(Вэрсія $1)",
        "version-svn-revision": "(r$2)",
        "version-license": "Ліцэнзія MediaWiki",
+       "version-ext-license": "Ліцэнзія",
+       "version-ext-colheader-name": "Пашырэньне",
+       "version-ext-colheader-version": "Вэрсія",
+       "version-ext-colheader-license": "Ліцэнзія",
+       "version-ext-colheader-description": "Апісаньне",
+       "version-ext-colheader-credits": "Аўтары",
+       "version-license-title": "Ліцэнзія для $1",
+       "version-license-not-found": "Для гэтага пашырэньня няма падрабязных зьвестак пра ліцэнзію.",
+       "version-credits-title": "Сьпіс аўтараў $1",
+       "version-credits-not-found": "Для гэтага пашырэньня ня знойдзена падрабязных зьвестак пра аўтараў.",
        "version-poweredby-credits": "{{SITENAME}} працуе на праграмным забесьпячэньні '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "іншыя",
        "version-poweredby-translators": "перакладчыкі з translatewiki.net",
        "redirect-lookup": "Шукаць паводле:",
        "redirect-value": "Значэньне:",
        "redirect-user": "Ідэнтыфікатара ўдзельніка",
+       "redirect-page": "Ідэнтыфікатар старонкі",
        "redirect-revision": "Вэрсіі старонкі",
        "redirect-file": "Імя файла",
        "redirect-not-exists": "Значэньне ня знойдзена",
        "htmlform-no": "Не",
        "htmlform-yes": "Так",
        "htmlform-chosen-placeholder": "Выберыце варыянт",
+       "htmlform-cloner-create": "Дадаць больш",
+       "htmlform-cloner-delete": "Выдаліць",
+       "htmlform-cloner-required": "Патрабуецца як мінімум яшчэ адно значэньне.",
        "sqlite-has-fts": "$1 з падтрымкай поўнатэкстнага пошуку",
        "sqlite-no-fts": "$1 без падтрымкі поўнатэкстнага пошуку",
        "logentry-delete-delete": "$1 {{GENDER:$2|выдаліў|выдаліла}} старонку $3",
        "api-error-overwrite": "Замена існуючага файла забароненая.",
        "api-error-stashfailed": "Унутраная памылка: сэрвэр ня змог захаваць часовы файл.",
        "api-error-publishfailed": "Унутраная памылка: сэрвэр ня змог захаваць часловы файл.",
+       "api-error-stasherror": "Падчас загрузкі файла ў сховішча адбылася памылка.",
        "api-error-timeout": "Сэрвэр не адказаў у чаканы тэрмін.",
        "api-error-unclassified": "Узьнікла невядомая памылка",
        "api-error-unknown-code": "Невядомая памылка: «$1».",
        "expand_templates_input": "Крынічны тэкст:",
        "expand_templates_output": "Вынік",
        "expand_templates_xml_output": "вынік у фармаце XML",
+       "expand_templates_html_output": "HTML-вывад",
        "expand_templates_ok": "Добра",
        "expand_templates_remove_comments": "Выдаліць камэнтары",
        "expand_templates_remove_nowiki": "Падаўляць тэгі <nowiki> у выніку",
        "expand_templates_generate_xml": "Паказаць дрэва аналізу XML",
+       "expand_templates_generate_rawhtml": "Паказаць HTML",
        "expand_templates_preview": "Папярэдні прагляд"
 }
index 3cfc599..2b49196 100644 (file)
                        "Чаховіч Уладзіслаў",
                        "לערי ריינהארט",
                        "아라",
-                       "Unomano"
+                       "Unomano",
+                       "Mikalai Udodau",
+                       "Artificial123"
                ]
        },
        "tog-underline": "Падкрэсліваць спасылкі:",
-       "tog-hideminor": "Ð\9dе Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\86Ñ\8c Ð´Ñ\80обнÑ\8bÑ\85 Ð¿Ñ\80авак",
+       "tog-hideminor": "Ð\9dе Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\86Ñ\8c Ð´Ñ\80обнÑ\8bÑ\8f Ð¿Ñ\80аÑ\9eкÑ\96",
        "tog-hidepatrolled": "Без паказу ўхваленых правак у нядаўніх змяненнях",
        "tog-newpageshidepatrolled": "Без паказу ўхваленых правак у пераліку новых старонак",
        "tog-extendwatchlist": "Паказваць усе змяненні, а не толькі апошнія",
        "category_header": "Складнікі ў катэгорыі “$1”",
        "subcategories": "Падкатэгорыі",
        "category-media-header": "Мультымедыя ў катэгорыі \"$1\"",
-       "category-empty": "''Зараз у катэгорыі няма аніводнай старонкі або мультымедыйнага файла.''",
+       "category-empty": "<em>Зараз у катэгорыі няма аніводнай старонкі або мультымедыйнага файла.</em>",
        "hidden-categories": "{{PLURAL:$1|Схаваная катэгорыя|Схаваныя катэгорыі}}",
        "hidden-category-category": "Схаваныя катэгорыі",
        "category-subcat-count": "{{PLURAL:$1|Паказана $1 падкатэгорыя|Паказаны $1 падкатэгорыі|Паказаны $1 падкатэгорый}} з $2.",
        "vector-view-view": "Чытаць",
        "vector-view-viewsource": "Паказаць зыходны тэкст",
        "actions": "Дзеянні",
+       "vector-more-actions": "Яшчэ",
        "namespaces": "Прасторы імёнаў",
        "variants": "Варыянты",
        "navigation-heading": "Навігацыя",
        "errorpagetitle": "Памылка",
        "returnto": "Вярнуцца да $1.",
-       "tagline": "З пляцоўкі {{SITENAME}}.",
+       "tagline": "З пляцоўкі {{SITENAME}}",
        "help": "Даведка",
        "search": "Знайсці",
        "searchbutton": "Знайсці",
        "go": "Пераход",
        "searcharticle": "Артыкул",
        "history": "Гісторыя старонкі",
-       "history_short": "гісторыя",
+       "history_short": "Ð\93історыя",
        "updatedmarker": "абноўлена ад часу апошняга наведвання",
        "printableversion": "Для друку",
        "permalink": "Нязменная спасылка",
        "print": "Друкаваць",
        "view": "Паказ",
+       "view-foreign": "Глядзець на $1",
        "edit": "Правіць",
+       "edit-local": "Правіць тутэйшае апісанне",
        "create": "Стварыць",
+       "create-local": "Дадаць тутэйшае апісанне",
        "editthispage": "Правіць гэту старонку",
        "create-this-page": "Стварыць старонку",
-       "delete": "сцерці",
+       "delete": "Сцерці",
        "deletethispage": "Сцерці гэту старонку",
        "undeletethispage": "Аднавіць гэту старонку",
        "undelete_short": "Аднавіць {{PLURAL:$1|адну праўку|$1 правак}}",
        "unprotectthispage": "Змяніць ахову гэтай старонкі",
        "newpage": "Новая старонка",
        "talkpage": "Размовы пра гэтую старонку",
-       "talkpagelinktext": "размова",
+       "talkpagelinktext": "Размовы",
        "specialpage": "Адмысловая старонка",
        "personaltools": "Асабістыя прылады",
        "postcomment": "Новы раздзел",
        "redirectedfrom": "(Пасля перасылкі з $1)",
        "redirectpagesub": "Старонка-перасылка",
        "lastmodifiedat": "Апошняе змяненне старонкі адбылося $2, $1.",
-       "viewcount": "Гэту старонку адкрывалі {{PLURAL:$1|адзін раз|$1 разоў}}.",
+       "viewcount": "Гэту старонку адкрывалі {{PLURAL:$1|адзін раз|$1 разы|$1 разоў}}.",
        "protectedpage": "Старонка пад аховай",
        "jumpto": "Перайсці да:",
        "jumptonavigation": "рух",
        "jumptosearch": "знайсці",
        "view-pool-error": "На жаль, у гэты момант серверы перагружаны.\nЗанадта многія чытачы спрабуюць адкрыць гэтую старонку.\nКалі ласка, трохі пачакайце, перш чым адкрываць гэтую старонку ізноў.\n\n$1",
+       "generic-pool-error": "На жаль, у гэты момант серверы перагружаны.\nЗанадта многія карыстальнікі спрабуюць адкрыць гэты рэсурс.\nКалі ласка, трохі пачакайце, перш чым спрабаваць атрымаць доступ да гэтага рэсурсу ізноў.",
        "pool-timeout": "Выйшаў час чакання блакіроўкі",
        "pool-queuefull": "Чарга запытаў перапоўнена",
        "pool-errorunknown": "Невядомая памылка",
        "youhavenewmessages": "Вы маеце $1 ($2).",
        "youhavenewmessagesfromusers": "Вы атрымалі $1 ад {{PLURAL:$3|$3 ўдзельніка|$3 удзельнікаў}} ($2).",
        "youhavenewmessagesmanyusers": "Вы атрымалі $1 ад мноства карыстальнікаў ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|новае паведамленне|999=новыя паведамленні}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|апошняя \nзмена|999=апошнія \nзмены}}",
        "youhavenewmessagesmulti": "У вас ёсць новыя паведамленні на $1",
        "editsection": "правіць",
        "editold": "правіць",
-       "viewsourceold": "гл. Ð²Ñ\8bÑ\82ок",
+       "viewsourceold": "гл. Ð·Ñ\8bÑ\85однÑ\96к",
        "editlink": "правіць",
        "viewsourcelink": "паказ крыніцы",
        "editsectionhint": "Правіць раздзел: $1",
        "toc": "Змест",
        "showtoc": "паказаць",
        "hidetoc": "не паказваць",
-       "collapsible-collapse": "схаваць",
+       "collapsible-collapse": "Схаваць",
        "collapsible-expand": "Паказаць",
        "thisisdeleted": "Паказаць ці аднавіць $1?",
        "viewdeleted": "Ці паказаць $1?",
-       "restorelink": "$1 {{PLURAL:$1|сцёртая праўка|сцёртых правак}}",
+       "restorelink": "$1 {{PLURAL:$1|Ñ\81Ñ\86Ñ\91Ñ\80Ñ\82аÑ\8f Ð¿Ñ\80аÑ\9eка|Ñ\81Ñ\86Ñ\91Ñ\80Ñ\82Ñ\8bÑ\8f Ð¿Ñ\80аÑ\9eкÑ\96\81Ñ\86Ñ\91Ñ\80Ñ\82Ñ\8bÑ\85 Ð¿Ñ\80авак}}",
        "feedlinks": "Струмень:",
        "feed-invalid": "Недапушчальны тып струмяня навін.",
        "feed-unavailable": "Няма струмянёў навін",
        "nospecialpagetext": "<strong>Вы звярнуліся па няправільную адмысловую старонку.</strong>\n\nПералік правільных адмысловых старонак ёсць на [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Памылка",
        "databaseerror": "Памылка базы дадзеных",
-       "laggedslavemode": "Увага: Старонка можа не ўтрымліваць апошніх змен.",
+       "databaseerror-query": "Запыт: $1",
+       "databaseerror-function": "Функцыя: $1",
+       "databaseerror-error": "Памылка: $1",
+       "laggedslavemode": "<strong>Увага:</strong> Старонка можа не ўтрымліваць апошніх змен.",
        "readonly": "База звестак заблакаваная",
        "enterlockreason": "Упішыце прычыну зачынення, а таксама меркаваны час адчынення",
        "readonlytext": "База даных не прыймае новых старонак і іншых змяненняў, таму што яна зараз зачынена, відаць, дзеля абслугоўвання, пасля чаго будзе вернута да нармальнай працы.\n\nАдміністратар, які зачыняў базу, растлумачыў гэта так: $1",
        "badarticleerror": "Аперацыя не дазволена на гэтай старонцы.",
        "cannotdelete": "Немагчыма сцерці старонку ці файл \"$1\". Магчыма, хтосьці іншы ўжо зрабіў гэта.",
        "cannotdelete-title": "Нельга выдаліць старонку \"$1\"",
+       "delete-hook-aborted": "Сціранне спынена хукам (hook).\nТлумачэнняў не было.",
+       "no-null-revision": "Немагчыма стварыць нуль-версію (null revision) для старонкі \"$1\"",
        "badtitle": "Няправільная назва",
        "badtitletext": "Назва старонкі, па якую звярталіся, аказалася недапушчальнай, пустой, або няправільна прылучанай між-моўнай ці між-вікі назвай. Магчыма, у ёй ёсць знакі, якія нельга ўжываць у назвах.",
        "perfcached": "Гэта ўзятыя з кэшу звесткі, і яны могуць не быць актуальнымі. У кэшы захоўваецца не больш за {{PLURAL:$1|адзін вынік|$1 вынікі|$1 вынікаў}}.",
        "viewsource-title": "Прагляд зыходнага тэксту старонкі $1",
        "actionthrottled": "Дзеянне прыгашана",
        "actionthrottledtext": "Дзеля абароны ад спаму, вам не дазваляецца выконваць гэтае дзеянне занадта часта за пэўны адрэзак часу, і вы гэты ліміт перасягнулі. Паспрабуйце ізноў праз некалькі мінут.",
-       "protectedpagetext": "Старонка ахоўваецца, каб нельга было яе правіць.",
+       "protectedpagetext": "Старонка ахоўваецца, каб нельга было яе правіць ці яшчэ што рабіць.",
        "viewsourcetext": "Можна бачыць і капіраваць зыходны тэкст гэтай старонкі:",
        "viewyourtext": "Вы можаце праглядзець і скапіяваць зыходны тэкст '''вашых правак''' на гэтай старонцы:",
        "protectedinterface": "Старонка ўтрымлівае інтэрфейснае паведамленне праграмнага забеспячэння гэтага вікі-праекта і ахоўваецца, каб прадухіліць вандалізм.\nКаб дабавіць ці змяніць пераклады ва ўсіх вікі-праектах, калі ласка, выкарыстоўвайце сайт лакалізацыі MediaWiki [//translatewiki.net/ translatewiki.net].",
-       "editinginterface": "'''Увага:''' Вы правіце старонку, якая ўтрымлівае тэкст карыстальніцкага інтэрфейсу.\nЯе змяненне паўплывае на вонкавы выгляд праграмы для ўсіх удзельнікаў.\nПраект лакалізацыі MediaWiki: [//translatewiki.net/wiki/Main_Page?setlang=be translatewiki.net].",
+       "editinginterface": "<strong>Увага:</strong> Вы правіце старонку, якая ўтрымлівае тэкст карыстальніцкага інтэрфейсу.\nЯе змяненне паўплывае на вонкавы выгляд праграмы для ўсіх удзельнікаў гэтай вікі.\nПраект лакалізацыі MediaWiki: [//translatewiki.net/wiki/ translatewiki.net].",
        "cascadeprotected": "Старонка знаходзіцца пад аховай ад правак, таму што яна ўлучана ў наступн{{PLURAL:$1|ую старонку|ыя старонкі}}, якія ахоўваюцца з магчымасцю \"каскаднага распаўсюджвання\" аховы:\n$2",
-       "namespaceprotected": "Вам не дазволена правіць старонкі ў прасторы назваў '''$1'''.",
+       "namespaceprotected": "Вам не дазволена правіць старонкі ў прасторы назваў <strong>$1</strong>.",
        "customcssprotected": "У вас няма дазволу рэдагаваць гэтую CSS-старонку, бо яна ўтрымлівае асабістыя настройкі іншага ўдзельніка.",
        "customjsprotected": "У вас няма дазволу рэдагаваць гэтую JavaScript-старонку, таму што яна ўтрымлівае асабістыя настройкі іншага ўдзельніка.",
+       "mycustomcssprotected": "Вам не дазволена рэдагаванне гэтай старонкі CSS.",
+       "mycustomjsprotected": "Вам не дазволена рэдагаванне гэтай старонкі JavaScript.",
+       "myprivateinfoprotected": "Вам не дазволена рэдагаваць свае асабістыя звесткі.",
+       "mypreferencesprotected": "Вам не дазволена рэдагаваць свае настройкі.",
        "ns-specialprotected": "Не дазволена правіць старонкі ў прасторы назваў {{ns:special}}.",
-       "titleprotected": "Назва засцерагаецца ад стварэння; ахова пастаўлена ўдзельнікам: [[User:$1|$1]].\nТлумачэнне пастаноўкі пад ахову: ''$2''.",
+       "titleprotected": "Назва засцерагаецца ад стварэння; ахова пастаўлена ўдзельнікам: [[User:$1|$1]].\nТлумачэнне пастаноўкі пад ахову: \"<em>$2</em>\".",
+       "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>, пад тым самым або пад іншым удзельніцкім імем. Заўважце, што некаторыя старонкі могуць паказвацца так, быццам вы яшчэ не выйшлі; у такім разе трэба ачысціць кэш вашага браўзера.",
+       "logouttext": "<strong>Вы выйшлі з сістэмы.</strong>\n\nЗаўважце, што некаторыя старонкі могуць паказвацца так, быццам вы яшчэ не выйшлі; у такім разе трэба ачысціць кэш вашага браўзера.",
        "welcomeuser": "Вітаем, $1!",
        "welcomecreation-msg": "Ваш рахунак быў створаны.\nНе забудзьцеся ажыццявіць [[Special:Preferences|настройку]] для {{SITENAME}}.",
-       "yourname": "Імя ўдзельніка",
+       "yourname": "Імя ўдзельніка:",
        "userlogin-yourname": "Імя ўліковага запісу",
        "userlogin-yourname-ph": "Увядзіце імя вашага ўліковага запісу",
        "createacct-another-username-ph": "Увядзіце імя карыстальніка",
-       "yourpassword": "Пароль",
+       "yourpassword": "Пароль:",
        "userlogin-yourpassword": "Пароль",
        "userlogin-yourpassword-ph": "Увядзіце ваш пароль",
        "createacct-yourpassword-ph": "Увядзіце пароль",
-       "yourpasswordagain": "Паўтарыце пароль",
+       "yourpasswordagain": "Паўтарыце пароль:",
        "createacct-yourpasswordagain": "Пацвердзіце пароль",
        "createacct-yourpasswordagain-ph": "Увядзіце пароль яшчэ раз",
-       "remembermypassword": "Памятаць мяне на гэтым камп'ютары (не даўжэй за $1 {{PLURAL:$1|дзень|дзён}})",
+       "remembermypassword": "Ð\9fамÑ\8fÑ\82аÑ\86Ñ\8c Ð¼Ñ\8fне Ð½Ð° Ð³Ñ\8dÑ\82Ñ\8bм ÐºÐ°Ð¼Ð¿'Ñ\8eÑ\82аÑ\80Ñ\8b (не Ð´Ð°Ñ\9eжÑ\8dй Ð·Ð° $1 {{PLURAL:$1|дзенÑ\8c|днÑ\96|дзÑ\91н}})",
        "userlogin-remembermypassword": "Заставацца ў сістэме",
        "userlogin-signwithsecure": "Выкарыстоўваць абароненае злучэнне",
-       "yourdomainname": "Ваш дамен",
+       "yourdomainname": "Ваш дамен:",
+       "password-change-forbidden": "Вы не можаце змяняць паролі на гэтай Вікі.",
        "externaldberror": "Або памылка вонкавай аўтэнтыкацыі ў базе дадзеных, або вам не дазволена абнаўляць свой вонкавы рахунак.",
        "login": "Увайсці ў сістэму",
        "nav-login-createaccount": "Увайсці ў сістэму / стварыць рахунак",
        "gotaccountlink": "Увайсці ў сістэму",
        "userlogin-resetlink": "Забыліся даныя для ўваходу?",
        "userlogin-resetpassword-link": "Забылі пароль?",
+       "userlogin-createanother": "Стварыць яшчэ адзін уліковы запіс",
        "createacct-emailrequired": "Адрас электроннай пошты",
        "createacct-emailoptional": "Адрас электроннай пошты (неабавязкова)",
        "createacct-email-ph": "Увядзіце ваш адрас электроннай пошты",
        "createacct-another-email-ph": "Увядзіце адрас электроннай пошты",
-       "createaccountmail": "праз эл.пошту",
+       "createaccountmail": "Ужыць часовы выпадковы пароль і даслаць яго праз эл.пошту",
+       "createacct-realname": "Сапраўднае імя (неабавязкова)",
        "createaccountreason": "Прычына:",
        "createacct-reason": "Прычына",
+       "createacct-captcha": "Праверка бяспекі",
        "createacct-imgcaptcha-ph": "Увядзіце тэкст, які вы бачыце вышэй",
        "createacct-submit": "Стварыць уліковы запіс",
+       "createacct-another-submit": "Стварыць яшчэ адзін уліковы запіс",
+       "createacct-benefit-heading": "{{SITENAME}} зроблены такімі ж людзьмі, як вы.",
+       "createacct-benefit-body1": "{{PLURAL:$1|праўка|праўкі|правак}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|старонка|старонкі|старонак}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|апошні \nўкладальнік|апошнія \nўкладальнікі|апошніх \nукладальнікаў}}",
        "badretype": "Уведзеныя паролі не аднолькавыя.",
        "userexists": "Такое імя ўдзельніка ўжо занятае.\nКалі ласка, выбярыце іншае імя.",
        "loginerror": "Памылка ўваходу",
        "createaccounterror": "Не ўдалося стварыць рахунак: $1",
        "nocookiesnew": "Рахунак быў створаны, але ў сістэму вы не ўвайшлі. {{SITENAME}} карыстаецца квіткамі (кукі), каб апрацоўваць уваходы ўдзельнікаў, а гэтая функцыянальнасць адключана ў вашым браўзеры. Уключыце квіткі ў браўзеры, тады ўваходзьце са сваімі новымі імем удзельніка і паролем.",
        "nocookieslogin": "{{SITENAME}} карыстаецца квіткамі (кукі), каб пазнаваць удзельнікаў. У вашым браўзеры квіткі не дазволены. Дазвольце іх працу і паспрабуйце ізноў.",
-       "nocookiesfornew": "Уліковы запіс карыстальніка не быў створаны, бо мы не змаглі пацвердзіць яго крыніцы. \n Пераканайцеся ў тым, кукі ўключаныя, абнавіце старонку і паспрабуйце яшчэ раз.",
+       "nocookiesfornew": "Уліковы запіс карыстальніка не быў створаны, бо мы не змаглі пацвердзіць яго крыніцы. \nУпэўніцеся, што кукі ўключаныя, абнавіце старонку і паспрабуйце яшчэ раз.",
        "noname": "Вы не вызначылі правільнага імя ўдзельніка.",
        "loginsuccesstitle": "Паспяховы ўваход у сістэму",
-       "loginsuccess": "'''Цяпер Вы ўвайшлі на {{SITENAME}} як \"$1\".'''",
+       "loginsuccess": "<strong>Цяпер Вы ўвайшлі на {{SITENAME}} як \"$1\".</strong>",
        "nosuchuser": "Няма ўдзельніка з імем \"$1\". Праверце правільнасць напісання або [[Special:UserLogin/signup|стварыце новы рахунак]]. Вялікія і малыя літары ў такіх імёнах лічацца рознымі.",
        "nosuchusershort": "Удзельніка з імем \"$1\" не існуе. Праверце яго напісанне.",
        "nouserspecified": "Вы мусіце вызначыць імя ўдзельніка.",
        "noemailcreate": "Вам неабходна паказаць дзеючы адрас электроннай пошты",
        "passwordsent": "На адрас электроннай пошты, зарэгістраваны для \"$1\",\nбыў дасланы новы пароль.\nКалі ласка, увайдзіце ў сістэму зноў пасля яго атрымання.",
        "blocked-mailpassword": "Для адрасу IP, з якога вы працуеце, забароненыя праўкі, а значыць, у мэтах абароны ад злоўжывання нельга карыстацца і функцыяй аднаўлення паролю.",
-       "eauthentsent": "Пацверджанне было адасланае эл.поштай на азначаны адрас эл.пошты.\nКаб туды, у далейшым, трапляла іншая эл.пошта адсюль, патрабуецца выканаць інструкцыі, выкладзеныя ў гэтым эл.паведамленні, каб пацвердзіць сваё права на рахунак эл.пошты.",
-       "throttled-mailpassword": "Нагаданне пра пароль ужо адсылалася на працягу апошн{{PLURAL:$1|яй гадзіны|іх $1 гадзін}}. Дзеля абароны ад злоўжыванняў, дазваляецца атрымліваць толькі адно такое нагаданне за {{PLURAL:$1|гадзіну|$1 гадзін}}.",
+       "eauthentsent": "Пацверджанне было адасланае электроннай поштай на азначаны адрас эл.пошты.\nКаб туды, у далейшым, трапляла іншая пошта адсюль, патрабуецца выканаць інструкцыі, выкладзеныя ў тым эл.паведамленні, каб пацвердзіць сваё права на рахунак эл.пошты.",
+       "throttled-mailpassword": "Нагаданне пра пароль ужо адсылалася на працягу апошн{{PLURAL:$1|яй гадзіны|іх $1 гадзін}}. Дзеля абароны ад злоўжыванняў, дазваляецца атрымліваць толькі адно такое нагаданне за {{PLURAL:$1|гадзіну|$1 гадзіны|$1 гадзін}}.",
        "mailerror": "Памылка адсылання эл.пошты: $1",
        "acct_creation_throttle_hit": "На гэтай вікі за апошні дзень створаны {{PLURAL:$1|1 рахунак|$1 рахункаў}} наведвальнікамі з вашага адрасу IP. Больш за такі час не дазваляецца. Таму на пэўны час з гэтага адрасу IP нельга ствараць новых рахункаў.",
        "emailauthenticated": "Ваш адрас эл.пошты быў пацверджаны на пляцоўцы $2 ($3).",
-       "emailnotauthenticated": "Адрас эл.пошты яшчэ не пацверджаны. Эл.пошта ў гэтых магчымасцях слацца не будзе.",
+       "emailnotauthenticated": "Адрас эл.пошты яшчэ не пацверджаны. \nЭл.пошта ў гэтых магчымасцях адсылацца не будзе.",
        "noemailprefs": "Патрэбны адрас эл.пошты, каб дзейнічалі гэтыя магчымасці.",
        "emailconfirmlink": "Пацвердзіце ваш адрас эл.пошты",
        "invalidemailaddress": "Непрыймальны адрас эл.пошты, таму што яго фармат выглядае няправільным. Упішыце адрас у правільным фармаце або ачысціце гэтае поле.",
        "cannotchangeemail": "Адрасы электроннай пошты гэтага ўліковага запісу не могуць быць зменены ў гэтай вікі.",
+       "emaildisabled": "Гэты сайт не можа адсылаць эл.пошту.",
        "accountcreated": "Створаны рахунак",
-       "accountcreatedtext": "СÑ\82воÑ\80анÑ\8b Ñ\80аÑ\85Ñ\83нак Ñ\83дзелÑ\8cнÑ\96ка $1.",
+       "accountcreatedtext": "СÑ\82воÑ\80анÑ\8b Ñ\9eлÑ\96ковÑ\8b Ð·Ð°Ð¿Ñ\96Ñ\81 Ñ\83дзелÑ\8cнÑ\96ка [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|Ñ\80азмовÑ\8b]]).",
        "createaccount-title": "Стварэнне рахунка на {{SITENAME}}",
        "createaccount-text": "На пляцоўцы {{SITENAME}} ($4) быў створаны рахунак удзельніка з гэтым адрасам эл.пошты. Назва рахунку \"$2\", пароль \"$3\". Варта адразу ўвайсці ў сістэму і змяніць пароль.\n\nКалі стварэнне рахунку было памылковым, то на гэтае паведамленне можна не звяртаць увагі.",
-       "login-throttled": "Ð\97анадÑ\82а Ð¼Ð½Ð¾Ð³Ð° Ð½Ñ\8fдаÑ\9eнÑ\96Ñ\85 Ñ\81пÑ\80обаÑ\9e Ñ\83вайÑ\81Ñ\86Ñ\96 Ð¿Ð°Ð´ Ð³Ñ\8dÑ\82Ñ\8bм Ñ\80аÑ\85Ñ\83нкам. Ð\9fаÑ\87акайÑ\86е перад тым, як спрабаваць ізноў.",
+       "login-throttled": "Ð\97анадÑ\82а Ð¼Ð½Ð¾Ð³Ð° Ð½Ñ\8fдаÑ\9eнÑ\96Ñ\85 Ñ\81пÑ\80обаÑ\9e Ñ\83вайÑ\81Ñ\86Ñ\96 Ð¿Ð°Ð´ Ð³Ñ\8dÑ\82Ñ\8bм Ñ\83лÑ\96ковÑ\8bм Ð·Ð°Ð¿Ñ\96Ñ\81ам. \nÐ\9fаÑ\87акайÑ\86е $1 перад тым, як спрабаваць ізноў.",
        "login-abort-generic": "Няўдалая спроба ўвайсці ў сістэму",
        "loginlanguagelabel": "Мова: $1",
        "suspicious-userlogout": "Ваш запыт на выхад быў адмоўлены, паколькі ён выглядае як накіраваны са зламанага браўзера або кэшаванне проксі-сервераў.",
+       "createacct-another-realname-tip": "Сапраўднае імя паведамляць неабавязкова.\nКалі вы рашылі паведаміць яго, ім будзе падпісваецца зроблены ўдзельнікам унёсак.",
        "pt-login": "Увайсці",
        "pt-login-button": "Увайсці",
        "pt-createaccount": "Стварыць уліковы запіс",
        "pt-userlogout": "Выйсці",
        "php-mail-error-unknown": "Невядомая памылка ў функцыі PHP-пошты",
        "user-mail-no-addy": "Паспрабаваў адправіць электронны ліст без адрасу электроннай пошты",
+       "user-mail-no-body": "Спроба даслаць ліст эл.пошты з пустым або неабгрунтавана кароткім зместам.",
        "changepassword": "Пароль",
        "resetpass_announce": "Каб завяршыць уваход у сістэму, Вы павінны ўстанавіць новы пароль.",
        "resetpass_header": "Змяніць пароль рахунку",
        "retypenew": "Новы пароль паўторна:",
        "resetpass_submit": "Наставіць пароль і ўвайсці",
        "changepassword-success": "Ваш пароль паспяхова зменены!",
+       "changepassword-throttled": "Занадта многа нядаўніх спробаў увайсці пад гэтым уліковым запісам. \nПачакайце $1 перад тым, як спрабаваць ізноў.",
        "resetpass_forbidden": "Не дазволена мяняць паролі",
        "resetpass-no-info": "Трэба ўвайсці ў сістэму, каб звяртацца да гэтай старонкі наўпрост.",
        "resetpass-submit-loggedin": "Змяніць пароль",
        "resetpass-submit-cancel": "Нічога",
        "resetpass-wrong-oldpass": "Недапушчальны тымчасовы ці актуальны пароль.\nМагчыма, вы ўжо змянілі свой пароль ці папрасілі новы тымчасовы.",
+       "resetpass-recycled": "Калі ласка, змяніце свой пароль на нешта іншае, чым ваш цяперашні пароль.",
        "resetpass-temp-password": "Тымчасовы пароль:",
+       "resetpass-validity-soft": "Ваш пароль недапушчальны: $1\n\nКалі ласка, выберыце новы пароль зараз, або націсніце \"{{int:resetpass-submit-cancel}}\", каб скінуць яго пазней.",
        "passwordreset": "Выслаць мне новы пароль",
+       "passwordreset-text-one": "Запоўніце гэту форму, каб атрымаць часовы пароль па эл.пошце.",
        "passwordreset-legend": "Пераўстанавіць пароль",
        "passwordreset-disabled": "Функцыя пераўсталёўкі пароля адключаная на гэтай вікі.",
-       "passwordreset-username": "Імя ўдзельніка",
+       "passwordreset-emaildisabled": "Функцыі эл.пошты адключаны на гэтай Вікі.",
+       "passwordreset-username": "Імя ўдзельніка:",
        "passwordreset-domain": "Дамен:",
        "passwordreset-capture": "Праглядзець напісаны ліст?",
        "passwordreset-capture-help": "Калі вы паставіце адзнаку, то вам будзе паказаны ліст з часовым паролем, які адпраўляецца ўдзельніку.",
        "passwordreset-email": "Адрас электроннай пошты:",
        "passwordreset-emailtitle": "Інфармацыя пра рахунак на сайце {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Нехта (магчыма вы, з IP-адрасу $1) запытаў напамін пра ваш \nуліковы запіс у праекце {{SITENAME}} ($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны | Наступныя ўліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|адзін дзень|$5 дзён}}.\nВы павінны ўвайсці ў сістэму і абраць новы пароль.\nКалі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль\nі не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне\nі працягнуць выкарыстоўваць свой стары пароль.",
-       "passwordreset-emailtext-user": "УдзелÑ\8cнÑ\96к $1 Ð· Ð¿Ñ\80аекÑ\82Ñ\83 {{SITENAME}} Ð·Ð°Ð¿Ñ\80аÑ\81Ñ\96Ñ\9e Ð½Ð°Ð¿Ð°Ð¼Ñ\96н Ð¿Ñ\80а Ð²Ð°Ñ\88\nÑ\83лÑ\96ковÑ\8b Ð·Ð°Ð¿Ñ\96Ñ\81 Ñ\83 Ð¿Ñ\80аекÑ\86е {{SITENAME}}\n($4).\n{{PLURAL:$3|Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\8b Ñ\9eлÑ\96ковÑ\8b Ð·Ð°Ð¿Ñ\96Ñ\81 Ð·Ð²Ñ\8fзанÑ\8b | Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\8bÑ\8f Ñ\83лÑ\96ковÑ\8bÑ\8f Ð·Ð°Ð¿Ñ\96Ñ\81Ñ\8b Ð·Ð²Ñ\8fзанÑ\8b}} Ð· Ð³Ñ\8dÑ\82Ñ\8bм Ð°Ð´Ñ\80аÑ\81ам Ñ\8dлекÑ\82Ñ\80оннай Ð¿Ð¾Ñ\88Ñ\82Ñ\8b:\n\n$2\n\n{{PLURAL:$3|Ð\93Ñ\8dÑ\82Ñ\8b Ñ\87аÑ\81овÑ\8b Ð¿Ð°Ñ\80олÑ\8c Ð±Ñ\83дзе|Ð\93Ñ\8dÑ\82Ñ\8bÑ\8f Ñ\87аÑ\81овÑ\8bÑ\8f Ð¿Ð°Ñ\80олÑ\96 Ð±Ñ\83дÑ\83Ñ\86Ñ\8c}} Ð´Ð·ÐµÐ¹Ð½Ñ\96Ñ\87аÑ\86Ñ\8c {{PLURAL:$5|$5 Ð´Ð·ÐµÐ½Ñ\8c |$5 Ð´Ð½Ñ\8f |$5 Ð´Ð·Ñ\91н}}.\nÐ\92Ñ\8b Ð¿Ð°Ð²Ñ\96ннÑ\8b Ñ\9eвайÑ\81Ñ\86Ñ\96 Ñ\9e Ñ\81Ñ\96Ñ\81Ñ\82Ñ\8dмÑ\83 Ñ\96 Ð°Ð±Ñ\80аÑ\86Ñ\8c Ð½Ð¾Ð²Ñ\8b Ð¿Ð°Ñ\80олÑ\8c.\nÐ\9aалÑ\96 Ð²Ñ\8b Ð½Ðµ Ñ\80абÑ\96лÑ\96 Ð³Ñ\8dÑ\82ага Ð·Ð°Ð¿Ñ\8bÑ\82Ñ\83, Ñ\86Ñ\96 Ñ\9eÑ\81помнÑ\96лÑ\96 Ñ\81вой Ð·Ñ\8bÑ\85однÑ\8b Ð¿Ð°Ñ\80олÑ\8c\nÑ\96 Ð½Ðµ Ð¶Ð°Ð´Ð°ÐµÑ\86е Ñ\8fго Ð¼Ñ\8fнÑ\8fÑ\86Ñ\8c, Ð²Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ð¿Ñ\80аÑ\96гнаÑ\80аваÑ\86Ñ\8c Ð³Ñ\8dÑ\82ае Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½Ð½Ðµ\nÑ\96 Ð¿Ñ\80аÑ\86Ñ\8fгнÑ\83ць выкарыстоўваць свой стары пароль.",
+       "passwordreset-emailtext-ip": "Нехта (магчыма вы, з IP-адрасу $1) запытаў скід  вашага пароля ў праекце {{SITENAME}} ($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя ўліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|адзін дзень|$5 дні|$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і абраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягнуць выкарыстоўваць свой стары пароль.",
+       "passwordreset-emailtext-user": "УдзелÑ\8cнÑ\96к $1 Ð· Ð¿Ñ\80аекÑ\82Ñ\83 {{SITENAME}} Ð·Ð°Ð¿Ñ\8bÑ\82аÑ\9e Ñ\81кÑ\96д Ð²Ð°Ñ\88ага Ð¿Ð°Ñ\80олÑ\8f Ñ\9e Ð¿Ñ\80аекÑ\86е {{SITENAME}}\n($4).\n{{PLURAL:$3|Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\8b Ñ\9eлÑ\96ковÑ\8b Ð·Ð°Ð¿Ñ\96Ñ\81 Ð·Ð²Ñ\8fзанÑ\8b\9dаÑ\81Ñ\82Ñ\83пнÑ\8bÑ\8f Ñ\83лÑ\96ковÑ\8bÑ\8f Ð·Ð°Ð¿Ñ\96Ñ\81Ñ\8b Ð·Ð²Ñ\8fзанÑ\8b}} Ð· Ð³Ñ\8dÑ\82Ñ\8bм Ð°Ð´Ñ\80аÑ\81ам Ñ\8dлекÑ\82Ñ\80оннай Ð¿Ð¾Ñ\88Ñ\82Ñ\8b:\n\n$2\n\n{{PLURAL:$3|Ð\93Ñ\8dÑ\82Ñ\8b Ñ\87аÑ\81овÑ\8b Ð¿Ð°Ñ\80олÑ\8c Ð±Ñ\83дзе|Ð\93Ñ\8dÑ\82Ñ\8bÑ\8f Ñ\87аÑ\81овÑ\8bÑ\8f Ð¿Ð°Ñ\80олÑ\96 Ð±Ñ\83дÑ\83Ñ\86Ñ\8c}} Ð´Ð·ÐµÐ¹Ð½Ñ\96Ñ\87аÑ\86Ñ\8c {{PLURAL:$5|$5 Ð´Ð·ÐµÐ½Ñ\8c |$5 Ð´Ð½Ñ\96 |$5 Ð´Ð·Ñ\91н}}.\nÐ\92Ñ\8b Ð¿Ð°Ð²Ñ\96ннÑ\8b Ð·Ð°Ñ\80аз Ñ\83вайÑ\81Ñ\86Ñ\96 Ñ\9e Ñ\81Ñ\96Ñ\81Ñ\82Ñ\8dмÑ\83 Ñ\96 Ð°Ð±Ñ\80аÑ\86Ñ\8c Ð½Ð¾Ð²Ñ\8b Ð¿Ð°Ñ\80олÑ\8c. Ð\9aалÑ\96 Ð²Ñ\8b Ð½Ðµ Ñ\80абÑ\96лÑ\96 Ð³Ñ\8dÑ\82ага Ð·Ð°Ð¿Ñ\8bÑ\82Ñ\83, Ñ\86Ñ\96 Ñ\9eÑ\81помнÑ\96лÑ\96 Ñ\81вой Ð·Ñ\8bÑ\85однÑ\8b Ð¿Ð°Ñ\80олÑ\8c Ñ\96 Ð½Ðµ Ð¶Ð°Ð´Ð°ÐµÑ\86е Ñ\8fго Ð¼Ñ\8fнÑ\8fÑ\86Ñ\8c, Ð²Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ð¿Ñ\80аÑ\96гнаÑ\80аваÑ\86Ñ\8c Ð³Ñ\8dÑ\82ае Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½Ð½Ðµ Ñ\96 Ð¿Ñ\80аÑ\86Ñ\8fгваць выкарыстоўваць свой стары пароль.",
        "passwordreset-emailelement": "Імя ўдзельніка: $1\nЧасовы пароль: $2",
-       "passwordreset-emailsent": "Ð\9fа Ñ\8dлекÑ\82Ñ\80оннай Ð¿Ð¾Ñ\88Ñ\86е Ð±Ñ\8bÑ\9e Ð°Ð´Ð¿Ñ\80аÑ\9eленÑ\8b Ð½Ð°Ð¿Ð°Ð¼Ñ\96н.",
-       "passwordreset-emailsent-capture": "Ніжэй прыведзены адпраўлены ліст-напамін.",
-       "passwordreset-emailerror-capture": "Ніжэй прыведзены створаны ліст-напамін, яго адпраўка не атрымалася па прычыне: $1",
+       "passwordreset-emailsent": "Ð\9fа Ñ\8dлекÑ\82Ñ\80оннай Ð¿Ð¾Ñ\88Ñ\86е Ð±Ñ\8bÑ\9e Ð°Ð´Ð¿Ñ\80аÑ\9eленÑ\8b Ð»Ñ\96Ñ\81Ñ\82 Ð¿Ñ\80а Ñ\81кÑ\96д Ð¿Ð°Ñ\80олÑ\8f.",
+       "passwordreset-emailsent-capture": "Ніжэй прыведзены адпраўлены ліст пра скід пароля.",
+       "passwordreset-emailerror-capture": "Ніжэй прыведзены створаны ліст пра скід пароля, яго адпраўка не атрымалася па прычыне: $1",
        "changeemail": "Змяніць адрас электроннай пошты",
        "changeemail-header": "Змена электроннага адрасу акаўнта",
        "changeemail-text": "Запоўніце гэтую форму, каб змяніць свой адрас электроннай пошты. Вам трэба будзе ўвесці пароль, каб пацвердзіць змяненне.",
        "changeemail-oldemail": "Бягучы адрас электроннай пошты:",
        "changeemail-newemail": "Новы адрас электроннай пошты:",
        "changeemail-none": "(няма)",
+       "changeemail-password": "Ваш {{SITENAME}} пароль:",
        "changeemail-submit": "Змяніць адрас электроннай пошты:",
        "changeemail-cancel": "Адмена",
+       "changeemail-throttled": "Надта штмат спробаў увайсці пад гэтым рахункам. Пачакайце $1 перад тым, як спрабаваць ізноў.",
        "bold_sample": "Цёмны тэкст",
        "bold_tip": "Цёмны тэкст",
        "italic_sample": "Курсіўны тэкст",
        "loginreqtitle": "Патрабуецца ўваход у сістэму",
        "loginreqlink": "ўвайсці",
        "loginreqpagetext": "Вы павінны $1, каб праглядаць іншыя старонкі.",
-       "accmailtitle": "Быў адасланы пароль.",
-       "accmailtext": "Ð\9dа Ð°Ð´Ñ\80аÑ\81 $2 Ð±Ñ\8bÑ\9e Ð°Ð´Ð°Ñ\81ланÑ\8b Ð·Ð³ÐµÐ½ÐµÑ\80аванÑ\8b Ð¿Ð°Ñ\80олÑ\8c Ð´Ð»Ñ\8f [[User talk:$1|$1]].\n\nÐ\9fаÑ\80олÑ\8c Ð½Ð° Ð³Ñ\8dÑ\82Ñ\8b Ð½Ð¾Ð²Ñ\8b Ñ\80аÑ\85Ñ\83нак Ð¼Ð¾Ð¶Ð° Ð±Ñ\8bÑ\86Ñ\8c Ð·Ð¼ÐµÐ½ÐµÐ½Ñ\8b Ð½Ð° ''[[Special:ChangePassword|адмÑ\8bÑ\81ловай Ñ\81Ñ\82аÑ\80онÑ\86Ñ\8b]]'' пасля ўваходу ў сістэму.",
+       "accmailtitle": "Быў адасланы пароль",
+       "accmailtext": "Ð\9dа Ð°Ð´Ñ\80аÑ\81 $2 Ð±Ñ\8bÑ\9e Ð´Ð°Ñ\81ланÑ\8b Ð·Ð³ÐµÐ½ÐµÑ\80аванÑ\8b Ð¿Ð°Ñ\80олÑ\8c Ð´Ð»Ñ\8f [[User talk:$1|$1]]. Ð\81н Ð¼Ð¾Ð¶Ð° Ð±Ñ\8bÑ\86Ñ\8c Ð·Ð¼ÐµÐ½ÐµÐ½Ñ\8b Ð½Ð° <em>[[Special:ChangePassword|Ñ\81Ñ\82аÑ\80онÑ\86Ñ\8b Ð·Ð¼ÐµÐ½Ñ\8b Ð¿Ð°Ñ\80олÑ\8f]]</em> пасля ўваходу ў сістэму.",
        "newarticle": "(Новы)",
        "newarticletext": "Вы перайшлі да старонкі, якой яшчэ няма, і таму трапілі сюды. Каб пачаць новую старонку, пішыце яе тэкст у ніжэйпаказаным акне рэдагавання (падрабязнасці бач у [$1 даведцы]). Калі вы тут выпадкова, проста націсніце \"назад\" у браўзеры.",
        "anontalkpagetext": "----''Гэта старонка размовы з ананімным удзельнікам, які або не мае свайго рахунку, або ім не карыстаўся. Таму дзеля яго ці яе ідэнтыфікацыі мы мусім выкарыстаць лічбавы Адрас IP. Такі адрас IP могуць дзяліць між сабою некалькі асоб. Калі вы ананімны ўдзельнік, і лічыце, што атрымліваеце няслушныя заўвагі,[[Special:UserLogin/signup|стварыце рахунак]] або [[Special:UserLogin|акажыцеся]], каб вас больш не блыталі з іншымі ананімнымі ўдзельнікамі.''",
        "userpage-userdoesnotexist": "Рахунак удзельніка \"<nowiki>$1</nowiki>\" не зарэгістраваны. Праверце, ці вы жадаеце стварыць або паправіць гэтую старонку.",
        "userpage-userdoesnotexist-view": "Уліковы запіс удзельніка \" $1 \"не зарэгістраваны.",
        "blocked-notice-logextract": "Гэты карыстальнік у дадзены момант заблакаваны. \n Апошні запіс журнала блакіровак прыводзіцца ніжэй для даведкі:",
-       "clearyourcache": "'''Заўвага:''' Пасля замацоўвання, вам можа спатрэбіцца ачыстка кэшу браўзера, каб убачыць унесеныя змяненні. \n*'''Firefox / Safari:''' націсніце '''Reload''', утрымліваючы ''Shift'', або націсніце ''Ctrl-F5'' ці ''Ctrl-R'' (''Cmd-R'' на Макінтошах)\n* '''Konqueror:''': націсніце ''Reload'' або ''F5''\n* '''Opera''': увайдзіце ў настройкі карыстальніка (меню ''Tools'', падпункт ''Preferences''), там ачысціце кэш; * '''Internet Explorer:''' націсніце ''Refresh'', утрымліваючы ''Ctrl'', або націсніце ''Ctrl-F5''\n* '''Google Chrome:''' Націсніце ''Ctrl-Shift-R'' (''⌘-Shift-R'' на Mac)",
+       "clearyourcache": "<strong>Заўвага:</strong> Пасля замацоўвання, вам можа спатрэбіцца ачыстка кэшу браўзера, каб убачыць унесеныя змяненні. \n*<strong>Firefox / Safari:</strong> націсніце <em>Reload</em>, утрымліваючы <em>Shift</em>, або націсніце <em>Ctrl-F5</em> ці <em>Ctrl-R</em> (<em>⌘-R</em> на Макінтошах)\n* <strong>Google Chrome</strong>: Націсніце <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> на Mac)\n* <strong>Internet Explorer</strong>: націсніце <em>Refresh</em>, утрымліваючы <em>Ctrl</em>, або націсніце <em>Ctrl-F5</em>\n* <strong>Opera</strong>: увайдзіце ў настройкі карыстальніка (меню <em>Tools</em>, падпункт <em>Preferences</em>), там ачысціце кэш;",
        "usercssyoucanpreview": "'''Парада:''' Карыстайцеся кнопкай \"''{{int:showpreview}}''\" для выпрабоўвання новага коду CSS ''перад тым'', як яго запісваць.",
        "userjsyoucanpreview": "'''Парада:''' Карыстайцеся кнопкай \"''{{int:showpreview}}''\" для выпрабоўвання новага коду JS ''перад тым'', як яго запісваць.",
        "usercsspreview": "'''Памятайце, што гэта толькі папярэдні паказ вашага ўласнага CSS. Праўкі яшчэ не замацаваныя!'''",
        "sitecsspreview": "'''Памятайце, што гэта толькі папярэдні паказ вашага CSS.'''\n'''Праўкі яшчэ не замацаваныя!'''",
        "sitejspreview": "'''Памятайце, што гэта толькі папярэдні паказ вашага JavaScript.'''\n'''Праўкі яшчэ не замацаваныя!'''",
        "userinvalidcssjstitle": "'''Увага:''' Няма вокладкі з назвай \"$1\". Памятайце, што свае старонкі .css і .js называюцца толькі малымі літарамі, такім чынам, напр., {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
-       "updated": "(абноўлена)",
-       "note": "'''Заўвага:'''",
-       "previewnote": "'''Памятайце, гэта папярэдні паказ; праўкі яшчэ не замацаваныя!'''",
+       "updated": "(Ð\90бноўлена)",
+       "note": "<strong>Заўвага:</strong>",
+       "previewnote": "<strong>Памятайце, гэта толькі папярэдні паказ.</strong> Праўкі яшчэ не замацаваныя!",
        "continue-editing": "Працягнуць рэдагаванне",
        "previewconflict": "Гэта папярэдні паказ магчымага выніку замацоўвання актуальнага стану крынічнага тэксту ў верхнім тэкставым полі.",
        "session_fail_preview": "'''Не ўдалося апрацаваць вашую праўку, таму што сервер згубіў звесткі аб вашым сеансе.\nПаспрабуйце, калі ласка, ізноў. Калі і тады не атрымаецца, паспрабуйце [[Special:UserLogout|выйсці з сістэмы]] і зайсці ізноў.'''",
        "session_fail_preview_html": "'''Не ўдалося апрацаваць вашую праўку з-за таго, што згубіліся даныя аб сеансе.'''\n\n''Перадпаказ не зроблены, бо на пляцоўцы {{SITENAME}} дазволены сыры код HTML, што робіць магчымымі атакі праз Яваскрыпт.''\n\n'''Калі гэта нармальная спроба праўкі, паспрабуйце паўтарыць запісванне. Калі і гэта не дапаможа, паспрабуйце [[Special:UserLogout|выйсці з сістэмы]] і ўвайсці ізноў.'''",
        "token_suffix_mismatch": "'''Ваша праўка была адхілена, каб пазбегнуць сапсавання тэксту старонкі, таму што ваш браўзер папсаваў знакі прыпынку ў квітку праўкі.\nМагчыма, прычына ў выкарыстанні вамі ананімнага проксі-сервера, праграмы якога працуюць некарэктна.'''",
        "edit_form_incomplete": "'''Некаторыя часткі формы рэдагавання не дасягнулі сервера. Упэўніцеся, што Вашыя рэдагаванні не пашкоджаныя і паспрабуйце зноў.'''",
-       "editing": "Правім: $1",
+       "editing": "Правім $1",
        "creating": "Стварэнне старонкі «$1»",
        "editingsection": "Правім $1 (раздзел)",
        "editingcomment": "Правім $1 (новы раздзел)",
        "template-semiprotected": "(часткова ахоўвацца)",
        "hiddencategories": "Старонка належыць да {{PLURAL:$1|1 схаванай катэгорыі|$1 схаваных катэгорый}}:",
        "nocreatetext": "На пляцоўцы {{SITENAME}} магчымасці стварэння новых старонак абмежаваныя.\nВы можаце папрацаваць з існуючай старонкай, або [[Special:UserLogin|увайсці ў сістэму, або завесці сабе рахунак]].",
-       "nocreate-loggedin": "Ð\92ам Ð½Ðµ Ð´Ð°Ð·Ð²Ð¾Ð»ÐµÐ½Ð° Ñ\81Ñ\82ваÑ\80аÑ\86Ñ\8c Ð½Ð¾Ð²Ñ\8bÑ\85 Ñ\81Ñ\82аÑ\80онак.",
-       "sectioneditnotsupported-title": "РÑ\8dдагаванне раздзелу не падтрымліваецца",
-       "sectioneditnotsupported-text": "РÑ\8dдагаванне Ñ\81екÑ\86Ñ\8bÑ\96 не падтрымліваецца на гэтай старонцы.",
-       "permissionserrors": "Памылкі дазволаў",
+       "nocreate-loggedin": "Ð\92ам Ð½Ðµ Ð´Ð°Ð·Ð²Ð¾Ð»ÐµÐ½Ð° Ñ\81Ñ\82ваÑ\80аÑ\86Ñ\8c Ð½Ð¾Ð²Ñ\8bÑ\8f Ñ\81Ñ\82аÑ\80онкÑ\96.",
+       "sectioneditnotsupported-title": "Ð\9fÑ\80аÑ\9eка раздзелу не падтрымліваецца",
+       "sectioneditnotsupported-text": "Ð\9fÑ\80аÑ\9eка Ñ\80аздзелÑ\83 не падтрымліваецца на гэтай старонцы.",
+       "permissionserrors": "Памылка доступу",
        "permissionserrorstext": "Вам не дазволена гэтага рабіць, з наступн{{PLURAL:$1|ай прычыны|ых прычын}}:",
        "permissionserrorstext-withaction": "Вам не дазволена $2, з-за наступ{{PLURAL:$1|най прычыны|ных прычын}}:",
-       "recreate-moveddeleted-warn": "'''Увага: Вы аднаўляеце старонку, якая раней была сцёрта.'''\n\nТрэба падумаць, ці варта далей працаваць з гэтай старонкай.\nВось журнал сціранняў і пераносаў для гэтай старонкі:",
+       "recreate-moveddeleted-warn": "<strong>Увага: Вы аднаўляеце старонку, якая раней была сцёрта.</strong>\n\nТрэба падумаць, ці варта далей працаваць з гэтай старонкай.\nВось журнал сціранняў і пераносаў для гэтай старонкі:",
        "moveddeleted-notice": "Гэтая старонка была сцёртая.\nНіжэй паказаны журнал сціранняў і пераносаў для гэтай старонкі.",
        "log-fulllog": "Паглядзець поўны лог",
        "edit-hook-aborted": "Праўка спынена хукам (hook).\nТлумачэнняў не было.",
        "edit-gone-missing": "Не ўдалося абнавіць старонку.\nЗдаецца, што яна была сцёртая.",
        "edit-conflict": "Канфлікт правак.",
        "edit-no-change": "Вашая праўка была праігнараваная, таму што не мяняўся тэкст.",
-       "postedit-confirmation-saved": "Вашая праўка была захаваная.",
+       "postedit-confirmation-created": "Створана старонка.",
+       "postedit-confirmation-restored": "Старонка адноўлена.",
+       "postedit-confirmation-saved": "Ваша праўка запісана.",
        "edit-already-exists": "Не ўдалося стварыць новую старонку.\nТакая ўжо існуе.",
+       "defaultmessagetext": "Прадвызначаны тэкст",
+       "content-not-allowed-here": "\"$1\" не дазволены на старонцы [[$2]]",
        "editwarning-warning": "Пераход на іншую старонку можа прывесці да страты правак, зробленых Вамі. \nКалі Вы ўвайшлі ў сістэму, Вы можаце адключыць гэта папярэджанне ў раздзеле \"{{int:prefs-editing}}\" Вашых настроек.",
+       "editpage-notsupportedcontentformat-title": "Фармат змесціва не падтрымліваецца",
        "content-model-wikitext": "вікі-тэкст",
        "content-model-text": "звычайны тэкст",
        "content-model-javascript": "JavaScript",
        "undo-failure": "Немагчыма адкаціць праўку, таму што перашкаджаюць праўкі, што былі перад ёй.",
        "undo-norev": "Не ўдалося адкаціць праўку, таму што яна не існуе або была сцёрта.",
        "undo-summary": "Адкат версіі $1 аўтарства [[Special:Contributions/$2|$2]] ([[User talk:$2|размова]])",
+       "undo-summary-username-hidden": "Адкат версіі $1 схаванага ўдзельніка",
        "cantcreateaccounttitle": "Немагчыма стварыць рахунак",
        "cantcreateaccount-text": "Стварэнне рахункаў было забаронена для гэтага адрасу IP ('''$1''').\n\nЗабарона зроблена ўдзельнікам [[User:$3|$3]], з такім тлумачэннем: ''$2''",
        "viewpagelogs": "Паказаць журналы для гэтай старонкі",
        "currentrev": "Актуальная версія",
        "currentrev-asof": "Актуальная версія на $1",
        "revisionasof": "Версія ад $1",
-       "revision-info": "Версія ад $1, аўтар $2",
+       "revision-info": "Версія ад $1, аўтар {{GENDER:$6|$2}}$7",
        "previousrevision": "← Папярэдн. версія",
        "nextrevision": "Навейшая версія →",
        "currentrevisionlink": "Актуальная версія",
        "histlegend": "Выбар розніцы: адзначце радыё-боксы версій, якія трэба параўнаць і націсніце enter або кнопку, што ўнізе.<br /> Тлумачэнне: (з актуальн.) = розніца з актуальнай версіяй, (з папярэд.) = розніца з папярэдняй версіяй, д = дробная праўка.",
        "history-fieldset-title": "Прагляд гісторыі",
        "history-show-deleted": "Толькі выдаленыя",
-       "histfirst": "Самае Ñ\81Ñ\82аÑ\80ое",
-       "histlast": "Самае Ð½Ð¾Ð²Ð°Ðµ",
-       "historysize": "({{PLURAL:$1|1 байт|$1 байтаў}})",
+       "histfirst": "найÑ\81Ñ\82аÑ\80Ñ\8dйÑ\88аÑ\8f",
+       "histlast": "найноÑ\9eÑ\88аÑ\8f",
+       "historysize": "({{PLURAL:$1|1 байт|$1 байты|$1 байтаў}})",
        "historyempty": "(пуста)",
        "history-feed-title": "Гісторыя версій",
        "history-feed-description": "Гісторыя версій гэтай старонкі",
        "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": "Ð\9fаказаць",
+       "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": "Так",
+       "revdelete-selected-text": "{{PLURAL:$1|Выбраная версія|Выбраныя версіі}} [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Выбраная версія файла|Выбраныя версіі файла}} [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Выбраны запіс|Выбраныя запісы}} журналу:",
+       "revdelete-text-text": "Сцёртыя версіі будуць па-ранейшаму паказвацца ў гісторыі старонкі, але частка іх зместу будзе недаступна для грамадскасці.",
+       "revdelete-text-file": "Сцёртыя версіі файла будуць па-ранейшаму паказвацца ў гісторыі файла, але частка іх зместу будзе недаступна для грамадскасці.",
+       "logdelete-text": "Сцёртыя запісы журнала будуць па-ранейшаму паказвацца ў журналах, але частка іх зместу будзе недаступна для грамадскасці.",
+       "revdelete-text-others": "Іншыя адміністратары пляцоўкі {{SITENAME}} будуць па-ранейшаму мець доступ да схаванага зместу і змогуць аднавіць яго праз гэты самы інтэрфейс, калі не ўстанавіць дадатковыя абмежаванні.",
        "revdelete-confirm": "Пацвердзіце, што вы жадаеце гэта зрабіць, што вы разумееце наступствы, і што вы робіце гэта ў адпаведнасці з [[{{MediaWiki:Policy-url}}|арганізацыйнымі правіламі]].",
-       "revdelete-suppress-text": "Заглушэнне належыць ужываць '''выключна''' ў наступных выпадках:\n* Недапушчальная асабістая інфармацыя\n*: ''хатнія адрасы і тэлефоны, нумары страхавання і г.д.''",
+       "revdelete-suppress-text": "Заглушэнне належыць ужываць <strong>выключна</strong> ў наступных выпадках:\n* патэнцыяльна паклёпніцкія звесткі\n* недапушчальная асабістая інфармацыя\n*: <em>хатнія адрасы і тэлефоны, нумары страхавання і г.д.</em>",
        "revdelete-legend": "Настроіць абмежаванні бачнасці",
-       "revdelete-hide-text": "Ð\9dе Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\86Ñ\8c Ñ\82экст версіі",
+       "revdelete-hide-text": "Тэкст версіі",
        "revdelete-hide-image": "Схаваць змест файла",
        "revdelete-hide-name": "Не паказваць дзеяння і мэты",
-       "revdelete-hide-comment": "Ð\9dе Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\86Ñ\8c Ñ\82лÑ\83маÑ\87Ñ\8dннÑ\8f праўкі",
-       "revdelete-hide-user": "Ð\9dе Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\86Ñ\8c Ñ\9eдзелÑ\8cнага Ñ\96мÑ\8f Ð°Ñ\9eÑ\82аÑ\80а Ð°Ð±Ð¾ Ñ\8fго адрас IP",
+       "revdelete-hide-comment": "ТлÑ\83маÑ\87Ñ\8dнне праўкі",
+       "revdelete-hide-user": "Ð\86мÑ\8f Ñ\9eдзелÑ\8cнÑ\96ка /адрас IP",
        "revdelete-hide-restricted": "Таксама абмяжоўваць такім чынам адміністратараў",
        "revdelete-radio-same": "(не мяняць)",
-       "revdelete-radio-set": "Так",
-       "revdelete-radio-unset": "Ð\9dе",
+       "revdelete-radio-set": "СÑ\85аванÑ\8b",
+       "revdelete-radio-unset": "Ð\91аÑ\87нÑ\8b",
        "revdelete-suppress": "Прыпыняць* звесткі ад адміністратараў таксама",
        "revdelete-unsuppress": "Зняць абмежаванні на адноўленыя версіі",
        "revdelete-log": "Прычына:",
        "revdelete-submit": "Прымяніць да азначан{{PLURAL:$1|ай ерсіі|ых версій}}",
-       "revdelete-success": "'''Паспяхова абноўлена бачнасць версіі.'''",
+       "revdelete-success": "<strong>Паспяхова абноўлена бачнасць версіі.</strong>",
        "revdelete-failure": "'''Не ўдалося абнавіць бачнасць версіі:'''\n$1",
        "logdelete-success": "'''Бачнасць падзеі настаўленая паспяхова.'''",
        "logdelete-failure": "'''Бачнасць журнала не ўсталявана:'''\n$1",
-       "revdel-restore": "Ð\9fамяняць бачнасць",
+       "revdel-restore": "памяняць бачнасць",
        "pagehist": "Гісторыя старонкі",
        "deletedhist": "Сцёртая гісторыя",
        "revdelete-hide-current": "Памылка пры скрыванні складніка з датай $2, $1: таму што гэта актуальная версія, \nа яе немагчыма скрываць.",
        "revdelete-no-change": "'''Увага:''' для складніка з датай $2, $1 патрэбная бачнасць ужо настаўленая.",
        "revdelete-concurrent-change": "Памылка пры змяненні складніка з датай $2, $1: стан складніка, здаецца, быў зменены некім іншым, пакуль вы спрабавалі змяніць складнік.\nПраверце журналы.",
        "revdelete-only-restricted": "Памылка пры скрыванні складніка з датай $2, $1: вы не можаце скрываць складнікі ад адміністратараў, не выбраўшы яшчэ хоць адну з іншых магчымасцяў.",
-       "revdelete-reason-dropdown": "* Найбольш распаўсюджаныя прычыны выдалення \n ** Парушэнне аўтарскіх правоў \n ** Неадпаведная асабістая інфармацыя \n ** Патэнцыйна ілжывая інфармацыя",
+       "revdelete-reason-dropdown": "* Найбольш распаўсюджаныя прычыны выдалення\n** Парушэнне аўтарскіх правоў\n** Неадпаведны каментарый ці асабістая інфармацыя\n** Недапушчальнае імя ўдзельніка\n** Патэнцыйна ілжывая інфармацыя",
        "revdelete-otherreason": "Іншая/дадатковая прычына:",
        "revdelete-reasonotherlist": "Іншая прычына",
        "revdelete-edit-reasonlist": "Правіць прычыны сцірання",
-       "revdelete-offender": "Аўтар праўкі",
+       "revdelete-offender": "Аўтар праўкі:",
        "suppressionlog": "Журнал падаўленняў",
-       "suppressionlogtext": "Ніжэй пералічаныя сціранні і блокі, якія датычаць зместу, скрытага ад адміністратараў.\nБач актуальныя забароны і блокі ў [[Special:BlockList|IP block list]].",
+       "suppressionlogtext": "Ніжэй пералічаныя сціранні і блокі, якія датычаць зместу, скрытага ад адміністратараў.\nБач актуальныя забароны і блокі ў [[Special:BlockList|спісе блакавання]].",
        "mergehistory": "Аб'яднаць гісторыі старонак",
        "mergehistory-header": "Тут можна аб'ядноўваць версіі з гісторыі адной старонкі ў іншую, навейшую старонку.\nТрэба спачатку ўпэўніцца, што такое дзеянне не парушыць гістарычнай паслядоўнасці версій.",
        "mergehistory-box": "Аб'яднаць версіі дзвюх старонак:",
        "revertmerge": "Адкаціць аб'яднанне",
        "mergelogpagetext": "Ніжэй паказаны пералік самых нядаўніх аб'яднанняў гісторый старонак.",
        "history-title": "Гісторыя версій \"$1\"",
+       "difference-title": "Розніца паміж версіямі \"$1\"",
+       "difference-title-multipage": "Розніца між старонкамі \"$1\" і \"$2\"",
        "difference-multipage": "(Розніца паміж старонкамі)",
        "lineno": "Радок $1:",
        "compareselectedversions": "Параўнаць азначаныя версіі",
        "showhideselectedversions": "Паказаць/схаваць выбраныя версіі",
        "editundo": "адкат",
+       "diff-empty": "(Няма розніцы)",
+       "diff-multi-sameuser": "(Не паказана{{PLURAL:$1|адна прамежкавая версія|$1 прамежкавыя версіі|$1 прамежкавых версій}} таго ж удзельніка)",
+       "diff-multi-otherusers": "(Не паказана {{PLURAL:$1|адна прамежкавая версія|$1 прамежкавыя версіі|$1 прамежкавых версій}} {{PLURAL:$2|яшчэ аднаго ўдзельніка|$2 удзельнікаў}})",
        "diff-multi-manyusers": "({{PLURAL:$1|не паказана $1 прамежкавая версія|не паказаны $1 прамежкавыя версіі|не паказаны $1 прамежкавых версій}}, зробленыя больш чым {{PLURAL:$2|$1 удзельнікам|$2 удзельнікамі}})",
        "searchresults": "Вынікі пошуку",
        "searchresults-title": "Вынікі пошуку «$1»",
        "shown-title": "Паказваць $1 {{PLURAL:$1|вынік|вынікі(аў)}} на старонку",
        "viewprevnext": "Гл. ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''На вікі ёсць старонка \"[[:$1]]\"'''",
-       "searchmenu-new": "'''Стварыць на гэтай вікі старонку \"[[:$1]]\"'''",
+       "searchmenu-new": "<strong>Стварыць на гэтай вікі старонку \"[[:$1]]\"</strong> {{PLURAL:$2|0=|Гл. таксама вынікі пошуку.|Гл. таксама вынік пошуку.}}",
        "searchprofile-articles": "Артыкулы",
-       "searchprofile-project": "Старонкі даведкі і праекта",
        "searchprofile-images": "Мультымедыя",
        "searchprofile-everything": "Усё",
        "searchprofile-advanced": "Складана",
        "searchprofile-articles-tooltip": "Шукаць у $1",
-       "searchprofile-project-tooltip": "Шукаць у $1",
        "searchprofile-images-tooltip": "Шукаць файлы",
        "searchprofile-everything-tooltip": "Шукаць паўсюль (таксама ў размовах)",
        "searchprofile-advanced-tooltip": "Шукаць у дадатковых прасторах назваў",
-       "search-result-size": "$1 ({{PLURAL:$2|1 слова|$2 словаў}})",
+       "search-result-size": "$1 ({{PLURAL:$2|1 слова|$2 словы|$2 словаў}})",
        "search-result-category-size": "{{PLURAL:$1|$1 элемент|$1 элемента|$1 элементаў}} ({{PLURAL:$2|$2 падкатэгорыя|$2 падкатэгорыі|$2 падкатэгорый}}, {{PLURAL:$3|$3 файл|$3 файла|$3 файлаў}})",
        "search-result-score": "Адпаведнасць: $1%",
        "search-redirect": "(перасылка $1)",
        "search-section": "(падраздзел $1)",
+       "search-file-match": "(адпавядае змесціву файла)",
        "search-suggest": "Ці хацелі вы сказаць: $1",
        "search-interwiki-caption": "Сумежныя праекты",
-       "search-interwiki-default": "вынікі з $1:",
+       "search-interwiki-default": "Ð\92ынікі з $1:",
        "search-interwiki-more": "(яшчэ)",
        "search-relatedarticle": "Дачыняюцца*",
-       "searcheverything-enable": "Пошук ва ўсіх прасторах назваў",
        "searchrelated": "маюць дачыненне",
        "searchall": "усе",
        "showingresults": "Ніжэй паказаны да {{PLURAL:$1|'''$1''' выніку|'''$1''' вынікаў}}, пачынаючы з нумару '''$2'''.",
+       "showingresultsinrange": "Ніжэй паказаны да {{PLURAL:$1|<strong>1</strong> выніку|<strong>$1</strong> вынікаў}} у дыяпазоне ад #<strong>$2</strong> да #<strong>$3</strong>.",
        "showingresultsnum": "Ніжэй паказаны{{PLURAL:$3| '''1''' вынік|я '''$3''' вынікаў}}, пачынаючы з нумару #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Вынік '''$1''' из '''$3'''|Вынікі '''$1 — $2''' из '''$3'''}} для '''$4'''",
        "search-nonefound": "Нічога не было знойдзена.",
        "powersearch-togglelabel": "Праверце:",
        "powersearch-toggleall": "Усе",
        "powersearch-togglenone": "Няма",
+       "powersearch-remember": "Запомніць выбар для наступных пошукаў",
        "search-external": "Вонкавы пошук",
        "searchdisabled": "Функцыя пошуку {{SITENAME}} не працуе. Тымчасова можна шукаць з дапамогай Google. Заўважце, што тамтэйшыя індэксы зместу {{SITENAME}} могуць не быць актуальнымі.",
+       "search-error": "Памылка пошуку: $1",
        "preferences": "Настройкі",
        "mypreferences": "Настройкі",
        "prefs-edits": "Колькасць правак:",
+       "prefsnologintext2": "Трэба $1, каб мяняць свае настройкі.",
        "prefs-skin": "Вокладка",
-       "skin-preview": "перадпаказ",
+       "skin-preview": "Ð\9fерадпаказ",
        "datedefault": "Не вызначана",
        "prefs-labs": "Эксперыментальныя магчымасці",
+       "prefs-user-pages": "Старонкі ўдзельнікаў",
        "prefs-personal": "Удзельнік",
        "prefs-rc": "{{:{{ns:mediawiki}}:Recentchanges/be}}",
        "prefs-watchlist": "Спіс назірання",
        "prefs-watchlist-days": "За колькі дзён паказваць змяненні ў назіраным:",
-       "prefs-watchlist-days-max": "(найбольш $1 {{PLURAL:$1|дзень|дзён}})",
+       "prefs-watchlist-days-max": "(найболÑ\8cÑ\88 $1 {{PLURAL:$1|дзенÑ\8c|днÑ\96|дзÑ\91н}})",
        "prefs-watchlist-edits": "Колькасць правак для паказу ў разгорнутым выглядзе:",
        "prefs-watchlist-edits-max": "Максімум: 1000",
        "prefs-watchlist-token": "Сакрэтны ключ для RSS:",
        "prefs-email": "Эл.пошта",
        "prefs-rendering": "Від",
        "saveprefs": "Запісаць",
-       "restoreprefs": "Аднавіць усе прадвызначэнні",
+       "restoreprefs": "Аднавіць усе прадвызначэнні (ва ўсіх раздзелах)",
        "prefs-editing": "Праца",
        "rows": "Радкі:",
        "columns": "Калонкі:",
        "allowemail": "Атрымліваць эл.пошту ад іншых удзельнікаў",
        "prefs-searchoptions": "Магчымасці пошуку",
        "prefs-namespaces": "Прасторы назваў",
-       "defaultns": "Іначай шукаць у гэтых прасторах назваў:",
        "default": "прадвызначэнні",
        "prefs-files": "Файлы",
        "prefs-custom-css": "Уласны CSS",
        "prefs-reset-intro": "Тут можна вярнуць свае настройкі да прадвызначэнняў, прынятых на гэтай пляцоўцы.\nАдкаціць гэтае дзеянне нельга.",
        "prefs-emailconfirm-label": "Пацверджанне адрасу эл.пошты:",
        "youremail": "Эл.пошта *",
-       "username": "Імя ўдзельніка:",
+       "username": "Імя {{GENDER:$1|ўдзельніка|ўдзельніцы}}:",
        "prefs-memberingroups": "Уваходзіць у {{PLURAL:$1|групу|групы}}:",
        "prefs-registration": "Час рэгістрацыі:",
        "yourrealname": "Сапраўднае імя:",
        "prefs-dateformat": "Фармат даты",
        "prefs-timeoffset": "Часавы пояс",
        "prefs-advancedediting": "Агульныя настройкі",
+       "prefs-editor": "Рэдактар",
+       "prefs-preview": "Перадпаказ",
        "prefs-advancedrc": "Пашыраныя настройкі",
        "prefs-advancedrendering": "Пашыраныя настройкі",
        "prefs-advancedsearchoptions": "Пашыраныя настройкі",
        "prefs-advancedwatchlist": "Пашыраныя настройкі",
        "prefs-displayrc": "Паказ",
        "prefs-displaywatchlist": "Паказ",
+       "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Розніцы",
+       "prefs-help-prefershttps": "Гэта настройка пачне дзейнічаць па наступным уваходзе ў сістэму.",
+       "prefs-tabs-navigation-hint": "Падказка: Вы можаце карыстацца клавішамі са стрэлкамі ўлева і ўправа для навігацыі паміж карткамі ў спісе картак.",
        "email-address-validity-valid": "Адрас электроннай пошты з'яўляецца сапраўдным",
        "email-address-validity-invalid": "Увядзіце слушны адрас электроннай пошты",
        "userrights": "Распараджэнне правамі ўдзельніка",
        "userrights-no-interwiki": "Вам не дазволена мяняць дазволаў карыстальнікам на іншых Вікі-ах.",
        "userrights-nodatabase": "Не знойдзена тут, або не існуе база даных $1.",
        "userrights-nologin": "Належыць [[Special:UserLogin|увайсці ў сістэму]] на рахунак адміністратара, каб прызначаць дазволы ўдзельнікам.",
-       "userrights-notallowed": "Ð\97 Ð²Ð°Ñ\88ага Ñ\9eлÑ\96ковага Ð·Ð°Ð¿Ñ\96Ñ\81Ñ\83 Ð½Ðµ Ð´Ð°Ð·Ð²Ð¾Ð»ÐµÐ½Ð° Ð´Ð°Ð´Ð°Ð²Ð°Ñ\86Ñ\8c і выдаляць правы ўдзельнікаў.",
+       "userrights-notallowed": "Ð\92ам Ð½Ðµ Ð´Ð°Ð·Ð²Ð¾Ð»ÐµÐ½Ð° Ð´Ð°Ð´Ð°Ð²Ð°Ñ\86Ñ\8c Ñ\86і выдаляць правы ўдзельнікаў.",
        "userrights-changeable-col": "Групы, якія вам дазволена мяняць",
        "userrights-unchangeable-col": "Групы, якія вам не дазволена мяняць",
+       "userrights-conflict": "Канфлікт змянення ўдзельніцкіх дазволаў! Калі ласка, праверце і пацвердзіце змены.",
+       "userrights-removed-self": "Вы паспяхова выдалілі свае ўласныя правы. Такім чынам, Вы больш не зможаце атрымаць доступ да гэтай старонкі.",
        "group": "Група:",
        "group-user": "Удзельнікі",
        "group-autoconfirmed": "Аўта-пацверджаныя ўдзельнікі",
        "right-move": "Пераносіць старонкі",
        "right-move-subpages": "Пераносіць старонкі разам з пад-старонкамі",
        "right-move-rootuserpages": "Пераносіць каранёвыя старонкі ўдзельнікаў",
+       "right-move-categorypages": "Пераносіць старонкі катэгорый",
        "right-movefile": "Пераносіць файлы",
        "right-suppressredirect": "Не пакідаць перасылку са старой назвы пасля пераносу старонкі",
        "right-upload": "Укладваць файлы",
        "right-reupload-shared": "Перамагаць файлы з агульнага сховішча тутэйшымі файламі",
        "right-upload_by_url": "Укладваць файл з сеціўнага адрасу (URL)",
        "right-purge": "Чысціць кэш пляцоўкі для старонкі без пацверджання",
-       "right-autoconfirmed": "Ð\9fÑ\80авÑ\96Ñ\86Ñ\8c Ñ\81Ñ\82аÑ\80онкÑ\96 Ð·-пад Ñ\87аÑ\81Ñ\82ковай Ð°Ñ\85овÑ\8b",
+       "right-autoconfirmed": "Ð\9dе Ð¿Ð°Ð´Ð¿Ð°Ñ\80адкоÑ\9eваÑ\86Ñ\86а Ð°Ð±Ð¼ÐµÐ¶Ð°Ð²Ð°Ð½Ð½Ñ\8fм Ñ\85Ñ\83Ñ\82каÑ\81Ñ\86Ñ\96, Ð½Ð°ÐºÐ»Ð°Ð´Ð·ÐµÐ½Ñ\8bм Ð½Ð° IP",
        "right-bot": "Лічыцца аўтаматычным працэсам",
        "right-nominornewtalk": "Не паведамляць пра новыя паведамленні ў адказ на дробныя праўкі размоўных старонак",
        "right-apihighlimits": "Карыстацца вышэйшымі лімітамі ў API-зваротах",
        "right-writeapi": "Карыстацца праграмным інтэрфейсам запісу (write API)",
        "right-delete": "Сціраць старонкі",
        "right-bigdelete": "Сціраць старонкі з вялікімі гісторыямі",
+       "right-deletelogentry": "Сціраць і аднаўляць асобныя запісы журналаў",
        "right-deleterevision": "Сціраць і аднаўляць паасобныя версіі старонак",
        "right-deletedhistory": "Чытаць сцёртыя складнікі гісторыі без іх прывязанага тэксту",
        "right-deletedtext": "Адкрыць выдалены тэкст і ўсе змены паміж выдаленымі версіямі",
        "right-hideuser": "Забараняць імя ўдзельніка і рабіць яго нябачным",
        "right-ipblock-exempt": "Перамагаць забароны на IP, аўта- і дыяпазонныя забароны",
        "right-proxyunbannable": "Перамагаць аўтаматычныя забароны на проксі",
-       "right-unblockself": "Разблакаваць іх",
-       "right-protect": "Мяняць узроўні аховы і правіць старонкі, што пад аховай",
-       "right-editprotected": "Правіць старонкі, што пад аховай (але без каскаднай аховы)",
+       "right-unblockself": "Разблакаваць сябе",
+       "right-protect": "Мяняць узроўні аховы і правіць старонкі пад каскаднай аховай",
+       "right-editprotected": "Правіць старонкі пад аховай \"{{int:protect-level-sysop}}\"",
+       "right-editsemiprotected": "Правіць старонкі, што пад аховай \"{{int:protect-level-autoconfirmed}}\"",
        "right-editinterface": "Правіць карыстальніцкі інтэрфейс",
        "right-editusercssjs": "Правіць файлы CSS і JS іншых удзельнікаў",
        "right-editusercss": "Правіць файлы CSS іншых удзельнікаў",
        "right-edituserjs": "Правіць файлы JS іншых удзельнікаў",
+       "right-editmyusercss": "Правіць уласныя файлы CSS",
+       "right-editmyuserjs": "Правіць уласныя файлы JavaScript",
+       "right-viewmywatchlist": "Глядзець свой спіс назірання",
+       "right-editmywatchlist": "Правіць свой спіс назірання. Заўвага: некаторыя дзеянні будуць дадаваць старонкі нават без гэтага дазволу.",
+       "right-viewmyprivateinfo": "Глядзець свае асабістыя звесткі (напр., адрас эл.пошты, сапраўднае імя)",
+       "right-editmyprivateinfo": "Правіць свае асабістыя звесткі (напр., адрас эл.пошты, сапраўднае імя)",
+       "right-editmyoptions": "Змяняць свае настройкі",
        "right-rollback": "Паскорана адкочваць праўкі апошняга ўдзельніка, які правіў пэўную старонку",
        "right-markbotedits": "Меціць адкочаныя праўкі як праўкі робатаў",
        "right-noratelimit": "Не падпарадкоўвацца абмежаванням хуткасці",
        "action-createpage": "ствараць старонкі",
        "action-createtalk": "ствараць размоўныя старонкі",
        "action-createaccount": "ствараць гэты рахунак удзельніка",
+       "action-history": "глядзець гісторыю гэтай старонкі",
        "action-minoredit": "значыць гэтую праўку як дробную",
        "action-move": "пераносіць гэтую старонку",
        "action-move-subpages": "пераносіць гэтую старонку і яе пад-старонкі",
        "action-move-rootuserpages": "пераносіць каранёвыя старонкі ўдзельнікаў",
+       "action-move-categorypages": "пераносіць старонкі катэгорый",
        "action-movefile": "перанесці гэты файл",
        "action-upload": "укладваць гэты файл",
        "action-reupload": "запісваць паўзверх гэтага файла",
        "action-block": "блакаваць праўкі гэтага ўдзельніка",
        "action-protect": "мяняць узровень аховы гэтай старонкі",
        "action-rollback": "хутка адкаціць змены апошняга карыстальніка, які рэдагаваў старонку",
-       "action-import": "імпартаваць гэтую старонку з іншай вікі",
-       "action-importupload": "імпартаваць гэтую старонку з укладзенага файла",
+       "action-import": "імпартаваць старонкі з іншай вікі",
+       "action-importupload": "імпартаваць старонкі з укладзенага файла",
        "action-patrol": "значыць праўкі іншых як ухваленыя",
        "action-autopatrol": "атрымліваць знак ухваленасці на свае праўкі",
        "action-unwatchedpages": "бачыць спіс неназіраных старонак",
        "action-userrights-interwiki": "мяняць дазволы ўдзельнікаў на іншых вікі",
        "action-siteadmin": "зачыняць і адчыняць базу даных",
        "action-sendemail": "адпраўка электронных пісем",
+       "action-editmywatchlist": "правіць свой спіс назірання",
+       "action-viewmywatchlist": "глядзець свой спіс назірання",
+       "action-viewmyprivateinfo": "бачыць свае асабістыя звесткі",
+       "action-editmyprivateinfo": "правіць свае асабістыя звесткі",
        "nchanges": "$1 {{PLURAL:$1|змена|змены|змен}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|з часу апошняга наведвання}}",
+       "enhancedrc-history": "гісторыя",
        "recentchanges": "Апошнія змены",
        "recentchanges-legend": "Магчымасці паказу",
        "recentchanges-summary": "Гэта апошнія змены на пляцоўцы {{SITENAME}}.",
+       "recentchanges-noresult": "Няма зменаў за дадзены перыяд, якія адпавядаюць гэтым крытэрыям.",
        "recentchanges-feed-description": "Сачыць за найбольш актуальнымі змяненнямі ў віксе праз гэты струмень навін.",
        "recentchanges-label-newpage": "Гэтай праўкай была створана новая старонка",
        "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": "Ніжэй знаходзяцца змены з <b>$2</b> (паказана не больш чым <b>$1</b>).",
        "rclistfrom": "Паказаць змены з $3 $2",
        "rcshowhideminor": "$1 дробныя праўкі",
+       "rcshowhideminor-show": "Паказаць",
        "rcshowhideminor-hide": "Схаваць",
        "rcshowhidebots": "$1 робатаў",
        "rcshowhidebots-show": "Паказаць",
        "minoreditletter": "д",
        "newpageletter": "Н",
        "boteditletter": "р",
-       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|назіральнік|назіральнікаў}}]",
+       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|назіральнік|назіральнікі|назіральнікаў}}]",
        "rc_categories": "Абмежаваць катэгорыямі (размяжоўваць знакам \"|\")",
        "rc_categories_any": "Усе",
-       "rc-change-size-new": "$1 {{PLURAL:$1|байт|байта|байтаў}} пасля змены",
+       "rc-change-size-new": "$1 {{PLURAL:$1|байт|байты|байтаў}} пасля змены",
        "newsectionsummary": "/* $1 */ новы падраздзел",
        "rc-enhanced-expand": "Паказаць падрабязнасці",
        "rc-enhanced-hide": "Не паказваць падрабязнасцей",
+       "rc-old-title": "першапачаткова створана як \"$1\"",
        "recentchangeslinked": "Звязаныя праўкі",
        "recentchangeslinked-feed": "Звязаныя праўкі",
        "recentchangeslinked-toolbox": "Звязаныя праўкі",
        "recentchangeslinked-title": "Змяненні, якія датычаць \"$1\"",
-       "recentchangeslinked-summary": "Гэта пералік нядаўніх змяненняў старонак, на якія спасылаецца азначаная старонка, або змяненняў складнікаў азначанай катэгорыі.\nСтаронкі, якія ўваходзяць у [[Special:Watchlist|лік назіраных вамі]], выдзелены '''стылем'''.",
+       "recentchangeslinked-summary": "Гэта пералік нядаўніх змяненняў старонак, на якія спасылаецца азначаная старонка, або змяненняў складнікаў азначанай катэгорыі.\nСтаронкі, якія ўваходзяць у [[Special:Watchlist|лік назіраных вамі]], выдзелены <strong>стылем</strong>.",
        "recentchangeslinked-page": "Назва старонкі:",
        "recentchangeslinked-to": "Паказваць, замест гэтага, змяненні на старонках, што спасылаюцца сюды",
        "upload": "Укласці файл",
        "reuploaddesc": "Спыніць укладанне і вярнуцца да пачатковага фармуляра.",
        "upload-tryagain": "Адправіць змененае апісанне файла",
        "uploadnologin": "Не ў сістэме",
-       "uploadnologintext": "Каб укладваць файлы, трэба [[Special:UserLogin|ўвайсці ў сістэму]].",
+       "uploadnologintext": "Каб укладваць файлы, трэба $1.",
        "upload_directory_missing": "Няма каталога для ўкладаў ($1), і серверу не ўдалося яго стварыць.",
        "upload_directory_read_only": "Немагчыма для веб-сервера запісаць у каталог укладаў ($1).",
        "uploaderror": "Памылка пры ўкладанні",
        "upload-recreate-warning": "'''Увага''': файл з такім імем быў выдалены або перамешчаны.''' \n\nЖурнал выдалення і перамяшчэння гэтай старонкі прыводзіцца тут для зручнасці:",
        "uploadtext": "Тут можна ўкласці файлы ў вікі.\nПрагляд або пошук раней укладзенага [[Special:FileList|робіцца тут]]; апроч таго, усе ўкладанні і сціранні адзначаюцца ў журналах [[Special:Log/upload|укладання]] і [[Special:Log/delete|сцірання]], адпаведна.\n\nКаб уставіць файл ў старонку, ужываецца спасылка, зробленая адным з наступных спосабаў:\n* '''<code><nowiki>[[</nowiki>image<nowiki>:File.jpg]]</nowiki></code>''' паказвае файл у поўным памеры\n*  '''<code><nowiki>[[</nowiki>image<nowiki>:File.png|200px|thumb|left|тлумачальны тэкст]]</nowiki></code>''' паказвае файл, маштабаваны да шырыні 200 кропак, у рамцы, змешчанай злева, і з 'тлумачальным тэкстам' у якасці подпісу\n* '''<code><nowiki>[[</nowiki>media<nowiki>:File.ogg]]</nowiki></code>''' не паказвае самога файла, а толькі спасылку на яго",
        "upload-permitted": "Дазволеныя тыпы файлаў: $1.",
-       "upload-preferred": "Ð\91олÑ\8cÑ\88 Ð¿Ñ\80Ñ\8bймалÑ\8cнÑ\8bÑ\8f Ñ\82Ñ\8bпÑ\8b Ñ\84айлаÑ\9e: $1.",
+       "upload-preferred": "Больш прымальныя тыпы файлаў: $1.",
        "upload-prohibited": "Забароненыя тыпы файлаў: $1.",
        "uploadlogpage": "Журнал укладанняў",
        "uploadlogpagetext": "Ніжэй паказаны спіс [[Special:NewFiles|нядаўна ўкладзеных]] файлаў.",
        "badfilename": "Назва файла зменена на \"$1\".",
        "filetype-mime-mismatch": "Пашырэнне файла (\".$1\") не адпавядае заўважанаму тыпу MIME ($2).",
        "filetype-badmime": "Не дазваляецца ўкладанне файлаў з тыпам MIME \"$1\".",
-       "filetype-bad-ie-mime": "Немагчыма ўкласці гэты файл, таму што  браўзер Internet Explorer будзе пазнаваць яго як \"$1\", а гэта з'яўляецца забароненым і патэнцыйна небяспечным тыпам файлаў.",
+       "filetype-bad-ie-mime": "Немагчыма ўкласці гэты файл, таму што  браўзер Internet Explorer будзе пазнаваць яго як \"$1\", а гэта забаронены і патэнцыйна небяспечны тып файлаў.",
        "filetype-unwanted-type": "'''\".$1\"''' належыць да нежаданых тыпаў файлаў. Пажаданы{{PLURAL:$3| тып файла|я тыпы файлаў}}: $2.",
        "filetype-banned-type": "'''\".$1\"''' {{PLURAL:$4|належыць да недазволенага тыпу файлаў|належаць да недазволеных тыпаў файлаў}}.\nПералік дазволеных тыпаў складаецца з {{PLURAL:$3|тыпа|тыпаў}}: $2.",
        "filetype-missing": "Назва файла без суфіксу (напрыклад, \".jpg\").",
        "largefileserver": "Гэты файл большага аб'ёму, чым дазваляе канфігурацыя сервера.",
        "emptyfile": "Здаецца, што файл, укладзены вамі, пусты. Магчыма, здарылася памылка ў назве файла? Праверце, ці вы сапраўды хацелі ўкласці менавіта гэты файл.",
        "windows-nonascii-filename": "Дадзеная вікі не падтрымлівае імёны файлаў са спецыяльнымі знакамі.",
-       "fileexists": "Ужо Ñ\96Ñ\81нÑ\83е Ñ\84айл Ð· Ñ\82акоÑ\8e назвай, праверце <strong>[[:$1]]</strong>, калі не ўпэўнены, што жадаеце мяняць яго змесціва.\n[[$1|thumb]]",
+       "fileexists": "Ужо Ñ\91Ñ\81Ñ\86Ñ\8c Ñ\84айл Ð· Ñ\82акой назвай, праверце <strong>[[:$1]]</strong>, калі не ўпэўнены, што жадаеце мяняць яго змесціва.\n[[$1|thumb]]",
        "filepageexists": "Для файла з такой назвай існуе старонка апісання <strong>[[:$1]]</strong>, але сам файл зараз не існуе.\nТаму вашае апісанне не з'явіцца на адпаведнай старонцы, пакуль вы самастойна яе не паправіце.\n[[$1|thumb]]",
        "fileexists-extension": "Ужо ёсць файл з падобнай назвай: [[$2|thumb]]\n* Назва ўкладанага файла: <strong>[[:$1]]</strong>\n* Назва наяўнага файла: <strong>[[:$2]]</strong>\nВыберыце іншую назву.",
        "fileexists-thumbnail-yes": "Файл падобны на выяву скарочанага памеру ''(драбніца)''. [[$1|thumb]]\nПраверце файл <strong>[[:$1]]</strong>.\nКалі правераны файл мае змест і памеры, аднолькавыя з гэтым, то дадатковае ўкладанне драбніцы непатрэбнае.",
        "fileexists-shared-forbidden": "У агульным сховішчы ўжо існуе файл з такою назвай.\nКалі вы жадаеце ўсё ж укласці свой файл, паўтарыце працэдуру ўкладання, але з іншай назвай. [[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Гэты файл з'яўляецца дублікатам наступн{{PLURAL:$1|ага файла|ых файлаў}}:",
        "file-deleted-duplicate": "Файл, падобны да гэтага ([[:$1]]), быў сцёрты некалі раней. Трэба праверыць гісторыю таго файла перад тым, як укладваць яго нанова.",
+       "file-deleted-duplicate-notitle": "Файл, ідэнтычны гэтаму, быў сцёрты раней, а назва файла заглушана.\nВы мусіце спытаць каго-небудзь з магчымасцю бачыць заглушаныя звесткі па файлах пераглядзець сітуацыю перад тым, як укладваць яго нанова.",
        "uploadwarning": "Папярэджанне пра ўкладанне",
-       "uploadwarning-text": "Калі ласка, зменіце файл апісанне ніжэй і паўтарыце спробу.",
+       "uploadwarning-text": "Калі ласка, змяніце апісанне файла ніжэй і паўтарыце спробу.",
        "savefile": "Запісаць файл",
        "uploadedimage": "укладзена \"[[$1]]\"",
        "overwroteimage": "укладзена новая версія \"[[$1]]\"",
        "uploaddisabledtext": "Не дазваляюцца ўкладанні файлаў.",
        "php-uploaddisabledtext": "Укладанне файлаў не дазволена ў асяроддзі PHP. Праверце настаўленне file_uploads.",
        "uploadscripted": "У файле ўтрымліваецца код HTML або Яваскрыпту, які можа быць памылкова апрацаваны браўзерам.",
+       "uploadscriptednamespace": "Гэты файл SVG утрымлівае недапушчальную прастору імёнаў \"$1\".",
+       "uploadinvalidxml": "Немагчыма прааналізаваць XML ва ўкладзеным файле.",
        "uploadvirus": "Файл утрымлівае вірус! Падрабязнасці: $1",
        "uploadjava": "Файл ўяўляе сабой ZIP-архіў, які змяшчае .class файл Java.",
        "upload-source": "Зыходны файл",
        "upload-options": "Магчымасці ўкладання",
        "watchthisupload": "Назіраць за файлам",
        "filewasdeleted": "Файл з такою назвай быў раней укладзены сюды, а потым сцёрты. Варта паглядзець у $1 перад тым, як укладаць яго нанова.",
-       "filename-bad-prefix": "Назва файла, які вы ўкладаеце, пачынаецца з '''\"$1\"''', што падобна на аўтаматычныя, неінфарматыўныя назвы файлаў, якія робяць лічбавыя фотаапараты. Калі ласка, змяніце назву на больш зразумелую.",
+       "filename-bad-prefix": "Назва файла, які вы ўкладаеце, пачынаецца з <strong>\"$1\"</strong>, што падобна на аўтаматычныя, неінфарматыўныя назвы файлаў, якія робяць лічбавыя фотаапараты. Калі ласка, змяніце назву на больш зразумелую.",
        "upload-success-subj": "Паспяховае ўкладанне",
        "upload-success-msg": "Ваша загрузка [$2] прайшла паспяхова. Вы можаце паглядзець вынік тут: [[:{{ns:file}}:$1]]",
        "upload-failure-subj": "Праблема загрузкі",
        "backend-fail-notsame": "Ужо існуе неідэнтычны файл $1.",
        "backend-fail-invalidpath": "$1 не з'яўляецца дапушчальным шляхам",
        "backend-fail-delete": "Не ўдалося сцерці файл \"$1\".",
+       "backend-fail-describe": "Немагчыма змяніць метазвесткі для файла \"$1\".",
        "backend-fail-alreadyexists": "Файл $1 ужо існуе.",
        "backend-fail-store": "Не ўдалося захаваць файл $1 на $2 .",
        "backend-fail-copy": "Не ўдалося капіраваць файл \"$1\" у \"$2\".",
        "backend-fail-writetemp": "Не атрымалася запісаць часовы файл",
        "backend-fail-closetemp": "Не атрымалася закрыць часовы файл",
        "backend-fail-read": "Не атрымалася прачытаць файл $1.",
-       "backend-fail-create": "Не атрымалася стварыць файл $1.",
+       "backend-fail-create": "Немагчыма запісаць файл \"$1\".",
+       "backend-fail-maxsize": "Немагчыма запісаць файл \"$1\", таму што ён большы за {{PLURAL:$2|адзін байт|$2 байты|$2 байтаў}}.",
        "backend-fail-readonly": "Сервер сховішча «$1» у рэжыме толькі чытання. Прычына: «$2»",
        "backend-fail-synced": "Стан файла «$1» адрозніваецца ад стану на ўнутраным серверы сховішча",
        "backend-fail-connect": "Немагчыма далучыцца да сервера сховішча «$1».",
        "backend-fail-internal": "Узнікла невядомая памылка на серверы сховішча «$1».",
        "backend-fail-contenttype": "Немагчыма вызначыць тып зместу файла, які мусіць быць захаваны ў «$1».",
        "backend-fail-batchsize": "Сервер сховішча атрымаў блок з $1 {{PLURAL:$1|файлавай аперацыі|файлавых аперацый|файлавых аперацый}}; абмежаванне складае $2",
+       "backend-fail-usable": "Немагчыма прачытаць ці запісаць файл \"$1\" з-за нястачы дазволаў ці адсутнасці каталогаў/кантэйнераў.",
+       "filejournal-fail-dbconnect": "Немагчыма далучыцца да базы звестак журнала для рухавіка захоўвання дадзеных \"$1\".",
+       "filejournal-fail-dbquery": "Немагчыма абнавіць базу звестак журнала для рухавіка захоўвання дадзеных \"$1\".",
        "lockmanager-notlocked": "Не ўдалося разблакаваць \"$1\"; ён не заблакаваны.",
        "lockmanager-fail-closelock": "Не ўдалося закрыць файл блакіроўкі для  «$1».",
        "lockmanager-fail-deletelock": "Не ўдалося выдаліць файл блакіроўкі для  «$1».",
        "uploadstash-nofiles": "У вас няма схаваных файлаў.",
        "uploadstash-badtoken": "Не атрымалася выканаць названыя дзеянні. Магчыма, скончыўся тэрмін дзеяння вашага жэтона бяспекі. Паспрабуйце яшчэ раз.",
        "uploadstash-errclear": "Ачыстка файлаў не ўдалася",
-       "uploadstash-refresh": "Абнавіць спісак файлаў",
+       "uploadstash-refresh": "Абнавіць спіс файлаў",
        "invalid-chunk-offset": "Недапушчальнае зрушэнне фрагмента",
        "img-auth-accessdenied": "Доступ забаронены",
-       "img-auth-nopathinfo": "Адсутнічае PATH_INFO",
+       "img-auth-nopathinfo": "Адсутнічае PATH_INFO.\nВаш сервер не настроены на перадачу гэтых звестак.\nМагчыма, ён на аснове CGI і не падтрымлівае img_auth.\nГл. https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "Запытаны шлях не ставіцца да наладжанага каталога ўкладанняў.",
        "img-auth-badtitle": "Немагчыма пабудаваць правільны загаловак з «$1».",
        "img-auth-nologinnWL": "Вы не ўвайшлі ў сістэму, а «$1» не ўваходзіць ў белы спіс.",
        "listfiles_size": "Памер у байтах",
        "listfiles_description": "Апісанне",
        "listfiles_count": "Версіі",
+       "listfiles-show-all": "Уключыць старыя версіі відарысаў",
+       "listfiles-latestversion": "Актуальная версія",
+       "listfiles-latestversion-yes": "Так",
+       "listfiles-latestversion-no": "Не",
        "file-anchor-link": "Файл",
        "filehist": "Гісторыя файла",
        "filehist-help": "Націснуць на даце з часам, каб паказаць файл, якім ён тады быў.",
        "sharedupload": "Гэты файл з $1 і можа выкарыстоўвацца іншымі праектамі.",
        "sharedupload-desc-there": "Гэты файл з $1 і можа выкарыстоўвацца ў іншых праектах.\nДадатковую інфармацыю можна знайсці на [$2 старонцы апісання файла].",
        "sharedupload-desc-here": "Гэты файл з $1 і можа выкарыстоўвацца іншымі праектамі. Апісанне на яго [$2 старонцы размоў] прыведзена ніжэй",
+       "sharedupload-desc-edit": "Гэты файл з $1 і можа выкарыстоўвацца ў іншых праектах.\nМажліва, вы хочаце правіць апісанне на [$2 старонцы апісання файла] там.",
        "filepage-nofile": "Не знойдзены файл з такой назвай.",
        "filepage-nofile-link": "Не знойдзены файл з такой назвай, але можна [$1 яго ўкласці].",
        "uploadnewversion-linktext": "Укласці новую версію гэтага файла",
        "filedelete-reason-dropdown": "*Звычайныя прычыны сцірання\n** Парушэнне аўтарскага права\n** Дублікатны файл",
        "filedelete-edit-reasonlist": "Правіць прычыны сцірання",
        "filedelete-maintenance": "Тымчасова адключаныя сціранне і аднаўленне файлаў (на час тэхнічнага абслугоўвання).",
-       "filedelete-maintenance-title": "Немагчыма выдаліць файл",
+       "filedelete-maintenance-title": "Немагчыма сцерці файл",
        "mimesearch": "Пошук паводле зместу файла",
        "mimesearch-summary": "Старонка дазваляе прасейваць файлы ў залежнасці ад іх тыпаў MIME. Фармат уводу: contenttype/subtype, напр., <code>image/jpeg</code>.",
        "mimetype": "Тып MIME:",
        "unusedtemplateswlh": "іншыя спасылкі",
        "randompage": "Выпадковая старонка",
        "randompage-nopages": "Няма старонак у наступн{{PLURAL:$2|ай прасторы|ых прасторах}} назваў: $1.",
+       "randomincategory": "Выпадковая старонка ў катэгорыі",
+       "randomincategory-invalidcategory": "\"$1\" - недапушчальная назва катэгорыі.",
+       "randomincategory-nopages": "Няма старонак у катэгорыі [[:Category:$1|$1]].",
+       "randomincategory-selectcategory": "Атрымаць выпадковую старонку з катэгорыі: $1 $2.",
+       "randomincategory-selectcategory-submit": "Перайсці",
        "randomredirect": "Выпадковая перасылка",
        "randomredirect-nopages": "Няма перасылак у прасторы назваў \"$1\".",
        "statistics": "Статыстыка",
        "statistics-users-active": "Актыўныя ўдзельнікі",
        "statistics-users-active-desc": "Удзельнікі, якія хоць нешта зрабілі за апошн{{PLURAL:$1|і дзень|ія $1 дзён}}",
        "statistics-mostpopular": "Самыя папулярныя старонкі",
+       "pageswithprop": "Старонкі з уласцівасцю старонкі",
+       "pageswithprop-legend": "Старонкі з пэўнай уласцівасцю",
+       "pageswithprop-text": "На гэтай старонцы пералічаны старонкі, якія выкарыстоўваюць пэўную уласцівасць.",
+       "pageswithprop-prop": "Назва ўласцівасці:",
+       "pageswithprop-submit": "Перайсці",
+       "pageswithprop-prophidden-long": "доўгае тэкставае значэнне ўласцівасці схавана ($1)",
+       "pageswithprop-prophidden-binary": "двайковае значэнне ўласцівасці схавана ($1)",
        "doubleredirects": "Падвойныя перасылкі",
        "doubleredirectstext": "Тут пералічаныя старонкі-перасылкі, якія паказваюць на іншыя перасылкі.\nКожны радок утрымлівае спасылкі на першую і другую перасылкі, а таксама мэту другой перасылкі, якая звычайна і ёсць \"сапраўдная\" мэтавая старонка, на якую павінна была паказваць першая перасылка.\n<del>Закрэсленыя складнікі</del> ўжо былі папраўленыя.",
-       "double-redirect-fixed-move": "Назва [[$1]] была перанесена, і зараз перасылае да [[$2]]",
-       "double-redirect-fixed-maintenance": "Ð\92Ñ\8bпÑ\80аÑ\9eленне Ð¿Ð°Ð´Ð²Ð¾Ð¹Ð½Ð°Ð³Ð° Ð¿ÐµÑ\80анакÑ\96Ñ\80аваннÑ\8f Ð· [[$1]] Ð½Ð° [[$2]].",
+       "double-redirect-fixed-move": "Назва [[$1]] была перанесена.\nПасля аўтаматычнага абнаўлення зараз яна перасылае да [[$2]]",
+       "double-redirect-fixed-maintenance": "Ð\90Ñ\9eÑ\82амаÑ\82Ñ\8bÑ\87нае Ð²Ñ\8bпÑ\80аÑ\9eленне Ð¿Ð°Ð´Ð²Ð¾Ð¹Ð½Ð°Ð¹ Ð¿ÐµÑ\80аÑ\81Ñ\8bлкÑ\96 Ð· [[$1]] Ð½Ð° [[$2]] Ñ\86Ñ\8fгам Ñ\82Ñ\8dÑ\85нÑ\96Ñ\87нага Ð°Ð±Ñ\81лÑ\83гоÑ\9eваннÑ\8f.",
        "double-redirect-fixer": "Выпраўляльнік перасылак",
        "brokenredirects": "Паламаныя перасылкі",
        "brokenredirectstext": "Гэтыя перасылкі паказваюць на старонкі, якіх няма:",
        "fewestrevisions": "Артыкулы з найменшай колькасцю версій",
        "nbytes": "$1 {{PLURAL:$1|байт|байта|байтаў}}",
        "ncategories": "$1 {{PLURAL:$1|катэгорыя|катэгорыі|катэгорый}}",
+       "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|старонцы|старонках|старонках}}",
        "mostlinkedtemplates": "Шаблоны ў частым выкарыстанні",
        "mostcategories": "Артыкулы ў найбольшай кольк. катэгорый",
        "mostimages": "Выявы ў частым выкарыстанні",
+       "mostinterwikis": "Артыкулы з найбольш. кольк. інтэрвкікі",
        "mostrevisions": "Артыкулы з найбольшай колькасцю версій",
        "prefixindex": "Старонкі з назвамі на ўзор",
        "prefixindex-namespace": "Усе старонкі з прэфіксам ( $1 прастора імёнаў)",
+       "prefixindex-strip": "Прыбраць прэфікс у пераліку",
        "shortpages": "Старонкі малога аб'ёму",
        "longpages": "Старонкі вялікага аб'ёму",
        "deadendpages": "Старонкі без спасылак",
        "deadendpagestext": "Спіс старонак без спасылак на тутэйшыя артыкулы.",
        "protectedpages": "Старонкі пад аховай",
        "protectedpages-indef": "Толькі бестэрміновыя аховы",
+       "protectedpages-summary": "На гэтай старонцы пералічаны наяўныя старонкі, якія зараз знаходзяцца пад аховай. Спіс назваў, абароненых ад стварэння, гл. [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Толькі каскадныя засцераганні",
        "protectedpages-noredirect": "Схаваць перанакіраванні",
        "protectedpagesempty": "Ніякія старонкі такім чынам не ахоўваюцца.",
+       "protectedpages-timestamp": "Дата/час",
+       "protectedpages-page": "Старонка",
+       "protectedpages-expiry": "Канчаецца",
+       "protectedpages-performer": "Паставіў ахову",
+       "protectedpages-params": "Тыпы аховы",
+       "protectedpages-reason": "Прычына",
+       "protectedpages-unknown-timestamp": "Невядома",
+       "protectedpages-unknown-performer": "Нявызначаны ўдзельнік",
        "protectedtitles": "Назвы пад аховай",
+       "protectedtitles-summary": "На гэтай старонцы пералічаны назвы, якія зараз абаронены ад стварэння. Спіс існых старонак пад аховай гл. [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Няма назваў, якія зараз бы ахоўваліся з такімі параметрамі.",
        "listusers": "Усе ўдзельнікі",
        "listusers-editsonly": "Толькі ўдзельнікі, якія маюць праўкі",
        "listusers-creationsort": "У парадку датаў стварэння",
+       "listusers-desc": "Парадкаваць да памяншэння",
        "usereditcount": "$1 {{PLURAL:$1|праўка|праўкі}}",
        "usercreated": "\t{{GENDER:$3|Зарэгістраваўся|Зарэгістравалася}} $1 в $2",
        "newpages": "Новыя старонкі",
        "alllogstext": "Супольны паказ усіх магчымых журналаў на пляцоўцы {{SITENAME}}.\nМожна звузіць аб'ём паказу, выбіраючы тып журнала, імя ўдзельніка (з улікам рэгістру літар) або старонкі (таксама з улікам рэгістру).",
        "logempty": "Нічога адпаведнага ў журнале не знойдзена.",
        "log-title-wildcard": "Знайсці назвы, якія пачынаюцца з гэтага тэксту",
+       "showhideselectedlogentries": "Паказаць/схаваць выбраныя запісы журнала",
        "allpages": "Усе старонкі",
        "nextpage": "Наступная старонка ($1)",
        "prevpage": "Папярэдняя старонка ($1)",
        "allpagesbadtitle": "Гэтая назва старонкі недапушчальная або ўтрымлівае між-моўны або між-вікавы прэфікс. Магчыма, у назве ёсць знак ці знакі, якія нельга ўжываць у назвах.",
        "allpages-bad-ns": "На {{SITENAME}} прастора назваў \"$1\" не падтрымліваецца.",
        "allpages-hide-redirects": "Схаваць перанакіраванні",
+       "cachedspecial-viewing-cached-ttl": "Вы праглядаеце кэшаваную версію старонкі, даўнасць якой можа быць $1.",
        "categories": "Катэгорыі",
        "categoriespagetext": "Наступн{{PLURAL:$1|ая катэгорыя ўтрымлівае|ыя $1 катэгорыі(-й) утрымліваюць}} старонкі або мультымедыю.\nТут не паказаныя [[Special:UnusedCategories|катэгорыі без складнікаў]].\nГл. таксама [[Special:WantedCategories|патрэбныя катэгорыі]].",
        "categoriesfrom": "Паказаць катэгорыі, пачынаючы з:",
        "listusersfrom": "Паказаць удзельнікаў, пачаўшы з:",
        "listusers-submit": "Паказаць",
        "listusers-noresult": "Удзельнікі не знойдзеныя.",
-       "listusers-blocked": "(Ð\97аблакаваны)",
+       "listusers-blocked": "(заблакаваны)",
        "activeusers": "Актыўныя ўдзельнікі",
        "activeusers-intro": "Гэта пералік удзельнікаў, якія нешта рабілі за апошнія $1 {{PLURAL:$1|дзень|дзён}}.",
        "activeusers-count": "$1 {{PLURAL:$1|праўка|праўкі|правак}} за апошні{{PLURAL:$3| дзень|я $3 дзён}}",
        "listgrouprights-removegroup-self": "можа выдаліць {{PLURAL:$2|групу|групы}} са свайго ўліковага запісу: $1",
        "listgrouprights-addgroup-self-all": "Дадаць усе групы да свайго акаунта",
        "listgrouprights-removegroup-self-all": "Выдаліць усе групы са свайго акаунта",
+       "listgrouprights-namespaceprotection-namespace": "Прастора назваў",
+       "trackingcategories-nodesc": "Апісанне адсутнічае.",
        "mailnologin": "Няма эл.адрасу",
        "mailnologintext": "Трэба [[Special:UserLogin|ўвайсці ў сістэму]] і мець пацверджаны адрас эл.пошты ў сваіх [[Special:Preferences|настáўленнях]], каб слаць эл.пошту іншым удзельнікам.",
        "emailuser": "Эл.пошта ўдзельніка",
        "emailuser-title-notarget": "Напісанне электроннага ліста ўдзельніку",
        "emailpage": "Зварот да ўдзельніка праз эл.пошту",
-       "emailpagetext": "Тут можна выслаць эл.пошту гэтаму ўдзельніку.\nАдрас эл.пошты, уведзены вамі ў [[Special:Preferences|сваіх настаўленнях]], з'явіцца ў полі \"From\" вашага ліста, і атрымальнік зможа адказаць на ваш ліст.",
+       "emailpagetext": "Тут можна выслаць эл.пошту гэта{{GENDER:$1|му ўдзельніку|й удзельніцы}}.\nАдрас эл.пошты, уведзены вамі ў [[Special:Preferences|сваіх настройках]], з'явіцца ў полі \"Ад каго (From)\" вашага ліста, і атрымальнік зможа адказаць на ваш ліст.",
        "defemailsubject": "{{SITENAME}} — Ліст ад $1",
        "usermaildisabled": "Электронная пошта ўдзельніка не працуе",
        "usermaildisabledtext": "Вы не можаце адпраўляць паведамленні электроннай пошты іншым карыстальнікам гэтай вікі",
        "emailuserfooter": "Гэты эл.ліст быў высланы ад $1 да $2 праз функцыю \"{{:{{ns:mediawiki}}:emailuser/be}}\" пляцоўкі {{SITENAME}}.",
        "usermessage-summary": "Пакінуць адмысловае паведамленне.",
        "usermessage-editor": "Адмысловая дастаўка",
-       "watchlist": "Ð\9cой Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анага",
+       "watchlist": "Ð\9cой Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f",
        "mywatchlist": "Спіс назірання",
        "watchlistfor2": "Для $1 $2",
        "nowatchlist": "Ваш спіс назірання зараз пусты.",
        "watchnologin": "Без прадстаўлення",
        "addwatch": "Дадаць у спіс назірання",
        "addedwatchtext": "Старонка \"[[:$1]]\" была дададзена да [[Special:Watchlist|назіраных]] вамі.\nЗмяненні, якія адбудуцца з гэтай старонкай і з Размовай пра яе, будуць паказвацца там, і старонка будзе '''вылучацца шрыфтам''' у [[Special:RecentChanges|спісе нядаўніх змяненняў]], каб лягчэй пазнаваць яе.\n\nКалі вы не пажадаеце больш назіраць за гэтай старонкай, націсніце \"Не назіраць\" у бакоўцы.",
+       "addedwatchtext-short": "Старонка \"$1\" была дададзена ў ваш спіс назірання.",
        "removewatch": "Выдаліць са спіса назірання",
        "removedwatchtext": "Старонка \"[[:$1]]\" была вынята з вашага [[Special:Watchlist|спіса назірання]].",
+       "removedwatchtext-short": "Старонка \"$1\" была выдаленая з вашага спісу назірання.",
        "watch": "Назіраць",
        "watchthispage": "Назіраць за гэтай старонкай",
        "unwatch": "Не назіраць",
        "unwatchthispage": "Спыніць назіранне",
        "notanarticle": "Гэта не змястоўная старонка",
        "notvisiblerev": "Версія сцёртая",
-       "watchlist-details": "Назіраю {{PLURAL:$1|$1 старонку|$1 старонак}} без уліку размоўных.",
+       "watchlist-details": "Ð\9dазÑ\96Ñ\80аÑ\8e {{PLURAL:$1|$1 Ñ\81Ñ\82аÑ\80онкÑ\83|$1 Ñ\81Ñ\82аÑ\80онкÑ\96|$1 Ñ\81Ñ\82аÑ\80онак}} Ð±ÐµÐ· Ñ\83лÑ\96кÑ\83 Ñ\80азмоÑ\9eнÑ\8bÑ\85.",
        "wlheader-enotif": "Працуе апавяшчанне праз эл.пошту.",
-       "wlheader-showupdated": "Старонкі, якія былі зменены пасля вашага апошняга іх наведвання, паказаны '''абрысам шрыфту'''.",
+       "wlheader-showupdated": "Старонкі, якія былі зменены пасля вашага апошняга наведвання, паказаны <strong>абрысам шрыфту</strong>.",
+       "wlnote2": "Ніжэй паказаны змены за {{PLURAL:$1|апошнюю гадзіну|апошнія <strong>$1</strong> гадзіны|апошнія <strong>$1</strong> гадзін}}, па стане на $2, $3.",
        "wlshowlast": "Паказваць апошнія $1 гадз. $2 дзён $3",
        "watchlist-options": "Магчымасці назірання",
        "watching": "Дапісваецца ў спіс назірання...",
        "watcherrortext": "Адбылася памылка пры змене настройкі назірання для «$1».",
        "enotif_reset": "Пазначыць усе старонкі як наведаныя",
        "enotif_impersonal_salutation": "Шаноўны ўдзельнік {{SITENAME}}",
+       "enotif_subject_deleted": "Старонка $1 праекта {{SITENAME}} сцёрта {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $2",
        "enotif_lastvisited": "Гл. $1 каб бачыць усе змены пасля вашага апошняга наведвання.",
        "enotif_lastdiff": "Гл. $1 каб бачыць гэтую мену.",
        "enotif_anon_editor": "ананімны ўдзельнік $1",
        "rollback": "Адкаціць праўкі",
        "rollback_short": "Адкат",
        "rollbacklink": "адкат",
+       "rollbacklinkcount-morethan": "адкаціць больш за $1 {{PLURAL:$1|праўку|праўкі|правак}}",
        "rollbackfailed": "Не ўдалося адкаціць",
        "cantrollback": "Немагчыма адкаціць праўку; апошні аўтар гэта адзіны аўтар на гэтай старонцы.",
        "alreadyrolled": "Немагчыма адкаціць апошнюю праўку ў [[:$1]], аўтарства [[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nз таго часу нехта іншы правіў або адкатваў гэтую старонку.\n\nАпошняя праўка старонкі была аўтарства [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "undelete-nodiff": "Не знойдзены ніякія папярэднія версіі.",
        "undeletebtn": "Аднавіць",
        "undeletelink": "паказаць/аднавіць",
-       "undeleteviewlink": "Ð\9fÑ\80аглÑ\8fдзець",
+       "undeleteviewlink": "паказаць",
        "undeleteinvert": "Перавярнуць выбранае",
        "undeletecomment": "Прычына:",
-       "undeletedrevisions": "Адноўлен{{PLURAL:$1|а 1 версія|ыя $1 версій}}",
-       "undeletedrevisions-files": "Адноўлен{{PLURAL:$1|а 1 версія|ыя $1 версій}} і {{PLURAL:$2|1 файл|$2 файлаў}}",
-       "undeletedfiles": "Адноўлен{{PLURAL:$1|ы 1 файл|ыя $1 файлаў}}",
+       "undeletedrevisions": "Адноўлен{{PLURAL:$1|а 1 версія|ы $1 версіі|ы $1 версій}}",
+       "undeletedrevisions-files": "Адноўлен{{PLURAL:$1|а 1 версія|ы $1 версіі|ыя $1 версій}} і {{PLURAL:$2|1 файл|$2 файлы|$2 файлаў}}",
+       "undeletedfiles": "Адноўлен{{PLURAL:$1|ы 1 файл|ы $1 файлы|ыя $1 файлаў}}",
        "cannotundelete": "Не ўдалося аднавіць; магчыма, нехта іншы ўжо аднавіў старонку.",
        "undeletedpage": "'''$1 была адноўлена'''\n\nПраверце пералік нядаўніх сціранняў і аднаўленняў у [[Special:Log/delete|журнале сціранняў]].",
        "undelete-header": "Нядаўна сцёртыя старонкі можна паглядзець у [[Special:Log/delete|журнале сціранняў]].",
-       "undelete-search-title": "Ð\9fоÑ\88Ñ\83к Ð²Ñ\8bдаленÑ\8bÑ\85 Ñ\81Ñ\82аÑ\80онак",
+       "undelete-search-title": "ШÑ\83каÑ\86Ñ\8c Ñ\83 Ñ\81Ñ\86Ñ\91Ñ\80Ñ\82Ñ\8bÑ\85 Ñ\81Ñ\82аÑ\80онкаÑ\85",
        "undelete-search-box": "Знайсці ў сцёртых старонках",
        "undelete-search-prefix": "Паказаць старонкі, пачынаючы з:",
        "undelete-search-submit": "Шукаць",
        "namespace_association": "Звязаная прастора",
        "tooltip-namespace_association": "Устанавіце гэтую адзнаку, каб таксама ўключыць прастору імёнаў абмеркавання (або прадметную), звязаную з абранай прасторай імёнаў",
        "blanknamespace": "(Артыкулы)",
-       "contributions": "Уклад удзельніка",
-       "contributions-title": "Уклад удзельніка $1",
+       "contributions": "Уклад {{GENDER:$1|удзельніка|удзельніцы}}",
+       "contributions-title": "Уклад {{GENDER:$1|удзельніка|удзельніцы}} $1",
        "mycontris": "Уклад",
        "contribsub2": "Для $1 ($2)",
        "nocontribs": "Не знойдзена змен, адпаведных зададзеным параметрам.",
        "sp-contributions-newbies-title": "Уклады ўдзельнікаў з новых рахункаў",
        "sp-contributions-blocklog": "блакіроўкі",
        "sp-contributions-deleted": "сцёрты ўклад удзельніка",
-       "sp-contributions-uploads": "Загрузкі",
+       "sp-contributions-uploads": "укладанні",
        "sp-contributions-logs": "журналы",
-       "sp-contributions-talk": "размова",
+       "sp-contributions-talk": "размовы",
        "sp-contributions-userrights": "распараджэнне правамі ўдзельніка",
        "sp-contributions-blocked-notice": "Гэты ўдзельнік у дадзены момант заблакаваны. Ніжэй прыведзены апошні запіс з журнала блакаванняў:",
        "sp-contributions-blocked-notice-anon": "Гэты IP-адрас у дадзены момант заблакаваны.\nНіжэй прыведзены апошні запіс з журнала блакаванняў:",
        "whatlinkshere": "Сюды спасылаюцца",
        "whatlinkshere-title": "Старонкі, якія спасылаюцца на \"$1\"",
        "whatlinkshere-page": "Старонка:",
-       "linkshere": "СÑ\82аÑ\80онкÑ\96, Ñ\8fкÑ\96Ñ\8f Ñ\81паÑ\81Ñ\8bлаÑ\8eÑ\86Ñ\86а Ð½Ð° '''[[:$1]]''':",
+       "linkshere": "Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\8bÑ\8f Ñ\81Ñ\82аÑ\80онкÑ\96 Ñ\81паÑ\81Ñ\8bлаÑ\8eÑ\86Ñ\86а Ð½Ð° <strong>[[:$1]]</strong>:",
        "nolinkshere": "Няма старонак, якія б спасылаліся на '''[[:$1]]'''.",
        "nolinkshere-ns": "Няма старонак, якія б спасылаліся на '''[[:$1]]''' у гэтай прасторы назваў.",
        "isredirect": "старонка-перасылка",
        "ipbexpiry": "Згасае:",
        "ipbreason": "Прычына:",
        "ipbreason-dropdown": "*Звычайныя прычыны блоку\n** Упісванне несапраўднай інфармацыі\n** Сціранне інфармацыі са старонак\n** Спамавыя спасылкі на вонкавыя сайты\n** Упісванне бессэнсоўнай інфармацыі\n** Некультурныя паводзіны/пераследаванне\n** Злоўжыванне некалькімі рахункамі\n** Недапушчальнае імя ўдзельніка",
-       "ipb-hardblock": "Ð\97абаÑ\80анÑ\96Ñ\86Ñ\8c Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\86Ñ\8c удзельнікам рэдагаванне з гэтага IP-адрасу",
+       "ipb-hardblock": "Ð\97абаÑ\80анÑ\96Ñ\86Ñ\8c Ð¿Ð°Ð·Ð½Ð°Ð½Ñ\8bм удзельнікам рэдагаванне з гэтага IP-адрасу",
        "ipbcreateaccount": "Не дазваляць стварэнне рахунка",
        "ipbemailban": "Не дазваляць удзельніку слаць эл.пошту",
        "ipbenableautoblock": "Аўтаматычна блакаваць адрас IP, якім удзельнік карыстаўся апошнім разам, і ўсе наступныя адрасы IP, з-пад якіх ён паспрабуе рабіць праўкі",
        "badipaddress": "Недапушчальны адрас IP",
        "blockipsuccesssub": "Паспяховае блакаванне",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] быў заблакаваны.<br />\nБлокі пералічаныя ў [[Special:BlockList|спісе IP-блокаў]].",
-       "ipb-blockingself": "Вы спрабуеце заблакіраваць сябе самога! Вы ўпэўнены, што вы жадаеце гэта зрабіць?",
+       "ipb-blockingself": "Вы спрабуеце заблакіраваць сябе самога! Вы ўпэўнены, што хочаце гэта зрабіць?",
        "ipb-confirmhideuser": "Вы намерваецеся заблакіраваць удзельніка і схаваць яго імя. Яно не будзе адлюстроўвацца ў спісах і журналах. Вы ўпэўнены, што жадаеце гэта зрабіць?",
        "ipb-edit-dropdown": "Прычыны пастаноўкі блока",
        "ipb-unblock-addr": "Зняць блок з $1",
        "unblockiptext": "У форме, што ніжэй, можна вярнуць дазвол на запіс для раней заблакаванага адрасу IP або ўдзельніка.",
        "ipusubmit": "Зняць гэты блок",
        "unblocked": "[[User:$1|$1]] быў адблакаваны",
-       "unblocked-range": "$1 быў разблакіраваны",
+       "unblocked-range": "$1 быў разблакаваны.",
        "unblocked-id": "Блок $1 быў зняты",
        "blocklist": "Заблакаваныя ўдзельнікі",
        "ipblocklist": "Заблакаваныя ўдзельнікі",
        "emaillink": "адправіць ліст",
        "autoblocker": "Аўтаматычны блок таму што вашым адрасам IP нядаўна карыстаўся \"[[User:$1|$1]]\". Блакаванне $1's патлумачана так: \"'''$2'''\"",
        "blocklogpage": "Журнал блокаў",
-       "blocklog-showlog": "{{GENDER:$1|Гэты ўдзельнік ужо блакіраваўся|Гэта ўдзельніца ўжо блакіравалася}} раней.\nНіжэй прыведзены журнал блакіровак:",
+       "blocklog-showlog": "{{GENDER:$1|Гэты ўдзельнік ужо блакаваўся|Гэта ўдзельніца ўжо блакавалася}} раней.\nЖурнал блакіровак прыведзены ніжэй:",
        "blocklog-showsuppresslog": "Гэты ўдзельнік ужо заблакаваны і скрыты. Журнал утойвання прыведзены ніжэй:",
        "blocklogentry": "паставіў блок на \"[[$1]]\", з часам трывання $2 $3",
        "reblock-logentry": "змененыя настройкі блока для [[$1]] з часам згасання $2 $3",
        "range_block_disabled": "Не дазволена адміністратарская магчымасць ставіць блокі на адрасныя дыяпазоны.",
        "ipb_expiry_invalid": "Некарэктны час сканчэння.",
        "ipb_expiry_temp": "Скрытыя блокі на імёны ўдзельнікаў мусяць быць сталымі.",
-       "ipb_hide_invalid": "Ð\9dемагÑ\87Ñ\8bма Ð·Ð°Ð³Ð»Ñ\83Ñ\88Ñ\8bÑ\86Ñ\8c Ð³Ñ\8dÑ\82Ñ\8b Ñ\80аÑ\85Ñ\83нак; Ð¼Ð°Ð³Ñ\87Ñ\8bма, Ð´Ð»Ñ\8f Ñ\8fго Ð¼Ð°ÐµÑ\86Ñ\86а Ð·Ð°Ñ\88маÑ\82 Ð¿Ñ\80авак.",
+       "ipb_hide_invalid": "Ð\9dемагÑ\87Ñ\8bма Ð·Ð°Ð³Ð»Ñ\83Ñ\88Ñ\8bÑ\86Ñ\8c Ð³Ñ\8dÑ\82Ñ\8b Ñ\80аÑ\85Ñ\83нак; Ð´Ð»Ñ\8f Ñ\8fго Ð¼Ð°ÐµÑ\86Ñ\86а Ð±Ð¾Ð»Ñ\8cÑ\88 Ð·Ð° {{PLURAL:$1|аднÑ\83 Ð¿Ñ\80аÑ\9eкÑ\83|$1 Ð¿Ñ\80аÑ\9eкÑ\96|$1 Ð¿Ñ\80авак}}.",
        "ipb_already_blocked": "\"$1\" ужо знаходзіцца пад блокам",
        "ipb-needreblock": "$1 ужо заблакіраваны. Жадаеце змяніць настройкі блакіроўкі?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Іншая блакіроўка|Іншыя блакіроўкі}}",
        "movepagetext": "Форма, што ніжэй, перанясе старонку пад новую назву, і таксама перанясе пад новую назву ўсю гісторыю старонкі.\nСтарая назва ператворыцца ў перасылку да новай.\nПерасылкі, што вялі да старой назвы, можна ўдакладніць аўтаматычна.\nКалі такое аўта-удакладненне не будзе рабіцца, трэба праверыць наяўнасць [[Special:DoubleRedirects|падвойных]] ці [[Special:BrokenRedirects|зламаных]] перасылак.\nАдказнасць за правільную працу спасылак ляжыць на тым, хто пераносіць.\n\nЗаўважце, што старонка '''не будзе''' перанесена, калі пад новай назвай ужо існуе старонка, не пустая і не перасылка і без гісторыі правак. Такім чынам, пры пераносе нельга перапісаць наяўную старонку, а магчымую памылку можна адразу выправіць, пераносячы старонку ў адваротным кірунку.\n\n'''УВАГА!'''\nДля папулярнай старонкі гэта можа стацца рэзкім і нечаканым змяненнем;\nупэўніцеся, што разумееце наступствы пераносу перад тым, як яго зрабіць.",
        "movepagetext-noredirectfixer": "Форма, што ніжэй, перанясе старонку пад новую назву, і таксама перанясе пад новую назву ўсю гісторыю старонкі.\nСтарая назва ператворыцца ў перасылку да новай.\nПерасылкі, што вялі да старой назвы, можна ўдакладніць аўтаматычна.\nКалі такое аўта-удакладненне не будзе рабіцца, трэба праверыць наяўнасць [[Special:DoubleRedirects|падвойных]] ці [[Special:BrokenRedirects|зламаных]] перасылак.\nАдказнасць за правільную працу спасылак ляжыць на тым, хто пераносіць.\n\nЗаўважце, што старонка '''не будзе''' перанесена, калі пад новай назвай ужо існуе старонка, не пустая і не перасылка і без гісторыі правак. Такім чынам, пры пераносе нельга перапісаць наяўную старонку, а магчымую памылку можна адразу выправіць, пераносячы старонку ў адваротным кірунку.\n\n'''УВАГА!'''\nДля папулярнай старонкі гэта можа стацца рэзкім і нечаканым змяненнем;\nупэўніцеся, што разумееце наступствы пераносу перад тым, як яго зрабіць.",
        "movepagetalktext": "Звязаная старонка размовы будзе аўтаматычна перанесена разам з асноўнай, '''апроч тых выпадкаў, калі:'''\n*Існуе непустая старонка размовы звязаная з новай назвай, або\n*З боксу, што ніжэй, знятая адзнака.\n\nУ такіх выпадках, калі гэта неабходна, трэба пераносіць або аб'ядноўваць старонку размовы самастойна.",
-       "movearticle": "Перанесці старонку",
+       "movearticle": "Перанесці старонку:",
        "moveuserpage-warning": "'''Увага.''' Вы збіраецеся пераназваць старонку ўдзельніка. Калі ласка, звернеце ўвагу, што пераназвана будзе толькі старонка, удзельнік '''не''' будзе пераназваны.",
        "movenologintext": "Вы павінны быць зарэгістраваным удзельнікам, і [[Special:UserLogin|ўвайсці ў сістэму]], каб пераносіць старонкі.",
-       "movenotallowed": "Ð\92ам Ð½Ðµ Ð´Ð°Ð·Ð²Ð¾Ð»ÐµÐ½Ð° Ð¿ÐµÑ\80аноÑ\81Ñ\96Ñ\86Ñ\8c Ñ\81Ñ\82аÑ\80онак.",
+       "movenotallowed": "Ð\92ам Ð½Ðµ Ð´Ð°Ð·Ð²Ð¾Ð»ÐµÐ½Ð° Ð¿ÐµÑ\80аноÑ\81Ñ\96Ñ\86Ñ\8c Ñ\81Ñ\82аÑ\80онкÑ\96.",
        "movenotallowedfile": "Вы не маеце дазволу пераносіць файлы.",
        "cant-move-user-page": "Вам не дазволена пераносіць старонак карыстальнікаў (не лічачы пад-старонак).",
        "cant-move-to-user-page": "Вам не дазволена пераносіць старонку ў старонку карыстальніка (не лічачы пад-старонак карыстальніка).",
        "move-watch": "Назіраць за старонкай",
        "movepagebtn": "Перанесці старонку",
        "pagemovedsub": "Паспяховы перанос",
-       "movepage-moved": "'''\"$1\" перанесена ў \"$2\"'''",
-       "movepage-moved-redirect": "Была створаная перасылка.",
+       "movepage-moved": "<strong>\"$1\" перанесена ў \"$2\"</strong>",
+       "movepage-moved-redirect": "Была створана перасылка.",
        "movepage-moved-noredirect": "Не была створаная перасылка.",
        "articleexists": "Старонка з такой назвай ужо існуе, або\nвамі выбрана недапушчальнае імя.\nВыберыце іншае імя.",
        "cantmove-titleprotected": "Немагчыма перанесці старонку пад гэтую назву, таму што назва ахоўваецца ад стварэння",
-       "movetalk": "Перанесці таксама старонку размовы.",
+       "movetalk": "Перанесці таксама старонку размоў",
        "move-subpages": "Таксама перанесці пад-старонкі (да ўзроўню $1)",
        "move-talk-subpages": "Таксама перанесці пад-старонкі размовы (да ўзроўню $1)",
        "movepage-page-exists": "Старонка $1 ужо існуе і не можа быць аўтаматычна перапісаная.",
        "movepage-page-unmoved": "Не ўдалося перанесці старонку $1 у $2.",
        "movepage-max-pages": "Быў перанесены дазволены максімум $1 {{PLURAL:$1|старонкі|старонак}} і больш аўтаматычных пераносаў не будзе.",
        "movelogpage": "Журнал пераносаў",
-       "movelogpagetext": "Ð\9dÑ\96жÑ\8dй Ð¿Ð°Ð´Ð°ÐµÑ\86Ñ\86а спіс пераносаў старонак.",
+       "movelogpagetext": "Ð\9dÑ\96жÑ\8dй Ð¿Ð°Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8b спіс пераносаў старонак.",
        "movesubpage": "{{PLURAL:$1|Пад-старонка|Пад-старонкі}}",
        "movesubpagetext": "Старонка мае $1 {{PLURAL:$1|пад-старонку, паказаную ніжэй|пад-старонкі, паказаныя ніжэй}}.",
        "movenosubpage": "Старонка не мае пад-старонак.",
        "movereason": "Прычына:",
        "revertmove": "адкат",
-       "delete_and_move": "Ð\92Ñ\8bдалÑ\96Ñ\86Ñ\8c і перанесці",
+       "delete_and_move": "СÑ\86еÑ\80Ñ\86Ñ\96 і перанесці",
        "delete_and_move_text": "==Патрабуецца сціранне==\n\nУжо існуе артыкул з мэтавай назвай \"[[:$1]]\". Дык ці жадаеце сцерці яго, каб зрабіць месца для пераносу?",
        "delete_and_move_confirm": "Так, сцерці старонку",
        "delete_and_move_reason": "Сцёрта, каб зрабіць месца для пераносу \"[[$1]]\"",
        "selfmove": "Назвы вытока і мэты такія самыя; нельга пераносіць старонку саму на сябе.",
        "immobile-source-namespace": "Нельга пераносіць старонкі ў прасторы назваў \"$1\"",
-       "immobile-target-namespace": "Ð\9dелÑ\8cга Ð¿ÐµÑ\80аноÑ\81Ñ\96Ñ\86Ñ\8c Ñ\81Ñ\82аÑ\80онкÑ\96 Ñ\9e Ð¿Ñ\80аÑ\81Ñ\82оÑ\80Ñ\8b назваў \"$1\"",
+       "immobile-target-namespace": "Ð\9dелÑ\8cга Ð¿ÐµÑ\80аноÑ\81Ñ\96Ñ\86Ñ\8c Ñ\81Ñ\82аÑ\80онкÑ\96 Ñ\9e Ð¿Ñ\80аÑ\81Ñ\82оÑ\80Ñ\83 назваў \"$1\"",
        "immobile-target-namespace-iw": "Нельга пераносіць старонку на месца спасылкі інтэрвікі.",
        "immobile-source-page": "Нельга пераносіць гэтую старонку.",
-       "immobile-target-page": "Ð\9dемагÑ\87Ñ\8bма Ð¿ÐµÑ\80аноÑ\81Ñ\96Ñ\86Ñ\8c Ð½Ð° гэтую назву.",
+       "immobile-target-page": "Ð\9dелÑ\8cга Ð¿ÐµÑ\80аноÑ\81Ñ\96Ñ\86Ñ\8c Ð¿Ð°Ð´ гэтую назву.",
        "imagenocrossnamespace": "Нельга пераносіць у не-файлавую прастору назваў",
        "nonfile-cannot-move-to-file": "Немагчыма пераназываць старонкі ў выявы",
        "imagetypemismatch": "Новы канчатак назвы файла не адпавядае яго тыпу",
        "imageinvalidfilename": "Недапушчальная назва мэтавага файла",
        "fix-double-redirects": "Абнавіць усе перасылкі, якія вядуць да пачатковай назвы",
        "move-leave-redirect": "Пакінуць перасылку са старой назвы",
-       "protectedpagemovewarning": "'''Папярэджанне. Гэта старонка была змешчана пад ахову; пераназваць яе могуць толькі ўдзельнікі з паўнамоцтвамі адміністратараў.'''\nНіжэй для даведкі прыведзена апошні запіс журнала:",
-       "semiprotectedpagemovewarning": "'''Заўвага.''' Гэта старонка была змешчана пад ахову; пераназваць яе могуць толькі зарэгістраваныя ўдзельнікі.\nНіжэй для даведкі прыведзена апошні запіс журнала:",
+       "protectedpagemovewarning": "<strong>Папярэджанне:</strong> Гэта старонка была змешчана пад ахову; пераназваць яе могуць толькі ўдзельнікі з паўнамоцтвамі адміністратараў.\nНіжэй для даведкі прыведзена апошні запіс журнала:",
+       "semiprotectedpagemovewarning": "<strong>Заўвага:</strong> Гэта старонка была змешчана пад ахову; пераносіць яе пад іншую назву могуць толькі зарэгістраваныя ўдзельнікі.\nНіжэй для даведкі прыведзена апошні запіс журнала:",
        "move-over-sharedrepo": "== Файл існуе ==\nФайл з назвай [[:$1]] ёсць у агульным сховішчы. Файл, перанесены пад такую назву, будзе перамагаць файл з агульнага сховішча.",
        "file-exists-sharedrepo": "Такая назва файла ўжо выкарыстана ў агульным сховішчы.\nВыберыце іншую назву.",
        "export": "Экспартаваць старонкі",
        "export-addcattext": "Дадаць старонкі з катэгорыі:",
        "export-addcat": "Дадаць",
        "export-addnstext": "Уключыць старонкі з прасторы назваў:",
-       "export-addns": "Ð\94адаÑ\82кова",
+       "export-addns": "Ð\94адаÑ\86Ñ\8c",
        "export-download": "Прапанаваць запісаць у файл",
        "export-templates": "Разам з шаблонамі",
        "export-pagelinks": "Разам са старонкамі, на якія ёсць спасылкі (макс. кольк. крокаў):",
        "allmessages-prefix": "Толькі назвы з такім пачаткам:",
        "allmessages-language": "Мова:",
        "allmessages-filter-submit": "Пошук",
+       "allmessages-filter-translate": "Перакласці",
        "thumbnail-more": "Павялічыць",
        "filemissing": "Адсутны файл",
        "thumbnail_error": "Памылка пры стварэнні драбніцы: $1",
        "import-comment": "Каментарый:",
        "importtext": "Калі ласка, экспартуйце файл з крынічнай вікі з дапамогай [[Special:Export|прылады экспарту]].\nЗахавайце яго на свой камп'ютар, а потым загрузіце сюды.",
        "importstart": "Імпартаванне старонак...",
-       "import-revision-count": "$1 {{PLURAL:$1|версія|версій}}",
+       "import-revision-count": "$1 {{PLURAL:$1|версія|версіі|версій}}",
        "importnopages": "Няма старонак для імпартавання.",
        "imported-log-entries": "{{PLURAL:$1|Імпартаваны $1 запіс журнала|Імпартавана $1 запісы журнала|Імпартавана $1 запісаў журнала}}.",
        "importfailed": "Не ўдалося імпартаваць: $1",
        "importuploaderrorsize": "Не ўдалося атрымаць файл дзеля імпартавання. Аб'ём файла занадта вялікі.",
        "importuploaderrorpartial": "Не ўдалося атрымаць файл дзеля імпартавання. Атрыманы файл няпоўны.",
        "importuploaderrortemp": "Не ўдалося атрымаць файл дзеля імпартавання. Няма тымчасовага каталога.",
-       "import-parse-failure": "Памылка разбірання XML пры імпартаванні",
+       "import-parse-failure": "Памылка аналізу XML пры імпартаванні",
        "import-noarticle": "Няма старонак, каб іх імпартаваць!",
        "import-nonewrevisions": "Усе версіі ўжо былі імпартаваныя раней.",
        "xml-error-string": "$1 у радку $2, знак $3 (байт $4): $5",
        "import-upload": "Укласці даныя XML",
        "import-token-mismatch": "Згублены звесткі пра сеанс. Паспрабуйце ізноў.",
        "import-invalid-interwiki": "Немагчыма імпартаваць з гэтай вікі.",
-       "import-error-edit": "Старонка «$1» не была імпартавана раней, бо вам не дазволена яе рэдагаваць.",
-       "import-error-create": "Старонка «$1» не была імпартавана раней, бо вам не дазволена яе ствараць.",
+       "import-error-edit": "Старонка «$1» не была імпартавана, бо вам не дазволена яе правіць.",
+       "import-error-create": "Старонка «$1» не была імпартавана, бо вам не дазволена яе ствараць.",
        "import-error-interwiki": "Старонка «$1» не была імпартаваная, таму што гэтая назва зарэзерваваная для інтэрвікі.",
        "import-error-special": "Старонка «$1» не была імпартаваная, таму што яна належыць да спецыяльнай прасторы назваў, старонкі ў якой не дазволеныя.",
        "import-error-invalid": "Старонка «$1» не была імпартаваная з-за няслушнасці назвы.",
        "importlogpage": "Журнал імпартаванняў",
        "importlogpagetext": "Адміністрацыйныя імпартаванні старонак з іншых вікі, разам з гісторыямі правак.",
        "import-logentry-upload": "імпартавана [[$1]] праз файлавы ўклад",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|версія|версій}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|версія|версіі|версій}}",
        "import-logentry-interwiki": "транс-вікавана $1",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|версія|версій}} з $2",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|версія|версіі|версій}} з $2",
        "javascripttest": "JavaScript-тэсты",
        "javascripttest-title": "Праводзіцца тэставанне $1",
        "javascripttest-pagetext-noframework": "Гэта старонка зарэзервавана для запуску тэстаў JavaScript",
        "pageinfo-robot-index": "Індэксуюцца",
        "pageinfo-robot-noindex": "Не індэксуюцца",
        "pageinfo-views": "Колькасць праглядаў",
-       "pageinfo-watchers": "Колькасць назіральнікаў",
+       "pageinfo-watchers": "Колькасць назіральнікаў старонкі",
+       "pageinfo-few-watchers": "Менш чым $1 {{PLURAL:$1|назіральнік|назіральнікі|назіральнікаў}}",
+       "pageinfo-redirects-name": "Колькасць перасылак на гэту старонку",
        "pageinfo-lastuser": "Апошні рэдактар",
        "pageinfo-lasttime": "Дата апошняй праўкі",
        "pageinfo-edits": "Агульная колькасць правак",
        "pageinfo-authors": "Агульная колькасць розных аўтараў",
-       "skinname-cologneblue": "Сіні Кёльн",
+       "pageinfo-redirectsto": "Перасылае да",
        "skinname-monobook": "Манабук",
-       "skinname-modern": "Сучаснасць",
        "markaspatrolleddiff": "Пазначыць як ухваленае",
        "markaspatrolledtext": "Пазначыць старонку як ухваленую",
        "markedaspatrolled": "Пазначана як ухваленае",
        "file-info-size-pages": "$1 × $2 пікселяў, памер файла: $3, MIME-тип: $4, $5 {{PLURAL:$5|старонка|старонкі|старонак}}",
        "file-nohires": "Без версіі ў лепшым разрозненні.",
        "svg-long-desc": "файл SVG, намінальна $1 × $2 кропак, аб'ём файла: $3",
-       "show-big-image": "Ð\9dайлепÑ\88ае Ñ\80азÑ\80озненне",
+       "show-big-image": "Ð\90Ñ\80Ñ\8bгÑ\96налÑ\8cнÑ\8b Ñ\84айл",
        "show-big-image-preview": "Памер пры папярэднім праглядзе: $1.",
        "show-big-image-other": "{{PLURAL:$2|Іншы дазвол|Іншыя дазволы}}: $1.",
        "show-big-image-size": "$1 × $2 піхеляў",
        "hours": "{{PLURAL:$1|$1 гадзіна|$1 гадзіны|$1 гадзін}}",
        "days": "{{PLURAL:$1|$1 дзень|$1 дня|$1 дзён}}",
        "ago": "$1 назад",
+       "monday-at": "У панядзелак а $1",
+       "tuesday-at": "У аўторак а $1",
+       "wednesday-at": "У сераду а $1",
+       "thursday-at": "У чацвер а $1",
+       "friday-at": "У пятніцу а $1",
+       "saturday-at": "У суботу а $1",
+       "sunday-at": "У нядзелю а $1",
+       "yesterday-at": "Учора а $1",
        "bad_image_list": "Афармленне гэтага такое:\n\nУлічваюцца толькі складнікі спісаў (радкі, пачатыя з зорачкі *). Першая спасылка ў радку павінна быць спасылкай на кепскую выяву.\nУсе наступныя спасылкі ў тым самым радку лічацца выняткамі, г.зн. старонкамі, у якіх файл можа быць устаўлены ў тэкст.",
        "metadata": "Мета-дадзеныя",
        "metadata-help": "У файле ёсць дадатковыя звесткі, магчыма, дадзеныя лічбавай фотакамерай ці сканерам, з якіх гэты файл паходзіць. Калі арыгінальны файл быў зменены, то частка гэтых звестак магла страціць актуальнасць у дачыненні да змененага файла.",
        "exif-compression-3": "CCITT Group 3, факсавае кадзіраванне",
        "exif-compression-4": "CCITT Group 4, факсавае кадзіраванне",
        "exif-copyrighted-true": "Ахоўваецца аўтарскім правам",
-       "exif-copyrighted-false": "Ð\93Ñ\80амадÑ\81кÑ\96 Ð·Ð´Ð°Ð±Ñ\8bÑ\82ак",
+       "exif-copyrighted-false": "СÑ\82аÑ\82Ñ\83Ñ\81 Ð°Ñ\9eÑ\82аÑ\80Ñ\81Ñ\82ва Ð½Ðµ Ñ\9eÑ\81Ñ\82аноÑ\9eленÑ\8b",
        "exif-unknowndate": "Невядомая дата",
        "exif-orientation-1": "Звычайна",
        "exif-orientation-2": "Адлюстравана злева ўправа",
        "exif-flash-function-1": "Без бліскавіцы",
        "exif-flash-redeye-1": "памяншэнне чырвані вачэй",
        "exif-focalplaneresolutionunit-2": "цаляў",
-       "exif-sensingmethod-1": "Невызначаны",
+       "exif-sensingmethod-1": "Нявызначаны",
        "exif-sensingmethod-2": "1-корпусны плошчавы каляровы датчык",
        "exif-sensingmethod-3": "2-корпусны плошчавы каляровы датчык",
        "exif-sensingmethod-4": "3-корпусны плошчавы каляровы датчык",
        "exif-subjectdistancerange-1": "Макрас",
        "exif-subjectdistancerange-2": "Від зблізу",
        "exif-subjectdistancerange-3": "Від зводдаль",
-       "exif-gpslatitude-n": "паўночная шырата",
-       "exif-gpslatitude-s": "паўднёвая шырата",
-       "exif-gpslongitude-e": "усходняя даўгата",
-       "exif-gpslongitude-w": "заходняя даўгата",
+       "exif-gpslatitude-n": "Ð\9fаўночная шырата",
+       "exif-gpslatitude-s": "Ð\9fаўднёвая шырата",
+       "exif-gpslongitude-e": "Усходняя даўгата",
+       "exif-gpslongitude-w": "Ð\97аходняя даўгата",
        "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|метр|метра|метраў}} над узроўнем мора",
        "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|метр|метра|метраў}} ніжэй узроўня мора",
        "exif-gpsstatus-a": "Адбываецца вымярэнне",
        "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_set": "Нехта (магчыма, вы) з IP-адрасам $1\nпаказаў дадзены адрас электроннай пошты для ўліковага запісу «$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": "Адмовіцца ад пацверджання эл.пошты",
        "scarytranscludedisabled": "[Устаўлянне з іншых вікі не дазволена]",
        "imgmultipagenext": "наступная старонка →",
        "imgmultigo": "Пераход!",
        "imgmultigoto": "На старонку $1",
+       "img-lang-default": "(прадвызначаная мова)",
        "ascending_abbrev": "да больш.",
        "descending_abbrev": "да менш.",
        "table_pager_next": "Наступная старонка",
        "watchlistedit-raw-done": "Спіс назірання абноўлены.",
        "watchlistedit-raw-added": "Дапісаны{{PLURAL:$1| 1 складнік|я $1 складнікаў}}:",
        "watchlistedit-raw-removed": "Выняты{{PLURAL:$1| 1 складнік|я $1 складнікаў}}:",
+       "watchlistedit-clear-legend": "Ачысціць спіс назірання",
+       "watchlistedit-clear-done": "Ваш спіс назірання ачышчаны.",
+       "watchlisttools-clear": "Ачысціць спіс назірання",
        "watchlisttools-view": "Паказаць змяненні",
        "watchlisttools-edit": "Паказаць спіс назірання",
        "watchlisttools-raw": "Паказаць нефарматаваны спіс назірання",
        "version-hook-subscribedby": "Сюды падпісаныя",
        "version-version": "(Версія $1)",
        "version-license": "Ліцэнзія",
+       "version-ext-colheader-description": "Апісанне",
+       "version-ext-colheader-credits": "Аўтары",
+       "version-license-title": "Ліцэнзія $1",
        "version-poweredby-credits": "Пляцоўка працуе на '''[https://www.mediawiki.org/ MediaWiki]''', капірайт © 2001-$1 $2.",
        "version-poweredby-others": "іншыя",
        "version-license-info": "MediaWiki з'яўляецца свабодным праграмным забеспячэннем. Такім чынам, вы можаце паўторна распаўсюджваць прадукт і(або) змяняць яго на ўмовах пагаднення GNU General Public License у тым выглядзе, у якім яно публікуецца фондам Free Software Foundation; сілу мае версія (выпуск) 2 гэтага пагаднення або, на ваш выбар, навейшая версія (выпуск) пагаднення.\n\nMediaWiki распаўсюджваецца, спадзеючыся на прыдатнасць прадукта, але БЕЗ ЯКІХ-НЕБУДЗЬ ГАРАНТЫЙ, у тым ліку, без імплікаваных гарантый СПАЖЫВЕЦКАЙ ВАРТАСЦІ або ПРЫДАТНАСЦІ ДЛЯ ЯКОЙ-НЕБУДЗЬ МЭТЫ. Больш падрабязна гл. пагадненне GNU General Public License.\n\nРазам з гэтым праграмным забеспячэннем вы павінны былі атрымаць [{{SERVER}}{{SCRIPTPATH}}/COPYING копію пагаднення GNU General Public License]. Калі гэта не так, паведамце аб гэтым у фонд Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA або [//www.gnu.org/licenses/old-licenses/gpl-2.0.html атрымайце яе з Інтэрнэту].",
        "fileduplicatesearch-result-n": "Файл \"$1\" мае {{PLURAL:$2|1 ідэнтычны дублікат|$2 ідэнтычных дублікатаў}}.",
        "fileduplicatesearch-noresults": "Не знойдзены файл з іменем «$1».",
        "specialpages": "Адмысловыя старонкі",
+       "specialpages-note-top": "Легенда",
        "specialpages-note": "* Звычайныя адмысловыя старонкі.\n* <span class=\"mw-specialpagerestricted\">Адмысловыя старонкі з абмежаваным доступам.</span>\n* <span class=\"mw-specialpagecached\">Закэшаваныя адмысловыя старонкі (могуць быць састарэлымі).</span>",
        "specialpages-group-maintenance": "Звесткі аб працы",
        "specialpages-group-other": "Іншыя адмысловыя старонкі",
        "htmlform-submit": "Падаць",
        "htmlform-reset": "Адкаціць змяненні",
        "htmlform-selectorother-other": "Рознае",
+       "htmlform-cloner-create": "Дадаць яшчэ",
        "sqlite-has-fts": "$1 з падтрымкай поўна-тэкставага пошуку",
        "sqlite-no-fts": "$1 без падтрымкі поўна-тэкставага пошуку",
        "logentry-delete-delete": "$1 выдаліў старонку $3",
-       "logentry-delete-restore": "$1 аднавіў старонку $3",
-       "logentry-delete-event": "$1 змяніў бачнасць {{PLURAL:$5|$5 запісу журнала|$5 запісаў журнала|$5 запісаў журнала}} на $3: $4",
-       "logentry-delete-revision": "$1 змяніў бачнасць {{PLURAL:$5|$5 версіі|$5 версій|$5 версій}} на старонцы $3: $4",
-       "logentry-delete-event-legacy": "$1 змяніў бачнасць запісаў журнала $3",
-       "logentry-delete-revision-legacy": "$1 змяніў бачнасць версій на старонцы $3",
-       "logentry-suppress-delete": "$1 падавіў старонку $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|аднавіў|аднавіла}} старонку $3",
+       "logentry-delete-event": "$1 {{GENDER:$2|змяніў|змяніла}} бачнасць {{PLURAL:$5|запісу журнала|$5 запісаў журнала}} $3: $4",
+       "logentry-delete-revision": "$1 {{GENDER:$2|змяніў|змяніла}} бачнасць {{PLURAL:$5|версіі|$5 версій|$5 версій}} старонкі $3: $4",
+       "logentry-delete-event-legacy": "$1 {{GENDER:$2|змяніў|змяніла}} бачнасць запісаў журнала $3",
+       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|змяніў|змяніла}} бачнасць версій на старонцы $3",
+       "logentry-suppress-delete": "$1 {{GENDER:$2|заглушыў|заглушыла}} старонку $3",
        "logentry-suppress-event": "$1 утойліва змяніў бачнасць {{PLURAL:$5|$5 запіс часопіса|$5 запісы часопіса |$5 запісаў часопіса}} на $3: $4",
        "logentry-suppress-revision": "$1 утойліва змяніў бачнасць {{PLURAL:$5|$5 версію|$5 версіі|$5 версій}} на старонцы $3: $4",
        "logentry-suppress-event-legacy": "$1 утойліва змяніў бачнасць запісаў журнала $3",
        "logentry-newusers-newusers": "$1 стварыў уліковы запіс удзельніка",
        "logentry-newusers-create": "$1 стварыў уліковы запіс удзельніка",
        "logentry-newusers-create2": "$1 стварыў уліковы запіс удзельніка $3",
-       "logentry-newusers-autocreate": "Аўтаматычна створаны ўліковы запіс $1",
+       "logentry-newusers-autocreate": "Аўтаматычна створаны ўліковы запіс удзельніка $1",
        "rightsnone": "(няма)",
        "feedback-bugornote": "Калі вы гатовыя падрабязна апісаць тэхнічную праблему, калі ласка, [$1 паведаміце пра памылку].\nУ адваротным выпадку вы можаце выкарыстоўваць гэтую простую форму. Ваш каментар будзе дададзены на старонку «[$3 $2]» разам з вашым імем удзельніка і выкарыстоўваемым браўзерам.",
        "feedback-subject": "Тэма:",
        "api-error-file-too-large": "Дасланы Вамі файл занадта вялікі.",
        "api-error-filename-tooshort": "Імя файла занадта кароткае.",
        "api-error-filetype-banned": "Гэты тып файлаў забаронены.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|належыць да недазволенага тыпу файлаў|належаць да недазволеных тыпаў файлаў}}. Пералік дазволеных тыпаў складаецца з {{PLURAL:$3|тыпа|тыпаў}}: $2.",
+       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|належыць да недазволенага тыпу файлаў|належаць да недазволеных тыпаў файлаў}}. Пералік дазволеных тыпаў складаецца з {{PLURAL:$3|тыпу|тыпаў}}: $2.",
        "api-error-filetype-missing": "У файла няма пашырэння.",
        "api-error-hookaborted": "Прапанаванае вамі змяненне было адменена ў апрацоўшчыку пашырэння.",
        "api-error-http": "Унутраная памылка: немагчыма далучыцца да сервера.",
        "api-error-unknown-warning": "Невядомае папярэджанне: $1",
        "api-error-unknownerror": "Невядомая памылка: «$1».",
        "api-error-uploaddisabled": "Загрузка ў гэтую вікі адключаная.",
-       "api-error-verification-error": "Гэты файл можа быць пашкоджаны, ці мае няслушнае пашырэнне."
+       "api-error-verification-error": "Гэты файл можа быць пашкоджаны, ці мае няслушны канчатак назвы.",
+       "duration-seconds": "$1 {{PLURAL:$1|секунда|секунды|секундаў}}",
+       "duration-minutes": "$1 {{PLURAL:$1|мінута|мінуты|мінут}}",
+       "duration-hours": "$1 {{PLURAL:$1|гадзіна|гадзіны|гадзін}}",
+       "duration-days": "$1 {{PLURAL:$1|дзень|дні|дзён}}",
+       "duration-weeks": "$1 {{PLURAL:$1|тыдзень|тыдні|тыдняў}}",
+       "duration-years": "$1 {{PLURAL:$1|год|гады|гадоў}}",
+       "duration-decades": "$1 {{PLURAL:$1|дзесяцігоддзе|дзесяцігоддзі|дзесяцігоддзяў}}",
+       "duration-centuries": "$1 {{PLURAL:$1|стагоддзе|стагоддзі|стагоддзяў}}",
+       "duration-millennia": "$1 {{PLURAL:$1|тысячагоддзе|тысячагоддзі|тысячагоддзяў}}",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунды|секундаў}}",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунды|секундаў}}",
+       "expand_templates_remove_comments": "Сцерці каментарыі",
+       "expand_templates_preview": "Перадпаказ"
 }
index 1763074..e334f2a 100644 (file)
        "searchmenu-exists": "'''Съществува страница с името „[[:$1]]“ в това уики.'''",
        "searchmenu-new": "'''Създаване на страницата „[[:$1]]“ в това уики!'''",
        "searchprofile-articles": "Съдържателни страници",
-       "searchprofile-project": "Помощни и проектни страници",
        "searchprofile-images": "Мултимедия",
        "searchprofile-everything": "Всичко",
        "searchprofile-advanced": "Разширено търсене",
        "searchprofile-articles-tooltip": "Търсене в $1",
-       "searchprofile-project-tooltip": "Търсене в $1",
        "searchprofile-images-tooltip": "Търсене на файлове",
        "searchprofile-everything-tooltip": "Търсене в цялото съдържание (вкл. беседи)",
        "searchprofile-advanced-tooltip": "Търсене в избрани именни пространства",
        "search-interwiki-default": "$1 резултата:",
        "search-interwiki-more": "(още)",
        "search-relatedarticle": "Свързани",
-       "searcheverything-enable": "Търсене във всички именни пространства",
        "searchrelated": "свързани",
        "searchall": "всички",
        "showingresults": "Показване на до {{PLURAL:$1|'''1''' резултат|'''$1''' резултата}}, като се започва от номер '''$2'''.",
        "allowemail": "Възможност за получаване на писма от други потребители",
        "prefs-searchoptions": "Търсене",
        "prefs-namespaces": "Именни пространства",
-       "defaultns": "Или търсене в следните именни пространства:",
        "default": "по подразбиране",
        "prefs-files": "Файлове",
        "prefs-custom-css": "Личен CSS",
        "prefs-emailconfirm-label": "Потвърждаване на адрес за е-поща:",
        "youremail": "Е-поща:",
        "username": "{{GENDER:$1|Потребителско име}}:",
-       "uid": "{{GENDER:$1|Потребителски}} номер:",
        "prefs-memberingroups": "{{GENDER:$2|Член}} на {{PLURAL:$1|група|групи}}:",
        "prefs-registration": "Регистрация:",
        "yourrealname": "Истинско име:",
        "recentchanges-label-unpatrolled": "Тази редакция все още не е проверена",
        "recentchanges-label-plusminus": "Размерът на страницата е променен с този брой байтове",
        "recentchanges-legend-heading": "'''Легенда:'''",
-       "recentchanges-legend-newpage": "(вижте също [[Special:NewPages|списъка с нови страници]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (вижте също [[Special:NewPages|списъка с нови страници]])",
        "rcnotefrom": "Дадени са промените от <strong>$2</strong> (до <strong>$1</strong> показани).",
        "rclistfrom": "Показване на промени, като се започва от $3 $2",
        "rcshowhideminor": "$1 на малки промени",
        "logempty": "Дневникът не съдържа записи, отговарящи на избрания критерий.",
        "log-title-wildcard": "Търсене на заглавия, започващи със",
        "allpages": "Всички страници",
-       "alphaindexline": "от $1 до $2",
        "nextpage": "Следваща страница ($1)",
        "prevpage": "Предходна страница ($1)",
        "allpagesfrom": "Показване на страниците, като се започва от:",
        "listgrouprights-removegroup-self": "Може да премахва {{PLURAL:$2|група|групи}} от собствената си сметка: $1",
        "listgrouprights-addgroup-self-all": "Може да добавя всички групи към своята сметка",
        "listgrouprights-removegroup-self-all": "Може да премахва всички групи от собствената сметка",
+       "listgrouprights-namespaceprotection-namespace": "Именно пространство",
        "mailnologin": "Няма електронна поща",
        "mailnologintext": "Необходимо е да [[Special:UserLogin|влезете]] и да посочите валидна електронна поща в [[Special:Preferences|настройките]] си, за да може да пращате писма на други потребители.",
        "emailuser": "Писмо до потребителя",
        "pageinfo-category-pages": "Брой страници",
        "pageinfo-category-subcats": "Брой подкатегории",
        "pageinfo-category-files": "Брой файлове",
-       "skinname-cologneblue": "Кьолнско синьо",
        "skinname-monobook": "Монобук",
-       "skinname-modern": "Модерен",
        "markaspatrolleddiff": "Отбелязване като проверена редакция",
        "markaspatrolledtext": "Отбелязване на редакцията като проверена",
        "markedaspatrolled": "Проверена редакция",
        "newimages-summary": "Тази специална страница показва последно качените файлове.",
        "newimages-legend": "Име на файл",
        "newimages-label": "Име на файл (или част от него):",
+       "newimages-showbots": "Показване на качвания от ботове",
        "noimages": "Няма нищо.",
        "ilsubmit": "Търсене",
        "bydate": "по дата",
        "watchlistedit-raw-done": "Списъкът ви за наблюдение беше обновен.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 страница беше добавена|$1 страници бяха добавени}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Една страница беше премахната|$1 страници бяха премахнати}}:",
+       "watchlisttools-clear": "Изчистване на списъка за наблюдение",
        "watchlisttools-view": "Преглед на списъка за наблюдение",
        "watchlisttools-edit": "Преглед и редактиране на списъка за наблюдение",
        "watchlisttools-raw": "Редактиране на необработения списък за наблюдение",
        "htmlform-no": "Не",
        "htmlform-yes": "Да",
        "htmlform-chosen-placeholder": "Избиране",
+       "htmlform-cloner-create": "Добавяне на още",
+       "htmlform-cloner-delete": "Премахване",
        "sqlite-has-fts": "$1 с поддръжка на пълнотекстово търсене",
        "sqlite-no-fts": "$1 без поддръжка на пълнотекстово търсене",
        "logentry-delete-delete": "$1 {{GENDER:$2|изтри}} страницата $3",
index 24510b8..c76d3b9 100644 (file)
@@ -36,8 +36,8 @@
        "tog-editsectiononrightclick": "পরিচ্ছেদের শিরোনামে ডান ক্লিকের মাধ্যমে সম্পাদনা করার ক্ষমতা দেয়া হোক",
        "tog-watchcreations": "আমার তৈরি পাতা এবং আপলোড করা ফাইলগুললো আমার নজরতালিকায় যোগ করা হোক",
        "tog-watchdefault": "আমার সম্পাদিত পাতা এবং ফাইলগুলো আমার নজরতালিকায় যোগ করা হোক",
-       "tog-watchmoves": "à¦\86মার à¦¸à¦°à¦¿à¦¯à¦¼à§\87 à¦«à§\87লা পাতা এবং ফাইলগুলো আমার নজরতালিকায় যোগ করা হোক",
-       "tog-watchdeletion": "à¦\86মার à¦®à§\81à¦\9bà§\87 à¦«à§\87লা পাতা এবং ফাইলগুলো আমার নজর তালিকায় যোগ করা হোক",
+       "tog-watchmoves": "à¦\86মার à¦¸à§\8dথানানà§\8dতরিত পাতা এবং ফাইলগুলো আমার নজরতালিকায় যোগ করা হোক",
+       "tog-watchdeletion": "à¦\86মার à¦\85পসারিত পাতা এবং ফাইলগুলো আমার নজর তালিকায় যোগ করা হোক",
        "tog-minordefault": "শুরুতেই সব সম্পাদনাকে অনুল্লেখ্য বলে চিহ্নিত করা হোক",
        "tog-previewontop": "সম্পাদনা বাক্সের আগে প্রাকদর্শন দেখানো হোক",
        "tog-previewonfirst": "প্রথম সম্পাদনার ক্ষেত্রে প্রাকদর্শন দেখানো হোক",
        "vector-view-view": "পড়ুন",
        "vector-view-viewsource": "উৎস দেখুন",
        "actions": "কার্যক্রম",
+       "vector-more-actions": "আরও",
        "namespaces": "নামস্থান",
        "variants": "বিকল্পসমূহ",
        "navigation-heading": "পরিভ্রমণ মেনু",
        "jumptonavigation": "পরিভ্রমণ",
        "jumptosearch": "অনুসন্ধান",
        "view-pool-error": "দুঃখিত, সার্ভারে এ মূহুর্তে অতিরিক্ত চাপ রয়েছে।\nঅনেক বেশি সংখ্যক ব্যবহারকারী এই পাতাটি দেখার চেষ্টা করছেন।\nনতুন করে এ পাতাটি দেখার চেষ্টা করার আগে কিছুক্ষণ অপেক্ষা করুন।\n\n$1",
+       "generic-pool-error": "দুঃখিত, সার্ভারে এ মূহুর্তে অতিরিক্ত চাপ রয়েছে।\nঅনেক বেশি সংখ্যক ব্যবহারকারী এই পাতাটি দেখার চেষ্টা করছেন।\nনতুন করে এ পাতাটি দেখার চেষ্টা করার আগে কিছুক্ষণ অপেক্ষা করুন।",
        "pool-timeout": "সময় উত্তির্ণ লক-এর জন্য অপেক্ষারত",
        "pool-queuefull": "পুলের লাইন পূর্ণ",
        "pool-errorunknown": "অজানা ত্রুটি",
        "aboutsite": "{{SITENAME}} বৃত্তান্ত",
        "aboutpage": "Project:বৃত্তান্ত",
-       "copyright": "$1 এর আওতায় প্রকাশিত যদি অন্য কিছু নির্ধারিত না থাকে।",
+       "copyright": "বিষয়বস্তু $1-এর আওতায় প্রকাশিত যদি না অন্য কিছু নির্ধারিত থাকে।",
        "copyrightpage": "{{ns:project}}:কপিরাইট",
        "currentevents": "সমসাময়িক ঘটনা",
        "currentevents-url": "Project:সমসাময়িক ঘটনাসমূহ",
        "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|অবদানকারী}}",
        "nouserspecified": "আপনাকে অবশ্যই ব্যবহারকারী নাম নির্দিষ্ট করতে হবে।",
        "login-userblocked": "এই ব্যবহারকারীকে বাধা দেওয়া হয়েছে। লগ-ইন সম্ভব নয়।",
        "wrongpassword": "আপনি ভুল শব্দচাবি ব্যবহার করেছেন। অনুগ্রহ করে আবার চেষ্টা করুন।",
-       "wrongpasswordempty": "শব্দচাবি (password) প্রবেশের ঘরটি খালি ছিল। দয়াকরে আবার চেষ্টা করুন।",
+       "wrongpasswordempty": "শব্দচাবি (password) প্রবেশের ঘরটি খালি ছিল। দয়া করে আবার চেষ্টা করুন।",
        "passwordtooshort": "শব্দচাবি অবশ্যই {{PLURAL:$1|১ অক্ষরের|$1 অক্ষরের}} হতে হবে।",
        "password-name-match": "আপনার শব্দচাবি আপনার ব্যবহারকারী নাম থেকে আলাদা হতে হবে।",
        "password-login-forbidden": "এই ব্যবহারকারীর নাম এবং শব্দচাবিটি ব্যবহার নিষিদ্ধ করা হয়েছে।",
        "passwordsent": "একটি নতুন শব্দচাবি \"$1\" ব্যবহারকারীর ই-মেইল ঠিকানায় পাঠানো হয়েছে। দয়াকরে তা পাওয়ার পর আবার লগ-ইন করুন।",
        "blocked-mailpassword": "আপনার আইপি ঠিকানাটি থেকে সম্পাদনা করতে বাধা আছে, তাই এই ঠিকানার অপব্যবহার করে শব্দচাবি ফেরত আনতে দেয়া যাবে না।",
        "eauthentsent": "মনোনীত ই-মেইল ঠিকানায় একটি নিশ্চিতকরণ ই-মেইল পাঠানো হয়েছে।\nঐ অ্যাকাউন্টটে অন্য কোন ই-মেইল পাঠানোর আগে আপনাকে ই-মেইলের নির্দেশগুলি অনুসরণ করতে হবে, যাতে অ্যাকাউন্টটি যে আসলেই আপনার, তা নিশ্চিত হয়।",
-       "throttled-mailpassword": "বিà¦\97ত {{PLURAL:$1|à¦\98নà§\8dà¦\9fার|$1 à¦\98নà§\8dà¦\9fার}} à¦®à¦§à§\8dযà§\87 à¦\87তিমধà§\8dযà§\87à¦\87 à¦\8fà¦\95বার à¦¶à¦¬à§\8dদà¦\9aাবি à¦¬à¦¦à¦²à§\87র à¦¤à¦¥à§\8dয à¦ªà¦¾à¦ à¦¾à¦¨à§\8b à¦¹à¦¯à¦¼à§\87à¦\9bà§\87। à¦\85পবà§\8dযবহার à¦°à§\8bধà§\87 à¦ªà§\8dরতি {{PLURAL:$1|à¦\98নà§\8dà¦\9fায়|$1 à¦\98ন্টায়}} কেবল একবার শব্দচাবি বদলের তথ্য পাঠানো যাবে।",
+       "throttled-mailpassword": "বিà¦\97ত {{PLURAL:$1|à¦\98ণà§\8dà¦\9fার|$1 à¦\98ণà§\8dà¦\9fার}} à¦®à¦§à§\8dযà§\87 à¦\87তিমধà§\8dযà§\87à¦\87 à¦\8fà¦\95বার à¦¶à¦¬à§\8dদà¦\9aাবি à¦¬à¦¦à¦²à§\87র à¦¤à¦¥à§\8dয à¦ªà¦¾à¦ à¦¾à¦¨à§\8b à¦¹à¦¯à¦¼à§\87à¦\9bà§\87। à¦\85পবà§\8dযবহার à¦°à§\8bধà§\87 à¦ªà§\8dরতি {{PLURAL:$1|à¦\98ণà§\8dà¦\9fায়|$1 à¦\98ণ্টায়}} কেবল একবার শব্দচাবি বদলের তথ্য পাঠানো যাবে।",
        "mailerror": "ইমেইল পাঠাতে সমস্যা: $1",
        "acct_creation_throttle_hit": "এই উইকির দর্শক আপনার IP থেকে বিগত সময়ে {{PLURAL:$1|1 টি অ্যাকাউন্ট|$1 গুলো অ্যাকাউন্ট}} তৈরি করেছেন, যা এই সময়ের জন্য সর্বোচ্চ অনুমোদনকৃত।\nফলে, এই IP থেকে দর্শক এই সময়ে নতুন অ্যাকাউন্ট তৈরি করতে পারবেন না।",
        "emailauthenticated": "আপনার ইমেইল ঠিকানাটি $2 তারিখের $3 এ নিশ্চিত করা হয়েছে।",
        "extlink_tip": "বহিঃসংযোগ (মনে রাখবেন http:// উপসর্গ)",
        "headline_sample": "শিরোনাম",
        "headline_tip": "২য় স্তরের শিরোনাম",
-       "nowiki_sample": "à¦\85-ফরমà§\8dযাà¦\9fà¦\95à§\83ত à¦\9fà§\87à¦\95à§\8dসà¦\9f à¦\8fà¦\96ানà§\87 à¦ªà§\8dরবিষà§\8dà¦\9f করুন",
+       "nowiki_sample": "à¦\85-ফরমà§\8dযাà¦\9fà¦\95à§\83ত à¦\9fà§\87à¦\95à§\8dসà¦\9f à¦\8fà¦\96ানà§\87 à¦¯à§\8bà¦\97 করুন",
        "nowiki_tip": "উইকি ফরম্যাটিং উপেক্ষা করা হোক",
        "image_sample": "উদাহরণ.jpg",
        "image_tip": "গ্রথিত ফাইল",
        "templatesusedsection": "এই অনুচ্ছেদে ব্যবহৃত {{PLURAL:$1|টেমপ্লেট|টেমপ্লেটসমূহ}}:",
        "template-protected": "(সুরক্ষিত)",
        "template-semiprotected": "(অর্ধ-সুরক্ষিত)",
-       "hiddencategories": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি {{PLURAL:$1|১à¦\9fি à¦²à§\81à¦\95ায়িত à¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§\8dরà§\87ণà§\80র|$1à¦\9fি à¦²à§\81à¦\95ায়িত à¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§\8dরà§\87ণà§\80সমà§\82হà§\87র}} à¦¸à¦¦à¦¸à§\8dয:",
+       "hiddencategories": "এই পাতাটি {{PLURAL:$1|১টি লুকায়িত বিষয়শ্রেণীর|$1টি লুকায়িত বিষয়শ্রেণীর}} সদস্য:",
        "edittools-upload": "-",
        "nocreatetext": "{{SITENAME}}-এ নতুন পাতা সৃষ্টি করার ক্ষমতা সীমাবদ্ধ করা হয়েছে।\nআপনি ফিরে গিয়ে ইতিমধ্যে বিদ্যমান কোন পাতা সম্পাদনা করতে পারেন, অথবা [[Special:UserLogin|অ্যাকাউন্টে প্রবেশ কিংবা অ্যাকাউন্ট সৃষ্টি করতে পারেন]]।",
        "nocreate-loggedin": "নতুন পাতা তৈরিতে আপনাকে অনুমোতি দেওয়া হয়নি।",
        "currentrev": "সর্বশেষ সংস্করণ",
        "currentrev-asof": "$1 তারিখে সম্পাদিত বর্তমান সংস্করণ",
        "revisionasof": "$1 তারিখের সংস্করণ",
-       "revision-info": "$1-এ $2-এর করা সংশোধন",
+       "revision-info": "$2 কর্তৃক $1 পর্যন্ত সংস্করণে $7",
        "previousrevision": "←পুর্বের সংস্করণ",
        "nextrevision": "পরবর্তী সংস্করণ→",
        "currentrevisionlink": "সর্বশেষ সংস্করণ",
        "revdelete-show-file-confirm": "আপনি কি নিশ্চিত যে \"<nowiki>$1</nowiki>\" ফাইলের $2 তারিখের $3 টার অপসারণ লগ দেখানো হবে?",
        "revdelete-show-file-submit": "হ্যাঁ",
        "revdelete-selected-text": "[[:$2]] পাতার {{PLURAL:$1|নির্বাচিত সংশোধন|নির্বাচিত সংশোধনসমূহ}}:",
+       "revdelete-selected-file": "[[:$2]]-এর {{PLURAL:$1|নির্বাচিত ফাইল সংস্করণ|নির্বাচিত ফাইল সংস্করণগুলি}}:",
        "logdelete-selected": "{{PLURAL:$1|টি নির্বাচিত লগ-ঘটনা|টি নির্বাচিত লগ-ঘটনা}}:",
+       "revdelete-text-text": "অপসারিত সংস্করণসমূহ এখনও পাতা ইতিহাসে প্রদর্শিত হয়, কিন্তু সেই বিষয়বস্তুর অংশগুলি সর্বসাধারণ দেখতে পারবে না।",
+       "revdelete-text-file": "অপসারিত ফাইলের সংস্করণসমূহ এখনও ফাইল ইতিহাসে প্রদর্শিত হয়, কিন্তু সেই বিষয়বস্তুর অংশগুলি সর্বসাধারণ দেখতে পারবে না।",
+       "logdelete-text": "অপসারিত লগ ইভেন্টসমূহ এখনও লগে প্রদর্শিত হয়, কিন্তু সেই বিষয়বস্তুর অংশগুলি সর্বসাধারণ দেখতে পারেবে না।",
        "revdelete-confirm": "অনুগ্রহ করে নিশ্চিত করুন যে আপনি এটি করতে চাচ্ছিলেন, আপনি এর ফলাফল সম্পর্কে অবগত আছেন, এবং [[{{MediaWiki:Policy-url}}|নীতিমালার]] উপর ভিত্তি করেই এই কাজটি করছেন।",
        "revdelete-suppress-text": "নিচের বিষয়গুলোর ক্ষেত্রেই '''কেবলমাত্র'''  চাপাচাপি করা যাবে:\n* সম্ভাব্য মানহানিকর তথ্য\n* ভুল ব্যক্তিগত তথ্য\n*: ''বাসার ঠিকানা এবং ফোন নম্বর, সোসাল সিকিউরিটি নম্বর, ইত্যাদি।''",
        "revdelete-legend": "দৃষ্টিপাত সীমাবদ্ধ করো",
        "searchmenu-exists": "'''এই উইকিতে \"[[:$1]]\" নামে একটি পাতা রয়েছে'''",
        "searchmenu-new": "<strong>\"[[:$1]]\" পাতাটি এই উইকিতে তৈরি করুন!</strong> {{PLURAL:$2|0=|এছাড়া আপনার অনুসন্ধানের সাথে পাওয়া পাতা দেখুন।|এছাড়া অনুসন্ধানে পাওয়া ফলাফলগুলি দেখুন।}}",
        "searchprofile-articles": "বিষয়বস্তুর পাতা",
-       "searchprofile-project": "সহায়িকা এবং প্রকল্প পাতা",
        "searchprofile-images": "মাল্টিমিডিয়া",
        "searchprofile-everything": "সমস্তকিছু",
        "searchprofile-advanced": "উচ্চতর",
        "searchprofile-articles-tooltip": "$1 এ অনুসন্ধান",
-       "searchprofile-project-tooltip": "$1 এ অনুসন্ধান",
        "searchprofile-images-tooltip": "ফাইলের জন্য অনুসন্ধান",
        "searchprofile-everything-tooltip": "সকল বিষয়বস্তু অনুসন্ধান করো (আলাপের পাতা সহ)",
        "searchprofile-advanced-tooltip": "স্বনির্ধারিত নামস্থানে অনুসন্ধান করো",
        "search-result-size": "$1 ({{PLURAL:$2|১টি শব্দ|$2টি শব্দ}})",
-       "search-result-category-size": "{{PLURAL:$1 | 1 সদস্য | $1 সদস্যবৃন্দ}} ({{PLURAL:$2 | 1 উপবিষয়শ্রেণীটি | $2 টি}}, {{PLURAL:$3 | 1 ফাইল | $3 ফাইল}})",
+       "search-result-category-size": "{{PLURAL:$1 |১টি সদস্য |$1টি সদস্য}} ({{PLURAL:$2 |১টি উপবিষয়শ্রেণী|$2টি উপবিষয়শ্রেণী}}, {{PLURAL:$3 |১টি ফাইল |$3টি ফাইল}})",
        "search-result-score": "মিলেছে: $1%",
        "search-redirect": "(পুনর্নিদেশনা $1)",
        "search-section": "(অনুচ্ছেদ $1)",
        "search-interwiki-default": "$1 থেকে ফলাফলসমূহ:",
        "search-interwiki-more": "(আরও)",
        "search-relatedarticle": "সম্পর্কিত",
-       "searcheverything-enable": "সকল নামস্থানে অনুসন্ধান করো",
        "searchrelated": "সম্পর্কিত",
        "searchall": "সমস্ত",
        "showingresults": "নিচে '''$2''' নং থেকে শুরু করে {{PLURAL:$1|'''1''' ফলাফল|'''$1''' ফলাফলসমূহ}} দেখানো হল।",
        "allowemail": "অন্য ব্যবহারকারীদেরকে আপনাকে ই-মেইল পাঠানোর অনুমতি দিন।",
        "prefs-searchoptions": "অনুসন্ধান",
        "prefs-namespaces": "নামস্থানসমূহ",
-       "defaultns": "নতুবা এই নামস্থানগুলিতে অনুসন্ধান করো:",
        "default": "আদি অবস্থা",
        "prefs-files": "ফাইল",
        "prefs-custom-css": "স্বনির্ধারিত CSS",
        "right-move": "পাতা সরান",
        "right-move-subpages": "পাতাগুলোকে তার উপপাতাসহ সরিয়ে নিন",
        "right-move-rootuserpages": "root ব্যবহারকারীর পাতাগুলো সরিয়ে ফেলুন",
+       "right-move-categorypages": "বিষয়শ্রেণী পাতাসমূহ স্থানান্তর করুন",
        "right-movefile": "ফাইল স্থানান্তর",
        "right-suppressredirect": "পাতা স্থানান্তরের সময় মূল পাতায় রিডাইরেক্ট তৈরী করছে না",
        "right-upload": "ফাইল আপলোড করুন",
        "action-createpage": "পাতা তৈরি করো",
        "action-createtalk": "আলাপের পাতা তৈরি করো",
        "action-createaccount": "এই ব্যবহারকারী একাউন্টটি তৈরি করো",
+       "action-history": "এই পাতার ইতিহাস দেখাও",
        "action-minoredit": "এই সম্পাদনাটি অনুল্লেখ্য হিসেবে চিহ্নিত করো",
        "action-move": "পাতাটি সরিয়ে ফেলুন",
        "action-move-subpages": "পাতাটি এবং এর উপপাতাগুলো সরিয়ে ফেলুন",
        "action-move-rootuserpages": "root ব্যবহারকারীর পাতাগুলো সরিয়ে ফেলুন",
+       "action-move-categorypages": "বিষয়শ্রেণী পাতাসমূহ স্থানান্তর করুন",
        "action-movefile": "এই ফাইলটি সরিয়ে ফেলুন",
        "action-upload": "এই ফাইল আপলোড করো",
        "action-reupload": "বিদ্যমান ফাইল প্রতিস্থাপন করো",
        "recentchanges-label-unpatrolled": "এই সম্পাদনাটি এখনও পরীক্ষিত নয়",
        "recentchanges-label-plusminus": "পাতার আকারে এই পরিমান বাইট পরিবর্তিত হয়েছে",
        "recentchanges-legend-heading": "'''ব্যাখ্যামূলক বর্ণনা:'''",
-       "recentchanges-legend-newpage": "(আরও দেখুন [[Special:NewPages|নতুন পাতার তালিকা]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (আরও দেখুন [[Special:NewPages|নতুন পাতার তালিকা]])",
        "recentchanges-legend-plusminus": "(''±১২৩'')",
        "rcnotefrom": "<strong>$2</strong>টা থেকে সংঘটিত পরিবর্তনগুলি (সর্বোচ্চ <strong>$1টি</strong> দেখানো হয়েছে)",
        "rclistfrom": "$2, $3 তারিখের পর সংঘটিত নতুন পরিবর্তনগুলো দেখাও",
        "pageswithprop-prophidden-binary": "বাইনারি প্রোপার্টি টেক্সটগুলো লুকানো রয়েছে ($1)",
        "doubleredirects": "দুইবার করা পুনর্নির্দেশনাগুলি",
        "doubleredirectstext": "এই পাতায় এমন পাতাগুলোর তালিকা আছে, যেগুলো অন্য কোন পুনর্নির্দেশনা পাতায় পুনর্নির্দেশিত হয়েছে। প্রতিটি সারিতে প্রথম ও দ্বিতীয় পুনর্নির্দেশনার জন্য সংযোগ আছে এবং দ্বিতীয় পুনর্নির্দেশনাটির লক্ষ্য সংযোগটিও দেওয়া আছে। এই লক্ষ্য সংযোগটিই সাধারণত \"আসল\" লক্ষ্য পাতা, যেটিতে প্রথম পুনর্নির্দেশনাটি থেকে সংযোগ থাকা উচিত।\n<del>কেটে দেওয়া</del> ভুক্তিগুলো ঠিক করা হয়েছে।",
-       "double-redirect-fixed-move": "[[$1]] সরিয়ে নেওয়া হয়েছে।\nএটি এখন [[$2]] এ পুনঃনির্দেশিত হয়েছে।",
-       "double-redirect-fixed-maintenance": "[[$1]] থেকে [[$2]] এর দ্বিপুনঃর্নিদেশ সংশোধন করা হয়েছে।",
+       "double-redirect-fixed-move": "[[$1]] à¦¸à¦°à¦¿à¦¯à¦¼à§\87 à¦¨à§\87à¦\93য়া à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।\nà¦\8fà¦\9fি à¦¸à§\8dবয়à¦\82à¦\95à§\8dরিয়ভাবà§\87 à¦¹à¦¾à¦²à¦¨à¦¾à¦\97াদ à¦¹à¦¯à¦¼à§\87à¦\9bà§\87 à¦\8fবà¦\82 à¦\8fà¦\9fি à¦\8fà¦\96ন [[$2]] à¦\8f à¦ªà§\81নà¦\83নিরà§\8dদà§\87শিত à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।",
+       "double-redirect-fixed-maintenance": "রক্ষণাবেক্ষণ কাজ হিসাবে [[$1]] থেকে [[$2]] এর দ্বিপুনঃর্নিদেশ স্বয়ংক্রিয়ভাবে সংশোধন করা হয়েছে।",
        "double-redirect-fixer": "পুনঃনির্দেশনা মেরামতকারী",
        "brokenredirects": "অকার্যকর পুনর্নির্দেশনাসমূহ",
        "brokenredirectstext": "নিচের পুনর্নির্দেশনাগুলো অস্তিত্বহীন পাতাকে নির্দেশ করছে:",
        "ncategories": "$1 {{PLURAL:$1|বিষয়শ্রেণী|বিষয়শ্রেণীসমূহ}}",
        "ninterwikis": "$1 {{PLURAL:$1|ইন্টারউইকি|ইন্টারউইকিসমূহ}}",
        "nlinks": "$1টি {{PLURAL:$1|সংযোগ|সংযোগসমূহ}}",
-       "nmembers": "$1 {{PLURAL:$1|সদস্য|সদস্যবৃন্দ}}",
+       "nmembers": "$1টি {{PLURAL:$1|সদস্য}}",
        "nmemberschanged": "$1 জন → $2 জন {{PLURAL:$2|সদস্য}}",
        "nrevisions": "$1 {{PLURAL:$1|সংশোধন|সংশোধনসমূহ}}",
        "nviews": "$1 {{PLURAL:$1|বার দেখা হয়েছে|বার দেখা হয়েছে}}",
        "deadendpagestext": "নিচের পাতাগুলি থেকে {{SITENAME}}-এর অন্য কোন পাতায় সংযোগ নেই।",
        "protectedpages": "সুরক্ষিত পাতাসমূহ",
        "protectedpages-indef": "শুধুমাত্র অসীম সুরক্ষা",
+       "protectedpages-summary": "এই পাতাটি বর্তমানে সুরক্ষিত থাকা বিদ্যমান পাতগুলির তালিকা। সৃষ্টি করা থেকে সুরক্ষিত রয়েছে এমন পাতার তালিকার জন্য, [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] দেখুন।",
        "protectedpages-cascade": "শুধুমাত্র প্রপাতাকার সুরক্ষা",
        "protectedpages-noredirect": "পুনর্নির্দেশনাগুলো লুকাও",
        "protectedpagesempty": "কোন পাতা বর্তমানে এই প্যারামিটারগুলিসহ সুরক্ষিত নয়।",
+       "protectedpages-timestamp": "সময়বার্তা",
        "protectedpages-page": "পাতা",
+       "protectedpages-expiry": "মেয়াদোত্তীর্ণ হবে",
        "protectedpages-performer": "ব্যবহারকারীকে সুরক্ষিত করা হচ্ছে",
        "protectedpages-params": "সুরক্ষা প্যারামিটার",
        "protectedpages-reason": "কারণ",
        "listgrouprights-removegroup-self-all": "নিজের অ্যাকাউন্ট থেকে সকল দল অপসারণ",
        "listgrouprights-namespaceprotection-header": "নামস্থান নিষেধাজ্ঞাসমূহ",
        "listgrouprights-namespaceprotection-namespace": "নামস্থান",
+       "trackingcategories": "বিষয়শ্রেণীসমূহ অনুসরণ করা হচ্ছে",
+       "trackingcategories-msg": "বিষয়শ্রেণী অনুসরণ করা হচ্ছে",
        "trackingcategories-name": "বার্তা নাম",
        "trackingcategories-nodesc": "কোন বর্ণনা নেই।",
+       "trackingcategories-disabled": "বিষয়শ্রেণীটি বিকল",
        "mailnologin": "প্রাপকের ঠিকানা নেই",
        "mailnologintext": "অন্য ব্যবহারকারীদেরকে ই-মেইল পাঠাতে হলে আপনাকে অবশ্যই আগে [[Special:UserLogin|লগ-ইন]] করতে হবে এবং ''[[Special:Preferences|আপনার পছন্দ তালিকায়]] আপনার ই-মেইল ঠিকানাটি ঠিকমত দিতে হবে।",
        "emailuser": "ইমেইল করো",
        "watchnologin": "আপনি এখনও লগ-ইন করেননি।",
        "addwatch": "নজরতালিকায় যোগ করো",
        "addedwatchtext": "\"[[:$1]]\" পাতাটি আপনার [[Special:Watchlist|নজরতালিকাতে]] যোগ করা হয়েছে।\nভবিষ্যতে এই পাতা ও এই পাতার সাথে সম্পর্কিত আলোচনা পাতায় সংঘটিত যাবতীয় পরিবর্তন এখানে তালিকাভুক্ত হবে।",
+       "addedwatchtext-short": "\"$1\" পাতাটি আপনার নজরতালিকায় যোগ করা হয়েছে।",
        "removewatch": "নজরতালিকা থেকে অপসারণ",
        "removedwatchtext": "\"[[:$1]]\" পাতাটি [[Special:Watchlist|নজর তালিকা]] থেকে অপসারিত হয়েছে।",
+       "removedwatchtext-short": "\"$1\" পাতাটি আপনার নজরতালিকা থেকে সরিয়ে নেয়া হয়েছে।",
        "watch": "নজর রাখুন",
        "watchthispage": "নজরে রাখুন",
        "unwatch": "নজর সরিয়ে নিন",
        "wlheader-enotif": "ইমেল বিজ্ঞপ্তি সক্রিয় করা আছে।",
        "wlheader-showupdated": "আপনার শেষ আগমনের পর থেকে যেসব পাতায় পরিবর্তন হয়েছে সেগুলি '''গাঢ়''' করে দেখানো হয়েছে।",
        "wlnote2": "$3, $2 অনুসারে, সর্বশেষ {{PLURAL:$1|ঘণ্টার|<strong>$1</strong> ঘণ্টার}} পরিবর্তন নিচে দেয়া হয়েছে।",
-       "wlshowlast": "দà§\87à¦\96াà¦\93 à¦¸à¦°à§\8dবশà§\87ষ  $1 à¦\98ন্টা $2 দিন $3",
+       "wlshowlast": "দà§\87à¦\96াà¦\93 à¦¸à¦°à§\8dবশà§\87ষ  $1 à¦\98ণ্টা $2 দিন $3",
        "watchlist-options": "নজর তালিকা পছন্দসমূহ",
        "watching": "নজর রাখা হচ্ছে...",
        "unwatching": "নজর তুলে নেওয়া হচ্ছে...",
        "protect-otherreason-op": "অন্য কারণ",
        "protect-dropdown": "*সুরক্ষার প্রচলিত কারণ\n** অতিরিক্ত ধ্বংসপ্রবণতা\n** অতিরিক্ত অর্থহীন বিষয়বস্তু প্রবেশ করানো\n** পাল্টা-গঠনমূলক সম্পাদনা যুদ্ধ\n** বেশি মাত্রায় প্রদর্শনকৃত পাতা",
        "protect-edit-reasonlist": "সম্পাদনা সুরক্ষার কারণ",
-       "protect-expiry-options": "1 ঘন্টা:1 hour,1 দিন:1 day,1 সপ্তাহ:1 week,2 সপ্তাহ:2 weeks,1 মাস:1 month,3 মাস:3 months,6 মাস:6 months,1 বছর:1 year,অসীম:infinite",
+       "protect-expiry-options": "১ ঘণ্টা:1 hour,১ দিন:1 day,১ সপ্তাহ:1 week,২ সপ্তাহ:2 weeks,১ মাস:1 month,৩ মাস:3 months,৬ মাস:6 months,১ বছর:1 year,অসীম:infinite",
        "restriction-type": "অনুমতি:",
        "restriction-level": "বাধার স্তর:",
        "minimum-size": "ন্যূনতম আকার",
        "ipbenableautoblock": "এই ব্যবহারকারীর ব্যবহার করা সর্বশেষ আইপি ঠিকানা, এবং পরবর্তী যেসব আইপি ঠিকানা থেকে সম্পাদনার চেষ্টা করা হবে, সেগুলিকেও স্বয়ংক্রিয়ভাবে বাধা দেয়া হোক।",
        "ipbsubmit": "এই ব্যবহারকারীকে বাধা দেয়া হোক",
        "ipbother": "অন্য সময়:",
-       "ipboptions": "২ à¦\98ন্টা:2 hours,১ দিন:1 day,৩ দিন:3 days,১ সপ্তাহ:1 week,২ সপ্তাহ:2 weeks,১ মাস:1 month,৩ মাস:3 months,৬ মাস:6 months,১ বছর:1 year,অসীম:infinite",
+       "ipboptions": "২ à¦\98ণ্টা:2 hours,১ দিন:1 day,৩ দিন:3 days,১ সপ্তাহ:1 week,২ সপ্তাহ:2 weeks,১ মাস:1 month,৩ মাস:3 months,৬ মাস:6 months,১ বছর:1 year,অসীম:infinite",
        "ipbhidename": "সম্পাদনা ও তালিকা থেকে ব্যবহারকারী নাম লুকিয়ে রাখা হোক",
        "ipbwatchuser": "এই ব্যবহাকারীর পাতা এবং আলাপের পাতা নজরতালিকায় রাখো",
        "ipb-disableusertalk": "এই ব্যবহারকারীকে বাধাদানকৃত অবস্থায় নিচের আলাপ পাতায় সম্পাদনা করা থেকে বিরত রাখো",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] কে বাধা দেয়া হয়েছে।<br />\nবাধা দেয়া পুনর্বিবেচনা করতে হলে [[Special:BlockList|বাধা দেয়া তালিকা]] দেখুন।",
        "ipb-blockingself": "আপনি নিজেকেই বাধাপ্রদান করতে যাচ্ছেন! আপনি কী নিশ্চিত যে আপনি এটি-ই করতে চান?",
        "ipb-confirmhideuser": "\"hide user\" ক্ষমতার মাধ্যমে আপনি একজন ব্যবহারকারীকে বাধা দিতে যাচ্ছেন। এর মাধ্যমে এই ব্যবহারকারীর নাম সকল লিস্ট এবং লগএন্ট্রি থেকে সরিয়ে ফেলা হবে। আপনি কি নিশ্চিতভাবে এটি করতে চান?",
+       "ipb-confirmaction": "আপনি যদি নিশ্চিত হন আপনি এটি সত্যিকার অর্থেই করতে চান তাহলে অনুগ্রহ করে উপরের \"{{int:ipb-confirm}}\" ঘরটি দেখুন।",
        "ipb-edit-dropdown": "বাধাদানের কারণ সম্পাদনা করুন",
        "ipb-unblock-addr": "$1-এর উপর থেকে বাধা তুলে নেওয়া হোক",
        "ipb-unblock": "ব্যবহারকারী বা আইপি ঠিকানার উপর থেকে বাধা তুলে নেওয়া হোক",
        "movenotallowedfile": "আপনার এই ফাইলটি স্থানান্তরের অনুমতি নেই।",
        "cant-move-user-page": "ব্যবহারকারী পাতা (উপপাতা থেকে পৃথক) স্থানান্তরের আপনার অনুমতি নেই।",
        "cant-move-to-user-page": "আপনার কোনো পাতা ব্যবহারকারী পাতার স্থানান্তরের অনুমতি নেই (ব্যবহারকারী উপপাতা ব্যতিত)।",
+       "cant-move-category-page": "আপনার বিষয়শ্রেণী পাতা স্থানান্তরের অনুমতি নেই।",
+       "cant-move-to-category-page": "আপনার পাতাটিকে বিষয়শ্রেণী পাতায় স্থানান্তরের অনুমতি নেই।",
        "newtitle": "এই নতুন শিরোনামে",
        "move-watch": "এই পাতাটি নজরে রাখুন",
        "movepagebtn": "পাতা সরান",
        "imagetypemismatch": "নতুন ফাইল এক্সটেনশনটি ফাইলের ধরনের সাথে মিলছে না",
        "imageinvalidfilename": "ফাইল নামটি সঠিক নয়",
        "fix-double-redirects": "মূল শিরনামকে নির্দেশ করে এমন সকল রিডাইরেক্ট আপডেট করুন",
-       "move-leave-redirect": "রিডাà¦\87রà§\87à¦\95à§\8dà¦\9f à¦\89পà§\87à¦\95à§\8dষা à¦\95রà§\81ন",
+       "move-leave-redirect": "পà§\81নরà§\8dনিরà§\8dদà§\87শ à¦°à§\87à¦\96à§\87 à¦¦à¦¿ন",
        "protectedpagemovewarning": "'''সতর্কীকরণ:''' এই পাতাটি বন্ধ করা হয়েছে; কেবলমাত্র প্রশাসক মর্যাদার ব্যবহারকারীরাই এটি স্থানান্তর করতে পারবেন।\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
        "semiprotectedpagemovewarning": "'''নোট:''' এই পাতাটির ব্যবহার নিয়ন্ত্রণ করা হয়েছে তাই নিবন্ধনকৃত ব্যবহারকারী এটি স্থানান্তর করতে পারবেন।\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো:",
        "move-over-sharedrepo": "== এই নামের ফাইল রয়েছে ==\n[[:$1]] নামের ফাইলটি শেয়ার্ড রিপোজিটরীতে রয়েছে। একই নামের একটি ফাইল এখানে স্থানান্তর করা হলে পূর্বের ফাইলটি প্রতিস্থাপিত হবে।",
        "pageinfo-category-pages": "পাতার সংখ্যা",
        "pageinfo-category-subcats": "উপবিষয়শ্রেণীর সংখ্যা",
        "pageinfo-category-files": "ফাইলের সংখ্যা",
-       "skinname-cologneblue": "কলোন ব্লু",
        "skinname-monobook": "মনোবুক",
-       "skinname-modern": "মডার্ন",
        "skinname-vector": "ভেক্টর",
        "markaspatrolleddiff": "পরীক্ষিত বলে চিহ্নিত করুন",
        "markaspatrolledtext": "এই নিবন্ধটিকে পরীক্ষিত বলে চিহ্নিত করুন",
        "newimages-summary": "এই বিশেষ পাতা সর্বশেষ আপলোডকৃত ফাইল দেখাবে।",
        "newimages-legend": "ছাকনী",
        "newimages-label": "ফাইলের নাম (অথবা এর কোন অংশ):",
+       "newimages-showbots": "বটের আপলোড গুলো দেখাও।",
        "noimages": "দেখার মত কিছু নেই।",
        "ilsubmit": "অনুসন্ধান",
        "bydate": "তারিখ অনুযায়ী",
        "years": "{{PLURAL:$1|$1 বছর}}",
        "ago": "$1 আগে",
        "just-now": "এখনই",
-       "hours-ago": "$1 {{PLURAL:$1|à¦\98ন্টা}} পূর্বে",
+       "hours-ago": "$1 {{PLURAL:$1|à¦\98ণ্টা}} পূর্বে",
        "minutes-ago": "$1 {{PLURAL:$1|মিনিট}} পূর্বে",
        "seconds-ago": "$1 {{PLURAL:$1|সেকেন্ড}} পূর্বে",
        "monday-at": "সোমবার, $1",
        "exif-gpsstatus-v": "পরিমাপ একত্রীকরণ-ক্ষমতা",
        "exif-gpsmeasuremode-2": "দ্বিমাত্রিক পরিমাপ",
        "exif-gpsmeasuremode-3": "ত্রিমাত্রিক পরিমাপ",
-       "exif-gpsspeed-k": "à¦\95িলà§\8bমিà¦\9fার à¦ªà§\8dরতি à¦\98ন্টা",
-       "exif-gpsspeed-m": "মাà¦\87ল à¦ªà§\8dরতি à¦\98ন্টা",
+       "exif-gpsspeed-k": "à¦\95িলà§\8bমিà¦\9fার à¦ªà§\8dরতি à¦\98ণ্টা",
+       "exif-gpsspeed-m": "মাà¦\87ল à¦ªà§\8dরতি à¦\98ণ্টা",
        "exif-gpsspeed-n": "নট",
        "exif-gpsdestdistance-k": "কিলোমিটার",
        "exif-gpsdestdistance-m": "ফাইল",
        "watchlistedit-raw-done": "আপনার নজর তালিকা হালনাগাদ করা হয়েছে।",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 শিরোনাম|$1 শিরোনামসমূহ}} যোগ করা হয়েছে:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 শিরোনাম|$1 শিরোনামসমূহ}} মুছে ফেলা হয়েছে:",
+       "watchlistedit-clear-title": "নজরতালিকা পরিস্কার করা হয়েছে",
+       "watchlistedit-clear-legend": "নজরতালিকা পরিস্কার",
+       "watchlistedit-clear-explain": "সকল শিরোনামসমূহ আপনার নজরতালিকা থেকে সরিয়ে নেয়া হয়েছে।",
+       "watchlistedit-clear-titles": "শিরোনামসমূহ:",
+       "watchlistedit-clear-submit": "নজরতালিকা পরিষ্কার করুন (এটি স্থায়ী!)",
+       "watchlistedit-clear-done": "আপনার নজরতালিকা পরিষ্কার করা হয়েছে।",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|১টি শিরোনাম|$1টি শিরোনাম}} সরিয়ে ফেলা হয়েছে:",
+       "watchlistedit-too-many": "এখানে প্রদর্শনের জন্য অনেক পাতা রয়েছে।",
+       "watchlisttools-clear": "নজরতালিকা পরিস্কার করুন",
        "watchlisttools-view": "সম্পর্কিত পরিবর্তনসমূহ দেখুন",
        "watchlisttools-edit": "নজর তালিকা দেখুন এবং সম্পাদনা করুন",
        "watchlisttools-raw": "অশোধিত নজরতালিকা সম্পাদনা করুন",
        "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/ মিডিয়াউইকি]'''-এর মাধ্যমে, কপিরাইট © ২০০১-$1 $2।",
        "htmlform-no": "না",
        "htmlform-yes": "হ্যাঁ",
        "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 পাতাটি অপসারিত হয়েছে",
        "api-error-overwrite": "ইতিমধ্যেই রয়েছে এমন কোনো ফাইলের প্রতিস্থাপন গ্রহণযোগ্য নয়।",
        "api-error-stashfailed": "অভ্যন্তরীণ ত্রুটি: সার্ভার অস্থায়ী ফাইলটি সংরক্ষণ করতে ব্যর্থ হয়েছে।",
        "api-error-publishfailed": "অভ্যন্তরীন ত্রুটি: সার্ভার অস্থায়ী ফাইলটি প্রকাশ করতে ব্যর্থ হয়েছে।",
+       "api-error-stasherror": "স্ট্যাশে আপলোডের সময় চিত্র আপলোডের সময় একটি সমস্যা দেখা দিয়েছে।",
        "api-error-timeout": "কাঙ্খিত সময়ের মধ্যে সার্ভারের কোন সাড়া পাওয়া যায়নি।",
        "api-error-unclassified": "একটি অজানা ত্রুটি দেখা দিয়েছে",
        "api-error-unknown-code": "অজানা ত্রুটি: \"$1\"",
        "api-error-verification-error": "সম্ভবত এই ফাইলটি ত্রুটিপূর্ণ অথবা এর এক্সটেনশনটি ভুল।",
        "duration-seconds": "$1 {{PLURAL:$1|সেকেন্ড|সেকেন্ড}}",
        "duration-minutes": "$1 {{PLURAL:$1|মিনিট|মিনিট}}",
-       "duration-hours": "$1 {{PLURAL:$1|à¦\98নà§\8dà¦\9fা|à¦\98ন্টা}}",
+       "duration-hours": "$1 {{PLURAL:$1|à¦\98ণ্টা}}",
        "duration-days": "$1 {{PLURAL:$1|দিন|দিন}}",
        "duration-weeks": "$1 {{PLURAL:$1|সপ্তাহ}}",
        "duration-years": "$1 {{PLURAL:$1|বছর|বছর}}",
index 4a6d6ce..d7f080b 100644 (file)
        "vector-view-view": "Lenn",
        "vector-view-viewsource": "Sellet ouzh tarzh an destenn",
        "actions": "Oberoù",
+       "vector-more-actions": "Muioc'h",
        "namespaces": "Esaouennoù anv",
        "variants": "Adstummoù",
        "navigation-heading": "Lañser merdeiñ",
        "searchmenu-exists": "'''Ur bajenn anvet\"[[:$1]]\" zo war ar wiki-mañ'''",
        "searchmenu-new": "'''Krouiñ ar bajenn \"[[:$1]]\" war ar wiki-mañ !'''",
        "searchprofile-articles": "Pajennoù gant boued",
-       "searchprofile-project": "Pajennoù skoazell ha pajennoù ar raktres",
        "searchprofile-images": "Liesmedia",
        "searchprofile-everything": "Pep tra",
        "searchprofile-advanced": "Araokaet",
        "searchprofile-articles-tooltip": "Klask e $1",
-       "searchprofile-project-tooltip": "Klask e $1",
        "searchprofile-images-tooltip": "Klask ar restroù",
        "searchprofile-everything-tooltip": "Klask e pep lec'h (er pajennoù kaozeal ivez)",
        "searchprofile-advanced-tooltip": "Klask en esaouennoù anv personelaet",
        "search-interwiki-default": "Disoc'hoù eus $1 :",
        "search-interwiki-more": "(muioc'h)",
        "search-relatedarticle": "Disoc'hoù kar",
-       "searcheverything-enable": "Klask en holl esaouennoù anv",
        "searchrelated": "disoc'hoù kar",
        "searchall": "An holl",
        "showingresults": "Diskouez betek {{PLURAL:$1|'''1''' disoc'h|'''$1''' disoc'h}} o kregiñ gant #'''$2'''.",
        "allowemail": "Aotren ar posteloù a-berzh implijerien all",
        "prefs-searchoptions": "Klask",
        "prefs-namespaces": "Esaouennoù",
-       "defaultns": "Klask en esaouennoù-anv a-hend-all :",
        "default": "dre ziouer",
        "prefs-files": "Restroù",
        "prefs-custom-css": "CSS personelaet",
        "action-createpage": "krouiñ pajennoù",
        "action-createtalk": "krouiñ pajennoù kaozeal",
        "action-createaccount": "krouiñ ar gont implijer-mañ",
+       "action-history": "gwelet istor ar bajenn-mañ",
        "action-minoredit": "merkañ ar c'hemm-mañ evel dister",
        "action-move": "dilec'hiañ ar bajenn-mañ",
        "action-move-subpages": "dilec'hiañ ar bajenn-mañ hag an ispajennoù anezhi",
        "recentchanges-label-unpatrolled": "N'eo ket bet gwiriet ar c'hemm-mañ evit c'hoazh.",
        "recentchanges-label-plusminus": "Kemmet eo ment ar bajenn eus an niver-mañ a oktedoù",
        "recentchanges-legend-heading": "'''Alc'hwez :'''",
-       "recentchanges-legend-newpage": "(gwelet ivez [[Special:NewPages|roll ar pajennoù nevez]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gwelet ivez [[Special:NewPages|roll ar pajennoù nevez]])",
        "rcnotefrom": "Setu aze roll ar c'hemmoù c'hoarvezet abaoe an <strong>$2</strong> (<strong>$1</strong> d'ar muiañ).",
        "rclistfrom": "Diskouez ar c'hemmoù diwezhañ abaoe an $3 $2",
        "rcshowhideminor": "$1 ar c'hemmoù dister",
        "watchnologin": "Digevreet",
        "addwatch": "Ouzhpennañ d'ar roll evezhiañ",
        "addedwatchtext": "Ouzh ho [[Special:Watchlist|rollad evezhiañ]] eo bet ouzhpennet ar bajenn \"[[:$1]]\".\nAmañ e vo rollet ar c'hemmoù da zont evit ar bajenn-mañ hag ar bajenn gaozeal stag outi.",
+       "addedwatchtext-short": "Ouzhpennet eo bet ar bajenn \"$1\" d'ho roll-evezhiañ.",
        "removewatch": "Lemel a-ziwar ar roll evezhiañ",
        "removedwatchtext": "Lamet eo bet ar bajenn \"[[:$1]]\" a-ziwar ho [[Special:Watchlist|roll evezhiañ]].",
+       "removedwatchtext-short": "Lamet eo bet ar bajenn \"$1\" eus ho roll-evezhiañ.",
        "watch": "Evezhiañ",
        "watchthispage": "Evezhiañ ar bajenn-mañ",
        "unwatch": "paouez da evezhiañ",
        "movenotallowedfile": "N'oc'h ket aoteret da adenvel restroù.",
        "cant-move-user-page": "Noc'h ket aotreet da adenvel pajennoù pennañ an implijerien (er-maez eus o ispajennoù).",
        "cant-move-to-user-page": "Noc'h ket aotreet da adenvel ur bajenn gant anv hini un implijer all (nemet un ispajenn e vefe).",
+       "cant-move-category-page": "N'oc'h ket aotreet da zilec'hiañ pajennoù rummad.",
        "newtitle": "anv nevez",
        "move-watch": "Evezhiañ ar bajenn-mañ",
        "movepagebtn": "Adenvel ar pennad",
        "tooltip-preferences-save": "Enrollañ ar penndibaboù",
        "tooltip-summary": "Skrivit un diveradenn verr",
        "common.css": "/** Talvezout a raio ar CSS lakaet amañ evit an holl wiskadurioù */",
-       "cologneblue.css": "/* Talvezout a raio ar CSS lakaet amañ evit implijerien ar gwiskadur Glaz Kologn */",
        "monobook.css": "/* Talvezout a raio ar CSS lakaet amañ evit implijerien ar gwiskadur Monobook */",
-       "modern.css": "/* Talvezout a raio ar CSS lakaet amañ evit implijerien ar gwiskadur Modern */",
        "vector.css": "/* Talvezout a raio ar CSS lakaet amañ evit implijerien ar gwiskadur Vektor */",
        "print.css": "/* Talvezout a raio ar CSS lakaet amañ evit ar moullañ */",
        "noscript.css": "/* Talvezout a raio ar CSS lakaet amañ evit an implijerien o deus diweredekaet JavaScript */",
        "group-sysop.css": "/* Talvezout a raio ar CSS lakaet amañ evit ar verourien hepken */",
        "group-bureaucrat.css": "/* Talvezout a raio ar CSS lakaet amañ evit ar vureveien hepken */",
        "common.js": "/* Kement JavaScript amañ a vo karget evit an holl implijerien war kement pajenn lennet ganto. */",
-       "cologneblue.js": "/* Kement JavaScript amañ a vo karget evit an implijerien a ra gant ar gwiskadur Glaz Kologn */",
        "monobook.js": "/* Kement JavaScript amañ a vo karget evit an implijerien a ra gant ar gwiskadur MonoBook */",
-       "modern.js": "/* Kement JavaScript amañ a vo karget evit an implijerien a ra gant ar gwiskadur Modern */",
        "vector.js": "/* Kement JavaScript amañ a vo karget evit an implijerien a ra gant ar gwiskadur Vektor */",
        "anonymous": "{{PLURAL:$1|Implijer|Implijerien}} dizanv war {{SITENAME}}",
        "siteuser": "Implijer(ez) $1 eus {{SITENAME}}",
        "pageinfo-category-pages": "Niver a bajennoù",
        "pageinfo-category-subcats": "Niver a isrummadoù",
        "pageinfo-category-files": "Niver a restroù",
-       "skinname-cologneblue": "Glaz Kologn",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Modern",
        "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Merkañ evel gwiriet",
        "markaspatrolledtext": "Merkañ ar pennad-mañ evel gwiriet",
        "watchlistedit-raw-done": "Nevesaet eo bet ho roll evezhiañ.",
        "watchlistedit-raw-added": "Ouzhpennet ez eus bet {{PLURAL:$1|1 pajenn|$1 pajenn}} :",
        "watchlistedit-raw-removed": "Tennet ez eus bet {{PLURAL:$1|1 pajenn|$1 pajenn}} :",
+       "watchlistedit-clear-legend": "Diverkañ ar roll-evezhiañ",
+       "watchlistedit-clear-titles": "Titloù :",
+       "watchlisttools-clear": "Diverkañ ar roll-evezhiañ",
        "watchlisttools-view": "Gwelet ar c'hemmoù degaset",
        "watchlisttools-edit": "Gwelet ha kemmañ ar roll evezhiañ",
        "watchlisttools-raw": "Kemmañ ar roll (mod diginkl)",
index 2310ae3..db5235c 100644 (file)
@@ -17,7 +17,8 @@
                        "Seha",
                        "Smooth O",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Milicevic01"
                ]
        },
        "tog-underline": "Podvuci veze:",
        "searchmenu-exists": "'''Postoji stranica pod nazivom \"[[:$1]]\" na ovoj wiki'''",
        "searchmenu-new": "<strong>Napravi stranicu \"[[:$1]]\" na ovoj wiki!</strong> {{PLURAL:$2|0=|Pogledajte također straniu pronađenu vašom pretragom.|Pogledajte također i vaše rezultate pretrage.}}",
        "searchprofile-articles": "Stranice sadržaja",
-       "searchprofile-project": "Stranice pomoći i projekta",
        "searchprofile-images": "Multimedija",
        "searchprofile-everything": "Sve",
        "searchprofile-advanced": "Napredno",
        "searchprofile-articles-tooltip": "Pretraga u $1",
-       "searchprofile-project-tooltip": "Pretraga u $1",
        "searchprofile-images-tooltip": "Traži datoteke",
        "searchprofile-everything-tooltip": "Pretraži sve sadržaje (ukljujući i stranice za razgovor)",
        "searchprofile-advanced-tooltip": "Traži u ostalim imenskim prostorima",
        "search-interwiki-default": "$1 rezultati:",
        "search-interwiki-more": "(više)",
        "search-relatedarticle": "Povezano",
-       "searcheverything-enable": "Traži u svim imenskim prostorima",
        "searchrelated": "povezano",
        "searchall": "sve",
        "showingresults": "Dolje {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
        "allowemail": "Dozvoli e-poštu od ostalih korisnika",
        "prefs-searchoptions": "Traži",
        "prefs-namespaces": "Imenski prostori",
-       "defaultns": "Inače tražite u ovim imenskim prostorima:",
        "default": "standardno",
        "prefs-files": "Datoteke",
        "prefs-custom-css": "Prilagođeni CSS",
        "prefs-emailconfirm-label": "E-mail potvrda:",
        "youremail": "E-mail:",
        "username": "{{GENDER:$1|Korisničko}} ime:",
-       "uid": "{{GENDER:$1|Korisnički}} ID:",
        "prefs-memberingroups": "{{GENDER:$2|Korisnik|Korisnica}} je član {{PLURAL:$1|grupe|grupâ}}:",
        "prefs-registration": "Vrijeme registracije:",
        "yourrealname": "Vaše pravo ime:",
        "recentchanges-label-unpatrolled": "Ova izmjena još nije patrolirana",
        "recentchanges-label-plusminus": "Veličina stranice promijenila se za ovoliko bajtova",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "(također pogledajte [[Special:NewPages|spisak novih stranica]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (također pogledajte [[Special:NewPages|spisak novih stranica]])",
        "rcnotefrom": "Ispod su izmjene od <strong>$2</strong> (do <strong>$1</strong> prikazano).",
        "rclistfrom": "Prikaži nove izmjene počev od $3 $2",
        "rcshowhideminor": "$1 male izmjene",
        "log-title-wildcard": "Traži naslove koji počinju s ovim tekstom",
        "showhideselectedlogentries": "Pokaži/sakrij izabrane zapise u evidenciji",
        "allpages": "Sve stranice",
-       "alphaindexline": "$1 do $2",
        "nextpage": "Sljedeća strana ($1)",
        "prevpage": "Prethodna stranica ($1)",
        "allpagesfrom": "Prikaži stranice počev od:",
        "tooltip-preferences-save": "Sačuvaj podešavanja",
        "tooltip-summary": "Unesite kratki sažetak",
        "common.css": "/* CSS umetnut ovdje primijenit će se na sve skinove */",
-       "cologneblue.css": "/* CSS umetnut ovdje uticat će na korisnike koji koriste Cologne Blue skin */",
        "monobook.css": "/* CSS umetnut ovdje uticat će na korisnike koji koriste Monobook skin */",
-       "modern.css": "/* CSS umetnut ovdje uticat će na korisnike koji koriste Modern skin */",
        "print.css": "/* CSS umetnut ovdje uticat će na izgled isprintane stranice */",
        "common.js": "/* Bilo koja JavaScript će biti učitana za sve korisnike pri svakom učitavanju stranice. */",
-       "cologneblue.js": "/* Bilo koja JavaScript će biti učitana za sve korisnike koji koriste Cologne Blue skin */",
        "monobook.js": "/* Bilo koja JavaScript će biti učitana za sve korisnike koji koriste MonoBook skin */",
-       "modern.js": "/* Bilo koja JavaScript će biti učitana za sve korisnike koji koriste Modern skin */",
        "anonymous": "{{PLURAL:$1|Anonimni korisnik|$1 anonimna korisnika|$1 anonimnih korisnika}} projekta {{SITENAME}}",
        "siteuser": "{{SITENAME}} korisnik $1",
        "anonuser": "{{SITENAME}} anonimni korisnik $1",
        "pageinfo-category-pages": "Broj stranica",
        "pageinfo-category-subcats": "Broj podkategorija",
        "pageinfo-category-files": "Broj datoteka",
-       "skinname-cologneblue": "Kelnsko plavo",
        "skinname-monobook": "MonoKnjiga",
-       "skinname-modern": "Moderna",
        "markaspatrolleddiff": "Označi kao patrolirano",
        "markaspatrolledtext": "Označi ovaj članak kao patroliran",
        "markedaspatrolled": "Označeno kao patrolirano",
        "confirmemail_needlogin": "Morate $1 da bi ste potvrdili Vašu e-mail adresu.",
        "confirmemail_success": "Adresa vaše e-pošte je potvrđena. Možete sad da se prijavite i uživate u viki.",
        "confirmemail_loggedin": "Adresa Vaše e-pošte je potvrđena.",
-       "confirmemail_subject": "Vikiriječnik adresa e-pošte za potvrđivanje",
+       "confirmemail_subject": "{{SITENAME}} – adresa e-pošte za potvrđivanje",
        "confirmemail_body": "Neko, vjerovatno Vi, je sa IP adrese $1 registrovao nalog \"$2\" sa ovom adresom e-pošte na {{SITENAME}}.\n\nDa potvrdite da ovaj nalog stvarno pripada vama i da aktivirate mogućnost e-pošte na {{SITENAME}}, otvorite ovaj link u vašem pregledniku:\n\n$3\n\nAko ovo niste vi, pratite ovaj link da prekinete prijavu:\n$5\n\nOvaj kod za potvrdu će isteći u $4.",
        "confirmemail_body_changed": "Neko, vjerovatno Vi, je sa IP adrese $1\nje promijenio adresu e-pošte računa \"$2\" na ovu adresu za {{SITENAME}}.\n\nDa potvrdite da ovaj nalog stvarno pripada Vama i da reaktivirate mogućnosti e-pošte na {{SITENAME}}, otvorite ovaj link u Vašem pregledniku:\n\n$3\n\nAko ovaj račun *ne* pripada Vama, pratite ovaj link da prekinete odobravanje adrese e-pošte:\n\n$5\n\nOvaj kod za potvrdu će isteći u $4.",
        "confirmemail_body_set": "Neko, vjerovatno Vi, je sa IP adrese $1\npostavio adresu e-pošte računa \"$2\" na ovu adresu za {{SITENAME}}.\n\nDa potvrdite da ovaj račun stvarno pripada Vama i da aktivirate mogućnosti e-pošte na {{SITENAME}}, otvorite ovaj link u Vašem pregledniku:\n\n$3\n\nAko ovaj račun *ne* pripada Vama, pratite ovaj link da prekinete odobravanje adrese e-pošte:\n\n$5\n\nOvaj kôd za potvrdu će isteći u $4.",
index 48922ec..3e02ad2 100644 (file)
@@ -40,7 +40,8 @@
                        "XVEC",
                        "Àlex",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Calak"
                ]
        },
        "tog-underline": "Subratlla els enllaços:",
        "vector-view-view": "Mostra",
        "vector-view-viewsource": "Mostra el codi",
        "actions": "Accions",
+       "vector-more-actions": "Més",
        "namespaces": "Espais de noms",
        "variants": "Variants",
        "navigation-heading": "Menú de navegació",
        "revdelete-nooldid-title": "La revisió objectiu no és vàlida",
        "revdelete-nooldid-text": "No heu especificat unes revisions objectius per a realitzar aquesta\nfunció, la revisió especificada no existeix, o bé esteu provant d'amagar l'actual revisió.",
        "revdelete-no-file": "El fitxer especificat no existeix.",
-       "revdelete-show-file-confirm": "Esteu segurs que voleu veure una revisió esborrada del fitxer «<nowiki>$1</nowiki>» de $2 a $3?",
+       "revdelete-show-file-confirm": "Esteu segur que voleu veure una revisió esborrada del fitxer «<nowiki>$1</nowiki>» de $2 a $3?",
        "revdelete-show-file-submit": "Sí",
        "revdelete-selected-text": "{{PLURAL:$1|Versió seleccionada|Versions seleccionades}} de [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Versió seleccionada|Versions seleccionades}} del fitxer [[:$2]]:",
        "pagemerge-logentry": "s'ha fusionat [[$1]] en [[$2]] (revisions fins a $3)",
        "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",
+       "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-multipage": "(Diferència entre pàgines)",
        "searchmenu-exists": "'''Hi ha una pàgina anomenada «[[:$1]]» en aquest wiki'''",
        "searchmenu-new": "<strong>Crea la pàgina «[[:$1]]» en aquest wiki!</strong> {{PLURAL:$2|0=|Vegeu també la pàgina trobada amb la cerca.|Vegeu també els resultats de cerca trobats.}}",
        "searchprofile-articles": "Pàgines de contingut",
-       "searchprofile-project": "Pàgines d'ajuda i de projecte",
        "searchprofile-images": "Multimèdia",
        "searchprofile-everything": "Tot",
        "searchprofile-advanced": "Avançat",
        "searchprofile-articles-tooltip": "Cerca a $1",
-       "searchprofile-project-tooltip": "Cerca a $1",
        "searchprofile-images-tooltip": "Cerca fitxers",
        "searchprofile-everything-tooltip": "Cerca tot tipus de contingut (s'hi inclouen pàgines de discussió)",
        "searchprofile-advanced-tooltip": "Cerca als espais de noms predefinits",
        "search-interwiki-default": "Resultats de $1:",
        "search-interwiki-more": "(més)",
        "search-relatedarticle": "Relacionat",
-       "searcheverything-enable": "Cerca a tots els espais de noms",
        "searchrelated": "relacionat",
        "searchall": "tots",
        "showingresults": "Tot seguit es {{PLURAL:$1|mostra el resultat|mostren els <b>$1</b> resultats començant pel número <b>$2</b>}}.",
        "powersearch-togglelabel": "Activar:",
        "powersearch-toggleall": "Tots",
        "powersearch-togglenone": "Cap",
+       "powersearch-remember": "Recorda la selecció en cerques futures",
        "search-external": "Cerca externa",
        "searchdisabled": "La cerca dins el projecte {{SITENAME}} està inhabilitada. Mentrestant, podeu cercar a través de Google, però tingueu en compte que la seua base de dades no estarà actualitzada.",
        "search-error": "S'ha produït un error durant la recerca: $1",
        "allowemail": "Permet que altres usuaris puguin enviar-me correus electrònics",
        "prefs-searchoptions": "Cerca",
        "prefs-namespaces": "Espais de noms",
-       "defaultns": "Cerca per defecte en els següents espais de noms:",
        "default": "per defecte",
        "prefs-files": "Fitxers",
        "prefs-custom-css": "CSS personalitzat",
        "recentchanges-label-unpatrolled": "Aquesta modificació encara no s'ha patrullat",
        "recentchanges-label-plusminus": "La mida de la pàgina ha canviat aquest nombre de bytes",
        "recentchanges-legend-heading": "'''Llegenda:'''",
-       "recentchanges-legend-newpage": "(vegeu també la [[Special:NewPages|llista de pàgines noves]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vegeu també la [[Special:NewPages|llista de pàgines noves]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "A sota hi ha els canvis des de <strong>$2</strong> (es mostren fins <strong>$1</strong>).",
        "rclistfrom": "Mostra els canvis nous des de $3 $2",
        "watchnologin": "No heu iniciat la sessió",
        "addwatch": "Afegeix a llista de seguiment",
        "addedwatchtext": "S'ha afegit la pàgina \"[[:$1]]\" a la vostra [[Special:Watchlist|llista de seguiment]].\nS'hi mostraran els canvis futurs que tinguin lloc en aquesta pàgina i la corresponent discussió.",
+       "addedwatchtext-short": "S’ha afegit la pàgina «$1» a la vostra llista de seguiment.",
        "removewatch": "Treu de la llista de seguiment",
        "removedwatchtext": "S'ha tret la pàgina «[[:$1]]» de la vostra [[Special:Watchlist|llista de seguiment]].",
+       "removedwatchtext-short": "S’ha tret la pàgina «$1» de la vostra llista de seguiment.",
        "watch": "Vigila",
        "watchthispage": "Vigila aquesta pàgina",
        "unwatch": "Desatén",
        "pageinfo-category-pages": "Nombre de pàgines",
        "pageinfo-category-subcats": "ombre de subcategories",
        "pageinfo-category-files": "Nombre d'arxius",
-       "skinname-cologneblue": "Colònia blava",
        "markaspatrolleddiff": "Marca com a supervisat",
        "markaspatrolledtext": "Marca la pàgina com a supervisada",
        "markedaspatrolled": "Marca com a supervisat",
index 9b44207..0e16d59 100644 (file)
@@ -5,7 +5,8 @@
                        "Xqt",
                        "Yejianfei",
                        "Hakka",
-                       "아라"
+                       "아라",
+                       "Mywood"
                ]
        },
        "tog-underline": "下劃綫鏈接",
        "history_short": "歷史",
        "updatedmarker": "趁我最後蜀回訪問開始更新",
        "printableversion": "會拍印其版本",
-       "permalink": "永久鏈接",
+       "permalink": "固定链接",
        "print": "拍印",
        "view": "覷蜀覷",
        "edit": "修改",
        "searchprofile-everything": "所有乇",
        "searchprofile-advanced": "高級",
        "searchprofile-articles-tooltip": "敆$1𡅏尋討",
-       "searchprofile-project-tooltip": "敆$1𡅏尋討",
        "searchprofile-images-tooltip": "尋討文件",
        "search-result-size": "$1 ({{PLURAL:$2|$2萆單詞}})",
        "search-redirect": "(重定向 $1)",
        "prefs-files": "文件",
        "youremail": "電子郵件:",
        "username": "{{GENDER:$1|用戶名}}:",
-       "uid": "{{GENDER:$1|用戶}}ID:",
        "prefs-registration": "開賬戶時間",
        "yourrealname": "真實姓名:",
        "yourlanguage": "語言:",
        "alllogstext": "所有會使趁{{SITENAME}}獲得其日誌其都合併顯示。\n汝會使使揀選日誌類型、用戶名(大小寫敏感),或者受影響其頁面(大小寫敏感)其方法來縮小視角。",
        "logempty": "日誌底裏討要𣍐著項目",
        "allpages": "所有頁面",
-       "alphaindexline": "$1遘$2",
        "nextpage": "下蜀頁($1)",
        "prevpage": "前蜀頁($1)",
        "allpagesfrom": "使下底其乇開始顯示頁:",
        "whatlinkshere-filters": "過濾器",
        "blockip": "封鎖用戶",
        "blockiptext": "使下底其表單來封鎖趁指定IP地址或者用戶名其寫入訪問。茲囇使廮𡅏防止破壞,固加著符合[[{{MediaWiki:Policy-url}}|政策]]。敆下底填底指定其原因(比如講:引用乞破壞其頁面)。",
-       "ipadressorusername": "IP地址或者用戶名:",
+       "ipaddressorusername": "IP地址或者用戶名:",
        "ipbexpiry": "過期:",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*普通封鎖原因\n** 加添假其信息\n** 塗掉頁面內容\n** 發佈不實信息\n** 亂寫文字\n** 做獃/騷擾\n** 亂開賬戶\n** 亂起用戶名",
        "previousdiff": "← 舊其修改",
        "nextdiff": "新其修改 →",
        "file-nohires": "無更高決斷",
-       "showhidebots": "($1機器人)",
        "ilsubmit": "尋討",
        "bydate": "按日期",
        "metadata": "元數據",
index e0bc248..2bd08b1 100644 (file)
@@ -14,7 +14,7 @@
        "tog-hideminor": "Къайладаха кигийра нисдарш оц могӀама керла хийцамехь",
        "tog-hidepatrolled": "Къайладаха гӀаролладина нисдарш оц могӀама керла нисдаршкахь",
        "tog-newpageshidepatrolled": "Къайлаяха гӀароллайина агӀонаш оьцу могӀама керла агӀонашкахь",
-       "tog-extendwatchlist": "Шорбина тlехьажарна могlам, ша беригге а хийцамаш чубогlуш, тlяхьабина боцурш а",
+       "tog-extendwatchlist": "Шорбина тӀехьажарна могӀам, ша беригге а хийцамаш чубогӀуш, тӀехьаббина боцурш а",
        "tog-usenewrc": "Лелабе дика могӀам керла чу хийцамашна (оьшу JavaScript)",
        "tog-numberheadings": "Ша шех хlитто терахь корташна",
        "tog-showtoolbar": "Гайта лакхара гӀирсан дакъа нисйеш аттон оц тадар чохь (JavaScript)",
        "vector-view-view": "Éшар",
        "vector-view-viewsource": "Билглонашка хьажа",
        "actions": "Дийраш",
+       "vector-more-actions": "Кхин",
        "namespaces": "Цlерийн ана",
        "variants": "Кепараш",
        "navigation-heading": "Навигацин меню",
        "generic-pool-error": "Бехк цабиллар доьха, хӀинц сервер йоьттина ю.\nКаьчна дуккха дехарш хӀокху агӀонтӀе хьажарца.\nДехар до, собардеш а юха хьажа хӀокху агӀонтӀе жим тӀаьхьо.",
        "pool-timeout": "Блоктоха еза хан тӀех йаьлла",
        "pool-queuefull": "Дехаршан чоь юьззина ю",
-       "pool-errorunknown": "Дойзаш доцу гlалат",
+       "pool-errorunknown": "Дойзаш доцу гӀалат",
        "pool-servererror": "Пулан ларар тӀекхочучехь дац ($1).",
        "aboutsite": "{{grammar:genitive|{{SITENAME}}}} лаьцна",
        "aboutpage": "Project:Цуьнах лаьцна",
        "nosuchactiontext": "ДӀаязйина URL нийса яц.\nURL язъеш гӀалат даьлла хила мега.\nИза кхин {{SITENAME}} пороектехь гӀалат хила мега.",
        "nosuchspecialpage": "Иштта белхан агӀо яц",
        "nospecialpagetext": "<strong>Иштта белхан агӀо яц.</strong>\n\nБелхан агӀонашан могӀам: [[Special:SpecialPages|{{int:specialpages}}]].",
-       "error": "Гlалат",
-       "databaseerror": "Гlалат хаамийн бухера",
+       "error": "ГӀалат",
+       "databaseerror": "ГӀалат хаамийн бухера",
        "databaseerror-text": "Хаамийн базан гӀалат даьлла.\nИза хила мега программин гӀалат.",
        "databaseerror-textcl": "Хаамийн базан гӀалат даьлла.",
        "databaseerror-query": "Дехар: $1",
        "missingarticle-rev": "(верси № $1)",
        "missingarticle-diff": "(тейп тайпнара: $1, $2)",
        "readonly_lag": "Хаамашан базина цхьана хан блоктоьхна, хаамашан базан сервераш нисялца.",
-       "internalerror": "Чоьхьара гlалат",
-       "internalerror_info": "Чоьхьара гlалат: $1",
+       "internalerror": "Чоьхьара гӀалат",
+       "internalerror_info": "Чоьхьара гӀалат: $1",
        "filecopyerror": "Йиш яц копий ян «$1» оцунах «$2».",
        "filerenameerror": "Файлан «$1» цӀе хийца «$2» йиш яц.",
        "filedeleteerror": "ДӀаяккха цатарло файл «$1».",
        "createacct-benefit-body3": "{{PLURAL:$1|декъашхо|декъашхой}} тӀаьхьарчу хенахь",
        "badretype": "Ахьа язъен ишарш цхьатера яц",
        "userexists": "Ахьа язъен декъашхочун цӀе йолуш ю, дехар до кхин цӀе харжар.",
-       "loginerror": "Гlалат ду декъашхо вовзарехь/йовзарехь",
+       "loginerror": "ГӀалат ду декъашхо вовзарехь/йовзарехь",
        "createacct-error": "ДӀаяздар кхуллуш гӀалат ду",
        "createaccounterror": "Декъашхочун дӀаяздар кхолла йиш яц: $1",
        "nocookiesnew": "Декъашхочун дӀаяздар ду амма системин чохь вац/яц. Декъашхой чу гӀош {{SITENAME}} «cookies» лелош ю. Хьа «cookies» лелаян магийна дац дехар до и магийтина керлачу цӀарца а паролаца а системин чугӀо.",
        "accmailtitle": "Пароль дlаяхьийтина.",
        "accmailtext": "Пароль декъашхочуьна [[User talk:$1|$1]], йина ша шех хитта делла чу элпашах, дlаяхийтина хьокху $2 адрес тӀе.\n\nЧуваьлла/яла чул тӀехьа , кху гlирса чохь шуьга хийцалур ю ''[[Special:ChangePassword|шай пароль]]''.",
        "newarticle": "(Kерла)",
-       "newarticletext": "Хьо веана хьажоригци хlокху агlон тlе, хlара агlо хlинца йоцаш ю.\nНагахь иза кхолла лаахь, хlотта де лахо гуш долу корехь йоза (мадарра хьажа. [$1 гlон агlон чу]).\nНагахь гlалат даьлла нисвелляхь кхузе, атта тlе тlаlа йе '''юха йоккхуриг''' хьай гlирса тlяхь.",
+       "newarticletext": "Хьо веана хьажоригци хӀокху агӀон тӀе, хӀара агӀо хӀинца йоцаш ю.\nНагахь иза кхолла лаахь, хӀотта де лахо гуш долу корехь йоза (мадарра хьажа. [$1 гӀон агӀон чу]).\nНагахь гӀалат даьлла цахууш кхечехь кхузе, атта тӀе тӀаӀа йе '''юха йоккхуриг''' хьай гӀирса тӀехь.",
        "anontalkpagetext": "----''ХӀара дийцаре агӀо къайлаха декъашхочуьна ю, хӀинца дӀаяздар доцу, я лелош воцуш/йоцуш.\nЦундела иза вовзийта/йовзийта лелош ду терахьца IP-адрес.\nИза терахь долу меттиг хила мега кхечу декъашхойчух терра.\nНагахь хьо къайлах волу декъашхо валахь хьайна хаам кхаьчна аьлла хеташн, хьуна хьажийна доцуш, дехар до, кхолла хьай меттиг кху чохь[[Special:UserLogin/signup|дӀаяздар кхоллар]] я [[Special:UserLogin|системин чугӀо]],",
        "noarticletext": "Хlокх хан чохь кху агlонца йоза дац.\nШуьга далундерг [[Special:Search/{{PAGENAME}}|лахар ишта хьехош йолу цlе]] кхечу яззамашкахь,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} лахар кхечу тептаршкахь],\nйа '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} кхолла ишта цlе йолу агlо]'''</span>.",
        "noarticletext-nopermission": "ХӀокх хан чохь кху агӀонца йоза дац.\nШуьга далундерг [[Special:Search/{{PAGENAME}}|лахар ишта хьехош йолу цӀе]] кхечу яззамашкахь,\nйа <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} лаха оцуьнах терадерг кхечу тептаршкахь].</span>",
        "content-failed-to-parse": "Чулацам $2 богӀуш бац $1: $3.",
        "invalid-content-data": "Хилийта йиш йоцу хаамаш",
        "content-not-allowed-here": "Чулацам \"$1\" [[$2]] агӀонгахь хилийта йиш яц",
+       "editpage-notsupportedcontentformat-title": "Чулацаман тайпа ловш яц",
        "content-model-wikitext": "вики-йоза",
        "content-model-text": "цхьалхе йоза",
        "content-model-javascript": "JavaScript",
        "currentrev": "Карара верси",
        "currentrev-asof": "Карара верси оцу $1",
        "revisionasof": "Верси $1",
-       "revision-info": "Верси $1; $2 тӀера",
+       "revision-info": "Верси $1; {{GENDER:$6|$2}}$7",
        "previousrevision": "← Хьалха йоьдург",
        "nextrevision": "Тlаьхьайогlург →",
        "currentrevisionlink": "Карара верси",
        "searchmenu-exists": "'''ХӀокху вики чохь йолуш ю ишта агӀо «[[:$1]]»'''",
        "searchmenu-new": "'''Кхолла ишта агӀо «[[:$1]]» хӀокху {{PLURAL:$2|0=|вики-проектехь.}}'''",
        "searchprofile-articles": "Къаьстина агlонаш",
-       "searchprofile-project": "ГӀона а проектан а агӀонаш",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Массанхьа",
        "searchprofile-advanced": "Шуьйра",
        "searchprofile-articles-tooltip": "Лаха оцу $1",
-       "searchprofile-project-tooltip": "Лаха оцу $1",
        "searchprofile-images-tooltip": "Файлаш лахар",
        "searchprofile-everything-tooltip": "Лаха массо агlонашкахь (дийцаре агlонашцани)",
        "searchprofile-advanced-tooltip": "Лаха дехарца хlокху ана цlерашкахь",
        "search-interwiki-default": "$1 хилам.:",
        "search-interwiki-more": "(кхин)",
        "search-relatedarticle": "ХӀоттаделларг",
-       "searcheverything-enable": "Массо цIера анахь лахар",
        "searchrelated": "хlоттаделларг",
        "searchall": "массо",
        "showingresults": "Лахахьа {{PLURAL:$1|гойта|гойту|гойту}} <strong>$1</strong> {{PLURAL:$1|хилам|хиламаш|хиламаш}}, дlаболало кху № <strong>$2</strong>.",
        "powersearch-ns": "Цlераши анахь лахар:",
        "powersearch-togglelabel": "Билгалдан:",
        "powersearch-toggleall": "Массо",
-       "powersearch-togglenone": "Хlумма цаоьшу",
+       "powersearch-togglenone": "ХӀумма цаоьшу",
        "search-external": "Арахула лахар",
        "search-error": "Лохуш гӀалат даьлла: $1",
        "preferences": "Гlирс нисбан",
        "allowemail": "Магийта декъашхошна хьайга электрони почтехула кехат кхехьийта",
        "prefs-searchoptions": "Лаха",
        "prefs-namespaces": "ЦӀерийн ана",
-       "defaultns": "Я лаха лахахь гайтинчу аннашкахь:",
        "default": "Iад йитарца",
        "prefs-files": "Файлаш",
        "prefs-custom-css": "Долахь йолу CSS",
        "right-move": "АгӀонашан цӀераш хийцар",
        "right-move-subpages": "АгӀонашан цӀераш хийцар цера бухара агӀонашцан",
        "right-move-rootuserpages": "декъашхочун ораман агӀонийн цӀераш хийцар",
+       "right-move-categorypages": "Категорийн агӀонийн цӀераш хийцар",
        "right-movefile": "Файлийн цӀе хийцар",
        "right-suppressredirect": "агӀона цӀе хуьйцуш ширчу цӀарах ма кхолла дӀасахьажаяр",
        "right-upload": "Файлаш чуйаьхар",
        "action-createpage": "агӀонаш кхолла",
        "action-createtalk": "дийцаре агӀонаш кхоллар",
        "action-createaccount": "хӀара декъашхочун дӀаяздар кхоллар",
+       "action-history": "хӀокху агӀона исторега хьажар",
        "action-minoredit": "жима нисдар сана билгало",
        "action-move": "хӀокху агӀон цӀе хийца",
        "action-move-subpages": "хӀокху агӀона цӀе хийцар цуна массо бухара агӀонийн а",
        "action-move-rootuserpages": "декъашхочун ораман агӀонийн цӀераш хийцар",
+       "action-move-categorypages": "категорийн агӀонийн цӀераш хийцар",
        "action-movefile": "хӀокху файлан цӀе хийца",
        "action-upload": "чуяккха хӀара файл",
        "action-reupload": "йолуш йолу файлан тӀехула дӀаязъяр",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|тӀеххьара чудаларца}}",
        "enhancedrc-history": "истори",
        "recentchanges": "Керла нисдарш",
-       "recentchanges-legend": "Ð\93lиÑ\80Ñ\81 Ð½Ð¸Ñ\81баÑ\80на ÐºÐµÑ\80ла Ð½Ð¸Ñ\81даÑ\80Ñ\88",
+       "recentchanges-legend": "Ð\9aеÑ\80ла Ð½Ð¸Ñ\81даÑ\80Ñ\88 Ð³Ð°Ñ\80 Ð½Ð¸Ñ\81даÑ\80",
        "recentchanges-summary": "Лахахь гайтина хене хьаьжна Википедин агӀонашкахь тӀаьхьара бина хийцамаш",
        "recentchanges-noresult": "Билгал йинчу хенахь цхьа хийцамаш бина бац.",
        "recentchanges-feed-description": "Тергам бе тlаьхьара вики хийцаман хlокху ларца.",
        "recentchanges-label-bot": "ХӀара нисдар шаболх бечо дина",
        "recentchanges-label-unpatrolled": "ХӀара нисдар хӀинца цхьано патрулировать дина дац",
        "recentchanges-label-plusminus": "байташкахь барам хийцар",
-       "recentchanges-legend-newpage": "(хьажа кхин [[Special:NewPages|керла агӀонийн могӀа]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (хьажа кхин [[Special:NewPages|керла агӀонийн могӀа]])",
        "rcnotefrom": "Лахахь гайтина тӀера <strong>$2</strong> (хийцамаш <strong>$1</strong> кӀезиг).",
        "rclistfrom": "Гайта хийцам оцу $3 $2",
        "rcshowhideminor": "$1 кегийра нисдарш",
        "uploadnologintext": "Серверан чу файлаш яха хьо $1.",
        "uploaderror": "Файл чуяккхаран гӀалат",
        "upload-recreate-warning": "'''Тегам бе: иштта цӀе йолу файл дӀаяьккхина я цӀе хийцина.'''\n\nЛахахьа гойтуш ю хӀокху агӀона тептар:",
-       "uploadtext": "Лелайе хӀара агӀо сервер чу файлаш йохуш.\nХьалхо чуйаьхна файлаш хьажа,  [[Special:FileList|кхузахь]]. Кхин чуйаьхна файлаш дӀаязло [[Special:Log/upload|чуяхаран тептар чохь]], дӀаяьхна файлаш каро йиш ю [[Special:Log/delete|кхузахь]].\n\nФайл агӀона чуйилла лелабе лахара могӀанаш:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' файла Файлан юьззина верси чуйиллуш;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|цунахь лаьцна хаам]]</nowiki></code>''' 200 пиксель барамехь файл чуйилар бухахь цунахь лаьцна могӀа а болуш;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' файлан тӀе хьажораг хӀотайо файл агӀонгахь ца гуш.",
+       "uploadtext": "Лелайе хӀара агӀо сервер чу файлаш йохуш.\nХьалхо чуяьхна файлаш хьажа,  [[Special:FileList|кхузахь]]. Кхин чуяьхна файлаш дӀаязло [[Special:Log/upload|чуяхаран тептар чохь]], дӀаяьхна файлаш каро йиш ю [[Special:Log/delete|кхузахь]].\n\nФайл агӀона чуйилла лелабе лахара могӀанаш:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' файла Файлан юьззина верси чуйиллуш;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|цунахь лаьцна хаам]]</nowiki></code>''' 200 пиксель барамехь файл чуйилар бухахь цунахь лаьцна могӀа а болуш;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' файлан тӀе хьажораг хӀотайо файл агӀонгахь ца гуш.",
        "upload-permitted": "Магийна файлийн тайпанаш: $1.",
        "upload-preferred": "Магийна файлийн тайпанаш: $1.",
        "upload-prohibited": "Магийна доцу файлийн тайпанаш: $1.",
        "upload-warning-msg": "Чуйоккхуш [$2] гӀалат даьлла. И нисдан юхагӀо [[Special:Upload/stash/$1|upload form]] чу.",
        "upload-proto-error": "Нийса йоцу протокол",
        "upload-file-error": "Чоьхьара гӀалат",
+       "upload-misc-error": "Чуяккхаран цадевза гӀалат",
        "upload-http-error": "Даьлла гӀалат HTTP: $1",
        "backend-fail-stream": "ДӀаяккха цатарло файл «$1».",
        "backend-fail-backup": "Таро яц файлан $1 тӀаьхьалонан копиян.",
        "uploadstash-errclear": "Файлаш дӀацӀанъян цаелира.",
        "uploadstash-refresh": "Карлабаккха файлийн могӀам",
        "img-auth-accessdenied": "ТӀекхача магийна дац",
+       "img-auth-streaming": "Тоба дӀаелар «$1».",
        "http-invalid-url": "ГӀалате URL: $1",
        "http-read-error": "Ешаран гӀалат HTTP.",
        "http-timed-out": "Хьежаран хан чекхели HTTP-жоп дехаран.",
+       "http-curl-error": "URLан гӀалат: $1",
        "upload-curl-error28": "Чуйоккху хан чеккхелла",
        "license": "Бакъойалар:",
        "license-header": "Бакъойалар",
        "unusedtemplates": "Лелош йоцу кепаш",
        "unusedtemplatestext": "Кхузахь дагар йина «{{ns:template}}» цӀерийн меттиган агӀонаш, кхечу агӀонийн юкъа тоьхна йоцу.\nДиц ма делахь хьажа кеп агӀонашкахь лелош юй.",
        "unusedtemplateswlh": "кхин хьажоргаш",
-       "randompage": "Цахууш нисйелла агӀо",
-       "randomincategory": "Категори чу цахууш нийса елла агӀо",
+       "randompage": "Цахууш нисъелла агӀо",
+       "randomincategory": "Категори чу цахууш нисъелла  агӀо",
        "randomincategory-selectcategory": "Категори чу цахууш нийса елла агӀона чу гӀо: $1 $2.",
        "randomincategory-selectcategory-submit": "Дехьа гӀо",
        "randomredirect": "Цахууш нисделла дIасахьажор",
        "statistics-articles": "Яззамаш",
        "statistics-pages": "АгӀонаш",
        "statistics-pages-desc": "Массо вики агlонаш, дийцаре агlонашцани, дlасахьаждарш а кхин дерш.",
-       "statistics-files": "Чуйаьхна файлаш",
+       "statistics-files": "Чуяьхна файлаш",
        "statistics-edits": "Нисдаран дукхалла {{grammar:genitive|{{SITENAME}}}} дlа йолайаларца",
        "statistics-edits-average": "Юккъера агӀонан нисдаран терахь",
        "statistics-views-total": "Массо хьажарш",
        "statistics-views-total-desc": "Ма лара дӀаяьхна а белхан а агӀонашка хьажар",
        "statistics-views-peredit": "Нисдаре хьажарш",
-       "statistics-users": "[[ВП:Дlаязвалар|Дlаязбелларш]] шаберигге декъашхой чохь болу [[Special:ListUsers|(могlам)]]",
+       "statistics-users": "[[ВП:ДӀаязвалар|ДӀаязбелларш]] берриге декъашхой чохь болу [[Special:ListUsers|(могӀам)]]",
        "statistics-users-active": "Жигара декъашхой",
        "statistics-users-active-desc": "Декъашхой, муьлха цхьа хӀум дина болу, кху {{PLURAL:$1|1=тӀаьххьара $1 динахь|тӀаьххьара $1 дийнахь}}",
        "statistics-mostpopular": "Дукху хьоьжу агӀонаш",
        "ntransclusions": "лелош ю $1 {{PLURAL:$1|агӀонгахь|агӀонашкахь}}",
        "specialpage-empty": "Дехаро хӀумма ца елла.",
        "lonelypages": "Байлахь йисина агIонаш",
-       "lonelypagestext": "Ð\9aÑ\85Ñ\83заÑ\85Ñ\8c Ñ\8e {{grammar:genitive|{{SITENAME}}}} ÐºÑ\85еÑ\87Ñ\83 Ð°Ð³Ó\80онаÑ\88каÑ\85Ñ\8c Ñ\82Ó\80е Ñ\85Ñ\8cажийна Ñ\85Ñ\8cажоÑ\80агаÑ\88 Ð¹Ð¾Ñ\86Ñ\83 Ð°Ð³Ó\80онаÑ\88.",
+       "lonelypagestext": "Кхузахь ю {{grammar:genitive|{{SITENAME}}}} кхечу агӀонашкахь тӀе хьажийна хьажоргаш йоцу агӀонаш.",
        "uncategorizedpages": "Категореш йоцу агIонаш",
        "uncategorizedcategories": "Категореш йоцу категореш",
        "uncategorizedimages": "Категореш йоцу файлаш",
        "prefixindex": "Хьалха агӀонашан цӀераш хӀотто йеза",
        "prefixindex-namespace": "Хьалха агӀонашан цӀераш хӀотто еза («{{ns:$1}}»)",
        "prefixindex-strip": "Хиламийн могӀам чура префикс къайлаяккха",
-       "shortpages": "Ð\91оÑ\86оа Ñ\8fззамаÑ\88",
+       "shortpages": "Боца яззамаш",
        "longpages": "Беха яззамаш",
        "deadendpages": "Дика йоцу агIонаш",
        "protectedpages": "ГIаролла дина агIонаш",
        "protectedpages-unknown-timestamp": "Хууш дац",
        "protectedpages-unknown-performer": "Хууш доцу декъашхо",
        "protectedtitles": "ГIаролла дина цIераш",
-       "listusers": "Декъашхой могlам",
+       "listusers": "Декъашхой могӀам",
        "listusers-editsonly": "Цхаъ мукъане а хийцам бина декъашхой гайта",
        "listusers-creationsort": "Кхоьллина хене хьаьжна нисъяр",
        "listusers-desc": "Харжа къезиг хиларца",
        "listusers-submit": "Гайта",
        "listusers-noresult": "Декъашхой цакарий.",
        "listusers-blocked": "(блоктоьхна)",
-       "activeusers": "Жигар декъашхой могlам",
+       "activeusers": "Жигар декъашхой могӀам",
        "activeusers-intro": "Лахахь гойтуш бу  {{PLURAL:$1|1=тӀаьхьара $1 динахь|тӀаьхьара $1 деношкахь}} хийцамаш бина декъашхой.",
        "activeusers-count": "{{PLURAL:$3|1=тӀаьхьарчу $3 динахь|тӀаьхьара $3 деношкахь}} $1 {{PLURAL:$1|1=нисдар|нисдарш}} дина",
        "activeusers-from": "Гучé баха декъашхой, болалуш болу тӀера:",
        "listgrouprights-group": "Тоба",
        "listgrouprights-rights": "Бакъонаш",
        "listgrouprights-helppage": "Help:Тобан бакъонаш",
-       "listgrouprights-members": "(тобан могlам)",
+       "listgrouprights-members": "(тобан могӀам)",
        "listgrouprights-addgroup": "{{PLURAL:$2|тоба|тобанаш}} тӀетоха ло: $1",
        "listgrouprights-removegroup": "{{PLURAL:$2|тобан чура дӀабаха|тобанаш чура дӀабаха}} ло: $1",
        "listgrouprights-addgroup-all": "массо тобанийн юкъатоха йиш ю",
        "watchnologin": "Системин чугӀо",
        "addwatch": "Тергаме могӀам юкъа тоха",
        "addedwatchtext": "ХӀара «[[:$1]]» агӀо тӀетоьхна хьан [[Special:Watchlist|тергаме могӀам чу]].\nОцу могӀам чохь дӀаязбийр бу агӀона а цуьнца йолу дийцаре агӀона а бина хийцамаш.",
+       "addedwatchtext-short": "«$1» агӀо хьан тергаман магӀам тӀетоьхна.",
        "removewatch": "ДӀаяккха тергаме могӀам юкъар",
        "removedwatchtext": "АгӀо «[[:$1]]» дӀаяьккхина яра хьан [[Special:Watchlist|тергаме могӀанан юкъар]].",
+       "removedwatchtext-short": "«$1» агӀо хьан тергаман магӀам чура дӀаяьккхина.",
        "watch": "Тидам бе",
        "watchthispage": "Тергам бé хlокху агlон",
        "unwatch": "Тергамах къаста",
        "enotif_body_intro_moved": "Проектан «{{SITENAME}}» агӀо «$1» $PAGEEDITDATE {{gender:$2|декъашхочо}} $2 цӀе хийцина, карара верси ю : $3",
        "enotif_body_intro_restored": "Проектан «{{SITENAME}}» агӀо «$1» $PAGEEDITDATE {{gender:$2|декъашхочо}} $2 кхоьллина, карара верси ю : $3",
        "enotif_body_intro_changed": "Проектан «{{SITENAME}}» агӀо «$1» $PAGEEDITDATE {{gender:$2|декъашхочо}} $2 хийцам бина, карара верси ю : $3",
+       "enotif_lastvisited": "Хьажа кхин. $1 хьуна тӀаьхьара гина чул тӀехьа бина хийцамашка хьажар.",
+       "enotif_lastdiff": "Кхин хьажа. $1 хийцам бовза.",
+       "enotif_anon_editor": "къайлаха декъашхо $1",
+       "enotif_body": "Ассалам Ӏалийкум, $WATCHINGUSERNAME!\n\n$PAGEINTRO $NEWPAGE\n\nХийцамах лаьцна доца яздар: $PAGESUMMARY $PAGEMINOREDIT\n\nХийцам биначунга хаам бар:\nэл. почта: $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": "Бакъдан",
        "ipaddressorusername": "IP-адрес я декъашхочун цӀе:",
        "ipbexpiry": "Хан чекхйолу:",
        "ipbreason": "Бахьна:",
-       "ipbreason-dropdown": "* Ð\91елÑ\85ан Ð½ÐµÐºÑ\8a Ð´Ó\80акÑ\8aовлаÑ\80 Ð±Ð°Ñ\85Ñ\8cанаÑ\88:\n** Ð¥Ð°Ñ\80Ñ\86а Ñ\85аам Ð±Ð°Ñ\80\n** Ð\90гÓ\80онан Ñ\87Ñ\83Ñ\80аниг Ð´Ó\80аÑ\8fккÑ\85аÑ\80\n** Ð¡Ð¿Ð°Ð¼-Ñ\85Ñ\8cажоÑ\80агаÑ\88 Ð°Ñ\80аÑ\85Ñ\8cаÑ\80а Ñ\81айÑ\82аÑ\88на\n** Ð\9cаÑ\8cÓ\80на Ð´Ð¾Ñ\86Ñ\83 Ñ\82екÑ\81Ñ\82 Ñ\82Ó\80еÑ\82оÑ\85аÑ\80\n** Ð\94екÑ\8aаÑ\88Ñ\85ой Ñ\85Ñ\8cийзабаÑ\80, ÐºÑ\85еÑ\80амаÑ\88 Ñ\82иÑ\81Ñ\81аÑ\80\n** Ð\9cаÑ\81ийÑ\82Ñ\82а Ð»Ð°Ñ\80аман Ñ\8fздаÑ\80 Ð·Ñ\83ламан Ð»ÐµÐ»Ð°Ñ\8fÑ\80\n** Ð\9cагитина йоцу декъашхочун цӀе",
+       "ipbreason-dropdown": "* Ð\91елÑ\85ан Ð½ÐµÐºÑ\8a Ð´Ó\80акÑ\8aовлаÑ\80 Ð±Ð°Ñ\85Ñ\8cанаÑ\88:\n** Ð¥Ð°Ñ\80Ñ\86а Ñ\85аам Ð±Ð°Ñ\80\n** Ð\90гÓ\80онан Ñ\87Ñ\83Ñ\80аниг Ð´Ó\80аÑ\8fккÑ\85аÑ\80\n** Ð¡Ð¿Ð°Ð¼-Ñ\85Ñ\8cажоÑ\80гаÑ\88 Ð°Ñ\80аÑ\85Ñ\8cаÑ\80а Ñ\81айÑ\82аÑ\88на\n** Ð\9cаÑ\8cÓ\80на Ð´Ð¾Ñ\86Ñ\83 Ñ\82екÑ\81Ñ\82 Ñ\82Ó\80еÑ\82оÑ\85аÑ\80\n** Ð\94екÑ\8aаÑ\88Ñ\85ой Ñ\85Ñ\8cийзабаÑ\80, ÐºÑ\85еÑ\80амаÑ\88 Ñ\82ийÑ\81аÑ\80\n** Ð\9cаÑ\81ийÑ\82Ñ\82а Ð»Ð°Ñ\80аман Ñ\8fздаÑ\80 Ð·Ñ\83ламан Ð»ÐµÐ»Ð°Ñ\8fÑ\80\n** Ð\9cагийтина йоцу декъашхочун цӀе",
        "ipb-hardblock": "Шаш довзийтина болу декъашхошна бехкам бе хӀокху IP-адресца тадарш дан",
        "ipbcreateaccount": "Цамаго керла декъашхочун дӀаяздарш кхолла",
        "ipbemailban": "Цамагдо декъашхошка хааман кехаташ кхехьийта",
        "ip_range_invalid": "IP-адресийн магийна йоцу диапазон.",
        "move-page": "$1 — цӀе хийцар",
        "move-page-legend": "ЦӀe хийца яр",
-       "movepagetext": "Ð\91Ñ\83Ñ\85аÑ\85Ñ\8c Ð¹Ð¾Ð»Ñ\83 Ñ\84оÑ\80манÑ\86а Ð°Ð³Ó\80он Ñ\86Ó\80е Ñ\85ийÑ\86ало. Ð¦Ñ\83л Ñ\81овнаÑ\85 Ñ\86Ñ\83Ñ\8cна Ñ\85ийÑ\86аман Ð¶Ñ\83Ñ\80нал ÐºÑ\85оÑ\8cÑ\87Ñ\83 Ð¼ÐµÑ\82Ñ\82е Ð´Ð¾ÐºÐºÑ\85а. Ð¥Ñ\8cалÑ\85алеÑ\80а Ñ\86Ó\80аÑ\80аÑ\85Ñ\8c Ñ\85иÑ\80Ñ\8aÑ\8e ÐºÐµÑ\80ла ÐºÑ\85оÑ\8cллина Ð°Ð³Ó\80онан Ñ\85Ñ\8cажоÑ\80аг.\n\nÐ¥Ñ\8cовÑ\81алаÑ\88 [[Special:DoubleRedirects|Ñ\88алÑ\85а]] Ð° [[Special:BrokenRedirects|йоÑ\85на Ñ\85Ñ\8cажоÑ\80агаÑ\88]] Ñ\8eй Ñ\82еÑ\85Ñ\8c Ð°Ñ\8cлла.\n\nШÑ\83 Ð¶Ð¾Ñ\8cпеÑ\85Ñ\8c Ð´Ñ\83 Ñ\85Ñ\8cажоÑ\80агаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажораг елахь, я еса елахь а, цуьна хьийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хилларгчунтӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
-       "movepagetext-noredirectfixer": "Ð\91Ñ\83Ñ\85аÑ\85Ñ\8c Ð¹Ð¾Ð»Ñ\83 Ñ\84оÑ\80манÑ\86а Ð°Ð³Ó\80он Ñ\86Ó\80е Ñ\85ийÑ\86ало. Ð¦Ñ\83л Ñ\81овнаÑ\85 Ñ\86Ñ\83Ñ\8cна Ñ\85ийÑ\86аман Ð¶Ñ\83Ñ\80нал ÐºÑ\85оÑ\8cÑ\87Ñ\83 Ð¼ÐµÑ\82Ñ\82е Ð´Ð¾ÐºÐºÑ\85а. Ð¥Ñ\8cалÑ\85алеÑ\80а Ñ\86Ó\80аÑ\80аÑ\85Ñ\8c Ñ\85иÑ\80Ñ\8aÑ\8e ÐºÐµÑ\80ла ÐºÑ\85оÑ\8cллина Ð°Ð³Ó\80онан Ñ\85Ñ\8cажоÑ\80аг.\n\nÐ¥Ñ\8cовÑ\81алаÑ\88 [[Special:DoubleRedirects|Ñ\88алÑ\85а]] Ð° [[Special:BrokenRedirects|йоÑ\85на Ñ\85Ñ\8cажоÑ\80агаÑ\88]] Ñ\8eй Ñ\82еÑ\85Ñ\8c Ð°Ñ\8cлла.\n\nШÑ\83 Ð¶Ð¾Ñ\8cпеÑ\85Ñ\8c Ð´Ñ\83 Ñ\85Ñ\8cажоÑ\80агаÑ\88 Ð½Ð¸Ð¹Ñ\81а Ð½ÐµÐºÑ\8a Ð³Ð¾Ð¹Ñ\82Ñ\83Ñ\88 Ñ\85илаÑ\80ан.\n\nТидам Ð±Ðµ Ñ\85Ñ\8cалÑ\85алеÑ\80а Ð°Ð³Ó\80он Ñ\86Ó\80е â\80\98â\80\99â\80\99Ñ\85ийÑ\86алÑ\83Ñ\80 Ñ\8fÑ\86â\80\99â\80\99â\80\99 Ð¸Ñ\88Ñ\82Ñ\82а Ñ\86Ó\80е Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Ó\80о Ð¹Ð¾Ð»Ñ\83Ñ\88 ÐµÐ»Ð°Ñ\85Ñ\8c. Ð®ÐºÑ\8aаÑ\80даккÑ\85аÑ\80: Ð¹Ð¾Ð»Ñ\83Ñ\88 Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Ó\80о ÐºÑ\85оÑ\8cÑ\87Ñ\83Ñ\85Ñ\8cа Ñ\85Ñ\8cажоÑ\80аг ÐµÐ»Ð°Ñ\85Ñ\8c, Ñ\8f ÐµÑ\81а ÐµÐ»Ð°Ñ\85Ñ\8c Ð°, Ñ\86Ñ\83Ñ\8cна Ñ\85Ñ\8cийÑ\86аме Ð¸Ñ\81Ñ\82оÑ\80и Ñ\8fÑ\86аÑ\85Ñ\8c Ð°.\n\nÐ\98 Ð±Ð¾Ñ\85Ñ\83Ñ\80г Ð´Ñ\83 Ñ\88Ñ\83н Ð°Ð³Ó\80онан Ñ\86Ó\80е Ñ\8eÑ\85а Ð° Ñ\85Ñ\8cалÑ\85а Ñ\85иллаÑ\80гÑ\87Ñ\83нÑ\82Ó\80е Ñ\85ийÑ\86а Ð¹Ð¸Ñ\88 Ñ\8e, Ð°Ð¼Ð¼Ð° Ð¹Ð¾Ð»Ñ\83Ñ\88 Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Ó\80о Ð´Ó\80аÑ\8fккÑ\85а Ð¹Ð¸Ñ\88 Ñ\8fÑ\86.\n\n'''Ð\94Ó\80Ð\90ХЬÐ\95Ð\94Ð\90Р!'''\n\nЦÓ\80е Ñ\85ийÑ\86аÑ\80 Ð±Ð°Ñ\85Ñ\8cнеÑ\85Ñ\8c Ð³Ó\80аÑ\80Ñ\8aÑ\8fлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
+       "movepagetext": "Ð\91Ñ\83Ñ\85аÑ\85Ñ\8c Ð¹Ð¾Ð»Ñ\83 Ñ\84оÑ\80манÑ\86а Ð°Ð³Ó\80он Ñ\86Ó\80е Ñ\85ийÑ\86ало. Ð¦Ñ\83л Ñ\81овнаÑ\85 Ñ\86Ñ\83Ñ\8cна Ñ\85ийÑ\86аман Ð¶Ñ\83Ñ\80нал ÐºÑ\85оÑ\8cÑ\87Ñ\83 Ð¼ÐµÑ\82Ñ\82е Ð´Ð¾ÐºÐºÑ\85а. Ð¥Ñ\8cалÑ\85алеÑ\80а Ñ\86Ó\80аÑ\80аÑ\85Ñ\8c Ñ\85иÑ\80Ñ\8aÑ\8e ÐºÐµÑ\80ла ÐºÑ\85оÑ\8cллина Ð°Ð³Ó\80онан Ñ\85Ñ\8cажоÑ\80аг.\n\nÐ¥Ñ\8cовÑ\81алаÑ\88 [[Special:DoubleRedirects|Ñ\88алÑ\85а]] Ð° [[Special:BrokenRedirects|йоÑ\85на Ñ\85Ñ\8cажоÑ\80гаÑ\88]] Ñ\8eй Ñ\82еÑ\85Ñ\8c Ð°Ñ\8cлла.\n\nШÑ\83 Ð¶Ð¾Ñ\8cпеÑ\85Ñ\8c Ð´Ñ\83 Ñ\85Ñ\8cажоÑ\80гаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажораг елахь, я еса елахь а, цуьна хьийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хилларгчунтӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
+       "movepagetext-noredirectfixer": "Ð\91Ñ\83Ñ\85аÑ\85Ñ\8c Ð¹Ð¾Ð»Ñ\83 Ñ\84оÑ\80манÑ\86а Ð°Ð³Ó\80он Ñ\86Ó\80е Ñ\85ийÑ\86ало. Ð¦Ñ\83л Ñ\81овнаÑ\85 Ñ\86Ñ\83Ñ\8cна Ñ\85ийÑ\86аман Ð¶Ñ\83Ñ\80нал ÐºÑ\85оÑ\8cÑ\87Ñ\83 Ð¼ÐµÑ\82Ñ\82е Ð´Ð¾ÐºÐºÑ\85а. Ð¥Ñ\8cалÑ\85алеÑ\80а Ñ\86Ó\80аÑ\80аÑ\85Ñ\8c Ñ\85иÑ\80Ñ\8aÑ\8e ÐºÐµÑ\80ла ÐºÑ\85оÑ\8cллина Ð°Ð³Ó\80онан Ñ\85Ñ\8cажоÑ\80аг.\n\nÐ¥Ñ\8cовÑ\81алаÑ\88 [[Special:DoubleRedirects|Ñ\88алÑ\85а]] Ð° [[Special:BrokenRedirects|йоÑ\85на Ñ\85Ñ\8cажоÑ\80гаÑ\88]] Ñ\8eй Ñ\82еÑ\85Ñ\8c Ð°Ñ\8cлла.\n\nШÑ\83 Ð¶Ð¾Ñ\8cпеÑ\85Ñ\8c Ð´Ñ\83 Ñ\85Ñ\8cажоÑ\80гаÑ\88 Ð½Ð¸Ð¹Ñ\81а Ð½ÐµÐºÑ\8a Ð³Ð¾Ð¹Ñ\82Ñ\83Ñ\88 Ñ\85илаÑ\80ан.\n\nТидам Ð±Ðµ Ñ\85Ñ\8cалÑ\85алеÑ\80а Ð°Ð³Ó\80он Ñ\86Ó\80е â\80\98â\80\99â\80\99Ñ\85ийÑ\86алÑ\83Ñ\80 Ñ\8fÑ\86â\80\99â\80\99â\80\99 Ð¸Ñ\88Ñ\82Ñ\82а Ñ\86Ó\80е Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Ó\80о Ð¹Ð¾Ð»Ñ\83Ñ\88 ÐµÐ»Ð°Ñ\85Ñ\8c. Ð®ÐºÑ\8aаÑ\80даккÑ\85аÑ\80: Ð¹Ð¾Ð»Ñ\83Ñ\88 Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Ó\80о ÐºÑ\85оÑ\8cÑ\87Ñ\83Ñ\85Ñ\8cа Ñ\85Ñ\8cажоÑ\80аг ÐµÐ»Ð°Ñ\85Ñ\8c, Ñ\8f ÐµÑ\81а ÐµÐ»Ð°Ñ\85Ñ\8c Ð°, Ñ\86Ñ\83Ñ\8cна Ñ\85Ñ\8cийÑ\86аме Ð¸Ñ\81Ñ\82оÑ\80и Ñ\8fÑ\86аÑ\85Ñ\8c Ð°.\n\nÐ\98 Ð±Ð¾Ñ\85Ñ\83Ñ\80г Ð´Ñ\83 Ñ\88Ñ\83н Ð°Ð³Ó\80онан Ñ\86Ó\80е Ñ\8eÑ\85а Ð° Ñ\85Ñ\8cалÑ\85а Ñ\85иллаÑ\80гÑ\87Ñ\83нÑ\82Ó\80е Ñ\85ийÑ\86а Ð¹Ð¸Ñ\88 Ñ\8e, Ð°Ð¼Ð¼Ð° Ð¹Ð¾Ð»Ñ\83Ñ\88 Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Ó\80о Ð´Ó\80аÑ\8fккÑ\85а Ð¹Ð¸Ñ\88 Ñ\8fÑ\86.\n\n'''Ð\94Ó\80Ð\90ХЬÐ\95Ð\94Ð\90Р!'''\n\nЦÓ\80е Ñ\85ийÑ\86аÑ\80 Ð±Ð°Ñ\85Ñ\8cнеÑ\85Ñ\8c Ð³Ó\80аÑ\80Ñ\8aÑ\8fÑ\8cлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
        "movepagetalktext": "ТӀе хӀоьттина йолу дийцаре агӀо ишта цӀе хийцина хира ю, '''цхьа йолу ханчохь, маца:'''\n\n*Йаьсса йоцу дийцаре агӀо йолуш ю оцу цӀарца йа\n*Ахьа къастаман харжам цабиняхь а къастам хӀотточехь.\n\nИшта чу ханчохь, ахьа дехьа яккха йезар ю йа куьйга хӀоттайар, нагахь иза хьашт йалахь.",
        "movearticle": "Цle хийца хlокху агlон",
        "moveuserpage-warning": "'''Тергам бе.''' Хьо декъашхочун агӀона цӀе хийца гӀерта. Дехар до, тергам бе, декъашхочун агӀона цӀе бен хийца лур яц, декъашхочун дӀаяздаран цӀе хийца лур яц.",
+       "movecategorypage-warning": "<strong>ДӀахьедар:</strong> Хьо категорин агӀон цӀе хийца гӀерта. Дехар до, терго йе, хӀокху агӀона бен цӀе хуьйцур яц, шира чу категори чура массо агӀонаш керла категори чу йохур <em>яц</em>.",
        "movenologintext": "АгӀона цӀе хийца [[Special:UserLogin|системин чугӀо]].",
        "movenotallowed": "Хьан бакъо яц керла агӀонаш кхолла.",
        "movenotallowedfile": "Хьан файлийн цӀераш хийца бакъо яц.",
        "tooltip-pt-mytalk": "Сан дийцаре агlо",
        "tooltip-pt-preferences": "Хьан гlирс нисбар",
        "tooltip-pt-watchlist": "Ахьа тергам бо агӀонийн хийцаман могӀам",
-       "tooltip-pt-mycontris": "Хьан нисдаран могlам",
+       "tooltip-pt-mycontris": "Хьан нисдаран могӀам",
        "tooltip-pt-login": "Хlокху гlирса чохь дlавазвала/яла мега, амма иза тlедожош дац.",
        "tooltip-pt-logout": "Дlадерзадо болх бар",
        "tooltip-ca-talk": "Дийцаре агlон чулацам",
        "tooltip-n-mainpage": "Коьрта агӀона дехьа гӀо",
        "tooltip-n-mainpage-description": "Коьрта агӀона дехьа гӀо",
        "tooltip-n-portal": "Оцу кхолламах, мичахь хlу йу лаьташ а хlудалур ду шуьга",
-       "tooltip-n-currentevents": "Дlаоьхуш болу хаамашна могlам",
-       "tooltip-n-recentchanges": "Тlаьххьаралера хийцаман могlам",
+       "tooltip-n-currentevents": "ДӀаоьхуш болу хаамашна могӀам",
+       "tooltip-n-recentchanges": "ТӀаьххьаралера хийцаман могӀам",
        "tooltip-n-randompage": "Хьажа цахууш нисйеллачу агlоне",
        "tooltip-n-help": "ГӀоде меттиг",
-       "tooltip-t-whatlinkshere": "Массо агlон могlам, хlокху агlонтlе хьажийна йолу",
+       "tooltip-t-whatlinkshere": "Массо агӀон могӀам, хӀокху агӀонтӀе хьажийна йолу",
        "tooltip-t-recentchangeslinked": "Тlаьхьарлера хийцамаш хlокху агlонашкахь, мичхьа хьажийна хlара агlо",
        "tooltip-feed-rss": "Хьагайтар оцу RSS цани хlокху агlон",
        "tooltip-feed-atom": "Хьагайтар оцу Atom цани хlокху агlон",
        "siteusers": "{{PLURAL:$2|1=декъашхо|декъашхой}} {{grammar:genitive|{{SITENAME}}}} $1",
        "anonusers": "{{PLURAL:$2|1=цӀе хьулйина декъашхо|цӀе хьулйина декъашхой}} {{grammar:genitive|{{SITENAME}}}} $1",
        "creditspage": "Баркаллаш",
-       "nocredits": "Бац декъашхойн могlам хlокху яззамца",
+       "nocredits": "Бац декъашхойн могӀам хӀокху яззамца",
        "spamprotectiontitle": "Совбиларна литтар",
        "spamprotectiontext": "Хьо дӀаязъян гӀерта агӀо спам-литтаро дӀакъоьвлина.\nЦуна бахьна хила там бу агӀона чохь зулам литтаран чутоьхна йолу хьажораг хилар.",
        "spambot_username": "Спам дӀацӀаняр",
        "pageinfo-edits": "Массо нисдарийн дукхалла",
        "pageinfo-authors": "Башха авторийн дукхалла",
        "pageinfo-recent-edits": "ТӀехьарчу хана нисдарш ($1 хана)",
+       "pageinfo-recent-authors": "ТӀехьарчу хана башха автораш",
        "pageinfo-magic-words": "{{PLURAL:$1|Бозбуунчаллин дош|Бозбуунчаллин дешнаш}} ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Къайла категори|Къайла категореш}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|1=Кеп|Кепаш}} ($1)",
        "pageinfo-toolboxlink": "Агlонах болу бовзам",
        "pageinfo-redirectsto": "ДӀасахьажорг",
        "pageinfo-redirectsto-info": "Хаам",
+       "pageinfo-contentpage": "Лорурго чулацаме гойту агӀо",
        "pageinfo-contentpage-yes": "ХӀаъ",
        "pageinfo-protect-cascading": "Чахчарин гӀоралла кхузара",
        "pageinfo-protect-cascading-yes": "ХӀаъ",
        "pageinfo-category-pages": "АгӀонийн дукхалла",
        "pageinfo-category-subcats": "Бухара категорийн дукхалла",
        "pageinfo-category-files": "Файлийн дукхалла",
-       "skinname-cologneblue": "Кёльнин сингаттам",
-       "skinname-modern": "Кхузаманан",
-       "skinname-vector": "Векторни",
+       "skinname-vector": "Векторан",
        "markaspatrolleddiff": "Билгалйе теллина санна",
        "markaspatrolledtext": "Билгала йе хӀара агӀо хьаьжна сана",
        "markedaspatrolled": "ДӀадахка теллина санна хилар",
        "file-info-png-repeat": "локху $1 {{PLURAL:$1|за}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|кадр|кадраш}}",
        "newimages": "Керлачу файлийн галерей",
-       "newimages-summary": "ХӀокху белхан агӀона чохь гойтуш ю дукха хан йоццуш чуйаьхна файлаш.",
+       "newimages-summary": "ХӀокху белхан агӀона чохь гойтуш ю дукха хан йоццуш чуяьхна файлаш.",
        "newimages-legend": "Литтар",
+       "newimages-showbots": "Гайта боташ чуяьхна файлаш",
        "noimages": "Суьрташ дац.",
        "ilsubmit": "Лаха",
        "bydate": "терахьашца",
        "exif-compressedbitsperpixel": "Бесан кIоргалла дацдина чул тӀехьа",
        "exif-pixelydimension": "Суьртан шоралла",
        "exif-pixelxdimension": "Суьртан локхалла",
+       "exif-relatedsoundfile": "Къамелан аьзнийн файл",
        "exif-datetimeoriginal": "Дуьххьарлера терахь а хан",
        "exif-datetimedigitized": "Оцифровк йина терахь а хан а",
        "exif-subsectime": "Файлан хийцам баран хан секундашкахь",
+       "exif-subsectimeoriginal": "Оригинал хенан секундан дакъа",
+       "exif-subsectimedigitized": "Терахьийн хенан секундан дакъа",
        "exif-exposuretime": "Сурт доккхуш йолу серлон хьал",
        "exif-exposuretime-format": "$1 ($2) чура",
        "exif-fnumber": "Диафрагмин дукхалла",
        "table_pager_empty": "Цакарийна",
        "autosumm-blank": "Агӏон чулацам дӏабяккхина",
        "autosumm-replace": "АгӀона чуьраниг хийцина → «$1»",
-       "autoredircomment": "ДӀасахьажийна цуна [[$1]] тӏе",
+       "autoredircomment": "[[$1]] тӀе хьажийна",
        "autosumm-new": "Керла агlо: «$1»",
        "watchlistedit-normal-title": "Тергаме могӀанийн хийцамаш",
        "watchlistedit-normal-legend": "Тергаме могӀам юкъар дӀаяккхар",
        "watchlistedit-raw-submit": "МогӀам Ӏалашбар",
        "watchlistedit-raw-added": "{{PLURAL:$1|ТӀетоьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|ДӀаяьккхина|ДӀаяьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
+       "watchlistedit-clear-title": "Тергаман могӀам дӀацӀанбар",
+       "watchlistedit-clear-legend": "Тергаман могӀам дӀацӀанбан",
+       "watchlistedit-clear-explain": "Хьан тергаман могӀам чура массо дӀяздарш дӀадаьра ду",
+       "watchlistedit-clear-titles": "Корта:",
+       "watchlistedit-clear-submit": "Тергаман могӀам дӀацӀанбан (иза сацадан лурдац)",
+       "watchlistedit-clear-done": "Хьан тергаман могӀам дӀацӀанбина",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|ДӀаяьккхина|ДӀаяьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
+       "watchlistedit-too-many": "Кхуззахь гайта тӀехь дукха агӀонаш ю.",
+       "watchlisttools-clear": "Тергаман могӀам дӀацӀанбан",
        "watchlisttools-view": "МогӀам чура агӀонашан хийцамаш",
-       "watchlisttools-edit": "Хьажа/нисбé могlам",
+       "watchlisttools-edit": "Хьажа/нисбé могӀам",
        "watchlisttools-raw": "Йоза санна нисдé",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|дийцаре]])",
        "version": "Верси MediaWiki",
        "compare-invalid-title": "Ахьа язйина йолу цӀе ца магайо.",
        "compare-title-not-exists": "Иштта цӀе яц.",
        "compare-revision-not-exists": "Иштта версеш яц.",
-       "dberr-problems": "Бехк ма бил! Хlинц машан меттиган хилла гlирсаца халонаш.",
+       "dberr-problems": "Бехк ма бил! ХӀокху сайтехь техникан халонаш хила.",
        "dberr-again": "Хьажа карла йаккха агlо массех минот йаьлча.",
        "dberr-info": "(аьтто ца хили зӀе хӀотта серверца бухара хаамашца: $1)",
        "dberr-usegoogle": "ЦӀачун хьо хьажа лаха гӀоьнца Google.",
index 9199acf..12e7239 100644 (file)
@@ -12,7 +12,8 @@
                        "Marmzok",
                        "Muhammed taha",
                        "رزگار",
-                       "아라"
+                       "아라",
+                       "Serwan"
                ]
        },
        "tog-underline": "ھێڵ ھێنان بەژێر بەستەرەکان:",
@@ -36,7 +37,7 @@
        "tog-enotifusertalkpages": "ئەگەر پەڕەی لێدوانەکەم گۆڕدرا ئیمەیلم بۆ بنێرە",
        "tog-enotifminoredits": "بۆ گۆڕانکارییە بچووکەکانی پەڕەکان و پەڕگەکانیش ئیمەیلم بۆ بنێرە",
        "tog-enotifrevealaddr": "ئەدرەسی ئیمەیلەکەم لە ئیمەیلە ئاگاداریدەرەکان دا نیشان بدە",
-       "tog-shownumberswatching": "ژمارەی بەکارھێنەرە چاودێڕەکان نیشان بدە",
+       "tog-shownumberswatching": "ژمارەی بەکارھێنەرە چاودێرەکان نیشان بدە",
        "tog-oldsig": "واژووی ئێستا:",
        "tog-fancysig": "وەکوو ویکیدەق واژووەکە لەبەر چاو بگرە (بێ بەستەرێکی خۆگەڕ)",
        "tog-uselivepreview": "لە پێشبینینی زیندوو کەڵک وەربگرە (تاقیکاری‌)",
        "vector-view-view": "بیخوێنەوە",
        "vector-view-viewsource": "سەرچاوەکەی ببینە",
        "actions": "کردەوەکان",
+       "vector-more-actions": "زیاتر",
        "namespaces": "شوێنناوەکان",
        "variants": "شێوەزارەکان",
        "navigation-heading": "مێنۆی ڕێدۆزی",
        "permissionserrorstext-withaction": "دەسەڵاتت نییە بۆ $2، لەبەر ئەم {{PLURAL:$1|ھۆکارە|ھۆکارانە}}ی خوارەوە:",
        "recreate-moveddeleted-warn": "'''ھۆشیار بە: خەریکی پەڕەیەک دروست‌ دەکەیتەوە کە لە پێشدا سڕاوەتەوە.'''\n\nئەمە لەبەر چاو بگرە کە دەستکاریکردنی ئەم پەڕەیە بەقازانجە یان نا.\nلۆگی سڕینەوە و گواستنەوەی ئەم پەڕەیە بۆ سانایی لێرەدا ھاتووە:",
        "moveddeleted-notice": "ئەم پەڕەیە سڕاوەتەوە.\nلۆگی سڕینەوە و گواستنەوە بۆ پەڕەکە لە ژێرەوە دابین کراوە.",
-       "log-fulllog": "دیتنی لۆگی تەواو",
+       "log-fulllog": "لۆگی تەواو ببینە",
        "edit-hook-aborted": "دەستکاری لە لایەن قولاپەوە ھەڵوەشێنرایەوە.\nھۆکارەکەی لەبەر دەست نییە.",
        "edit-gone-missing": "توانای نوێ‌کردنەوەی لاپەڕەکە نیە.<br />\nلەوە دەچی سڕدرابێتەوه.‌",
        "edit-conflict": "کێشەی دەستکاری.",
        "mergehistory-same-destination": "پەڕەی سەرچاوە و مەبەست نابێ یەک بن.",
        "mergehistory-reason": "هۆکار:",
        "mergelog": "لۆگی کردنەیەک",
-       "pagemerge-logentry": "[[$1]] خرایە سەر [[$2]] (پێداچوونەوەکان تا $3)",
+       "pagemerge-logentry": "[[$1]]ی لەگەڵ [[$2]] کردە یەک (پێداچوونەوەکان ھەتا $3)",
        "revertmerge": "ھەڵوەشاندنەوەی کردنەیەک",
        "mergelogpagetext": "لە خوارەوە دوایین مێژووی‌لاپەڕە خستنە سەر لاپەڕەیەکی‌تر، دەبینی.",
        "history-title": "مێژووی پێداچوونەوەکانی «$1»",
        "searchmenu-exists": "'''پەڕەیەک بە ناوی «[[:$1]]» لەم ویکییەدا ھەیە.'''",
        "searchmenu-new": "<strong>لەم ویکییەدا پەڕەی « [[:$1]] » دروست بکە!</strong> {{PLURAL:$2|0=|ھەروەھا بڕوانە پەڕەی دۆزراوەی گەڕانەکەت.|ھەروەھا بڕوانە ئاکامە دۆزراوەکانی گەڕانەکە.}}",
        "searchprofile-articles": "پەڕە بە ناوەڕۆکەکان",
-       "searchprofile-project": "پەڕەکانی یارمەتی و پرۆژە",
        "searchprofile-images": "ڕەنگاڵە",
        "searchprofile-everything": "ھەموو شتێک",
        "searchprofile-advanced": "پێشکەوتوو",
        "searchprofile-articles-tooltip": "بگەڕێ لە $1",
-       "searchprofile-project-tooltip": "بگەڕێ لە $1",
        "searchprofile-images-tooltip": "بگەڕێ بۆ پەڕگەکان",
        "searchprofile-everything-tooltip": "لە ھەموو ناوەرۆکێکدا بگەڕێ (تەنانەت پەڕەکانی وتووێژیش)",
        "searchprofile-advanced-tooltip": "گەڕان لەناو بۆشایی‌ناوە دڵخوازەکان",
        "search-interwiki-default": "$1 ئەنجام:",
        "search-interwiki-more": "(زیاتر)",
        "search-relatedarticle": "پەیوەست",
-       "searcheverything-enable": "لە ھەموو بۆشاییی ناوەکاندا بگەڕێ",
        "searchrelated": "پەیوەست",
        "searchall": "ھەموو",
        "showingresults": "لە خوارەوە {{PLURAL:$1|'''یەک''' ئەنجام|'''$1''' ئەنجام}} نیشان دراوە، بە دەست پێ کردن لە ژمارەی '''$2'''ەوە.",
        "allowemail": "ڕێگە بدە بە بەکارھێنەرانی تر کە ئیمەیلم بۆ بنێرن",
        "prefs-searchoptions": "گەڕان",
        "prefs-namespaces": "بۆشایی ناوەکان",
-       "defaultns": "دەنا لەم بۆشاییی ناوانەدا بگەڕێ:",
        "default": "بنچینەیی",
        "prefs-files": "پەڕگەکان",
        "prefs-custom-css": "CSSی دڵخواز",
        "right-move": "گواستنەوەی پەڕەکان",
        "right-move-subpages": "گواستنەوەی پەڕەکان لەگەڵ ژێرپەڕەکانی",
        "right-move-rootuserpages": "گواستنەوەی پەڕە بنەڕەتییەکانی بەکارھێنەر",
+       "right-move-categorypages": "گواستنەوەی پەڕەکانی پۆل",
        "right-movefile": "گواستنەوەی پەڕگەکان",
        "right-suppressredirect": "دروست‌ نەکردنی ڕەوانەکەر لە پەڕەی سەرچاوەوە کاتی گواستنەوەی پەڕەکان",
        "right-upload": "بارکردنی پەڕگەکان",
        "right-import": "ھاوردنی پەڕەکان لە ویکییەکانی تر",
        "right-importupload": "ھاوردنی پەڕەکان بە بارکردنی پەڕگە",
        "right-patrol": "نیشانکردنی دەستکاریەکانی کەسانی تر وەک پاس دراو",
-       "right-autopatrol": "Ù\86Û\8cشاÙ\86کردÙ\86Û\8c Ø®Û\86Ú¯Û\95Ú\95Û\8c Ø¯Û\95ستکارÛ\8cÛ\8cÛ\95کاÙ\86Û\8c Ø®Û\86Û\8c Ù\88Û\95Ú© Ù¾Ø§Ø³ Ø¯Ø±Ø§Ù\88",
+       "right-autopatrol": "پاسداÙ\86Û\8c Ø®Û\86Ú¯Û\95Ú\95Û\8c Ø¯Û\95ستکارÛ\8cÛ\8cÛ\95کاÙ\86Û\8c Ø®Û\86Û\8c",
        "right-patrolmarks": "دیتنی نیشانەکانی پاسدان لە دوایین گۆڕانکارییەکاندا",
        "right-unwatchedpages": "دیتنی پێرستێک لە پەڕە چاودێری نەکراوەکان",
        "right-mergehistory": "کردنەیەکی میژووی پەڕەکان",
        "recentchanges-label-unpatrolled": "ئەم دەستکارییە ھێشتا پاس نەدراوە",
        "recentchanges-label-plusminus": "قەبارەی پەڕە ئەوەندە بایت گۆڕاوە",
        "recentchanges-legend-heading": "'''کورتکراوەکان:'''",
-       "recentchanges-legend-newpage": "(ھەروەھا بڕوانە [[Special:NewPages|پێرستی پەڕە نوێکان]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ھەروەھا بڕوانە [[Special:NewPages|پێرستی پەڕە نوێکان]])",
        "recentchanges-legend-plusminus": "(''±۱٢٣'')",
        "rcnotefrom": "ژێرەوە گۆڕانکارییەکانە لە <strong>$2</strong>ەوە (ھەتا <strong>$1</strong> نیشان دراوە).",
        "rclistfrom": "گۆڕانکارییە نوێکان نیشان بدە بە دەستپێکردن لە $3 $2",
        "minoreditletter": "ب",
        "newpageletter": "ن",
        "boteditletter": "بۆ",
-       "number_of_watching_users_pageview": "[$1 چاودێر لەسەر {{PLURAL:$1|بەکارھێنەر}}]",
+       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|بەکارھێنەر}}ی چاودێر]",
        "rc_categories": "بەرتەسک‌کردنەوە بە هاوپۆلەکان (به «|» جیای بکەوە‌)",
        "rc_categories_any": "هەرکام",
        "rc-change-size-new": "$1 {{PLURAL:$1|بایت}} پاش گۆڕانکاری",
        "protect-default": "بە ھەموو بەکارھێنەران ڕێگە بدە",
        "protect-fallback": "تەنیا بە بەکارھێنەران بە مافی «$1» ڕێگە بدە",
        "protect-level-autoconfirmed": "تەنیا بە بەکارھێنەرانی پەسندکراو ڕێگە بدە",
-       "protect-level-sysop": "تەنیا بەڕێوەبەران",
+       "protect-level-sysop": "تەنیا بە بەڕێوەبەران ڕێگە بدە",
        "protect-summary-cascade": "تاڤگەیی",
        "protect-expiring": "بەسەردەچێ لە ڕێکەوتی $1 (UTC)",
        "protect-expiring-local": "بە سەر دەچێ لە $1",
        "protect-expiry-indefinite": "بێسنوور",
        "protect-cascade": "پەڕەکانی نێو ئەم پەڕە بپارێزە (پاراستنی تاڤگەیی)",
        "protect-cantedit": "ناتوانی ئاستی پاراستنی ئەم پەڕە بگۆڕی، چونکوو تۆ ئیجازەی ئەم کارەت نیە.",
-       "protect-othertime": "کاتÛ\8c Ø¯Û\8cÚ©Û\95:",
-       "protect-othertime-op": "کاتÛ\8c Ø¯Û\8cÚ©Û\95",
+       "protect-othertime": "کاتÛ\8c ØªØ±:",
+       "protect-othertime-op": "کاتÛ\8c ØªØ±",
        "protect-existing-expiry": "ئەم کاتی بەسەرچوونی ماوە کە هەیە: $3، $2",
        "protect-otherreason": "ھۆکاری تر/زیاتر:",
        "protect-otherreason-op": "ھۆکاری تر",
        "pageinfo-category-pages": "ژمارەی پەڕەکان",
        "pageinfo-category-subcats": "ژمارەی ژێرپەڕەکان",
        "pageinfo-category-files": "ژمارەی پەڕگەکان",
-       "skinname-cologneblue": "شینی کۆلۆن",
        "skinname-monobook": "مۆنۆ",
-       "skinname-modern": "مۆدێڕن",
        "skinname-vector": "ڤێکتۆر",
        "markaspatrolleddiff": "وەک پاس دراو نیشان بکە",
        "markaspatrolledtext": "ئەم پەڕەیە وەک پاس دراو نیشان بکە",
        "watchlistedit-raw-done": "لیستی چاودێریەکەت نوێ‌کرایەوە",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 سەردێڕ|$1 سەردێڕ}} زیادکرا:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 سەردێڕ|$1 سەردێڕ}} لابرا:",
+       "watchlistedit-clear-titles": "ناونیشانەکان :",
        "watchlisttools-view": "گۆڕانکارییە پەیوەندیدارەکان ببینە",
        "watchlisttools-edit": "لیستی چاودێری ببینە و دەستکاری بکە",
        "watchlisttools-raw": "لیستی خاوی چاودێری دەستکاری بکە",
        "logentry-newusers-newusers": "ھەژماری بەکارھێنەریی $1 {{GENDER:$2|دروست کرا}}",
        "logentry-newusers-create": "ھەژماری بەکارھێنەریی $1 {{GENDER:$2|دروست کرا}}",
        "logentry-newusers-create2": "ھەژماری بەکارھێنەریی $3 لە لایەن $1 {{GENDER:$2|دروست کرا}}",
+       "logentry-newusers-byemail": "ھەژماری بەکارھێنەریی $3 لە لایەن $1 {{GENDER:$2|دروست کرا}} و تێپەڕوشە بە ئیمەیل نێردرا",
        "logentry-newusers-autocreate": "ھەژماری بەکارھێنەریی $1 بە شێوەی خۆگەڕ {{GENDER:$2|دروست کرا}}",
        "logentry-rights-rights": "$1 ئەندامێتیی $3ی لە $4 بۆ $5 {{GENDER:$2|گۆڕی}}",
        "rightsnone": "(ھیچ)",
index c3c0736..7d74d59 100644 (file)
        "categorypage": "Vede a pagina di categuria",
        "viewtalkpage": "Vede a discussione",
        "otherlanguages": "In altre lingue",
+       "redirectpagesub": "Pagina di reindirizzamentu",
        "lastmodifiedat": "Ultima mudifica di sta pagina u $1 à e $2.",
        "protectedpage": "Pagina prutetta",
        "jumpto": "Andà à:",
        "searchmenu-exists": "'''Esiste nantu à u situ una pagina intitulata \"[[:$1]]\"'''",
        "searchmenu-new": "Creà a pagina \"[[:$1]]\" annantu à 'ssu situ",
        "searchprofile-articles": "Pagine di cuntenuti",
-       "searchprofile-project": "Pagine di aiutu è relative à u prugettu",
        "searchprofile-everything": "Tuttu",
        "searchprofile-advanced": "Avanzatu",
        "searchprofile-articles-tooltip": "Circà in $1",
-       "searchprofile-project-tooltip": "Circà in $1",
        "searchprofile-everything-tooltip": "Circà dapertuttu (incluse e pagine di discussione)",
        "search-result-size": "$1 ({{PLURAL:$2|1 parolla|$2 parolle}})",
        "search-section": "(sezzione $1)",
        "recentchanges-label-bot": "Sta mudifica hè stata effettuata da un botu",
        "recentchanges-label-unpatrolled": "Sta mudifica ùn hè ancu stata verificata",
        "recentchanges-label-plusminus": "A dimensione di a pagina hè stata cambiata di 'ssu numaru d'ottetti",
-       "recentchanges-legend-newpage": "(vede ancu [[Special:NewPages|a lista di e pagine nove]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vede ancu [[Special:NewPages|a lista di e pagine nove]])",
        "rcnotefrom": "Quì seguitanu e mudifiche dapoi u '''$2''' ('''$1''' à u massimu).",
        "rclistfrom": "Mustrà e mudifiche dapoi u $3 $2",
        "rcshowhideminor": "$1 i cambiamenti minori",
index f3eb3bc..9e627a8 100644 (file)
        "searchmenu-exists": "'''Бу викиде \"[[:$1]]\" адлы бир саифе бар'''",
        "searchmenu-new": "'''Бу викиде \"[[:$1]]\" саифесини ярат!'''",
        "searchprofile-articles": "Малюмат саифелери",
-       "searchprofile-project": "Ярдым ве лейха саифелери",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Эр шей",
        "searchprofile-advanced": "Тафсилятлы",
        "searchprofile-articles-tooltip": "$1 ичинде къыдыр",
-       "searchprofile-project-tooltip": "$1 ичинде къыдыр",
        "searchprofile-images-tooltip": "Файлларны къыдыр",
        "searchprofile-everything-tooltip": "Бутюн саифелерде (музакере саифелеринде де) къыдыр",
        "searchprofile-advanced-tooltip": "Бельгиленген исим фезаларында къыдыр",
        "search-interwiki-default": "$1 нетидже:",
        "search-interwiki-more": "(даа чокъ)",
        "search-relatedarticle": "Багълы",
-       "searcheverything-enable": "Бутюн исим фезаларында къыдыр",
        "searchrelated": "багълы",
        "searchall": "эписи",
        "showingresults": "Ашагъыда №&nbsp;<strong>$2</strong>ден башлап {{PLURAL:$1|1='''1''' нетидже|'''$1''' нетидже}} булуна.",
        "allowemail": "Дигер къулланыджылар манъа e-mail мектюплери ёллап олсун",
        "prefs-searchoptions": "Къыдырув сазламалары",
        "prefs-namespaces": "Исим фезалары",
-       "defaultns": "Акис алда бу исим фезаларында къыдыр:",
        "default": "оригинал",
        "prefs-files": "Файллар",
        "prefs-reset-intro": "Бу саифени сазламаларынъызны сайт ог бельгиленгенине къайтармакъ ичюн къуллана билесинъиз. Бу лягъу этилип оламаз.",
        "prefs-emailconfirm-label": "E-mail тасдыкъланмасы:",
        "youremail": "E-mail адресинъиз:",
        "username": "Къулланыджы ады:",
-       "uid": "Къайд номери:",
        "prefs-memberingroups": "Азасы олгъан {{PLURAL:$1|1=группа|группалар}}:",
        "prefs-registration": "Къайд тарихы:",
        "yourrealname": "Керчек адынъыз:",
        "recentchanges-label-minor": "Бу, кичик бир денъиштирме",
        "recentchanges-label-bot": "Бу бир ботнынъ япкъан денъиштирмеси",
        "recentchanges-label-unpatrolled": "Бу денъиштирме аля даа тешкерильмеген",
-       "recentchanges-legend-newpage": "$1 - янъы саифе",
+       "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-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": "кечмиш",
        "rc_categories": "Тек категориялардан («|» иле айырыла)",
        "rc_categories_any": "Эр анги",
        "newsectionsummary": "/* $1 */ янъы болюк",
-       "rc-enhanced-expand": "Тафсилятыны косьтер (JavaScript керек)",
+       "rc-enhanced-expand": "Тафсилятыны косьтер",
        "rc-enhanced-hide": "Тафсилятыны гизле",
        "recentchangeslinked": "Багълы денъиштирмелер",
        "recentchangeslinked-feed": "Багълы денъиштирмелер",
        "logempty": "Журналда бир кельген малюмат ёкъ.",
        "log-title-wildcard": "Бу ишаретлерден башлангъан серлеваларны къыдыр",
        "allpages": "Бутюн саифелер",
-       "alphaindexline": "$1 саифесинден $2 саифесинедже",
        "nextpage": "Сонъраки саифе ($1)",
        "prevpage": "Эвельки саифе ($1)",
        "allpagesfrom": "Джедвельге чекмеге башланыладжакъ арифлер:",
        "spambot_username": "Спамдан темизлев",
        "spam_reverting": "$1 сайтына багълантысы олмагъан сонъки версиягъа кери кетирюв",
        "spam_blanking": "Бар олгъан версияларда $1 сайтына багълантылар бар, темизлев",
-       "skinname-cologneblue": "Кёльн асретлиги",
        "skinname-monobook": "MonoBook",
        "patrol-log-page": "Тешкерюв журналы",
        "log-show-hide-patrol": "Тешкерюв журналыны $1",
index 1bc4ccf..b607567 100644 (file)
        "searchmenu-exists": "'''Bu vikide \"[[:$1]]\" adlı bir saife bar'''",
        "searchmenu-new": "'''Bu vikide \"[[:$1]]\" saifesini yarat!'''",
        "searchprofile-articles": "Malümat saifeleri",
-       "searchprofile-project": "Yardım ve leyha saifeleri",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Er şey",
        "searchprofile-advanced": "Tafsilâtlı",
        "searchprofile-articles-tooltip": "$1 içinde qıdır",
-       "searchprofile-project-tooltip": "$1 içinde qıdır",
        "searchprofile-images-tooltip": "Fayllarnı qıdır",
        "searchprofile-everything-tooltip": "Bütün saifelerde (muzakere saifelerinde de) qıdır",
        "searchprofile-advanced-tooltip": "Belgilengen isim fezalarında qıdır",
        "search-interwiki-default": "$1 netice:",
        "search-interwiki-more": "(daa çoq)",
        "search-relatedarticle": "Bağlı",
-       "searcheverything-enable": "Bütün isim fezalarında qıdır",
        "searchrelated": "bağlı",
        "searchall": "episi",
        "showingresults": "Aşağıda №&nbsp;<strong>$2</strong>den başlap {{PLURAL:$1|'''1''' netice|'''$1''' netice}} buluna.",
        "allowemail": "Diger qullanıcılar maña e-mail mektüpleri yollap olsun",
        "prefs-searchoptions": "Qıdıruv sazlamaları",
        "prefs-namespaces": "İsim fezaları",
-       "defaultns": "Akis alda bu isim fezalarında qıdır:",
        "default": "original",
        "prefs-files": "Fayllar",
        "prefs-reset-intro": "Bu saifeni sazlamalarıñıznı sayt ög belgilengenine qaytarmaq içün qullana bilesiñiz. Bu lâğu etilip olamaz.",
        "prefs-emailconfirm-label": "E-mail tasdıqlanması:",
        "youremail": "E-mail adresiñiz:",
        "username": "Qullanıcı adı:",
-       "uid": "Qayd nomeri:",
        "prefs-memberingroups": "Azası olğan {{PLURAL:$1|gruppa|gruppalar}}:",
        "prefs-registration": "Qayd tarihı:",
        "yourrealname": "Kerçek adıñız:",
        "recentchanges-label-minor": "Bu, kiçik bir deñiştirme",
        "recentchanges-label-bot": "Bu bir botnıñ yapqan deñiştirmesi",
        "recentchanges-label-unpatrolled": "Bu deñiştirme alâ daa teşkerilmegen",
-       "recentchanges-legend-newpage": "$1 - yañı saife",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|yañı saifeler cedveline]] de baqıñız)",
        "rcnotefrom": "'''$2''' tarihından itibaren yapılğan deñiştirmeler aşağıdadır (eñ çоq '''$1''' dane saife kösterile).",
        "rclistfrom": "$3 $2 tarihından berli yapılğan deñiştirmelerni köster",
        "rcshowhideminor": "kiçik deñiştirmelerni $1",
+       "rcshowhideminor-show": "köster",
+       "rcshowhideminor-hide": "gizle",
        "rcshowhidebots": "botlarnı $1",
-       "rcshowhideliu": "qaydlı qullanıcılarnı $1",
+       "rcshowhidebots-show": "köster",
+       "rcshowhidebots-hide": "gizle",
+       "rcshowhideliu": "Qaydlı qullanıcılarnı $1",
+       "rcshowhideliu-show": "köster",
+       "rcshowhideliu-hide": "gizle",
        "rcshowhideanons": "anonim qullanıcılarnı $1",
+       "rcshowhideanons-show": "köster",
+       "rcshowhideanons-hide": "gizle",
        "rcshowhidepatr": "közetilgen deñiştirmelerni $1",
+       "rcshowhidepatr-show": "köster",
+       "rcshowhidepatr-hide": "gizle",
        "rcshowhidemine": "menim yapqan deñiştirmelerimni $1",
+       "rcshowhidemine-show": "köster",
+       "rcshowhidemine-hide": "gizle",
        "rclinks": "Soñki $2 künde yapılğan soñki $1 deñiştirmeni köster;<br /> $3",
        "diff": "farq",
        "hist": "keçmiş",
        "rc_categories": "Tek kategoriyalardan (\"|\" ile ayırıla)",
        "rc_categories_any": "Er angi",
        "newsectionsummary": "/* $1 */ yañı bölük",
-       "rc-enhanced-expand": "Tafsilâtını köster (JavaScript kerek)",
+       "rc-enhanced-expand": "Tafsilâtını köster",
        "rc-enhanced-hide": "Tafsilâtını gizle",
        "recentchangeslinked": "Bağlı deñiştirmeler",
        "recentchangeslinked-feed": "Bağlı deñiştirmeler",
        "logempty": "Jurnalda bir kelgen malümat yoq.",
        "log-title-wildcard": "Bu işaretlerden başlanğan serlevalarnı qıdır",
        "allpages": "Bütün saifeler",
-       "alphaindexline": "$1 saifesinden $2 saifesinece",
        "nextpage": "Soñraki saife ($1)",
        "prevpage": "Evelki saife ($1)",
        "allpagesfrom": "Cedvelge çekmege başlanılacaq arifler:",
        "spambot_username": "Spamdan temizlev",
        "spam_reverting": "$1 saytına bağlantısı olmağan soñki versiyağa keri ketirüv",
        "spam_blanking": "Bar olğan versiyalarda $1 saytına bağlantılar bar, temizlev",
-       "skinname-cologneblue": "Köln asretligi",
        "skinname-monobook": "MonoBook",
        "patrol-log-page": "Teşkerüv jurnalı",
        "log-show-hide-patrol": "Teşkerüv jurnalını $1",
index 07d199b..26fa002 100644 (file)
        "vector-view-view": "Číst",
        "vector-view-viewsource": "Zobrazit zdrojový kód",
        "actions": "Akce",
+       "vector-more-actions": "Další",
        "namespaces": "Jmenné prostory",
        "variants": "Varianty",
        "navigation-heading": "Navigační menu",
        "content-model-text": "čistý text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "expensive-parserfunction-warning": "Varování: Tato stránka obsahuje příliš mnoho volání výkonnostně náročných funkcí syntaktického analyzátoru.\n\nPovolený limit je $2, v současné chvíli však {{PLURAL:$1|zde jedno volání je|zde jsou $2 volání|zde je $2 volání}}.",
+       "expensive-parserfunction-warning": "'''Varování:''' Tato stránka obsahuje příliš mnoho volání výkonnostně náročných funkcí syntaktického analyzátoru.\n\nPovolený limit je $2, v současné chvíli však {{PLURAL:$1|zde jedno volání je|zde jsou $1 volání|zde je $1 volání}}.",
        "expensive-parserfunction-category": "Stránky s příliš mnoho voláními náročných funkcí syntaktického analyzátoru",
        "post-expand-template-inclusion-warning": "Varování: Objem vkládaných šablon je příliš velký.\nNěkteré šablony nebudou vloženy.",
        "post-expand-template-inclusion-category": "Stránky překračující povolenou velikost vložených šablon",
        "currentrev": "Aktuální verze",
        "currentrev-asof": "Aktuální verze z $1",
        "revisionasof": "Verze z $1",
-       "revision-info": "Verze z $1; $2",
+       "revision-info": "Verze z $1, kterou {{GENDER:$6|vytvořil|vytvořila}} $2$7",
        "previousrevision": "← Starší verze",
        "nextrevision": "Novější verze →",
        "currentrevisionlink": "zobrazit aktuální verzi",
        "searchmenu-exists": "'''Na této wiki existuje stránka nazvaná „[[:$1]]“.'''",
        "searchmenu-new": "<strong>Vytvořte na této wiki stránku „[[:$1]]“!</strong> {{PLURAL:$2|0=|Prohlédněte si také stránku nalezenou vaším hledáním.|Prohlédněte si také stránky nalezené vaším hledáním.}}",
        "searchprofile-articles": "Články",
-       "searchprofile-project": "Nápověda a projektové stránky",
        "searchprofile-images": "Multimédia",
        "searchprofile-everything": "Všechno",
        "searchprofile-advanced": "Rozšířené",
        "searchprofile-articles-tooltip": "Prohledávat: $1",
-       "searchprofile-project-tooltip": "Prohledávat: $1",
        "searchprofile-images-tooltip": "Hledat obrázky a další soubory",
        "searchprofile-everything-tooltip": "Prohledávat veškerý obsah (včetně diskusních stránek)",
        "searchprofile-advanced-tooltip": "Nastavit jmenné prostory, ve kterých se má hledat",
        "search-interwiki-default": "Výsledky z $1:",
        "search-interwiki-more": "(více)",
        "search-relatedarticle": "Související",
-       "searcheverything-enable": "Hledat ve všech jmenných prostorech",
        "searchrelated": "související",
        "searchall": "vše",
        "showingresults": "Níže zobrazuji nejvýše <strong>$1</strong> {{PLURAL:$1|výsledek|výsledky|výsledků}} počínaje od <strong>$2</strong>.",
        "powersearch-togglelabel": "Zaškrtnout:",
        "powersearch-toggleall": "Všechno",
        "powersearch-togglenone": "Nic",
+       "powersearch-remember": "Zapamatovat si výběr pro budoucí vyhledávání",
        "search-external": "Externí hledání",
        "searchdisabled": "<p>Omlouváme se. Plnotextové vyhledávání je dočasně nedostupné. Zatím můžete zkusit vyhledávání Googlem; je ale možné, že jeho výsledky nemusí být aktuální.</p>",
        "search-error": "Při hledání došlo k chybě: $1",
        "allowemail": "Povolit e-mail od ostatních uživatelů",
        "prefs-searchoptions": "Vyhledávání",
        "prefs-namespaces": "Jmenné prostory",
-       "defaultns": "Nebo hledat v těchto jmenných prostorech:",
        "default": "implicitní",
        "prefs-files": "Soubory",
        "prefs-custom-css": "Vlastní CSS",
        "recentchanges-label-unpatrolled": "Tato změna dosud nebyla prověřena",
        "recentchanges-label-plusminus": "Velikost stránky se změnila o tolik bajtů",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "(vizte též [[Special:NewPages|seznam nových stránek]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vizte též [[Special:NewPages|seznam nových stránek]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Níže jsou změny od <strong>$2</strong> ({{PLURAL:$1|zobrazena|zobrazeny|zobrazeno}} nejvýše <strong>$1</strong>).",
        "rclistfrom": "Ukázat nové změny, počínaje od $2, $3",
        "wantedtemplates": "Chybějící šablony",
        "mostlinked": "Nejodkazovanější stránky",
        "mostlinkedcategories": "Nejpoužívanější kategorie",
-       "mostlinkedtemplates": "Nejvkládanější šablony",
+       "mostlinkedtemplates": "Nejvkládanější stránky",
        "mostcategories": "Stránky s nejvyšším počtem kategorií",
        "mostimages": "Nejpoužívanější soubory",
        "mostinterwikis": "Stránky s nejvyšším počtem mezijazykových odkazů",
        "ipb-confirmhideuser": "Chystáte se zablokovat uživatele se zapnutou volbou „skrýt uživatelské jméno“. To způsobí, že jméno uživatele zmizí ze všech seznamů a protokolovacích záznamů. Jste si {{gender:|jist|jista|jisti}}, že to chcete udělat?",
        "ipb-confirmaction": "Pokud jste si {{GENDER:|jist|jista|jisti}}, že to chcete udělat, zaškrtněte pole „{{int:ipb-confirm}}“ dole.",
        "ipb-edit-dropdown": "Editace seznamu důvodů zablokování",
-       "ipb-unblock-addr": "Odblokovat uživatele nebo IP $1",
+       "ipb-unblock-addr": "Odblokovat {{GENDER:$1|uživatele|uživatelku|uživatele nebo IP adresu}} $1",
        "ipb-unblock": "Odblokovat uživatele nebo IP adresu",
        "ipb-blocklist": "Zobrazit probíhající bloky",
        "ipb-blocklist-contribs": "Příspěvky uživatele $1",
        "ipblocklist-empty": "Seznam probíhajících bloků je prázdný.",
        "ipblocklist-no-results": "Požadovaná IP adresa nebo uživatelské jméno není blokováno.",
        "blocklink": "zablokovat",
-       "unblocklink": "uvolnit",
+       "unblocklink": "odblokovat",
        "change-blocklink": "změnit blok",
        "contribslink": "příspěvky",
        "emaillink": "poslat e-mail",
        "tooltip-summary": "Zadejte stručné shrnutí",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* Zde uvedené CSS bude ovlivňovat všechny styly */",
-       "cologneblue.css": "/* Zde uvedené CSS bude ovlivňovat pouze styl „Kolínská modř“  */",
        "monobook.css": "/* Zde uvedené CSS bude ovlivňovat pouze styl „Monobook“ */",
-       "modern.css": "/* Zde uvedené CSS bude ovlivňovat pouze styl „Moderní“ */",
        "vector.css": "/* Zde uvedené CSS bude ovlivňovat pouze styl „Vektor“ */",
        "print.css": "/* Zde uvedené CSS bude ovlivňovat tiskový výstup */",
        "noscript.css": "/* Zde uvedené CSS bude ovlivňovat uživatele s vypnutým JavaScriptem */",
        "group-sysop.css": "/* Zde uvedené CSS bude ovlivňovat pouze správce */",
        "group-bureaucrat.css": "/* Zde uvedené CSS bude ovlivňovat pouze byrokraty */",
        "common.js": "/* Zde uvedený JavaScript bude použit pro všechny uživatele při načtení každé stránky. */",
-       "cologneblue.js": "/* JavaScript pro uživatele používající vzhled „Kolínská modř“  */",
        "monobook.js": "/* JavaScript pro uživatele používající vzhled MonoBook */",
-       "modern.js": "/* JavaScript pro uživatele používající vzhled „Moderní“ */",
        "vector.js": "/* JavaScript pro uživatele používající vzhled „Vektor“ */",
        "group-autoconfirmed.js": "/* Zde uvedený JavaScript bude použit pouze pro automaticky schválené uživatele */",
        "group-user.js": "/* Zde uvedený JavaScript bude použit pouze pro registrované uživatele */",
        "pageinfo-category-pages": "Počet stránek",
        "pageinfo-category-subcats": "Počet podkategorií",
        "pageinfo-category-files": "Počet souborů",
-       "skinname-cologneblue": "Kolínská modř",
-       "skinname-modern": "Moderní",
        "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Označit jako prověřené",
        "markaspatrolledtext": "Označit tuto stránku jako prověřenou",
        "confirmemail": "Potvrzení e-mailové adresy",
        "confirmemail_noemail": "Ve svém [[Special:Preferences|uživatelském nastavení]] jste nezadali platnou e-mailovou adresu.",
        "confirmemail_text": "Tato wiki vyžaduje, abyste před využíváním některých funkcí potvrdili svoji e-mailovou adresu. Kliknutím na tlačítko níže odešlete potvrzovací e-mail na vámi uvedenou adresu. Tento e-mail obsahuje odkaz a potvrzovací kód; zobrazením odkazované stránky ve svém internetovém prohlížeči potvrdíte, že zadaná adresa je platná.",
-       "confirmemail_pending": "Potvrzovací kód vám byl již zaslán na váš e-mail.\nPokud jste si účet založili před chvílí, zkuste na doručení kódu několik minut počkat, než požádáte o nový.",
+       "confirmemail_pending": "Potvrzovací kód vám byl na váš e-mail již zaslán.\nPokud jste si účet založili před chvílí, zkuste na doručení kódu několik minut počkat, než požádáte o nový.",
        "confirmemail_send": "Odeslat potvrzovací kód",
        "confirmemail_sent": "Potvrzovací e-mail byl odeslán",
        "confirmemail_oncreate": "Na vaši e-mailovou adresu byl zaslán potvrzovací kód.\nTento kód není zapotřebí k přihlášení, ale budete ho potřebovat k aktivaci některých funkcí založených na využití e-mailu.",
        "watchlistedit-normal-legend": "Odstranění položek ze seznamu sledovaných stránek",
        "watchlistedit-normal-explain": "Položky vašeho seznamu sledovaných stránek jsou zobrazeny níže.\nStránku můžete ze seznamu odstranit tak, že zaškrtnete její políčko a kliknete na tlačítko „{{int:Watchlistedit-normal-submit}}“.\nTaké můžete [[Special:EditWatchlist/raw|editovat seznam v textové podobě]].",
        "watchlistedit-normal-submit": "Odstranit položky",
-       "watchlistedit-normal-done": "{{PLURAL:$1|Byla odstraněna 1 položka|Byly odstraněny $1 položky|Bylo odstraněno $1 položek}} z Vašeho seznamu sledovaných stránek:",
+       "watchlistedit-normal-done": "{{PLURAL:$1|Byla odstraněna jedna položka|Byly odstraněny $1 položky|Bylo odstraněno $1 položek}} z Vašeho seznamu sledovaných stránek:",
        "watchlistedit-raw-title": "Textový režim editace seznamu",
        "watchlistedit-raw-legend": "Editace textového souboru sledovaných stránek",
        "watchlistedit-raw-explain": "Položky na vašem seznamu sledovaných stránek jsou zobrazeny níže. Můžete je přidávat, odstraňovat či měnit v zobrazeném seznamu – jedna řádka je jedna položka.\nPro uložení změn stiskněte tlačítko „{{int:Watchlistedit-raw-submit}}“.\nSeznam editovaných stránek můžete také [[Special:EditWatchlist|editovat ve standardním editoru]].",
        "watchlistedit-raw-titles": "Položky:",
        "watchlistedit-raw-submit": "Aktualizovat seznam",
        "watchlistedit-raw-done": "Seznam vašich sledovaných stránek byl aktualizován.",
-       "watchlistedit-raw-added": "{{PLURAL:$1|Byla přidána 1 položka|Byly přidány $1 položky|Bylo přidáno $1 položek}}:",
+       "watchlistedit-raw-added": "{{PLURAL:$1|Byla přidána jedna položka|Byly přidány $1 položky|Bylo přidáno $1 položek}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Byla odstraněna položka|Byly odstraněny $1 položky|Bylo odstraněno $1 položek}}:",
        "watchlistedit-clear-title": "Vyprázdnění seznamu sledovaných stránek",
        "watchlistedit-clear-legend": "Vyprázdnit seznam sledovaných stránek",
        "watchlistedit-clear-titles": "Názvy:",
        "watchlistedit-clear-submit": "Vyprázdnit seznam sledovaných stránek (natrvalo!)",
        "watchlistedit-clear-done": "Váš seznam sledovaných stránek byl vyprázdněn.",
-       "watchlistedit-clear-removed": "{{PLURAL:$1|Byl odstraněn 1 název|Byly odstraněny $1 názvy|Bylo odstraněno $1 názvů}}:",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Byl odstraněn jeden název|Byly odstraněny $1 názvy|Bylo odstraněno $1 názvů}}:",
        "watchlistedit-too-many": "Seznam obsahuje příliš mnoho stránek, než aby se zde daly zobrazit.",
        "watchlisttools-clear": "Vyprázdnit seznam sledovaných stránek",
        "watchlisttools-view": "Zobrazit změny sledovaných stránek",
        "version-poweredby-others": "další",
        "version-poweredby-translators": "překladatelé na translatewiki.net",
        "version-credits-summary": "Následujícím lidem bychom rádi poděkovali za jejich příspěvky [[Special:Version|MediaWiki]].",
-       "version-license-info": "MediaWiki je svobodný software; můžete jej šířit nebo modifikovat podle podmínek GNU General Public License, vydávané Free Software Foundation; buď verze 2 této licence anebo (podle vašeho uvážení) kterékoli pozdější verze.\n\nMediaWiki je distribuována v naději, že bude užitečná, avšak BEZ JAKÉKOLI ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo VHODNOSTI PRO URČITÝ ÚČEL. Podrobnosti se dočtete v textu GNU General Public License.\n\n[{{SERVER}}{{SCRIPTPATH}}/COPYING Kopii GNU General Public License] jste měli obdržet spolu s tímto programem, pokud ne, napište na Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA nebo [//www.gnu.org/licenses/old-licenses/gpl-2.0.html si ji přečtěte online].",
+       "version-license-info": "MediaWiki je svobodný software; můžete jej šířit nebo modifikovat podle podmínek GNU General Public License, vydávané Free Software Foundation; buď verze 2 této licence, anebo (podle vašeho uvážení) kterékoli pozdější verze.\n\nMediaWiki je distribuována v naději, že bude užitečná, avšak BEZ JAKÉKOLI ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo VHODNOSTI PRO URČITÝ ÚČEL. Podrobnosti se dočtete v textu GNU General Public License.\n\n[{{SERVER}}{{SCRIPTPATH}}/COPYING Kopii GNU General Public License] jste měli obdržet spolu s tímto programem, pokud ne, napište na Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA nebo [//www.gnu.org/licenses/old-licenses/gpl-2.0.html si ji přečtěte online].",
        "version-software": "Nainstalovaný software",
        "version-software-product": "Název",
        "version-software-version": "Verze",
        "dberr-usegoogle": "Mezitím můžete zkusit hledat pomocí Google.",
        "dberr-outofdate": "Uvědomte si, že jejich vyhledávací index našeho obsahu může být zastaralý.",
        "dberr-cachederror": "Následující stránka je kopie z cache a nemusí být aktuální.",
-       "htmlform-invalid-input": "Některé vámi zadané údaje jsou chybné",
+       "htmlform-invalid-input": "Některé vámi zadané údaje jsou chybné.",
        "htmlform-select-badoption": "Vámi uvedená hodnota není platná možnost.",
        "htmlform-int-invalid": "Uvedená hodnota není celé číslo.",
        "htmlform-float-invalid": "Uvedená hodnota není číslo.",
-       "htmlform-int-toolow": "Vámi zadaná hodnota je menší než dovolené minimum $1",
-       "htmlform-int-toohigh": "Vámi zadaná hodnota je větší než dovolené maximum $1",
-       "htmlform-required": "Tato položka je povinná",
+       "htmlform-int-toolow": "Vámi zadaná hodnota je menší než dovolené minimum $1.",
+       "htmlform-int-toohigh": "Vámi zadaná hodnota je větší než dovolené maximum $1.",
+       "htmlform-required": "Tato položka je povinná.",
        "htmlform-submit": "Odeslat",
        "htmlform-reset": "Vrátit změny",
        "htmlform-selectorother-other": "Jiná hodnota",
        "logentry-delete-delete": "$1 {{GENDER:$2|smazal|smazala}} stránku $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|obnovil|obnovila}} stránku $3",
        "logentry-delete-event": "$1 {{GENDER:$2|změnil|změnila}} viditelnost {{PLURAL:$5|protokolovacího záznamu|$5 protokolovacích záznamů}} ke stránce $3: $4",
-       "logentry-delete-revision": "$1 {{GENDER:$2|změnil|změnila}} viditelnost {{PLURAL:$5|revize|$5 revizí}} na stránce $3: $4",
+       "logentry-delete-revision": "$1 {{GENDER:$2|změnil|změnila}} viditelnost {{PLURAL:$5|revize|$5 revizí}} stránky $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|změnil|změnila}} viditelnost protokolovacích záznamů ke stránce $3",
-       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|změnil|změnila}} viditelnost revizí na stránce $3",
+       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|změnil|změnila}} viditelnost revizí stránky $3",
        "logentry-suppress-delete": "$1 {{GENDER:$2|utajil|utajila}} stránku $3",
        "logentry-suppress-event": "$1 utajeně {{GENDER:$2|změnil|změnila}} viditelnost {{PLURAL:$5|protokolovacího záznamu|$5 protokolovacích záznamů}} ke stránce $3: $4",
-       "logentry-suppress-revision": "$1 utajeně {{GENDER:$2|změnil|změnila}} viditelnost {{PLURAL:$5|revize|$5 revizí}} na stránce $3: $4",
+       "logentry-suppress-revision": "$1 utajeně {{GENDER:$2|změnil|změnila}} viditelnost {{PLURAL:$5|revize|$5 revizí}} stránky $3: $4",
        "logentry-suppress-event-legacy": "$1 utajeně {{GENDER:$2|změnil|změnila}} viditelnost protokolovacích záznamů ke stránce $3",
-       "logentry-suppress-revision-legacy": "$1 utajeně {{GENDER:$2|změnil|změnila}} viditelnost revizí na stránce $3",
+       "logentry-suppress-revision-legacy": "$1 utajeně {{GENDER:$2|změnil|změnila}} viditelnost revizí stránky $3",
        "revdelete-content-hid": "skryt obsah",
        "revdelete-summary-hid": "skryto shrnutí editace",
        "revdelete-uname-hid": "skryto uživatelské jméno",
        "feedback-error1": "Chyba: Nerozpoznaný výsledek z API",
        "feedback-error2": "Chyba: Editace se nezdařila",
        "feedback-error3": "Chyba: API nevrátilo žádnou odpověď",
-       "feedback-thanks": "Děkujeme! Váš komentář byl přidat na stránku „[$2 $1]“.",
+       "feedback-thanks": "Děkujeme! Váš komentář byl přidán na stránku „[$2 $1]“.",
        "feedback-close": "Hotovo",
        "feedback-bugcheck": "Skvělé! Jen zkontrolujte, zda se nejedná o jednu z [$1 už známých chyb].",
        "feedback-bugnew": "Zkontroloval(a) jsem to. Chci ohlásit novou chybu.",
        "api-error-badaccess-groups": "Nemáte povoleno nahrávat soubory na tuto wiki.",
        "api-error-badtoken": "Vnitřní chyba: špatný token.",
        "api-error-copyuploaddisabled": "Načítání z URL je na tomto severu zakázáno.",
-       "api-error-duplicate": "Na této wiki již {{PLURAL:$1|existuje [$2 jiný soubor]|existují [$2 jiné soubory]}} se shodným obsahem",
+       "api-error-duplicate": "Na této wiki již {{PLURAL:$1|existuje [$2 jiný soubor]|existují [$2 jiné soubory]}} se shodným obsahem.",
        "api-error-duplicate-archive": "[$2 {{PLURAL:$1|Soubor|Soubory}}] se stejným obsahem již zde dříve {{PLURAL:$1|byl|byly}}, ale {{PLURAL:$1|byl smazán|byly smazány}}.",
-       "api-error-duplicate-archive-popup-title": "Duplicitní {{PLURAL:$1|soubor, který byl|soubory, které byly}} smazány",
-       "api-error-duplicate-popup-title": "Duplicitní {{PLURAL:$1|soubor|soubory}}",
+       "api-error-duplicate-archive-popup-title": "Duplicitní {{PLURAL:$1|soubor, který byl smazán|soubory, které byly smazány}}.",
+       "api-error-duplicate-popup-title": "Duplicitní {{PLURAL:$1|soubor|soubory}}.",
        "api-error-empty-file": "Načtený soubor je prázdný.",
        "api-error-emptypage": "Zakládání prázdných stránek není dovoleno.",
        "api-error-fetchfileerror": "Vnitřní chyba: došlo k chybě při stahování souboru.",
        "api-error-publishfailed": "Vnitřní chyba: Serveru se nepodařilo zveřejnit dočasný soubor.",
        "api-error-stasherror": "Při načítání souboru do skrýše došlo k chybě.",
        "api-error-timeout": "Server neodpověděl v očekávaném čase.",
-       "api-error-unclassified": "Došlo k neznámé chybě",
-       "api-error-unknown-code": "Neznámá chyba: „$1“",
+       "api-error-unclassified": "Došlo k neznámé chybě.",
+       "api-error-unknown-code": "Neznámá chyba: „$1“.",
        "api-error-unknown-error": "Vnitřní chyba: došlo k chybě při pokusu o načtení souboru.",
        "api-error-unknown-warning": "Neznámé varování: $1",
        "api-error-unknownerror": "Neznámá chyba: „$1“.",
index 7ee948e..1e14892 100644 (file)
        "vector-view-view": "чьтѥниѥ",
        "vector-view-viewsource": "страницѧ источьнъ обраꙁъ",
        "actions": "дѣиства",
+       "vector-more-actions": "вѧщє",
        "namespaces": "имєнъ просторꙑ",
        "errorpagetitle": "блаꙁна",
        "tagline": "{{grammar:genitive|{{SITENAME}}}} страница",
        "accountcreated": "мѣсто сътворєно ѥстъ",
        "accountcreatedtext": "польꙃєватєльско мѣсто [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|бєсѣда]]) сътворєно бѣ",
        "loginlanguagelabel": "ѩꙁꙑкъ : $1",
+       "pt-userlogout": "ис̾ходъ",
        "changepassword": "таина словєсє иꙁмѣнѥниѥ",
        "resetpass_header": "таина слова иꙁмѣнѥниѥ",
        "oldpassword": "старо таино слово :",
        "template-protected": "(ꙁабранєно ѥстъ)",
        "template-semiprotected": "(чѧстьно ꙁабранѥно)",
        "hiddencategories": "сꙗ страница въ {{PLURAL:$1|1 съкрꙑтѣи катигорїи|$1 съкрꙑтѣхъ катигорїѩ}} сѧ авлꙗѥтъ :",
-       "postedit-confirmation": "твоꙗ мѣна съхранѥна ѥстъ",
+       "postedit-confirmation-saved": "твоꙗ мѣна съхранѥна ѥстъ",
        "viewpagelogs": "си страницѧ їсторїѩ",
        "cur": "нꙑ҃н",
        "last": "пс҃лд",
        "searchmenu-exists": "'''страница имєньмь ⁖ [[:$1]] ⁖ ѥстъ створѥна ю'''",
        "searchmenu-new": "<strong>страницѫ \"⁖ [[:$1]] ⁖\" сътворити можєши</strong> {{PLURAL:$2|0=|ꙁъри такождє страница ижє по искании авлєна ѥстъ|ꙁьри такождє исканиꙗ слѣдьствиꙗ}}",
        "searchprofile-articles": "члѣни",
-       "searchprofile-project": "опꙑтьствовании и помощи страницѧ",
        "searchprofile-images": "дѣла",
        "searchprofile-everything": "вьсѩ страницѧ",
        "searchprofile-articles-tooltip": "ищи въ $1",
-       "searchprofile-project-tooltip": "исканиѥ въ $1",
        "searchprofile-images-tooltip": "исканиѥ дѣлъ",
        "searchprofile-everything-tooltip": "ищи вьсѩ страницѧ въкоупомь съ бѣсєдꙑ",
        "search-result-size": "$1 ({{PLURAL:$2|$2 слово|$2 слова|$2 словєсъ}})",
        "search-interwiki-more": "(вѧщє)",
        "searchall": "вьсꙗ",
        "search-nonefound": "исканиѥ сꙗ слова ничєсо жє нє авило ѥстъ",
-       "powersearch-redir": "прѣнаправлѥниꙗ",
        "preferences": "строи",
        "mypreferences": "строи",
        "prefs-edits": "мѣнъ число :",
        "prefs-namespaces": "имєнъ просторꙑ",
        "prefs-files": "дѣла",
        "username": "{{GENDER:$1|польꙃєватєлꙗ имѧ}} :",
-       "uid": "{{GENDER:$1|польꙃєватєлꙗ}} число :",
        "prefs-memberingroups": "{{GENDER:$2|польꙃєватєлꙗ}} {{PLURAL:$1|чинъ|чина|чинꙑ}} :",
        "yourrealname": "истиньно имѧ :",
        "yourlanguage": "ѩꙁꙑкъ :",
        "log": "їсторїѩ",
        "all-logs-page": "вьсѩ обьщѧ їсторїѩ",
        "allpages": "вьсѩ страницѧ",
-       "alphaindexline": "отъ $1 до $2",
        "allpagesfrom": "страницѧ видѣти хощѫ съ начѧльнами боукъвами :",
        "allarticles": "вьсѩ страницѧ",
        "allpagessubmit": "прѣиди",
        "block": "ꙁагради польꙃєватєл҄ь",
        "blockip": "ꙁагради польꙃєватєл҄ь",
        "blockip-legend": "ꙁагради польꙃєватєл҄ь",
-       "ipadressorusername": "IP число или польꙃєватєлꙗ имѧ :",
+       "ipaddressorusername": "IP число или польꙃєватєлꙗ имѧ :",
        "ipbreason": "какъ съмꙑслъ :",
        "ipbother": "ино врѣмѧ :",
        "ipboptions": "2 часа:2 hours,1 дьнь:1 day,3 дьни:3 days,1 сєдмица:1 week,2 сєдмици:2 weeks,1 мѣсѧць:1 month,3 мѣсѧць:3 months,6 мѣсѧць:6 months,1 лѣто:1 year,вѣчьно:infinite",
        "svg-long-desc": "дѣло SVG · обꙑчьнъ обраꙁъ : $1 × $2 п҃ѯ · дѣла мѣра : $3",
        "show-big-image": "источьнъ дѣла обраꙁъ",
        "show-big-image-size": "$1 × $2 пиѯєлъ",
-       "showhidebots": "($1 аѵтоматъ)",
        "ilsubmit": "ищи",
        "monday-at": "понєдѣл҄ьникъ · $1",
        "tuesday-at": "въторьникъ · $1",
        "specialpages": "нарочьнꙑ страницѧ",
        "tag-filter": "[[Special:Tags|мѣтъць]] сито :",
        "tags-edit": "исправи",
-       "dberr-header": "Вики тєхнїчьнꙑ отѧжєниꙗ имѣтъ",
        "htmlform-no": "нѣтъ",
        "htmlform-yes": "да",
        "logentry-delete-delete": "$1 {{GENDER:$2|поничьжилъ|поничьжила}} страницѫ ⁖ $3 ⁖",
index 9094b9c..b52336a 100644 (file)
        "editthispage": "Golygwch y dudalen hon",
        "create-this-page": "Creu'r dudalen",
        "delete": "Dileu",
-       "deletethispage": "Dileer y dudalen hon",
+       "deletethispage": "Dilëir y dudalen hon",
        "undeletethispage": "Adfer y dudalen hon",
        "undelete_short": "Adfer $1 {{PLURAL:$1|golygiad|golygiad|olygiad|golygiad}}",
        "viewdeleted_short": "Edrych ar y {{PLURAL:$1|golygiad sydd wedi'i ddileu|golygiad sydd wedi'i ddileu|$1 olygiad sydd wedi'u dileu|$1 golygiad sydd wedi'u dileu|$1 golygiad sydd wedi'u dileu|$1 golygiad sydd wedi'u dileu}}",
        "searchmenu-exists": "'''Mae tudalen o'r enw \"[[$1]]\" ar y wici hwn'''",
        "searchmenu-new": "'''Creu'r dudalen \"[[:$1]]\" ar y wici hwn!''' {{PLURAL:$2||Gweler hefyd y dudalen a ganfyddwyd wrth chwilio.|Gweler hefyd y canlyniadau chwilio.}}",
        "searchprofile-articles": "Tudalennau pwnc (erthyglau/ffeiliau)",
-       "searchprofile-project": "Tudalennau Cymorth a Phrosiect",
        "searchprofile-images": "Ffeiliau amlgyfrwng",
        "searchprofile-everything": "Popeth",
        "searchprofile-advanced": "Uwch",
        "searchprofile-articles-tooltip": "Chwilio drwy $1",
-       "searchprofile-project-tooltip": "Chwilio drwy $1",
        "searchprofile-images-tooltip": "Chwilio am ffeiliau",
        "searchprofile-everything-tooltip": "Chwilio'r cynnwys cyfan (gan gynnwys tudalennau sgwrs)",
        "searchprofile-advanced-tooltip": "Chwilio drwy parthau dewisol",
        "search-interwiki-default": "Y canlyniadau o $1:",
        "search-interwiki-more": "(rhagor)",
        "search-relatedarticle": "Erthyglau eraill tebyg",
-       "searcheverything-enable": "Chwilio pob parth",
        "searchrelated": "erthyglau eraill tebyg",
        "searchall": "oll",
        "showingresults": "Yn dangos $1 {{PLURAL:$1|canlyniad|canlyniad|ganlyniad|chanlyniad|chanlyniad|canlyniad}} isod gan ddechrau gyda rhif '''$2'''.",
        "allowemail": "Galluogi e-bost oddi wrth ddefnyddwyr eraill",
        "prefs-searchoptions": "Chwilio",
        "prefs-namespaces": "Parthau",
-       "defaultns": "Neu chwilio'r parthau isod:",
        "default": "rhagosodyn",
        "prefs-files": "Ffeiliau",
        "prefs-custom-css": "CSS o hunan-ddewis",
        "recentchanges-label-unpatrolled": "Nid yw'r golygiad hwn wedi derbyn ymweliad patrôl eto",
        "recentchanges-label-plusminus": "Newidiodd maint y dudalen o'r nifer hwn o feitiau",
        "recentchanges-legend-heading": "'''Allwedd:'''",
-       "recentchanges-legend-newpage": "(gweler hefyd [[Special:NewPages|restr y tudalennau newydd]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gweler hefyd [[Special:NewPages|restr y tudalennau newydd]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Isod rhestrir pob newid er <strong>'''$2'''</strong> (ymddengys hyd at <strong>'''$1'''</strong> ohonynt).",
        "rclistfrom": "Dangos newidiadau newydd, gan ddechrau ers $3 $2",
        "enotif_body": "Annwyl $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nCrynodeb y golygydd: $PAGESUMMARY $PAGEMINOREDIT\n\nCysylltu â'r golygydd:\ne-bost: $PAGEEDITOR_EMAIL\nwici: $PAGEEDITOR_WIKI\n\nOs bydd mwy o drin a thrafod ar y dudalen cyn i chi ymweld â hi tra eich bod wedi mewngofnodi, ni chewch ragor o negeseuon hysbysu. Nodwn bod modd i chi ailosod y fflagiau hysbysu ar eich rhestr wylio, ar gyfer y tudalennau rydych yn eu gwylio.\n\n             Sustem hysbysu {{SITENAME}}\n\n--\nI newid eich gosodiadau negeseuon hysbysu, ewch i \n{{canonicalurl:{{#special:Preferences}}}}\n\nI newid eich gosodiadau gwylio, ewch i\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nI dynnu'r dudalen oddi ar eich rhestr wylio, ewch i\n$UNWATCHURL\n\nAm fwy o gymorth ac adborth:\n$HELPPAGE",
        "created": "crëwyd",
        "changed": "Newidiwyd",
-       "deletepage": "Dileer y dudalen",
+       "deletepage": "Dilëir y dudalen",
        "confirm": "Cadarnhau",
        "excontent": "y cynnwys oedd: '$1'",
        "excontentauthor": "y cynnwys oedd: '$1' (a'r unig gyfrannwr oedd '[[Special:Contributions/$2|$2]]')",
        "pageinfo-category-pages": "Nifer y tudalennau",
        "pageinfo-category-subcats": "Nifer yr is-gategorïau",
        "pageinfo-category-files": "Nifer y ffeiliau",
-       "skinname-cologneblue": "Glas Cwlen",
        "markaspatrolleddiff": "Marcio ei bod wedi derbyn ymweliad patrôl",
        "markaspatrolledtext": "Marcio bod y dudalen wedi derbyn ymweliad patrôl",
        "markedaspatrolled": "Gosodwyd marc ei bod wedi derbyn ymweliad patrôl",
index f4749fb..734139d 100644 (file)
        "searchmenu-exists": "'''Der er en side med navnet \"[[:$1]]\" på denne wiki'''",
        "searchmenu-new": "<strong>Opret siden \"[[:$1]]\" på denne wiki!</strong> {{PLURAL:$2|0=|Se også siden der blev fundet for din søgning.|Se også de søgeresultater der blev fundet.}}",
        "searchprofile-articles": "Indholdssider",
-       "searchprofile-project": "Hjælpe- og projektsider",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alt",
        "searchprofile-advanced": "Avanceret",
        "searchprofile-articles-tooltip": "Søg i $1",
-       "searchprofile-project-tooltip": "Søg i $1",
        "searchprofile-images-tooltip": "Søg efter filer",
        "searchprofile-everything-tooltip": "Søg i alt indhold (inklusive diskussionssider)",
        "searchprofile-advanced-tooltip": "Søg i bestemte navnerum",
        "search-interwiki-default": "Resultater fra $1:",
        "search-interwiki-more": "(mere)",
        "search-relatedarticle": "Relateret",
-       "searcheverything-enable": "Søg i alle navnerum",
        "searchrelated": "relateret",
        "searchall": "alle",
        "showingresults": "Nedenfor vises <b>$1</b> {{PLURAL:$1|resultat|resultater}} startende med nummer <b>$2</b>.",
        "allowemail": "Tillad e-mail fra andre brugere",
        "prefs-searchoptions": "Søg",
        "prefs-namespaces": "Navnerum",
-       "defaultns": "Ellers søg i disse navnerum:",
        "default": "standard",
        "prefs-files": "Filer",
        "prefs-custom-css": "Personlig CSS",
        "prefs-emailconfirm-label": "Bekræftelse af e-mail:",
        "youremail": "Din e-mailadresse:",
        "username": "{{GENDER:$1|Brugernavn}}:",
-       "uid": "{{GENDER:$1|Brugernummer}}:",
        "prefs-memberingroups": "{{GENDER:$2|Medlem}} af {{PLURAL:$1|gruppen|grupperne}}:",
        "prefs-registration": "Registreringstidspunkt:",
        "yourrealname": "Dit rigtige navn:",
        "recentchanges-label-unpatrolled": "Denne redigering er endnu ikke blevet patruljeret",
        "recentchanges-label-plusminus": "Størrelsen på siden blev ændret med dette antal bytes",
        "recentchanges-legend-heading": "'''Forklaring:'''",
-       "recentchanges-legend-newpage": "(se også [[Special:NewPages|listen over nye sider]])",
+       "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''' ændringer siden '''$2''' vist.",
        "rclistfrom": "Vis nye ændringer startende fra $3 $2",
        "log-title-wildcard": "Søg i titler som begynder med teksten",
        "showhideselectedlogentries": "Vis/skjul de markerede loghændelser",
        "allpages": "Alle sider",
-       "alphaindexline": "$1 til $2",
        "nextpage": "Næste side ($1)",
        "prevpage": "Forrige side ($1)",
        "allpagesfrom": "Vis sider fra og med:",
        "pageinfo-category-pages": "Antal sider",
        "pageinfo-category-subcats": "Antal underkategorier",
        "pageinfo-category-files": "Antal filer",
-       "skinname-cologneblue": "Kølnerblå",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderne",
        "markaspatrolleddiff": "Markér som patruljeret",
        "markaspatrolledtext": "Markér denne side som patruljeret",
        "markedaspatrolled": "Markeret som patruljeret",
index 4bfcdd0..301c762 100644 (file)
@@ -73,7 +73,8 @@
                        "Ziko",
                        "Zylbath",
                        "לערי ריינהארט",
-                       "✓"
+                       "✓",
+                       "XenonX3"
                ]
        },
        "tog-underline": "Links unterstreichen:",
        "vector-view-view": "Lesen",
        "vector-view-viewsource": "Quelltext anzeigen",
        "actions": "Aktionen",
+       "vector-more-actions": "Mehr",
        "namespaces": "Namensräume",
        "variants": "Varianten",
        "navigation-heading": "Navigationsmenü",
        "databaseerror-query": "Abfrage: $1",
        "databaseerror-function": "Funktion: $1",
        "databaseerror-error": "Fehler: $1",
-       "laggedslavemode": "'''Achtung:''' Die angezeigte Seite könnte unter Umständen nicht die letzten Bearbeitungen enthalten.",
+       "laggedslavemode": "<strong>Achtung:</strong> Die angezeigte Seite könnte unter Umständen nicht die letzten Bearbeitungen enthalten.",
        "readonly": "Datenbank gesperrt",
        "enterlockreason": "Bitte gib einen Grund ein, warum die Datenbank gesperrt werden soll und eine Abschätzung über die Dauer der Sperrung",
        "readonlytext": "Die Datenbank ist vorübergehend für Neueinträge und Änderungen gesperrt. Bitte versuche es später noch einmal.\n\nGrund der Sperrung: $1",
        "myprivateinfoprotected": "Du hast keine Berechtigung, deine privaten Informationen zu bearbeiten.",
        "mypreferencesprotected": "Du hast keine Berechtigung, deine Einstellungen zu bearbeiten.",
        "ns-specialprotected": "Spezialseiten können nicht bearbeitet werden.",
-       "titleprotected": "Eine Seite mit diesem Namen kann nicht angelegt werden.\nDie Sperre wurde durch [[User:$1|$1]] mit der Begründung ''„$2“'' eingerichtet.",
+       "titleprotected": "Eine Seite mit diesem Namen kann nicht angelegt werden.\nDie Sperre wurde durch [[User:$1|$1]] mit der Begründung „<em>$2</em>“ eingerichtet.",
        "filereadonlyerror": "Die Datei „$1“ kann nicht verändert werden, da auf das Dateirepositorium „$2“ nur Lesezugriff möglich ist.\n\nDer Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: „$3“.",
        "invalidtitle-knownnamespace": "Ungültiger Titel mit Namensraum „$2“ und Text „$3“",
        "invalidtitle-unknownnamespace": "Ungültiger Titel mit unbekannter Namensraumnummer $1 und Text „$2“",
        "exception-nologin": "Nicht angemeldet",
        "exception-nologin-text": "Du musst dich [[Special:Userlogin|anmelden]], um auf diese Seite oder Aktion zugreifen zu können.",
        "exception-nologin-text-manual": "Du musst dich $1, um auf diese Seite oder Aktion zugreifen zu können.",
-       "virus-badscanner": "Fehlerhafte Konfiguration: unbekannter Virenscanner: ''$1''",
+       "virus-badscanner": "Fehlerhafte Konfiguration: unbekannter Virenscanner: <em>$1</em>",
        "virus-scanfailed": "Scan fehlgeschlagen (code $1)",
        "virus-unknownscanner": "Unbekannter Virenscanner:",
-       "logouttext": "'''Du bist nun abgemeldet.'''\n\nBeachte, dass einige Seiten noch anzeigen können, dass du angemeldet bist, solange du nicht deinen Browsercache geleert hast.",
+       "logouttext": "<strong>Du bist nun abgemeldet.</strong>\n\nBeachte, dass einige Seiten noch anzeigen können, dass du angemeldet bist, solange du nicht deinen Browsercache geleert hast.",
        "welcomeuser": "Willkommen, $1!",
        "welcomecreation-msg": "Dein Benutzerkonto wurde erstellt.\nVergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ändern.",
        "yourname": "Benutzername:",
        "userlogout": "Abmelden",
        "notloggedin": "Nicht angemeldet",
        "userlogin-noaccount": "Du hast noch kein Benutzerkonto?",
-       "userlogin-joinproject": "{{SITENAME}} beitreten",
+       "userlogin-joinproject": "Bei {{SITENAME}} anmelden",
        "nologin": "Du hast kein Benutzerkonto? $1.",
        "nologinlink": "Neues Benutzerkonto anlegen",
        "createaccount": "Benutzerkonto anlegen",
-       "gotaccount": "Du hast bereits ein Benutzerkonto? '''$1'''.",
+       "gotaccount": "Du hast bereits ein Benutzerkonto? $1.",
        "gotaccountlink": "Anmelden",
        "userlogin-resetlink": "Die Anmeldedaten vergessen?",
        "userlogin-resetpassword-link": "Passwort vergessen?",
        "createaccounterror": "Benutzerkonto konnte nicht erstellt werden: $1",
        "nocookiesnew": "Der Benutzerzugang wurde erstellt, aber du bist nicht angemeldet. {{SITENAME}} benötigt für diese Funktion Cookies, bitte aktiviere diese und melde dich dann mit deinem neuen Benutzernamen und dem zugehörigen Passwort an.",
        "nocookieslogin": "{{SITENAME}} benutzt Cookies zur Anmeldung der Benutzer. Du hast Cookies deaktiviert, bitte aktiviere diese und versuche es erneut.",
-       "nocookiesfornew": "Das Benutzerkonto wurde nicht erstellt, da die Datenherkunft nicht ermittelt werden konnte.\nEs muss sichergestellt sein, dass Cookies aktiviert sind. Danach diese Seite erneut laden und es wieder versuchen.",
+       "nocookiesfornew": "Das Benutzerkonto wurde nicht erstellt, da die Datenherkunft nicht ermittelt werden konnte.\nBitte stelle sicher, dass du Cookies aktiviert hast. Lade diese Seite danach erneut und versuche es noch einmal.",
        "noname": "Du musst einen gültigen Benutzernamen angeben.",
        "loginsuccesstitle": "Anmeldung erfolgreich",
-       "loginsuccess": "Du bist jetzt als „$1“ bei {{SITENAME}} angemeldet.",
-       "nosuchuser": "Der Benutzername „$1“ existiert nicht.\nÜberprüfe die Schreibweise (Groß-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melde dich als neuer Benutzer an]].",
+       "loginsuccess": "<strong>Du bist jetzt als „$1“ bei {{SITENAME}} angemeldet.</strong>",
+       "nosuchuser": "Der Benutzername „$1“ existiert nicht.\nÜberprüfe die Schreibweise (Groß-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|lege ein neues Benutzerkonto an]].",
        "nosuchusershort": "Der Benutzername „$1“ ist nicht vorhanden. Bitte überprüfe die Schreibweise.",
        "nouserspecified": "Bitte gib einen Benutzernamen an.",
        "login-userblocked": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} ist gesperrt. Die Anmeldung ist nicht erlaubt.",
        "password-name-match": "Dein Passwort muss sich von deinem Benutzernamen unterscheiden.",
        "password-login-forbidden": "Die Verwendung dieses Benutzernamens und Passwortes ist nicht erlaubt.",
        "mailmypassword": "Passwort zurücksetzen",
-       "passwordremindertitle": "Neues Passwort für ein {{SITENAME}}-Benutzerkonto",
+       "passwordremindertitle": "Neues Passwort für dein {{SITENAME}}-Benutzerkonto",
        "passwordremindertext": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.\n\nDas automatisch generierte Passwort für Benutzer „$2“ lautet nun: $3\n\nFalls du dies wirklich gewünscht hast, solltest du dich jetzt anmelden und das Passwort ändern.\nDas neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.\n\nBitte ignoriere diese E-Mail, falls du sie nicht selbst angefordert hast. Das alte Passwort bleibt weiterhin gültig.",
        "noemail": "{{GENDER:$1|Benutzer|Benutzerin|Benutzer}} „$1“ hat keine E-Mail-Adresse angegeben.",
-       "noemailcreate": "Du musst eine gültige E-Mail-Adresse angeben",
+       "noemailcreate": "Du musst eine gültige E-Mail-Adresse angeben.",
        "passwordsent": "Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer „$1“ gesandt.\nBitte melde dich damit an, sobald du es erhalten hast. Das alte Passwort bleibt weiterhin gültig.",
        "blocked-mailpassword": "Die von dir verwendete IP-Adresse ist für das Ändern von Seiten gesperrt. Um einen Missbrauch zu verhindern, wurde die Möglichkeit zur Anforderung eines neuen Passwortes ebenfalls gesperrt.",
        "eauthentsent": "Eine Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.\n\nBevor eine E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolge die Hinweise in der Bestätigungs-E-Mail.",
        "pt-login-button": "Anmelden",
        "pt-createaccount": "Benutzerkonto erstellen",
        "pt-userlogout": "Abmelden",
-       "php-mail-error-unknown": "Unbekannter Fehler mit der Funktion mail() von PHP",
-       "user-mail-no-addy": "Versuchte, eine E-Mail ohne Angabe einer E-Mail-Adresse zu versenden.",
+       "php-mail-error-unknown": "Unbekannter Fehler in der PHP-Funktion mail().",
+       "user-mail-no-addy": "Es wurde versucht, eine E-Mail ohne Angabe einer E-Mail-Adresse zu versenden.",
        "user-mail-no-body": "Es wurde versucht, eine E-Mail mit einem leeren oder zu kurzen Textkörper zu versenden.",
        "changepassword": "Passwort ändern",
        "resetpass_announce": "Um die Anmeldung abzuschließen, musst du ein neues Passwort festlegen.",
        "currentrev": "Aktuelle Version",
        "currentrev-asof": "Aktuelle Version vom $2, $3 Uhr",
        "revisionasof": "Version vom $2, $3 Uhr",
-       "revision-info": "Version vom $4, $5 Uhr von $2",
+       "revision-info": "Version vom $4, $5 Uhr von {{GENDER:$6|$2}}$7",
        "previousrevision": "← Nächstältere Version",
        "nextrevision": "Nächstjüngere Version →",
        "currentrevisionlink": "Aktuelle Version",
        "showhideselectedversions": "Gewählte Versionen zeigen/verstecken",
        "editundo": "rückgängig machen",
        "diff-empty": "(kein Unterschied)",
-       "diff-multi-sameuser": "({{PLURAL:$1|Eine dazwischenliegende Version des gleichen Benutzers wird|$1 dazwischenliegende Versionen des gleichen Benutzers werden}} nicht angezeigt)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Eine dazwischenliegende Version desselben Benutzers wird|$1 dazwischenliegende Versionen desselben Benutzers werden}} nicht angezeigt)",
        "diff-multi-otherusers": "({{PLURAL:$1|Eine dazwischenliegende Version|$1 dazwischenliegende Versionen}} von {{PLURAL:$2|einem anderen Benutzer|$2 Benutzern}} werden nicht angezeigt)",
        "diff-multi-manyusers": "({{PLURAL:$1|$1 dazwischenliegende Versionen}} von mehr als {{PLURAL:$2|$2 Benutzern}}, die nicht angezeigt werden)",
        "difference-missing-revision": "{{PLURAL:$2|Eine Version|$2 Versionen}} dieser Unterschiedsanzeige ($1) {{PLURAL:$2|wurde|wurden}} nicht gefunden.\n\nDieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.\nEinzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch] vorhanden.",
        "searchmenu-exists": "'''Es gibt eine Seite, die den Namen „[[:$1]]“ hat.'''",
        "searchmenu-new": "<strong>Erstelle die Seite „[[:$1]]“ in diesem Wiki.</strong> {{PLURAL:$2|0=|Siehe auch die über deine Suche gefundene Seite.|Siehe auch die gefundenen Suchergebnisse.}}",
        "searchprofile-articles": "Inhaltsseiten",
-       "searchprofile-project": "Hilfe- und Projektseiten",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alles",
        "searchprofile-advanced": "Erweitert",
        "searchprofile-articles-tooltip": "Suchen in $1",
-       "searchprofile-project-tooltip": "Suchen in $1",
        "searchprofile-images-tooltip": "Nach Dateien suchen",
        "searchprofile-everything-tooltip": "Gesamten Inhalt durchsuchen (inklusive Diskussionsseiten)",
        "searchprofile-advanced-tooltip": "Suche in weiteren Namensräumen",
        "search-interwiki-default": "Ergebnisse von $1:",
        "search-interwiki-more": "(weitere)",
        "search-relatedarticle": "Verwandte",
-       "searcheverything-enable": "In allen Namensräumen suchen",
        "searchrelated": "verwandt",
        "searchall": "alle",
        "showingresults": "Hier {{PLURAL:$1|ist '''1''' Ergebnis|sind '''$1''' Ergebnisse}}, beginnend mit Nummer '''$2.'''",
        "powersearch-togglelabel": "Wähle aus:",
        "powersearch-toggleall": "Alle",
        "powersearch-togglenone": "Keine",
+       "powersearch-remember": "Auswahl für zukünftige Suchanfragen merken",
        "search-external": "Externe Suche",
        "searchdisabled": "Die {{SITENAME}}-Suche ist deaktiviert. Du kannst unterdessen mit Google suchen. Bitte bedenke, dass der Suchindex von {{SITENAME}} veraltet sein kann.",
        "search-error": "Bei der Suche ist ein Fehler aufgetreten: $1",
        "prefs-email": "E-Mail-Optionen",
        "prefs-rendering": "Aussehen",
        "saveprefs": "Einstellungen speichern",
-       "restoreprefs": "Alle Standardeinstellungen wiederherstellen (in allen Abschnitten)",
+       "restoreprefs": "Standardeinstellungen wiederherstellen (in allen Abschnitten)",
        "prefs-editing": "Bearbeiten",
        "rows": "Zeilen:",
        "columns": "Spalten:",
        "allowemail": "E-Mail-Empfang von anderen Benutzern ermöglichen",
        "prefs-searchoptions": "Suche",
        "prefs-namespaces": "Namensräume",
-       "defaultns": "Anderenfalls in diesen Namensräumen suchen:",
        "default": "Voreinstellung",
        "prefs-files": "Dateien",
        "prefs-custom-css": "Benutzerdefinierte CSS",
        "recentchanges-label-unpatrolled": "Nicht-kontrollierte Änderung",
        "recentchanges-label-plusminus": "Die Änderung der Seitengröße in Bytes",
        "recentchanges-legend-heading": "'''Legende:'''",
-       "recentchanges-legend-newpage": "(siehe auch die [[Special:NewPages|Liste neuer Seiten]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (siehe auch die [[Special:NewPages|Liste neuer Seiten]])",
        "recentchanges-legend-plusminus": "''(±123)''",
        "rcnotefrom": "Angezeigt werden die Änderungen seit <strong>$2</strong> (max. <strong>$1</strong> Einträge).",
        "rclistfrom": "Nur Änderungen seit $3, $2 Uhr zeigen.",
        "recentchangeslinked-title": "Änderungen an Seiten, die von „$1“ verlinkt sind",
        "recentchangeslinked-summary": "Diese Spezialseite listet die letzten Änderungen an den verlinkten Seiten auf (bzw. bei Kategorien an den Mitgliedern dieser Kategorie). Seiten auf deiner [[Special:Watchlist|Beobachtungsliste]] sind '''fett''' dargestellt.",
        "recentchangeslinked-page": "Seite:",
-       "recentchangeslinked-to": "Zeige Änderungen auf Seiten, die hierher verlinken",
+       "recentchangeslinked-to": "Zeige nur Änderungen auf Seiten, die auf diese Seite verlinken",
        "upload": "Datei hochladen",
        "uploadbtn": "Datei hochladen",
        "reuploaddesc": "Abbrechen und zurück zur Hochladen-Seite",
        "largefileserver": "Die Datei ist größer als die vom Server eingestellte Maximalgröße.",
        "emptyfile": "Die hochgeladene Datei ist leer. Der Grund kann ein Tippfehler im Dateinamen sein. Bitte kontrolliere, ob du die Datei wirklich hochladen willst.",
        "windows-nonascii-filename": "Dieses Wiki unterstützt keine Dateinamen, die Sonderzeichen enthalten.",
-       "fileexists": "Eine Datei dieses Namens ist bereits vorhanden. Bitte prüfe <strong>[[:$1]]</strong>, sofern du dir nicht sicher bist, ob du sie ändern möchtest.\n[[$1|thumb]]",
+       "fileexists": "Eine Datei dieses Namens ist bereits vorhanden. Bitte prüfe <strong>[[:$1]]</strong>, sofern {{GENDER:|du}} dir nicht sicher bist, ob du sie ändern möchtest.\n[[$1|thumb]]",
        "filepageexists": "Eine Beschreibungsseite wurde bereits als <strong>[[:$1]]</strong> erstellt, es ist aber keine Datei mit diesem Namen vorhanden.\nDie eingegebene Beschreibung wird nicht auf die Beschreibungsseite übernommen.\nDie Beschreibungsseite musst du nach dem Hochladen der Datei noch manuell bearbeiten.\n[[$1|thumb]]",
        "fileexists-extension": "Eine Datei ähnlichen Namens ist bereits vorhanden: [[$2|thumb]]\n* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>\n* Name der bereits vorhandenen Datei: <strong>[[:$2]]</strong>\nBitte wähle einen anderen Namen.",
        "fileexists-thumbnail-yes": "Bei der Datei scheint es sich um ein Bild verringerter Größe ''(Miniatur)'' zu handeln. [[$1|thumb]]\nBitte prüfe die Datei <strong>[[:$1]]</strong>.\nWenn es sich um das Bild in Originalgröße handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
        "wantedtemplates": "Gewünschte Vorlagen",
        "mostlinked": "Seiten mit den meisten Links",
        "mostlinkedcategories": "Meistbenutzte Kategorien",
-       "mostlinkedtemplates": "Meistbenutzte Vorlagen",
+       "mostlinkedtemplates": "Meisteingebundene Seiten",
        "mostcategories": "Seiten mit den meisten Kategorien",
        "mostimages": "Meistbenutzte Dateien",
        "mostinterwikis": "Seiten mit den meisten Interwikilinks",
        "tooltip-summary": "Gib eine kurze Zusammenfassung ein.",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* Das folgende CSS wird für alle Benutzeroberflächen geladen. */",
-       "cologneblue.css": "/* Das folgende CSS wird für Benutzer der Kölnisch-Blau-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */",
        "monobook.css": "/* Das folgende CSS wird für Benutzer der MonoBook-Benutzeroberfläche geladen */",
-       "modern.css": "/* Das folgende CSS wird für Benutzer der Modern-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte MediaWiki:Common.css bearbeiten. */",
        "vector.css": "/* Das folgende CSS wird für Benutzer der Vector-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */",
        "print.css": "/* Das folgende CSS wird in der Druckausgabe geladen. */",
        "noscript.css": "/* Das folgende CSS wirkt sich für Benutzer aus, die JavaScript deaktiviert haben */",
        "group-sysop.css": "/* CSS an dieser Stelle wirkt sich nur auf Administratoren aus */",
        "group-bureaucrat.css": "/* Das folgende CSS wird nur für Bürokraten geladen. */",
        "common.js": "/* Das folgende JavaScript wird für alle Benutzer geladen. */",
-       "cologneblue.js": "/* Das folgende JavaScript wird für Benutzer der Kölnisch-Blau-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */",
        "monobook.js": "/* Das folgende JavaScript wird für Benutzer der Monobook-Benutzeroberfläche geladen. */",
-       "modern.js": "/* Das folgende JavaScript wird für Benutzer der Modern-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */",
        "vector.js": "/* Das folgende JavaScript wird für Benutzer der Vector-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */",
        "group-autoconfirmed.js": "/* Das folgende JavaScript wird nur für automatisch bestätigte Benutzer geladen. */",
        "group-user.js": "/* Das folgende JavaScript wird nur für angemeldete Benutzer geladen. */",
        "pageinfo-category-pages": "Anzahl der Seiten",
        "pageinfo-category-subcats": "Anzahl der Unterkategorien",
        "pageinfo-category-files": "Anzahl der Dateien",
-       "skinname-cologneblue": "Kölnisch Blau",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Modern",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "Als kontrolliert markieren",
        "markaspatrolledtext": "Diese Seite als kontrolliert markieren",
        "version-credits-not-found": "Es wurden keine detaillierten Danksagungsinformationen für diese Erweiterung gefunden.",
        "version-poweredby-credits": "Diese Website nutzt '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
        "version-poweredby-others": "andere",
-       "version-poweredby-translators": "Übersetzer von translatewiki.net",
+       "version-poweredby-translators": "die Übersetzer von translatewiki.net",
        "version-credits-summary": "Wir danken folgenden Personen für ihre Beiträge zu [[Special:Version|MediaWiki]].",
        "version-license-info": "MediaWiki ist eine Freie Software, d. h. sie kann, gemäß den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nDie Software MediaWiki wird in der Hoffnung verteilt, dass sie nützlich sein wird, allerdings OHNE JEGLICHE GARANTIE und sogar ohne die implizierte Garantie einer MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License''] sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [//www.gnu.org/licenses/old-licenses/gpl-2.0.html online gelesen] werden.",
        "version-software": "Installierte Software",
index 79376f7..24aecc3 100644 (file)
@@ -19,7 +19,8 @@
                        "Xoser",
                        "Geitost",
                        "Microchip08",
-                       "아라"
+                       "아라",
+                       "Calak"
                ]
        },
        "tog-underline": "Bınê gırey de xete bance:",
        "november-date": "Tışrino Peyên $1",
        "december-date": "Kanun $1",
        "pagecategories": "{{PLURAL:$1|Kategoriye|Kategoriy}}",
-       "category_header": "Pelê ke kategoriya \"$1\" derê",
+       "category_header": "Pelê ke kategoriya \"$1\" miyan derê",
        "subcategories": "Kategoriyê bınêni",
-       "category-media-header": "Dosyeyê ke kategoriya \"$1\" derê",
+       "category-media-header": "Dosyeyê ke kategoriya \"$1\" miyan derê",
        "category-empty": "''Ena kategoriye de hewna qet nuştey ya zi medya çıniyê.''",
        "hidden-categories": "{{PLURAL:$1|Kategoriya nımıtiye|Kategoriyê nımıtey}}",
        "hidden-category-category": "Kategoriyê nımıtey",
        "vector-view-view": "Bıwane",
        "vector-view-viewsource": "Çımey bıvêne",
        "actions": "Hereketi",
+       "vector-more-actions": "Zêde",
        "namespaces": "Heruna naman",
        "variants": "Varyanti",
        "navigation-heading": "Menuyê navigasyoni",
        "view": "Bıvêne",
        "view-foreign": "$1'i bıvin",
        "edit": "Bıvurne",
-       "edit-local": "Lokal şınasnayışi bıvurne",
+       "edit-local": "Şınasnayışê lokali bıvurne",
        "create": "Vıraze",
-       "create-local": "Lokal şınasnayış de ke",
+       "create-local": "Şınasnayışê lokali cı ke",
        "editthispage": "Ena pele bıvurne",
        "create-this-page": "Na pele bınuse",
        "delete": "Bestere",
        "youhavenewmessagesfromusers": "Zey $1 ra {{PLURAL:$3|zewbi karber|$3 karberi}} ($2) esto.",
        "youhavenewmessagesmanyusers": "$1 ra tay karberi ($2) dı estê.",
        "newmessageslinkplural": "{{PLURAL:$1|yew mesaco newe|999=mesacê newey}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|vırnayışa|999=vırnayışé}} peyéni",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|vurnayışo peyên|999=vurnayışê peyêni}}",
        "youhavenewmessagesmulti": "$1 mesaco newe esto",
        "editsection": "bıvurne",
        "editold": "bıvurne",
        "searchmenu-exists": "''Ena 'Wikipediya de ser \"[[:$1]]\" yew pel esto'''",
        "searchmenu-new": "<strong>Na wiki de pela \"[[:$1]]\" vıraze!</strong> {{PLURAL:$2|0=|Sewbina pela ke şıma geyrayê cı aye bıvênê.|Yew zi neticanê cıgeyrayışê xo bıvênê.}}",
        "searchprofile-articles": "Pelê tedeestey",
-       "searchprofile-project": "Pelê peşti û procey",
        "searchprofile-images": "Multimedya",
        "searchprofile-everything": "Heme çi",
        "searchprofile-advanced": "Raverşiyaye",
        "searchprofile-articles-tooltip": "$1 de cı geyré",
-       "searchprofile-project-tooltip": "$1 de bigêre",
        "searchprofile-images-tooltip": "Dosya cı geyr",
        "searchprofile-everything-tooltip": "Tedeestey hemine cı geyre (pelanê mınaqeşey zi tey)",
        "searchprofile-advanced-tooltip": "qe cayê nimeyî bigêre",
        "search-interwiki-default": "$1 ra neticey:",
        "search-interwiki-more": "(véşi)",
        "search-relatedarticle": "Eleqeyın",
-       "searcheverything-enable": "cayê nameyê hemi de bigêre",
        "searchrelated": "eleqeyın",
        "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ê}}.",
        "allowemail": "Karberê bini wa bışê mı rê e-posta bırışê.",
        "prefs-searchoptions": "Cı geyre",
        "prefs-namespaces": "Heruna naman",
-       "defaultns": "Eke heni, enê cayanê namey de cı geyre (sae ke):",
        "default": "qısur",
        "prefs-files": "Dosyey",
        "prefs-custom-css": "CSSê xasi",
        "recentchanges-label-unpatrolled": "Eno vurnayış hewna dewriya nêbiyo",
        "recentchanges-label-plusminus": "Ebadê pele de bazê bayti de vayeyê cı",
        "recentchanges-legend-heading": "'''Kıtabek:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|Lista pelanê neweyan]] zi bıvêne)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|Lista pelanê neweyan]] zi bıvêne)",
        "recentchanges-legend-plusminus": "''(±123)''",
        "rcnotefrom": "Cêr de <strong>$2</strong> ra nata vurnayışiyê asenê (tewr vêşi <strong>$1</strong> asenê).",
        "rclistfrom": "$3 $2 ra tepiya vurnayışanê neweyan bımocne",
        "rc-change-size-new": "Vurnayışa dıma $1 {{PLURAL:$1|bayt|bayt}}",
        "newsectionsummary": "/* $1 */ qısımo newe",
        "rc-enhanced-expand": "Detaya bıvin (JavaScript lazımo)",
-       "rc-enhanced-hide": "Detaya bınımnê",
+       "rc-enhanced-hide": "Melumat bınımne",
        "rc-old-title": "\"$1\"i orcinalê cı vıraşt",
        "recentchangeslinked": "Vurnayışê elaqeyıni",
        "recentchangeslinked-feed": "Vurnayışê elaqeyıni",
        "statistics-pages-desc": "Pelanê hemî ke wîkî de estê, pelanê mineqeşeyî, redireksiyon ucb... dehil o.",
        "statistics-files": "Dosyayê bar biye",
        "statistics-edits": "{{SITENAME}} saz kerdış ra hetana newke amora vırnayışan",
-       "statistics-edits-average": "Ser her pele de amarê vurnayîşîyê averageyî",
+       "statistics-edits-average": "Her pele sero nısbi vurnayış",
        "statistics-views-total": "Yekunî bivîne",
        "statistics-views-total-desc": "Peleyê ke çınyê yana xısusiyê e nina zerre nêkerdê",
        "statistics-views-peredit": "Ser her vurnayîşî de vînayîşî",
        "pageinfo-category-pages": "Amarê pelan",
        "pageinfo-category-subcats": "Amarê bınkategoriyan",
        "pageinfo-category-files": "Amarê dosyeyan",
-       "skinname-cologneblue": "Cologne Blue",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Modern",
        "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Nişan bıke ke dewriya biyo",
        "markaspatrolledtext": "Ena pele nişan bike ke devriye biyo",
        "exif-imageuniqueid": "şınasnameyê resmê xususiyi",
        "exif-gpsversionid": "revizyonê GPSyi",
        "exif-gpslatituderef": "paralelê zıme û veroci",
-       "exif-gpslatitude": "Heralem",
+       "exif-gpslatitude": "Verıniye",
        "exif-gpslongituderef": "meridyenê rocvetış û rocawavi",
-       "exif-gpslongitude": "Lemen",
+       "exif-gpslongitude": "Derganiye",
        "exif-gpsaltituderef": "çımeyê berziyi",
-       "exif-gpsaltitude": "berzî",
+       "exif-gpsaltitude": "Berziye",
        "exif-gpstimestamp": "Wextê GPSyi (se'eta atomiki)",
        "exif-gpssatellites": "Qandê peymıtışi antenê ke vıstê kar",
        "exif-gpsstatus": "cayê gırewtoxi",
index 0756701..671f9b4 100644 (file)
        "currentrev": "Aktualna wersija",
        "currentrev-asof": "Aktualna wersija wót $1",
        "revisionasof": "Wersija z $1",
-       "revision-info": "Wersija z $1 wót wužywarja $2",
+       "revision-info": "Wersija z $1 wót wužywarja {{GENDER:$6|$2}}$7",
        "previousrevision": "← Zachadna rewizija",
        "nextrevision": "Pśiduca wersija →",
        "currentrevisionlink": "Aktualna wersija",
        "searchmenu-exists": "'''Jo bok z mjenim \"[[$1]]\" na toś tom wikiju'''",
        "searchmenu-new": "<strong>Napóraj bok \"[[:$1]]\" na toś tom wikiju!</strong> {{PLURAL:$2|0=|Glej teke bok namakany z twójim pytanim.|Glej teke namakane pytańske wuslědki.}}",
        "searchprofile-articles": "Wopśimjeśowe boki",
-       "searchprofile-project": "Pomoc a projektowe boki",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Wšykno",
        "searchprofile-advanced": "Rozšyrjony",
        "searchprofile-articles-tooltip": "W $1 pytaś",
-       "searchprofile-project-tooltip": "W $1 pytaś",
        "searchprofile-images-tooltip": "Za datajami pytaś",
        "searchprofile-everything-tooltip": "Cełe wopsímjeśe pśepytaś (inkluziwnje diskusijne boki)",
        "searchprofile-advanced-tooltip": "W swójskich mjenjowych rumach pytaś",
        "search-interwiki-default": "Wuslědki z $1:",
        "search-interwiki-more": "(wěcej)",
        "search-relatedarticle": "swójźbne",
-       "searcheverything-enable": "We wšych mjenjowych rumach pytaś",
        "searchrelated": "swójźbne",
        "searchall": "wše",
        "showingresults": "How {{PLURAL:|jo '''1''' wuslědk|stej '''$1''' wuslědka|su '''$1''' wuslědki}} wót cysła '''$2'''.",
        "allowemail": "Dostawanje e-mailow drugich wužywarjow zmóžniś.",
        "prefs-searchoptions": "Pytaś",
        "prefs-namespaces": "Mjenjowe rumy",
-       "defaultns": "Howac w toś tych mjenjowych rumach pytaś:",
        "default": "Standard",
        "prefs-files": "Dataje",
        "prefs-custom-css": "Swójski CSS",
        "recentchanges-label-unpatrolled": "Toś ta změna hyšći njejo se pśekontrolěrowała",
        "recentchanges-label-plusminus": "Změnjona wjelikosc boka (licba bajtow)",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "(glej teke [[Special:NewPages|lisćinu nowych bokow]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (glej teke [[Special:NewPages|lisćinu nowych bokow]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Dołojce pokazuju se změny wót <strong>$2</strong> (maks. <strong>$1</strong> zapisow).",
        "rclistfrom": "Nowe změny wót $3 $2 pokazaś",
        "wantedtemplates": "Brachujuce pśedłogi",
        "mostlinked": "Nejcesćej zalinkowane boki",
        "mostlinkedcategories": "Nejcesćej wužywane kategorije",
-       "mostlinkedtemplates": "Nejcesćej wužywane psedłogi",
+       "mostlinkedtemplates": "Nejcesćej zapśěgnjone boki",
        "mostcategories": "Boki z nejwěcej kategorijami",
        "mostimages": "Nejcesćej wótkazane dataje",
        "mostinterwikis": "Boki z nejwěcej mjazyrěcnymi wótkazami",
        "pageinfo-category-pages": "Licba bokow",
        "pageinfo-category-subcats": "Licba pódkategorijow",
        "pageinfo-category-files": "Licba datajow",
-       "skinname-cologneblue": "Kölnski Módry",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderny",
        "markaspatrolleddiff": "Ako kontrolěrowane markěrowaś",
        "markaspatrolledtext": "Markěruj toś ten bok ako kontrolěrowany",
        "markedaspatrolled": "jo se ako kontrolěrowany markěrował",
index ad2e359..27f7929 100644 (file)
@@ -4,7 +4,8 @@
                        "Lévi",
                        "Reder",
                        "Geitost",
-                       "아라"
+                       "아라",
+                       "Shirayuki"
                ]
        },
        "tog-underline": "Tîra 'na rîga sòta i colegamèint.",
        "vector-view-view": "Lēş",
        "vector-view-viewsource": "Guêrda la surzéia",
        "actions": "Asiòun",
+       "vector-more-actions": "Êter",
        "namespaces": "Spâsi di nòm",
        "variants": "Mudéfichi",
        "navigation-heading": "Lésta 'd navigasiòun",
        "accmailtitle": "Cêva 'd ingrès spidîda.",
        "accmailtext": "'Na cêva 'd ingrés l'è stêda fâta a chêş per [[User talk:$1|$1]] e l'è stêda spidîda a $2. Cla cêva 'd ingrès ché la pōl èser cambiêda int la pàgina per ''[[Special:ChangePassword|cambiêr la cêva 'd ingrès]]'' subét dôp avèir fât l'ingrès.",
        "newarticle": "(Nōv)",
-       "newarticletext": "Al colegamèint apèina fât al cumbîna cun 'na pàgina ch' an n'é mìa incòra stêda fâta. S'ét vō fêr la pàgina adès, l'é asê cumincêr a scréver al tèst int la caşèla ché sòt (per vedèr infurmasiòun pió precîşi guêrda la [{{MediaWiki:Helppage}}| pàgina 'd ajót]). Se al colegamèint  l'é stê avêrt per erōr, l'é asê clichêr al pulsânt \"Indrē\" dal tó navigadōr.",
+       "newarticletext": "Al colegamèint apèina fât al cumbîna cun 'na pàgina ch' an n'é mìa incòra stêda fâta. S'ét vō fêr la pàgina adès, l'é asê cumincêr a scréver al tèst int la caşèla ché sòt (per vedèr infurmasiòun pió precîşi guêrda la [$1 pàgina 'd ajót]). Se al colegamèint  l'é stê avêrt per erōr, l'é asê clichêr al pulsânt \"Indrē\" dal tó navigadōr.",
        "anontalkpagetext": "----'' Còsta l'è la pàgina 'd discusiòun ed 'n utèint sèinsa nòm, ch' an n' à mìa incòra fât 'n' utèinsa o in tót al manēri an n'è mìa drē druvêrla. Per arcgnòsrel l'è dòunca necesâri druvê al só indirés IP. J indirés IP a pōlen èser spartî cun êter utèint. Se t'è un utèint sèinsa nòm e 't pèins che i cumèint in cla pàgina ché an riguêrden mìa tè, [[Special:UserLogin/signup|fa 'n' utèinsa nōva]] o [[Special:UserLogin|vîn dèinter cun còla ch' ét gh'ê bèle]] per schivşêr, in futûr,  'd èser cunfûş cun 'd j êter utèint sèinsa nòm.''",
        "noarticletext": "In cól mumèint ché la pàgina serchêda l'é vōda. L'é pusébil [[Special:Search/{{PAGENAME}}|serchêr sté tétol]] int al j êtri pàgini dal sît, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serchêr int i regéster coleghê] opór  [{{fullurl:{{FULLPAGENAME}}|action=edit}} mudifichêr la pàgina adèsa]</span>.",
        "noarticletext-nopermission": "In cól mumèint ché la pàgina serchêda l'é vōda. L'é pusébil [[Special:Search/{{PAGENAME}}|serchêr sté tétol]] int al j êtri pàgini dal sît o<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serchêr int i regéster coleghê] <span>, mó an 't gh'ê mìa al permès ed fêr cla pàgina ché.",
        "sectioneditnotsupported-text": "Mudéfica dal sesiòun mìa sustgnûda in cla pàgina ché.",
        "permissionserrors": "I permès în mìa asê",
        "permissionserrorstext": "An 's gh'à mìa i permès necesâri per fêr còl ch'es pèinsa ed fêr per{{PLURAL:$1|cól mutîv ché|chi mutîv ché}}:",
-       "permissionserrorstext-withaction": "An 's gh'à mìa i permès necesâri per $2, per{{PLURAL:$1|cól mutîv ché|chi mutîv ché}}:",
+       "permissionserrorstext-withaction": "An 's gh'à mìa i permès necesâri per $2, per {{PLURAL:$1|cól mutîv ché|chi mutîv ché}}:",
        "recreate-moveddeleted-warn": "'''Atensiòun: a s'é drē serchêr ed fêr 'na pàgina bèle scanşlêda tèimp fa'''. \n\nAsicurêres che sìa dabòun necesâri cuntinvêr a mudifichêr cla pàgina ché.\nPer cumditê còst l'é l'èlèinch dal scanşladûri e di spustamèint relatîv a la pàgina.",
        "moveddeleted-notice": "Cla pàgina ché l'é stêda scanşlêda. Per infurmasiòun  còst l'é l'èlèinch relatîv dal scanşladûri e di spustemèint fât.",
        "log-fulllog": "Guêrda la stòria dal registrasiòun",
        "parser-template-recursion-depth-warning": "A s'é rivê al lémit 'd arciâm int al mudèl ($1)",
        "language-converter-depth-warning": "A s'é pasê 'l lémit ed fònd dal cunvertidōr ed léngua ($1)",
        "node-count-exceeded-category": "Pàgin in dó vîn pasê 'l nómer ed nōd",
+       "node-count-exceeded-category-desc": "'Na categoréia p'r al pàgini in dó a's pâsa al nómer di nōd.",
        "node-count-exceeded-warning": "Cla pàgina ché l'à pasê 'l nómer di nōd",
        "expansion-depth-exceeded-category": "Pàgini 'n dó vî pasê al fònd de şlargamèint",
+       "expansion-depth-exceeded-category-desc": "Còsta l'é 'na categoréia per pàgini in dó vî pasê al fònd dal şlargamèint.",
        "expansion-depth-exceeded-warning": "Cla pàgina ché la pasê al fònd de şlargamèint",
        "parser-unstrip-loop-warning": "Catê sèria 'd Unistrip",
        "parser-unstrip-recursion-limit": "A s'é pasê i lémit 'd arciâm 'd Unstrip ($1)",
        "currentrev": "Ûltma versiòun",
        "currentrev-asof": "Ûltma versiòun dal $1",
        "revisionasof": "Versiòun dal $1",
-       "revision-info": "Versiòun ed $1, avtōr: $2",
+       "revision-info": "Versiòun dal $4 al $5 ed {{GENDER:$6|$2}}$7",
        "previousrevision": "← Versiòun pió vècia",
        "nextrevision": "Versiòun pió nōva →",
        "currentrevisionlink": "Ûltma versiòun",
        "revdel-restore": "Câmbia la vidûda.",
        "pagehist": "Stòria 'd la pàgina",
        "deletedhist": "Stòria scanşlêda",
+       "revdelete-hide-current": "Imposébil lughêr l'elemèint cun dâta $1 $2 perchè l'é la revişiòun'd adès.",
+       "revdelete-show-no-access": "Imposébil fêr vèder l'elemèint perché l'é stê arcgnusû cme ''riservê''  e an 's gh'à mìa al permès ed fêrel.",
+       "revdelete-modify-no-access": "Imposébil fêr vèder l'elemèint cun dâta $1 $2 perché l'é stê arcgnusû cme \"riservê\"  e an 's gh'à mìa al permès ed fêrel.",
+       "revdelete-modify-missing": "Imposébil fêr vèder l'elemèint cun ID $1 perché an gh'é mìa int al databêş.",
+       "revdelete-no-change": "<strong>Atèinti:</strong> l'elemèint cun dâta $1 $2 al gh'îva bèle al j impustasiòun  ed vésta dmandê.",
+       "revdelete-concurrent-change": "Imposébil mudifichêr l'elemèint cun dâta $1 $2 perché la só cundisiòun l'é stêda cambiêda da 'n êter utèint mèinter a 's tintêva ed fêr la mudéfica.",
+       "revdelete-only-restricted": "Erōr int al lughêr l'elemèint cun dâta $1 $2: an n'é mìa pusébil lughêr j elemèint a la vésta ed j aministradōr sèinsa sernîr almēno 'n êtra siēlta de spustamèint.",
+       "revdelete-reason-dropdown": "*Mutîv pió cumûn per la scanşladûra\n**Mìa rispèt dal dirét 'd avtōr\n**Cumèint o infurmasiòun personêli mìa adâti\n**Nòm utèint mìa adât\n**Infurmasiòun ch'la pré ufènder",
+       "revdelete-otherreason": "Êter mutîv o mutîv zuntê:",
        "revdelete-reasonotherlist": "Êtra ragiòun",
+       "revdelete-edit-reasonlist": "Câmbia i mutîv per la scanşladûra",
+       "revdelete-offender": "Avtōr ed la versiòun:",
+       "suppressionlog": "Tâj",
+       "suppressionlogtext": "Ed sègvit a gh'é l'elèinch dal saccnşladûri e i blôch cun 'd j elemèint lughê a j aministradōr. Guêrda l'[[Special:BlockList|elèinch di blôch]] per l'elèinch ed j avîş e di blôch in funsiòun adès.",
+       "mergehistory": "Unîr al stôri",
+       "mergehistory-header": "Cla pàgina ché la permèt 'd unîr al versiòun che fân pêrt ed la stòria 'd 'na pàgina (ciamêda pàgina 'd urégin) a la stòria ed 'na pàgina pió nōva. L'é necesâri sicurêres che la cuntinvasiòun stòrica 'd la pàgina l'an vègna mìa falsêda.",
+       "mergehistory-box": "Unés la stòria ed dō pàgini:",
+       "mergehistory-from": "Pàgina 'd urégin:",
+       "mergehistory-into": "Pàgina in dó la gh'à d' andêr:",
+       "mergehistory-list": "Stòria in dó 's pōl tachêr l'uniòun",
+       "mergehistory-merge": "L' é pusébil unîr al versiòun ed [[:$1]] sgnêdi ed sègvit al la stòria ed [[:$2]]. Druvêr la clòuna cun i ptòun ed siēlta per unîr tót al versiòun fîn a la dâta e ōra sgnêdi. Da nutêr che se vînen druvê i ptòun ed navigasiòun, la clòuna cun i ptòun ed siēlta l' an pōl mìa èsere druvêda.",
+       "mergehistory-go": "Fà vèder al mudéfichi che pōlen èser unîdi",
+       "mergehistory-submit": "Unés al versiòun",
+       "mergehistory-empty": "Nisòna versiòun da unîr",
+       "mergehistory-success": "{{PLURAL:$3|'Na versiòun ed [[:$1]] l'é stêda unîda|$3 versiòn ed [[:$1]] în stêdi unîdi}} al la stòria ed [[:$2]].",
+       "mergehistory-fail": "Impusébil unîr al stòri. Verifichêr la pàgina e al règoli dal mumèint.",
+       "mergehistory-no-source": "La pàgina 'd urégin $1 l'an gh'é mìa.",
+       "mergehistory-no-destination": "La pàgina 'd arîv $1 l'an gh'é mìa.",
+       "mergehistory-invalid-source": "La pàgina 'd urégin la gh'à 'd avèir un tétol curèt.",
+       "mergehistory-invalid-destination": "La pàgina 'd arîv la gh'à 'd avèir un tétol curèt.",
+       "mergehistory-autocomment": "Uniòun 'd [[:$1]]in [[:$2]]",
+       "mergehistory-comment": "Uniòun ed [[:$1]] in [[:$2]]:$3",
+       "mergehistory-same-destination": "Al pàgini 'd urégin e 'd arîv an pōlen mìa cumbinêr",
+       "mergehistory-reason": "Mutîv:",
+       "mergelog": "Uniòun",
+       "pagemerge-logentry": "l'à unî [[$1]] a [[$2]] (versiòun fîn a $3)",
        "revertmerge": "Scanşèla l'uniòun",
+       "mergelogpagetext": "Ed sègvit în elenchêdi la j ûltmi operasiòun 'd uniòun ed la stòria ed dō pàgini.",
        "history-title": "$1 stòria dal mudéfichi",
+       "difference-title": "$1: diferèinsi tr' al versiòun",
+       "difference-title-multipage": "$1 e $2:diferèinsi tr' al pàgini",
+       "difference-multipage": "(Diferèinsi tr' al pàgini)",
        "lineno": "Rîga $1:",
        "compareselectedversions": "Cunfrûnta al versiòun sernîdi.",
+       "showhideselectedversions": "Fà vèder/lōga versiòun sernîdi",
        "editundo": "scanşèla",
+       "diff-empty": "(Nisóna diferèinsa)",
+       "diff-multi-sameuser": "({{PLURAL:$1|'Na versiòun ed mèz|$1 versiòun ed mèz }} 'd un stès uitèint în mìa mustrêdi)",
+       "diff-multi-otherusers": "({{PLURAL:$1|'Na versiòun ed mèz|$1 versiòun ed mèz }} ed {{PLURAL:$2|'n êter utèint|$2 utèint}} mìa fâti vèder)",
+       "diff-multi-manyusers": "({{PLURAL:$1|'Na versiòun ed mèz|$1 versiòun ed mèz }} pió in là ed $2{{PLURAL:$2|utèint}} mìa {{PLURAL:$1|mustrêda|mustrêdi}})",
+       "difference-missing-revision": "{{PLURAL:$2|'Na versiòun|$2 versiòun}} ed cla diferèinsa ché ($1) {{PLURAL:$2|an n'é mìa stêda catêda|în mìa stêdi catêdi}}. \n\nCòst a sucēd ed sôlit quând a's và adrē a un colegamèint vèc ed 'na diff a 'na pàgina scanşlêda. I particulêr a pōlen èser catê int al [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} regéster dal scanşladûri].",
        "searchresults": "Rişultê 'd la sērca",
        "searchresults-title": "Rişultê 'd la sērca ed \"$1\"",
+       "toomanymatches": "Trôpi relasiòun. Cambiêr la dmânda.",
+       "titlematches": "Rapôrt int al tétol dal pàgini",
+       "textmatches": "Rapôrt int al tèst dal pàgini",
+       "notextmatches": "Nisóna relasiòun int al tèst dal pàgini",
        "prevn": "{{PLURAL:$1|còl préma|quî préma $1}}",
        "nextn": "{{PLURAL:$1|al seguèint|i seguèint $1}}",
        "prevn-title": "{{PLURAL:$1|Al rişultêt ed préma|$1 i rişultêt ed préma}}",
        "searchmenu-exists": "'''Int al sît a gh'é 'na pàgina cun al nòm [[:$1]].'''\n{{PLURAL:$2|0=|Guêrda ânca chiêter ch'în stê catê.}}",
        "searchmenu-new": "<strong>Şvilópa la pàgina \"[[:$1]]\" insém a cól sît ché!</strong> {{PLURAL:$2|0=|Guêrda ânch la pàgina che t'é serchê|Guêrda ânch i rişultêt catê}}.",
        "searchprofile-articles": "Pàgini 'd j argumèint",
-       "searchprofile-project": "Pàgini 'd ajót e relatîvi al prugèt.",
        "searchprofile-images": "Multimèdia",
        "searchprofile-everything": "Tót",
        "searchprofile-advanced": "Specêla",
        "searchprofile-articles-tooltip": "Sèirca in $1",
-       "searchprofile-project-tooltip": "Sèirca in $1",
        "searchprofile-images-tooltip": "Sèirca 'file'",
        "searchprofile-everything-tooltip": "Sērca dapertót (ânch int al pàgini 'd discusuòun).",
        "searchprofile-advanced-tooltip": "Sērca int i spâsi di nòm fât só mzûra.",
        "search-result-size": "$1 ({{PLURAL:$2|'na parôla|$2 parôli}})",
        "search-result-category-size": "{{PLURAL:$1|1 utèint|$1 utèint}} ({{PLURAL:$2|1 sotcategoréia|$2 sotcategoréi}},{{PLURAL:$3|1 file|$3 files}})",
+       "search-result-score": "Impurtânsa: $1%",
        "search-redirect": "(redirect $1)",
        "search-section": "(sesiòun $1)",
        "search-suggest": "Fōrsi 't serchêv $1",
index 87fe5ba..b6eebbc 100644 (file)
@@ -36,7 +36,8 @@
                        "Περίεργος",
                        "לערי ריינהארט",
                        "Kolega2357",
-                       "아라"
+                       "아라",
+                       "Calak"
                ]
        },
        "tog-underline": "Υπογράμμιση συνδέσμων:",
        "vector-view-view": "Ανάγνωση",
        "vector-view-viewsource": "Προβολή κώδικα",
        "actions": "Ενέργειες",
+       "vector-more-actions": "Περισσότερα",
        "namespaces": "Χώροι ονομάτων",
        "variants": "Παραλλαγές",
        "navigation-heading": "Μενού πλοήγησης",
        "searchmenu-exists": "'''Υπάρχει μια σελίδα που ονομάζεται «[[:$1]]» σε αυτό το wiki.'''",
        "searchmenu-new": "'''Δημιουργήστε τη σελίδα «[[:$1]]» σε αυτό το wiki!'''",
        "searchprofile-articles": "Σελίδες περιεχομένου",
-       "searchprofile-project": "Σελίδες Βοήθειας και Εγχειρήματος",
        "searchprofile-images": "Πολυμέσα",
        "searchprofile-everything": "Οτιδήποτε",
        "searchprofile-advanced": "Προχωρημένο",
        "searchprofile-articles-tooltip": "Αναζήτηση σε $1",
-       "searchprofile-project-tooltip": "Αναζήτηση σε $1",
        "searchprofile-images-tooltip": "Αναζήτηση αρχείων",
        "searchprofile-everything-tooltip": "Αναζήτηση σε όλο το περιεχόμενο (συμπεριλαμβανομένων των σελίδων συζήτησης)",
        "searchprofile-advanced-tooltip": "Αναζήτηση σε προσαρμοσμένους ονοματοχώρους",
        "search-interwiki-default": "$1 αποτελέσματα:",
        "search-interwiki-more": "(περισσότερα)",
        "search-relatedarticle": "Σχετικά",
-       "searcheverything-enable": "Αναζήτηση σε όλες τις περιοχές ονομάτων",
        "searchrelated": "σχετικά",
        "searchall": "όλα",
        "showingresults": "Δείτε παρακάτω μέχρι τα {{PLURAL:$1|'''1'''αποτέλεσμα|'''$1''' αποτελέσματα}} ξεκινώντας με #'''$2'''.",
        "allowemail": "Ενεργοποίηση παραλαβής μηνύματος ηλεκτρονικού ταχυδρομείου από άλλους χρήστες",
        "prefs-searchoptions": "Αναζήτηση",
        "prefs-namespaces": "Περιοχές ονομάτων",
-       "defaultns": "Ειδάλλως αναζήτηση σε αυτές τις περιοχές ονομάτων:",
        "default": "προεπιλογή",
        "prefs-files": "Αρχεία",
        "prefs-custom-css": "Προκαθορισμένη CSS",
        "prefs-emailconfirm-label": "Επιβεβαίωση e-mail:",
        "youremail": "Διεύθυνση ηλεκτρονικού ταχυδρομείου:",
        "username": "{{GENDER:$1|Όνομα χρήστη}}:",
-       "uid": "{{GENDER:$1|Αναγνωριστικό χρήστη}}:",
        "prefs-memberingroups": "{{GENDER:$2|Μέλος}} της {{PLURAL:$1|ομάδας|ομάδων}}:",
        "prefs-registration": "Χρόνος εγγραφής:",
        "yourrealname": "Πραγματικό όνομα:",
        "right-markbotedits": "Σήμανση επαναφερόμενων επεξεργασιών ως επεξεργασιών μποτ",
        "right-noratelimit": "Να μην επηρεάζεται από τα όρια ρυθμού",
        "right-import": "Εισαγωγή σελίδων από άλλα wikis",
-       "right-importupload": "Î\95ιÏ\83αγÏ\89γή Ï\83ελίδÏ\89ν Î±Ï\80Ï\8c Ï\86Ï\8cÏ\81Ï\84Ï\89Ï\83η αρχείου",
+       "right-importupload": "Î\95ιÏ\83αγÏ\89γή Ï\83ελίδÏ\89ν Î¼Îµ Î±Î½Î­Î²Î±Ï\83μα αρχείου",
        "right-patrol": "Σήμανση επεξεργασιών άλλων χρηστών ως ελεγμένες",
        "right-autopatrol": "Αυτόματη σημείωση των επεξεργασιών τους ως ελεγμένες",
        "right-patrolmarks": "Δείτε τις σημειώσεις 'υπό παρακολούθηση' των προσφάτων αλλαγών",
        "action-protect": "να αλλάξετε τα επίπεδα προστασίας για αυτή τη σελίδα",
        "action-rollback": "γρήγορη επαναφορά των επεξεργασιών του τελευταίου χρήστη που επεξεργάστηκε μια συγκεκριμένη σελίδα",
        "action-import": "εισάγετε σελίδες από άλλο wiki",
-       "action-importupload": "εισάγετε αυτή τη σελίδα από φόρτωση αρχείου",
+       "action-importupload": "εισάγετε σελίδες με ανέβασμα αρχείου",
        "action-patrol": "να επισημάνετε τις επεξεργασίες άλλων ως ελεγμένες",
        "action-autopatrol": "να επισημάνετε την επεξεργασία σας ως ελεγμένη",
        "action-unwatchedpages": "να εμφανίσετε τον κατάλογο μη παρακολουθούμενων σελίδων",
        "recentchanges-label-unpatrolled": "Αυτή η επεξεργασία δεν έχει ελεγχθεί ακόμα",
        "recentchanges-label-plusminus": "Μεταβολή του μεγέθους της σελίδας σε bytes",
        "recentchanges-legend-heading": "'''Υπόμνημα:'''",
-       "recentchanges-legend-newpage": "(δείτε [[Special:NewPages|Νέες σελίδες]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (δείτε [[Special:NewPages|Νέες σελίδες]])",
        "rcnotefrom": "Παρακάτω είναι οι αλλαγές από τις <strong>$2</strong>  (εμφανίζονται μέχρι <strong>$1</strong> ).",
        "rclistfrom": "Εμφάνιση νέων αλλαγών αρχίζοντας από $3 $2",
        "rcshowhideminor": "$1 μικροεπεξεργασιών",
        "recentchangeslinked-page": "Όνομα σελίδας:",
        "recentchangeslinked-to": "Εμφάνιση αλλαγών σε σελίδες συνδεδεμένες με την δεδομένη σελίδα αντί αυτής",
        "upload": "Ανέβασμα αρχείου",
-       "uploadbtn": "ΦÏ\8cÏ\81Ï\84Ï\89Ï\83η αρχείου",
+       "uploadbtn": "Î\91νέβαÏ\83μα αρχείου",
        "reuploaddesc": "Επιστροφή στη φόρμα φόρτωσης",
-       "upload-tryagain": "Î\97 ÎºÎ±Ï\84αÏ\87Ï\8eÏ\81ηÏ\83η Î¬Î»Î»Î±Î¾Îµ Ï\84ην Ï\80εÏ\81ιγÏ\81αÏ\86ή αρχείου",
+       "upload-tryagain": "Î¥Ï\80οβολή Ï\84Ï\81οÏ\80οÏ\80οιημένηÏ\82 Ï\80εÏ\81ιγÏ\81αÏ\86ήÏ\82 αρχείου",
        "uploadnologin": "Δεν έχετε συνδεθεί!",
        "uploadnologintext": "Παρακαλώ $1 για να επιφορτώσετε αρχεία.",
        "upload_directory_missing": "Λείπει το αποθηκευτήριο επιφορτώσεων ($1) και δεν μπορεί να δημιουργηθεί από τον webserver.",
        "upload_directory_read_only": "Δεν είναι δυνατή η εγγραφή στον κατάλογο ($1) από τον server.",
-       "uploaderror": "ΣÏ\86άλμα Ï\83Ï\84η Ï\86Ï\8cÏ\81Ï\84Ï\89Ï\83η αρχείου",
+       "uploaderror": "ΣÏ\86άλμα Ï\83Ï\84ο Î±Î½Î­Î²Î±Ï\83μα αρχείου",
        "upload-recreate-warning": "'''Προειδοποίηση: Ένα αρχείο με αυτό το όνομα έχει διαγραφεί ή μετακινηθεί.'''\n\nΤο αρχείο διαγραφών και μετακινήσεων για αυτή τη σελίδα παρέχεται εδώ για διευκόλυνση:",
        "uploadtext": "Μπορείτε να χρησιμοποιήσετε την παρακάτω φόρμα για να επιφορτώσετε αρχεία. Για να δείτε ήδη επιφορτωμένα αρχεία, πηγαίνετε στη [[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|alt text]]</nowiki></code>''' (χρήση μίας εκδοχής 200 pixel σε πλάτος σε ένα κουτάκι στο αριστερό περιθώριο με περιγραφή 'alt text')\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' (άμεση σύνδεση με το αρχείο χωρίς εμφάνιση του ίδιου του αρχείου)",
        "upload-permitted": "Επιτρεπτοί τύποι αρχείων: $1.",
        "filereuploadsummary": "Αλλαγές αρχείου:",
        "filestatus": "Κατάσταση του copyright:",
        "filesource": "Πηγή:",
-       "ignorewarning": "Î\91γνÏ\8cηÏ\83ε Ï\84ην Ï\80Ï\81οειδοÏ\80οίηÏ\83η ÎºÎ±Î¹ Î±Ï\80οθήκεÏ\85Ï\83ε Ï\84ο Î±Ï\81Ï\87είο",
+       "ignorewarning": "Î\91γνÏ\8cηÏ\83η Ï\84ηÏ\82 Ï\80Ï\81οειδοÏ\80οίηÏ\83ηÏ\82 ÎºÎ±Î¹ Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Î±Ï\81Ï\87είοÏ\85 Î¿Ï\8dÏ\84Ï\89Ï\82 Î® Î¬Î»Î»Ï\89Ï\82",
        "ignorewarnings": "Αγνόησε οποιεσδήποτε προειδοποιήσεις",
        "minlength1": "Τα ονόματα αρχείων πρέπει να είναι τουλάχιστον ένα γράμμα.",
        "illegalfilename": "Το όνομα του αρχείου \"$1\" περιέχει χαρακτήρες που δεν επιτρέπονται στους τίτλους των σελίδων. Παρακαλούμε δώστε άλλο όνομα στο αρχείο και προσπαθήστε ξανά να το ανεβάσετε.",
        "largefileserver": "Το μέγεθος αυτού του αρχείο είναι μεγαλύτερο από το μέγιστο μέγεθος που ο εξυπηρετητής είναι ρυθμισμένος να επιτρέπει.",
        "emptyfile": "Το αρχείο που φορτώσατε φαίνεται να είναι κενό. Αυτό μπορεί να οφείλεται σε λάθος πληκτρολόγησης του ονόματος του αρχείου. Παρακαλούμε ελέγξτε εαν αυτό είναι πραγματικά το αρχείο που θέλετε να φορτώσετε.",
        "windows-nonascii-filename": "Αυτό το wiki δεν υποστηρίζει ονόματα αρχείων με ειδικούς χαρακτήρες.",
-       "fileexists": "Υπάρχει ήδη αρχείο με αυτό το όνομα -παρακαλούμε ελέγξτε στο <strong>[[:$1]]</strong>.\nΕίστε βέβαιος (-η) πως θέλετε να αλλάξετε το όνομα του αρχείου; [[$1|thumb]]",
+       "fileexists": "Υπάρχει ήδη αρχείο με αυτό το όνομα, παρακαλούμε ελέγξτε το <strong>[[:$1]]</strong> εάν δεν είστε σίγουρος/η αν θέλετε να το αλλάξετε.\n[[$1|thumb]]",
        "filepageexists": "Η σελίδα περιγραφής για αυτό το αρχείο δημιουργήθηκε ήδη στο <strong>[[:$1]]</strong>, αλλά κανένα αρχείο με αυτό το όνομα δεν υπάρχει αυτή τη στιγμή.\nΗ περιγραφἠ που θα εισάγετε δεν θα εμφανιστεί στη σελίδα περιγραφής.\nΓια να εμφανιστεί η περιγραφή σας εκεί, θα πρέπει να την επεξεργαστείτε χειροκίνητα.\n[[$1|thumb]]",
        "fileexists-extension": "Ένα αρχείο με παρόμοιο όνομα υπάρχει: [[$2|thumb]]\n* Όνομα του προς επιφόρτωση αρχείου: <strong>[[:$1]]</strong>\n* Όνομα υπάρχοντος αρχείου: <strong>[[:$2]]</strong>\nΠαρακαλώ διαλέξτε ένα διαφορετικό όνομα.",
        "fileexists-thumbnail-yes": "Το αρχείο φαίνεται ότι είναι μια εικόνα μειωμένου μεγέθους ''(μικρογραφία)''. [[$1|thumb]]\nΠαρακαλώ ελέγξτε το αρχείο <strong>[[:$1]]</strong>.\nΑν το ελεγμένο αρχείο είναι η ίδια εικόνα στο αρχικό μέγεθος δεν είναι απαραίτητο να επιφορτώσετε μια επιπλέον μικρογραφία.",
        "savefile": "Αποθήκευση αρχείου",
        "uploadedimage": "ανέβασε το «[[$1]]»",
        "overwroteimage": "ανέβασμα νέας έκδοσης του \"[[$1]]\"",
-       "uploaddisabled": "Î\9bÏ\85Ï\80οÏ\8dμαÏ\83Ï\84ε, Î· Ï\86Ï\8cÏ\81Ï\84Ï\89Ï\83η Î­Ï\87ει Î±Ï\80ενεÏ\81γοÏ\80οιηθεί.",
+       "uploaddisabled": "Το Î±Î½Î­Î²Î±Ï\83μα Î±Ï\81Ï\87είÏ\89ν ÎµÎ¯Î½Î±Î¹ Î±Ï\80ενεÏ\81γοÏ\80οιημένο.",
        "copyuploaddisabled": "Το ανέβασμα μέσω URL έχει απενεργοποιηθεί.",
-       "uploaddisabledtext": "Î\97 Ï\86Ï\8cÏ\81Ï\84Ï\89Ï\83η Î±Ï\81Ï\87είÏ\89ν ÎµÎ¯Î½Î±Î¹ Î±Ï\80ενεÏ\81γοÏ\80οιημένη.",
+       "uploaddisabledtext": "Το Î±Î½Î­Î²Î±Ï\83μα Î±Ï\81Ï\87είÏ\89ν ÎµÎ¯Î½Î±Î¹ Î±Ï\80ενεÏ\81γοÏ\80οιημένο.",
        "php-uploaddisabledtext": "Οι επιφορτώσεις αρχείων ειναι απενεργοποιημένες στην PHP. Παρακαλούμε, ελέγξτε την ρύθμιση file_uploads.",
        "uploadscripted": "Αυτό το αρχείο περιέχει κώδικα HTML ή script που μπορεί να παρερμηνευθεί από μερικούς browser.",
        "uploadinvalidxml": "Δεν ήταν δυνατή η ανάλυση του κώδικα XML στο αρχείο.",
        "mostrevisions": "Άρθρα με τις περισσότερες αναθεωρήσεις",
        "prefixindex": "Όλες οι σελίδες με πρόθεμα",
        "prefixindex-namespace": "Όλες οι σελίδες με πρόθεμα (ονοματοχώρος $1)",
+       "prefixindex-strip": "Αφαίρεση του προθέματος στη λίστα",
        "shortpages": "Σύντομες σελίδες",
        "longpages": "Εκτενείς σελίδες",
        "deadendpages": "Αδιέξοδες σελίδες",
        "log-title-wildcard": "Αναζήτησε τίτλους που αρχίζουν με αυτό το κείμενο",
        "showhideselectedlogentries": "Εμφάνιση/απόκρυψη επιλεγμένων καταχωρήσεων στη λίστα καταγραφών",
        "allpages": "Όλες οι σελίδες",
-       "alphaindexline": "$1 έως $2",
        "nextpage": "Επόμενη σελίδα ($1)",
        "prevpage": "Προηγούμενη σελίδα ($1)",
        "allpagesfrom": "Εμφάνιση σελίδων που αρχίζουν από:",
        "tooltip-preferences-save": "Αποθήκευση προτιμήσεων",
        "tooltip-summary": "Εισαγάγετε μια σύντομη σύνοψη",
        "common.css": "/* Το τοποθετημένο εδώ CSS θα εφαρμοστεί σε όλα τα skins */",
-       "cologneblue.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Cologne Blue skin */",
        "monobook.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Monobook skin */",
-       "modern.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Modern skin */",
        "vector.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Vector skin */",
        "print.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει το αποτέλεσμα της εκτύπωσης */",
        "common.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για όλους τους χρήστες σε κάθε φόρτωση σελίδας. */",
-       "cologneblue.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Cologne Blue skin */",
        "monobook.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το MonoBook skin */",
-       "modern.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Modern skin */",
        "vector.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Vector skin */",
        "anonymous": "{{PLURAL:$1|Ανώνυμος χρήστης|Ανώνυμοι χρήστες}} του {{SITENAME}}",
        "siteuser": "{{SITENAME}} χρήστης $1",
        "pageinfo-category-pages": "Αριθμός σελίδων",
        "pageinfo-category-subcats": "Αριθμός υποκατηγοριών",
        "pageinfo-category-files": "Αριθμός αρχείων",
-       "skinname-modern": "Μοντέρνο",
        "markaspatrolleddiff": "Να σημειωθεί 'υπό παρακολούθηση'",
        "markaspatrolledtext": "Να σημειωθεί αυτό το άρθρο ως 'υπό παρακολούθηση'.",
        "markedaspatrolled": "Σημειωμένο ως 'υπό παρακολούθηση'",
index e4a7afd..34c6638 100644 (file)
        "vector-view-view": "Read",
        "vector-view-viewsource": "View source",
        "actions": "Actions",
+       "vector-more-actions": "More",
        "namespaces": "Namespaces",
        "variants": "Variants",
        "navigation-heading": "Navigation menu",
        "currentrev": "Latest revision",
        "currentrev-asof": "Latest revision as of $1",
        "revisionasof": "Revision as of $1",
-       "revision-info": "Revision as of $1 by $2",
+       "revision-info": "Revision as of $1 by {{GENDER:$6|$2}}$7",
        "revision-info-current": "-",
        "revision-nav": "($1) $2{{int:pipe-separator}}$3 ($4){{int:pipe-separator}}$5 ($6)",
        "previousrevision": "← Older revision",
        "searchmenu-new": "<strong>Create the page \"[[:$1]]\" on this wiki!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
        "searchmenu-new-nocreate": "",
        "searchprofile-articles": "Content pages",
-       "searchprofile-project": "Help and Project pages",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Everything",
        "searchprofile-advanced": "Advanced",
        "searchprofile-articles-tooltip": "Search in $1",
-       "searchprofile-project-tooltip": "Search in $1",
        "searchprofile-images-tooltip": "Search for files",
        "searchprofile-everything-tooltip": "Search all of content (including talk pages)",
        "searchprofile-advanced-tooltip": "Search in custom namespaces",
        "search-interwiki-custom": "",
        "search-interwiki-more": "(more)",
        "search-relatedarticle": "Related",
-       "searcheverything-enable": "Search in all namespaces",
        "searchrelated": "related",
        "searchall": "all",
        "showingresults": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} starting with #<strong>$2</strong>.",
        "powersearch-togglelabel": "Check:",
        "powersearch-toggleall": "All",
        "powersearch-togglenone": "None",
+       "powersearch-remember": "Remember selection for future searches",
        "search-external": "External search",
        "searchdisabled": "{{SITENAME}} search is disabled.\nYou can search via Google in the meantime.\nNote that their indexes of {{SITENAME}} content may be out of date.",
        "googlesearch": "<form method=\"get\" action=\"//www.google.com/search\" id=\"googlesearch\">\n\t<input type=\"hidden\" name=\"domains\" value=\"{{SERVER}}\" />\n\t<input type=\"hidden\" name=\"num\" value=\"50\" />\n\t<input type=\"hidden\" name=\"ie\" value=\"$2\" />\n\t<input type=\"hidden\" name=\"oe\" value=\"$2\" />\n\n\t<input type=\"text\" name=\"q\" size=\"31\" maxlength=\"255\" value=\"$1\" />\n\t<input type=\"submit\" name=\"btnG\" value=\"$3\" />\n  <div>\n\t<input type=\"radio\" name=\"sitesearch\" id=\"gwiki\" value=\"{{SERVER}}\" checked=\"checked\" /><label for=\"gwiki\">{{SITENAME}}</label>\n\t<input type=\"radio\" name=\"sitesearch\" id=\"gWWW\" value=\"\" /><label for=\"gWWW\">WWW</label>\n  </div>\n</form>",
        "allowemail": "Enable email from other users",
        "prefs-searchoptions": "Search",
        "prefs-namespaces": "Namespaces",
-       "defaultns": "Otherwise search in these namespaces:",
        "default": "default",
        "prefs-files": "Files",
        "prefs-custom-css": "Custom CSS",
        "recentchanges-label-unpatrolled": "This edit has not yet been patrolled",
        "recentchanges-label-plusminus": "The page size changed by this number of bytes",
        "recentchanges-legend-heading": "'''Legend:'''",
-       "recentchanges-legend-newpage": "(also see [[Special:NewPages|list of new pages]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (also see [[Special:NewPages|list of new pages]])",
+       "recentchanges-legend-minor": "{{int:recentchanges-label-minor}}",
+       "recentchanges-legend-bot": "{{int:recentchanges-label-bot}}",
+       "recentchanges-legend-unpatrolled": "{{int:recentchanges-label-unpatrolled}}",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "Below are the changes since <strong>$2</strong> (up to <strong>$1</strong> shown).",
        "rclistfrom": "Show new changes starting from $2, $3",
        "largefileserver": "This file is bigger than the server is configured to allow.",
        "emptyfile": "The file you uploaded seems to be empty.\nThis might be due to a typo in the filename.\nPlease check whether you really want to upload this file.",
        "windows-nonascii-filename": "This wiki does not support filenames with special characters.",
-       "fileexists": "A file with this name exists already, please check <strong>[[:$1]]</strong> if you are not sure if you want to change it.\n[[$1|thumb]]",
+       "fileexists": "A file with this name exists already, please check <strong>[[:$1]]</strong> if {{GENDER:|you}} are not sure if you want to change it.\n[[$1|thumb]]",
        "filepageexists": "The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.\nThe summary you enter will not appear on the description page.\nTo make your summary appear there, you will need to manually edit it.\n[[$1|thumb]]",
        "fileexists-extension": "A file with a similar name exists: [[$2|thumb]]\n* Name of the uploading file: <strong>[[:$1]]</strong>\n* Name of the existing file: <strong>[[:$2]]</strong>\nDo you perhaps want to use a more distinctive name?",
        "fileexists-thumbnail-yes": "The file seems to be an image of reduced size <em>(thumbnail)</em>.\n[[$1|thumb]]\nPlease check the file <strong>[[:$1]]</strong>.\nIf the checked file is the same image of original size it is not necessary to upload an extra thumbnail.",
        "filedelete-maintenance": "Deletion and restoration of files temporarily disabled during maintenance.",
        "filedelete-maintenance-title": "Cannot delete file",
        "mimesearch": "MIME search",
-       "mimesearch-summary": "This page enables the filtering of files for their MIME type.\nInput: contenttype/subtype, e.g. <code>image/jpeg</code>.",
+       "mimesearch-summary": "This page enables the filtering of files for their MIME type.\nInput: contenttype/subtype or contenttype/*, e.g. <code>image/jpeg</code>.",
        "mimetype": "MIME type:",
        "download": "download",
        "unwatchedpages": "Unwatched pages",
        "mostlinked-summary": "",
        "mostlinkedcategories": "Most linked-to categories",
        "mostlinkedcategories-summary": "",
-       "mostlinkedtemplates": "Most linked-to templates",
+       "mostlinkedtemplates": "Most transcluded pages",
        "mostlinkedtemplates-summary": "",
        "mostcategories": "Pages with the most categories",
        "mostcategories-summary": "",
        "interlanguage-link-title": "$1 – $2",
        "interlanguage-link-title-langonly": "$1",
        "common.css": "/* CSS placed here will be applied to all skins */",
-       "cologneblue.css": "/* CSS placed here will affect users of the Cologne Blue skin */",
        "monobook.css": "/* CSS placed here will affect users of the MonoBook skin */",
-       "modern.css": "/* CSS placed here will affect users of the Modern skin */",
        "vector.css": "/* CSS placed here will affect users of the Vector skin */",
        "print.css": "/* CSS placed here will affect the print output */",
        "noscript.css": "/* CSS placed here will affect users with JavaScript disabled */",
        "group-sysop.css": "/* CSS placed here will affect sysops only */",
        "group-bureaucrat.css": "/* CSS placed here will affect bureaucrats only */",
        "common.js": "/* Any JavaScript here will be loaded for all users on every page load. */",
-       "cologneblue.js": "/* Any JavaScript here will be loaded for users using the Cologne Blue skin */",
        "monobook.js": "/* Any JavaScript here will be loaded for users using the MonoBook skin */",
-       "modern.js": "/* Any JavaScript here will be loaded for users using the Modern skin */",
        "vector.js": "/* Any JavaScript here will be loaded for users using the Vector skin */",
        "group-autoconfirmed.js": "/* Any JavaScript here will be loaded for autoconfirmed users only */",
        "group-user.js": "/* Any JavaScript here will be loaded for registered users only */",
        "pageinfo-category-pages": "Number of pages",
        "pageinfo-category-subcats": "Number of subcategories",
        "pageinfo-category-files": "Number of files",
-       "skinname-cologneblue": "Cologne Blue",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Modern",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "Mark as patrolled",
        "markaspatrolledlink": "[$1]",
index dd696b5..b607713 100644 (file)
        "vector-view-view": "Legi",
        "vector-view-viewsource": "Vidi fonton",
        "actions": "Agoj",
+       "vector-more-actions": "Pli",
        "namespaces": "Nomspacoj",
        "variants": "Variantoj",
        "navigation-heading": "Navigacia menuo",
        "permalink": "Konstanta ligilo",
        "print": "Printi",
        "view": "Vidi",
+       "view-foreign": "Rigardi en $1",
        "edit": "Redakti",
        "edit-local": "Redakti lokan priskribon",
        "create": "Krei",
        "searchmenu-exists": "'''Estas paĝo nomita \"[[:$1]]\" en ĉi tiu vikio'''",
        "searchmenu-new": "<strong>Krei la paĝon \"[[:$1]]\" en ĉi tiu vikio!</strong>{{PLURAL:$2|0=|Vidu ankaŭ la paĝon trovitan per via serĉo.|Vidu ankaŭ la trovitajn serĉrezultojn.}}",
        "searchprofile-articles": "Enhavaj paĝoj",
-       "searchprofile-project": "Paĝoj pri Helpo kaj Projektoj",
        "searchprofile-images": "Plurmedio",
        "searchprofile-everything": "Ĉio",
        "searchprofile-advanced": "Progresa",
        "searchprofile-articles-tooltip": "Serĉo en $1",
-       "searchprofile-project-tooltip": "Serĉo en $1",
        "searchprofile-images-tooltip": "Serĉi dosierojn",
        "searchprofile-everything-tooltip": "Traserĉi ĉiun enhavon (inkluzivante diskuto-paĝojn)",
        "searchprofile-advanced-tooltip": "Serĉi en specialaj nomspacoj",
        "search-interwiki-default": "Rezultoj de $1:",
        "search-interwiki-more": "(plu)",
        "search-relatedarticle": "Relataj",
-       "searcheverything-enable": "Traserĉi ĉiujn nomspacojn",
        "searchrelated": "rilataj",
        "searchall": "ĉiuj",
        "showingresults": "Montras {{PLURAL:$1|'''1''' trovitan|'''$1''' trovitajn}} ekde la #'''$2'''-a.",
        "allowemail": "Rajtigi retmesaĝojn de aliaj uzantoj",
        "prefs-searchoptions": "Serĉi",
        "prefs-namespaces": "Nomspacoj",
-       "defaultns": "Alimaniere, traserĉi la jenajn nomspacojn:",
        "default": "defaŭlte",
        "prefs-files": "Dosieroj",
        "prefs-custom-css": "Propra CSS",
        "prefs-emailconfirm-label": "Retpoŝta konfirmado:",
        "youremail": "Retadreso:",
        "username": "{{GENDER:$1|Salutnomo}}:",
-       "uid": "{{GENDER:$1|Uzanto}}-identaĵo:",
        "prefs-memberingroups": "{{GENDER:$2|Ano}} de {{PLURAL:$1|grupo|grupoj}}:",
        "prefs-registration": "Tempo de registrado:",
        "yourrealname": "Vera nomo:",
        "right-move": "Movi paĝojn",
        "right-move-subpages": "Alinomigi paĝojn kun ĝiaj subpaĝoj",
        "right-move-rootuserpages": "Movi radikajn uzanto-paĝojn",
+       "right-move-categorypages": "Alinomigi kategoriajn paĝojn",
        "right-movefile": "Alinomigi dosierojn",
        "right-suppressredirect": "Ne krei alidirektilon de la malnova nomo kiam movante paĝon",
        "right-upload": "Alŝuti dosierojn",
        "action-createpage": "krei paĝojn",
        "action-createtalk": "krei diskuto-paĝojn",
        "action-createaccount": "krei ĉi tiun uzanto-konton",
+       "action-history": "rigardi historion de tiu ĉi paĝo",
        "action-minoredit": "marki ĉi tiun redakton eta",
        "action-move": "movi ĉi tiun paĝon",
        "action-move-subpages": "movi ĉi tiun paĝon, kaj ties subpaĝojn",
        "action-move-rootuserpages": "movi radikajn uzanto-paĝojn",
+       "action-move-categorypages": "alinomigi kategoriajn paĝojn",
        "action-movefile": "alinomigi ĉi tiun dosieron",
        "action-upload": "alŝuti ĉi tiun dosieron",
        "action-reupload": "anstataŭigi ĉi tiun ekzistantan dosieron",
        "recentchanges-label-unpatrolled": "Ĉi tiu redakto ne jam estis patrolata.",
        "recentchanges-label-plusminus": "La paĝa grandeco ŝanĝiĝis je ĉi tiu nombro de bajtoj",
        "recentchanges-legend-heading": "'''Klarigo:'''",
-       "recentchanges-legend-newpage": "(vidu ankaŭ [[Special:NewPages|liston de novaj paĝoj]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vidu ankaŭ [[Special:NewPages|liston de novaj paĝoj]])",
        "rcnotefrom": "Malsupre estas ŝanĝoj ekde <strong>$2</strong> ({{PLURAL:$1|lasta|lastaj}} <strong>$1</strong>).",
        "rclistfrom": "Montri novajn ŝanĝojn ekde \"$3 $2\"",
        "rcshowhideminor": "$1 redaktetojn",
        "pageswithprop-prophidden-binary": "duuma trajta valoro kaŝita ($1)",
        "doubleredirects": "Duoblaj alidirektadoj",
        "doubleredirectstext": "Ĉi tiu paĝo montras paĝojn kiuj alidirektas al aliaj alidirektiloj.\nĈiu vico enhavas ligilojn ĉe la unua kaj dua alidirektadoj, kaj la unua linio de la dua alidirektado, kiu ĝenerale montras la \"veran\" celpaĝon, kiu celu la unuan alidirektadon.\n<del>Forstrekitaj</del> listeroj estis riparitaj.",
-       "double-redirect-fixed-move": "[[$1]] estis alinomita; ĝi nun alidirektas al [[$2]]",
+       "double-redirect-fixed-move": "[[$1]] estis alinomigita. Ĝi estis ĝisdatigita kaj nun ĝi alidirektas al [[$2]].",
        "double-redirect-fixed-maintenance": "Riparas duoblan alidirektilon de [[$1]] al [[$2]].",
        "double-redirect-fixer": "Alidirektila riparilo",
        "brokenredirects": "Rompitaj alidirektadoj",
        "wantedtemplates": "Dezirataj ŝablonoj",
        "mostlinked": "Plej ligitaj paĝoj",
        "mostlinkedcategories": "Plej ligitaj kategorioj",
-       "mostlinkedtemplates": "Plej ligitaj ŝablonoj",
+       "mostlinkedtemplates": "Plej transkludataj paĝoj",
        "mostcategories": "Artikoloj kun la plej multaj kategorioj",
        "mostimages": "Plej ligitaj bildoj",
        "mostinterwikis": "Artikoloj kun la plej multaj interlingvaj ligiloj",
        "log-title-wildcard": "Serĉi titolojn komencantajn kun ĉi tiu teksto",
        "showhideselectedlogentries": "Montri/kaŝi elektitajn protokolerojn",
        "allpages": "Ĉiuj paĝoj",
-       "alphaindexline": "$1 ĝis $2",
        "nextpage": "Sekvanta paĝo ($1)",
        "prevpage": "Antaŭa paĝo ($1)",
        "allpagesfrom": "Montri paĝojn ekde:",
        "unwatchthispage": "Malatenti paĝon",
        "notanarticle": "Ne estas artikolo",
        "notvisiblerev": "Versio estis forigita",
-       "watchlist-details": "{{PLURAL:$1|$1 paĝon|$1 paĝojn}} en via atentaro, krom diskutpaĝoj.",
+       "watchlist-details": "{{PLURAL:$1|$1 paĝo|$1 paĝoj}} en via atentaro, ne aparte kalkulante diskutpaĝojn.",
        "wlheader-enotif": "Retpoŝta sciigo estas ŝalta.",
        "wlheader-showupdated": "Paĝoj montriĝis per '''dikaj literoj''' kiuj estis ŝanĝitaj ekde vi laste vizitis.",
        "wlnote2": "Malsupre estas la ŝanĝoj en la {{PLURAL:$1|lasta horo|lastaj <strong>$1</strong> horoj}}, ekde $2, $3.",
        "contributions-title": "Kontribuoj de uzanto $1",
        "mycontris": "Kontribuoj",
        "contribsub2": "De {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Uzanto-konto \"$1\" ne estas registrita.",
        "nocontribs": "Trovis neniajn redaktojn laŭ tiu kriterio.",
        "uctop": " (aktuala)",
        "month": "Ekde monato (kaj pli frue):",
        "tooltip-summary": "Enigu mallongan resumon",
        "interlanguage-link-title": "$1 — $2",
        "common.css": "/* La jena CSS influos la aspekton de ĉiaj temoj. */",
-       "cologneblue.css": "/* La jena CSS influos la paĝaspekton por uzantoj de la Kolonja Blua temo. */",
        "monobook.css": "/* La jena CSS influos la paĝaspekton por uzantoj de la Libreja temo. */",
-       "modern.css": "/* La jena CSS influos la paĝaspekton por uzantoj de la Moderna temo. */",
        "vector.css": "/* La jena CSS influos la paĝaspekton por uzantoj de la Vektora temo. */",
        "print.css": "/* La jena CSS influos la prezentadon de la presaĵo. */",
        "noscript.css": "/* La jena CSS influos uzantojn, kiuj desebligis Ĝavaskripton. */",
        "group-sysop.css": "/* La jena CSS sole influos administrantojn. */",
        "group-bureaucrat.css": "/* La jena CSS sole influos burokratojn. */",
        "common.js": "/* La jena Ĝavaskripto ŝargiĝos por ĉiaj uzantoj ĉe ĉiu paĝoŝargado. */",
-       "cologneblue.js": "/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Kolonja Blua temo. */",
        "monobook.js": "/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Libreja temo. */",
-       "modern.js": "/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Moderna temo. */",
        "vector.js": "/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Vektora temo. */",
        "group-autoconfirmed.js": "/* La jena Ĝavaskripto sole ŝargiĝos por auxtokonfirmataj uzantoj. */",
        "group-bot.js": "/* La jena Ĝavaskripto sole ŝargiĝos por robotoj. */",
        "pageinfo-category-pages": "Nombro de paĝoj",
        "pageinfo-category-subcats": "Nombro de subkategorioj",
        "pageinfo-category-files": "Nombro de dosieroj",
-       "skinname-cologneblue": "Kolonja Bluo",
        "skinname-monobook": "Librejo",
-       "skinname-modern": "Moderno",
        "skinname-vector": "Vektoro",
        "markaspatrolleddiff": "Marki kiel patrolitan",
        "markaspatrolledtext": "Marki ĉi tiun paĝon kiel patrolitan",
        "watchlistedit-normal-title": "Redakti atentaron",
        "watchlistedit-normal-legend": "Forigi titolojn de atentaro",
        "watchlistedit-normal-explain": "Jen titoloj de via atentaro.\nForigi titolon, marku la skatoleto apude de ĝi, kaj klaku \"{{int:Watchlistedit-normal-submit}}\".\nVi ankaŭ povas [[Special:EditWatchlist/raw|redakti la krudan liston]].",
-       "watchlistedit-normal-submit": "Forigi Titolojn",
+       "watchlistedit-normal-submit": "Forigi titolojn",
        "watchlistedit-normal-done": "{{PLURAL:$1|1 titolo estis forigita|$1 titoloj estis forigitaj}} de via atentaro:",
        "watchlistedit-raw-title": "Redakti krudan atentaron",
        "watchlistedit-raw-legend": "Redakti krudan atentaron",
        "watchlistedit-raw-done": "Via atentaro estas ĝisdatigita.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 titolo estis aldonita|$1 titoloj estis aldonitaj}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 titolo estis forigita|$1 titoloj estis forigitaj}}:",
+       "watchlistedit-clear-title": "Malplenigita atentaro",
+       "watchlistedit-clear-legend": "Malplenigi la atentaron",
+       "watchlistedit-clear-explain": "Ĉiuj el la titoloj estos forigitaj el via atentaro",
+       "watchlistedit-clear-titles": "Titoloj:",
+       "watchlistedit-clear-submit": "Malplenigi la atentaron (Tio estas definitiva!)",
+       "watchlistedit-clear-done": "Via atentaro estas malplenigita.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 titolo estis forigita|$1 titoloj estis forigitaj}}:",
+       "watchlistedit-too-many": "Estas tro da pagoj por montri ĉi tie.",
+       "watchlisttools-clear": "Malplenigi la atentaron",
        "watchlisttools-view": "Rigardi koncernajn ŝanĝojn",
        "watchlisttools-edit": "Rigardi kaj redakti atentaron",
        "watchlisttools-raw": "Redakti krudan atentaron",
        "htmlform-no": "Ne",
        "htmlform-yes": "Jes",
        "htmlform-chosen-placeholder": "Elektu opcion",
+       "htmlform-cloner-create": "Aldoni plian",
+       "htmlform-cloner-delete": "Forigi",
+       "htmlform-cloner-required": "Almenaŭ unu valoro estas nepra.",
        "sqlite-has-fts": "$1 kun tut-teksta subteno",
        "sqlite-no-fts": "$1 sen tut-teksta subteno",
        "logentry-delete-delete": "$1 forigis paĝon $3",
index 39346b0..7764be8 100644 (file)
                        "Chocolate con galleta",
                        "Csbotero",
                        "아라",
-                       "Mcervera"
+                       "Mcervera",
+                       "Wifidel",
+                       "Macofe"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
        "tog-hidepatrolled": "Ocultar las ediciones patrulladas en los cambios recientes",
        "tog-newpageshidepatrolled": "Ocultar las páginas patrulladas de la lista de páginas nuevas",
        "tog-extendwatchlist": "Expandir la lista de seguimiento a todos los cambios, no sólo a los más recientes",
-       "tog-usenewrc": "Agrupar los cambios por página en los cambios recientes y en la lista de seguimiento (requiere JavaScript)",
+       "tog-usenewrc": "Agrupar los cambios por página en los cambios recientes y en la lista de seguimiento",
        "tog-numberheadings": "Numerar automáticamente los encabezados",
        "tog-showtoolbar": "Mostrar la barra de edición",
-       "tog-editondblclick": "Editar las páginas al pulsar dos veces en ellos con el ratón",
-       "tog-editsectiononrightclick": "Activar la edición de secciones pulsando el botón derecho en los títulos de secciones",
+       "tog-editondblclick": "Editar las páginas al hacer doble clic",
+       "tog-editsectiononrightclick": "Permitir modificar secciones al pulsar con el botón secundario del ratón en sus títulos",
        "tog-watchcreations": "Añadir las páginas que cree y los archivos que suba a mi lista de seguimento",
        "tog-watchdefault": "Añadir las páginas y archivos que edite a mi lista de seguimiento",
        "tog-watchmoves": "Añadir las páginas y archivos que mueva a mi lista de seguimiento",
        "tog-watchlisthideliu": "Ocultar las ediciones de los usuarios registrados en la lista de seguimiento",
        "tog-watchlisthideanons": "Ocultar las ediciones de los usuarios anónimos en la lista de seguimiento",
        "tog-watchlisthidepatrolled": "Ocultar las ediciones patrulladas en la lista de seguimiento",
-       "tog-ccmeonemails": "Recibir copias de los mensajes que envíe a otros usuarios",
-       "tog-diffonly": "No mostrar bajo las ''diferencias'' el contenido de la página",
-       "tog-showhiddencats": "Mostrar las categorías escondidas",
+       "tog-ccmeonemails": "Enviarme copias de los correos electrónicos que envíe a otros usuarios",
+       "tog-diffonly": "No mostrar el contenido de la página bajo las diferencias",
+       "tog-showhiddencats": "Mostrar las categorías ocultas",
        "tog-norollbackdiff": "Omitir la diferencia después de revertir",
-       "tog-useeditwarning": "Advertirme cuando abandone una página editada con cambios sin grabar",
+       "tog-useeditwarning": "Avisarme cuando abandone una página de edición con cambios sin guardar",
        "tog-prefershttps": "Utilizar una conexión segura siempre que haya iniciado una sesión",
        "underline-always": "Siempre",
        "underline-never": "Nunca",
        "category_header": "Páginas en la categoría «$1»",
        "subcategories": "Subcategorías",
        "category-media-header": "Archivos multimedia en la categoría «$1»",
-       "category-empty": "''La categoría no contiene ninguna página o archivo.''",
+       "category-empty": "<em>Esta categoría no contiene ninguna página o archivo.</em>",
        "hidden-categories": "{{PLURAL:$1|Categoría oculta|Categorías ocultas}}",
        "hidden-category-category": "Categorías ocultas",
        "category-subcat-count": "{{PLURAL:$2|Esta categoría solo contiene la siguiente subcategoría.|Esta categoría contiene {{PLURAL:$1|la siguiente subcategoría|las siguientes $1 subcategorías}}, de un total de $2.}}",
        "qbedit": "Editar",
        "qbpageoptions": "Opciones de página",
        "qbmyoptions": "Mis páginas",
-       "faq": "Preguntas más frecuentes",
+       "faq": "Preguntas frecuentes",
        "faqpage": "Project:P+F",
        "vector-action-addsection": "Nueva sección",
        "vector-action-delete": "Borrar",
        "vector-view-view": "Leer",
        "vector-view-viewsource": "Ver código",
        "actions": "Acciones",
+       "vector-more-actions": "Más",
        "namespaces": "Espacios de nombres",
        "variants": "Variantes",
        "navigation-heading": "Menú de navegación",
        "policy-url": "Project:Políticas",
        "portal": "Portal de la comunidad",
        "portal-url": "Project:Portal de la comunidad",
-       "privacy": "Política de protección de datos",
-       "privacypage": "Project:Política de protección de datos",
+       "privacy": "Política de privacidad",
+       "privacypage": "Project:Política de privacidad",
        "badaccess": "Error de permisos",
        "badaccess-group0": "No estás autorizado a ejecutar la acción solicitada.",
        "badaccess-groups": "La acción que has solicitado está restringida a los usuarios {{PLURAL:$2|del grupo|de uno de estos $2 grupos}}: $1.",
        "ns-specialprotected": "No se pueden editar las páginas especiales.",
        "titleprotected": "Esta página ha sido protegida contra creación por [[User:$1|$1]].\nEl motivo dado fue: \"''$2''\".",
        "filereadonlyerror": "No se puede modificar el archivo \"$1\" porque el repositorio de archivos \"$2\" está en modo de sólo lectura.\nEl administrador que lo ha bloqueado ofrece esta explicación: \"$3\".",
-       "invalidtitle-knownnamespace": "Título no válido con el espacio de nombres \"$2\" y el texto \"$3\"",
-       "invalidtitle-unknownnamespace": "Título no válido con número de espacio de nombres desconocido  $1  y el texto \"$2\"",
+       "invalidtitle-knownnamespace": "El título con el espacio de nombres «$2» y el texto «$3» no es válido",
+       "invalidtitle-unknownnamespace": "El título con el espacio de nombres desconocido (n.º $1) y el texto «$2» no es válido",
        "exception-nologin": "No has iniciado sesión",
        "exception-nologin-text": "[[Special:Userlogin|Inicia sesión]] para acceder a esta página o acción.",
        "exception-nologin-text-manual": "Necesitas $1 para acceder a esta página o acción.",
        "yourdomainname": "Tu dominio:",
        "password-change-forbidden": "No puedes cambiar las contraseñas de este wiki.",
        "externaldberror": "Hubo un error de autenticación externa de la base de datos o bien no tienes autorización para actualizar tu cuenta externa.",
-       "login": "Acceder",
+       "login": "Iniciar sesión",
        "nav-login-createaccount": "Acceder/crear cuenta",
        "loginprompt": "Hay que activar las ''cookies'' en el navegador para iniciar sesión en {{SITENAME}}.",
        "userlogin": "Acceder/crear cuenta",
        "createacct-emailrequired": "Dirección de correo electrónico",
        "createacct-emailoptional": "Dirección de correo electrónico (opcional)",
        "createacct-email-ph": "Escribe tu dirección de correo electrónico",
-       "createacct-another-email-ph": "Introduzca la dirección de correo electrónico",
+       "createacct-another-email-ph": "Escribe la dirección de correo electrónico",
        "createaccountmail": "Utilizar una contraseña aleatoria temporal y enviarla a la dirección de correo electrónico especificada",
        "createacct-realname": "Nombre real (opcional)",
        "createaccountreason": "Motivo:",
        "nocookieslogin": "{{SITENAME}} utiliza <em>cookies</em> para la autenticación de usuarios. Las <em>cookies</em> están desactivadas en tu navegador. Por favor, actívalas e inténtalo de nuevo.",
        "nocookiesfornew": "No se pudo crear la cuenta de usuario, porque no pudimos confirmar su origen.\nAsegúrate de que tienes las cookies activadas, luego recarga esta página e inténtalo de nuevo.",
        "noname": "No se ha especificado un nombre de usuario válido.",
-       "loginsuccesstitle": "Inicio de sesión exitoso",
-       "loginsuccess": "'''Has iniciado sesión en {{SITENAME}} como «$1».'''",
+       "loginsuccesstitle": "Ya iniciaste sesión",
+       "loginsuccess": "<strong>Has accedido a {{SITENAME}} como «$1».</strong>",
        "nosuchuser": "No existe ningún usuario llamado «$1».\nLos nombres de usuario son sensibles a las mayúsculas.\nRevisa la ortografía, o [[Special:UserLogin/signup|crea una cuenta nueva]].",
        "nosuchusershort": "No hay un usuario con el nombre «$1». Comprueba que lo has escrito correctamente.",
        "nouserspecified": "Debes especificar un nombre de usuario.",
-       "login-userblocked": "Este usuario está bloqueado. Inicio de sesión no permitido.",
+       "login-userblocked": "No puedes iniciar sesión porque tu cuenta está bloqueada.",
        "wrongpassword": "La contraseña indicada es incorrecta.\nInténtalo de nuevo.",
        "wrongpasswordempty": "No has escrito una contraseña.\nInténtalo de nuevo.",
        "passwordtooshort": "Las contraseñas deben tener al menos {{PLURAL:$1|1 carácter|$1 caracteres}}.",
        "session_fail_preview_html": "'''Lo sentimos, no hemos podido procesar tu cambio debido a una pérdida de datos de sesión.'''\n\n''Puesto que este wiki tiene el HTML puro habilitado, la visión preliminar está oculta para prevenirse contra ataques en JavaScript.''\n\n'''Si éste es un intento legítimo de modificación, por favor, inténtalo de nuevo. Si aún así no funcionase, [[Special:UserLogout|cierra la sesión]] e ingresa de nuevo.'''",
        "token_suffix_mismatch": "'''Tu edición ha sido rechazada porque tu cliente ha mezclado los signos de puntuación en el token de edición.\nSe rechazó la edición para evitar que el texto de la página se corrompa.\nEsto sucede en ocasiones cuando se usa un servicio de proxy anónimo defectuoso.'''",
        "edit_form_incomplete": "'''Algunas partes del formulario de edición no llegaron al servidor, comprueba que tus ediciones están intactas e inténtalo de nuevo'''.",
-       "editing": "Editar $1",
+       "editing": "Edición de «$1»",
        "creating": "Crear la página $1",
        "editingsection": "Editar $1 (sección)",
-       "editingcomment": "Editar $1 (sección nueva)",
+       "editingcomment": "Edición de «$1» (sección nueva)",
        "editconflict": "Conflicto de edición: $1",
        "explainconflict": "Alguien más ha cambiado esta página desde que empezaste a editarla.\nEl área de texto superior contiene el texto de la página como existe actualmente.\nTus cambios se muestran en el área de texto inferior.\nSi quieres grabar tus cambios, has de trasladarlos al área superior.\n'''Sólo''' el texto en el área de texto superior será grabado cuando pulses «{{int:savearticle}}».",
        "yourtext": "Tu texto",
        "edit-hook-aborted": "Edición cancelada por la extensión.\nNo se aportaron explicaciones.",
        "edit-gone-missing": "No se pudo actualizar la página.\nParece que ha sido borrada.",
        "edit-conflict": "Conflicto de edición.",
-       "edit-no-change": "Se ignoró tu revisión, porque no se hizo ningún cambio al texto.",
+       "edit-no-change": "Se ignoró tu edición porque no se hizo ningún cambio en el texto.",
        "postedit-confirmation-created": "Se ha creado la página.",
        "postedit-confirmation-restored": "Se ha restaurado la página.",
        "postedit-confirmation-saved": "Se ha guardado tu edición.",
        "currentrev": "Revisión actual",
        "currentrev-asof": "Última revisión de $1",
        "revisionasof": "Revisión de $1",
-       "revision-info": "Revisión a fecha de $1; $2",
+       "revision-info": "Revisión de $1 por {{GENDER:$6|$2}}$7",
        "previousrevision": "← Revisión anterior",
        "nextrevision": "Revisión siguiente →",
        "currentrevisionlink": "Revisión actual",
        "showhideselectedversions": "Mostrar/ocultar versiones seleccionadas",
        "editundo": "deshacer",
        "diff-empty": "(Sin diferencias)",
-       "diff-multi-sameuser": "({{PLURAL:$1|Una revisión intermedia|$1 revisiones intermedias}} por el mismo usuario no mostrado)",
+       "diff-multi-sameuser": "(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} del mismo usuario)",
        "diff-multi-otherusers": "(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} de {{PLURAL:$2|un usuario|$2 usuarios}})",
        "diff-multi-manyusers": "(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} de {{PLURAL:$2|un usuario|$2 usuarios}})",
        "difference-missing-revision": "No {{PLURAL:$2|se ha encontrado|se han encontrado}} {{PLURAL:$2|una revisión|$2 revisiones}} de esta diferencia ($1).\n\nEsto suele deberse a seguir un enlace obsoleto hacia una página que ya ha sido borrada.\nLos detalles pueden encontrarse en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrado].",
        "searchmenu-exists": "'''Hay una página llamada «[[:$1]]» en este wiki.'''",
        "searchmenu-new": "<strong>Crear la página «[[:$1]]» en este wiki.</strong> {{PLURAL:$2|0=|Véase también la página encontrada con la búsqueda.|Véanse también los resultados de la búsqueda.}}",
        "searchprofile-articles": "Páginas de contenido",
-       "searchprofile-project": "Páginas de ayuda y de proyecto",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Todo",
        "searchprofile-advanced": "Avanzado",
        "searchprofile-articles-tooltip": "Buscar en $1",
-       "searchprofile-project-tooltip": "Buscar en $1",
        "searchprofile-images-tooltip": "Buscar archivos",
        "searchprofile-everything-tooltip": "Buscar en todo el contenido (incluyendo páginas de discusión)",
        "searchprofile-advanced-tooltip": "Buscar en espacios de nombres personalizados",
        "search-interwiki-default": "Resultados de $1:",
        "search-interwiki-more": "(más)",
        "search-relatedarticle": "Relacionado",
-       "searcheverything-enable": "Buscar en todos los espacios de nombres",
        "searchrelated": "relacionado",
        "searchall": "todos",
        "showingresults": "Abajo se {{PLURAL:$1|muestra '''1''' resultado|muestran hasta '''$1''' resultados}} comenzando por el n.º '''$2'''.",
        "powersearch-togglelabel": "Seleccionar:",
        "powersearch-toggleall": "Todos",
        "powersearch-togglenone": "Ninguno",
+       "powersearch-remember": "Recordar la selección en búsquedas futuras",
        "search-external": "Búsqueda externa",
        "searchdisabled": "Las búsquedas en {{SITENAME}} están temporalmente desactivadas.\nMientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índices relativos a {{SITENAME}} pueden estar desactualizados.",
        "search-error": "Ha ocurrido un error al buscar: $1",
        "allowemail": "Aceptar correo electrónico de otros usuarios",
        "prefs-searchoptions": "Buscar",
        "prefs-namespaces": "Espacios de nombres",
-       "defaultns": "De lo contrario, buscar en estos espacios de nombres:",
        "default": "predeterminado",
        "prefs-files": "Archivos",
        "prefs-custom-css": "CSS personalizado",
        "prefs-advancedrendering": "Opciones avanzadas",
        "prefs-advancedsearchoptions": "Opciones avanzadas",
        "prefs-advancedwatchlist": "Opciones avanzadas",
-       "prefs-displayrc": "Opciones de mostrado",
+       "prefs-displayrc": "Opciones de visualización",
        "prefs-displaywatchlist": "Opciones de visualización",
        "prefs-tokenwatchlist": "Clave",
        "prefs-diffs": "Diferencias",
        "recentchanges-summary": "Sigue los cambios más recientes de la wiki en esta página.",
        "recentchanges-noresult": "No hubo cambios durante el período seleccionado que respondan a esos criterios.",
        "recentchanges-feed-description": "Realiza un seguimiento de los cambios más recientes en el wiki en este canal.",
-       "recentchanges-label-newpage": "Esta edición creó una nueva página",
+       "recentchanges-label-newpage": "Esta edición inició una página",
        "recentchanges-label-minor": "Esta es una edición menor",
        "recentchanges-label-bot": "Esta edición fue realizada por un robot",
        "recentchanges-label-unpatrolled": "Esta edición todavía no se ha patrullado",
        "recentchanges-label-plusminus": "El tamaño de la página cambió esta cantidad de bytes",
        "recentchanges-legend-heading": "'''Leyenda:'''",
-       "recentchanges-legend-newpage": "(véase también la [[Special:NewPages|lista de páginas nuevas]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (véase también la [[Special:NewPages|lista de páginas nuevas]])",
        "rcnotefrom": "A continuación se presentan los cambios desde <strong> $2 </strong> (hasta <strong> $1 </strong> se muestra).",
        "rclistfrom": "Mostrar nuevos cambios desde $2, $3",
        "rcshowhideminor": "$1 ediciones menores",
        "wantedtemplates": "Plantillas requeridas",
        "mostlinked": "Artículos más enlazados",
        "mostlinkedcategories": "Categorías más enlazadas",
-       "mostlinkedtemplates": "Plantillas más enlazadas",
+       "mostlinkedtemplates": "Páginas más transcluídas",
        "mostcategories": "Páginas con más categorías",
        "mostimages": "Imágenes más usadas",
        "mostinterwikis": "Páginas con más interwikis",
        "watchnologin": "No has iniciado sesión",
        "addwatch": "Añadir a la lista de seguimiento",
        "addedwatchtext": "La página «[[:$1]]» ha sido añadida a tu [[Special:Watchlist|lista de seguimiento]]. Los cambios futuros en esta página y en su página de discusión asociada se indicarán ahí.",
+       "addedwatchtext-short": "La página \"$1\" ha sido añadida a tu lista de seguimiento.",
        "removewatch": "Quitar de la lista de seguimiento",
        "removedwatchtext": "Se ha eliminado la página «[[:$1]]» de tu [[Special:Watchlist|lista de seguimiento]].",
+       "removedwatchtext-short": "La página \"$1\" ha sido eliminado de tu lista de seguimiento.",
        "watch": "Vigilar",
        "watchthispage": "Vigilar esta página",
        "unwatch": "Dejar de vigilar",
        "movepage-moved": "'''«$1» ha sido trasladado a «$2».'''",
        "movepage-moved-redirect": "Se ha creado una redirección.",
        "movepage-moved-noredirect": "Se ha suprimido la creación de la redirección.",
-       "articleexists": "Ya existe una página con ese nombre, o el nombre que has escogido no es válido.\nPor favor, elige otro nombre.",
+       "articleexists": "Ya existe una página con ese nombre o el nombre que elegiste no es válido.\nElige otro nombre.",
        "cantmove-titleprotected": "No puedes trasladar la página a esta ubicación, porque el nuevo título ha sido protegido para evitar su creación.",
        "movetalk": "Renombrar la página de discusión asociada",
        "move-subpages": "Intentar trasladar las subpáginas (hasta $1)",
        "tooltip-summary": "Introduce un breve resumen",
        "interlanguage-link-title": "$1 ($2)",
        "common.css": "/* El CSS colocado en esta página será aplicado a todas las apariencias */",
-       "cologneblue.css": "/* El CSS colocado en esta página afectará a los usuarios que usen la apariencia Cologne Blue */",
        "monobook.css": "/* El CSS colocado en esta página afectará a los usuarios que usen la apariencia \"MonoBook\" */",
-       "modern.css": "/* El CSS colocado en esta página afectará a los usuarios que usen la apariencia Moderna */",
        "vector.css": "/* El CSS colocado en esta página afectará a los usuarios que usen la apariencia \"Vector\" */",
        "print.css": "/* Los estilos CSS colocados aquí afectarán la impresión */",
        "noscript.css": "/* Los estilos CSS colocados aquí se aplicarán a los usuarios que hayan desactivado el JavaScript en su navegador */",
        "group-sysop.css": "/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios del grupo Administradores */",
        "group-bureaucrat.css": "/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios del grupo Burócratas */",
        "common.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios en cada carga de página */",
-       "cologneblue.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la piel Colonia azul */",
        "monobook.js": "/* El código JavaScript que se ponga aquí será cargado por los usuarios de la apariencia MonoBook */",
-       "modern.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la apariencia Moderna */",
        "vector.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la apariencia Vector */",
        "group-autoconfirmed.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios del grupo Usuarios autoconfirmados */",
        "group-bot.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios del grupo Bots */",
        "spam_blanking": "Todas las revisiones contienen enlaces a $1, blanqueando",
        "spam_deleting": "Todas las revisiones que contienen enlaces a $1, en proceso de eliminación",
        "simpleantispam-label": "Comprobación anti-spam\n¡NO rellenes esto!",
-       "pageinfo-title": "Información para «$1»",
+       "pageinfo-title": "Información de «$1»",
        "pageinfo-not-current": "Lo sentimos, no es posible mostrar esta información para las revisiones antiguas.",
        "pageinfo-header-basic": "Información básica",
        "pageinfo-header-edits": "Historial de ediciones",
        "pageinfo-header-restrictions": "Protección de página",
        "pageinfo-header-properties": "Propiedades de página",
-       "pageinfo-display-title": "Visualizar el título",
+       "pageinfo-display-title": "Título visualizado",
        "pageinfo-default-sort": "Criterio de ordenación predeterminado",
        "pageinfo-length": "Longitud de la página (en bytes)",
-       "pageinfo-article-id": "Identificador ID de la página",
+       "pageinfo-article-id": "Identificador de la página",
        "pageinfo-language": "Idioma de la página",
        "pageinfo-content-model": "Modelo de contenido de la página",
        "pageinfo-robot-policy": "Indización por robots",
        "pageinfo-category-pages": "Número de páginas",
        "pageinfo-category-subcats": "Número de subcategorías",
        "pageinfo-category-files": "Número de archivos",
-       "skinname-cologneblue": "Colonia azul",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderna",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "Marcar como revisado",
        "markaspatrolledtext": "Marcar este artículo como revisado",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Una página ha sido borrada|$1 páginas han sido borradas}}:",
        "watchlistedit-clear-title": "Lista de seguimiento limpiada",
        "watchlistedit-clear-legend": "Limpiar lista de seguimiento",
-       "watchlistedit-clear-explain": "Todos los títulos serán removidos de tu lista de seguimiento",
+       "watchlistedit-clear-explain": "Todos los títulos serán eliminados de tu lista de seguimiento",
        "watchlistedit-clear-titles": "Títulos:",
        "watchlistedit-clear-submit": "Vaciar la lista de seguimiento (¡permanente!)",
        "watchlistedit-clear-done": "Se ha vaciado tu lista de seguimiento.",
index 592287c..0408191 100644 (file)
        "vector-view-view": "Vaata",
        "vector-view-viewsource": "Vaata lähteteksti",
        "actions": "Toimingud",
+       "vector-more-actions": "Veel",
        "namespaces": "Nimeruumid",
        "variants": "Variandid",
        "navigation-heading": "Navigeerimismenüü",
        "edit-gone-missing": "Polnud võimalik lehekülge uuendada.\nTundub, et see on kustutatud.",
        "edit-conflict": "Redigeerimiskonflikt.",
        "edit-no-change": "Sinu redigeerimist ignoreeriti, sest tekstile ei olnud tehtud muudatusi.",
+       "postedit-confirmation-created": "See lehekülg on alustatud.",
+       "postedit-confirmation-restored": "See lehekülg on taastatud.",
        "postedit-confirmation-saved": "Sinu muudatus on salvestatud.",
        "edit-already-exists": "Ei saanud alustada uut lehekülge.\nSee on juba olemas.",
        "defaultmessagetext": "Sõnumi vaiketekst",
        "parser-template-recursion-depth-warning": "Malli rekursiivse kasutamise limiit on ületatud ($1)",
        "language-converter-depth-warning": "Keeleteisendaja sügavuspiir ületatud ($1)",
        "node-count-exceeded-category": "Ületatud sõlmemääraga leheküljed",
+       "node-count-exceeded-category-desc": "Ületatud sõlmemääraga lehekülgede kategooria.",
        "node-count-exceeded-warning": "Lehekülg ületas sõlmemäära.",
        "expansion-depth-exceeded-category": "Ületatud hõrendussügavusega leheküljed",
+       "expansion-depth-exceeded-category-desc": "Ületatud hõrendussügavusega lehekülgede kategooria.",
        "expansion-depth-exceeded-warning": "Lehekülg ületas hõrendussügavuse.",
        "converter-manual-rule-error": "Tõrge keelevariandi käsivahetusreeglis",
        "undo-success": "Selle redaktsiooni käigus tehtud muudatusi saab eemaldada. Palun kontrolli allolevat võrdlust veendumaks, et tahad need muudatused tõepoolest eemaldada. Seejärel saad lehekülje salvestada.",
        "currentrev": "Viimane redaktsioon",
        "currentrev-asof": "Viimane redaktsioon: $1",
        "revisionasof": "Redaktsioon: $1",
-       "revision-info": "Redaktsioon seisuga $1 kasutajalt $2",
+       "revision-info": "Redaktsioon seisuga $1 kasutajalt {{GENDER:$6|$2}}$7",
        "previousrevision": "←Vanem redaktsioon",
        "nextrevision": "Uuem redaktsioon→",
        "currentrevisionlink": "Viimane redaktsiooni",
        "searchmenu-exists": "'''Lehekülg pealkirjaga \"[[:$1]]\" on olemas.'''",
        "searchmenu-new": "<strong>Loo lehekülg pealkirjaga \"[[:$1]]\".</strong> {{PLURAL:$2|0=|Vaata ka leitud lehekülge.|Vaata ka leitud otsitulemusi.}}",
        "searchprofile-articles": "Sisuleheküljed",
-       "searchprofile-project": "Abi- ja projektilehed",
        "searchprofile-images": "Multimeedia",
        "searchprofile-everything": "Kõik",
        "searchprofile-advanced": "Täpsem otsing",
        "searchprofile-articles-tooltip": "Otsi nimeruumist $1",
-       "searchprofile-project-tooltip": "Otsi nimeruumidest $1",
        "searchprofile-images-tooltip": "Failiotsing",
        "searchprofile-everything-tooltip": "Otsi kogu sisust (k.a aruteluleheküljed)",
        "searchprofile-advanced-tooltip": "Otsi kohandatud nimeruumidest",
        "search-interwiki-default": "Tulemused asukohast $1:",
        "search-interwiki-more": "(veel)",
        "search-relatedarticle": "Seotud",
-       "searcheverything-enable": "Otsi kõigist nimeruumidest",
        "searchrelated": "seotud",
        "searchall": "kõik",
        "showingresults": "Allpool näidatakse '''{{PLURAL:$1|ühte|$1}}''' tulemust alates '''$2'''. tulemusest.",
        "powersearch-togglelabel": "Vali:",
        "powersearch-toggleall": "Kõik",
        "powersearch-togglenone": "Ei ühtegi",
+       "powersearch-remember": "Pea valik meeles",
        "search-external": "Välisotsing",
        "searchdisabled": "Otsimine on preagu keelatud.\nVahepeal saad otsimiseks Google'it kasutada.\nPane tähele, et Google'is talletatud {{GRAMMAR:genitive|{{SITENAME}}}} sisu võib olla iganenud.",
        "search-error": "Otsimise ajal ilmnes tõrge: $1",
        "allowemail": "Luba teistel kasutajatel mulle e-kirju saata",
        "prefs-searchoptions": "Otsimine",
        "prefs-namespaces": "Nimeruumid",
-       "defaultns": "Muul juhul otsi järgmistest nimeruumidest:",
        "default": "vaikeväärtus",
        "prefs-files": "Failid",
        "prefs-custom-css": "kohandatud CSS",
        "prefs-emailconfirm-label": "E-posti kinnitus:",
        "youremail": "E-posti aadress:",
        "username": "{{GENDER:$1|Kasutajanimi}}:",
-       "uid": "{{GENDER:$1|Kasutaja}} ID:",
        "prefs-memberingroups": "{{PLURAL:$1|Järgmise rühma|Järgmiste rühmade}} {{GENDER:$2|liige}}:",
        "prefs-registration": "Registreerumise aeg:",
        "yourrealname": "Tegelik nimi:",
        "right-move": "Teisaldada lehekülgi",
        "right-move-subpages": "Teisaldada lehekülgi koos nende alamlehtedega",
        "right-move-rootuserpages": "Teisaldada kasutajalehekülgi",
+       "right-move-categorypages": "Teisaldada kategoorialehekülgi",
        "right-movefile": "Teisaldada faile",
        "right-suppressredirect": "Teisaldada lehekülgi ümbersuunamist loomata",
        "right-upload": "Faile üles laadida",
        "action-createpage": "lehekülgi luua",
        "action-createtalk": "arutelulehekülgi luua",
        "action-createaccount": "seda kasutajakontot luua",
+       "action-history": "vaadata selle lehekülje ajalugu",
        "action-minoredit": "seda muudatust pisimuudatuseks märkida",
        "action-move": "seda lehekülge teisaldada",
        "action-move-subpages": "seda lehekülge koos alamlehekülgedega teisaldada",
        "action-move-rootuserpages": "teisaldada kasutajalehekülgi",
+       "action-move-categorypages": "teisaldada kategoorialehekülgi",
        "action-movefile": "seda faili teisaldada",
        "action-upload": "seda faili üles laadida",
        "action-reupload": "seda olemasolevat faili üle kirjutada",
        "recentchanges-label-bot": "Roboti tehtud muudatus",
        "recentchanges-label-unpatrolled": "Seda muudatust ei ole veel kontrollitud",
        "recentchanges-label-plusminus": "Lehekülje suuruse muutus baitides",
-       "recentchanges-legend-newpage": "(vaata ka [[Special:NewPages|uute lehekülgede loendit]])",
+       "recentchanges-legend-heading": "'''Seletus:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vaata ka [[Special:NewPages|uute lehekülgede loendit]])",
        "rcnotefrom": "Allpool on toodud muudatused alates: <strong>$2</strong> (näidatakse kuni <strong>$1</strong> muudatust)",
        "rclistfrom": "Näita muudatusi alates: $3, kell $2",
        "rcshowhideminor": "Pisiparandused ($1)",
        "wantedtemplates": "Kõige oodatumad mallid",
        "mostlinked": "Kõige viidatumad leheküljed",
        "mostlinkedcategories": "Kõige viidatumad kategooriad",
-       "mostlinkedtemplates": "Kõige viidatumad mallid",
+       "mostlinkedtemplates": "Kõige kasutatumad mallid",
        "mostcategories": "Enim kategoriseeritud leheküljed",
        "mostimages": "Kõige kasutatumad failid",
        "mostinterwikis": "Suurima keelelinkide arvuga leheküljed",
        "log-title-wildcard": "Selle tekstiga algavad pealkirjad",
        "showhideselectedlogentries": "Muuda valitud logisissekannete nähtavust",
        "allpages": "Kõik leheküljed",
-       "alphaindexline": "$1 kuni $2",
        "nextpage": "Järgmine lehekülg ($1)",
        "prevpage": "Eelmine lehekülg ($1)",
        "allpagesfrom": "Näita lehti alates pealkirjast:",
        "watchnologin": "Ei ole sisse logitud",
        "addwatch": "Lisa jälgimisloendisse",
        "addedwatchtext": "Lehekülg \"[[:$1]]\" on lisatud sinu [[Special:Watchlist|jälgimisloendisse]].\nEdasised muudatused sellel leheküljel ja seotud aruteluleheküljel tuuakse ära jälgimisloendis.",
+       "addedwatchtext-short": "Lehekülg \"$1\" on lisatud sinu jälgimisloendisse.",
        "removewatch": "Eemalda jälgimisloendist",
        "removedwatchtext": "Lehekülg \"[[:$1]]\" on [[Special:Watchlist|jälgimisloendist]] eemaldatud.",
+       "removedwatchtext-short": "Lehekülg \"$1\" on eemaldatud sinu jälgimisloendist.",
        "watch": "Jälgi",
        "watchthispage": "Jälgi seda lehekülge",
        "unwatch": "Lõpeta jälgimine",
        "movepagetalktext": "Koos artiklileheküljega teisaldatakse automaatselt ka arutelulehekülg, '''välja arvatud juhtudel, kui:'''\n*uue pealkirja all on juba arutelulehekülg, mis pole tühi;\n*jätad alloleva märkeruudu valimata.\n\nNeil juhtudel saad lehekülje soovi korral käsitsi teisaldada või liita.",
        "movearticle": "Teisalda lehekülg",
        "moveuserpage-warning": "'''Hoiatus:''' Oled teisaldamas kasutajalehekülge. Pane tähele, et teisaldatakse ainult lehekülg ja kasutajat '''ei''' nimetata ümber.",
+       "movecategorypage-warning": "<strong>Hoiatus:</strong> Oled teisaldamas kategoorialehekülge. Pane palun tähele, et teisaldatakse vaid see lehekülg ja ühtegi vanas kategoorias sisalduvat lehekülge <em>ei</em> kategoriseerita ümber uude kategooriasse.",
        "movenologintext": "Lehekülje teisaldamiseks pead registreeruma ja [[Special:UserLogin|sisse logima]].",
        "movenotallowed": "Sul ei ole lehekülgede teisaldamise õigust.",
        "movenotallowedfile": "Sul ei ole failide teisaldamise õigust.",
        "cant-move-user-page": "Sul ei ole õigust teisaldada kasutajalehti (erandiks on kasutajate alamlehed).",
        "cant-move-to-user-page": "Sul ei ole õigust teisaldada lehekülge kasutajaleheks (ei käi kasutaja alamlehe kohta).",
+       "cant-move-category-page": "Sul pole õigust kategoorialehekülgi teisaldada.",
+       "cant-move-to-category-page": "Sul pole õigust teisaldada lehekülge kategoorialeheküljele.",
        "newtitle": "Uue pealkirja alla:",
        "move-watch": "Jälgi lähte- ja sihtlehekülge",
        "movepagebtn": "Teisalda lehekülg",
        "tooltip-pt-mytalk": "Sinu arutelulehekülg",
        "tooltip-pt-anontalk": "Arutelu sellelt IP-aadressilt tehtud muudatuste kohta",
        "tooltip-pt-preferences": "Sinu eelistused",
-       "tooltip-pt-watchlist": "Lehekülgede loend, mille muudatusi jälgid",
+       "tooltip-pt-watchlist": "Loend lehekülgedest, mille muudatusi jälgid",
        "tooltip-pt-mycontris": "Sinu kaastööde loend",
        "tooltip-pt-login": "Me julgustame teid sisse logima, kuid see pole kohustuslik.",
        "tooltip-pt-logout": "Logi välja",
        "pageinfo-category-pages": "Lehekülgede arv",
        "pageinfo-category-subcats": "Alamkategooriate arv",
        "pageinfo-category-files": "Failide arv",
-       "skinname-cologneblue": "Kölni sinine",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Uudne",
        "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Märgi kontrollituks",
        "markaspatrolledtext": "Märgi see leht kontrollituks",
        "newimages-summary": "Sellel erilehel on viimati üles laaditud failid.",
        "newimages-legend": "Filter",
        "newimages-label": "Failinimi (või selle osa):",
+       "newimages-showbots": "Näita robotite üles laaditud faile",
        "noimages": "Uusi pilte ei ole.",
        "ilsubmit": "Otsi",
        "bydate": "kuupäeva järgi",
        "confirm-watch-top": "Kas lisad selle lehekülje oma jälgimisloendisse?",
        "confirm-unwatch-button": "Sobib",
        "confirm-unwatch-top": "Kas eemaldad selle lehekülje oma jälgimisloendist?",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← eelmine lehekülg",
        "imgmultipagenext": "järgmine lehekülg →",
        "imgmultigo": "Mine!",
        "watchlistedit-raw-done": "Sinu jälgimisloend on uuendatud.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 lehekülg|$1 lehekülge}} lisatud:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 pealkiri|$1 pealkirja}} eemaldati:",
+       "watchlistedit-clear-title": "Tühjendatud jälgimisloend",
+       "watchlistedit-clear-legend": "Jälgimisloendi tühjendamine",
+       "watchlistedit-clear-explain": "Sinu jälgimisloendist eemaldatakse kõik pealkirjad.",
+       "watchlistedit-clear-titles": "Pealkirjad:",
+       "watchlistedit-clear-submit": "Tühjenda jälgimisloend (jäädavalt!)",
+       "watchlistedit-clear-done": "Sinu jälgimisloend on tühjendatud.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Üks pealkiri|$1 pealkirja}} eemaldati:",
+       "watchlistedit-too-many": "Pealkirju on siin kuvamiseks liiga palju.",
+       "watchlisttools-clear": "Tühjenda jälgimisloend",
        "watchlisttools-view": "Näita vastavaid muudatusi",
        "watchlisttools-edit": "Vaata ja redigeeri jälgimisloendit",
        "watchlisttools-raw": "Muuda lähteteksti",
        "fileduplicatesearch-result-n": "Failil \"$1\" on {{PLURAL:$2|1 samane duplikaat|$2 samast duplikaati}}.",
        "fileduplicatesearch-noresults": "Faili nimega \"$1\" ei leidu.",
        "specialpages": "Erileheküljed",
+       "specialpages-note-top": "Seletus",
        "specialpages-note": "* Harilikud erileheküljed.\n* <span class=\"mw-specialpagerestricted\">Piiranguga erileheküljed.</span>",
        "specialpages-group-maintenance": "Hooldusaruanded",
        "specialpages-group-other": "Teised erileheküljed",
        "htmlform-float-invalid": "Määratud väärtus ei ole arvuline.",
        "htmlform-int-toolow": "Antud suurus on väiksem kui minimaalne $1",
        "htmlform-int-toohigh": "Antud suurus on suurem kui maksimaalne $1",
-       "htmlform-required": "See väärtus on nõutav",
+       "htmlform-required": "See väärtus on nõutav.",
        "htmlform-submit": "Saada",
        "htmlform-reset": "Tühista muudatused",
        "htmlform-selectorother-other": "Muu",
        "htmlform-no": "Ei",
        "htmlform-yes": "Jah",
        "htmlform-chosen-placeholder": "Vali säte",
+       "htmlform-cloner-create": "Lisa veel",
+       "htmlform-cloner-delete": "Eemalda",
+       "htmlform-cloner-required": "Vähemalt üks väärtus on nõutav.",
        "sqlite-has-fts": "$1 koos täistekstiotsingu toega",
        "sqlite-no-fts": "$1 ilma täistekstiotsingu toeta",
        "logentry-delete-delete": "$1 {{GENDER:$2|kustutas}} lehekülje $3",
index f45e95f..3455cc7 100644 (file)
        "token_suffix_mismatch": "'''Zure aldaketa ezeztatua izan da zure bezeroak puntuazio-karaktereak itxuragabetu dituelako.\nAldaketa ezeztatua izan da testuaren galtzea galarazteko.\nHau batzuetan gertatzen da buggyan oinarritutako web proxy zerbitzua erabiltzean.'''",
        "edit_form_incomplete": "'''Aldaketa formularioaren atal batzuk ez dira iritsi zerbitzarira; bi aldiz ziurtatu zure aldaketak osorik daudela eta berriro saiatu.'''",
        "editing": "«$1» aldatzen",
-       "creating": "$1 sortzen",
+       "creating": "«$1» sortzen",
        "editingsection": "«$1» aldatzen (atala)",
        "editingcomment": "«$1» aldatzen (atal berria)",
        "editconflict": "Aldaketa gatazka: $1",
        "revdelete-hide-user": "Egilearen erabiltzaile izena/IPa ezkutatu",
        "revdelete-hide-restricted": "Mugapen hauek administratzaileei zein besteei aplikatu",
        "revdelete-radio-same": "(ez aldatu)",
-       "revdelete-radio-set": "Izkutua",
+       "revdelete-radio-set": "Ezkutua",
        "revdelete-radio-unset": "Ikusgarria",
        "revdelete-suppress": "Administratzaileen eta bestelakoen datuak kendu",
        "revdelete-unsuppress": "Berrezarritako aldaketen mugak kendu",
        "searchmenu-exists": "'''«[[:$1]]» izena duen orri bat bada wiki honetan.''' {{PLURAL:$2|0=|Ikus, gainera, aurkitutako beste bilaketa emaitzak.}}",
        "searchmenu-new": "'''Sortu «[[:$1]]» orria wiki honetan!''' {{PLURAL:$2|0=|Ikus, gainera, zure bilaketarekin aurkitutako orria.|Ikus, gainera, bilaketaren emaitzak.}}",
        "searchprofile-articles": "Eduki-orriak",
-       "searchprofile-project": "Laguntza eta Proiektu-orriak",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Guztia",
        "searchprofile-advanced": "Aurreratua",
        "searchprofile-articles-tooltip": "$1(e)n bilatu",
-       "searchprofile-project-tooltip": "$1(e)n bilatu",
        "searchprofile-images-tooltip": "Fitxategiak bilatu",
        "searchprofile-everything-tooltip": "Bilatu eduki guztian (lankide orrialdeak barne)",
        "searchprofile-advanced-tooltip": "Lankideen izen zehatzetan bilatu",
        "search-interwiki-default": "$1(r)en emaitzak:",
        "search-interwiki-more": "(gehiago)",
        "search-relatedarticle": "Erlazionatua",
-       "searcheverything-enable": "Bilatu izen-tarte guztietan",
        "searchrelated": "erlazionatua",
        "searchall": "guztia",
        "showingresults": "Jarraian {{PLURAL:$1|emaitza '''1''' ikus daiteke|'''$1''' emaitza ikus daitezke}}, #'''$2'''.etik hasita.",
        "allowemail": "Beste erabiltzaileengandik e-posta mezuak jasotzea gaitu",
        "prefs-searchoptions": "Bilatu",
        "prefs-namespaces": "Izen-tarteak",
-       "defaultns": "Bestela izen-tarte hauetan bilatu:",
        "default": "lehenetsia",
        "prefs-files": "Fitxategiak",
        "prefs-custom-css": "CSS pertsonalizatua",
        "recentchanges-label-unpatrolled": "Aldaketa hau ez da oraindik patruilatua izan",
        "recentchanges-label-plusminus": "Orriaren neurriak byte kopuru honen gorabehera izan du",
        "recentchanges-legend-heading": "'''Azalpenak:'''",
-       "recentchanges-legend-newpage": "(ikus, gainera, [[Special:NewPages|orri berrien zerrenda]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ikus, gainera, [[Special:NewPages|orri berrien zerrenda]])",
        "rcnotefrom": "Jarraian azaltzen diren aldaketak data honetatik aurrerakoak dira: <b>$2</b> (gehienez <b>$1</b> erakusten dira).",
        "rclistfrom": "Erakutsi $3 $2 ondorengo aldaketa berriak",
        "rcshowhideminor": "$1 aldaketa txikiak",
        "pageinfo-category-pages": "Orrialde kopurua",
        "pageinfo-category-subcats": "Azpikategorien zenbakia",
        "pageinfo-category-files": "Fitxategi kopurua",
-       "skinname-cologneblue": "Cologne Blue",
-       "skinname-modern": "Modernoa",
        "markaspatrolleddiff": "Patruilatutzat markatu",
        "markaspatrolledtext": "Artikulu hau patruilatutzat markatu",
        "markedaspatrolled": "Patruilatutzat markatu da",
index 7758039..40bfabc 100644 (file)
@@ -58,7 +58,7 @@
        "tog-enotifusertalkpages": "هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من نامه‌ای فرستاده شود",
        "tog-enotifminoredits": "برای تغییرات جزئی در صفحه‌ها و پرونده‌ها هم به من نامه‌ای فرستاده شود",
        "tog-enotifrevealaddr": "نشانی رایانامهٔ من در رایانامه‌های اطلاع‌رسانی نمایش یابد",
-       "tog-shownumberswatching": "شمار کاربران پی‌گیری‌کننده نمایش یابد",
+       "tog-shownumberswatching": "شمار کاربران پی‌گیرندهٔ نمایش یابد",
        "tog-oldsig": "امضای کنونی:",
        "tog-fancysig": "امضا به صورت ویکی‌متن در نظر گرفته شود (بدون درج خودکار پیوند)",
        "tog-uselivepreview": "استفاده از پیش‌نمایش زنده (نیازمند جاوااسکریپت) (آزمایشی)",
        "vector-view-view": "خواندن",
        "vector-view-viewsource": "نمایش مبدأ",
        "actions": "عملکردها",
+       "vector-more-actions": "بیشتر",
        "namespaces": "فضاهای نام",
        "variants": "گویش‌ها",
        "navigation-heading": "منوی ناوبری",
        "currentrev": "نسخهٔ فعلی",
        "currentrev-asof": "نسخهٔ کنونی تا $1",
        "revisionasof": "نسخهٔ $1",
-       "revision-info": "نسخهٔ تاریخ $1 توسط $2",
+       "revision-info": "نسخهٔ تاریخ $1 توسط {{GENDER:$6|$2}}$7",
        "previousrevision": "→ نسخهٔ قدیمی‌تر",
        "nextrevision": "نسخهٔ جدیدتر ←",
        "currentrevisionlink": "نمایش نسخهٔ فعلی",
        "mergehistory-comment": "[[:$1]] را در [[:$2]] ادغام کرد: $3",
        "mergehistory-same-destination": "صفحهٔ مبدأ و مقصد نمی‌تواند یکی باشد",
        "mergehistory-reason": "دلیل:",
-       "mergelog": "سیاهه ادغام",
+       "mergelog": "سیاههٔ ادغام",
        "pagemerge-logentry": "[[$1]] در [[$2]] ادغام شد (نسخه‌های تا $3)",
        "revertmerge": "واگردانی ادغام",
-       "mergelogpagetext": "در زیر سیاهه آخرین موارد ادغام تاریخچه یک صفحه در صفحه‌ای دیگر را می‌بینید.",
+       "mergelogpagetext": "در زیر سیاههٔ آخرین موارد ادغام تاریخچهٔ یک صفحه در صفحه‌ای دیگر را می‌بینید.",
        "history-title": "$1: تاریخچهٔ ویرایش‌ها",
        "difference-title": "$1: تفاوت بین نسخه‌ها",
        "difference-title-multipage": "$1 و $2: تفاوت بین صفحه‌ها",
        "searchmenu-exists": "'''صفحه‌ای با عنوان «[[:$1]]» در این ویکی وجود دارد.'''",
        "searchmenu-new": "<strong>ایجاد صفحهٔ «[[:$1]]» در این ویکی!</strong> {{PLURAL:$2|0=|همچنین مشاهدهٔ صفحهٔ پیدا شده با جستجوی شما.|همچنین مشاهدهٔ جستجوی نتایج پیدا شده.}}",
        "searchprofile-articles": "صفحه‌های محتوایی",
-       "searchprofile-project": "صفحه‌های راهنما و پروژه",
        "searchprofile-images": "چندرسانه‌ای",
        "searchprofile-everything": "همه‌چیز",
        "searchprofile-advanced": "پیشرفته",
        "searchprofile-articles-tooltip": "جستجو در $1",
-       "searchprofile-project-tooltip": "جستجو در $1",
        "searchprofile-images-tooltip": "جستجو برای پرونده‌ها",
        "searchprofile-everything-tooltip": "جستجوی تمام محتوا (شامل صفحه‌های بحث)",
        "searchprofile-advanced-tooltip": "جستجو در فضاهای نام دلخواه",
        "search-interwiki-default": "نتایج از $1 :",
        "search-interwiki-more": "(بیشتر)",
        "search-relatedarticle": "مرتبط",
-       "searcheverything-enable": "جستجو در تمام فضاهای نام",
        "searchrelated": "مرتبط",
        "searchall": "همه",
        "showingresults": "نمایش حداکثر {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} در پایین، آغاز از شماره '''$2'''.",
        "powersearch-togglelabel": "بررسی:",
        "powersearch-toggleall": "همه",
        "powersearch-togglenone": "هیچ‌کدام",
+       "powersearch-remember": "انتخاب را برای جستجوهای بعدی به خاطر داشته‌باش",
        "search-external": "جستجوی خارجی",
        "searchdisabled": "جستجو در {{SITENAME}} فعال نیست.\nموقتاً می‌توانید از جستجوی Google استفاده کنید.\nتوجه کنید که نتایج حاصل از جستجو با آن روش ممکن است به‌روز نباشند.",
        "search-error": "خطایی هنگام جست‌وجو رخ داده است: $1",
        "allowemail": "امکان دریافت رایانامه از دیگر کاربران",
        "prefs-searchoptions": "جستجو",
        "prefs-namespaces": "فضاهای نام",
-       "defaultns": "در غیر این صورت جستجو در این فضاهای نام:",
        "default": "پیش‌فرض",
        "prefs-files": "پرونده‌ها",
        "prefs-custom-css": "سی‌اس‌اس شخصی",
        "right-import": "واردکردن صفحه از ویکی‌های دیگر",
        "right-importupload": "واردکردن صفحه از طریق بارگذاری پرونده",
        "right-patrol": "گشت زدن به ویرایش‌های دیگران",
-       "right-autopatrol": "گشن زدن خودکار به ویرایش‌های خودش",
+       "right-autopatrol": "گشت زدن خودکار ویرایش‌های خودش",
        "right-patrolmarks": "مشاهدهٔ برچسب گشت تغییرات اخیر",
        "right-unwatchedpages": "مشاهدهٔ فهرست صفحه‌هایی که پی‌گیری نمی‌شوند",
        "right-mergehistory": "ادغام تاریخچهٔ صفحه‌ها",
        "recentchanges-label-unpatrolled": "این ویرایش هنوز گشت‌زنی نشده‌است",
        "recentchanges-label-plusminus": "حجم صفحه به اندازه این بایت‌ها تغییر یافته‌است",
        "recentchanges-legend-heading": "'''اختصارها:'''",
-       "recentchanges-legend-newpage": "(همچنین به [[Special:NewPages|فهرست صفحات جدید]] نگاه کنید)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچنین به [[Special:NewPages|فهرست صفحات جدید]] نگاه کنید)",
        "recentchanges-legend-plusminus": "('' ±۱۲۳'')",
        "rcnotefrom": "در زیر تغییرات از <strong>$2</strong> (تا <strong>$1</strong> نشان داده شده‌است).",
        "rclistfrom": "نمایش تغییرات جدید با شروع از $3 $2",
        "minoreditletter": "جز",
        "newpageletter": "نو",
        "boteditletter": "ر",
-       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|کاربر|کاربر}} پی‌گیری‌کننده]",
+       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|کاربر}} پی‌گیرنده]",
        "rc_categories": "محدود به این رده‌ها (رده‌ها را با «|» جدا کنید)",
        "rc_categories_any": "هر کدام",
        "rc-change-size-new": "$1 {{PLURAL:$1|بایت}} پس از تغییر",
        "watchnologin": "به سامانه وارد نشده‌اید",
        "addwatch": "افزودن به فهرست پی‌گیری",
        "addedwatchtext": "صفحهٔ «[[:$1]]» به [[Special:Watchlist|فهرست پی‌گیری‌های]] شما اضافه شد.\nتغییرات این صفحه و صفحهٔ بحث متناظرش در آینده در اینجا فهرست خواهد شد.",
+       "addedwatchtext-short": "صفحه \" $1 \" به فهرست پیگیریهای خود اضافه شده است.",
        "removewatch": "حذف از فهرست پی‌گیری",
        "removedwatchtext": "صفحهٔ «[[:$1]]» از [[Special:Watchlist|فهرست پی‌گیری‌های شما]] برداشته شد.",
+       "removedwatchtext-short": "صفحهٔ \"$1\" از فهرست پیگیری‌های شما حذف شده‌است.",
        "watch": "پی‌گیری",
        "watchthispage": "پی‌گیری این صفحه",
        "unwatch": "توقف پی‌گیری",
        "pageinfo-category-pages": "تعداد صفحه‌ها",
        "pageinfo-category-subcats": "تعداد زیررده‌ها",
        "pageinfo-category-files": "تعداد پرونده‌ها",
-       "skinname-cologneblue": "آبی کلن",
        "skinname-monobook": "مونوبوک",
-       "skinname-modern": "مدرن",
        "skinname-vector": "برداری",
        "markaspatrolleddiff": "برچسب گشت بزن",
        "markaspatrolledtext": "به این صفحه برچسب گشت بزن",
        "markedaspatrollederrornotify": "زدن برچسب گشت، ناموفق بود.",
        "patrol-log-page": "سیاههٔ گشت",
        "patrol-log-header": "این سیاهه‌ای از ویرایش‌های گشت‌خورده است.",
-       "log-show-hide-patrol": "سیاههٔ گشت‌زنی $1",
+       "log-show-hide-patrol": "$1 سیاههٔ گشت‌زنی",
        "deletedrevision": "$1 نسخهٔ حذف شدهٔ قدیمی",
        "filedeleteerror-short": "خطا در حذف پرونده: $1",
        "filedeleteerror-long": "در زمان حذف پرونده خطا رخ داد:\n\n$1",
index 2e17de7..a4b0188 100644 (file)
        "vector-view-view": "Lue",
        "vector-view-viewsource": "Näytä lähdekoodi",
        "actions": "Toiminnot",
+       "vector-more-actions": "Muut",
        "namespaces": "Nimiavaruudet",
        "variants": "Kirjoitusjärjestelmät",
        "navigation-heading": "Navigointivalikko",
        "changeemail-oldemail": "Nykyinen sähköpostiosoite:",
        "changeemail-newemail": "Uusi sähköpostiosoite:",
        "changeemail-none": "(ei asetettu)",
-       "changeemail-password": "Salasanasi sivustolla {{SITENAME}}",
+       "changeemail-password": "{{SITENAME}}-salasanasi:",
        "changeemail-submit": "Muuta sähköpostiosoite",
        "changeemail-cancel": "Peruuta",
        "changeemail-throttled": "Olet tehnyt liian monta kirjautumisyritystä.\nOdota $1 ennen kuin yrität uudelleen.",
        "currentrev": "Nykyinen versio",
        "currentrev-asof": "Nykyinen versio $1",
        "revisionasof": "Versio $1",
-       "revision-info": "Versio hetkellä $1 – tehnyt $2",
+       "revision-info": "Versio hetkellä $1 – tehnyt {{GENDER:$6|$2}}$7",
        "previousrevision": "← Vanhempi versio",
        "nextrevision": "Uudempi versio →",
        "currentrevisionlink": "Nykyinen versio",
        "searchmenu-exists": "'''Tässä wikissä on sivu nimellä [[:$1]].'''",
        "searchmenu-new": "<strong>Luo sivu \"[[:$1]]\" tähän wikiin.</strong> {{PLURAL:$2|0=|Katso myös sivua, joka löytyi hakutoiminnolla.\n|Katso myös hakutuloksia.}}",
        "searchprofile-articles": "Sisältösivut",
-       "searchprofile-project": "Ohje- ja projektisivut",
        "searchprofile-images": "Kuvat ja tiedostot",
        "searchprofile-everything": "Kaikki",
        "searchprofile-advanced": "Laajennettu",
        "searchprofile-articles-tooltip": "Hae nimiavaruuksista $1",
-       "searchprofile-project-tooltip": "Hae nimiavaruuksista $1",
        "searchprofile-images-tooltip": "Etsi tiedostoja",
        "searchprofile-everything-tooltip": "Etsi kaikkialta (myös keskustelusivut)",
        "searchprofile-advanced-tooltip": "Etsi määritellyistä nimiavaruuksista",
        "search-interwiki-default": "Tulokset osoitteesta $1:",
        "search-interwiki-more": "(lisää)",
        "search-relatedarticle": "Hae samankaltaisia sivuja",
-       "searcheverything-enable": "Hae kaikista nimiavaruuksista",
        "searchrelated": "samankaltainen",
        "searchall": "kaikki",
        "showingresults": "Alla on vain {{PLURAL:$1|<strong>1</strong> hakutulos|<strong>$1</strong> hakutulosta}} alkaen tuloksesta nro <strong>$2</strong>.",
        "powersearch-togglelabel": "Muuta valintaa",
        "powersearch-toggleall": "Valitse kaikki",
        "powersearch-togglenone": "Ei mitään",
+       "powersearch-remember": "Muista valinta tulevia hakuja varten",
        "search-external": "Ulkoinen haku",
        "searchdisabled": "Tekstihaku on poistettu toistaiseksi käytöstä suuren kuorman vuoksi. Voit käyttää alla olevaa Googlen hakukenttää sivujen etsimiseen, kunnes haku tulee taas käyttöön. <small>Huomaa, että ulkopuoliset kopiot {{GRAMMAR:genitive|{{SITENAME}}}} sisällöstä eivät välttämättä ole ajan tasalla.</small>",
        "search-error": "Virhe ilmaantui haettaessa: $1",
        "allowemail": "Salli sähköpostin lähetys osoitteeseen",
        "prefs-searchoptions": "Haku",
        "prefs-namespaces": "Nimiavaruudet",
-       "defaultns": "Muussa tapauksessa hae näistä nimiavaruuksista:",
        "default": "oletus",
        "prefs-files": "Tiedostot",
        "prefs-custom-css": "Käyttäjäkohtainen CSS-tyylisivu",
        "recentchanges-label-unpatrolled": "Tätä muutosta ei ole vielä tarkastettu",
        "recentchanges-label-plusminus": "Sivun koon muutos tavuina",
        "recentchanges-legend-heading": "'''Selitys:'''",
-       "recentchanges-legend-newpage": "(katso myös [[Special:NewPages|lista uusista sivuista]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (katso myös [[Special:NewPages|lista uusista sivuista]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Alla ovat muutokset <strong>$2</strong> lähtien. (Enintään <strong>$1</strong> näytetään.)",
        "rclistfrom": "Näytä uudet muutokset $3 $2 alkaen",
        "upload_directory_missing": "Tallennushakemisto $1 puuttuu, eikä palvelin pysty luomaan sitä.",
        "upload_directory_read_only": "Palvelimella ei ole kirjoitusoikeuksia tallennushakemistoon $1.",
        "uploaderror": "Tallennusvirhe",
-       "upload-recreate-warning": "'''Varoitus: Tiedosto tällä nimellä on poistettu tai siirretty.'''\n\nPoisto- ja siirtoloki tälle sivulle näkyy alla:",
-       "uploadtext": "Voit tallentaa tiedostoja alla olevalla lomakkeella. [[Special:FileList|Tiedostoluettelo]] sisältää listan tallennetuista tiedostoista. Tallennukset kirjataan myös [[Special:Log/upload|tallennuslokiin]], ja poistot [[Special:Log/delete|poistolokiin]].\n\nVoit käyttää tiedostoja wikisivuilla seuraavilla tavoilla:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tiedosto.jpg]]</nowiki></code>''', käyttääksesi tiedoston täyttä versiota.\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tiedosto.png|200px|thumb|left|Kuvausteksti]]</nowiki></code>''', käyttääksesi tiedostoa sovitettuna 200 kuvapistettä leveään laatikkoon kuvaustekstillä.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Tiedosto.ogg]]</nowiki></code>''', jos haluat suoran linkin tiedostoon.",
+       "upload-recreate-warning": "<strong>Varoitus: Tiedosto tällä nimellä on poistettu tai siirretty.</strong>\n\nPoisto- ja siirtoloki tälle sivulle näkyy alla:",
+       "uploadtext": "Käytä tätä alla olevaa lomaketta tiedostojen tallentamiseen.\nVoit katsella luetteloa aiemmin tallennetuista tiedostoista sivulla [[Special:FileList|tiedostoluettelo]]. Kaikki tallennukset kirjataan myös [[Special:Log/upload|tallennuslokiin]] ja tiedostojen poistot [[Special:Log/delete|poistolokiin]].\n\nJotta saat tiedoston näkymään sivulla, käytä jotakin seuraavista muotoiluista linkkinä siihen:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tiedosto.jpg]]</nowiki></code></strong> käyttääksesi tiedoston kokonaista versiota.\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tiedosto.png|200px|thumb|left|teksti tähän]]</nowiki></code></strong> käyttääksesi tiedostoa sovitettuna 200 kuvapistettä leveään laatikkoon kuvatekstillä \"teksti tähän\".\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Tiedosto.ogg]]</nowiki></code></strong>, jos haluat suoran linkin tiedostoon ilman että tiedostoa näytetään.",
        "upload-permitted": "Sallitut tiedostomuodot: $1.",
        "upload-preferred": "Suositellut tiedostomuodot: $1.",
        "upload-prohibited": "Kielletyt tiedostomuodot: $1.",
        "uploadlogpagetext": "Alla on luettelo uusimmista tiedostonlisäyksistä. Kaikki ajat näytetään palvelimen aikavyöhykkeessä.",
        "filename": "Tiedoston nimi:",
        "filedesc": "Yhteenveto",
-       "fileuploadsummary": "Yhteenveto",
-       "filereuploadsummary": "Muutokset",
+       "fileuploadsummary": "Yhteenveto:",
+       "filereuploadsummary": "Muutokset tiedostoon:",
        "filestatus": "Tiedoston tekijänoikeudet",
        "filesource": "Lähde",
        "ignorewarning": "Tallenna tiedosto varoituksesta huolimatta.",
        "largefileserver": "Tämä tiedosto on suurempi kuin mitä palvelin sallii.",
        "emptyfile": "Tiedosto, jota yritit lähettää, näyttää olevan tyhjä. Tarkista, että kirjoitit polun ja nimen oikein ja että se ei ole liian suuri kohdepalvelimelle.",
        "windows-nonascii-filename": "Tämä wiki ei tue tiedostonimiä, joissa on erikoismerkkejä.",
-       "fileexists": "Samanniminen tiedosto on jo olemassa.\nKatso tiedoston sivu <strong>[[:$1]]</strong>, jos et ole varma, haluatko muuttaa sitä.\n[[$1|thumb]]",
+       "fileexists": "Samanniminen tiedosto on jo olemassa.\nTarkasta tiedosto <strong>[[:$1]]</strong>, mikäli et ole varma, että haluat tehdä muutoksia tiedostoon.\n[[$1|thumb]]",
        "filepageexists": "Kuvaussivu <strong>[[:$1]]</strong> on ho olemassa, mutta vastaavaa tiedostoa ei ole olemassa.\nKirjoittamasi yhteenveto ei ilmesty kuvaussivulle,\nellet lisää sitä muokkaamalla sivua manuaalisesti.\n[[$1|thumb]]",
        "fileexists-extension": "Tiedosto, jolla on samankaltainen nimi, on jo olemassa: [[$2|thumb]]\n* Tallennetun tiedoston nimi: <strong>[[:$1]]</strong>\n* Olemassa olevan tiedoston nimi: <strong>[[:$2]]</strong>\nValitse toinen tiedostonimi.",
        "fileexists-thumbnail-yes": "Tiedosto näyttäisi olevan pienennetty kuva ''(pienoiskuva)''. [[$1|thumb]]\nTarkista tiedosto <strong>[[:$1]]</strong>.\nJos yllä oleva tiedosto on alkuperäisversio samasta kuvasta, ei sille tarvitse tallentaa pienoiskuvaa.",
        "uploadvirus": "Tiedosto sisältää viruksen. Tarkemmat tiedot: $1",
        "uploadjava": "Tämä tiedosto on ZIP-tiedosto, joka sisältää Java .class-tiedoston.\nJava-tiedostojen tallentaminen ei ole sallittua, sillä ne saattavat aiheuttaa tietoturvariskejä.",
        "upload-source": "Lähdetiedosto",
-       "sourcefilename": "Lähdenimi",
+       "sourcefilename": "Lähdetiedoston nimi:",
        "sourceurl": "URL-lähde",
-       "destfilename": "Kohdenimi",
+       "destfilename": "Kohdetiedoston nimi:",
        "upload-maxfilesize": "Suurin sallittu tiedostokoko: $1",
        "upload-description": "Tiedoston kuvaus",
        "upload-options": "Tallennusasetukset",
        "filerevert-submit": "Suorita palauttaminen",
        "filerevert-success": "'''[[Media:$1|$1]]''' on palautettu takaisin [$4 versioon, joka luotiin $2 kello $3].",
        "filerevert-badversion": "Tiedostosta ei ole luotu versiota kyseisellä ajan hetkellä.",
-       "filedelete": "Tiedoston $1 poisto",
+       "filedelete": "Poistetaan tiedosto $1",
        "filedelete-legend": "Tiedoston poisto",
        "filedelete-intro": "Olet poistamassa tiedoston '''[[Media:$1|$1]]''' ja kaiken sen historian.",
        "filedelete-intro-old": "<span class=\"plainlinks\">Olet poistamassa tiedoston '''[[Media:$1|$1]]''' [$4 päivämäärällä $2 kello $3 luotua versiota].</span>",
        "wantedtemplates": "Halutut mallineet",
        "mostlinked": "Viitatuimmat sivut",
        "mostlinkedcategories": "Viitatuimmat luokat",
-       "mostlinkedtemplates": "Viitatuimmat mallineet",
+       "mostlinkedtemplates": "Eniten sisällytetyt sivut",
        "mostcategories": "Luokitelluimmat sivut",
        "mostimages": "Viitatuimmat tiedostot",
        "mostinterwikis": "Sivut, joilla on eniten kielilinkkejä",
        "watchnologin": "Et ole kirjautunut sisään",
        "addwatch": "Lisää tarkkailulistalle",
        "addedwatchtext": "Sivu '''[[:$1]]''' on lisätty [[Special:Watchlist|tarkkailulistallesi]].\nTulevaisuudessa sivuun ja sen keskustelusivuun tehtävät muutokset listataan täällä.",
+       "addedwatchtext-short": "Sivu ”$1” on lisätty tarkkailulistallesi.",
        "removewatch": "Poista tarkkailulistalta",
        "removedwatchtext": "Sivu '''[[:$1]]''' on poistettu [[Special:Watchlist|tarkkailulistaltasi]].",
+       "removedwatchtext-short": "Sivu ”$1” on poistettu tarkkailulistaltasi.",
        "watch": "Tarkkaile",
        "watchthispage": "Tarkkaile tätä sivua",
        "unwatch": "Lopeta tarkkailu",
        "movepagetalktext": "Sivuun mahdollisesti liittyvä keskustelusivu siirtyy automaattisesti mukana, '''paitsi:'''\n*jos siirron kohdesivulla on olemassa keskustelusivu, joka ei ole tyhjä, tai\n*jos otat pois rastin alla olevasta ruudusta.\n\nNäissä tapauksissa sivu täytyy siirtää tai yhdistää käsin, jos se on tarpeen.",
        "movearticle": "Siirrettävä sivu:",
        "moveuserpage-warning": "'''Varoitus:''' Olet siirtämässä käyttäjäsivua. Huomaa, että vain sivu siirretään ja käyttäjää ''ei'' nimetä uudelleen.",
-       "movecategorypage-warning": "<strong>Varoitus:</strong> Olet siirtämässä luokkasivua. Ota huomioon, että ainoastaan luokan sivu siirretään ja tämä toiminto <em>ei</em> luokittele vanhassa luokassa olevia sivuja uuteen luokkaan.",
+       "movecategorypage-warning": "<strong>Varoitus:</strong> Olet siirtämässä luokkasivua. Ota huomioon, että ainoastaan luokan oma sivu siirretään ja että tämä toiminto <em>ei</em> luokittele tai itsestään siirrä vanhassa luokassa olevia sivuja uuteen luokkaan.",
        "movenologintext": "Sinun pitää olla rekisteröitynyt käyttäjä ja [[Special:UserLogin|kirjautua sisään]], jotta voisit siirtää sivun.",
        "movenotallowed": "Sinulla ei ole oikeutta siirtää sivuja.",
        "movenotallowedfile": "Sinulla ei ole oikeutta siirtää tiedostoja.",
        "delete_and_move_text": "==Poistamista edellyttävä siirto==\nKohdesivu [[:$1]] on jo olemassa. \nHaluatko poistaa sen, jotta nykyinen sivu voitaisiin siirtää?",
        "delete_and_move_confirm": "Kyllä, poista kohdesivu",
        "delete_and_move_reason": "Sivu on sivun [[$1]] siirron tiellä.",
-       "selfmove": "Lähde- ja kohdenimi ovat samat.",
+       "selfmove": "Lähteen ja kohteen nimi on sama.\nSivua ei voi siirtää itsensä päälle.",
        "immobile-source-namespace": "Sivuja ei voi siirtää nimiavaruudessa ”$1”",
        "immobile-target-namespace": "Sivuja ei voi siirtää nimiavaruuteen ”$1”",
        "immobile-target-namespace-iw": "Kielilinkki ei ole kelvollinen kohde sivun siirrolle.",
        "imagenocrossnamespace": "Tiedostoja ei voi siirtää pois tiedostonimiavaruudesta.",
        "nonfile-cannot-move-to-file": "Sivuja ei voi siirtää tiedostonimiavaruuteen.",
        "imagetypemismatch": "Uusi tiedostopääte ei vastaa tiedoston tyyppiä",
-       "imageinvalidfilename": "Kohdenimi on virheellinen",
+       "imageinvalidfilename": "Kohdetiedoston nimi on virheellinen",
        "fix-double-redirects": "Päivitä kaikki vanhalle nimelle viittaavat ohjaukset ohjaamaan uudelle nimelle",
        "move-leave-redirect": "Jätä paikalle ohjaus",
        "protectedpagemovewarning": "'''Varoitus:''' Tämä sivu on lukittu siten, että vain ylläpitäjät voivat siirtää sitä.\nAlla on viimeisin lokitapahtuma:",
        "tooltip-summary": "Kirjoita lyhyt yhteenveto",
        "interlanguage-link-title": "$1 — $2",
        "common.css": "/* Tämä sivu sisältää koko sivustoa muuttavia tyylejä. */",
-       "cologneblue.css": "/* Tämä sivu sisältää Kölnin sininen -ulkoasua muuttavia tyylejä. */",
        "monobook.css": "/* Tämä sivu sisältää Monobook-ulkoasua muuttavia tyylejä. */",
-       "modern.css": "/* Tämä sivu sisältää Moderni-ulkoasua muuttavia tyylejä. */",
        "vector.css": "/* Tämä sivu sisältää Vector-ulkoasua muuttavia tyylejä. */",
        "print.css": "/* Tämä sivu sisältää tulostettua sivua muuttavia tyylejä */",
        "noscript.css": "/* Tämä sivun tyylit muuttavat niiden käyttäjien tyylejä, joilla JavaScript ei ole käytössä */",
        "group-sysop.css": "/* Tämä sivun tyylit muuttavat ylläpitäjien tyylejä */",
        "group-bureaucrat.css": "/* Tämä sivun tyylit muuttavat byrokraattien tyylejä */",
        "common.js": "/* Tämän sivun JavaScript-koodi liitetään jokaiseen sivulataukseen */",
-       "cologneblue.js": "/* Tämän sivun JavaScript-koodi liitetään Kölnin sininen -tyyliin */",
        "monobook.js": "/* Tämän sivun JavaScript-koodi liitetään Monobook-tyyliin */",
-       "modern.js": "/* Tämän sivun JavaScript-koodi liitetään Moderni-tyyliin */",
        "vector.js": "/* Tämän sivun JavaScript-koodi liitetään Vector-tyyliin */",
        "group-autoconfirmed.js": "/* Tämän sivun JavaScript-koodi liitetään vain automaattisesti hyväksytyille käyttäjille */",
        "group-bot.js": "/* Tämän sivun JavaScript-koodi liitetään vain boteille */",
        "pageinfo-category-pages": "Sivujen määrä",
        "pageinfo-category-subcats": "Alaluokkien määrä",
        "pageinfo-category-files": "Tiedostojen määrä",
-       "skinname-cologneblue": "Kölnin sininen",
        "skinname-monobook": "Monobook",
-       "skinname-modern": "Moderni",
        "markaspatrolleddiff": "Merkitse tarkastetuksi",
        "markaspatrolledtext": "Merkitse muutos tarkastetuksi",
        "markedaspatrolled": "Muutos on tarkastettu",
index cd41181..795825f 100644 (file)
        "edit-gone-missing": "Tað var ikki møguligt at dagføra síðuna.\nTað sær út til at hon er blivin strikað.",
        "edit-conflict": "Rættingar trupulleiki (konflikt).",
        "edit-no-change": "Tín rætting var sæð burtur frá, tí ongin broyting varð gjørd í tekstinum.",
-       "postedit-confirmation": "Tín rætting varð goymd.",
+       "postedit-confirmation-saved": "Tín rætting varð goymd.",
        "edit-already-exists": "Tað var ikki møguligt at upprætta nýggja síðu.\nSíðan er longu til.",
        "defaultmessagetext": "Standard boðtekstur",
        "content-failed-to-parse": "Kláraði ikki at tulka $2 innihaldi fyri $1 modell: $3",
        "searchmenu-exists": "'''Tað er longu ein síða sum eitur \"[[:$1]]\" á hesi wiki.'''",
        "searchmenu-new": "<strong>'''Stovna síðuna \"[[:$1]]\" á hesi wiki!</strong> {{PLURAL:$2|0=|Sí eisini síðuna sum varð funnin við tínari leiting.|Sí eisini leitiúrslitini ið funnin vóru.}}",
        "searchprofile-articles": "Innihaldssíður",
-       "searchprofile-project": "Hjálpar og verkætlanar síður",
        "searchprofile-images": "Fjølmiðlar - multimedia",
        "searchprofile-everything": "Alt",
        "searchprofile-advanced": "Víðkað",
        "searchprofile-articles-tooltip": "Leita í $1",
-       "searchprofile-project-tooltip": "Leita í $1",
        "searchprofile-images-tooltip": "Leita eftir fílum",
        "searchprofile-everything-tooltip": "Leita í øllum innihaldi (eisini í kjaksíðum)",
        "searchprofile-advanced-tooltip": "Leita í ávísum navnaøkjum",
        "search-interwiki-default": "$1 úrslit:",
        "search-interwiki-more": "(meira)",
        "search-relatedarticle": "Líknandi",
-       "searcheverything-enable": "Leita í øllum navnaøkjum",
        "searchrelated": "líknandi",
        "searchall": "alt",
        "showingresults": "Niðanfyri standa upp til {{PLURAL:$1|'''$1''' úrslit, sum byrjar|'''$1''' úrslit, sum byrja}} við #<b>$2</b>.",
        "allowemail": "Tilset t-post frá øðrum brúkarum",
        "prefs-searchoptions": "Leita",
        "prefs-namespaces": "Navnarúm",
-       "defaultns": "Um ikki, leita so í hesum navnateigum:",
        "default": "standard",
        "prefs-files": "Fílur",
        "prefs-custom-css": "Tilpassað CSS",
        "prefs-emailconfirm-label": "Vátta tína t-post adressu:",
        "youremail": "T-postur (sjálvboðið)*:",
        "username": "{{GENDER:$1|Brúkaranavn}}:",
-       "uid": "{{GENDER:$1|Brúkari}} ID:",
        "prefs-memberingroups": "{{GENDER:$2|Limur}} í {{PLURAL:$1|bólki|bólkum}}:",
        "prefs-registration": "Skrásett tíðspunkt:",
        "yourrealname": "Títt navn*:",
        "recentchanges-label-bot": "Henda rætting varð gjørd av einum botti",
        "recentchanges-label-unpatrolled": "Henda rætting er ikki blivin eftirkannað enn",
        "recentchanges-legend-heading": "'''Teknfrágreiðing:'''",
-       "recentchanges-legend-newpage": "(sí eisini [[Special:NewPages|yvirlit yvir nýggjar síður]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sí eisini [[Special:NewPages|yvirlit yvir nýggjar síður]])",
        "rcnotefrom": "Niðanfyri standa broytingarnar síðani '''$2''', (upp til '''$1''' er sýndar).",
        "rclistfrom": "Sýn nýggjar broytingar byrjandi við $3 $2",
        "rcshowhideminor": "$1 minni rættingar",
        "log-title-wildcard": "Leita í heitum sum byrja við hesum teksti",
        "showhideselectedlogentries": "Vís/fjal útvaldu loggarnir",
        "allpages": "Allar síður",
-       "alphaindexline": "$1 til $2",
        "nextpage": "Næsta síða ($1)",
        "prevpage": "Fyrrverandi síða ($1)",
        "allpagesfrom": "Vís síður sum byrja við:",
        "unblock": "Tak sperring av brúkara burtur",
        "blockip": "Banna brúkara",
        "blockip-legend": "Sperra brúkara",
-       "ipadressorusername": "IP-adressa ella brúkaranavn:",
+       "ipaddressorusername": "IP-adressa ella brúkaranavn:",
        "ipbexpiry": "Gongur út:",
        "ipbreason": "Orsøk:",
        "ipbreason-dropdown": "*Vanligar orsøkir fyri sperring\n** Innsetan av følskum upplýsingum\n** Tekur burtur innihald av síðum\n** Spammar leinkjur til uttanhýsis síður\n** Skrivar tvætl á síður\n** Ber seg skeivt at/ger seg inn á brúkarar\n** Misnýtir fleiri kontur\n** Brúkaranavn ið ikki kann góðtakast",
        "pageinfo-category-pages": "Tal av síðum",
        "pageinfo-category-subcats": "Tal av undirbólkum",
        "pageinfo-category-files": "Tal av fílum",
-       "skinname-cologneblue": "Cologne-bláur",
        "markaspatrolleddiff": "Merk síðuna sum eftirhugda",
        "markaspatrolledtext": "Merk hesa síðu sum eftirhugda",
        "markedaspatrolled": "Merk sum eftirkannað",
        "newimages": "Nýggjar myndir",
        "newimages-legend": "Filtur",
        "newimages-label": "Fílunavn (ella ein partur av tí):",
-       "showhidebots": "($1 bottar)",
        "noimages": "Einki at síggja.",
        "ilsubmit": "Leita",
        "bydate": "eftir dato",
index 091ce3e..2522c6e 100644 (file)
                        "Горан Анђелковић",
                        "לערי ריינהארט",
                        "아라",
-                       "Scoopfinder"
+                       "Scoopfinder",
+                       "Akeron",
+                       "Linedwell"
                ]
        },
        "tog-underline": "Souligner les liens :",
        "vector-action-unprotect": "Changer la protection",
        "vector-view-create": "Créer",
        "vector-view-edit": "Modifier",
-       "vector-view-history": "Afficher l’historique",
+       "vector-view-history": "Historique",
        "vector-view-view": "Lire",
        "vector-view-viewsource": "Voir la source",
        "actions": "Actions",
+       "vector-more-actions": "Plus",
        "namespaces": "Espaces de noms",
        "variants": "Variantes",
        "navigation-heading": "Menu de navigation",
        "currentrev": "Version actuelle",
        "currentrev-asof": "Version actuelle en date du $1",
        "revisionasof": "Version du $1",
-       "revision-info": "Version du $1 par $2",
+       "revision-info": "Révision de $1 par {{GENDER:$6|$2}}$7",
        "previousrevision": "← Version précédente",
        "nextrevision": "Version suivante →",
        "currentrevisionlink": "Voir la version courante",
        "searchmenu-exists": "'''Il existe une page nommée « [[:$1]] » sur ce wiki.''' {{PLURAL:$2|0=|Voyez également les autres résultats de votre recherche.}}",
        "searchmenu-new": "<strong>Créer la page « [[:$1|$1]] » sur ce wiki !</strong> {{PLURAL:$2|0=|Voyez également la page trouvée avec votre recherche.|Voyez également les résultats de votre recherche.}}",
        "searchprofile-articles": "Pages de contenu",
-       "searchprofile-project": "Pages d'aide et de projet",
        "searchprofile-images": "Multimédia",
        "searchprofile-everything": "Tout",
        "searchprofile-advanced": "Recherche avancée",
        "searchprofile-articles-tooltip": "Rechercher dans $1",
-       "searchprofile-project-tooltip": "Rechercher dans $1",
        "searchprofile-images-tooltip": "Rechercher des fichiers multimédias",
        "searchprofile-everything-tooltip": "Rechercher dans tout le site (y compris dans les pages de discussion)",
        "searchprofile-advanced-tooltip": "Choisir les espaces de noms pour la recherche",
        "search-interwiki-default": "Résultats de $1 :",
        "search-interwiki-more": "(plus)",
        "search-relatedarticle": "Reliés",
-       "searcheverything-enable": "Rechercher dans tous les espaces de noms",
        "searchrelated": "reliés",
        "searchall": "tout",
        "showingresults": "Affichage de <b>$1</b> résultat{{PLURAL:$1||s}} à partir du n°<b>$2</b>.",
        "powersearch-togglelabel": "Cocher :",
        "powersearch-toggleall": "Tout",
        "powersearch-togglenone": "Aucune",
+       "powersearch-remember": "Se souvenir de la sélection pour les prochaines recherches",
        "search-external": "Recherche externe",
        "searchdisabled": "La recherche sur {{SITENAME}} est désactivée. En attendant la réactivation, vous pouvez effectuer une recherche via Google. Attention, leur indexation du contenu de {{SITENAME}} peut ne pas être à jour.",
        "search-error": "Une erreur s'est produite en recherchant : $1",
        "allowemail": "Autoriser l'envoi de courriels venant d'autres utilisateurs",
        "prefs-searchoptions": "Recherche",
        "prefs-namespaces": "Espaces de noms",
-       "defaultns": "Rechercher par défaut dans ces espaces de noms :",
        "default": "défaut",
        "prefs-files": "Fichiers",
        "prefs-custom-css": "CSS personnalisé",
        "recentchanges-label-unpatrolled": "Cette modification n'a pas encore été patrouillée.",
        "recentchanges-label-plusminus": "La taille de la page a changé de ce nombre d’octets.",
        "recentchanges-legend-heading": "'''Légende :'''",
-       "recentchanges-legend-newpage": "(voir aussi la [[Special:NewPages|liste des nouvelles pages]]).",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (voir aussi la [[Special:NewPages|liste des nouvelles pages]]).",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Ci-dessous les modifications effectuées depuis le <strong>$2</strong> (jusqu’à <strong>$1</strong> affichés).",
        "rclistfrom": "Afficher les nouvelles modifications depuis le $3 à $2",
        "largefileserver": "La taille de ce fichier est supérieure au maximum autorisé.",
        "emptyfile": "Le fichier que vous voulez importer semble vide.\nCeci peut être dû à une erreur dans le nom du fichier.\nVeuillez vérifier que vous désirez vraiment importer ce fichier.",
        "windows-nonascii-filename": "Ce wiki ne supporte pas les noms de fichiers avec des caractères spéciaux.",
-       "fileexists": "Un fichier existe déjà sous ce nom.\nMerci de vérifier <strong>[[:$1]]</strong> si vous n'êtes pas certain{{GENDER:||e|}} de vouloir le modifier.\n[[$1|thumb]]",
+       "fileexists": "Un fichier existe déjà sous ce nom.\nMerci de vérifier <strong>[[:$1]]</strong> si vous n'êtes pas certain{{GENDER:||e|}} de vouloir le remplacer.\n[[$1|thumb]]",
        "filepageexists": "La page de description pour ce fichier a déjà été créée ici <strong>[[:$1]]</strong>, mais aucun fichier n'existe actuellement sous ce nom.\nLe résumé que vous allez spécifier n'apparaîtra pas sur la page de description.\nPour que ce soit le cas, vous devrez modifier manuellement la page. [[$1|thumb]]",
        "fileexists-extension": "Un fichier existe avec un nom proche : [[$2|thumb]]\n* Nom du fichier à importer : <strong>[[:$1]]</strong>\n* Nom du fichier existant : <strong>[[:$2]]</strong>\nVeuillez choisir un autre nom.",
        "fileexists-thumbnail-yes": "Le fichier semble être une image en taille réduite ''(vignette)''. [[$1|thumb]]\nVeuillez vérifier le fichier <strong>[[:$1]]</strong>.\nSi le fichier vérifié est la même image avec la taille initiale, il n'y a pas besoin d'importer une version réduite.",
        "wantedtemplates": "Modèles demandés",
        "mostlinked": "Pages les plus liées",
        "mostlinkedcategories": "Catégories les plus utilisées",
-       "mostlinkedtemplates": "Modèles les plus utilisés",
+       "mostlinkedtemplates": "Pages les plus incluses",
        "mostcategories": "Pages utilisant le plus de catégories",
        "mostimages": "Fichiers les plus utilisés",
        "mostinterwikis": "Pages avec le plus d'interwikis",
        "listusers-creationsort": "Trier par date de création",
        "listusers-desc": "Trier en ordre descendant",
        "usereditcount": "$1 modification{{PLURAL:$1||s}}",
-       "usercreated": "{{GENDER:$3|Créé}} le $1 à $2",
+       "usercreated": "Créé le $1 à $2",
        "newpages": "Nouvelles pages",
        "newpages-username": "Nom d'utilisateur :",
        "ancientpages": "Pages les plus anciennement modifiées",
        "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 seul 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 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.",
        "movenologintext": "Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e|(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.",
        "tooltip-summary": "Entrez un bref résumé",
        "interlanguage-link-title": "$1 — $2",
        "common.css": "/* Le CSS placé ici sera appliqué à tous les habillages. */",
-       "cologneblue.css": "/* Le CSS placé ici affectera les utilisateurs de l’habillage Cologne Blue. */",
        "monobook.css": "/* Le CSS placé ici affectera les utilisateurs de l’habillage Monobook. */",
-       "modern.css": "/* Le CSS placé ici affectera les utilisateurs de l’habillage Modern. */",
        "vector.css": "/* Le CSS placé ici affectera les utilisateurs de l’habillage Vector. */",
        "print.css": "/* Le CSS placé ici affectera les impressions */",
        "noscript.css": "/* Le CSS placé ici affectera les utilisateurs ayant désactivé Javascript. */",
        "group-sysop.css": "/* Le CSS inclus ici n’affectera que les administrateurs */",
        "group-bureaucrat.css": "/* Le CSS inclus ici n’affectera que les bureaucrates */",
        "common.js": "/* Tout JavaScript ici sera chargé avec chaque page accédée par n’importe quel utilisateur. */",
-       "cologneblue.js": "/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage Bleu de cologne uniquement */",
        "monobook.js": "/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage MonoBook uniquement. */",
-       "modern.js": "/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage Moderne uniquement */",
        "vector.js": "/* Tout code JavaScript placé ici sera chargé pour les utilisateurs de l’habillage Vector */",
        "group-autoconfirmed.js": "/* Le JavaScript inclus ici n’affectera que les utilisateurs auto-confirmés */",
        "group-user.js": "/* Le JavaScript placé ici ne sera chargé que pour les utilisateurs enregistrés. */",
        "pageinfo-category-pages": "Nombre de pages",
        "pageinfo-category-subcats": "Nombre de sous-catégories",
        "pageinfo-category-files": "Nombre de fichiers",
-       "skinname-cologneblue": "Bleu de Cologne",
        "skinname-monobook": "Monobook",
-       "skinname-modern": "Moderne",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "Marquer comme relue",
        "markaspatrolledtext": "Marquer cette page comme relue",
index 1d41451..e5203bc 100644 (file)
@@ -5,7 +5,8 @@
                        "ChrisPtDe",
                        "Reedy",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Soul Train"
                ]
        },
        "tog-underline": "Solegnér los lims :",
        "searchmenu-exists": "'''Y at na pâge apelâye « [[:$1]] » sur ceti vouiqui.'''",
        "searchmenu-new": "'''Fâre la pâge « [[:$1|$1]] » sur ceti vouiqui !'''",
        "searchprofile-articles": "Pâges de contegnu",
-       "searchprofile-project": "Pâges d’éde et pâges projèt",
        "searchprofile-images": "Multimèdia",
        "searchprofile-everything": "Tot",
        "searchprofile-advanced": "Rechèrche avanciêe",
        "searchprofile-articles-tooltip": "Rechèrchiér dedens $1",
-       "searchprofile-project-tooltip": "Rechèrchiér dedens $1",
        "searchprofile-images-tooltip": "Rechèrchiér des fichiérs",
        "searchprofile-everything-tooltip": "Rechèrchiér dedens tot lo contegnu (les pâges de discussion avouéc)",
        "searchprofile-advanced-tooltip": "Chouèsir los èspâços de noms por la rechèrche",
        "search-interwiki-default": "Rèsultats dessus $1 :",
        "search-interwiki-more": "(més)",
        "search-relatedarticle": "Aparentâ",
-       "searcheverything-enable": "Rechèrchiér dedens tôs los èspâços de noms",
        "searchrelated": "aparentâ",
        "searchall": "tot",
        "showingresults": "Vua de '''$1''' rèsultat{{PLURAL:$1||s}} dês lo numerô '''$2'''.",
        "allowemail": "Activar l’èxpèdicion de mèssâjos que vegnont d’ôtros utilisators",
        "prefs-searchoptions": "Rechèrche",
        "prefs-namespaces": "Èspâços de noms",
-       "defaultns": "Ôtrament rechèrchiér dedens cetos èspâços de noms :",
        "default": "dèfôt",
        "prefs-files": "Fichiérs",
        "prefs-custom-css": "CSS pèrsonalisâ",
        "prefs-emailconfirm-label": "Confirmacion de l’adrèce èlèctronica :",
        "youremail": "Adrèce èlèctronica :",
        "username": "Nom d’utilisat{{GENDER:$1|or|rice}} :",
-       "uid": "Identifient d’utilisat{{GENDER:$1|or|rice}} :",
        "prefs-memberingroups": "{{GENDER:$2|Membro}} de l{{PLURAL:$1|a tropa|es tropes}} :",
        "prefs-registration": "Dâta d’encartâjo :",
        "yourrealname": "Veré nom :",
        "grouppage-user": "{{ns:project}}:Utilisators",
        "grouppage-autoconfirmed": "{{ns:project}}:Utilisators ôtoconfirmâs",
        "grouppage-bot": "{{ns:project}}:Robots",
-       "grouppage-sysop": "{{ns:project}}:Administrators",
+       "grouppage-sysop": "{{ns:project}}:Администраторар",
        "grouppage-bureaucrat": "{{ns:project}}:Grata-papiérs",
        "grouppage-suppress": "{{ns:project}}:Supèrvisors",
        "right-read": "Liére les pâges",
        "log-title-wildcard": "Chèrchiér entre-mié los titros que començont per cél tèxto",
        "showhideselectedlogentries": "Montrar / cachiér les entrâs de jornal chouèsies",
        "allpages": "Totes les pâges",
-       "alphaindexline": "de $1 a $2",
        "nextpage": "Pâge aprés ($1)",
        "prevpage": "Pâge devant ($1)",
        "allpagesfrom": "Fâre vêre les pâges dês :",
        "tooltip-preferences-save": "Encartar les prèferences",
        "tooltip-summary": "Buchiéd un côrt rèsumâ",
        "common.css": "/* Lo code CSS betâ ique serat aplicâ a tôs los habelyâjos. */",
-       "cologneblue.css": "/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « Blu de Cologne ». */",
        "monobook.css": "/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « MonoBook ». */",
-       "modern.css": "/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « Modèrno ». */",
        "vector.css": "/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « Vèctor ». */",
        "print.css": "/* Lo code CSS betâ ique afècterat les emprèssions. */",
        "noscript.css": "/* Lo code CSS betâ ique afècterat los usanciérs qu’ont dèsactivâ lo code JavaScript. */",
        "group-sysop.css": "/* Lo code CSS betâ ique afècterat ren que los administrators. */",
        "group-bureaucrat.css": "/* Lo code CSS betâ ique afècterat ren que los grata-papiérs. */",
        "common.js": "/* Tot code JavaScript betâ ique serat chargiê per tôs los usanciérs avouéc châque chargement de pâge. */",
-       "cologneblue.js": "/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « Blu de Cologne ». */",
        "monobook.js": "/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « MonoBook ». */",
-       "modern.js": "/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « Modèrno ». */",
        "vector.js": "/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « Vèctor ». */",
        "group-autoconfirmed.js": "/* Tot code JavaScript betâ ique serat chargiê ren que por los usanciérs encartâs. */",
        "group-bot.js": "/* Tot code JavaScript betâ ique serat chargiê ren que por los bots. */",
        "pageinfo-contentpage": "Comptâ coment pâge de contegnu",
        "pageinfo-contentpage-yes": "Ouè",
        "pageinfo-protect-cascading-yes": "Ouè",
-       "skinname-cologneblue": "Blu de Cologne",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Modèrno",
        "skinname-vector": "Vèctor",
        "markaspatrolleddiff": "Marcar coment survelyê",
        "markaspatrolledtext": "Marcar ceta pâge coment survelyê",
index 624a890..eecbc54 100644 (file)
        "searchmenu-exists": "'''Deer as en sid nååmd \"[[:$1]]\" önj jüdeer Wiki'''",
        "searchmenu-new": "<strong>Maage det sidj „[[:$1]]“ uun detheer wiki!</strong> {{PLURAL:$2|0=|Luke uk bi det fünjen sidj.|Luke uk bi a fünjen sidjen.}}",
        "searchprofile-articles": "Artiikler",
-       "searchprofile-project": "Halep- an Projektsidjen",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Ales",
        "searchprofile-advanced": "Ütjwidjet",
        "searchprofile-articles-tooltip": "Schük uun $1",
-       "searchprofile-project-tooltip": "Schük uun $1",
        "searchprofile-images-tooltip": "Bilen schük",
        "searchprofile-everything-tooltip": "Schük aueraal (uk diskusjuunssidjen)",
        "searchprofile-advanced-tooltip": "Uun ööder nöömrümer schük",
        "search-interwiki-default": "Resultaaten faan $1:",
        "search-interwiki-more": "(muar)",
        "search-relatedarticle": "Ferbünjen",
-       "searcheverything-enable": "Uun arke nöömrüm schük",
        "searchrelated": "ferbünjen",
        "searchall": "aaltumaal",
        "showingresults": "Heer {{PLURAL:$1|as '''1''' resultaat|san '''$1''' resultaaten}}, jo began mä numer '''$2.'''",
        "allowemail": "E-mail faan ööder brükern tuläät",
        "prefs-searchoptions": "Schük",
        "prefs-namespaces": "Nöömrümer",
-       "defaultns": "Ööders schük uun jodiar nöömrümer:",
        "default": "Fööriinstelang",
        "prefs-files": "Datein",
        "prefs-custom-css": "Salew maaget CSS",
        "prefs-emailconfirm-label": "E-Mail gudkäänd:",
        "youremail": "E-mail:",
        "username": "{{GENDER:$1|Brükernööm}}:",
-       "uid": "{{GENDER:$1|Brükerkäänang}}:",
        "prefs-memberingroups": "{{GENDER:$2|Lasmoot}} faan {{PLURAL:$1|brükerskööl|brükersköölen}}:",
        "prefs-registration": "Uunmelde-tidj",
        "yourrealname": "Rocht nööm:",
        "recentchanges-label-unpatrolled": "Detdiar feranrang as noch ei efterluket wurden",
        "recentchanges-label-plusminus": "Feranert sidjengrate (am soföl bytes)",
        "recentchanges-legend-heading": "'''Ferklaarang:'''",
-       "recentchanges-legend-newpage": "(luke uk bi't [[Special:NewPages|list mä nei sidjen]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (luke uk bi't [[Special:NewPages|list mä nei sidjen]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Diar wurd a feranrangen sant <strong>$2</strong>uunwiset (ei muar üs <strong>$1</strong> feranrangen).",
        "rclistfrom": "Bluas feranrangen sant $3 $2 wise",
        "log-title-wildcard": "Sidjennööm begant mä ...",
        "showhideselectedlogentries": "Wise/fersteeg jodiar logbukiindracher",
        "allpages": "Aal a sidjen",
-       "alphaindexline": "$1 bit $2",
        "nextpage": "Naist sidj ($1)",
        "prevpage": "Leetst sidj ($1)",
        "allpagesfrom": "Sidjen wise sant:",
index 747f40c..a47fd0e 100644 (file)
@@ -11,7 +11,8 @@
                        "Urhixidur",
                        "Vipuser",
                        "Xiaomingyan",
-                       "아라"
+                       "아라",
+                       "Mywood"
                ]
        },
        "tog-underline": "下划链接",
        "history_short": "历史",
        "updatedmarker": "最末道浏览后𠮶改动",
        "printableversion": "可打印版本",
-       "permalink": "永久链接",
+       "permalink": "固定链接",
        "print": "打印",
        "view": "眵",
        "edit": "编写",
        "enterlockreason": "请输入锁到数据库𠮶理由,包括预计几时间解锁",
        "readonlytext": "数据库上嘞锁改伓正,可能佢正维修中,搞正嘞仰上会还原。管理员𠮶解释: $1",
        "missing-article": "资料库冇寻到倷要𠮶版面,「$1」 $2。\n\n通常个系因为修订历史页上头,过时𠮶连结连到删吥𠮶版面咁舞得𠮶。\n\n如果不系咁,倷可能系寻到软件里头𠮶bug。\n请记得 URL 𠮶地址,向[[Special:ListUsers/sysop|管理员]]报告。",
-       "missingarticle-rev": "(修订#: $1)",
+       "missingarticle-rev": "(版本#: $1)",
        "missingarticle-diff": "(差异: $1, $2)",
        "readonly_lag": "附属数据库服务器拿缓存更新到主服务器,数据库自动锁到嘞",
        "internalerror": "内部错误",
        "rev-delundel": "显示/弆到",
        "rev-showdeleted": "敨开",
        "revisiondelete": "删除/反删除修改",
-       "revdelete-nooldid-title": "冇目标修订",
+       "revdelete-nooldid-title": "无效目标版本",
        "revdelete-nooldid-text": "倷冇话个只操作𠮶目标修改。",
        "logdelete-selected": "拣$1𠮶$2只日志事件:",
        "revdelete-legend": "设置可见性𠮶限制",
        "searchmenu-exists": "'''个只wiki已有一只叫「[[:$1]]」𠮶页。'''",
        "searchmenu-new": "'''嘚个只wiki上建立「[[:$1]]」页!'''",
        "searchprofile-articles": "内容页",
-       "searchprofile-project": "帮助同得计划页",
        "searchprofile-images": "多媒体",
        "searchprofile-everything": "所有",
        "searchprofile-advanced": "高级",
        "searchprofile-articles-tooltip": "到$1里头寻",
-       "searchprofile-project-tooltip": "到$1里头寻",
        "searchprofile-images-tooltip": "寻档案",
        "searchprofile-everything-tooltip": "寻所有内容(包括谈𫍡页)",
        "searchprofile-advanced-tooltip": "到自定名字空间里头寻",
        "servertime": "服务器时间",
        "guesstimezone": "到浏览器上填",
        "allowemail": "接受别𠮶用户𠮶邮件",
-       "defaultns": "默认搜索𠮶名字空间:",
        "default": "默认",
        "prefs-files": "档案",
        "youremail": "电子邮件:",
        "username": "用户名:",
-       "uid": "用户ID:",
        "yourrealname": "真名:",
        "yourlanguage": "语言:",
        "yourvariant": "多款内容语言:",
        "logempty": "日志里头冇符合𠮶项目。",
        "log-title-wildcard": "寻吖个只字开头𠮶标题",
        "allpages": "所有𠮶页面",
-       "alphaindexline": "$1到$2",
        "nextpage": "下页($1)",
        "prevpage": "上页($1)",
        "allpagesfrom": "显示以个底开始𠮶页面:",
        "exbeforeblank": "拖清空之前𠮶内容系: '$1'",
        "delete-confirm": "删卟\"$1\"去",
        "delete-legend": "删卟去",
-       "historywarning": "'''警告''': 倷要删卟𠮶页面含到$1到{{PLURAL:$1|修订|修订}}𠮶历史",
+       "historywarning": "'''警告''': 倷要删卟𠮶页面含到$1到{{PLURAL:$1|版本}}𠮶历史",
        "confirmdeletetext": "仰上倷就要永久删卟数据库𠮶一只页面或图像同佢𠮶历史。请确定倷要啖做,哈要晓得佢𠮶后果,更加伓能违反[[{{MediaWiki:Policy-url}}]]。",
        "actioncomplete": "扤正嘞",
        "actionfailed": "操作冇舞正",
        "undelete-search-prefix": "显示以下底开头𠮶页面:",
        "undelete-search-submit": "寻吖",
        "undelete-no-results": "删卟记录冇合到𠮶结果。",
-       "undelete-filename-mismatch": "删伓正带到时间标记𠮶档案修订 $1: 档案伓匹配",
+       "undelete-filename-mismatch": "删伓正带到时间标记𠮶档案版本$1: 档案伓匹配",
        "undelete-bad-store-key": "删伓正带到时间标记𠮶档案修订 $1: 档案删卟之前就跌卟嘞。",
        "undelete-cleanup-error": "删卟冇用𠮶存盘文件 \"$1\" 时出错。",
        "undelete-missing-filearchive": "数据库冇档案存盘 ID $1 ,故系佢也就到档案存盘恢复伓正。佢话伓定早反删除嘞。",
        "sp-contributions-userrights": "用户权限管理",
        "sp-contributions-search": "寻贡献",
        "sp-contributions-username": "IP地址或用户名:",
-       "sp-contributions-toponly": "光显示最晏修订版本𠮶编辑",
+       "sp-contributions-toponly": "光显示最晏版本𠮶编辑",
        "sp-contributions-submit": "寻",
        "whatlinkshere": "有什哩连到个首",
        "whatlinkshere-title": "连到 $1 𠮶页面",
        "tooltip-t-upload": "上传图像或多媒体文件",
        "tooltip-t-specialpages": "全部特殊页列表",
        "tooltip-t-print": "个只页面𠮶打印版",
-       "tooltip-t-permalink": "个只页面𠮶永久链接",
+       "tooltip-t-permalink": "个只页面𠮶固定链接",
        "tooltip-ca-nstab-main": "望吖内容页",
        "tooltip-ca-nstab-user": "望吖用户页",
        "tooltip-ca-nstab-media": "望吖媒体页",
index d98fe23..1722d86 100644 (file)
@@ -8,7 +8,8 @@
                        "Urhixidur",
                        "Vipuser",
                        "Xiaomingyan",
-                       "아라"
+                       "아라",
+                       "Mywood"
                ]
        },
        "tog-underline": "下劃連結",
        "history_short": "歷史",
        "updatedmarker": "頂晏嗰許到瀏覽後嗰改動",
        "printableversion": "可打印版本",
-       "permalink": "永久連結",
+       "permalink": "固定連結",
        "print": "打印",
        "view": "眵",
        "edit": "編寫",
        "searchmenu-exists": "'''箇隻wiki已有一隻叫「[[:$1]]」嗰頁。'''",
        "searchmenu-new": "'''到箇隻wiki上建立「[[:$1]]」頁!'''",
        "searchprofile-articles": "內容頁",
-       "searchprofile-project": "幫助同得計劃頁",
        "searchprofile-images": "多媒體",
        "searchprofile-everything": "所有",
        "searchprofile-advanced": "高級",
        "searchprofile-articles-tooltip": "到$1裡頭尋",
-       "searchprofile-project-tooltip": "到$1裡頭尋",
        "searchprofile-images-tooltip": "尋檔案",
        "searchprofile-everything-tooltip": "尋所有內容(包括談詑頁)",
        "searchprofile-advanced-tooltip": "到自定名字空間裡頭尋",
        "servertime": "服務器時間",
        "guesstimezone": "到瀏覽器上填",
        "allowemail": "接受別嗰用戶嗰郵件",
-       "defaultns": "默認搜索嗰名字空間:",
        "default": "預設",
        "prefs-files": "檔案",
        "youremail": "電子郵件:",
        "username": "用戶名:",
-       "uid": "用戶ID:",
        "yourrealname": "真名:",
        "yourlanguage": "語言:",
        "yourvariant": "多款內容語言:",
        "logempty": "日誌裡頭冇符合嗰項目。",
        "log-title-wildcard": "尋吖箇隻字開頭嗰標題",
        "allpages": "所有嗰頁面",
-       "alphaindexline": "$1到$2",
        "nextpage": "下頁($1)",
        "prevpage": "上頁($1)",
        "allpagesfrom": "顯示以箇底開始嗰頁面:",
        "tooltip-t-upload": "上傳圖像或多媒體文件",
        "tooltip-t-specialpages": "全部特殊頁嗰清單",
        "tooltip-t-print": "箇隻頁面嗰打印版",
-       "tooltip-t-permalink": "箇隻頁面嗰永久連結",
+       "tooltip-t-permalink": "箇隻頁面嗰固定連結",
        "tooltip-ca-nstab-main": "望下內容頁",
        "tooltip-ca-nstab-user": "望下用戶頁",
        "tooltip-ca-nstab-media": "望吖媒體頁",
index 10908ff..3dcf65f 100644 (file)
@@ -7,13 +7,14 @@
                        "Sionnach",
                        "Steafan31",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "GunChleoc"
                ]
        },
        "tog-underline": "Fo-loidhneadh nan ceanglaichean:",
        "tog-hideminor": "Falaich mùthaidhean beaga ann an liosta nam mùthaidhean ùra",
-       "tog-hidepatrolled": "Falaich mùthaidhean fo fhaire ann an liosta nam mùthaidhean ùra",
-       "tog-newpageshidepatrolled": "Falaich duilleagan fo fhaire ann an liosta nan duilleagan ùra",
+       "tog-hidepatrolled": "Falaich mùthaidhean fo fhreiceadan ann an liosta nam mùthaidhean ùra",
+       "tog-newpageshidepatrolled": "Falaich duilleagan fo fhreiceadan ann an liosta nan duilleagan ùra",
        "tog-extendwatchlist": "Leudaich an clàr-faire gus an seall e gach mùthadh 's chan ann an fheadhainn as ùire a-mhàin",
        "tog-usenewrc": "Buidhnich na h-atharraichean a-rèir duilleige sna mùthaidhean ùra agus air a' chlàr-fhaire",
        "tog-numberheadings": "Cuir àireamhan ri ceann-sgrìobhaidhean leis fhèin",
@@ -30,7 +31,7 @@
        "tog-enotifwatchlistpages": "Cuir post-dealain thugam nuair a mhùthar duilleag a tha air a' chlàr-fhaire agam",
        "tog-enotifusertalkpages": "Cuir post-dealain thugam nuair a mhùthaichear duilleag mo chonaltraidh",
        "tog-enotifminoredits": "Cuir post-dealain thugam nuair a nithear mùthadh beag air duilleagan cuideachd",
-       "tog-enotifrevealaddr": "Nochd an seòladh puist-dhealain agam ann am teachdaireachdan fiosrachaidh",
+       "tog-enotifrevealaddr": "Nochd an seòladh puist-d agam ann am brathan-naidheachd puist-d",
        "tog-shownumberswatching": "Nochd àireamh nan cleachdaichean a tha a' cumail sùil air",
        "tog-oldsig": "An t-earr-sgrìobhadh làithreach:",
        "tog-fancysig": "Làimhsich an t-earr-sgrìobhadh mar wikitext (gun cheangal leis fhèin)",
        "tog-watchlisthideminor": "Falaich mùthaidhean beaga air mo chlàr-faire",
        "tog-watchlisthideliu": "Falaich mùthaidhean le cleachdaichean a tha air logadh a-steach air mo chlàr-faire",
        "tog-watchlisthideanons": "Falaich mùthaidhean le cleachdaichean gun ainm air mo chlàr-faire",
-       "tog-watchlisthidepatrolled": "Falaich mùthaidhean air duilleagan fo fhreiceadan air mo chlàr-faire",
+       "tog-watchlisthidepatrolled": "Falaich mùthaidhean air duilleagan fo fhreiceadan air a' chlàr-fhaire agam",
        "tog-ccmeonemails": "Cuir lethbhric de phuist-dhealain a chuireas mi do chleachdaichean eile thugam",
-       "tog-diffonly": "Na seall susbaint nan duilleagan fo na diofaichean",
-       "tog-showhiddencats": "Seall na roinnean falaichte",
-       "tog-norollbackdiff": "Na dèan diof às dèidh roiligeadh air ais",
+       "tog-diffonly": "Na seall susbaint nan duilleagan fo na diofaran",
+       "tog-showhiddencats": "Seall na roinnean-seòrsa falaichte",
+       "tog-norollbackdiff": "Na seall na diofaran às dèidh roladh air ais",
        "tog-useeditwarning": "Thoir rabhadh dhomh ma bhios mi an impis duilleag deasachaidh fhàgail mus do shàbhail mi na mùthaidhean agam",
        "tog-prefershttps": "Cleachd ceangal tèarainte an-còmhnaidh nuair a bhios mi clàraichte a-staigh",
        "underline-always": "An-còmhnaidh",
        "november-date": "$1 dhen t-Samhain",
        "december-date": "$1 dhen Dùbhlachd",
        "pagecategories": "{{PLURAL:$1|Roinn-seòrsa|Roinn-seòrsa|Roinnean-seòrsa|Roinn-seòrsa}}",
-       "category_header": "Duilleagan sa roinn \"$1\"",
-       "subcategories": "Fo-roinnean",
-       "category-media-header": "Meadhanan sa roinn \"$1\"",
-       "category-empty": "''Chan eil duilleagan no meadhanan san roinn seo an-dràsta.''",
+       "category_header": "Duilleagan san roinn-seòrsa \"$1\"",
+       "subcategories": "Fo-roinnean-seòrsa",
+       "category-media-header": "Meadhanan san roinn-seòrsa \"$1\"",
+       "category-empty": "''Chan eil duilleagan no meadhanan san roinn-seòrsa seo an-dràsta.''",
        "hidden-categories": "{{PLURAL:$1|Roinn-seòrsa fhalaichte|Roinn-seòrsa fhalaichte|Roinnean-seòrsa falaichte|Roinn-seòrsa fhalaichte}}",
-       "hidden-category-category": "Roinnean falaichte",
+       "hidden-category-category": "Roinnean-seòrsa falaichte",
        "category-subcat-count": "{{PLURAL:$2|Chan eil san roinn-seòrsa ach an fho-roinn-seòrsa a leanas.|Tha {{PLURAL:$1|an fho-roinn-seòrsa|an $1 fho-roinn-seòrsa|na $1 fo-roinnean-seòrsa|na $1 fo-roinn-seòrsa}}, aig an roinn-seòrsa a leanas, a-mach à $2 uile gu lèir.}}",
-       "category-subcat-count-limited": "Tha {{PLURAL:$1|an fho-roinn-seòrsa|na fo-roinntean-seòrsa}} a leanas sa roinn-seòrsa seo.",
+       "category-subcat-count-limited": "Tha {{PLURAL:$1|an fho-roinn-seòrsa|na fo-roinnean-seòrsa}} a leanas sa roinn-seòrsa seo.",
        "category-article-count": "{{PLURAL:$2|Chan eil ach an duilleag a leanas san fho-roinn-seòrsa seo.|Tha {{PLURAL:$1|an duilleag|an $1 dhuilleag|na $1 duilleagan|na $1 duilleag}} a leanas san roinn-seòrsa seo, a-mach à $2 uile gu lèir.}}",
        "category-article-count-limited": "Tha {{PLURAL:$1|an duilleag|an $1 dhuilleag|na $1 duilleagan|na $1 duilleag}} a leanas san roinn-seòrsa làithreach.",
        "category-file-count": "{{PLURAL:$2|Chan eil ach am faidhle a leanas san fho-roinn-seòrsa seo.|Tha {{PLURAL:$1|am faidhle|an $1 fhaidhle|na $1 faidhlichean|na $1 faidhle}} a leanas san roinn-seòrsa seo, a-mach à $2 uile gu lèir.}}",
        "index-category": "Duilleagan air a' chlàr-innse",
        "noindex-category": "Duilleagan nach eil air a' chlàr-innse",
        "broken-file-category": "Duilleagan sa bheil ceanglaichean faidhle a tha briste",
+       "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Mu",
        "article": "Duilleag susbainte",
        "newwindow": "(a' fosgladh ann an uinneag ùr)",
        "vector-view-view": "Leugh",
        "vector-view-viewsource": "Seall an tùs",
        "actions": "Gnìomhan",
+       "vector-more-actions": "Barrachd",
        "namespaces": "Namespaces",
        "variants": "Tionndaidhean",
        "navigation-heading": "Clàr-taice na seòladaireachd",
        "mediawikipage": "Seall duilleag na teachdaireachd",
        "templatepage": "Seall duilleag na teamplaide",
        "viewhelppage": "Seall an duilleag cobharach",
-       "categorypage": "Seall duilleag na roinne",
+       "categorypage": "Seall duilleag na roinn-seòrsa",
        "viewtalkpage": "Seall an deasbaireachd",
        "otherlanguages": "Ann an cànain eile",
        "redirectedfrom": "(Air ath-sheòladh o $1)",
        "jumptonavigation": "seòladh",
        "jumptosearch": "lorg",
        "view-pool-error": "Duilich, tha na frithealaichean ro thrang an-dràsta.\nTha cus chleachdaichean a' feuchainn ris an duilleag seo fhaicinn.\nFuirich ort greis mus feuch thu ris an duilleag seo fhaicinn a-rithist.\n\n$1",
+       "generic-pool-error": "Tha sinn duilich ach tha na frithealaichean ro thrang an-dràsta.\nTha cus dhaoine a' toirt sùil air a' ghoireas seo.\nFuirich ort mus feuch thu an goireas seo a-rithist.",
        "pool-timeout": "Dh'fhalbh an ùine air 's tu a' feitheamh ris a ghlas",
        "pool-queuefull": "Tha ciutha nam pròiseasan làn",
        "pool-errorunknown": "Mearachd neo-aithnichte",
+       "pool-servererror": "Chan eil seirbheis cunntadh nan amar ri fhaighinn ($1).",
        "aboutsite": "Mu dhèidhinn {{SITENAME}}",
        "aboutpage": "Project:Mu dhèidhinn",
        "copyright": "Tha susbaint ri làimh fo $1 mur eil an caochladh 'ga innse.",
-       "copyrightpage": "{{ns:project}}:Còraichean lethbhric",
+       "copyrightpage": "{{ns:project}}:Còraichean-lethbhreac",
        "currentevents": "Cùisean an latha",
        "currentevents-url": "Project:Cùisean an latha",
        "disclaimers": "Aithrisean-àichidh",
        "versionrequired": "Feum air tionndadh $1 de MhediaWiki",
        "versionrequiredtext": "Tha feum air tionndadh $1 de MhediaWiki mus faicear an duilleag seo.\nSeall air [[Special:Version|duilleag an tionndaidh]].",
        "ok": "Ceart ma-thà",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
        "retrievedfrom": "Air a tharraing à \"$1\"",
        "youhavenewmessages": "Tha $1 ($2) agad.",
        "youhavenewmessagesfromusers": "Tha $1 o {{PLURAL:$3|aon chleachdaiche|$3 chleachdaiche|$3 cleachdaichean|$3 cleachdaiche}} agad ($2).",
        "youhavenewmessagesmanyusers": "Tha $1 agad o iomadh cleachdaiche ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|teachdaireachd ùr|theachdaireachd ùr|theachdaireachdan ùra|teachdaireachd ùr}}",
+       "newmessageslinkplural": "{{PLURAL:$1|teachdaireachd ùr|theachdaireachd ùr|teachdaireachdan ùra|teachdaireachd ùr}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} mu dheireadh",
        "youhavenewmessagesmulti": "Tha teachdaireachdan ùra agad ann an $1",
        "editsection": "deasaich",
        "site-atom-feed": "$1 Inbhir Atom",
        "page-rss-feed": "\"$1\" Inbhir RSS",
        "page-atom-feed": "\"$1\" Inbhir Atom",
+       "feed-atom": "Atom",
+       "feed-rss": "RSS",
        "red-link-title": "$1 (chan eil duilleag ann fhathast)",
        "sort-descending": "Seòrsaich a' tèarnadh",
        "sort-ascending": "Seòrsaich a' dìreadh",
        "nstab-mediawiki": "Teachdaireachd",
        "nstab-template": "Teamplaid",
        "nstab-help": "Cuideachadh",
-       "nstab-category": "Roinn",
+       "nstab-category": "Roinn-seòrsa",
        "nosuchaction": "Chan eil a leithid de ghnìomh ann",
        "nosuchactiontext": "Tha an gnìomh a shònraich an t-URL mì-dhligheach.\nFaodaidh gun do chuir thu a-steach URL mearachdach no gun do lean thu ri ceangal mearachdach.\nCuideachd, faodaidh gu bheil seo 'na chomharradh air buga sa bhathar-bhog aig {{SITENAME}}",
        "nosuchspecialpage": "Chan eil duilleag shònraichte d' a leithid ann",
        "readonly": "Stòr-dàta glaiste",
        "enterlockreason": "Cuir a-steach adhbhar a' ghlais, a' gabhail a-steach tuairmeas air fuasgladh a' ghlais.",
        "readonlytext": "Tha an stòr-dàta glaiste do chlàir ùra 's mùthaidhean eile, ma dh'fhaoidte air sgàth obair-chàraidh chunbhalach an stòir-dhàta 's bidh e mar as àbhaist às dèidh sin.\n\nChuir an rianadair a ghlas e an cèill na leanas: $1",
-       "missing-article": "Cha do lorg an stòr-dàta teacsa de dhuilleag a bu chòir a bhith air a lorg aige 's air a bheil \"$1\" $2.\n\n'S e mùthaidhean no ceangal eachdraidheil ro shean ri duilleag a chaidh a sguabadh às a bhios coireach à seo mar is trice.\n\nMur eil seo fìor, faodaidh gun do lorg thu buga sa bhathar-bhog.\nAn dèan thu aithris air seo do [[Special:ListUsers/sysop|rianadair]], ag innse dhaibh dè an t-URL a bha ann.",
+       "missing-article": "Cha do lorg an stòr-dàta teacsa de dhuilleag a bu chòir a bhith air a lorg aige 's air a bheil \"$1\" $2.\n\n'S e diofar no ceangal eachdraidheil ro shean ri duilleag a chaidh a sguabadh às a bhios coireach à seo mar is trice.\n\nMur eil seo fìor, faodaidh gun do lorg thu buga sa bhathar-bhog.\nAn dèan thu aithris air seo do [[Special:ListUsers/sysop|rianadair]], ag innse dhaibh dè an t-URL a bha ann.",
        "missingarticle-rev": "(mùthadh#: $1)",
-       "missingarticle-diff": "(Diof: $1, $2)",
+       "missingarticle-diff": "(Diofar: $1, $2)",
        "readonly_lag": "Chaidh an stòr-dàta a ghlasadh leis fhèin fhad 's a tha frithealaichean nan stòr-dàta tràilleach air dheireadh a' mhaighstir",
        "internalerror": "Ion-mhearachd",
        "internalerror_info": "Ion-mhearachd: $1",
-       "filecopyerror": "Cha do ghabh lethbhreac dhen fhaidhle \"$1\" gu \"$2\".",
+       "filecopyerror": "Cha b' urrainn dhuinn lethbhreac dhen fhaidhle \"$1\" a chur gu \"$2\".",
        "filerenameerror": "Cha do ghabh ainm an fhaidhle \"$1\" atharrachadh gu \"$2\".",
        "filedeleteerror": "Cha do ghabh am faidhle \"$1\" a sguabadh às.",
        "directorycreateerror": "Cha do ghabh am pasgan \"$1\" a chruthachadh.",
        "cannotdelete": "Cha do ghabh an duilleag no am faidhle \"$1\" a sguabadh às.\nFaodaidh gun deach a sguabadh às le cuideigin eile mu thràth.",
        "cannotdelete-title": "Cha ghabh an duilleag \"$1\" a sguabadh às",
        "delete-hook-aborted": "Sguireadh dhen sguabadh às ri linn dubhain.\nCha deach adhbhar a thoirt seachad.",
-       "no-null-revision": "Cha b' urrainn dhuinn lèirmheas neoinitheach ùr a chruthachadh dhan duilleag \"$1\"",
+       "no-null-revision": "Cha b' urrainn dhuinn mùthadh neoinitheach ùr a chruthachadh dhan duilleag \"$1\"",
        "badtitle": "Droch thiotal",
-       "badtitletext": "Bha an duilleag a dh'iarr thu mì-dhligheach, falamh no le tiotal eadar-chànanach no eadar-uici air a dhroch cheangal.\nFaodaidh gu bheil aon no barrachd charactairean ann nach urrainn dhut a chleachdadh ann an tiotalan.",
+       "badtitletext": "Bha an duilleag a dh'iarr thu mì-dhligheach, falamh no le tiotal eadar-chànanach no eadar-uicidh air a dhroch cheangal.\nFaodaidh gu bheil aon no barrachd charactairean ann nach urrainn dhut a chleachdadh ann an tiotalan.",
        "perfcached": "Chaidh an dàta a leanas a thasgadh 's faodaidh gu bheil e air dheireadh. Tha {{PLURAL:$1|$1 toradh|$1 thoradh|$1 toraidhean|$1 toradh}} ri fhaighinn san tasgadan air a' char as motha.",
        "perfcachedts": "Chaidh an dàta a leanas a thasgadh agus chaidh ùrachadh $1 turas mu dheireadh. Tha {{PLURAL:$4|$4 toradh|$4 thoradh|$4 toraidhean|$4 toradh}} ri fhaighinn san tasgadan air a' char as motha.",
        "querypage-no-updates": "Tha ùrachadh air a chur à comas air an duilleag seo an-dràsta.\nCha dèid an dàta an-seo ùrachadh aig an àm seo.",
        "actionthrottledtext": "Gus casg a chur air spama, chan urrainn dhut an gnìomh seo a dhèanamh ro thric am broinn ùine ghoirid agus chaidh thu thairis air a' chrìoch seo.\nFeuch ris a-rithist às a dhèidh seo.",
        "protectedpagetext": "Chaidh an duilleag seo a dhìon gus casg a chur air deasachadh.",
        "viewsourcetext": "'S urrainn dhut coimhead air tùs na duilleige seo 's lethbhreac a dhèanamh dheth:",
-       "viewyourtext": "'S urrainn dhut coimhead air '''na mhùthaich thu''' 's lethbhreac a dhèanamh dheth air an duilleag seo:",
-       "protectedinterface": "Bheir an duilleag seo dhut teacsa eadar-aghaidh airson a' bhathar-bhog air an uicipeid seo 's chaidh a ghlasadh gus casg a chur air mì-chleachdadh. Gus eadar-theangachadh atharrachadh no a chur ris airson gach uicipeid, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
-       "editinginterface": "'''Rabhadh:''' Tha thu a' deasachadh duilleag a tha 'ga chleachdadh a chum teacsa eadar-aghaidh a sholar airson a' bhathar-bhog.\nMa dh'atharraicheas tu an duilleag seo, bidh buaidh ann air coltas na h-eadar-aghaidh mar a chì càch e air an uicipeid seo.\nGus eadar-theangachadh atharrachadh no a chur ris airson gach uicipeid, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
+       "viewyourtext": "'S urrainn dhut coimhead air '''na dheasaich thu''' 's lethbhreac a dhèanamh dheth air an duilleag seo:",
+       "protectedinterface": "Bheir an duilleag seo dhut teacsa eadar-aghaidh airson a' bhathar-bhog air an uicidh seo 's chaidh a ghlasadh gus casg a chur air mì-chleachdadh. Gus eadar-theangachadh atharrachadh no a chur ris airson gach uicidh, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
+       "editinginterface": "'''Rabhadh:''' Tha thu a' deasachadh duilleag a tha 'ga chleachdadh a chum teacsa eadar-aghaidh a sholar airson a' bhathar-bhog.\nMa dh'atharraicheas tu an duilleag seo, bidh buaidh ann air coltas na h-eadar-aghaidh mar a chì càch e air an uicidh seo.\nGus eadar-theangachadh atharrachadh no a chur ris airson gach uicidh, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
        "cascadeprotected": "Chaidh an duilleag seo a dhìon o dheasachadh a chionn 's gu bheil e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a chaidh an dìon 's an roghainn \"mar eas\" air:\n$2",
        "namespaceprotected": "Chan eil cead agad duilleagan san namespace '''$1''' a dheasachadh.",
        "customcssprotected": "Chan eil cead agad an duilleag CSS seo a dheasachadh a chionn 's gu bheil na roghainnean pearsanta aig cleachdaiche eile innte.",
        "invalidtitle-unknownnamespace": "Tiotal mì-dhligheach leis an àireamh namespace $1 agus an teacsa \"$2\"",
        "exception-nologin": "Chan eil thu air clàradh a-steach",
        "exception-nologin-text": "Feumaidh tu [[Special:Userlogin|clàradh a-steach]] mus fhaic thu an duilleag seo no mus urrainn dhut seo a dhèanamh.",
+       "exception-nologin-text-manual": "Ma tha thu ag iarraidh cothrom air an duilleag no air a' ghnìomh seo, $1.",
        "virus-badscanner": "Droch cho-dhealbhachd: sganair bhìorasan neo-aithnichte: ''$1''",
        "virus-scanfailed": "dh'fhàillig an sganadh (còd $1)",
        "virus-unknownscanner": "sganair bhìorasan neo-aithnichte:",
        "gotaccountlink": "Log a-steach",
        "userlogin-resetlink": "Na dhìochuimhnich thu d' ainm is facal-faire?",
        "userlogin-resetpassword-link": "Na dhìochuimhnich thu am facal-faire agad?",
+       "userlogin-helplink2": "Taic le clàradh a-steach",
        "userlogin-loggedin": "Chaidh do chlàradh mar {{GENDER:$1|$1}} mu thràth.\nCleachd am foirm gu h-ìosal airson clàradh a-steach mar chleachdaiche eile.",
        "userlogin-createanother": "Cruthaich cunntas eile",
        "createacct-emailrequired": "Seòladh puist-d",
        "nocookiesnew": "Chaidh an cunntas a chruthachadh ach cha do rinn thu logadh a-steach.\nTha {{SITENAME}} a' cleachdadh briosgaidean gus daoine a logadh a-steach.\nChuir thu na briosgaidean à comas.\nCuir am comas iad agus log a-steach leis an ainm-chleachdaiche 's am facal-faire agad an uairsin.",
        "nocookieslogin": "Tha {{SITENAME}} a' cleachdadh briosgaidean gus daoine a logadh a-steach.\nChuir thu briosgaidean à comas.\nCuir an comas iad is feuch ris a-rithist.",
        "nocookiesfornew": "Cha deach an cunntas a chruthachadh oir cha b' urrainn dhuinn a thùs a dhearbhadh.\nDèan cinnteach gu bheil briosgaidean an comas, ath-luchdaich an duilleag seo 's feuch ris a-rithist.",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "Cha do thagh thu ainm-cleachdaiche dligheach.",
        "loginsuccesstitle": "Rinn thu logadh a-steach",
        "loginsuccess": "'''Rinn thu logadh a-steach air {{SITENAME}} mar \"$1\".'''",
        "eauthentsent": "Chaidh post-d dearbhaidh a chur dhan phost-d a chaidh ainmeachadh.\nMus dèid post-d sam bith eile a chur dhan chunntas, feumaidh tu leantainn ris an stiùireadh sa phost-d mar dhearbhadh gur ann agadsa a tha an cunntas.",
        "throttled-mailpassword": "Chaidh post-d a chur airson ath-shuidheachadh facail-fhaire mu thràth {{PLURAL:$1|uair|$1 uair|$1 uairean|$1 uair}} a thìde air ais.\nGus casg a chur air mì-ghnàthachadh, cha chuir sinn ach aon chuimhneachan facail-fhaire gach {{PLURAL:$1|uair|$1 uair|$1 uairean|$1 uair}} a thìde.",
        "mailerror": "Mearachd a' cur post: $1",
-       "acct_creation_throttle_hit": "Chruthaich na h-aoighean air an Uici seo {{PLURAL:$1|1 chunntas|$1 chunntas|$1 cunntasan|$1 cunntas}} fon IP agad an-dè agus sin an àireamh as motha a tha ceadaichte. Chan urrainn do dh'aoighean eile on IP seo barrachd chunntasan a chruthachadh air sgàth sin.",
+       "acct_creation_throttle_hit": "Chruthaich na h-aoighean air an uicidh seo {{PLURAL:$1|1 chunntas|$1 chunntas|$1 cunntasan|$1 cunntas}} fon IP agad an-dè agus sin an àireamh as motha a tha ceadaichte. Chan urrainn do dh'aoighean eile on IP seo barrachd chunntasan a chruthachadh air sgàth sin.",
        "emailauthenticated": "Chaidh an seòladh puist-d agad a dhearbhadh $2 aig $3.",
        "emailnotauthenticated": "Cha deach am post-d agad a dhearbhadh fhathast.\nCha dèid post-d a chur airson gin dhe na feartan a leanas.",
        "noemailprefs": "Sònraich post-d sna roghainnean agad gus na feartan seo a chur an comas.",
        "user-mail-no-body": "Bha bodhaig na teachdaireachd bàn no air leth goirid.",
        "changepassword": "Atharraich facal-faire",
        "resetpass_announce": "Gus an clàradh a-steach a choileanadh, tha agad ri facal-faire ùr a shuidheachadh.",
+       "resetpass_text": "<!-- Cuir teacsa an-seo -->",
        "resetpass_header": "Atharraich facal-faire a' chunntais",
        "oldpassword": "Seann fhacal-faire",
        "newpassword": "Facal-faire ùr",
        "resetpass-submit-loggedin": "Atharraich am facal-faire",
        "resetpass-submit-cancel": "Sguir dheth",
        "resetpass-wrong-oldpass": "Tha am facal-faire sealach no làithreach mì-dhligheach.\nSaoil an do dh'atharraich thu am facal-faire agad mu thràth no an do dh'iarr thu facal-faire sealach ùr?",
+       "resetpass-recycled": "Tagh facal-faire ùr nach eil co-ionnann ris an fhacal-fhaire a tha agad an-dràsta.",
+       "resetpass-temp-emailed": "Rinn thu clàradh a-steach le còd sealach a fhuair thu air a' phost-d.\nAirson clàradh a-steach slàn a dhèanamh, feumaidh tu facal-faire ùr a shuidheachadh an-seo:",
        "resetpass-temp-password": "Facal-faire sealach:",
        "resetpass-abort-generic": "Chuir leudachan crìoch air atharrachadh an fhacail-fhaire.",
+       "resetpass-expired": "Dh'fhalbh an ùine air an fhacal-fhaire agad. Suidhich facal-faire ùr airson clàradh a-steach.",
+       "resetpass-expired-soft": "Dh'fhalbh an ùine air an fhacal-fhaire agad is feumaidh tu ath-shuidheachadh. Tagh fear ùr no briog air \"{{int:resetpass-submit-cancel}}\" gus ath-shuidheachadh às a dhèidh seo.",
+       "resetpass-validity-soft": "Chan eil am facal-faire seo dligheach: $1\n\nTagh facal-faire ùr an-dràsta no briog air \"{{int:resetpass-submit-cancel}}\" gus ath-shuidheachadh às a dhèidh seo.",
        "passwordreset": "Ath-shuidhich am facal-faire",
        "passwordreset-text-one": "Lìon am foirm seo gus am facal-faire agad ath-shuidheachadh.",
        "passwordreset-text-many": "{{PLURAL:$1|Lìon aon dhe na raointean gus facal-faire sealach fhaighinn ann am post-d.}}",
        "passwordreset-legend": "Ath-shuidhich am facal-faire",
-       "passwordreset-disabled": "Chaidh ath-shuidheachadh nam faclan-faire a chur à comas air an uicipeid seo.",
-       "passwordreset-emaildisabled": "Chaidh feartan a' phuist-d a chur à comas san uicipeid seo.",
+       "passwordreset-disabled": "Chaidh ath-shuidheachadh nam faclan-faire a chur à comas air an uicidh seo.",
+       "passwordreset-emaildisabled": "Chaidh feartan a' phuist-d a chur à comas san uicidh seo.",
        "passwordreset-username": "Ainm-cleachdaiche:",
        "passwordreset-domain": "Àrainn-lìn:",
        "passwordreset-capture": "A bheil thu airson coimhead air a' phost-d?",
        "changeemail-password": "Am facal-faire agad air {{SITENAME}}:",
        "changeemail-submit": "Atharraich am post-d",
        "changeemail-cancel": "Sguir dheth",
+       "changeemail-throttled": "Dh'fheuch thu ri clàradh a-steach ro thric.\nFuirich ort $1 mus feuch thu ris a-rithist.",
        "resettokens": "Ath-shuidhich na tòcanan",
        "resettokens-text": "'S urrainn dhut tòcanan ath-shuidheachadh a bheir cothrom dhut air cuid a dhàta prìobhaideach a tha co-cheangailte ris a' chunntas agad.\n\nBu chòir dhut seo a dhèanamh ma thug thu do chuideigin e air mhearachd no ma bhris cuideigin a-steach air a' chunntas agad.",
        "resettokens-no-tokens": "Chan eil tòcan ann a ghabhas ath-shuidheachadh.",
        "headline_sample": "Teacsa ceann-loidhne",
        "headline_tip": "Ceann-loidhne ìre 2",
        "nowiki_sample": "Cuir a-steach teacsa gun fhòrmatadh an-seo",
-       "nowiki_tip": "Leig seachad fòrmatadh uici",
+       "nowiki_tip": "Leig seachad fòrmatadh uicidh",
        "image_sample": "Eisimpleir.jpg",
        "image_tip": "Faidhle air a leabachadh",
        "media_sample": "Eisimpleir.ogg",
        "editingsection": "A' deasachadh $1 (earrann)",
        "editingcomment": "A' deasachadh $1 (earrann ùr)",
        "editconflict": "Còmhstri deasachaidh: $1",
-       "explainconflict": "Tha cuideigin eile air an duilleag seo a mhùthadh on a thòisich thu fhèin air a dheasachadh.\nTha am bogsa teacsa gu h-àrd a' nochdadh na duilleige mar a tha i an-dràsta.\nTha na mùthaidhean agadsa sa bhogsa gu h-ìosal.\nBidh agad ris na mùthaidhean agad fhilleadh a-steach san teacsa làithreach.\nCha dèid '''ach an teacsa gu h-àrd''' a shàbhaladh nuair a bhriogas tu air \"{{int:savearticle}}\".",
+       "explainconflict": "Tha cuideigin eile air an duilleag seo a mhùthadh on a thòisich thu fhèin air a dheasachadh.\nTha am bogsa teacsa gu h-àrd a' nochdadh na duilleige mar a tha i an-dràsta.\nTha na mùthaidhean agadsa sa bhogsa gu h-ìosal.\nBidh agad ris na mùthaidhean agad a cho-aonachadh ris an teacsa làithreach.\nCha dèid '''ach an teacsa gu h-àrd''' a shàbhaladh nuair a bhriogas tu air \"{{int:savearticle}}\".",
        "yourtext": "An teacsa agad",
-       "storedversion": "Lethbhreac taisgte",
+       "storedversion": "Mùthadh taisgte",
        "nonunicodebrowser": "'''Rabhadh: Chan eil am brabhsair agad co-chòrdail le Unicode.'''\nChuir sinn gleus air dòigh dhut a nì cinnteach gun urrainn dhut duilleagan a shàbhaladh gu tèarainte: Nochdaidh caractaran taobh a-muigh ASCII mar chòd sia-dheicheach sa bhogsa deasachaidh.",
-       "editingold": "'''RABHADH: Tha thu a' deasachadh lethbhreac seann-aimsireil na duilleige seo.\nMa shàbhalas tu seo, thèid gach mùthadh air chall a rinneadh a-mach on mhùthadh seo.'''",
-       "yourdiff": "Caochlaidhean",
-       "copyrightwarning": "Thoir an aire gu bheilear a' tuigsinn gu bheil gach rud a chuireas tu ri {{SITENAME}} air a leigeil mu sgaoil fo $2 (see $1 airson mion-fhiosrachadh).\nMura bi thu toilichte 's daoine eile a' deasachadh gun tròcair na sgrìobh tu 's 'ga sgaoileadh mar a thogras iad, na cuir an-seo e.<br />\nTha thu a' toirt geall cuideachd gun do sgrìobh thu fhèin seo no gun do rinn thu lethbhreac dheth o àrainn phoblach no tùs saor coltach ris.\n'''Na cuir ann rudan fo chòir lethbhric gun chead!'''",
-       "copyrightwarning2": "Ged a thatar gur moladh {{SITENAME}} a chruthachadh, a mheudachadh, is a leasachadh, thèid droch dheasaicheidhean a chur air imrich gu luath.\nMur eil thu ag iarraidh an sgrìobhaidh agad a dheasaichear is a sgaoilear le càch, na cuir e.<br />\nMa dh'fhoilleachas tu rudeigin an seo, bidh tu a' dearbhadh gun do sgrìobh thu fhèin e, no gur ann às an raon phòballach a thàinig e; thoir aire '''nach eil''' sin a' gabhail a-staigh duilleagan-lìn mar as àbhaist (seall $1 airson barrachd fiosrachaidh). <br />\n'''NA CLEACHDAIBH SAOTHAIR FO DHLIGHE-SGRÌOBHAIDH GUN CHEAD!'''",
+       "editingold": "'''RABHADH: Tha thu a' deasachadh seann-mhùthadh na duilleige seo.\nMa shàbhaileas tu seo, thèid gach atharrachadh air chall a rinneadh a-mach on mhùthadh seo.'''",
+       "yourdiff": "Diofaran",
+       "copyrightwarning": "Thoir an aire gu bheilear a' tuigsinn gu bheil gach rud a chuireas tu ri {{SITENAME}} air a leigeil mu sgaoil fo $2 (see $1 airson mion-fhiosrachadh).\nMura bi thu toilichte 's daoine eile a' deasachadh gun tròcair na sgrìobh tu 's 'ga sgaoileadh mar a thogras iad, na cuir an-seo e.<br />\nTha thu a' toirt geall cuideachd gun do sgrìobh thu fhèin seo no gun do rinn thu lethbhreac dheth o àrainn phoblach no tùs saor coltach ris.\n'''Na cuir ann rudan fo chòir-lethbhreac gun chead!'''",
+       "copyrightwarning2": "Thoir an aire gum faod càch gach rud a chuireas tu ri {{SITENAME}} a dheasachadh, atharrachadh no a thoirt air falbh.\nMur eil thu ag iarraidh gun deasaich cuideigin eile na sgrìobh thu gun truas, na cuir a-null e.<br />\nNì thu gealladh dhuinn cuideachd gur e thu fhèin a sgrìobh e no gun do rinn thu lethbhreac dheth o Public Domain no stòras saor dhen leithid (faic $1 airson barrachd fiosrachaidh). <br />\n<strong>Na cuir a-null obair a tha fo chòir-lethbhreac gun chead!</strong>",
        "longpageerror": "Mearachd: Tha an teacsa a chur thu thugainn {{PLURAL:$1 kilobyte|$1 kilobytes}} a dh'fhaid is tha sin nas fhaide na tha ceadaichte ({{PLURAL:$2 kilobyte|$2 kilobytes}}).'''\nCha ghabh a shàbhaladh.",
        "readonlywarning": "'''Rabhadh: Chaidh an stòr-dàta a ghlasadh a chum obair-ghlèidhidh agus chan urrainn dhut na dheasaich thu a shàbhaladh an-dràsta fhèin.'''\n'S mathaid gum b' fheairrde dhut lethbhreac a dhèanamh dhen teacsa agus a shàbhaladh ann am faidhle ach an urrainn dhut a chleachdadh as a dhèidh seo.\n\nSeo am mìneachadh a thug an rianaire a ghlais e: $1",
        "protectedpagewarning": "'''Rabhadh: Chaidh an duilleag seo a dhìon 's chan urrainn ach dhan fheadhainn aig a bheil ùghdarras rianaire a dheasachadh.'''\nChì thu an clàr mu dheireadh san loga mar fhiosrachadh dhut gu h-ìosal:",
        "semiprotectedpagewarning": "'''An aire:''' Chaidh an duilleag seo a dhìon 's chan fhaod ach cleachdaichean clàraichte a dheasachadh.\nSeo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
-       "cascadeprotectedwarning": "'''Rabhadh:''' Chaidh an duilleag seo a dhìon 's chan fhaod ach rianairean a dheasachadh a chionn 's gun robh e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a tha cascade-protected.",
+       "cascadeprotectedwarning": "'''Rabhadh:''' Chaidh an duilleag seo a dhìon 's chan fhaod ach rianairean a dheasachadh a chionn 's gun robh e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a tha dìonta o cascade.",
        "titleprotectedwarning": "'''Rabhadh: Chaidh an duilleag seo a dhìon 's feumar [[Special:ListGroupRights|còraichean sònraichte]] gus a dheasachadh.'''\nSeo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
        "templatesused": "Tha {{PLURAL:$1|teamplaid|theamplaid|teamplaidean|teamplaid}} 'gan cleachdadh air an duilleag seo:",
        "templatesusedpreview": "Tha {{PLURAL:$1|1 teamplaid 'ga cleachdadh|$1 theamplaid 'gan cleachdadh|$1 teamplaidean 'gan cleachdadh|$1 teamplaid 'gan cleachdadh}} san ro-shealladh seo:",
        "template-protected": "(air a dhìon)",
        "template-semiprotected": "(air a leth-dhìon)",
        "hiddencategories": "Tha an duilleag seo 'na ball de {{PLURAL:$1|1 roinn-seòrsa fhalaichte|$1 roinn-seòrsa fhalaichte|$1 roinnean-seòrsa falaichte|$1 roinn-seòrsa fhalaichte}}:",
+       "edittools": "<!-- Nochdaidh an teacsa seo fo fhoirmean deasachaidh 's luchdaidh suas. -->",
+       "edittools-upload": "-",
        "nocreatetext": "Chuir {{SITENAME}} bacadh air cruthachadh de dhuilleagan ùra.\n'S urrainn dhut tilleadh is duilleag a tha ann mu thràth a dheasachadh no [[Special:UserLogin|clàradh a-steach no cunntas a chruthachadh]].",
        "nocreate-loggedin": "Chan eil cead agad duilleagan ùra a chruthachadh.",
        "sectioneditnotsupported-title": "Chan eil taic ri deasachadh earrannan",
        "edit-gone-missing": "Cha b' urrainn dhuinn an duilleag ath-nuadhachadh.\nTha coltas gun deach a sguabadh às.",
        "edit-conflict": "Còmhstri deasachaidh.",
        "edit-no-change": "Chaidh an obair-dheasachaidh agad a leigeil seachad a chionn 's nach do dh'atharraich thu dad.",
+       "postedit-confirmation-created": "Chaidh an duilleag a chruthachadh.",
+       "postedit-confirmation-restored": "Chaidh an duilleag aiseag.",
        "postedit-confirmation-saved": "Chaidh na dheasaich thu a shàbhaladh.",
        "edit-already-exists": "Cha b' urrainn dhuinn an duilleag ùr a chruthachadh.\nTha e ann mu thràth.",
        "defaultmessagetext": "Teacsa bunaiteach na teachdaireachd",
        "content-failed-to-parse": "Dh'fhàillig parsadh susbaint $2 airson modail $1: $3",
        "invalid-content-data": "Dàta susbaint a tha mì-dhligheach",
        "content-not-allowed-here": "Chan eil susbaint \"$1\" ceadaichte air an duilleag [[$2]]",
-       "editwarning-warning": "Ma dh'fhàgas tu an duilleag seo, faodaidh gun caill thu mùthadh sam bith a rinn thu.\nMa tha thu air logadh a-steach, 's urrainn dhut an rabhadh seo a chur dheth san roinn \"Deasachadh\" sna roghainnean agad.",
+       "editwarning-warning": "Ma dh'fhàgas tu an duilleag seo, faodaidh gun caill thu mùthadh sam bith a rinn thu.\nMa tha thu air logadh a-steach, 's urrainn dhut an rabhadh seo a chur dheth san earrann \"{{int:prefs-editing}}\" anns na roghainnean agad.",
+       "editpage-notsupportedcontentformat-title": "Chan eil taic ri fòrmat na susbaint",
+       "editpage-notsupportedcontentformat-text": "Chan eil modail na susbaint \"$2\" a' cur taic ri fòrmat na susbaint \"$1\".",
        "content-model-wikitext": "wikitext",
        "content-model-text": "teacsa lom",
        "content-model-javascript": "JavaScript",
        "parser-template-recursion-depth-warning": "Chaidh thu thairis air crìoch doimhne nan ath-chùrsaidhean teamplaid ($1)",
        "language-converter-depth-warning": "Chaidh thu thairis air crìoch doimhne an iompachair chànain ($1)",
        "node-count-exceeded-category": "Duilleagan far an deachas thairis air cunntas nan nòdan",
+       "node-count-exceeded-category-desc": "Roinn-seòrsa airson duilleagan far a bheilear thairis air crìoch nan nòdan.",
        "node-count-exceeded-warning": "Chaidh an duilleag thairis air cunntas nan nòdan",
        "expansion-depth-exceeded-category": "Duilleagan far an deachas thairis air a' chrìoch leudachaidh",
+       "expansion-depth-exceeded-category-desc": "Seo roinn-seòrsa airson duilleagan far a bheilear thairis air doimhne an leudachaidh.",
        "expansion-depth-exceeded-warning": "Chaidh an duilleag thairis air an doimhne leudachaidh",
        "parser-unstrip-loop-warning": "Mhothaich sinn do lùb unstrip",
        "parser-unstrip-recursion-limit": "Chaidheas thairis air crìoch unstrip recursion ($1)",
        "undo-success": "Gabhaidh an deasachadh seo a neo-dhèanamh.\nThoir sùil air a' choimeas gu h-ìosal is dearbh gur e sin a tha fa-near dhut agus sàbhail na h-atharraichean gu h-ìosal gus neo-dhèanamh an deasachaidh a choileanadh.",
        "undo-failure": "Cha b' urrainn dhuinn an deasachadh a neo-dhèanamh air sgàth 's gun robh deasachaidhean eile sa mheadhan.",
        "undo-norev": "Cha b' urrainn dhuinn an deasachadh a neo-dhèanamh a chionn 's nach robh e ann no gun deach a sguabadh às.",
+       "undo-nochange": "Tha coltas gun deach am mùthadh seo a neo-dhèanamh mu thràth.",
        "undo-summary": "Neo-dhèan mùthadh $1 le [[Special:Contributions/$2|$2]] ([[User talk:$2|Deasbaireachd]])",
        "undo-summary-username-hidden": "Neo-dhèan am mùthadh $1 le cleachdaiche falaichte",
        "cantcreateaccounttitle": "Cha ghabh an cunntas a chruthachadh",
        "cantcreateaccount-text": "Chuir [[User:$3|$3]] bacadh air cruthachadh chunntasan on t-seòladh IP seo ('''$1''').\n\nDh'innise $3 gun do rinn iad seo air sgàth: ''$2''",
+       "cantcreateaccount-range-text": "Chuir [[User:$3|$3]] casg air daoine a tha airson cunntasan a chruthachadh on sheòlaidhean IP taobh a-staigh na rainse '''$1''' agus tha sin a' gabhail a-steach an t-seòlaidh IP agad-sa ('''$4''').\n\nThuir $3 gun do rinn iad seo air sgàth an adhbhair seo: ''$2''",
        "viewpagelogs": "Seall logaichean na duilleige seo",
        "nohistory": "Chan eil eachdraidh deasachaidh aig an duilleag seo.",
-       "currentrev": "Lethbhreac làithreach",
+       "currentrev": "Am mùthadh mu dheireadh",
        "currentrev-asof": "Am mùthadh mu dheireadh on $1",
        "revisionasof": "Mùthadh on $1",
-       "revision-info": "Lèirmheas mar a bha e $1 le $2",
+       "revision-info": "Am mùthadh mar a bha e $1 le $2 $7",
        "previousrevision": "← Mùthadh nas sine",
        "nextrevision": "Mùthadh nas ùire →",
        "currentrevisionlink": "Am mùthadh mu dheireadh",
        "last": "roimhe",
        "page_first": "Toiseach",
        "page_last": "Deireadh",
-       "histlegend": "Taghadh nan diofar: comharraich bogsaichean rèidio nam mùthaidhean gus coimeas a dhèanamh agus put Enter no am putan gu h-ìosal.<br />\nMìneachadh: '''({{int:cur}})''' = an diofar eadar e 's am mùthadh as ùire, '''({{int:last}})''' = an diofar eadar e 's am mùthadh roimhe, '''{{int:minoreditletter}}''' = deasachadh beag.",
+       "histlegend": "Taghadh nan diofar: comharraich bogsaichean rèidio nam mùthaidhean gus coimeas a dhèanamh agus put Enter no am putan gu h-ìosal.<br />\nTreòir: '''({{int:cur}})''' = an diofar eadar e 's am mùthadh as ùire, '''({{int:last}})''' = an diofar eadar e 's am mùthadh roimhe, '''{{int:minoreditletter}}''' = deasachadh beag.",
        "history-fieldset-title": "An eachdraidh brabhsaidh",
        "history-show-deleted": "Na chaidh sguabadh às a-mhàin",
        "histfirst": "as sine",
        "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
        "historyempty": "(falamh)",
        "history-feed-title": "Eachdraidh nam mùthaidhean",
-       "history-feed-description": "Eachdraidh nam mùthaidhean airson na duilleige seo air an uici",
+       "history-feed-description": "Eachdraidh nam mùthaidhean airson na duilleige seo air an uicidh",
        "history-feed-item-nocomment": "$1 $2",
-       "history-feed-empty": "Chan eil an duilleag a dh'iarr thu ann.\nDh'fhaoidte gun deach a sguabadh às an uici no gun deach ainm ùr a chur air.\nFeuch is [[Special:Search|lorg duilleagan ùra iomachaidh air an uici]]",
+       "history-feed-empty": "Chan eil an duilleag a dh'iarr thu ann.\nDh'fhaoidte gun deach a sguabadh às an uicidh no gun deach ainm ùr a chur air.\nFeuch is [[Special:Search|lorg duilleagan ùra iomachaidh air an uicidh]]",
        "rev-deleted-comment": "(chaidh gearr-chunntas an deasachaidh a thoirt air falbh)",
        "rev-deleted-user": "(chaidh an t-ainm-cleachdaiche a thoirt air falbh)",
        "rev-deleted-event": "(chaidh gnìomh an loga a thoirt air falbh)",
        "rev-suppressed-text-unhide": "Chaidh mùthadh na duilleige seo '''a mhùchadh'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].\n'S urrainn dhut [$1 am mùthadh seo fhaicinn fhathast] ma tha thu airson leantainn air adhart.",
        "rev-deleted-text-view": "Chaidh mùthadh na duilleige seo '''a sguabadh às'''.\n'S urrainn dhut coimhead air, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
        "rev-suppressed-text-view": "Chaidh mùthadh na duilleige seo '''a mhùchadh'''.\n'S urrainn dhut coimhead air, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].",
-       "rev-deleted-no-diff": "Chan fhaic thu an diff seo a chionn 's gun deach aon dhe na mùthaidhean '''a sguabadh às'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
-       "rev-suppressed-no-diff": "Chan fhaic thu an diff seo a chionn 's gun deach aon dhe na mùthaidhean '''a sguabadh às'''.",
-       "rev-deleted-unhide-diff": "Chaidh mùthadh dhen diff seo '''a sguabadh às'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].\n'S urrainn dhut [$1 coimhead air an diff seo fhathast] ma tha thu airson leantainn air adhart.",
-       "rev-suppressed-unhide-diff": "Chaidh mùthadh an diff seo '''a mhùchadh'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].\n'S urrainn dhut [$1 coimhead air an diff seo fhathast] ma tha thu airson leantainn air adhart.",
-       "rev-deleted-diff-view": "Chaidh mùthadh an diff seo '''a sguabadh às'''.\n'S urrainn dhut coimhead air an diff seo, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
-       "rev-suppressed-diff-view": "Chaidh mùthadh an diff seo '''a mhùchadh'''.\n'S urrainn dhut coimhead air an diff seo, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].",
+       "rev-deleted-no-diff": "Chan fhaic thu an diofar seo a chionn 's gun deach aon dhe na mùthaidhean '''a sguabadh às'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
+       "rev-suppressed-no-diff": "Chan fhaic thu an diofar seo a chionn 's gun deach aon dhe na mùthaidhean '''a sguabadh às'''.",
+       "rev-deleted-unhide-diff": "Chaidh mùthadh an diofair seo '''a sguabadh às'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].\n'S urrainn dhut [$1 coimhead air an diofar seo fhathast] ma tha thu airson leantainn air adhart.",
+       "rev-suppressed-unhide-diff": "Chaidh mùthadh an diofair seo '''a mhùchadh'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].\n'S urrainn dhut [$1 coimhead air an diofar seo fhathast] ma tha thu airson leantainn air adhart.",
+       "rev-deleted-diff-view": "Chaidh mùthadh an diofair seo '''a sguabadh às'''.\n'S urrainn dhut coimhead air an diofar seo, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
+       "rev-suppressed-diff-view": "Chaidh mùthadh an diofair seo '''a mhùchadh'''.\n'S urrainn dhut coimhead air an diofar seo, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].",
        "rev-delundel": "seall/falaich",
        "rev-showdeleted": "seall",
-       "revisiondelete": "Sguab às/neo-dhèan sguabadh às mhùthaidhean",
+       "revisiondelete": "Sguab às/neo-dhèan sguabadh às mùthaidhean",
        "revdelete-nooldid-title": "Tha am mùthadh seo mì-dhligheach",
        "revdelete-nooldid-text": "Cha do shònraich thu mùthadh airson seo a dhèanamh, chan eil e ann no tha thu a' feuchainn ris am mùthadh làithreach a chur am falach.",
        "revdelete-no-file": "Chan eil am faidhle a shònraich thu ann.",
        "revdelete-show-file-confirm": "A bheil thu cinnteach gu bheil thu airson coimhead air mùthadh an fhaidhle \"<nowiki>$1</nowiki>\" a chaidh a sguabadh às $2 aig $3?",
        "revdelete-show-file-submit": "Tha",
+       "revdelete-selected-text": "{{PLURAL:$1|Mùthadh|Mùthaidhean}} de [[:$2]] a thagh thu:",
+       "revdelete-selected-file": "{{PLURAL:$1|Tionndadh an fhaidhle|Tionndadh nam faidhlichean|Tionndadh nam faidhlichean|Tionndadh nam faidhlichean|Tionndadh nam faidhlichean|Tionndadh nam faidhlichean}} a thagh thu à [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|An tachartas loga|Na tachartasan loga}} a thagh thu:",
+       "revdelete-text-text": "Nochdaidh mùthaidhean a chaidh a sguabadh às ann an eachdraidh na duilleige fhathast ach chan fhaic buill a' phobaill cuid dhen t-susbaint aca.",
+       "revdelete-text-file": "Nochdaidh tionndaidhean dhen fhaidhle a chaidh a sguabadh às ann an eachdraidh na duilleige fhathast ach chan fhaic buill a' phobaill cuid dhen t-susbaint aca.",
+       "logdelete-text": "Nochdaidh tachartasan san loga a chaidh a sguabadh às ann an eachdraidh na duilleige fhathast ach chan fhaic buill a' phobaill cuid dhen t-susbaint aca.",
+       "revdelete-text-others": "Gheibh rianairean eile air {{SITENAME}} cothrom air an t-susbaint fhalaichte fhathast agus is urrainn dhaibh an sguabadh às a neo-dhèanamh san dearbh eadar-aghaidh mur an deach cuingeachaidhean a bharrachd a chur orra.",
        "revdelete-confirm": "Dearbh gu bheil thu airson seo a dhèanamh, gu bheil thu a' tuigsinn na thachras ri linn agus gu bheil thu a' dèanamh seo a-rèir [[{{MediaWiki:Policy-url}}|a' phoileasaidh]].",
        "revdelete-suppress-text": "Cha bu chòir dhut mùchadh a chleachdadh '''ach''' ann an suidheachaidhean mar seo:\n* Fiosrachadh a dh'fhaodadh a bhith dìteachail\n* Fiosrachadh pearsanta a tha cearr\n*: ''seòladh taige, àireamhan fòn, àireamhan NI is msaa.''",
        "revdelete-legend": "Suidhich cuingeachaidhean na faicsinneachd",
        "revdelete-suppress": "Mùch dàta o rianairean agus càch",
        "revdelete-unsuppress": "Thoir air falbh na bacaidhean air mùthaidhean a chaidh aiseag",
        "revdelete-log": "Adhbhar:",
-       "revdelete-submit": "Cuir air {{PLURAL:$1|an lèirmheas|na lèirmheasan}} a thagh thu",
+       "revdelete-submit": "Cuir an sàs air {{PLURAL:$1|am mùthadh|na mùthaidhean}} a thagh thu",
        "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.'''",
        "revdel-restore": "mùth follaiseachd",
        "pagehist": "Eachdraidh na duilleige",
        "deletedhist": "Eachdraidh a chaidh a sguabadh às",
-       "revdelete-hide-current": "Mearachd a' cur am falach an nì dhen $2, $1: Seo an lèirmheas làithreach. Cha ghabh a chur am falach.",
+       "revdelete-hide-current": "Mearachd a' cur am falach an nì dhen $2, $1: Seo am mùthadh làithreach. Cha ghabh a chur am falach.",
        "revdelete-show-no-access": "Mearachd a' sealltainn an nì on $2, $1: Tha comharra ann a dh'innseas gu bheil e \"cuingichte\".\nChan eil cothrom agad air.",
        "revdelete-modify-no-access": "Mearachd ag atharrachadh an nì on $2, $1: Tha comharra ann a dh'innseas gu bheil e \"cuingichte\".\nChan eil cothrom agad air.",
        "revdelete-modify-missing": "Mearachd ag atharrachadh an nì leis an ID $1: Chan eil e san stòr-dàta!",
        "revdelete-offender": "Ùghdar a' mhùthaidh:",
        "suppressionlog": "Loga nam mùchaidhean",
        "suppressionlogtext": "Chì thu liosta nan rudan a chaidh a sguabadh às agus a bhacadh gu h-ìosal, a' gabhail a-steach stuth a chaidh fhalach o rianairean. Faic [[Special:BlockList|liosta nam bacaidhean]] airson liosta nan toirmeasgan is bacaidhean beò.",
-       "mergehistory": "Co-aonaich eachdraidhean na duilleige",
-       "mergehistory-header": "Leigidh an duilleag seo leat na lèirmheasan aig aon duilleag a cho-aonadh le duilleag nas ùire.\nDèan cinnteach gun glèidh an t-atharrachadh seo leantainneachd eachdraidh na duilleige.",
-       "mergehistory-box": "Co-aonaich na lèirmheasan aig dà dhuilleag:",
+       "mergehistory": "Co-aonaich eachdraidhean nan duilleag",
+       "mergehistory-header": "Leigidh an duilleag seo leat na mùthaidhean aig aon duilleag a cho-aonadh le duilleag nas ùire.\nDèan cinnteach gun glèidh an t-atharrachadh seo leantainneachd eachdraidh na duilleige.",
+       "mergehistory-box": "Co-aonaich na mùthaidhean aig dà dhuilleag:",
        "mergehistory-from": "An duilleag thùsail:",
        "mergehistory-into": "An duilleag targaide:",
        "mergehistory-list": "Eachdraidh nan deasachaidhean a ghabhas a cho-aonadh",
-       "mergehistory-merge": "Gabhaidh na lèirmheasan a leanas aig [[:$1]] a cho-aonadh le [[:$2]].\nCleachd colbh nam putanan-rèidio gus dìreach na lèirmheasan a cho-aonadh a chaidh a chruthachadh aig an àm a chaidh a shònrachadh no roimhe sin.\nThoir an aire gun dèid an colbh seo ath-shuidheachadh ma chleachdas tu ceanglaichean na seòladaireachd.",
+       "mergehistory-merge": "Gabhaidh na mùthaidhean a leanas aig [[:$1]] a cho-aonadh le [[:$2]].\nCleachd colbh nam putanan-rèidio gus dìreach na mùthaidhean a cho-aonadh a chaidh a chruthachadh aig an àm a chaidh a shònrachadh no roimhe sin.\nThoir an aire gun dèid an colbh seo ath-shuidheachadh ma chleachdas tu ceanglaichean na seòladaireachd.",
        "mergehistory-go": "Seall na deasachaidhean a ghabhas a cho-aonadh",
-       "mergehistory-submit": "Co-aonaich na lèirmheasan",
-       "mergehistory-empty": "Chan eil lèirmheas sam bith ann a ghabhas a cho-aonadh.",
-       "mergehistory-success": "Chaidh $3 {{PLURAL:$3|lèirmheas|lèirmheas|lèirmheasan|lèirmheas}} de [[:$1]] a cho-aonadh dha [[:$2]].",
+       "mergehistory-submit": "Co-aonaich na mùthaidhean",
+       "mergehistory-empty": "Chan eil mùthadh sam bith ann a ghabhas a cho-aonadh.",
+       "mergehistory-success": "Chaidh $3 {{PLURAL:$3|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} de [[:$1]] a cho-aonadh dha [[:$2]].",
        "mergehistory-fail": "Cha ghabh an eachdraidh a cho-aonadh, thoir sùil air paramadairean na duilleige 's an ama.",
        "mergehistory-no-source": "Chan eil an tùs-duilleag $1 ann.",
        "mergehistory-no-destination": "Chan eil an an duilleag targaide $1 ann.",
        "mergehistory-comment": "Chaidh [[:$1]] a cho-aonadh dha [[:$2]]: $3",
        "mergehistory-same-destination": "Chan fhaod an tùs-duilleag is an duilleag targaide a bhith co-ionnann",
        "mergehistory-reason": "Adhbhar:",
+       "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Loga a' cho-aonaidh",
-       "pagemerge-logentry": "chaidh [[$1]] a cho-aonadh dha [[$2]] (lèirmheasan suas ri $3)",
-       "revertmerge": "Dì-aontaich",
+       "pagemerge-logentry": "chaidh [[$1]] a cho-aonadh dha [[$2]] (mùthaidhean suas ri $3)",
+       "revertmerge": "Dì-aonaich",
+       "mergelogpagetext": "Chì thu liosta nan co-aonaidhean as ùire eadar eachdraidh dhuilleagan gu h-ìosail.",
        "history-title": "Eachdraidh nam mùthaidhean aig \"$1\"",
+       "difference-title": "An diofar eadar na mùthaidhean a rinneadh air \"$1\"",
+       "difference-title-multipage": "An diofar eadar an dà dhuilleag \"$1\" agus \"$2\"",
        "difference-multipage": "(An diofar eadar na duilleagan)",
        "lineno": "Loidhne $1:",
        "compareselectedversions": "Dèan coimeas eadar na mùthaidhean a thagh thu",
-       "showhideselectedversions": "Seall/Falaich na lèirmheasan a thagh thu",
+       "showhideselectedversions": "Seall/Falaich na mùthaidhean a thagh thu",
        "editundo": "neo-dhèan",
        "diff-empty": "(Gun diofar eatarra)",
-       "diff-multi-manyusers": "({{PLURAL:$1|Aon lèirmheas eadar-mheadhanach||$1 lèirmheasan eadar-mheadhanach|$1 lèirmheas eadar-mheadhanach}} le {{PLURAL:$2|aon chleachdaiche|$2 chleachdaiche|$2 cleachdaichean|$2 cleachdaiche}} gun sealltainn)",
+       "diff-multi-sameuser": "(Rinn an cleachdaiche {{PLURAL:$1|$1 mhùthadh|$1 mhùthadh|$1 mùthaidhean|$1 mùthadh}} eadar-mheadhanach nach eil {{PLURAL:$1|'ga|$1 'gan}} sealltainn)",
+       "diff-multi-otherusers": "({{PLURAL:$1|$1 mhùthadh|$1 mhùthadh|$1 mùthaidhean|$1 mùthadh}} eadar-mheadhanach le {{PLURAL:$2|$2 chleachdaiche|$2 chleachdaiche|$2 cleachdaichean|$2 cleachdaiche}} eile nach eil {{PLURAL:$1|'ga|$1 'gan}} sealltainn)",
+       "diff-multi-manyusers": "({{PLURAL:$1|$1 mhùthadh|$1 mhùthadh|$1 mùthaidhean|$1 mùthadh}} eadar-mheadhanach le barrachd air  {{PLURAL:$2|$2 chleachdaiche|$2 chleachdaiche|$2 cleachdaichean|$2 cleachdaiche}} nach eil {{PLURAL:$1|'ga|$1 'gan}} sealltainn)",
+       "difference-missing-revision": "Tha {{PLURAL:$2|$2 mhùthadh|$2 mhùthadh|$2 mùthaidhean|$2 mùthadh}} san diofar seo ($1) nach deach a lorg.\n\nMar is trice, tachraidh seo ma leanas tu air ceangal gu diofar air duilleag a chaidh a sguabadh às.\nGheibh thu mion-fhiosrachadh ann an [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} loga nan duilleagan a chaidh a sguabadh às].",
        "searchresults": "Toraidhean rannsachaidh",
        "searchresults-title": "Lorg \"$1\" am broinn nan toraidhean",
        "toomanymatches": "Fhuaras cus thoraidhean, feuch ceist eile",
        "titlematches": "Tiotalan dhuilleagan a tha a' maidseadh",
+       "textmatches": "Teacsa sna duilleagan a tha co-ionnann",
        "notextmatches": "Chan eil tiotal de dhuilleag sam bith a' freagairt ris",
        "prevn": "an {{PLURAL:$1|$1}} roimhe",
        "nextn": "an ath {{PLURAL:$1|$1}}",
        "nextn-title": "An ath $1 {{PLURAL:$1|toradh|thoradh|toraidhean|toradh}}",
        "shown-title": "Seall $1 {{PLURAL:$1|toradh|thoradh|toraidhean|toradh}} air gach duilleag",
        "viewprevnext": "Seall ($1 {{int:pipe-separator}} $2) ($3).",
-       "searchmenu-exists": "'''Tha duilleag air a bheil \"[[:$1]]\" air an uicipeid seo.'''",
-       "searchmenu-new": "'''Cruthaich an duilleag \"[[:$1]]\" air an uicipeid seo!'''",
+       "searchmenu-exists": "'''Tha duilleag air a bheil \"[[:$1]]\" air an uicidh seo.'''",
+       "searchmenu-new": "<strong>Cruthaich an duilleag \"[[:$1]]\" air an uicidh seo!</strong> {{PLURAL:$2|0=|Seall an duilleag a chaidh a lorg ri linn na lorg thu.|Seall na duilleagan a chaidh a lorg ri linn na lorg thu.|Seall na duilleagan a chaidh a lorg ri linn na lorg thu.|Seall na duilleagan a chaidh a lorg ri linn na lorg thu.|Seall na duilleagan a chaidh a lorg ri linn na lorg thu.|Seall na duilleagan a chaidh a lorg ri linn na lorg thu.}}'",
        "searchprofile-articles": "Duilleagan susbainte",
-       "searchprofile-project": "Duilleagan nan cobharach 's nam pròiseactan",
        "searchprofile-images": "Ioma-mheadhanan",
        "searchprofile-everything": "Gach rud",
        "searchprofile-advanced": "Adhartach",
        "searchprofile-articles-tooltip": "Lorg ann an $1",
-       "searchprofile-project-tooltip": "Lorg ann an $1",
        "searchprofile-images-tooltip": "Lorg faidhlichean",
        "searchprofile-everything-tooltip": "Lorg am broinn susbaint sam bith (a' gabhail a-steach nan duilleagan deasbaireachd)",
        "searchprofile-advanced-tooltip": "Lorg am broinn ainm-spàsan gnàthaichte",
        "search-result-size": "$1 ({{PLURAL:$2 fhacal|$2 fhacal|$2 faclan|$2 facal}})",
-       "search-result-category-size": "{{PLURAL:$1|1 bhall|$1 bhall|$1 bhuill|$1 ball}} ({{PLURAL:$2|1 fho-roinn|$2 fho-roinn|$2 fo-roinnean|$2 fo-roinn}}, {{PLURAL:$3|1 fhaidhle|$3 fhaidhle|$3 faidhlichean|$3 faidhle}})",
+       "search-result-category-size": "{{PLURAL:$1|1 bhall|$1 bhall|$1 bhuill|$1 ball}} ({{PLURAL:$2|1 fho-roinn-seòrsa|$2 fho-roinn-seòrsa|$2 fo-roinnean-seòrsa|$2 fo-roinn-seòrsa}}, {{PLURAL:$3|1 fhaidhle|$3 fhaidhle|$3 faidhlichean|$3 faidhle}})",
        "search-result-score": "Buntainneas: $1%",
        "search-redirect": "(ag ath-sheòladh $1)",
        "search-section": "(earrann $1)",
+       "search-file-match": "{a' freagairt ri susbaint an fhaidhle)",
        "search-suggest": "An e na leanas a bha fa-near dhut: $1",
        "search-interwiki-caption": "Pròiseactan co-cheangailte",
-       "search-interwiki-default": "Toraidhean $1:",
+       "search-interwiki-default": "Toraidhean $1:",
        "search-interwiki-more": "(barrachd)",
        "search-relatedarticle": "Co-cheangailte",
-       "searcheverything-enable": "Seall anns na namespaces air fad",
        "searchrelated": "co-cheangailte",
        "searchall": "a h-uile",
        "showingresults": "A' nochdadh suas gu $1 {{PLURAL:$1|$1 toradh|$1 thoradh|$1 toraidhean|$1 toradh}} gu h-ìosal a' tòiseachadh le #'''$2'''.",
+       "showingresultsinrange": "A' sealltainn suas ri {{PLURAL:$1|<strong>$1</strong> toradh|<strong>$1</strong> toradh|<strong>$1</strong> toradh|<strong>$1</strong> toradh|<strong>$1</strong> toraidhean|<strong>$1</strong> toradh}} san rainse eadar #<strong>$2</strong> is #<strong>$3</strong>.",
        "showingresultsnum": "A' nochdadh '''$3''' {{PLURAL:$3|$3 toradh|$3 thoradh|$3 toraidhean|$3 toradh}} gu h-ìosal a' tòiseachadh le #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Toradh '''$1''' à '''$3'''|Toraidhean '''$1 - $2''' of '''$3'''}} airson '''$4'''",
        "search-nonefound": "Cha do fhreagair toradh sam bith ri d' iarrtas.",
        "powersearch-togglelabel": "Sgrùd:",
        "powersearch-toggleall": "Na h-uile",
        "powersearch-togglenone": "Chan eil gin",
+       "powersearch-remember": "Cuir na thagh thu sa chuimhne airson lorg ri teachd",
        "search-external": "Lorg air an taobh a-muigh",
        "searchdisabled": "Tha lorg air {{SITENAME}} à comas.\n'S urrainn dhut lorg a dhèanamh air Google san eadar-àm.\nFaodaidh gum bi inneacsan susbaint {{SITENAME}} tuilleadh 's sean ge-tà.",
+       "search-error": "Thachair mearachd fhad 's a bha sinn a' lorg an-seo: $1",
        "preferences": "Roghainnean",
        "mypreferences": "Na roghainnean agam",
        "prefs-edits": "Co mheud deasachadh:",
+       "prefsnologintext2": "Ma tha thu airson na roghainnean agad atharrachadh, $1.",
        "prefs-skin": "Bian",
        "skin-preview": "Ro-shealladh",
        "datedefault": "Gun roghainnean",
        "prefs-watchlist": "An clàr-faire",
        "prefs-watchlist-days": "Co mheud latha a sheallar air a' chlàr-fhaire:",
        "prefs-watchlist-days-max": "{{PLURAL:$1|latha|latha|làithean|latha}} air a' char as motha",
+       "prefs-watchlist-edits": "An àireamh as motha de mhùthaidhean a thèid a shealltainn air a' chlàr-fhaire leudaichte:",
        "prefs-watchlist-edits-max": "Àireamh as motha: 1000",
        "prefs-watchlist-token": "Tòcan a' chlàir-fhaire:",
        "prefs-misc": "Measgachadh",
        "rows": "Sreathan",
        "columns": "Colbhan",
        "searchresultshead": "Lorg",
+       "stub-threshold": "An stairsneach airson fòrmatadh <a href=\"#\" class=\"stub\">cheanglaichean nam bun</a> (bytes):",
        "stub-threshold-disabled": "À comas",
+       "recentchangesdays": "Co mheud latha a thèid a shealltainn sna mùthaidhean ùra:",
        "recentchangesdays-max": "{{PLURAL:$1|latha|latha|làithean|latha}} air a' char as motha",
        "recentchangescount": "Uiread a dheasachaidhean a thèid a shealltainn a ghnàth:",
+       "prefs-help-recentchangescount": "Tha seo a' gabhail a-steach mùthaidhean ùra, eachdraidhean nan duilleagan is logaichean.",
+       "prefs-help-watchlist-token2": "Seo an iuchair dhìomhair airson inbhir-lìn a' chlàir-fhaire agad.\n'S urrainn do dhuine sam bith a bhios eòlach air an clàr-faire agad a leughadh, mar sin na co-roinn e.\n'S urrainn dhut [[Special:ResetTokens|ath-shuidheachadh]] ma bhios feum agad air seo.",
        "savedprefs": "Tha na roghainnean agad air an sàbhaladh.",
        "timezonelegend": "Roinn-tìde:",
        "localtime": "An t-àm ionadail:",
-       "timezoneuseserverdefault": "Cleachd bun-roghainn na h-Uicipeid ($1)",
-       "servertime": "Àm an fhrithealaichte:",
+       "timezoneuseserverdefault": "Cleachd bun-roghainn na h-uicidh ($1)",
+       "timezoneuseoffset": "Eile (sònraich an fhrith-àireamh)",
+       "servertime": "Àm an fhrithealaiche:",
        "guesstimezone": "Lìon on bhrabhsair",
        "timezoneregion-africa": "Afraga",
        "timezoneregion-america": "Aimeireaga",
        "prefs-emailconfirm-label": "Dearbhadh puist-d:",
        "youremail": "Post-dealain:",
        "username": "{{GENDER:$1|Ainm-cleachdaiche}}:",
-       "uid": "ID {{GENDER:$1|a' chleachdaiche}}:",
        "prefs-memberingroups": "{{GENDER:$2|Ball}} ann an {{PLURAL:$1|bhuidheann|bhuidheann|buidhnean|buidheann}}:",
+       "prefs-memberingroups-type": "$1",
        "prefs-registration": "Àm clàraidh:",
+       "prefs-registration-date-time": "$1",
        "yourrealname": "An dearbh ainm a th' ort:",
        "yourlanguage": "Cànan:",
        "yourvariant": "Eug-samhail cànan na susbaint:",
        "badsiglength": "Tha an t-earr-sgrìobhadh agad ro fhada.\nChan fhaod e a bhith nas fhaide na $1 {{PLURAL:$1|charactar|charactar|caractaran|caractar}}.",
        "yourgender": "Dè a' ghnè a tha annad:",
        "gender-unknown": "B' fhearr leam gun a bhith 'ga leigeil ris",
-       "gender-male": "Deasaichidh e duilleagan na h-Uicipeid",
+       "gender-male": "Deasaichidh e duilleagan na h-uicidh",
        "gender-female": "Deasaichidh i duilleagan na h-Uicipeid",
+       "prefs-help-gender": "Cha leig thu leas an roghainn seo a shuidheachadh.\nCleachdaidh am bathar-bog an luach aice gus bruidhinn riut le d' ainm 's iomradh a thoirt ort gu càch leis a' ghnè ghramataigeach iomchaidh.\nBidh am fiosrachadh seo poblach.",
        "email": "Post-d:",
+       "prefs-help-realname": "Cha leig thu leas innse dè am fìor-ainm a tha ort.\nMa bheir thu seachad e, thèid seo a chleachdadh gus urram a thoirt dhut airson do chuid obrach.",
        "prefs-help-email": "Chan leig thu leas post-dealain a chur ann ach bidh feum air ma dhìochuimhnicheas tu am facal-faire agad 's ma dh'iarras tu fear ùr.",
        "prefs-help-email-others": "'S urrainn dhut leigeil le daoine eile post-dealain a chur thugad tro cheangal air an duilleag agad.\nChan fhaicear an seòladh fhèin nuair a chuireas cuideigin post-dealain thugad.",
        "prefs-help-email-required": "Tha feum air seòladh puist-d.",
        "prefs-displayrc": "Roghainnean taisbeanaidh",
        "prefs-displaywatchlist": "Roghainnean taisbeanaidh",
        "prefs-tokenwatchlist": "Tòcan",
-       "prefs-diffs": "Diffs",
+       "prefs-diffs": "Diofaran",
+       "prefs-help-prefershttps": "Thèid an roghainn seo a chur an sàs an ath thuras a nì thu logadh a-steach.",
+       "prefs-tabs-navigation-hint": "Gliocas: 'S urrainn dhut na h-iuchraichean saighde chlì 's dheas a chleachdadh gus leum a ghearradh o thaba gu taba air liosta nan taba.",
        "email-address-validity-valid": "Tha coltas gu bheil am post-d dligheach",
        "email-address-validity-invalid": "Cuir a-steach post-d dligheach",
        "userrights": "Stiùireadh ceadan a' chleachdaiche",
        "saveusergroups": "Sàbhail na buidhnean chleachdaichean",
        "userrights-groupsmember": "Ball de:",
        "userrights-groupsmember-auto": "Ball fèin-obrachail de:",
+       "userrights-groupsmember-type": "$1",
+       "userrights-groups-help": "'S urrainn dhut na buidhnean sa bheil an cleachdaiche seo 'na bhall atharrachadh:\n* Is ciall dha chromag sa bhogsa gu bheil an cleachdaiche seo 'na bhall sa buidheann.\n* Is ciall dha bhogsa gun chromag ris nach eil an cleachdaiche seo 'na bhall sa buidheann.\n* Innsidh * dhut nach urrainn dhut am buidheann a thoirt air falbh nuair a bhios tu air a chur ris no an caochladh.",
        "userrights-reason": "Adhbhar:",
-       "userrights-no-interwiki": "Chan eil cead agad ceadan chleachdaichean a dheasachadh air uicipeidean eile.",
+       "userrights-no-interwiki": "Chan eil cead agad ceadan chleachdaichean a dheasachadh air uicidhean eile.",
        "userrights-nodatabase": "Chan eil an stòr-dàta $1 ann no chan e fear ionadail a tha ann.",
+       "userrights-nologin": "Feumaidh tu [[Special:UserLogin|logadh a-steach]] le cunntas rianaire ach an toir thu ceadan nam ball seachad.",
+       "userrights-notallowed": "Chan eil cead agad gus ceadan nam ball a chur ris no a thoirt air falbh.",
        "userrights-changeable-col": "Buidhnean as urrainn dhut atharrachadh",
+       "userrights-unchangeable-col": "Buidhnean nach urrainn dhut atharrachadh",
+       "userrights-irreversible-marker": "$1*",
+       "userrights-conflict": "Tha còmhstri le atharraichean air ceadan nam ball! Thoir sùil air a-rithist 's dearbhaich na h-atharraichean agad.",
+       "userrights-removed-self": "Tha thu air na ceadan agad fhèin a thoirt air falbh. Mar sin, chan eil cead agad tuilleadh gus an duilleag seo inntrigeadh.",
        "group": "Buidheann:",
        "group-user": "Cleachdaichean",
+       "group-autoconfirmed": "Cleachdaichean fèin-dearbhte",
        "group-bot": "Bots",
        "group-sysop": "Rianadairean",
        "group-bureaucrat": "Biurocratan",
+       "group-suppress": "Marasgalan",
        "group-all": "(na h-uile)",
        "group-user-member": "{{GENDER:$1|cleachdaiche}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|cleachdaiche fèin-dearbhte}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|rianaire}}",
        "group-bureaucrat-member": "{{GENDER:$1|biùrocrat}}",
+       "group-suppress-member": "{{GENDER:$1|marasgal}}",
        "grouppage-user": "{{ns:project}}:Cleachdaichean",
        "grouppage-autoconfirmed": "{{ns:project}}:Cleachdaichean fèin-dearbhte",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Rianadairean",
        "grouppage-bureaucrat": "{{ns:project}}:Biurocratan",
+       "grouppage-suppress": "{{ns:project}}:Marasgal",
        "right-read": "Cead-leughaidh",
        "right-edit": "Cead-deasachaidh",
        "right-createpage": "Cead-cruthachaidh (de dhuilleagan nach eil 'nan duilleagan deasbaireachd)",
        "right-createtalk": "Cead duilleagan deasbaireachd a chruthachadh",
        "right-createaccount": "Cead cunntasan ùra a chruthachadh",
+       "right-minoredit": "Cead comharra a chur nach e ach deasachadh beag a th' ann",
        "right-move": "Cead duilleagan a ghluasad",
        "right-move-subpages": "Cead duilleagan a ghluasad leis na fo-dhuilleagan aca",
        "right-move-rootuserpages": "Cead duilleagan chleachdaichean root a ghluasad",
+       "right-move-categorypages": "Cead duilleagan roinn-seòrsa a ghluasad",
        "right-movefile": "Cead faidhlichean a ghluasad",
+       "right-suppressredirect": "Cead gun a bhith a' cruthachadh ath-stiùiridhean o na duilleagan tùsail nuair a ghluaisear duilleag",
        "right-upload": "Cead faidhlichean a luchdadh suas",
        "right-reupload": "Cead sgrìobhadh thairis air duilleagan a tha ann",
-       "right-upload_by_url": "Faidhlichean a luchdadh suas o URL",
-       "newuserlogpage": "Loga cruthachaidh de chleachdaichean",
+       "right-reupload-own": "Cead sgrìobhadh thairis air faidhlichean a tha ann ma a chaidh an luchdadh suas leis an dearbh neach",
+       "right-reupload-shared": "Cead faidhlichean a thar-àithneadh gu h-ionadail a tha san ionad-tasgaidh nam meadhanan co-roinnte",
+       "right-upload_by_url": "Cead faidhlichean a luchdadh suas o URL",
+       "right-purge": "Cead tasgadan an làraich airson duilleag a ghlanadh gun dearbhadh",
+       "right-autoconfirmed": "Gun chuingeachadh air tricead nan gnìomhan a-rèir IP",
+       "right-bot": "Ceadan pròiseis fèin-obrachail aige",
+       "right-nominornewtalk": "Cead deasachaidhean beaga a dhèanamh air duilleagan deasbaid gun bhrodadh airson teachdaireachdan ùra a chruthachadh",
+       "right-apihighlimits": "Cead crìochan as àirde le ceistean API a chleachdadh",
+       "right-writeapi": "Cead API sgrìobhaidh a chleachdadh",
+       "right-delete": "Cead duilleagan a sguabadh às",
+       "right-bigdelete": "Cead duilleagan aig a bheil eachdraidh mòr a sguabadh às",
+       "right-deletelogentry": "Cead nithean sònraichte an loga a sguabadh às 's aiseag",
+       "right-deleterevision": "Cead mùthaidhean sònraichte aig duilleagan a sguabadh às 's aiseag",
+       "right-deletedhistory": "Cead nithean an eachdraidh a chaidh a sguabadh às a shealltainn gun an teacsa ceangailte riutha",
+       "right-deletedtext": "Cead teacsa 's atharraichean eadar mùthaidhean air an sguabadh às a shealltainn",
+       "right-browsearchive": "Cead lorg sna duilleagan air an sguabadh às",
+       "right-undelete": "Cead duilleagan air an sguabadh às aiseag",
+       "right-suppressrevision": "Cead sùil a thoirt air mùthaidhean a chaidh a sguabadh às 's am falach o na rianairean 's an aiseag",
+       "right-suppressionlog": "Cead logaichean prìobhaideach a shealltainn",
+       "right-block": "Cead càch a bhacadh o dheasachadh",
+       "right-blockemail": "Cead cleachdaiche a bhacadh o chur phost-d",
+       "right-hideuser": "Cead ainm-chleachdaiche a bhacadh 's fhalach on t-sealladh phoblach",
+       "right-ipblock-exempt": "Cead bacaidhean IP, bacaidhean fèin-obrachail 's bacaidhean rainse a leigeil seachad",
+       "right-proxyunbannable": "Cead bacadh fèin-obrachail phrogsaidhean a leigeil seachad",
+       "right-unblockself": "Cead bacadh a thoirt uaithe fhèin",
+       "right-protect": "Cead leibheilean an dìona atharrachadh 's duilleagan le dìon o cascade a dheasachadh",
+       "right-editprotected": "Cead gus duilleagan le dìon \"{{int:protect-level-sysop}}\" a dheasachadh",
+       "right-editsemiprotected": "Cead gus duilleagan le dìon \"{{int:protect-level-autoconfirmed}}\" a dheasachadh",
+       "right-editinterface": "Cead gus eadar-aghaidh nan cleachdaichean a dheasachadh",
+       "right-editusercssjs": "Cead gus faidhlichean CSS 's JavaScript càich a dheasachadh",
+       "right-editusercss": "Cead gus faidhlichean CSS càich a dheasachadh",
+       "right-edituserjs": "Cead gus faidhlichean JavaScript càich a dheasachadh",
+       "right-editmyusercss": "Cead gus faidhlichean CSS agad fhèin a dheasachadh",
+       "right-editmyuserjs": "Cead gus faidhlichean JavaScript agad fhèin a dheasachadh",
+       "right-viewmywatchlist": "Cead an clàr-faire agad fhèin a shealltainn",
+       "right-editmywatchlist": "Cead an clàr-faire agad fhèin a dheasachadh. Thoir an aire gun cuir cuid a gnìomhan duilleagan ris fiù 's mur eil an cead seo agad.",
+       "right-viewmyprivateinfo": "Cead an dàta prìobhaideach agad fhèin (m.e. seòladh puist-d, fìor-ainm) a shealltainn",
+       "right-editmyprivateinfo": "Cead an dàta prìobhaideach agad fhèin (m.e. seòladh puist-d, fìor-ainm) a dheasachadh",
+       "right-editmyoptions": "Cead na roghainnean agad fhèin a dheasachadh",
+       "right-rollback": "Cead gus na h-atharraichean leis a' chleachdaiche mu dheireadh air duilleag sònraichte a roladh air ais gu luath",
+       "right-markbotedits": "Cead dèiligeadh ri deasachaidhean rolaidh air ais 'nan deasachaidhean bota",
+       "right-noratelimit": "Gun chuingeachadh air tricead nan gnìomhan",
+       "right-import": "Cead duilleagan ion-phortadh o uicidhean eile",
+       "right-importupload": "Cead duilleagan ion-phortadh o luchdadh suas faidhle",
+       "right-patrol": "Cead comharra freiceadain a chur ri deasachaidhean càich",
+       "right-autopatrol": "Cead gun dèid comharra freiceadain a chur ris na deasachaidhean agad fhèin gu fèin-obrachail",
+       "right-patrolmarks": "Cead gus na comharran freiceadain o chionn goirid a shealltainn",
+       "right-unwatchedpages": "Cead duilleagan air an toirt far a' chlàir-fhaire a shealltainn",
+       "right-mergehistory": "Cead eachdraidh nan duilleagan a cho-aonachadh",
+       "right-userrights": "Cead gus gach cead cleachdaiche a dheasachadh",
+       "right-userrights-interwiki": "Cead gus ceadan nan chleachdaichean aig uicidhean eile a dheasachadh",
+       "right-siteadmin": "Cead gus an stòr-dàta a glasadh 's a' ghlas a thoirt fo bharr",
+       "right-override-export-depth": "Cead gus duilleagan às-phortadh, a' gabhail a-seach duilleagan ceangailte suas ri doimhneachd de 5",
+       "right-sendemail": "Cead gus puist-d a chur gu cleachdaichean eile",
+       "right-passwordreset": "Cead gus puist-d ath-shuidheachadh nam facal-faire a shealltainn",
+       "newuserlogpage": "Loga cruthachadh nan cleachdaichean",
+       "newuserlogpagetext": "Seo loga nan cleachdaichean a chaidh a chruthachadh.",
        "rightslog": "Loga còraichean a' chleachdaiche",
+       "rightslogtext": "Seo loga nan atharraichean air ceadan nan cleachdaichean.",
+       "action-read": "leugh an duilleag seo",
        "action-edit": "deasaich an duilleag seo",
+       "action-createpage": "cruthaich duilleagan",
+       "action-createtalk": "cruthaich duilleagan deasbaireachd",
+       "action-createaccount": "cruthaich an cunntas cleachdaiche seo",
+       "action-history": "seall eachdraidh na duilleige seo",
+       "action-minoredit": "cuir comharra nach e ach deasachadh beag a th' ann",
        "action-move": "gluais an duilleag seo",
+       "action-move-subpages": "gluais an duilleag seo 's a fo-dhuilleagan",
+       "action-move-rootuserpages": "gluais duilleagan chleachdaichean root",
+       "action-move-categorypages": "gluais duilleagan roinn-seòrsa",
+       "action-movefile": "gluais am faidhle seo",
+       "action-upload": "luchdaich suas am faidhle seo",
+       "action-reupload": "sgrìobh thairis air an fhaidhle seo a tha ann",
+       "action-reupload-shared": "tar-àithn am faidhle seo ann an ionad-tasgaidh co-roinnte",
+       "action-upload_by_url": "luchdaich suas am faidhle seo o URL",
+       "action-writeapi": "cleachd API sgrìobhaidh",
+       "action-delete": "sguab às an duilleag seo",
+       "action-deleterevision": "sguab às am mùthadh seo",
+       "action-deletedhistory": "seall eachdraidh an sguabaidh às aig an duilleag seo",
+       "action-browsearchive": "lorg sna duilleagan air an sguabadh às",
+       "action-undelete": "neo-dhèan sguabadh às na duilleige seo",
+       "action-suppressrevision": "thoir sùil air a' mhùthadh fhalaichte seo 's aisig e",
+       "action-suppressionlog": "seall an loga prìobhaideach seo",
+       "action-block": "bac an cleachdaiche seo o dheasachadh",
+       "action-protect": "atharraich leibheil dìon na duilleige seo",
+       "action-rollback": "roilig na h-atharraichean leis a' chleachdaiche mu dheireadh air duilleag sònraichte a  air ais gu luath",
+       "action-import": "ion-phortaich duilleagan o uicidh eile",
+       "action-importupload": "ion-phortaich duilleagan o luchdadh suas faidhle",
+       "action-patrol": "cuir comharra freiceadain ri deasachaidhean càich",
+       "action-autopatrol": "faigh comharra freiceadain fèin-obrachail air na dheasaich thu",
+       "action-unwatchedpages": "seall na duilleagan air an toirt far a' chlàir-fhaire",
+       "action-mergehistory": "co-aonaich eachdraidh nan duilleagan",
+       "action-userrights": "deasaich gach cead cleachdaiche",
+       "action-userrights-interwiki": "deasaich ceadan nan chleachdaichean aig uici eile",
+       "action-siteadmin": "glais an stòr-dàta no thoir a' ghlas fo bharr",
+       "action-sendemail": "cuir puist-d",
+       "action-editmywatchlist": "deasaich an clàr-faire agad",
+       "action-viewmywatchlist": "seall an clàr-faire agad",
+       "action-viewmyprivateinfo": "seall am fiosrachadh prìobhaideach agad",
+       "action-editmyprivateinfo": "deasaich am fiosrachadh prìobhaideach agad",
        "nchanges": "{{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|on tadhal mu dheireadh}}",
+       "enhancedrc-history": "eachdraidh",
        "recentchanges": "Mùthaidhean ùra",
        "recentchanges-legend": "Roghainnean nam mùthaidhean ùra",
-       "recentchanges-summary": "Cum sùil air na mùthaidhean as ùire a nithear air an uici air an duilleag seo.",
-       "recentchanges-feed-description": "Cum sùil air na mùthaidhean as ùire a nithear air an uici seo san inbhir seo.",
+       "recentchanges-summary": "Cum sùil air na mùthaidhean as ùire a nithear air an uicidh air an duilleag seo.",
+       "recentchanges-noresult": "Cha fhreagair atharrachadh sam bith san ùine seo ris na cuspairean-deuchainn seo.",
+       "recentchanges-feed-description": "Cum sùil air na mùthaidhean as ùire a nithear air an uicidh seo san inbhir seo.",
        "recentchanges-label-newpage": "Chruthaich thu duilleag ùr leis a sin",
        "recentchanges-label-minor": "Seo mùthadh beag",
        "recentchanges-label-bot": "'S e bot a rinn an deasachadh seo",
-       "recentchanges-label-unpatrolled": "Cha deach freiceadan tron deasachadh seo fhathast",
+       "recentchanges-label-unpatrolled": "Cha do chuir freiceadan comharra ris an deasachadh seo fhathast",
        "recentchanges-label-plusminus": "Seo meud atharrachadh na duilleige ann am byte",
-       "recentchanges-legend-newpage": "(faic [[Special:NewPages|liosta nan duilleagan ùra]] cuideachd)",
-       "rcnotefrom": "Gheibhear na mùthaidhean a-mach o '''$2''' (gu ruige '''$1''') gu h-ìosal.",
+       "recentchanges-legend-heading": "'''Treòir:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (faic [[Special:NewPages|liosta nan duilleagan ùra]] cuideachd)",
+       "recentchanges-legend-plusminus": "(<em>±123</em>)",
+       "rcnotefrom": "Gheibhear na mùthaidhean a-mach o <strong>$2</strong> (gu ruige <strong>$1</strong>) gu h-ìosal.",
        "rclistfrom": "Seall na mùthaidhean ùra a-mach o $3 $2",
        "rcshowhideminor": "$1 mùthaidhean beaga",
+       "rcshowhideminor-show": "Seall",
+       "rcshowhideminor-hide": "Falaich",
        "rcshowhidebots": "$1 botaichean",
-       "rcshowhideliu": "$1 neach-cleachdaidh clàraichte",
-       "rcshowhideanons": "$1 luchd-cleachdaidh gun ainm",
+       "rcshowhidebots-show": "Seall",
+       "rcshowhidebots-hide": "Falaich",
+       "rcshowhideliu": "$1 na cleachdaichean clàraichte",
+       "rcshowhideliu-show": "Seall",
+       "rcshowhideliu-hide": "Falaich",
+       "rcshowhideanons": "$1 na cleachdaichean gun ainm",
+       "rcshowhideanons-show": "Seall",
+       "rcshowhideanons-hide": "Falaich",
        "rcshowhidepatr": "$1 na deasachaidhean fo aire freiceadain",
+       "rcshowhidepatr-show": "Seall",
+       "rcshowhidepatr-hide": "Falaich",
        "rcshowhidemine": "$1 na mùthaidhean agam",
-       "rclinks": "Seall na $1 mùthaidhean mu dheireadh thairis air na $2 làithean mu dheireadh<br />$3",
-       "diff": "diof",
+       "rcshowhidemine-show": "Seall",
+       "rcshowhidemine-hide": "Falaich",
+       "rclinks": "Seall {{PLURAL:$1|an $1 mhùthadh|an $1 mhùthadh|na $1 mùthaidhean|am $1 mùthadh}} mu dheireadh thairis air {{PLURAL:$2|an $2 latha|an $2 latha|na $2 làithean|an $2 latha}} mu dheireadh<br />$3",
+       "diff": "diofar",
        "hist": "eachd",
        "hide": "Falaich",
        "show": "Seall",
        "minoreditletter": "b",
        "newpageletter": "Ù",
        "boteditletter": "bt",
+       "unpatrolledletter": "!",
+       "number_of_watching_users_pageview": "[Tha $1 {{PLURAL:$1|chleachdaiche|chleachdaiche|cleachdaichean|cleachdaiche}} a' cumail sùil air]",
+       "rc_categories": "Cuingich gu roinnean-seòrsa (sgaraich le \"|\")",
+       "rc_categories_any": "Roinn-seòrsa sam bith",
+       "rc-change-size": "$1",
+       "rc-change-size-new": "$1 {{PLURAL:$1|bhaidht|bhaidht|baidhtichean|baidht}} às dèidh an atharrachaidh",
+       "newsectionsummary": "Earrann ùr /* $1 */",
        "rc-enhanced-expand": "Seall am mion-fhiosrachadh",
        "rc-enhanced-hide": "Cuir am mion-fhiosrachadh am falach",
+       "rc-old-title": "Chaidh a chruthachadh mar \"$1\" o thùs",
        "recentchangeslinked": "Mùthaidhean co-cheangailte",
        "recentchangeslinked-feed": "Mùthaidhean buntainneach",
        "recentchangeslinked-toolbox": "Mùthaidhean buntainneach",
        "recentchangeslinked-title": "Mùthaidhean co-cheangailte ri \"$1\"",
-       "recentchangeslinked-summary": "Seo liosta nam mùthaidhean a chaidh a chur air duilleagan a tha a' ceangal o dhuilleag shònraichte (no ri buill de roinn shònraichte).\nTha duilleagan air [[Special:Watchlist|do chlàr-faire]] ann an litrichean '''troma'''.",
+       "recentchangeslinked-summary": "Seo liosta nam mùthaidhean a chaidh a chur air duilleagan a tha a' ceangal o dhuilleag shònraichte (no ri buill ann an roinn-seòrsa sònraichte).\nTha duilleagan air [[Special:Watchlist|do chlàr-faire]] ann an litrichean '''troma'''.",
        "recentchangeslinked-page": "Ainm na duilleige:",
        "recentchangeslinked-to": "Seall mùthaidhean nan duilleagan a tha a' ceangal ris an duilleag sin 'na àite",
        "upload": "Luchdaich suas faidhle",
        "uploadbtn": "Luchdaich suas faidhle",
+       "reuploaddesc": "Sgur dhen luchdadh suas 's till dhan fhoirm luchdaidh suas",
+       "upload-tryagain": "Cuir tuairisgeul atharraichte an fhaidhle a-null",
+       "uploadnologin": "Chan eil thu air logadh a-steach",
+       "uploadnologintext": "$1 gus faidhlichean a luchdadh suas.",
+       "upload_directory_missing": "Tha pasgan an luchdaidh suas ($1) a dhìth 's cha b' urrainn dhan fhrithealaiche-lìn fear a chruthachadh.",
+       "upload_directory_read_only": "Chan urrainn dhan fhrithealaiche-lìn sgrìobhadh sa phasgan luchdaidh suas ($1).",
+       "uploaderror": "Mearachd leis an luchdadh suas",
+       "upload-recreate-warning": "<strong>Rabhadh: Chaidh faidhle air a bheil an t-ainm seo a sguabadh às no a ghluasad.</strong>\n\nSeo dhut loga an sguabaidh às 's nan gluasad airson na duilleige seo:",
+       "uploadtext": "Cleachd am foirm gu h-ìosal gus faidhlichean a luchdadh suas.\nGus na faidhlichean a chaidh a luchdadh suas roimhe a shealltainn no a lorg annta, rach gu [[Special:FileList|liosta nam faidhlichean air an luchdadh suas]], thèid (ath-)luchdaidhean suas a chur ri [[Special:Log/upload|loga nan luchdaidhean suas]] cuideachd 's na chaidh a sguabadh às ri [[Special:Log/delete|loga nan sguabaidhean às]].\n\nCleachd ceangal ann an aon dhe na cruthan seo gus faidhle a chur am broinn duilleige:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> gus an tionndadh slàn dhen fhaidhle a chleachdadh\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|teacsa alt]]</nowiki></code></strong> cus dreach a tha 200 piogsail a leud a chleachdadh a nochdas ann am bogsa air a' mharghan chlì le \"teacsa alt\" mar thuairisgeul\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> gus ceangal a dhèanamh ris an fhaidhle gu dìreach gun a bhith a' sealltainn an fhaidhle",
+       "upload-permitted": "Seòrsaichean faidhle a tha ceadaichte: $1.",
+       "upload-preferred": "Seòrsaichean faidhle as docha leinn: $1.",
+       "upload-prohibited": "Seòrsaichean faidhle nach eil ceadaichte: $1.",
        "uploadlogpage": "Loga an luchdaidh suas",
+       "uploadlogpagetext": "Chì thu na faidhlichean a chaidh a luchdadh suas o chionn goirid gu h-ìosal.\nSeall [[Special:NewFiles|gailearaidh nam faidhlichean ùra]] airson foir-shealladh nas lèirsinniche.",
        "filename": "Ainm-faidhle",
        "filedesc": "Gearr-chunntas",
        "fileuploadsummary": "Gearr-chunntas:",
-       "filestatus": "Cor dlighe-sgrìobhaidh:",
+       "filereuploadsummary": "Atharraichean air an fhaidhle:",
+       "filestatus": "Staid còrach-lethbhreac:",
+       "filesource": "Tùs:",
        "ignorewarning": "Leig seachad an rabhadh agus sàbhail am faidhle co-dhiù",
+       "ignorewarnings": "Leig seachad rabhadh sam bith",
+       "minlength1": "Feumaidh co-dhiù aon litir a bhith ann an ainm faidhle.",
+       "illegalfilename": "Tha caractaran san ainm faidhle \"$1\" nach eil ceadaichte ann an tiotal duilleige.\nthoir ainm ùr air an fhaidhle 's feuch ris an luchdadh suas a-rithist.",
+       "filename-toolong": "Chan fhaod barrachd air 240 baidht a bhith ann an ainm faidhle.",
        "badfilename": "Ainm ìomhaigh air atharrachadh ri \"$1\".",
-       "fileexists": "Tha faidhle ann mu thràth air a bheil an t-ainm seo, cuir sùil air <strong>[[:$1]]</strong> mur eil thu buileach cinntach a bheil thu airson atharrachadh.\n[[$1|thumb]]",
+       "filetype-mime-mismatch": "Chan fhreagair leudachan \".$1\" an fhaidhle ris an seòrsa MIME a mhothaich sinn airson an fhaidhle ($2).",
+       "filetype-badmime": "Chan fhaod thu faidhlichean dhen t-seòrsa MIME \"$1\" a luchdadh suas.",
+       "filetype-bad-ie-mime": "Chan fhaod thu am faidhle seo a luchdadh suas on a mhothaicheadh Internet Explorer dha mar \"$1\" nach eil 'na sheòrsa faidhle ceadaichte 's a dh'fhaodadh a bhith cunnartach.",
+       "filetype-unwanted-type": "Cha ghabh sinn ris an seòrsa faidhle <strong>\".$1\"</strong>.\nIs docha leinn {{PLURAL:$3|an seòrsa faidhle|na seòrsaichean faidhle}} $2.",
+       "filetype-banned-type": "Chan eil <strong>\".$1\"</strong> {{PLURAL:$4|'na seòrsa faidhle ceadaichte|'nan seòrsaichean faidhle ceadaichte}}.\nIs $2 {{PLURAL:$3|an seòrsa faidhle|na seòrsaichean faidhle}} ceadaichte.",
+       "filetype-missing": "Chan eil leudachan aig an fhaidhle (can \".jpg\").",
+       "empty-file": "Cha am faidhle a chuir thu a-null falamh.",
+       "file-too-large": "Cha am faidhle a chuir thu a-null ro mhòr.",
+       "filename-tooshort": "Tha ainm an fhaidhle a chuir thu a-null ro ghoirid.",
+       "filetype-banned": "Tha an seòrsa faidhle seo toirmisgte.",
+       "verification-error": "Dh'fhàillig am faidhle seo an dearbhadh.",
+       "hookaborted": "Chaidh sgur dhen atharrachadh a dh'fheuch thu ri dèanamh le leudachan.",
+       "illegal-filename": "Chan eil ainm an fhaidhle ceadaichte.",
+       "overwrite": "Chan fhaod thu sgrìobhadh thairis air faidhle a tha ann mar-thà.",
+       "unknown-error": "Thachair mearachd neo-aithnichte.",
+       "tmp-create-error": "Cha deach leinn faidhle sealach a chruthachadh.",
+       "tmp-write-error": "Mearachd le sgrìobhadh an fhaidhle shealaich.",
+       "large-file": "Mholamaid nach bi faidhlichean nas motha na $1;\ntha am faidhle seo $2 a mheud.",
+       "largefileserver": "Tha am faidhle seo nas motha na tha ceadaichte a-rèir rèiteachadh an fhrithealaiche.",
+       "emptyfile": "Tha am faidhle a luchdaich thu suas falamh a-rèir coltais.\n'S dòcha gu bheil mearachd sgrìobhaidh ann an ainm an fhaidhle.\nDearbhaich an e seo am faidhle a tha thu airson luchdadh suas.",
+       "windows-nonascii-filename": "Cha chuir an uicidh seo taic ri ainm faidhle sa bheil caractaran sònraichte.",
+       "fileexists": "Tha faidhle ann mu thràth air a bheil an t-ainm seo, thoir sùil air <strong>[[:$1]]</strong> mur eil thu buileach cinnteach a bheil thu airson atharrachadh.\n[[$1|thumb]]",
+       "fileexists-shared-forbidden": "Tha faidhle air a bheil an t-ainm seo ann mar-thà ann an ionad-tasgaidh nam faidhlichean co-roinnte.\nMa tha thu airson am faidhle agad a luchdadh suas fhathast, rach air ais 's cleachd ainm ùr.\n[[File:$1|thumb|center|$1]]",
        "savefile": "Sàbhail faidhle",
        "uploadedimage": "a luchdaich suas \"[[$1]]\"",
        "license": "Ceadachadh:",
        "sharedupload": "Tha am faidhle seo o $1 agus faodaidh pròiseactan eile a chleachdadh.",
        "sharedupload-desc-here": "'S ann à $1 a tha am faidhle seo agus faodaidh gu bheil pròiseactan eile 'ga chleachdadh.\nChithear an tuairisgeul a tha aice air [duilleag tuairisgeul an fhaidhle $2] gu h-ìosal.",
        "uploadnewversion-linktext": "Luchdaich suas tionndadh ùr dhen fhaidhle seo",
+       "shared-repo": "ionad-tasgaidh co-roinnte",
        "filedelete-reason-dropdown": "*Adhbharan cumanta airson sguabadh às\n** Tha e a' briseadh na còrach-lethbhreac\n** Faidhle air a dhùblachadh",
+       "unwatchedpages": "Duilleagan air an toirt far a' chlàir-fhaire",
        "randompage": "Duilleag thuairmeach",
+       "randomincategory": "Duilleag air thuaiream san roinn-seòrsa",
+       "randomincategory-invalidcategory": "Chan e \"$1\" 'na ainm roinn-seòrsa dligheach.",
+       "randomincategory-nopages": "Chan eil duilleag san roinn-seòrsa [[:Category:$1|$1]].",
+       "randomincategory-selectcategory": "Faigh duilleag air thuaiream a tha san roinn-seòrsa: $1 $2.",
        "statistics": "Staitistearachd",
        "doubleredirects": "Ath-seòlaidhean dùbailte",
        "brokenredirects": "Ath-stiùireidhean briste",
-       "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
+       "fewestrevisions": "Duilleagan air a bheil an àireamh as lugha de mhùthaidhean",
+       "nbytes": "$1 {{PLURAL:$1|bhaidht|bhaidht|baidhtichean|baidht}}",
+       "ncategories": "$1 {{PLURAL:$1|roinn-seòrsa|roinn-seòrsa|roinnean-seòrsa|roinn-seòrsa}}",
        "nmembers": "$1 {{PLURAL:$1|bhall|bhall|buill|ball}}",
+       "nrevisions": "$1 {{PLURAL:$1|mùthadh|mùthaidhean}}",
        "nviews": "$1 {{PLURAL:$1|sealladh|shealladh|seallaidhean|sealladh}}",
        "uncategorizedpages": "Duilleagan gun roinn-seòrsa",
        "uncategorizedcategories": "Roinnean-seòrsa gun roinn-seòrsa",
+       "uncategorizedimages": "Faidhlichean gun roinn-seòrsa",
+       "uncategorizedtemplates": "Teamplaidean gun roinn-seòrsa",
+       "unusedcategories": "Roinnean-seòrsa gun chleachdadh",
        "unusedimages": "Faidhlichean gun chleachdadh",
+       "wantedcategories": "Roinnean-seòrsa a thathar 'gan iarraidh",
+       "mostlinkedcategories": "Na roinnean-seòrsa ris a bheil an àireamh as motha de cheanglaichean",
+       "mostcategories": "Na duilleagan aig a bheil an àireamh as motha de roinnean-seòrsa",
+       "mostrevisions": "Duilleagan air a bheil an àireamh as motha de mhùthaidhean",
        "prefixindex": "A h-uile duilleag le ro-leasachan",
        "shortpages": "Duilleagan goirid",
        "longpages": "Duilleagan fada",
        "ancientpages": "Duilleagan as sìne",
        "move": "Gluais",
        "movethispage": "Gluais an duilleag seo",
+       "unusedcategoriestext": "Tha na duilleagan roinn-seòrsa seo ann ged nach cleachd duilleag no roinn-seòrsa sam bith eile iad.",
        "pager-newer-n": "{{PLURAL:$1|1 nas ùire|$1 nas ùire}}",
        "pager-older-n": "{{PLURAL:$1|1 nas sine|$1 nas sine}}",
+       "suppress": "Marasgal",
        "booksources": "Tùsan a tha 'nan leabhraichean",
        "booksources-search-legend": "Lorg tùsan a tha 'nan leabhraichean",
        "booksources-go": "Siuthad",
        "logempty": "Chan eil rud sam bith san loga a tha 'ga mhaidseadh.",
        "showhideselectedlogentries": "Seall/Falaich innteartan an loga a thagh thu",
        "allpages": "A h-uile duilleag",
-       "alphaindexline": "$1 gu $2",
        "nextpage": "An ath dhuilleag ($1)",
        "prevpage": "An duilleag roimhe ($1)",
        "allpagesfrom": "Seall duilleagan a tha a' tòiseachadh aig:",
        "allarticles": "A h-uile duilleag",
        "allpagessubmit": "Rach",
        "categories": "Roinnean-seòrsa",
-       "categoriespagetext": "Tha duilleagan no meadhan {{PLURAL:$1|san roinn-seòrsa|sna roinntean-seòrsa|}} a leanas.\nChan fhaicear [[Special:UnusedCategories|roinntean-seòrsa gun chleachdadh an-seo]].\nThoir sùil air na [[Special:WantedCategories|roinntean-seòrsa a thathar 'gan iarraidh cuideachd]].",
+       "categoriespagetext": "Tha duilleagan no meadhan {{PLURAL:$1|san roinn-seòrsa|sna roinnean-seòrsa|}} a leanas.\nChan fhaicear [[Special:UnusedCategories|roinnean-seòrsa gun chleachdadh an-seo]].\nThoir sùil air na [[Special:WantedCategories|roinnean-seòrsa a thathar 'gan iarraidh cuideachd]].",
+       "categoriesfrom": "Seall roinnean-seòrsa a tha a' tòiseachadh aig:",
        "deletedcontributions": "Obair a' chleachdaiche a chaidh a sguabadh às",
        "linksearch": "Lorg sna ceanglaichean dhan taobh a-muigh",
        "linksearch-ns": "Namespace:",
        "linksearch-line": "Tha $1 a' ceangal an-seo o $2",
+       "listgrouprights-key": "Treòir:\n* <span class=\"listgrouprights-granted\">Cead a fhuair iad</span>\n* <span class=\"listgrouprights-revoked\">Cead air a thoirt uapa</span>",
        "listgrouprights-members": "(liosta de bhuill)",
+       "trackingcategories": "Roinnean-seòrsa tracaidh",
+       "trackingcategories-summary": "Chì thu na roinnean-seòrsa tracaidh air an duilleag seo a thèid a chur riutha gu fèin-obrachail leis a' bhathar-bhog MediaWiki. 'S urrainn dhut na h-ainmean a tha orra atharrachadh 's tu ag atharrachadh teachdaireachdan an t-siostaim iomchaidh san ainm-spàs {{ns:8}}.",
+       "trackingcategories-msg": "Roinn-seòrsa tracaidh",
+       "trackingcategories-desc": "Cuspairean-deuchainn gus roinnean-seòrsa a chur ris",
+       "broken-file-category-desc": "Thèid an roinn-seòrsa seo a chur ris nuair a bhios ceangal gu faidhle briste am broinn na duilleige (ceangal gus faidhle a leabachadh mur eil am faidhle ann).",
+       "hidden-category-category-desc": "Seo ronn-seòrsa le <code><nowiki>__HIDDENCAT__</nowiki></code> oirre ach nach nochd i ann am bogsa nan ceanglaichean gu roinnean-seòrsa air na duilleagan o thùs.",
+       "trackingcategories-disabled": "Tha an roinn-seòrsa à comas",
        "emailuser": "Cuir post-dealain dhan chleachdaiche seo",
        "emailusername": "Ainm-cleachdaiche:",
        "emailusernamesubmit": "Air adhart",
        "mywatchlist": "An clàr-faire",
        "watchlistfor2": "aig $1 $2",
        "nowatchlist": "Chan eil rud sam bith air a' chlàr-fhaire agad.",
+       "watchlistanontext": "$1 gus nithean air a' chlàr-fhaire agad a shealltainn no a dheasachadh.",
        "addwatch": "Cuir air a' chlàr-fhaire",
        "addedwatchtext": "Chaidh an duilleag \"[[:$1]]\" a chur ri [[Special:Watchlist|do chlàr-faire]].\nNochdaidh mùthaidhean a nithear air an duilleag seo 's air an duilleag deasbaireachd a tha co-cheangailte ris an-seo san àm ri teachd.",
+       "addedwatchtext-short": "Chaidh an duilleag \"$1\" a chur ris a' chlàr-fhaire agad.",
        "removewatch": "Thoir air falbh on chlàr-fhaire",
        "removedwatchtext": "Chaidh an duilleag \"[[:$1]]\" a thoirt air falbh o [[Special:Watchlist|do chlàr-faire]].",
+       "removedwatchtext-short": "Chaidh an duilleag \"$1\" a thoirt ait falbh on chlàr-fhaire agad.",
        "watch": "Cum sùil air",
        "watchthispage": "Cum sùil air an duilleag seo",
-       "unwatch": "Na cum sùil tuilleadh",
+       "unwatch": "Thoir far a' chlàir-fhaire",
        "unwatchthispage": "Na cum sùil tuilleadh",
        "notanarticle": "Chan e duilleag susbaint a tha ann",
-       "watchlist-details": "Tha {{PLURAL:$1|$1 duilleag|$1 dhuilleag|$1 duilleagan|$1 duilleag}} air do chlàr-faire, gun luaidh air na duilleagan deasbaireachd.",
+       "notvisiblerev": "Chaidh am mùthadh mu dheireadh le cleachdaiche eile a sguabadh às",
+       "watchlist-details": "Tha {{PLURAL:$1|$1 duilleag|$1 dhuilleag|$1 duilleagan|$1 duilleag}} air a' chlàr-fhaire agad, gun luaidh air na duilleagan deasbaireachd.",
+       "wlheader-enotif": "Tha brathan-naidheachd air a' phost-d an comas.",
        "wlheader-showupdated": "Tha clò '''trom''' air duilleagan a chaidh atharrachadh on turas mu dheireadh a thadhail thu orra.",
        "wlnote2": "Chì thu na h-atharraichean {{PLURAL:$1|san uair|san <strong>$1</strong> uair|san <strong>$1</strong> uair|san <strong>$1</strong> uair|sna <strong>$1</strong> uairean|sna <strong>$1</strong> uair}} a thìde seo chaidh aig $3 air $2.",
        "wlshowlast": "Seall na $1 uairean a thìde mu dheireadh $2 làithean mu dheireadh $3",
        "watchlist-options": "Roghainnean mo chlàir-faire",
        "watching": "'Ga chur air a' chlàr-fhaire...",
        "unwatching": "A' toirt far a' chlàir-fhaire...",
+       "watcherrortext": "Thachair mearachd le atharrachadh nan roghainnean airson \"$1\" airson a' chlàr-fhaire agad.",
        "enotif_reset": "Comharraich gun do thadhladh air gach duilleag",
+       "enotif_body_intro_created": "Chaidh duilleag $1 air {{SITENAME}} a chruthachadh le $2 $PAGEEDITDATE, faic $3 airson a' mhùthaidh làithrich.",
+       "enotif_body_intro_moved": "Chaidh duilleag $1 air {{SITENAME}} a ghluasad le $2 $PAGEEDITDATE, faic $3 airson a' mhùthaidh làithrich.",
+       "enotif_body_intro_restored": "Chaidh duilleag $1 air {{SITENAME}} aiseag le $2 $PAGEEDITDATE, faic $3 airson a' mhùthaidh làithrich.",
+       "enotif_body_intro_changed": "Chaidh duilleag $1 air {{SITENAME}} atharrachadh le $2 $PAGEEDITDATE, faic $3 airson a' mhùthaidh làithrich.",
+       "enotif_body": "$WATCHINGUSERNAME, a charaid,\n\n$PAGEINTRO $NEWPAGE\n\nGearr-chunntas an deasaiche: $PAGESUMMARY $PAGEMINOREDIT\n\nCuir fios gun deasaiche:\npost-d: $PAGEEDITOR_EMAIL\nuicidh: $PAGEEDITOR_WIKI\n\nChan fhaigh thu brath-naidheachd eile air gnìomhan ach ma thadhaileas tu air an duilleag 's tu air logadh a-steach. 'S urrainn dhut cuideachd brataich nam brathan-naidheachd aiseag airson nan duilleagan uile a tha air a' chlàr-fhaire agad.\n\nSiostam càirdeil nam brath aig {{SITENAME}}\n\n--\nGus roghainnean nam brathan a gheibh thu air a' phost-d atharrachadh, tadhail air\n{{canonicalurl:{{#special:Preferences}}}}\n\nGus roghainnean a' chlàir-fhaire agad atharrachadh, tadhail air\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nGus duilleagan a thoirt far a' chlàir-fhaire agad, tadhail air\n$UNWATCHURL\n\nBeachdan thugainn 's barrachd taice:\n$HELPPAGE",
        "deletepage": "Sguab às duilleag",
        "confirm": "Daingnich",
        "excontent": "stuth a bh' ann: '$1'",
        "delete-confirm": "Sguab às \"$1\"",
        "delete-legend": "Sguab às",
+       "historywarning": "<strong>Rabhadh:</strong> Tha eachdraidh air an duilleag a tha thu airson sguabadh às sa bheil mu $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}:",
        "confirmdeletetext": "Tha thu an impis duilleag a sguabadh às agus a h-eachdraidh uile gu lèir.\nDearbhaich gu bheil thu airson seo a dhèanamh 's gun tuig thu a' bhuaidh a bhios ann agus gu bheil thu a' dèanamh seo a-rèir [[{{MediaWiki:Policy-url}}|a' phoileasaidh]].",
        "actioncomplete": "Gnìomh deiseil",
        "actionfailed": "Dh'fhàillig ort",
        "deletedtext": "Chaidh \"$1\" a sguabadh às.\nSeall air $2 airson clàr de dhuilleagan a chaidh a sguabadh às o chionn ghoirid.",
        "dellogpage": "Loga an sguabaidh às",
-       "reverted": "Air aiseag gu tionndadh nas sine",
+       "reverted": "Air aiseag gu mùthadh nas sine",
        "deletecomment": "Adhbhar:",
        "deleteotherreason": "Adhbhar eile/a bharrachd:",
        "deletereasonotherlist": "Adhbhar eile",
        "deletereason-dropdown": "*Adhbharan cumanta airson sguabadh às\n** Spama\n** Milleadh\n** Tha e a' briseadh na còrach-lethbhreac\n** Dh'iarr an t-ùghdar e\n** Ath-threòrachadh briste",
        "delete-edit-reasonlist": "Deasaich adhbharan sguabadh às",
+       "delete-toobig": "Tha eachdraidh deasachaidh mòr aig an duilleag seo sa bheil barrachd air $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}.\nChaidh sguabadh às nan duilleagan dhen leithid a chuingeachadh ach na dèid cron a dhèanamh air {{SITENAME}} le mearachd.",
+       "delete-warning-toobig": "Tha eachdraidh deasachaidh mòr aig an duilleag seo sa bheil barrachd air $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}.\nMa sguabas tu às dhi, dh'fhaoidte gun dèan thu cron air na gnìomhan stòr-dàta aig {{SITENAME}}; mar sin, thoir an aire.",
+       "rollback": "Roilig atharraichean air ais",
+       "rollback_short": "Roladh air ais",
        "rollbacklink": "roilig air ais",
+       "rollbacklinkcount": "roilig $1 {{PLURAL:$1|atharrachadh|atharrachadh|atharraichean|atharrachadh}} air ais",
+       "rollbacklinkcount-morethan": "roilig barrachd air $1 {{PLURAL:$1|atharrachadh|atharrachadh|atharraichean|atharrachadh}} air ais",
+       "rollbackfailed": "Dh'fhàillig leis an roladh air ais",
+       "alreadyrolled": "Cha ghabh an deasachadh mu dheireadh air [[:$1]] le [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) a roladh air ais on a rinn cuideigin eile deasachadh no roladh air ais air an duilleag mar-thà.\n\nChaidh an duilleag a dheasachadh an turas mu dheireadh le [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Seo gearr-chunntas an deasachaidh: \"''$1''\".",
        "revertpage": "Deasachaidhean a chaidh a thilleadh le [[Special:Contributions/$2|$2]] ([[User talk:$2|deasbaireachd]]) dhan mhùthadh mu dheireadh le [[User:$1|$1]]",
+       "revertpage-nouser": "Deasachaidhean a chaidh a thilleadh le cleachdaiche falaichte dhan mhùthadh mu dheireadh le [[User:$1|$1]]",
+       "rollback-success": "Na deasachaidhean a chaidh a thilleadh le $1;\nchaidh an tilleadh gun mhùthadh mu dheireadh le $2.",
        "protectlogpage": "Loga an dìon",
        "protectlogtext": "Tha liosta na chaidh a dhìon gu h-ìosal.\nCuir sùil air [[Special:ProtectedPages|liosta nan duilleagan fo dhìon]] airson liosta na fheadhainn a tha fo dhìon an-dràsta fhèin.",
        "protectedarticle": "\"[[$1]]\" air a dhìon",
        "protect-othertime-op": "àm eile",
        "restriction-type": "Cead:",
        "restriction-level": "Ìre bacaidh:",
-       "undeleterevisions": "Chaidh {{PLURAL:$1|$1 leth-bhreac|$1 leth-bhreac|$1 leth-bhreacan|$1 leth-bhreac}} a chur san tasg-lann",
+       "undeletepagetitle": "<strong>Chan e ach mùthaidhean de [[:$1|$1]] a chaidh a sguabadh às a tha sna leanas</strong>.",
+       "undelete-fieldset-title": "Aisig mùthaidhean",
+       "undeleterevisions": "Chaidh {{PLURAL:$1|$1 mhùthadh|$1 mhùthadh|$1 mùthaidhean|$1 mùthadh}} a chur san tasg-lann",
        "undeletelink": "seall/aisig",
        "undeleteviewlink": "seall",
        "namespace": "Namespace:",
        "sp-contributions-talk": "deasbaireachd",
        "sp-contributions-search": "Lorg mùthaidhean leis",
        "sp-contributions-username": "Seòladh IP no ainm-cleachdaiche:",
-       "sp-contributions-toponly": "Na seall deasachaidhean ach na lèirmheasan as ùire",
+       "sp-contributions-toponly": "Na seall deasachaidhean ach na mùthaidhean as ùire",
        "sp-contributions-submit": "Lorg",
        "whatlinkshere": "Na tha a' ceangal a-nall an-seo",
        "whatlinkshere-title": "Duilleagan a tha a' ceangal ri \"$1\"",
        "lockdbsuccesssub": "Shoirbhich leat le glasadh an stòir-dhàta",
        "move-page-legend": "Gluais duilleag",
        "movepagetext": "Ma chleachdas tu am foirm gu h-ìosal, cuiridh tu ainm ùr air 's gluaisidh tu a h-eachdraidh gu lèir dhan ainm ùr.\nBidh an seann tiotal 'na ath-sheòladh dhan tiotal ùr an uairsin.\n'S urrainn dhut ath-sheòladh sam bith a tha a' dol dhan tiotal tùsail ùrachadh leis fhèin.\nMura dèan thu sin, dèan cinnteach gun cuir thu sùil air eagal 's gum bi [[Special:DoubleRedirects|ath-sheòlaidhean dùbailte]] no [[Special:BrokenRedirects|briste]] ann.\n'S ann ort-sa a tha an t-uallach airson dèanamh cinntach gu bheil na ceanglaichean a' dol dha na h-àitichean ceart.\n\nThoir an aire '''nach dèid''' an duilleag a ghluasad ma tha duilleag air an tiotal ùr mu thràth ach ma bhios e falamh no 'na ath-sheòladh 's mur eil eachdraidh deasachaidh ann.\n'S ciall dha seo gun urrainn dhut ainm duilleige a thilleadh dhan ainm a bha air roimhe ma rinn thu mearachd agus nach urrainn dhut sgrìobhadh thairis air duilleag a tha ann.\n\n'''Rabhadh!'''\nFaodaidh seo a bhith 'na atharrachadh mòr ris nach bi dùil air duilleag air a bheil fèill mhòr;\ndèan cinnteach gu bheil thu a' tuigsinn dè a' bhuaidh a bhios agad mus dèid thu air adhart.",
-       "movepagetalktext": "Thèid an duilleag deasbaireachd a tha co-cheangailte ris a ghluasad 'na cois '''ach:'''\n*Ma tha duilleag deasbaireachd nach eil falamh aig an ainm ùr mu thràth, no\n*Ma bheir thu air falbh a' chromag on bhogsa gu h-ìosal\n\nMa thachras seo, feumaidh to an duilleag a ghluasad no cho-aontachadh a làimh, ma tha sin fa-near dhut.",
+       "movepagetalktext": "Thèid an duilleag deasbaireachd a tha co-cheangailte ris a ghluasad 'na cois '''ach:'''\n*Ma tha duilleag deasbaireachd nach eil falamh aig an ainm ùr mu thràth, no\n*Ma bheir thu air falbh a' chromag on bhogsa gu h-ìosal\n\nMa thachras seo, feumaidh to an duilleag a ghluasad no cho-aonachadh a làimh, ma tha sin fa-near dhut.",
        "movearticle": "Gluais duilleag:",
+       "movecategorypage-warning": "<strong>Rachadh:</strong> Tha thu airson duilleag roinn-seòrsa a ghluasad. Thoir an aire nach dèid ach an duilleag a ghluasad 's <em>gur ann nach dèid</em> gach duilleag a tha san t-seann roinn-seòrsa a chur ris an roinn-seòrsa ùr.",
+       "cant-move-category-page": "Chan eil cead agad duilleagan roinn-seòrsa a ghluasad.",
+       "cant-move-to-category-page": "Chan eil cead agad duilleag a ghluasad gu duilleag roinn-seòrsa.",
        "newtitle": "Dhan tiotal ùr:",
        "move-watch": "Cum sùil air an duilleag thùsail agus an duilleag thairgaideach",
        "movepagebtn": "Gluais duilleag",
        "revertmove": "till",
        "delete_and_move": "Sguab às agus gluais",
        "delete_and_move_confirm": "Siuthad, sguab às an duilleag",
+       "move-over-sharedrepo": "== Tha am faidhle ann ==\nTha [[:$1]] ann an ionad-tasgaidh co-roinnte. Thèid tar-àithneadh air an fhaidhle cho-roinnte ma ghluaiseas tu faidhle gun tiotal seo.",
+       "file-exists-sharedrepo": "Tha ainm an fhaidhle a thagh thu 'ga chleachdadh ann an ionad-tasgaidh co-roinnte mar-thà.\nFeuch an tagh thu ainm eile.",
        "export": "Às-phortaich duilleagan",
+       "export-addcattext": "Cuir duilleagan ris o roinn-seòrsa:",
        "allmessages": "Teachdaireachdan an t-siostaim",
        "allmessagesname": "Ainm",
        "allmessagesdefault": "Teacsa bunaiteach na teachdaireachd",
        "tooltip-n-mainpage-description": "Tadhail air an duilleag mhòr",
        "tooltip-n-portal": "Mun phròiseact, nas urrainn dhut dèanamh is far an lorg thu nithean",
        "tooltip-n-currentevents": "Lorg fiosrachadh a bharrachd mu thachartasan an latha",
-       "tooltip-n-recentchanges": "Liosta nam mùthaidhean ùra aig an uici.",
+       "tooltip-n-recentchanges": "Liosta nam mùthaidhean ùra aig an uicidh.",
        "tooltip-n-randompage": "Luchdaich duilleag air thuaiream",
        "tooltip-n-help": "Far am faigh thu fiosrachadh",
-       "tooltip-t-whatlinkshere": "Liosta de gach duilleag uici a tha a' ceangal ris an duilleag seo",
+       "tooltip-t-whatlinkshere": "Liosta de gach duilleag uicidh a tha a' ceangal ris an duilleag seo",
        "tooltip-t-recentchangeslinked": "Mùthaidhean a rinneadh o chionn ghoirid air duilleagan a tha ceangal ann thuca on duilleag seo",
        "tooltip-feed-rss": "Inbhir RSS airson na duilleige seo",
        "tooltip-feed-atom": "Inbhir Atom airson na duilleige seo",
        "tooltip-ca-nstab-project": "Seall duilleag a' phròiseict",
        "tooltip-ca-nstab-image": "Seall duilleag an fhaidhle",
        "tooltip-ca-nstab-template": "Seall an teamplaid",
-       "tooltip-ca-nstab-category": "Seall duilleag na roinne",
+       "tooltip-ca-nstab-category": "Seall duilleag na roinn-seòrsa",
        "tooltip-minoredit": "Comharraich seo mar dheasachadh beag",
        "tooltip-save": "Sàbhail na mùthaidhean agad",
        "tooltip-preview": "Ro-sheall na mùthaidhean agad; saoil an cleachd thu seo mus sàbhail thu iad?",
        "tooltip-diff": "Seall na mùthaidhean a chuir mi air an teacs",
        "tooltip-compareselectedversions": "Seall an diofar eadar an dà mhùthadh dhen duilleag seo a thagh thu",
        "tooltip-watch": "Cuir an duilleag seo air do chlàr-faire",
+       "tooltip-watchlistedit-raw-submit": "Ùraich an clàr-faire",
        "tooltip-rollback": "Ma chleachdas tu \"Roilig air ais\", tillidh thu gach mùthadh a rinn deasaiche àraid le aon bhriogadh",
        "tooltip-undo": "Tillidh \"Neo-dhèan\" am mùthadh seo 's fosglaidh e am foirm mùthaidh ann am modh an ro-sheallaidh. 'S urrainn dhut adhbhar a chur an cèill sa ghearr-chunntas air an dòigh seo.",
        "tooltip-summary": "Cuir a-steach gearr-chunntas",
        "othercontribs": "Stèidhichte air obair le $1.",
        "others": "eile",
        "siteusers": "{{PLURAL:$2|cleachdaiche|cleachdaichean}} {{SITENAME}} $1",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|Roinn-seòrsa fhalaichte|Roinn-seòrsa fhalaichte|Roinnean-seòrsa falaichte|Roinn-seòrsa fhalaichte}} ($1)",
        "pageinfo-toolboxlink": "Fiosrachadh mun duilleag",
+       "pageinfo-category-info": "Fiosrachadh mun roinn-seòrsa",
+       "pageinfo-category-subcats": "Àireamh de fho-roinnean-seòrsa",
+       "markaspatrolleddiff": "Cuir comharra freiceadain ris",
+       "markaspatrolledtext": "Cuir comharra freiceadain ris an duilleag seo",
+       "markedaspatrolled": "Comharra freiceadain ris",
+       "markedaspatrolledtext": "Chaidh comharra freiceadain a chur ris a' mhùthadh de [[:$1]] a thagh thu.",
+       "rcpatroldisabled": "Chaidh feart nam freiceadan airson atharraichean o chionn goirid a chur à comas",
+       "rcpatroldisabledtext": "Tha feart nam freiceadan airson atharraichean o chionn goirid à comas an-dràsta.",
+       "markedaspatrollederror": "Cha ghabh comharra freiceadain a chur ris",
+       "markedaspatrollederrortext": "Feumaidh tu mùthadh a shònrachadh gus comharra freiceadain a chur ris.",
+       "markedaspatrollederror-noautopatrol": "Chan fhaod thu comharra freiceadain a chur ris na h-atharraichean agad fhèin.",
+       "markedaspatrollednotify": "Chaidh comharra freiceadain a cur ris an atharrachadh seo air $1.",
+       "markedaspatrollederrornotify": "Cha b' urrainn dhuinn comharra freiceadain a chur ris.",
+       "patrol-log-page": "Loga nam freiceadan",
+       "patrol-log-header": "Seo loga nam mùthaidhean le comharra freiceadain riutha.",
+       "log-show-hide-patrol": "$1 loga nam freiceadan",
        "previousdiff": "← Mùthadh nas sine",
        "nextdiff": "Deasachadh nas ùire →",
        "file-info-size": "$1 × $2 pixel, meud an fhaidhle: $3, seòrsa MIME: $4",
        "metadata-expand": "Seall am fiosrachadh a bharrachd",
        "metadata-collapse": "Cuir am fiosrachadh a bharrachd am falach",
        "metadata-fields": "Thèid raointean meata-dhàta nan dealbhan a tha ainmichte san teachdaireachd seo a ghabhail a-steach air duilleag an deilbh nuair a bhios clàr a' mheata-dàta air a dhùmhlachadh.\nBidh an fheadhainn eile falaichte a ghnàth.\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-copyright": "Seilbheadair na còrach-lethbhreac",
+       "exif-iimcategory": "Roinn-seòrsa",
+       "exif-iimsupplementalcategory": "Roinnean-seòrsa foirlionach",
+       "exif-copyrighted": "Staid na còrach-lethbhreac",
+       "exif-copyrightowner": "Seilbheadair na còrach-lethbhreac",
+       "exif-webstatement": "Aithris na còrach-lethbhreac air loidhne",
+       "exif-licenseurl": "URL airson ceadachas na còrach-lethbhreac",
+       "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
+       "exif-subjectnewscode-value": "$2 ($1)",
+       "exif-compression-1": "Gun dùmhlachadh",
+       "exif-compression-5": "LZW",
+       "exif-compression-6": "JPEG (sean)",
+       "exif-compression-7": "JPEG",
+       "exif-compression-8": "Deflate (Adobe)",
+       "exif-compression-32773": "PackBits (Macintosh RLE)",
+       "exif-compression-32946": "Deflate (PKZIP)",
+       "exif-compression-34712": "JPEG2000",
+       "exif-copyrighted-true": "Fo chòir-lethbhreac",
+       "exif-copyrighted-false": "Cha deach staid na còrach-lethbhreac a shuidheachadh",
+       "exif-photometricinterpretation-2": "RGB",
+       "exif-photometricinterpretation-6": "YCbCr",
+       "exif-unknowndate": "Gun fhios air a' cheann-là",
+       "exif-orientation-1": "Àbhaisteach",
+       "exif-orientation-2": "Air a fhlipeadh air a' chòmhnard",
+       "exif-orientation-3": "Cuairtichte le 180°",
+       "exif-orientation-4": "Air a fhlipeadh gu h-inghearach",
+       "exif-orientation-5": "Cuairtichte le 90° gu tuathail 's air a fhlipeadh gu h-inghearach",
+       "exif-orientation-6": "Cuairtichte le 90° gu tuathail",
+       "exif-orientation-7": "Cuairtichte le 90° gu deiseil 's air a fhlipeadh gu h-inghearach",
+       "exif-orientation-8": "Cuairtichte le 90° gu deiseil",
+       "exif-xyresolution-i": "$1 dpi",
+       "exif-xyresolution-c": "$1 dpc",
+       "exif-colorspace-1": "sRGB",
+       "exif-colorspace-65535": "Gun chailbhreachadh",
+       "exif-componentsconfiguration-0": "chan eil e ann",
+       "exif-componentsconfiguration-1": "Y",
+       "exif-componentsconfiguration-2": "Cb",
+       "exif-componentsconfiguration-3": "Cr",
+       "exif-componentsconfiguration-4": "R",
+       "exif-componentsconfiguration-5": "G",
+       "exif-componentsconfiguration-6": "B",
+       "exif-exposureprogram-0": "Gun mhìneachadh",
+       "exif-exposureprogram-1": "A làimh",
+       "exif-exposureprogram-2": "Prògram àbhaisteach",
+       "exif-subjectdistance-value": "$1 {{PLURAL:$1|mheatair|mheatair|meatairean|meatair}}",
+       "exif-meteringmode-0": "Chan eil fhios",
+       "exif-meteringmode-1": "Cuibheasach",
+       "exif-meteringmode-255": "Eile",
+       "exif-lightsource-0": "Chan eil fhios",
+       "exif-lightsource-20": "D55",
+       "exif-lightsource-21": "D65",
+       "exif-lightsource-22": "D75",
+       "exif-lightsource-23": "D50",
+       "exif-flash-mode-3": "modh fèin-obrachail",
+       "exif-focalplaneresolutionunit-2": "òirleach",
+       "exif-sensingmethod-1": "Gun mhìneachadh",
+       "exif-gaincontrol-0": "Chan eil gin",
+       "exif-gpsspeed-k": "Cilemeatair san uair",
+       "exif-gpsspeed-m": "Mìle gach uair",
+       "exif-gpsspeed-n": "Mìle-mara san uair",
+       "exif-gpsdestdistance-k": "Cilemeatair",
+       "exif-gpsdestdistance-m": "Mìle",
+       "exif-gpsdestdistance-n": "Mìle-mara",
+       "exif-dc-contributor": "Co-thabhartaichean",
+       "exif-dc-date": "Ceann-là",
+       "exif-dc-publisher": "Foillsichear",
+       "exif-dc-relation": "Meadhanan co-cheangailte",
+       "exif-dc-rights": "Còirichean",
+       "exif-dc-source": "Meadhan tùsail",
+       "exif-dc-type": "Seòrsa a' mheadhain",
+       "exif-rating-rejected": "Air a dhiùltadh",
+       "exif-isospeedratings-overflow": "Nas motha na 65535",
+       "exif-maxaperturevalue-value": "$1 APEX (f/$2)",
        "watchlistall2": "a h-uile",
        "namespacesall": "uile",
        "monthsall": "uile",
+       "confirm-watch-top": "A bheil thu airson an duilleag seo a chur ris a' chlàr-fhaire agad?",
+       "confirm-unwatch-top": "A bheil thu airson an duilleag seo a thoirt air falbh on chlàr-fhaire agad?",
        "watchlistedit-normal-title": "Deasaich an clàr-faire",
+       "watchlistedit-normal-legend": "Thoir tiotalan air falbh on chlàr-fhaire",
+       "watchlistedit-normal-explain": "Chì thu na tiotalan a tha air a' chlàr-fhaire agad gu h-ìosal.\nGus tiotal a thoirt air falbh, cuir cromag sa bhogsa ri thaobh 's briog air \"{{int:Watchlistedit-normal-submit}}\".\n'S urrainn dhut [[Special:EditWatchlist/raw|còd an liosta a dheasachadh]] cuideachd.",
+       "watchlistedit-normal-submit": "Thoir tiotalan air falbh",
+       "watchlistedit-normal-done": "Chaidh {{PLURAL:$1|$1 tiotal|$1 thiotal|$1 tiotalan|$1 tiotal}} a thoirt far a' chlàir-fhaire agad:",
+       "watchlistedit-raw-title": "Deasaich còd a' chlàir-fhaire",
+       "watchlistedit-raw-legend": "Deasaich còd a' chlàir-fhaire",
        "watchlistedit-raw-submit": "Ùraich an clàr-faire",
        "watchlisttools-view": "Seall na mùthaidhean iomchaidh",
        "watchlisttools-edit": "Seall is deasaich mo chlàr-faire",
        "watchlisttools-raw": "Deasaich còd a' chlàir-fhaire",
        "duplicate-defaultsort": "'''Rabhadh:''' Tha an iuchair seòrsachaidh bhunaiteach \"$2\" a' dol thairis air seann iuchair eile, \"$1\".",
        "version": "Tionndadh",
+       "version-poweredby-credits": "Tha an uicidh seo 'ga toirt dhut le cumhachd <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, còir-lethbhreac © 2001-$1 $2.",
        "specialpages": "Duilleagan sònraichte",
+       "specialpages-note-top": "Treòir",
        "external_image_whitelist": " #Fàg an loidhne seo dìreach mar a tha e<pre>\n#Cuir mìrean nan regular expressions (dìreach a' phàirt eadar //) gu hìosal\n#Thèid seisean URL a lorg dhaibh am measg nan dealbhan air an taobh a-muigh (hotlinks)\n#Chithear an fheadhainn a tha a' freagairt ri seise a shealltainn air neo chithear ceangal dhan dealbh a-mhàin\n#Chan eil ann an loidhnichean a tha a' tòiseachadh le # ach beachdan\n#Chan eil aire do litrichean mòra no beaga\n\n#Cuir gach mì regex os cionn na loidhne seo. Fàg an loidhne seo dìreach mar a tha e</pre>",
        "tag-filter": "Criathrag [[Special:Tags|thagaichean]]:",
+       "logentry-patrol-patrol": "Chuir $1 comharra freiceadain ris a' mhùthadh $4 aig an duilleag $3",
+       "logentry-patrol-patrol-auto": "Chuir $1 comharra freiceadain ris a' mhùthadh $4 aig an duilleag $3 gu fèin-obrachail",
        "rightsnone": "(chan eil gin)",
-       "searchsuggest-containing": "anns a bheil..."
+       "searchsuggest-containing": "anns a bheil...",
+       "api-error-fileexists-shared-forbidden": "Tha faidhle air a bheil \"$1\" san ionad-tasgaich cho-roinnte mar-thà 's cha ghabh sgrìobhadh thairis air."
 }
index 3072722..0f017d4 100644 (file)
        "vector-view-view": "Ler",
        "vector-view-viewsource": "Ver o código fonte",
        "actions": "Accións",
+       "vector-more-actions": "Máis",
        "namespaces": "Espazos de nomes",
        "variants": "Variantes",
        "navigation-heading": "Menú de navegación",
        "laggedslavemode": "'''Aviso:''' A páxina pode non conter as actualizacións recentes.",
        "readonly": "Base de datos pechada",
        "enterlockreason": "Dea unha razón para o peche, incluíndo unha estimación de até cando se manterá",
-       "readonlytext": "Nestes intres a base de datos está pechada a novas entradas e outras modificacións, probabelmente debido a rutinas de mantemento, tras as que volverá á normalidade.\n\nO administrador que a pechou deu esta explicación: $1",
+       "readonlytext": "Nestes intres a base de datos está pechada a novas entradas e outras modificacións, probablemente debido a procesos de mantemento, tras os que volverá á normalidade.\n\nO administrador que a pechou deu esta explicación: $1",
        "missing-article": "A base de datos non atopou o texto da páxina chamada \"$1\" $2, que debera ter atopado.\n\nNormalmente, isto está causado por seguir unha ligazón cara a unha diferenza vella ou a unha páxina que foi borrada.\n\nSe este non é o caso, poida que atopase un erro no software.\nPor favor, comuníquello a un [[Special:ListUsers/sysop|administrador]] tomando nota do enderezo URL.",
        "missingarticle-rev": "(nº de revisión: $1)",
        "missingarticle-diff": "(dif: $1, $2)",
        "userlogin-joinproject": "Únase a {{SITENAME}}",
        "nologin": "Non está rexistrado? $1.",
        "nologinlink": "Cree unha conta",
-       "createaccount": "Crear unha conta nova",
+       "createaccount": "Crear unha conta",
        "gotaccount": "Xa ten unha conta? $1.",
        "gotaccountlink": "Acceda ao sistema",
        "userlogin-resetlink": "Esqueceu os seus datos de rexistro?",
        "hiddencategories": "Esta páxina forma parte {{PLURAL:$1|dunha categoría oculta|de $1 categorías ocultas}}:",
        "edittools": "<!-- O texto que apareza aquí mostrarase por debaixo dos formularios de edición e envío. -->",
        "nocreatetext": "{{SITENAME}} ten restrinxida a posibilidade de crear páxinas novas.\nPode volver e editar unha páxina que xa existe ou, se non, [[Special:UserLogin|rexistrarse ou crear unha conta]].",
-       "nocreate-loggedin": "Non dispón dos permisos necesarios para crear páxinas novas.",
+       "nocreate-loggedin": "Non ten os permisos necesarios para crear páxinas novas.",
        "sectioneditnotsupported-title": "A edición de seccións non está soportada",
        "sectioneditnotsupported-text": "A edición de seccións non está soportada nesta páxina.",
        "permissionserrors": "Erro de permisos",
        "edit-gone-missing": "Non se pode actualizar a páxina.\nSemella que foi borrada.",
        "edit-conflict": "Conflito de edición.",
        "edit-no-change": "A súa edición foi ignorada dado que non fixo ningún cambio no texto.",
+       "postedit-confirmation-created": "Creouse a páxina.",
+       "postedit-confirmation-restored": "Restaurouse a páxina.",
        "postedit-confirmation-saved": "Gardouse a súa edición.",
        "edit-already-exists": "Non se pode crear a nova páxina.\nEsta xa existe.",
        "defaultmessagetext": "Texto predeterminado",
        "parser-template-recursion-depth-warning": "Excedeuse o límite de profundidade de recursión do modelo ($1)",
        "language-converter-depth-warning": "Excedeuse o límite de profundidade do convertedor de lingua ($1)",
        "node-count-exceeded-category": "Páxinas nas que se supera o número de nodos",
-       "node-count-exceeded-warning": "Páxina que supera o número de nodos",
+       "node-count-exceeded-category-desc": "Unha categoría para as páxinas que superan o número de nodos.",
+       "node-count-exceeded-warning": "A páxina supera o número de nodos",
        "expansion-depth-exceeded-category": "Páxinas nas que se supera a profundidade de expansión",
-       "expansion-depth-exceeded-warning": "Páxina que supera a profundidade de expansión",
+       "expansion-depth-exceeded-category-desc": "Esta é unha categoría para as páxinas que superan a profundidade de expansión.",
+       "expansion-depth-exceeded-warning": "A páxina supera a profundidade de expansión",
        "parser-unstrip-loop-warning": "Detectouse un bucle inamovible",
        "parser-unstrip-recursion-limit": "Excedeuse o límite de recursión inamovible ($1)",
        "converter-manual-rule-error": "Detectouse un erro na regra manual de conversión da lingua",
        "currentrev": "Revisión actual",
        "currentrev-asof": "Revisión actual feita o $2 ás $3",
        "revisionasof": "Revisión como estaba o $2 ás $3",
-       "revision-info": "Revisión feita o $4 ás $5 por $2",
+       "revision-info": "Revisión feita o $4 ás $5 por {{GENDER:$6|$2}}$7",
        "previousrevision": "← Revisión máis antiga",
        "nextrevision": "Revisión máis nova →",
        "currentrevisionlink": "Revisión actual",
        "searchmenu-exists": "<strong>Xa existe unha páxina chamada \"[[:$1]]\" neste wiki.</strong> {{PLURAL:$2|0=|Bótelle unha ollada tamén aos outros resultados atopados.}}",
        "searchmenu-new": "<strong>Crear a páxina \"[[:$1]]\" neste wiki!</strong> {{PLURAL:$2|0=|Bótelle unha ollada tamén á páxina atopada na súa procura.|Bótelle unha ollada tamén aos resultados atopados.}}",
        "searchprofile-articles": "Páxinas de contido",
-       "searchprofile-project": "Páxinas do proxecto e de axuda",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Todo",
        "searchprofile-advanced": "Avanzado",
        "searchprofile-articles-tooltip": "Procurar en $1",
-       "searchprofile-project-tooltip": "Procurar en $1",
        "searchprofile-images-tooltip": "Procurar ficheiros",
        "searchprofile-everything-tooltip": "Procurar en todo o contido (incluíndo páxinas de conversa)",
        "searchprofile-advanced-tooltip": "Procurar nos espazos de nomes elixidos",
        "search-interwiki-default": "Resultados de $1:",
        "search-interwiki-more": "(máis)",
        "search-relatedarticle": "Relacionado",
-       "searcheverything-enable": "Procurar en todos os espazos de nomes",
        "searchrelated": "relacionado",
        "searchall": "todo",
        "showingresults": "{{PLURAL:$1|Móstrase '''1''' resultado|Móstranse '''$1''' resultados}}, comezando polo número '''$2'''.",
        "powersearch-togglelabel": "Seleccionar:",
        "powersearch-toggleall": "Todos",
        "powersearch-togglenone": "Ningún",
+       "powersearch-remember": "Lembrar a selección en futuras pescudas",
        "search-external": "Procura externa",
        "searchdisabled": "As procuras en {{SITENAME}} están deshabilitadas por cuestións de rendemento.\nMentres tanto pode procurar usando o Google.\nNote que os seus índices do contido de {{SITENAME}} poden estar desactualizados.",
        "search-error": "Produciuse un erro durante a procura: $1",
        "allowemail": "Admitir mensaxes de correo electrónico doutros usuarios",
        "prefs-searchoptions": "Procura",
        "prefs-namespaces": "Espazos de nomes",
-       "defaultns": "Se non, procurar nestes espazos de nomes:",
        "default": "predeterminado",
        "prefs-files": "Ficheiros",
        "prefs-custom-css": "CSS personalizado",
        "prefs-emailconfirm-label": "Confirmación do correo:",
        "youremail": "Correo electrónico:",
        "username": "Nome de {{GENDER:$1|usuario|usuaria}}:",
-       "uid": "ID de {{GENDER:$1|usuario|usuaria}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membro}} {{PLURAL:$1|do grupo|dos grupos}}:",
        "prefs-registration": "Data e hora de rexistro:",
        "yourrealname": "Nome real:",
        "right-move": "Mover páxinas",
        "right-move-subpages": "Mover páxinas coas súas subpáxinas",
        "right-move-rootuserpages": "Mover páxinas de usuario raíz",
+       "right-move-categorypages": "Mover páxinas de categoría",
        "right-movefile": "Mover ficheiros",
        "right-suppressredirect": "Non crear unha redirección dende o nome vello ao mover unha páxina",
        "right-upload": "Subir ficheiros",
        "action-createpage": "crear páxinas",
        "action-createtalk": "crear páxinas de conversa",
        "action-createaccount": "crear esta conta de usuario",
+       "action-history": "ver o historial desta páxina",
        "action-minoredit": "marcar esta edición como pequena",
        "action-move": "mover esta páxina",
        "action-move-subpages": "mover esta páxina e as súas subpáxinas",
        "action-move-rootuserpages": "mover páxinas de usuario raíz",
+       "action-move-categorypages": "mover páxinas de categoría",
        "action-movefile": "mover este ficheiro",
        "action-upload": "cargar este ficheiro",
        "action-reupload": "sobrescribir este ficheiro existente",
        "recentchanges-label-unpatrolled": "Esta edición aínda non foi comprobada",
        "recentchanges-label-plusminus": "O tamaño da páxina variou este número de bytes",
        "recentchanges-legend-heading": "'''Lenda:'''",
-       "recentchanges-legend-newpage": "(véxase tamén a [[Special:NewPages|lista de páxinas novas]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (véxase tamén a [[Special:NewPages|lista de páxinas novas]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "A continuación móstranse os cambios feitos desde o <strong>$3</strong> ás <strong>$4</strong> (móstranse <strong>$1</strong> como máximo).",
        "rclistfrom": "Mostrar os cambios novos desde o $3 ás $2",
        "log-title-wildcard": "Procurar os títulos que comecen con este texto",
        "showhideselectedlogentries": "Mostrar/agochar as entradas do rexistro seleccionadas",
        "allpages": "Todas as páxinas",
-       "alphaindexline": "$1 a $2",
        "nextpage": "Páxina seguinte ($1)",
        "prevpage": "Páxina anterior ($1)",
        "allpagesfrom": "Mostrar as páxinas que comecen por:",
        "watchnologin": "Non accedeu ao sistema",
        "addwatch": "Engadir á lista vixilancia",
        "addedwatchtext": "A páxina \"[[:$1]]\" foi engadida á súa [[Special:Watchlist|lista de vixilancia]].\nOs cambios futuros nesta páxina e na súa páxina de conversa asociada serán listados alí.",
+       "addedwatchtext-short": "A páxina \"$1\" foi engadida á súa lista de vixilancia.",
        "removewatch": "Eliminar da lista de vixilancia",
        "removedwatchtext": "A páxina \"[[:$1]]\" foi eliminada [[Special:Watchlist|da súa lista de vixilancia]].",
+       "removedwatchtext-short": "A páxina \"$1\" foi eliminada da súa lista de vixilancia.",
        "watch": "Vixiar",
        "watchthispage": "Vixiar esta páxina",
        "unwatch": "Deixar de vixiar",
        "movepagetalktext": "A páxina de conversa asociada, se existe, será automaticamente movida con esta '''agás que''':\n*Estea a mover a páxina empregando espazos de nomes,\n*Xa exista unha páxina de conversa con ese nome, ou\n*Desactive a opción de abaixo.\n\nNestes casos, terá que mover ou mesturar a páxina manualmente se o desexa.",
        "movearticle": "Mover esta páxina:",
        "moveuserpage-warning": "'''Aviso:''' Está a piques de mover unha páxina de usuario. Por favor, teña en conta que só se trasladará a páxina e que o usuario '''non''' será renomeado.",
+       "movecategorypage-warning": "'''Aviso:''' Está a piques de mover unha páxina de categoría. Por favor, teña en conta que só se trasladará a páxina e que as páxinas presentes na categoría vella '''non''' serán recategorizadas na categoría nova.",
        "movenologintext": "Debe ser un usuario rexistrado e [[Special:UserLogin|acceder ao sistema]] para mover unha páxina.",
        "movenotallowed": "Non ten os permisos necesarios para mover páxinas.",
        "movenotallowedfile": "Non ten os permisos necesarios para mover ficheiros.",
        "cant-move-user-page": "Non ten os permisos necesarios para mover páxinas de usuario (agás subpáxinas).",
        "cant-move-to-user-page": "Non ten os permisos necesarios para mover unha páxina a unha páxina de usuario (agás a unha subpáxina).",
+       "cant-move-category-page": "Non ten os permisos necesarios para mover páxinas de categoría.",
+       "cant-move-to-category-page": "Non ten os permisos necesarios para mover unha páxina a unha páxina de categoría.",
        "newtitle": "Ao novo título:",
        "move-watch": "Vixiar esta páxina",
        "movepagebtn": "Mover a páxina",
        "tooltip-summary": "Escriba un breve resumo",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/** O CSS que se coloque aquí será aplicado a todas as aparencias */",
-       "cologneblue.css": "/* O CSS que se coloque aquí afectará a quen use a aparencia Azul colonial */",
        "monobook.css": "/* O CSS que se coloque aquí afectará a quen use a aparencia Monobook */",
-       "modern.css": "/* O CSS que se coloque aquí afectará a quen use a aparencia Moderna */",
        "vector.css": "/* O CSS que se coloque aquí afectará a quen use a aparencia Vector */",
        "print.css": "/* O CSS que se coloque aquí afectará ás impresións */",
        "noscript.css": "/* O CSS que se coloque aquí afectará aos usuarios co JavaScript desactivado */",
        "group-sysop.css": "/* O CSS que se coloque aquí afectará soamente aos administradores */",
        "group-bureaucrat.css": "/* O CSS que se coloque aquí afectará soamente aos burócratas */",
        "common.js": "/* Calquera JavaScript que haxa aquí será cargado para todos os usuarios en cada páxina que vexan. */",
-       "cologneblue.js": "/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Azul colonial */",
        "monobook.js": "/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia MonoBook */",
-       "modern.js": "/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Moderna */",
        "vector.js": "/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Vector */",
        "group-autoconfirmed.js": "/* Calquera JavaScript que haxa aquí será cargado soamente para os usuarios autoconfirmados */",
        "group-bot.js": "/* Calquera JavaScript que haxa aquí será cargado soamente para os bots */",
        "pageinfo-category-pages": "Número de páxinas",
        "pageinfo-category-subcats": "Número de subcategorías",
        "pageinfo-category-files": "Número de ficheiros",
-       "skinname-cologneblue": "Azul colonial",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderna",
        "markaspatrolleddiff": "Marcar como revisada",
        "markaspatrolledtext": "Marcar esta páxina como revisada",
        "markedaspatrolled": "Marcar como revisado",
        "newimages-summary": "Esta páxina especial mostra os últimos ficheiros cargados.",
        "newimages-legend": "Filtro",
        "newimages-label": "Nome do ficheiro (ou parte del):",
+       "newimages-showbots": "Mostrar as cargas feitas por bots",
        "noimages": "Non hai imaxes para ver.",
        "ilsubmit": "Procurar",
        "bydate": "por data",
        "watchlistedit-raw-done": "Actualizouse a súa lista de vixilancia.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Engadiuse un título|Engadíronse $1 títulos}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Eliminouse un título|Elimináronse $1 títulos}}:",
+       "watchlistedit-clear-title": "Limpar a lista de vixilancia",
+       "watchlistedit-clear-legend": "Limpar a lista de vixilancia",
+       "watchlistedit-clear-explain": "Eliminaranse todos os títulos da súa lista de vixilancia",
+       "watchlistedit-clear-titles": "Títulos:",
+       "watchlistedit-clear-submit": "Limpar a lista de vixilancia (isto é permanente!)",
+       "watchlistedit-clear-done": "Limpouse a súa lista de vixilancia.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Eliminouse un título|Elimináronse $1 títulos}}:",
+       "watchlistedit-too-many": "Hai demasiadas páxinas para mostrar.",
+       "watchlisttools-clear": "Limpar a lista de vixilancia",
        "watchlisttools-view": "Ver as modificacións relevantes",
        "watchlisttools-edit": "Ver e editar a lista de vixilancia",
        "watchlisttools-raw": "Editar a lista de vixilancia simple",
        "htmlform-no": "Non",
        "htmlform-yes": "Si",
        "htmlform-chosen-placeholder": "Seleccione unha opción",
+       "htmlform-cloner-create": "Engadir máis",
+       "htmlform-cloner-delete": "Eliminar",
+       "htmlform-cloner-required": "Necesítase, polo menos, un valor.",
        "sqlite-has-fts": "$1 con soporte para procuras de texto completo",
        "sqlite-no-fts": "$1 sen soporte para procuras de texto completo",
        "logentry-delete-delete": "$1 {{GENDER:$2|borrou}} a páxina \"$3\"",
index a3ec3ba..5b86822 100644 (file)
        "searchmenu-exists": "* Syte '''[[$1]]'''",
        "searchmenu-new": "'''[[:$1|Leg d Syte ''$1'' in dem Wiki aa!]]'''",
        "searchprofile-articles": "Inhaltssyte",
-       "searchprofile-project": "Hilf- un Projäktsyte",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alles",
        "searchprofile-advanced": "Erwyteret",
        "searchprofile-articles-tooltip": "Sueche in $1",
-       "searchprofile-project-tooltip": "Sueche in $1",
        "searchprofile-images-tooltip": "Noch Bilder sueche",
        "searchprofile-everything-tooltip": "Gsamte Inhalt dursueche (au d Diskussionssyte)",
        "searchprofile-advanced-tooltip": "Suech in wytere Namensryym",
        "search-interwiki-default": "$1 Ergebniss:",
        "search-interwiki-more": "(meh)",
        "search-relatedarticle": "Verwandti",
-       "searcheverything-enable": "In alle Namensryym sueche",
        "searchrelated": "verwandt",
        "searchall": "alli",
        "showingresults": "Do {{PLURAL:$1|isch '''1''' Ergebnis|sin '''$1''' Ergebniss}}, s fangt aa mit dr Nummerer '''$2.'''",
        "allowemail": "andere Benutzer erlaube, dass si Ihne E-Mails chenne schicke",
        "prefs-searchoptions": "Suechoptione",
        "prefs-namespaces": "Namensryym",
-       "defaultns": "Sunscht in däne Namensryym sueche:",
        "default": "Voryystellig",
        "prefs-files": "Bilder",
        "prefs-custom-css": "Benutzerdefinierti CSS",
        "prefs-emailconfirm-label": "E-Mail-Bstätigung:",
        "youremail": "E-Mail-Adräss:",
        "username": "{{GENDER:$1|Benutzername}}:",
-       "uid": "{{GENDER:$1|Benutzernummere}}:",
        "prefs-memberingroups": "{{GENDER:$2|Mitglid}} vu dr {{PLURAL:$1|Benutzergruppe}}:",
        "prefs-registration": "Aamäldzyt:",
        "yourrealname": "Echte Name:",
        "recentchanges-label-bot": "Die Bearbeitig isch dur e Bott uusgfiert wore",
        "recentchanges-label-unpatrolled": "Die Bearbeitig isch nonig vun eme Fäldhieter aagluegt wore",
        "recentchanges-label-plusminus": "Di gänderet Sytegreßi (Aazahl in Byte)",
-       "recentchanges-legend-newpage": "(lueg au d [[Special:NewPages|Lischt vu neie Syte]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lueg au d [[Special:NewPages|Lischt vu neie Syte]])",
        "rcnotefrom": "Des sin d Ändrige syter <b>$2</b> (bis zem <b>$1</b> zeigt).",
        "rclistfrom": "Nume Änderige syt $3, $2 Uhr zeige.",
        "rcshowhideminor": "Chlynigkeite $1",
        "log-title-wildcard": "Titel fangt aa mit",
        "showhideselectedlogentries": "Uusgwehlti Logbuechyytreg aazeige/verstecke",
        "allpages": "alli Sytene",
-       "alphaindexline": "vo $1 bis $2",
        "nextpage": "Nächscht Syte ($1)",
        "prevpage": "Vorderi Syte ($1)",
        "allpagesfrom": "Syte aazeige vo:",
index bc124ce..8951265 100644 (file)
        "searchmenu-exists": "''' આ વિકિ પર  \"[[:$1]]\" નામે પાનું પહેલેથી અસ્તિત્વમાં છે.'''",
        "searchmenu-new": "<strong>આ વિકિ પર \"[[:$1]]\" પાનું બનાવો!</strong> {{PLURAL:$2|0=|તમારી શોધમાં મળેલ પાનું પણ જુઓ.|તમારી શોધમાં મળેલ પરિણામો પણ જુઓ.}}",
        "searchprofile-articles": "લેખનું પાનું",
-       "searchprofile-project": "મદદ અને યોજના પાનું",
        "searchprofile-images": "દ્રશ્ય શ્રાવ્ય માધ્યમ",
        "searchprofile-everything": "દરેકમાં શોધો",
        "searchprofile-advanced": "ઉચ્ચ",
        "searchprofile-articles-tooltip": "$1 માં શોધો",
-       "searchprofile-project-tooltip": "$1માં શોધો",
        "searchprofile-images-tooltip": "ફાઇલ શોધો",
        "searchprofile-everything-tooltip": "બધે જ શોધો (ચર્ચાનાં પાના સહિત)",
        "searchprofile-advanced-tooltip": "સ્થાનીય નામસ્થળોમાં શોધો:",
        "search-interwiki-default": "$1 માંથી પરીણામો:",
        "search-interwiki-more": "(વધુ)",
        "search-relatedarticle": "શોધ સંબંધિત",
-       "searcheverything-enable": "નામસ્થળોમાં શોધો:",
        "searchrelated": "શોધ સંબંધિત",
        "searchall": "બધા",
        "showingresults": " {{PLURAL:$1|'''1''' પરિણામ|'''$1''' પરિણામો}} સુધી #'''$2''' થી શરૂ  કરી",
        "allowemail": "અન્ય સભ્યો તરફથી આવતા ઇ-મેલને પરવાનગી આપો",
        "prefs-searchoptions": "શોધો",
        "prefs-namespaces": "નામ અવકાશો",
-       "defaultns": "અન્યથા આ નામ અવકાશ માં શોધો",
        "default": "મૂળ વિકલ્પ",
        "prefs-files": "ફાઇલ",
        "prefs-custom-css": "ખાસ  CSS",
        "prefs-emailconfirm-label": "ઇ-મેલ પુષ્ટી",
        "youremail": "ઇ-મેઇલ:",
        "username": "{{GENDER:$1|સભ્યનામ}}:",
-       "uid": "{{GENDER:$1|સભ્ય}} ઓળખ:",
        "prefs-memberingroups": "{{PLURAL:$1|સમુહ|સમુહો}}ના {{GENDER:$2|સભ્ય}}:",
        "prefs-registration": "નોંધણી સમય",
        "yourrealname": "સાચું નામ:",
        "recentchanges-label-unpatrolled": "આ ફેરફાર હજી ચકાસાયો નથી",
        "recentchanges-label-plusminus": "પાનાનું કદ આપેલા અંકો જેટલાં બાઈટ્સ જેટલું બદલ્યુ છે.",
        "recentchanges-legend-heading": "'''કળ:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|નવા પાનાઓની યાદી]] પણ જુઓ)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|નવા પાનાઓની યાદી]] પણ જુઓ)",
        "rcnotefrom": "નીચે <strong>$2</strong> થી ફેરફારો દર્શાવેલ છે (<strong>$1</strong> સુધી દર્શાવલે છે).",
        "rclistfrom": "$3 $2 બાદ થયેલા નવા ફેરફારો બતાવો",
        "rcshowhideminor": "નાના ફેરફારો $1",
        "log-title-wildcard": "આ શબ્દો દ્વારા શરૂ થનાર શીર્ષકો શોધો",
        "showhideselectedlogentries": "પસંદગીની લોગ નોંધણીઓ બતાવો/છૂપાવો",
        "allpages": "બધા પાના",
-       "alphaindexline": "$1 થી $2",
        "nextpage": "આગળનું પાનું ($1)",
        "prevpage": "પાછળનું પાનું ($1)",
        "allpagesfrom": "આનાથી શરૂ થતા પાના દર્શાવો:",
index 63e467b..f081ee5 100644 (file)
@@ -9,7 +9,8 @@
                        "Mnemonic kek",
                        "Urhixidur",
                        "Xiaomingyan",
-                       "아라"
+                       "아라",
+                       "Mywood"
                ]
        },
        "tog-underline": "鏈接加底線:",
        "history_short": "歷史",
        "updatedmarker": "亻厓上擺訪問以來嘅更新",
        "printableversion": "做得印刷嘅版本",
-       "permalink": "永久鏈接",
+       "permalink": "固定連結",
        "print": "印刷",
        "view": "查看",
        "edit": "編寫",
        "searchmenu-exists": "'''在邇隻wiki上已經有一頁喊做“[[:$1]]”。'''",
        "searchmenu-new": "'''在本wiki上建立邇隻頁面“[[:$1]]”!'''",
        "searchprofile-articles": "內容頁面",
-       "searchprofile-project": "幫助撈計劃頁面",
        "searchprofile-images": "多媒體",
        "searchprofile-everything": "全部",
        "searchprofile-advanced": "高級",
        "searchprofile-articles-tooltip": "在$1肚搜尋",
-       "searchprofile-project-tooltip": "在$1肚搜尋",
        "searchprofile-images-tooltip": "搜尋文件",
        "searchprofile-everything-tooltip": "搜索全部(包括討論頁面)",
        "searchprofile-advanced-tooltip": "在用戶安名空間肚搜尋",
        "servertime": "Fu̍k-vu hi-khí sṳ̀-kiên",
        "guesstimezone": "從瀏覽器填寫",
        "allowemail": "接受來自其他用戶嘅郵件",
-       "defaultns": "Yi-sat sêu-sok ke miàng-sṳ khûng-kiên:",
        "default": "默認",
        "prefs-files": "文件",
        "youremail": "電子郵件:",
        "username": "Yung-fu miàng-chhṳ̂n:",
-       "uid": "Yung-fu ID:",
        "yourrealname": "真名:",
        "yourlanguage": "語言:",
        "yourvariant": "Sṳ-thí pien-von:",
        "logempty": "在日誌肚無匹配項。",
        "log-title-wildcard": "搜尋以邇隻文字開頭嘅標題",
        "allpages": "全部頁面",
-       "alphaindexline": "$1到$2",
        "nextpage": "下一頁($1)",
        "prevpage": "上一頁($1)",
        "allpagesfrom": "顯示從邇處開始嘅頁面:",
        "tooltip-t-upload": "上傳文件",
        "tooltip-t-specialpages": "全部特殊文章嘅列表",
        "tooltip-t-print": "本頁面做得打印嘅版本",
-       "tooltip-t-permalink": "邇隻頁面修訂版本嘅永久鏈接",
+       "tooltip-t-permalink": "邇隻頁面修訂版本嘅固定連結",
        "tooltip-ca-nstab-main": "查看內容頁",
        "tooltip-ca-nstab-user": "查看用戶頁面",
        "tooltip-ca-nstab-media": "Chhà-khon hìn-thí-chông",
index d0e05ee..b033725 100644 (file)
        "vector-view-view": "קריאה",
        "vector-view-viewsource": "הצגת מקור",
        "actions": "פעולות",
+       "vector-more-actions": "עוד",
        "namespaces": "מרחבי שם",
        "variants": "גרסאות שפה",
        "navigation-heading": "תפריט הניווט",
        "viewpagelogs": "הצגת יומנים עבור דף זה",
        "nohistory": "אין היסטוריית שינויים עבור דף זה.",
        "currentrev": "גרסה אחרונה",
-       "currentrev-asof": "גרסה אחרונה מתאריך $1",
-       "revisionasof": "גרסה מתאריך $1",
-       "revision-info": "גרסה מתאריך $1 מאת $2",
+       "currentrev-asof": "גרסה אחרונה מ־$1",
+       "revisionasof": "גרסה מ־$1",
+       "revision-info": "גרסה מ־$1 מאת {{GENDER:$6|$2}}$7",
        "previousrevision": "→ הגרסה הקודמת",
        "nextrevision": "הגרסה הבאה ←",
        "currentrevisionlink": "הגרסה האחרונה",
        "searchmenu-exists": "'''קיים דף בשם \"[[:$1]]\" באתר זה.'''",
        "searchmenu-new": "<strong>'''יצירת הדף \"[[:$1]]\" באתר זה.'''</strong> \n{{PLURAL:$2|0=|ראו גם את הדף שנמצא בחיפוש שלכם.|ראו גם את תוצאות החיפוש שלכם.}}",
        "searchprofile-articles": "דפי תוכן",
-       "searchprofile-project": "עזרה ודפי המיזם",
        "searchprofile-images": "מולטימדיה",
        "searchprofile-everything": "הכול",
        "searchprofile-advanced": "מתקדם",
        "searchprofile-articles-tooltip": "חיפוש $1",
-       "searchprofile-project-tooltip": "חיפוש $1",
        "searchprofile-images-tooltip": "חיפוש קבצים",
        "searchprofile-everything-tooltip": "חיפוש בכל התוכן (למעט דפי השיחה)",
        "searchprofile-advanced-tooltip": "חיפוש במרחבי שם מותאמים אישית",
        "search-interwiki-default": "תוצאות מ{{GRAMMAR:תחילית|$1}}:",
        "search-interwiki-more": "(עוד)",
        "search-relatedarticle": "קשור",
-       "searcheverything-enable": "חיפוש בכל מרחבי השם",
        "searchrelated": "קשור",
        "searchall": "הכול",
        "showingresults": "{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} החל ממספר <strong>$2</strong>:",
        "powersearch-togglelabel": "בחירה:",
        "powersearch-toggleall": "הכול",
        "powersearch-togglenone": "אף אחד",
+       "powersearch-remember": "שמירת הבחירה עבור חיפושים עתידיים",
        "search-external": "חיפוש חיצוני",
        "searchdisabled": "חיפוש ב{{grammar:תחילית|{{SITENAME}}}} אינו מופעל כעת.\nבינתיים אפשר לחפש באמצעות גוגל.\nשימו לב שייתכן שהמידע של {{SITENAME}} שם אינו מעודכן.",
        "search-error": "אירעה שגיאה במהלך החיפוש: $1",
        "allowemail": "קבלת דוא\"ל ממשתמשים אחרים",
        "prefs-searchoptions": "חיפוש",
        "prefs-namespaces": "מרחבי שם",
-       "defaultns": "אחרת, החיפוש יתבצע במרחבי השם הבאים:",
        "default": "ברירת מחדל",
        "prefs-files": "קבצים",
        "prefs-custom-css": "קובץ CSS מותאם אישית",
        "recentchanges-label-unpatrolled": "עריכה זו טרם נבדקה",
        "recentchanges-label-plusminus": "גודל הדף השתנה במספר זה של בתים",
        "recentchanges-legend-heading": "'''מקרא:'''",
-       "recentchanges-legend-newpage": "(ראו גם [[Special:NewPages|רשימת דפים חדשים]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ראו גם [[Special:NewPages|רשימת דפים חדשים]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "להלן השינויים שבוצעו החל מ‏‏֫־<b>$2</b> (עד <b>$1</b> מוצגים).",
        "rclistfrom": "הצגת שינויים חדשים החל מ־$2, $3",
        "largefileserver": "גודל הקובץ חורג ממגבלת השרת.",
        "emptyfile": "נראה שהקובץ שהעליתם ריק. ייתכן שהסיבה לכך היא שגיאת הקלדה בשם הקובץ. אנא ודאו שזהו הקובץ שברצונכם להעלות.",
        "windows-nonascii-filename": "אתר ויקי זה אינו תומך בשמות קבצים עם תווים מיוחדים או תווים שאינם באנגלית.",
-       "fileexists": "קובץ בשם זה כבר קיים, אנא בדקו את <strong>[[:$1]]</strong> אם אינכם בטוחים שברצונכם להחליף אותו.\n[[$1|thumb]]",
+       "fileexists": "ק×\95×\91×¥ ×\91ש×\9d ×\94×\96×\94 ×\9b×\91ר ×§×\99×\99×\9d, ×\90× ×\90 ×\91×\93ק×\95 ×\90ת <strong>[[:$1]]</strong> ×\90×\9d ×\90×\99× ×\9b×\9d ×\91×\98×\95×\97×\99×\9d ×©×\91רצ×\95× ×\9b×\9d ×\9c×\94×\97×\9c×\99×£ ×\90×\95ת×\95.\n[[$1|thumb]]",
        "filepageexists": "דף תיאור הקובץ עבור קובץ זה כבר נוצר ב<strong>[[:$1]]</strong>, אך לא קיים קובץ בשם זה.\nתיאור הקובץ שתכתבו לא יופיע בדף תיאור הקובץ.\nכדי לגרום לו להופיע שם, יהיה עליכם לערוך אותו ידנית. [[$1|thumb]]",
        "fileexists-extension": "קובץ עם שם דומה כבר קיים: [[$2|thumb]]\n* שם הקובץ המועלה: <strong>[[:$1]]</strong>\n* שם הקובץ הקיים: <strong>[[:$2]]</strong>\nאנא בחרו שם אחר.",
        "fileexists-thumbnail-yes": "הקובץ הוא כנראה תמונה מוקטנת (ממוזערת). [[$1|thumb]]\nאנא בדקו את הקובץ <strong>[[:$1]]</strong>.\nאם הקובץ שבדקתם הוא אותה התמונה בגודל מקורי, אין זה הכרחי להעלות גם תמונה ממוזערת.",
        "filehist-current": "נוכחית",
        "filehist-datetime": "תאריך/שעה",
        "filehist-thumb": "תמונה ממוזערת",
-       "filehist-thumbtext": "תמונה ממוזערת לגרסה מתאריך $1",
+       "filehist-thumbtext": "תמונה ממוזערת לגרסה מ־$1",
        "filehist-nothumb": "אין תמונה ממוזערת",
        "filehist-user": "משתמש",
        "filehist-dimensions": "ממדים",
        "wantedtemplates": "תבניות מבוקשות",
        "mostlinked": "הדפים המקושרים ביותר",
        "mostlinkedcategories": "הקטגוריות המקושרות ביותר",
-       "mostlinkedtemplates": "×\94ת×\91× ×\99×\95ת ×\94×\9eק×\95שר×\95ת ביותר",
+       "mostlinkedtemplates": "×\94×\93פ×\99×\9d ×\94×\9e×\95×\9b×\9c×\9c×\99×\9d ביותר",
        "mostcategories": "הדפים עם המספר הרב ביותר של קטגוריות",
        "mostimages": "הקבצים המקושרים ביותר",
        "mostinterwikis": "הדפים עם המספר הרב ביותר של קישורי בינוויקי",
        "tooltip-preferences-save": "שמירת ההעדפות",
        "tooltip-summary": "להכנסת תקציר קצר",
        "common.css": "/* הסגנונות הנכתבים כאן ישפיעו על כל העיצובים */",
-       "cologneblue.css": "/* הסגנונות הנכתבים כאן ישפיעו על העיצוב CologneBlue בלבד */",
        "monobook.css": "/* הסגנונות הנכתבים כאן ישפיעו על העיצוב MonoBook בלבד */",
-       "modern.css": "/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Modern בלבד */",
        "vector.css": "/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Vector בלבד */",
        "print.css": "/* הסגנונות הנכתבים כאן ישפיעו על הפלט בהדפסה בלבד */",
        "noscript.css": "/* הסגנונות הנכתבים כאן ישפיעו על משתמשים עם JavaScript מבוטל */",
        "group-sysop.css": "/* הסגנונות הנכתבים כאן ישפיעו על מפעילי מערכת בלבד */",
        "group-bureaucrat.css": "/* הסגנונות הנכתבים כאן ישפיעו על ביורוקרטים בלבד */",
        "common.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ עבור כל המשתמשים בכל טעינת עמוד */",
-       "cologneblue.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב CologneBlue */",
        "monobook.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Monobook */",
-       "modern.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Modern */",
        "vector.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Vector */",
        "group-autoconfirmed.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ עבור משתמשים ותיקים בלבד */",
        "group-user.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ עבור משתמשים רשומים בלבד */",
        "pageinfo-category-pages": "מספר הדפים",
        "pageinfo-category-subcats": "מספר קטגוריות המשנה",
        "pageinfo-category-files": "מספר הקבצים",
-       "skinname-cologneblue": "מים כחולים",
        "skinname-monobook": "מונובוק",
-       "skinname-modern": "מודרני",
        "skinname-vector": "וקטור",
        "markaspatrolleddiff": "סימון השינוי כבדוק",
        "markaspatrolledtext": "סימון דף זה כבדוק",
index 5aea0f6..f54cf3f 100644 (file)
        "searchmenu-exists": "'''इस विकि पर \"[[:$1]]\" नाम का एक पृष्ठ है'''",
        "searchmenu-new": "<strong>इस विकि पर \"[[:$1]]\" नाम का पृष्ठ बनाएँ!</strong>{{PLURAL:$2|0=|आपकी खोज से मिला पृष्ठ भी देखें।|खोज परिणाम भी देखें।}}",
        "searchprofile-articles": "सामग्री पृष्ठ",
-       "searchprofile-project": "सहायता और परियोजना पृष्ठ",
        "searchprofile-images": "मल्टीमीडिया",
        "searchprofile-everything": "सब कुछ",
        "searchprofile-advanced": "उन्नत",
        "searchprofile-articles-tooltip": "$1 में खोजें",
-       "searchprofile-project-tooltip": "$1 में खोजें",
        "searchprofile-images-tooltip": "फ़ाइलें खोजें",
        "searchprofile-everything-tooltip": "(वार्ता पृष्ठों सहित) सारी सामग्री में खोजें",
        "searchprofile-advanced-tooltip": "विशेष नामस्थानों में खोजें",
        "search-interwiki-default": "$1 से परिणाम:",
        "search-interwiki-more": "(और)",
        "search-relatedarticle": "सम्बंधित",
-       "searcheverything-enable": "सभी नामस्थानों में खोजें",
        "searchrelated": "सम्बंधित",
        "searchall": "सभी",
        "showingresults": "नीचे क्रमांक '''$2''' से प्रारंभ कर के अधिकतम '''$1''' परिणाम {{PLURAL:$1|दिखाया गया है|दिखाए गए हैं}}।",
        "allowemail": "अन्य सदस्यों से ई-मेल सक्षम करें",
        "prefs-searchoptions": "खोज",
        "prefs-namespaces": "नामस्थान",
-       "defaultns": "अन्यथा इन नामस्थानों में खोजें:",
        "default": "डिफ़ॉल्ट",
        "prefs-files": "फ़ाइलें",
        "prefs-custom-css": "खासमखास सी॰एस॰एस",
        "prefs-emailconfirm-label": "ई-मेल पुष्टिकरण:",
        "youremail": "आपका ई-मेल पता:",
        "username": "{{GENDER:$1|सदस्यनाम}}:",
-       "uid": "{{GENDER:$1|सदस्य}} क्रमांक:",
        "prefs-memberingroups": "निम्नलिखित {{PLURAL:$1|समूह|समूहों}} के {{GENDER:$2|सदस्य}}:",
        "prefs-registration": "पंजीकरण समय:",
        "yourrealname": "वास्तविक नाम:",
        "recentchanges-label-unpatrolled": "यह संपादन अभी जाँचा नहीं गया है",
        "recentchanges-label-plusminus": "पृष्ठ आकार इस बाइट संख्या से बदला",
        "recentchanges-legend-heading": "'''कुंजी:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|नए पन्नों की सूची]] को भी देखें)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नए पन्नों की सूची]] को भी देखें)",
        "rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) हुए बदलाव दर्शाए गये हैं।",
        "rclistfrom": "$3 $2 से नये बदलाव दिखाएँ",
        "rcshowhideminor": "छोटे बदलाव $1",
        "log-title-wildcard": "इस पाठ से शुरू होने वाले शीर्षक खोजें",
        "showhideselectedlogentries": "चयनित लॉग प्रविष्टियाँ दिखाएँ/छुपाएँ",
        "allpages": "सभी पृष्ठ",
-       "alphaindexline": "$1 से $2",
        "nextpage": "अगला पृष्ठ ($1)",
        "prevpage": "पिछला पृष्ठ ($1)",
        "allpagesfrom": "इस अक्षर से आरंभ होने वाले पृष्ठ दर्शाएँ:",
index caa8d29..fda5f14 100644 (file)
@@ -9,7 +9,8 @@
                        "Kaganer",
                        "Malafaya",
                        "Thakurji",
-                       "아라"
+                       "아라",
+                       "Soul Train"
                ]
        },
        "tog-underline": "Jorr ke niche line khicho:",
        "searchmenu-exists": "'''Ii wiki me \"[[$1]]\" naam ke panna hai'''",
        "searchmenu-new": "'''Ii wiki me \"[[:$1]]\" panna ke banao!'''",
        "searchprofile-articles": "Content panna",
-       "searchprofile-project": "Madat aur Project panna",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Sab chij",
        "searchprofile-advanced": "Anbhawi",
        "searchprofile-articles-tooltip": "$1 me khojo",
-       "searchprofile-project-tooltip": "$1 me khojo",
        "searchprofile-images-tooltip": "File ke khojo",
        "searchprofile-everything-tooltip": "Sab content me khojo (baat waala panna bhi)",
        "searchprofile-advanced-tooltip": "Custom namespaces me khojo",
        "search-interwiki-default": "$1 ke result:",
        "search-interwiki-more": "(aur)",
        "search-relatedarticle": "sambandh rakkhe hai",
-       "searcheverything-enable": "Sab namespaces me khojo",
        "searchrelated": "sambhand rakkhe hai",
        "searchall": "sab",
        "showingresults": "Niche dekhae hai {{PLURAL:$1|'''1''' result|'''$1''' results}} #'''$2''' se suruu hoe ke.",
        "allowemail": "Aur sadasya se e-mail enable karo",
        "prefs-searchoptions": "Khojo",
        "prefs-namespaces": "Naam:",
-       "defaultns": "Default se ii namespaces me khojo:",
        "default": "baaki",
        "prefs-files": "File ke naam",
        "prefs-custom-css": "CSS ke aapan khatir badlo",
        "prefs-emailconfirm-label": "E-mail ke confirm karaa jaawe hai:",
        "youremail": "E-mail:",
        "username": "{{GENDER:$1|Sadasya ke naam}}:",
-       "uid": "{{GENDER:$1|Sadasya}} ID:",
        "prefs-memberingroups": "{{PLURAL:$1|group|groups}} ke {{GENDER:$2|Member}}:",
        "prefs-registration": "Registration kare ke time:",
        "yourrealname": "Asli naam:",
        "grouppage-user": "{{ns:project}}:Sadasya",
        "grouppage-autoconfirmed": "{{ns:project}}:Autoconfirmed sadasya",
        "grouppage-bot": "{{ns:project}}:Bots",
-       "grouppage-sysop": "{{ns:project}}:Administrators",
+       "grouppage-sysop": "{{ns:project}}:Администраторар",
        "grouppage-bureaucrat": "{{ns:project}}:Bureaucrats",
        "grouppage-suppress": "{{ns:project}}:Oversight",
        "right-read": "Panna ke parrho",
        "log-title-wildcard": "Ii text se suruu hoe waala titles ke khojo",
        "showhideselectedlogentries": "Dekhao/lukao chuna gais log entries",
        "allpages": "Sab panna",
-       "alphaindexline": "$1 se $2",
        "nextpage": "Aglaa panna ($1)",
        "prevpage": "Pichhla panna ($1)",
        "allpagesfrom": "Panna dekhae ke suruu karo hian se:",
index 0828510..8b60875 100644 (file)
        "permalink": "Trajna poveznica",
        "print": "Ispiši",
        "view": "Vidi",
+       "view-foreign": "vidi na projektu $1",
        "edit": "uredi",
        "create": "Započni",
+       "create-local": "dodaj lokalni opis",
        "editthispage": "Uredi ovu stranicu",
        "create-this-page": "Započni ovu stranicu",
        "delete": "Izbriši",
        "user-mail-no-addy": "Pokušaj slanja e-maila bez e-mail adrese.",
        "user-mail-no-body": "Pokušali ste poslati e-mail bez sadržaja ili s prekratkim sadržajem.",
        "changepassword": "Promjena lozinke",
-       "resetpass_announce": "Prijavljeni ste s privremenom lozinkom. Da završite proces mijenjanja lozinke, upišite ovdje novu lozinku:",
+       "resetpass_announce": "Da biste završili proces mijenjanja lozinke, upišite \nnovu lozinku.",
        "resetpass_header": "Promijeni lozinku računa",
        "oldpassword": "Stara lozinka",
        "newpassword": "Nova lozinka",
        "resetpass-abort-generic": "Poništena je promjena zaporke.",
        "passwordreset": "Ponovno postavi lozinku",
        "passwordreset-text-one": "Ispunite ovaj obrazac ako želite ponovno postaviti Vašu zaporku.",
-       "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja za ponovno postavljanje Vaše zaporke.}}",
+       "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja da biste dobili privremenu zaporku e-poštom.}}",
        "passwordreset-legend": "Poništi lozinku",
        "passwordreset-disabled": "Poništavanje lozinke je onemogućeno na ovom wikiju.",
        "passwordreset-emaildisabled": "Funkcija e-pošte je onemogućena na ovom wikiju.",
        "passwordreset-emailelement": "Suradničko ime: $1\nPrivremena lozinka: $2",
        "passwordreset-emailsent": "E-mail podsjetnik zaporke je poslan.",
        "passwordreset-emailsent-capture": "Poslan Vam je podsjetnik kao e-pošta (tekst je prikazan dolje).",
-       "passwordreset-emailerror-capture": "Napravljen je podsjetnik za slanje e-pošte (prikazan dolje), ali njegovo slanje nije uspjelo: $1",
+       "passwordreset-emailerror-capture": "Napravljena je e-poruka za ponovno postavljanje zaporke (prikazana ispod), ali njeno slanje suradniku nije uspjelo: $1",
        "changeemail": "Promijeni e-mail adresu",
        "changeemail-header": "Promijeni e-mail adresu računa",
        "changeemail-text": "Za promjenu e-mail adrese popunite ovaj obrazac. Morat ćete unijeti svoju lozinku da potvrdite ovu promjenu.",
        "edit-gone-missing": "Stranica nije spremljena.\nČini se kako je obrisana.",
        "edit-conflict": "Sukob uređivanja.",
        "edit-no-change": "Vaše uređivanje je zanemareno, jer nikakva promjena sadržaja nije napravljena.",
+       "postedit-confirmation-created": "Stranica je stvorena.",
        "postedit-confirmation-saved": "Vaše je uređivanje sačuvano.",
        "edit-already-exists": "Neuspješno stvaranje nove stranice.\nStranica već postoji.",
        "defaultmessagetext": "Prvotni tekst poruke",
        "revdelete-no-file": "Navedena datoteka ne postoji.",
        "revdelete-show-file-confirm": "Jeste li sigurni da želite pregledati izbrisanu inačicu datoteke \"<nowiki>$1</nowiki>\" od $2 u $3?",
        "revdelete-show-file-submit": "Da",
+       "revdelete-selected-text": "{{PLURAL:$1|Označena izmjena|Označene izmjene}} stranice [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Označena inačica|Označene inačice}} datoteke [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Odabrani zapis u evidenciji|Odabrani zapisi u evidenciji}}:",
+       "revdelete-text-text": "Izbrisane izmjene će i dalje biti vidljive u povijesti stranice, ali dijelovi sadržaja neće biti vidljivi javno.",
+       "revdelete-text-others": "Ostali administratori na projektu {{SITENAME}} će moći vidjeti i vratiti izbrisani sadržaj na isti način, osim ako nisu postavljena dodatna ograničenja.",
        "revdelete-confirm": "Molimo potvrdite da namjeravate ovo učiniti, da razumijete posljedice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
        "revdelete-suppress-text": "Sklanjanje uređivanja treba raditi '''iznimno''' u slijedećih par slučajeva:\n* Privatne informacije neprilične javnom mediju tipa\n*: ''kućna adresa i broj telefona, JMBG ili OIB, itd.''",
        "revdelete-legend": "Postavi ograničenja na izmjenu:",
        "searchmenu-exists": "* Stranica '''[[$1]]'''",
        "searchmenu-new": "'''Stvori stranicu \"[[:$1]]\" na ovoj wiki!'''",
        "searchprofile-articles": "Stranice sa sadržajem",
-       "searchprofile-project": "Pomoć i stranice projekta",
        "searchprofile-images": "Multimedija",
        "searchprofile-everything": "Sve",
        "searchprofile-advanced": "Napredno",
        "searchprofile-articles-tooltip": "Traži u $1",
-       "searchprofile-project-tooltip": "Traži u $1",
        "searchprofile-images-tooltip": "Traži datoteke",
        "searchprofile-everything-tooltip": "Pretraži sav sadržaj (uključujući i stranice za razgovor)",
        "searchprofile-advanced-tooltip": "Traži u zadanom imenskom prostoru",
        "search-interwiki-default": "$1 rezultati:",
        "search-interwiki-more": "(više)",
        "search-relatedarticle": "Povezano",
-       "searcheverything-enable": "Traži u svim imenskim prostorima",
        "searchrelated": "povezano",
        "searchall": "sve",
        "showingresults": "Dolje {{PLURAL:$1|je prikazan '''$1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}}, počevši od '''$2'''.",
        "allowemail": "Omogući primanje e-maila od drugih suradnika",
        "prefs-searchoptions": "Način traženja",
        "prefs-namespaces": "Imenski prostori",
-       "defaultns": "Ako nije navedeno drugačije, traži u ovim prostorima:",
        "default": "prvotno",
        "prefs-files": "Datoteke",
        "prefs-custom-css": "Prilagođen CSS",
        "uploadwarning": "Upozorenje kod postavljanja",
        "uploadwarning-text": "Molimo izmijenite opis datoteke ispod i pokušajte kasnije.",
        "savefile": "Sačuvaj datoteku",
-       "uploadedimage": "postavljeno \"$1\"",
+       "uploadedimage": "je postavio \"$1\"",
        "overwroteimage": "postavljena nova inačica od \"[[$1]]\"",
        "uploaddisabled": "Postavljanje je onemogućeno",
        "copyuploaddisabled": "Postavljanje URL-om onemogućeno.",
        "pageinfo-category-pages": "Broj stranica",
        "pageinfo-category-subcats": "Broj podkategorija",
        "pageinfo-category-files": "Broj datoteka",
-       "skinname-cologneblue": "Kölnska plava",
        "skinname-monobook": "MonoBook",
        "markaspatrolleddiff": "Označi za pregledano",
        "markaspatrolledtext": "Označi ovaj članak pregledanim",
        "svg-long-desc": "SVG datoteka, nominalno $1 × $2 piksela, veličina datoteke: $3",
        "svg-long-desc-animated": "Animirana SVG datoteka, veličine $1 × $2 piksela, veličina datoteke: $3",
        "svg-long-error": "Nevaljana SVG datoteka: $1",
-       "show-big-image": "Vidi sliku u punoj veličini (rezoluciji)",
+       "show-big-image": "Vidi sliku u punoj veličini",
        "show-big-image-preview": "Veličina ovog prikaza: $1.",
        "show-big-image-other": "{{PLURAL:$2|Druga rezolucija|Ostale rezolucije}}: $1.",
        "show-big-image-size": "$1 × $2 piksela",
        "newimages-summary": "Ova posebna stranica pokazuje posljednje nedavno postavljene datoteke.",
        "newimages-legend": "Filtar",
        "newimages-label": "Naziv datoteke (ili njen dio):",
+       "newimages-showbots": "Prikaži datoteke koje su postavili botovi",
        "noimages": "Nema slika.",
        "ilsubmit": "Traži",
        "bydate": "po datumu",
        "table_pager_limit_label": "Stavke po stranici:",
        "table_pager_limit_submit": "Idi",
        "table_pager_empty": "Nema rezultata",
-       "autosumm-blank": "Uklonjen cjelokupni sadržaj stranice",
-       "autosumm-replace": "Tekst stranice se zamjenjuje s '$1'",
-       "autoredircomment": "Preusmjeravanje na [[$1]]",
-       "autosumm-new": "Nova stranica: $1",
+       "autosumm-blank": "uklonjen cjelokupni sadržaj stranice",
+       "autosumm-replace": "tekst stranice se zamjenjuje s '$1'",
+       "autoredircomment": "preusmjeravanje na [[$1]]",
+       "autosumm-new": "nova stranica: $1",
        "lag-warn-normal": "Moguće je da izmjene nastale posljednjih $1 {{PLURAL:$1|sekundu|sekundi}} neće biti vidljive na ovom popisu.",
        "lag-warn-high": "Zbog kašnjenja baze podataka, moguće je da promjene napravljene u posljednjih $1 {{PLURAL:$1|sekundu|sekunde|sekundi}} nisu prikazane u popisu.",
        "watchlistedit-normal-title": "Uredi popis praćenja",
index b9bec71..ce8e72b 100644 (file)
        "searchmenu-exists": "'''Es gebt en Seit, wo den Noome \"[[:$1]]\" hot.''' \n{{PLURAL:$2|0=|Sieh ooch die annre Suchresultate wo gefund woore.}}",
        "searchmenu-new": "<strong>Erstell die Seit \"[[:$1]]\" in dem Wiki.</strong> {{PLURAL:$2|0=|Sieh ooch die üwer dein Such gefundne Seit.|Sieh ooch die gefundne Suchergebnisse.}}",
        "searchprofile-articles": "Inhaltsseite",
-       "searchprofile-project": "Helleft - und Projektseite",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alles",
        "searchprofile-advanced": "Erweitert",
        "searchprofile-articles-tooltip": "Suche in $1",
-       "searchprofile-project-tooltip": "Such in $1",
        "searchprofile-images-tooltip": "Noh Dateie suche",
        "searchprofile-everything-tooltip": "Gesamte Inhalt doorrichsuche (inklusive Diskussionsseite)",
        "searchprofile-advanced-tooltip": "Such in weitre Noomeräume",
        "search-interwiki-default": "Ergebnisse von $1:",
        "search-interwiki-more": "(weitre)",
        "search-relatedarticle": "Verwandte",
-       "searcheverything-enable": "In alle Noomeräume suche",
        "searchrelated": "verwandt",
        "searchall": "alle",
        "showingresults": "Hier {{PLURAL:$1|ist '''1''' Ergebnis|sind '''$1''' Ergebnisse}}, beginnend mit Nummer '''$2.'''",
        "allowemail": "E-Mail-Empfang von annre Benutzer ermöchliche",
        "prefs-searchoptions": "Such",
        "prefs-namespaces": "Noomeräume",
-       "defaultns": "Annrenfalls in den Noomeräume suche:",
        "default": "Voareinstellung",
        "prefs-files": "Dateie",
        "prefs-custom-css": "Benutzerdefinierte CSS",
        "recentchanges-label-unpatrolled": "Nicht-kontrollierte Ännrung",
        "recentchanges-label-plusminus": "Die Ännrung von der Seitengröss in Bytes",
        "recentchanges-legend-heading": "'''Legende:'''",
-       "recentchanges-legend-newpage": "(sieh ooch die [[Special:NewPages|List von neier Seite]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sieh ooch die [[Special:NewPages|List von neier Seite]])",
        "rcnotefrom": "Oongezeicht sin die Ännrunge seit <strong>$2</strong> (max. <strong>$1</strong> Einträch).",
        "rclistfrom": "Nuar Ännrunge seit $3, $2 Uhr zeiche.",
        "rcshowhideminor": "Klene Ändrunge $1",
index 336c9c1..c4368db 100644 (file)
        "vector-view-view": "Čitać",
        "vector-view-viewsource": "Žórło sej wobhladać",
        "actions": "Akcije",
+       "vector-more-actions": "Wjace",
        "namespaces": "Mjenowe rumy",
        "variants": "Warianty",
        "navigation-heading": "Nawigaciski meni",
        "parser-template-recursion-depth-warning": "Limit za rekursijnu hłubokosć předłohi překročeny ($1)",
        "language-converter-depth-warning": "Limit hłubokosće rěčneho konwertera překročena ($1)",
        "node-count-exceeded-category": "Strony, hdźež ličba sukow je překročena",
+       "node-count-exceeded-category-desc": "Kategorija za strony, hdźež ličba sukow je překročena.",
        "node-count-exceeded-warning": "Strona je ličbu sukow překročiła",
        "expansion-depth-exceeded-category": "Strony, hdźež ekspansiska hłubokosć je překročena",
+       "expansion-depth-exceeded-category-desc": "To je kategorija za strony, hdźež ekspansiska hłubokosć je překročena.",
        "expansion-depth-exceeded-warning": "Strona je ekspansisku hłubokosć překročił",
        "parser-unstrip-loop-warning": "Njeskónčna sekla namakana",
        "parser-unstrip-recursion-limit": "Rekursiska hranica překročena ($1)",
        "currentrev": "Aktualna wersija",
        "currentrev-asof": "Aktualna wersija wot $1",
        "revisionasof": "Wersija wot $1",
-       "revision-info": "Wersija wot $1 wužiwarja $2",
+       "revision-info": "Wersija wot $1 wužiwarja {{GENDER:$6|$2}}$7",
        "previousrevision": "← Starša wersija",
        "nextrevision": "Nowša wersija →",
        "currentrevisionlink": "Aktualna wersija",
        "searchmenu-exists": "'''Je strona z mjenom \"[[$1]]\" na tutym wikiju'''",
        "searchmenu-new": "<strong>Wutwor stronu \"[[:$1]]\" na tutym wikiju!</strong> {{PLURAL:$2|0=|Hlej tež stronu namakanu z twojim pytanjom.|Hlej tež namakane pytanske wuslědki.}}",
        "searchprofile-articles": "Wobsahowe strony",
-       "searchprofile-project": "Pomoc a projektowe strony",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Wšitko",
        "searchprofile-advanced": "Rozšěrjeny",
        "searchprofile-articles-tooltip": "W $1 pytać",
-       "searchprofile-project-tooltip": "W $1 pytać",
        "searchprofile-images-tooltip": "Za datajemi pytać",
        "searchprofile-everything-tooltip": "Cyły wobsah přepytać (inkluziwnje diskusijne strony)",
        "searchprofile-advanced-tooltip": "W swójskich mjenowych rumach pytać",
        "search-interwiki-default": "Wuslědki z $1:",
        "search-interwiki-more": "(dalše)",
        "search-relatedarticle": "Přiwuzne",
-       "searcheverything-enable": "We wšěch mjenowych rumach pytać",
        "searchrelated": "přiwuzny",
        "searchall": "wšě",
        "showingresults": "Deleka so hač {{PLURAL:$1|'''1''' wuslědk pokazuje|'''$1''' wuslědkaj pokazujetej|'''$1''' wuslědki pokazuja|'''$1''' wuslědkow pokazuje}}, započinajo z #'''$2'''.",
        "powersearch-togglelabel": "Kontrolować:",
        "powersearch-toggleall": "Wšě",
        "powersearch-togglenone": "Žadyn",
+       "powersearch-remember": "Wuběr za přichodne pytanja sej spomjatkować",
        "search-external": "Eksterne pytanje",
        "searchdisabled": "Pytanje w {{GRAMMAR:lokatiw|{{SITENAME}}}} tuchwilu móžne njeje. Móžeš mjeztym z Google pytać. Wobkedźbuj, zo móža wuslědki z wobsaha {{GRAMMAR:genitiw|{{SITENAME}}}} zestarjene być.",
        "search-error": "Při pytanju je so zmylk wustupił: $1",
        "allowemail": "Mejlki wot druhich wužiwarjow přijimować",
        "prefs-searchoptions": "Pytać",
        "prefs-namespaces": "Mjenowe rumy",
-       "defaultns": "Hewak w tutych mjenowych rumach pytać:",
        "default": "standard",
        "prefs-files": "Dataje",
        "prefs-custom-css": "Swójski CSS",
        "right-move": "Strony přesunyć",
        "right-move-subpages": "Strony z jich podstronami přesunyć",
        "right-move-rootuserpages": "Hłowne wužiwarske strony přesunyć",
+       "right-move-categorypages": "Kategorijowe strony přesunyć",
        "right-movefile": "Dataje přesunyć",
        "right-suppressredirect": "Při přesunjenju strony ze stareho mjena žane daleposrědkowanje wutworić",
        "right-upload": "Dataje nahrać",
        "action-move": "tutu stronu přesunyć",
        "action-move-subpages": "tutu stronu a jeje podstrony přesunyć",
        "action-move-rootuserpages": "hłowne wužiwarske strony přesunyć",
+       "action-move-categorypages": "kategorijowe strony přesunyć",
        "action-movefile": "Tutu dataju přesunyć",
        "action-upload": "tutu dataju nahrać",
        "action-reupload": "eksistowacu dataju přepisać",
        "recentchanges-label-unpatrolled": "Tuta změnu hišće njebu přepruwowana",
        "recentchanges-label-plusminus": "Změnjena wulkosć strony (w bajtach)",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "(hlej tež [[Special:NewPages|lisćinu nowych stronow]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (hlej tež [[Special:NewPages|lisćinu nowych stronow]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Deleka so změny wot <strong>$2</strong> pokazuja (hač k <strong>$1</strong>).",
        "rclistfrom": "Nowe změny pokazać, započinajo z $3 $2",
        "wantedtemplates": "Falowace předłohi",
        "mostlinked": "Z najwjace stronami zwjazane strony",
        "mostlinkedcategories": "Z najwjace stronami zwjazane kategorije",
-       "mostlinkedtemplates": "Najhusćišo wužiwane předłohi",
+       "mostlinkedtemplates": "Najhusćišo zapřijate strony",
        "mostcategories": "Strony z najwjace kategorijemi",
        "mostimages": "Z najwjace stronami zwjazane dataje",
        "mostinterwikis": "Strony z najwjace mjezyrěčnymi wotkazami",
        "watchnologin": "Njejsy přizjewjeny.",
        "addwatch": "K wobkedźbowankam přidać",
        "addedwatchtext": "Strona [[:$1]] bu k twojim [[Special:Watchlist|wobkedźbowankam]] přidata.\nPřichodne změny tuteje strony a přisłušneje diskusijneje strony budu so tam nalistować.",
+       "addedwatchtext-short": "Strona \"$1\" je so wobkedźbowankam přidała.",
        "removewatch": "Z wobkedźbowankow wotstronić",
        "removedwatchtext": "Strona \"[[:$1]]\" bu z [[Special:Watchlist|twojich wobkedźbowankow]] wotstronjena.",
+       "removedwatchtext-short": "Strona \"$1\" je so z twojich wobkedźbowankow wotstroniła.",
        "watch": "wobkedźbować",
        "watchthispage": "stronu wobkedźbować",
        "unwatch": "njewobkedźbować",
        "movepagetalktext": "Přisłušna diskusijna strona přesunje so awtomatisce hromadźe z njej, <b>chibazo:</b>\n*Njeprózdna diskusijna strona pod nowym mjenom hižo eksistuje abo\n*wotstronješ hóčku z kašćika deleka.\n\nW tutych padach dyrbiš stronu manuelnje přesunyć abo zaměšeć, jeli sej to přeješ.",
        "movearticle": "Stronu přesunyć",
        "moveuserpage-warning": "'''Warnowanje:''' Sy při tym wužiwarsku stronu přesunyć. Prošu dźiwaj na to, zo so jenož strona posunje a wužiwar so ''nje''budźe přemjenować.",
+       "movecategorypage-warning": "<strong>Warnowanje:</strong> Chceš runje kategorijowu stronu přesunyć. Prošu dźiwaj na to, zo so jenož strona přesunje a strony w starej kategoriji <em>nje</em>budu so nowo kategorizować.",
        "movenologintext": "Dyrbiš zregistrowany wužiwar a [[Special:UserLogin|přizjewjeny]] być, zo by stronu přesunył.",
        "movenotallowed": "Nimaš prawo, zo by strony přesunył.",
        "movenotallowedfile": "Nimaš prawo dataje přesunyć.",
        "cant-move-user-page": "Nimaš prawo wužiwarske strony přesunyć (wothladajo wot podstronow)",
        "cant-move-to-user-page": "Nimaš prawo stronu do wužiwarskeje strony přesunyć (z wuwzaćom do wužiwarskeje podstrony).",
+       "cant-move-category-page": "Nimaš prawo, zo by kategorijowe strony přesunył.",
+       "cant-move-to-category-page": "Nimaš prawo, stronu do kategorijoweje strony přesunyć.",
        "newtitle": "pod nowe hesło",
        "move-watch": "Stronu wobkedźbować",
        "movepagebtn": "Stronu přesunyć",
        "pageinfo-category-pages": "Ličba rěkow",
        "pageinfo-category-subcats": "Ličba podkategorijow",
        "pageinfo-category-files": "Ličba datajow",
-       "skinname-cologneblue": "Kölnjanska módrina",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderny",
        "markaspatrolleddiff": "Změnu jako přepruwowanu woznamjenić",
        "markaspatrolledtext": "Tutu změnu nastawka jako přepruwowanu woznamjenić",
        "markedaspatrolled": "Změna bu jako přepruwowana woznamjenjena.",
        "newimages-summary": "Tuta specialna strona naliči aktualnje nahrate wobrazy a druhe dataje.",
        "newimages-legend": "Filter",
        "newimages-label": "Datajowe mjeno (abo dźěl z njeho):",
+       "newimages-showbots": "Nahraća boćikow pokazać",
        "noimages": "Žane dataje.",
        "ilsubmit": "Pytać",
        "bydate": "datumje",
        "watchlistedit-raw-done": "Twoje wobkedźbowanki buchu składowane.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 zapisk bu dodaty|$1 zapiskaj buštej dodatej|$1 zapiski buchu dodate|$1 zapiskow buchu dodate}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 zapisk bu wotstronjeny|$1 zapiskaj buštej wotstronjenej|$1 zapiski buchu wotstronjene|$1 zapiskow buchu wotstronjene}}:",
+       "watchlistedit-clear-title": "Wotstronjene wobkedźbowanki",
+       "watchlistedit-clear-legend": "Wobkedźbowanki wotstronić",
+       "watchlistedit-clear-explain": "Wšě titule budu so z twojich wobkedźbowankow wotstronjeć",
+       "watchlistedit-clear-titles": "Titule:",
+       "watchlistedit-clear-submit": "Wobkedźbowanki wotstronić (To je na přeco!)",
+       "watchlistedit-clear-done": "Waše wobkedźbowanki su so wotstronili.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 titul bu wotstronjeny|$1 titulej buštej wotstronjenej|$1 titule buchu wotstronjene|$1 titulow bu wotstronjene}}:",
+       "watchlistedit-too-many": "Je tu přewjele stronow za zwobraznjenje.",
+       "watchlisttools-clear": "Wobkedźbowanki wotstronić",
        "watchlisttools-view": "Wobkedźbowanki: Změny",
        "watchlisttools-edit": "normalnje wobdźěłać",
        "watchlisttools-raw": "Lisćinowy format wobdźěłać (import/eksport)",
index 3267546..7fed08d 100644 (file)
@@ -33,7 +33,8 @@
                        "Terik",
                        "Tgr",
                        "Xbspiro",
-                       "아라"
+                       "아라",
+                       "Csega"
                ]
        },
        "tog-underline": "Hivatkozások aláhúzása:",
        "vector-view-view": "Olvasás",
        "vector-view-viewsource": "A lap forrása",
        "actions": "Műveletek",
+       "vector-more-actions": "Több",
        "namespaces": "Névterek",
        "variants": "Változatok",
        "navigation-heading": "Navigációs menü",
        "print": "Nyomtatás",
        "view": "Olvasás",
        "edit": "Szerkesztés",
+       "edit-local": "Helyi leírás szerkesztése",
        "create": "Létrehozás",
+       "create-local": "Helyi leírás hozzáadása",
        "editthispage": "Lap szerkesztése",
        "create-this-page": "Oldal létrehozása",
        "delete": "Törlés",
        "edit-gone-missing": "Nem lehet frissíteni a lapot.\nÚgy tűnik, hogy törölve lett.",
        "edit-conflict": "Szerkesztési ütközés.",
        "edit-no-change": "A szerkesztésed figyelmen kívül lett hagyva, mivel nem változtattál a lap szövegén.",
+       "postedit-confirmation-created": "Az oldal létrehozva.",
+       "postedit-confirmation-restored": "Az oldal helyre lett állítva.",
        "postedit-confirmation-saved": "A szerkesztésedet elmentettük.",
        "edit-already-exists": "Az új lap nem készíthető el.\nMár létezik.",
        "defaultmessagetext": "Alapértelmezett szöveg",
        "content-not-allowed-here": "\"$1\" tartalom nem engedélyezett a [[$2]] oldalon",
        "editwarning-warning": "A lap elhagyásával az összes itt végzett változtatás elveszhet.\nHa be vagy jelentkezve letilthatod ezt a figyelmeztetést a beállításaid „{{int:prefs-editing}}” szakaszában.",
        "editpage-notsupportedcontentformat-title": "Nem támogatott tartalom formátum",
+       "editpage-notsupportedcontentformat-text": "$2 tartalommodell nem támogatja $1 tartalomformátumot.",
        "content-model-wikitext": "wikiszöveg",
        "content-model-text": "egyszerű szöveg",
        "content-model-javascript": "JavaScript",
        "searchmenu-exists": "'''A wikin már van „[[:$1]]” nevű lap'''",
        "searchmenu-new": "'''Hozd létre a(z) „[[:$1]]” nevű lapot ezen a wikin!'''",
        "searchprofile-articles": "Tartalmi oldalak",
-       "searchprofile-project": "Segítség- és projektlapok",
        "searchprofile-images": "Médiafájlok",
        "searchprofile-everything": "Minden lap",
        "searchprofile-advanced": "Részletes",
        "searchprofile-articles-tooltip": "A következőkben keres: $1",
-       "searchprofile-project-tooltip": "A következőkben keres: $1",
        "searchprofile-images-tooltip": "Fájlok keresése",
        "searchprofile-everything-tooltip": "Minden névtérben keres (a vitalapokat is beleértve)",
        "searchprofile-advanced-tooltip": "Keresés adott névterekben",
        "search-interwiki-default": "$1 találatok:",
        "search-interwiki-more": "(több)",
        "search-relatedarticle": "Kapcsolódó",
-       "searcheverything-enable": "Keresés az összes névtérben",
        "searchrelated": "kapcsolódó",
        "searchall": "mind",
        "showingresults": "Lent '''{{PLURAL:$1|egy|$1}}''' találat látható, az eleje '''$2'''.",
        "powersearch-togglelabel": "Megjelölés:",
        "powersearch-toggleall": "Mind",
        "powersearch-togglenone": "Egyik sem",
+       "powersearch-remember": "Kiválasztások megjegyzése a későbbi keresésekhez",
        "search-external": "Külső kereső",
        "searchdisabled": "Elnézésed kérjük, de a teljes szöveges keresés terhelési okok miatt átmenetileg nem használható. Ezidő alatt használhatod a lenti Google keresést, mely viszont lehetséges, hogy nem teljesen friss adatokkal dolgozik.",
        "search-error": "A keresés közben hiba történt: $1",
        "allowemail": "E-mail engedélyezése más szerkesztőktől",
        "prefs-searchoptions": "Keresés",
        "prefs-namespaces": "Névterek",
-       "defaultns": "Egyébként a következő névterekben keressen:",
        "default": "alapértelmezett",
        "prefs-files": "Fájlok",
        "prefs-custom-css": "saját CSS",
        "right-edituserjs": "más felhasználók JS fájljainak szerkesztése",
        "right-editmyusercss": "A saját szerkesztői CSS-fájlok szerkesztése",
        "right-editmyuserjs": "Saját szerkesztői JavaScript-fájlok szerkesztése",
+       "right-viewmywatchlist": "Saját figyelőlista megtekintése",
+       "right-editmyoptions": "Saját beállítások szerkesztése",
        "right-rollback": "a lap utolsó szerkesztésének gyors visszaállítása",
        "right-markbotedits": "visszaállított szerkesztések botként való jelölése",
        "right-noratelimit": "sebességkorlát figyelmen kívül hagyása",
        "action-userrights-interwiki": "más wikik szerkesztői jogainak módosítása",
        "action-siteadmin": "adatbázis lezárása vagy felnyitása",
        "action-sendemail": "e-mailek küldése",
+       "action-editmywatchlist": "saját figyelőlista szerkesztése",
        "nchanges": "{{PLURAL:$1|egy|$1}} változtatás",
        "enhancedrc-since-last-visit": "$1 az utolsó látogatás óta",
        "enhancedrc-history": "történet",
        "recentchanges-label-unpatrolled": "Ezt a szerkesztést még nem ellenőrizték",
        "recentchanges-label-plusminus": "Az oldal mérete ennyi bájttal módosult",
        "recentchanges-legend-heading": "Jelmagyarázat:",
-       "recentchanges-legend-newpage": "(lásd még: [[Special:NewPages|Új lapok]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lásd még: [[Special:NewPages|új lapok listája]])",
        "rcnotefrom": "Alább a <b>$2</b> óta történt változtatások láthatóak (legfeljebb <b>$1</b> db).",
        "rclistfrom": "$3 $2 után történt változtatások megtekintése",
        "rcshowhideminor": "apró szerkesztések $1",
        "protect-existing-expiry": "Jelenleg érvényben lévő lejárati idő: $2, $3",
        "protect-otherreason": "További okok:",
        "protect-otherreason-op": "Más/további ok:",
-       "protect-dropdown": "*Általános védelmi okok\n** Gyakori vandalizmus\n** Gyakori spamelés\n** Nagyforgalmú lap",
+       "protect-dropdown": "*Általános védelmi okok\n** Gyakori vandalizmus\n** Gyakori spammelés\n** Destruktív szerkesztési háború\n** Nagy forgalmú lap",
        "protect-edit-reasonlist": "Lapvédelem oka",
        "protect-expiry-options": "1 óra:1 hour,1 nap:1 day,1 hét:1 week,2 hét:2 weeks,1 hónap:1 month,3 hónap:3 months,6 hónap:6 months,1 év:1 year,végtelen:infinite",
        "restriction-type": "Engedély:",
        "undeleteextrahelp": "A lap teljes helyreállításához ne jelölj be egy jelölőnégyzetet sem, csak kattints a '''''{{int:undeletebtn}}''''' gombra.\nA lap részleges helyreállításához jelöld be a kívánt változatok melletti jelölőnégyzeteket, és kattints a '''''{{int:undeletebtn}}''''' gombra.",
        "undeleterevisions": "{{PLURAL:$1|egy|$1}} változat archiválva",
        "undeletehistory": "Ha helyreállítasz egy lapot, azzal visszahozod laptörténet összes változatát.\nHa lap törlése óta azonos néven már létrehoztak egy újabb lapot, a helyreállított\nváltozatok a laptörténet végére kerülnek be, a jelenlegi lapváltozat módosítása nélkül.",
-       "undeleterevdel": "A visszavonás nem hajtható végre, ha a legfrissebb lapváltozat részben\ntörlését eredmémyezi. Ilyen esetekben törölnöd kell a legújabb törölt változatok kijelölését, vagy megszüntetni az elrejtésüket. Azon fájlváltozatok,\nmelyek megtekintése a számodra nem engedélyezett, nem kerülnek visszaállításra.",
+       "undeleterevdel": "A visszavonás nem hajtható végre, ha a legfrissebb lapváltozat részben törlését eredményezi. Ilyen esetekben törölnöd kell a legújabb törölt változatok kijelölését, vagy megszüntetni az elrejtésüket. Azon fájlváltozatok, melyek megtekintése a számodra nem engedélyezett, nem kerülnek visszaállításra.",
        "undeletehistorynoadmin": "Ezt a szócikket törölték. A törlés okát alább az összegzésben\nláthatod, az oldalt a törlés előtt szerkesztő felhasználók részleteivel együtt. Ezeknek\na törölt változatoknak a tényleges szövege csak az adminisztrátorok számára hozzáférhető.",
        "undelete-revision": "$1 $4, $5-kori törölt változata (szerző: $3).",
        "undeleterevision-missing": "Érvénytelen vagy hiányzó változat. Lehet, hogy rossz hivatkozásod van, ill. a\nváltozatot visszaállították vagy eltávolították az archívumból.",
        "tooltip-preferences-save": "Beállítások mentése",
        "tooltip-summary": "Adj meg egy rövid összefoglalót",
        "common.css": "/* Közös CSS az összes felületnek */",
-       "cologneblue.css": "/* Az ide elhelyezett CSS hatással lesz a Kölni kék felület használóira */",
        "monobook.css": "/* Az ide elhelyezett CSS hatással lesz a Monobook felület használóira */",
-       "modern.css": "/* Az ide elhelyezett CSS hatással lesz a Modern felület használóira */",
        "vector.css": "/* Az ide elhelyezett CSS hatással lesz a Vector felület használóira */",
        "print.css": "/* Az ide elhelyezett CSS hatással lesz a nyomtatás kimenetelére */",
        "noscript.css": "/* Az ide elhelyezett CSS azon felhasználókra lesz hatással, ahol a JavaScript le van tiltva */",
        "group-sysop.css": "/* Az ide elhelyezett CSS csak adminisztrátorokra lesz hatással */",
        "group-bureaucrat.css": "/* Az ide elhelyezett CSS csak bürokratákra lesz hatással */",
        "common.js": "/* Az ide elhelyezett JavaScript kód minden felhasználó számára lefut az oldalak betöltésekor. */",
-       "cologneblue.js": "/* A Kölni kék felületet használó szerkesztők számára betöltendő JavaScriptek */",
        "monobook.js": "/* A Monobook felületet használó szerkesztők számára betöltendő JavaScriptek */",
-       "modern.js": "/* A Modern felületet használó szerkesztők számára betöltendő JavaScriptek */",
        "vector.js": "/* A Vector felületet használó szerkesztők számára betöltendő JavaScriptek */",
        "group-autoconfirmed.js": "/* Az ide elhelyezett JavaScript csak automatikusan megerősített felhasználóknak töltődik be */",
        "group-bot.js": "/* Az ide elhelyezett JavaScript csak botoknak töltődik be */",
        "pageinfo-category-pages": "Lapok száma",
        "pageinfo-category-subcats": "Alkategóriák száma",
        "pageinfo-category-files": "Fájlok száma",
-       "skinname-cologneblue": "Kölni kék",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Modern",
        "markaspatrolleddiff": "Ellenőrzöttnek jelölöd",
        "markaspatrolledtext": "Ellenőriztem",
        "markedaspatrolled": "Ellenőrzöttnek jelölve",
index ce10d7e..606ff5b 100644 (file)
        "searchmenu-exists": "'''Այս վիքիում, գոյություն ունի \"[[:$1]]\" անվանումով էջը։'''",
        "searchmenu-new": "'''Ստեղծե՛լ \"[[:$1]]\" էջը այս վիքիում'''",
        "searchprofile-articles": "Հիմնական էջեր",
-       "searchprofile-project": "Օգնության և նախագծերի էջեր",
        "searchprofile-images": "Մուլտիմեդիա",
        "searchprofile-everything": "Ամենուրեք",
        "searchprofile-advanced": "Ընդլայնված",
        "searchprofile-articles-tooltip": "Որոնել $1ում",
-       "searchprofile-project-tooltip": "Որոնել $1ում",
        "searchprofile-images-tooltip": "Նիշքերի որոնում",
        "searchprofile-everything-tooltip": "Որոնել բոլոր էջերում (այդ թվում քննարկման)",
        "searchprofile-advanced-tooltip": "Որոնել նշված անվանատարածքներում",
        "search-interwiki-default": "$1 արդյունք.",
        "search-interwiki-more": "(էլի)",
        "search-relatedarticle": "Հարակից",
-       "searcheverything-enable": "Որոնել բոլոր անվանատարածքներում",
        "searchrelated": "հարակից",
        "searchall": "բոլոր",
        "showingresults": "Ստորև բերված է մինչև {{PLURAL:$1|'''1''' արդյունք|'''$1''' արդյունք}}՝ սկսած №&nbsp;<strong>$2</strong>-ից։",
        "allowemail": "Թույլատրել էլ-նամակներ մյուս մասնակիցներից",
        "prefs-searchoptions": "Որոնում",
        "prefs-namespaces": "Անվանատարածք",
-       "defaultns": "Հակառակ դեպքում, որոնել այս անվանատարծքներում․",
        "default": "լռությամբ",
        "prefs-files": "Նիշքեր",
        "prefs-custom-css": "Անհատական CSS",
        "prefs-emailconfirm-label": "Էլ-փոստի վավերացում․",
        "youremail": "Էլեկտրոնային փոստ.",
        "username": "{{GENDER:$1|Մասնակցի անուն}}՝",
-       "uid": "Մասնակցի իդենտիֆիկատոր.",
        "prefs-memberingroups": "Անդամակցության {{PLURAL:$1|խումբ|խմբեր}}.",
        "prefs-registration": "Գրանցման ամսաթիվը․",
        "yourrealname": "Ձեր իրական անունը.",
        "recentchanges-label-bot": "Այս խմբագրումը կատարվել է բոտի կողմից",
        "recentchanges-label-unpatrolled": "Այս խմբագրումը դեռ չի պարեկվել",
        "recentchanges-label-plusminus": "Էջի չափսն փոխոխվեց այսքան բայթով։",
-       "recentchanges-legend-newpage": "(տես նաև՝  [[Special:NewPages|նոր էջերի ցանկ]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (տես նաև՝  [[Special:NewPages|նոր էջերի ցանկ]])",
        "rcnotefrom": "Ստորև բերված են փոփոխությունները սկսած՝ '''$2''' (մինչև՝ '''$1''')։",
        "rclistfrom": "Ցույց տալ նոր փոփոխությունները սկսած $3 $2",
        "rcshowhideminor": "$1 չնչին խմբագրումները",
        "logempty": "Տեղեկամատյանում չկան համընկնող տարրեր։",
        "log-title-wildcard": "Որոնել այս տեքստով սկսվող անվանումներ",
        "allpages": "Բոլոր էջերը",
-       "alphaindexline": "$1 -ից՝ $2",
        "nextpage": "Հաջորդ էջը ($1)",
        "prevpage": "Նախորդ էջը ($1)",
        "allpagesfrom": "Ցույց տալ էջերը, որոնք սկսվում են՝",
        "pageinfo-contentpage": "Հաշվառված որպես բովանդակային էջ",
        "pageinfo-contentpage-yes": "Այո",
        "pageinfo-protect-cascading-yes": "Այո",
-       "skinname-cologneblue": "Քյոլնի թախիծ",
        "skinname-monobook": "ՄիաԳիրք",
-       "skinname-modern": "Մոդերն",
        "skinname-vector": "Սովորական",
        "markaspatrolleddiff": "Նշել որպես ստուգված",
        "markaspatrolledtext": "Նշել այս էջը որպես ստուգված",
index bd1d41e..c7c0027 100644 (file)
        "vector-view-view": "Leger",
        "vector-view-viewsource": "Vider texto fonte",
        "actions": "Actiones",
+       "vector-more-actions": "Plus",
        "namespaces": "Spatios de nomines",
        "variants": "Variantes",
        "navigation-heading": "Menu de navigation",
        "permalink": "Ligamine permanente",
        "print": "Imprimer",
        "view": "Leger",
+       "view-foreign": "Vider in $1",
        "edit": "Modificar",
+       "edit-local": "Modificar description local",
        "create": "Crear",
+       "create-local": "Adder description local",
        "editthispage": "Modificar iste pagina",
        "create-this-page": "Crear iste pagina",
        "delete": "Deler",
        "jumptonavigation": "navigation",
        "jumptosearch": "cercar",
        "view-pool-error": "Pardono, le servitores es supercargate in iste momento.\nTroppo de usatores tenta vider iste pagina.\nPer favor attende un momento ante que tu essaya acceder novemente a iste pagina.\n\n$1",
+       "generic-pool-error": "Regrettabilemente, le servitores es supercargate in iste momento.\nTroppo de usatores tenta consultar iste ressource.\nPer favor attende un momento ante que tu essaya acceder novemente a iste ressource.",
        "pool-timeout": "Tempore limite excedite durante le serratura",
        "pool-queuefull": "Le cauda commun de processos es plen",
        "pool-errorunknown": "Error incognite",
+       "pool-servererror": "Le servicio de banco de ressources commun non es disponibile ($1).",
        "aboutsite": "A proposito de {{SITENAME}}",
        "aboutpage": "Project:A proposito",
        "copyright": "Le contento es disponibile sub $1 si non alteremente specificate.",
        "edit-gone-missing": "Impossibile actualisar le pagina.\nPare que illo ha essite delite.",
        "edit-conflict": "Conflicto inter modificationes.",
        "edit-no-change": "Tu modification ha essite ignorate, proque nulle cambio esseva facite in le texto.",
+       "postedit-confirmation-created": "Le pagina ha essite create.",
+       "postedit-confirmation-restored": "Le pagina ha essite restaurate.",
        "postedit-confirmation-saved": "Tu modification ha essite salveguardate.",
        "edit-already-exists": "Non poteva crear un nove pagina.\nIllo existe ja.",
        "defaultmessagetext": "Texto predefinite del message",
        "parser-template-recursion-depth-warning": "Limite de recursion del patrono excedite ($1)",
        "language-converter-depth-warning": "Limite de profunditate del conversor de lingua excedite ($1)",
        "node-count-exceeded-category": "Paginas in que le numero de nodos excede le limite",
+       "node-count-exceeded-category-desc": "Un categoria pro paginas ubi le numero de nodos ha essite excedite.",
        "node-count-exceeded-warning": "Le numero de nodos in iste pagina excede le limite",
        "expansion-depth-exceeded-category": "Paginas in que le profunditate de expansion excede le limite",
+       "expansion-depth-exceeded-category-desc": "Isto es un categoria pro paginas in le quales le profunditate de expansion ha essite excedite.",
        "expansion-depth-exceeded-warning": "Le profunditate de expansion in iste pagina excede le limite",
        "parser-unstrip-loop-warning": "Bucla de \"unstrip\" detegite",
        "parser-unstrip-recursion-limit": "Limite de recursion de \"unstrip\" excedite ($1)",
        "currentrev": "Version actual",
        "currentrev-asof": "Version actual del $1",
        "revisionasof": "Version del $1",
-       "revision-info": "Version del $1 per $2",
+       "revision-info": "Version del $1 per {{GENDER:$6|$2}}$7",
        "previousrevision": "← Version precedente",
        "nextrevision": "Version sequente →",
        "currentrevisionlink": "Version actual",
        "revdelete-no-file": "Le file specificate non existe.",
        "revdelete-show-file-confirm": "Es tu secur de voler vider un version delite del file  \"<nowiki>$1</nowiki>\" del $2 a $3?",
        "revdelete-show-file-submit": "Si",
+       "revdelete-selected-text": "{{PLURAL:$1|Version|Versiones}} seligite de [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Version|Versiones}} de file seligite de [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Evento|Eventos}} de registro seligite:",
        "revdelete-text-text": "Versiones delite continua a apparer in le historia del pagina, ma parte de lor contento essera inaccessibile pro le publico.",
        "revdelete-text-file": "Versiones delite de un file continua a apparer in le historia del file, ma parte de lor contento essera inaccessibile pro le publico.",
        "searchmenu-exists": "'''Existe un pagina nominate \"[[$1]]\" in iste wiki'''",
        "searchmenu-new": "<strong>Crea le pagina \"[[:$1]]\" in iste wiki!</strong> {{PLURAL:$2|0=|Vide etiam le pagina trovate con le recerca.|Vide etiam le resultatos del recerca.}}",
        "searchprofile-articles": "Paginas de contento",
-       "searchprofile-project": "Paginas de adjuta e del projecto",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Toto",
        "searchprofile-advanced": "Avantiate",
        "searchprofile-articles-tooltip": "Cercar in $1",
-       "searchprofile-project-tooltip": "Cercar in $1",
        "searchprofile-images-tooltip": "Cercar files",
        "searchprofile-everything-tooltip": "Cercar in tote le contento (includente le paginas de discussion)",
        "searchprofile-advanced-tooltip": "Cercar in spatios de nomines personalisate",
        "search-interwiki-default": "Resultatos de $1:",
        "search-interwiki-more": "(plus)",
        "search-relatedarticle": "Connexe",
-       "searcheverything-enable": "Cercar in tote le spatios de nomines",
        "searchrelated": "connexe",
        "searchall": "totes",
        "showingresults": "Infra se monstra non plus de {{PLURAL:$1|'''1''' resultato|'''$1''' resultatos}} a partir del numero '''$2'''.",
        "powersearch-togglelabel": "Seliger:",
        "powersearch-toggleall": "Totes",
        "powersearch-togglenone": "Nihil",
+       "powersearch-remember": "Memorar selection pro recercas futur",
        "search-external": "Recerca externe",
        "searchdisabled": "Le recerca in {{SITENAME}} es disactivate.\nTu pote cercar via Google in le interim.\nNota que lor indices del contento de {{SITENAME}} pote esser obsolete.",
        "search-error": "Un error ha occurrite durante le recerca: $1",
        "allowemail": "Activar reception de e-mail de altere usatores",
        "prefs-searchoptions": "Recerca",
        "prefs-namespaces": "Spatios de nomines",
-       "defaultns": "Alteremente cercar in iste spatios de nomines:",
        "default": "predefinite",
        "prefs-files": "Files",
        "prefs-custom-css": "CSS personalisate",
        "prefs-emailconfirm-label": "Confirmation del e-mail:",
        "youremail": "E-mail:",
        "username": "{{GENDER:$1|Nomine de usator}}:",
-       "uid": "ID del {{GENDER:$1|usator}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membro}} de {{PLURAL:$1|gruppo|gruppos}}:",
        "prefs-registration": "Data de registration:",
        "yourrealname": "Nomine real:",
        "right-move": "Renominar paginas",
        "right-move-subpages": "Renominar paginas con lor subpaginas",
        "right-move-rootuserpages": "Renominar le paginas radice de usator",
+       "right-move-categorypages": "Renominar paginas de categoria",
        "right-movefile": "Renominar files",
        "right-suppressredirect": "Non rediriger le ancian nomine verso le nove quando se renomina un pagina",
        "right-upload": "Incargar files",
        "action-createpage": "crear paginas",
        "action-createtalk": "crear paginas de discussion",
        "action-createaccount": "crear iste conto de usator",
+       "action-history": "vider le historia de iste pagina",
        "action-minoredit": "marcar iste modification como minor",
        "action-move": "renominar iste pagina",
        "action-move-subpages": "renominar iste pagina e su subpaginas",
        "action-move-rootuserpages": "renominar le paginas radice de usator",
+       "action-move-categorypages": "renominar paginas de categoria",
        "action-movefile": "renominar iste file",
        "action-upload": "incargar iste file",
        "action-reupload": "superscriber iste file existente",
        "recentchanges-label-unpatrolled": "Iste modification non ha ancora essite patruliate",
        "recentchanges-label-plusminus": "Le dimension del pagina ha cambiate de iste numero de bytes",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "(vide etiam le [[Special:NewPages|lista de nove paginas]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide etiam le [[Special:NewPages|lista de nove paginas]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Ecce le modificationes a partir del <strong>$3 a $4</strong> (usque a <strong>$1</strong> entratas).",
        "rclistfrom": "Monstrar nove modificationes a partir de $3 $2",
        "largefileserver": "Le grandor de iste file excede le limite configurate in le servitor.",
        "emptyfile": "Le file que tu incargava pare esser vacue.\nIsto pote esser debite a un error in le nomine del file.\nPer favor verifica que tu realmente vole incargar iste file.",
        "windows-nonascii-filename": "Iste wiki non supporta nomines de file con characteres special.",
-       "fileexists": "Un file con iste nomine existe ja.\nPer favor verifica <strong>[[:$1]]</strong> si tu non es secur de voler cambiar lo.\n[[$1|thumb]]",
+       "fileexists": "Un file con iste nomine existe jam.\nPer favor verifica <strong>[[:$1]]</strong> si {{GENDER:|tu}} non es secur de voler cambiar lo.\n[[$1|thumb]]",
        "filepageexists": "Le pagina de description correspondente a iste file ha ja essite create a <strong>[[:$1]]</strong>, ma nulle file con iste nomine existe al momento.\nLe summario que tu entra non apparera in le pagina de description.\nSi tu vole que illo appare, tu debe inserer lo manualmente.\n[[$1|thumb]]",
        "fileexists-extension": "Un file con un nomine similar existe ja: [[$2|thumb]]\n* Nomine del file a incargar: <strong>[[:$1]]</strong>\n* Nomine del file existente: <strong>[[:$2]]</strong>\nPer favor selige un altere nomine.",
        "fileexists-thumbnail-yes": "Iste file pare esser un imagine a grandor reducite ''(miniatura)''. [[$1|thumb]]\nPer favor verifica le file <strong>[[:$1]]</strong>.\nSi le file verificate es le mesme imagine a grandor original, non es necessari incargar un miniatura additional.",
        "wantedtemplates": "Patronos desirate",
        "mostlinked": "Paginas le plus ligate",
        "mostlinkedcategories": "Categorias le plus ligate",
-       "mostlinkedtemplates": "Patronos le plus utilisate",
+       "mostlinkedtemplates": "Paginas le plus transcludite",
        "mostcategories": "Paginas con le plus categorias",
        "mostimages": "Files le plus utilisate",
        "mostinterwikis": "Paginas con le plus interwikis",
        "log-title-wildcard": "Cercar titulos que comencia con iste texto",
        "showhideselectedlogentries": "Monstrar/celar le entratas de registro seligite",
        "allpages": "Tote le paginas",
-       "alphaindexline": "$1 a $2",
        "nextpage": "Sequente pagina ($1)",
        "prevpage": "Precedente pagina ($1)",
        "allpagesfrom": "Monstrar le paginas a partir de:",
        "listgrouprights-removegroup-self": "Pote remover {{PLURAL:$2|gruppo|gruppos}} del proprie conto: $1",
        "listgrouprights-addgroup-self-all": "Pote adder tote le gruppos al proprie conto",
        "listgrouprights-removegroup-self-all": "Pote remover tote le gruppos del proprie conto",
+       "listgrouprights-namespaceprotection-header": "Restrictiones de spatio de nomines",
+       "listgrouprights-namespaceprotection-namespace": "Spatio de nomines",
+       "listgrouprights-namespaceprotection-restrictedto": "Derecto(s) que permitte al usator de modificar",
+       "trackingcategories": "Categorias de sequimento",
+       "trackingcategories-summary": "Iste pagina lista le categorias de sequimento que es automaticamente plenate per le software MediaWiki. Lor nomines pote esser cambiate alterante le correspondente messages de systema in le spatio de nomines \"{{ns:8}}\".",
+       "trackingcategories-msg": "Categoria de sequimento",
+       "trackingcategories-name": "Nomine del message",
+       "trackingcategories-desc": "Criterios pro inclusion in categoria",
+       "noindex-category-desc": "Iste pagina es excludite del indice perque illo contine le marca <code><nowiki>__NOINDEX__</nowiki></code> e es in un spatio de nomines ubi le uso de iste marca es permittite.",
+       "index-category-desc": "Iste pagina contine le marca <code><nowiki>__INDEX__</nowiki></code> (e es in un spatio de nomines ubi le uso de iste marca es permittite), e dunque es includite in le indice mesmo si illo normalmente non lo esserea.",
+       "post-expand-template-inclusion-category-desc": "Le expansion de tote le patronos facerea le dimension del pagina exceder le limite de <code>$wgMaxArticleSize</code>, dunque alcun patronos non ha essite expandite.",
+       "post-expand-template-argument-category-desc": "Post le expansion de un parametro de patrono (qualcosa inter accolladas triple, como <code>{{{Exemplo}}}</code>), le dimension del pagina excede le limite de <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "Troppo de functiones costose de analysator syntactic (como <code>#ifexist</code>) ha essite includite in un pagina. Vide [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Iste categoria es addite si le pagina contine un ligamine de file rupte (un ligamine pro incorporar un file quando le file non existe).",
+       "hidden-category-category-desc": "Iste categoria contine le marca <code><nowiki>__HIDDENCAT__</nowiki></code>, impediente lo de apparer in le quadro de ligamines de categoria in paginas, si non configurate alteremente.",
+       "trackingcategories-nodesc": "Nulle description disponibile.",
+       "trackingcategories-disabled": "Le categoria es disactivate",
        "mailnologin": "Necun adresse de invio",
        "mailnologintext": "Tu debe [[Special:UserLogin|aperir un session]]\ne haber un adresse de e-mail valide in tu [[Special:Preferences|preferentias]]\npro inviar e-mail a altere usatores.",
        "emailuser": "Inviar e-mail a iste usator",
        "watchnologin": "Tu non ha aperite un session",
        "addwatch": "Adder al observatorio",
        "addedwatchtext": "Le pagina \"[[:$1]]\" ha essite addite a tu [[Special:Watchlist|observatorio]].\nLe modificationes futur in iste pagina e in le pagina de discussion associate essera listate in illo.",
+       "addedwatchtext-short": "Le pagina \"$1\" ha essite addite a tu observatorio.",
        "removewatch": "Remover del observatorio",
        "removedwatchtext": "Le pagina \"[[:$1]]\" ha essite removite de [[Special:Watchlist|tu observatorio]].",
+       "removedwatchtext-short": "Le pagina \"$1\" ha essite removite de tu observatorio.",
        "watch": "Observar",
        "watchthispage": "Observar iste pagina",
        "unwatch": "Disobservar",
        "unwatchthispage": "Disobservar",
        "notanarticle": "Non es un articulo",
        "notvisiblerev": "Le version ha essite delite",
-       "watchlist-details": "{{PLURAL:$1|$1 pagina|$1 paginas}} es in tu observatorio, sin contar le paginas de discussion.",
+       "watchlist-details": "{{PLURAL:$1|$1 pagina|$1 paginas}} in tu observatorio. Le paginas de discussion non es contate separatemente.",
        "wlheader-enotif": "Le notification via e-mail es active.",
        "wlheader-showupdated": "Le paginas que ha essite modificate post tu ultime visita se monstra in litteras '''grasse'''.",
        "wlnote2": "Ecce le cambiamentos in le ultime {{PLURAL:$1|hora|<strong>$1</strong> horas}}, a partir del $2 a $3.",
        "contributions-title": "Contributiones del usator $1",
        "mycontris": "Contributiones",
        "contribsub2": "Pro {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Le conto de usator \"$1\" non es registrate.",
        "nocontribs": "Necun modification ha essite trovate secundo iste criterios.",
        "uctop": "(ultime)",
        "month": "A partir del mense (e anterior):",
        "movepagetalktext": "Le pagina de discussion associate essera automaticamente renominate conjunctemente con illo '''a minus que''':\n*Un pagina de discussion non vacue ja existe sub le nove nomine, o\n*Tu dismarca le quadrato infra.\n\nIl tal casos, tu debera renominar o fusionar le pagina manualmente si desirate.",
        "movearticle": "Renominar pagina:",
        "moveuserpage-warning": "'''Attention:''' Tu es super le puncto de renominar un pagina de usator. Nota ben que solmente le pagina, e ''non'' le usator, essera renominate.",
+       "movecategorypage-warning": "<strong>Attention:</strong> Tu es sur le puncto de renominar un pagina de categoria. Nota ben que solmente le pagina essera renominate e tote le paginas in le ancian categoria <em>non</em> essera recategorisate in le nove.",
        "movenologintext": "Tu debe esser un usator registrate e [[Special:UserLogin|aperir un session]] pro poter renominar un pagina.",
        "movenotallowed": "Tu non ha le permission de renominar paginas.",
        "movenotallowedfile": "Tu non ha le permission de renominar files.",
        "cant-move-user-page": "Tu non ha le permission de renominar paginas principal de usatores.",
        "cant-move-to-user-page": "Tu non ha le permission de renominar un pagina verso un pagina de usator (excepte un subpagina de usator).",
+       "cant-move-category-page": "Tu non ha le permission de renominar paginas de categoria.",
+       "cant-move-to-category-page": "Tu non ha le permission de renominar un pagina in un pagina de categoria.",
        "newtitle": "Al nove titulo:",
        "move-watch": "Observar le paginas de origine e de destination",
        "movepagebtn": "Renominar pagina",
        "tooltip-summary": "Entra un curte summario",
        "interlanguage-link-title": "$1 (in $2)",
        "common.css": "/* Le CSS placiate hic se applicara a tote le stilos */",
-       "cologneblue.css": "/* Le CSS placiate hic afficera le usatores del apparentia Colonia Blau */",
        "monobook.css": "/* Le CSS placiate hic afficera le usatores del apparentia MonoBook */",
-       "modern.css": "/* Le CSS placiate hic afficera le usatores del apparentia Moderne */",
        "vector.css": "/* Le CSS placiate hic afficera le usatores del apparentia Vector */",
        "print.css": "/* Le CSS placiate hic influentiara le apparentia del paginas imprimite */",
        "common.js": "/* Omne JavaScript hic se executara pro tote le usatores a cata cargamento de pagina. */",
-       "cologneblue.js": "/* Omne JavaScript hic se executara pro le usatores del apparentia Colonia Blau */",
        "monobook.js": "/* Omne JavaScript hic se executara pro le usatores del apparentia MonoBook */",
-       "modern.js": "/* Omne JavaScript hic se executara pro le usatores del apparentia Moderne */",
        "vector.js": "/* Omne JavaScript hic se executara pro le usatores del apparentia Vector */",
        "anonymous": "{{PLURAL:$1|Usator|Usatores}} anonyme de {{SITENAME}}",
        "siteuser": "Usator $1 de {{SITENAME}}",
        "pageinfo-category-pages": "Numero de paginas",
        "pageinfo-category-subcats": "Numero de subcategorias",
        "pageinfo-category-files": "Numero de files",
-       "skinname-cologneblue": "Colonia Blau",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderne",
        "markaspatrolleddiff": "Marcar como patruliate",
        "markaspatrolledtext": "Marcar iste pagina como patruliate",
        "markedaspatrolled": "Marcate como patruliate",
        "newimages-summary": "Iste pagina special detalia le recente files incargate.",
        "newimages-legend": "Filtro",
        "newimages-label": "Nomine del file (o un parte de illo):",
+       "newimages-showbots": "Monstrar files incargate per robots",
        "noimages": "Nihil a vider.",
        "ilsubmit": "Cercar",
        "bydate": "per data",
        "watchlistedit-raw-done": "Tu observatorio ha essite actualisate.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 titulo|$1 titulos}} ha essite addite:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 titulo|$1 titulos}} ha essite removite:",
+       "watchlistedit-clear-title": "Observatorio radite",
+       "watchlistedit-clear-legend": "Rader observatorio",
+       "watchlistedit-clear-explain": "Tote le titulos essera removite de tu observatorio",
+       "watchlistedit-clear-titles": "Titulos:",
+       "watchlistedit-clear-submit": "Rader le observatorio (isto es permanente!)",
+       "watchlistedit-clear-done": "Tu observatorio ha essite radite.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 titulo|$1 titulos}} ha essite removite:",
+       "watchlistedit-too-many": "Il ha troppo de paginas pro monstrar los hic.",
+       "watchlisttools-clear": "Rader le observatorio",
        "watchlisttools-view": "Vider modificationes pertinente",
        "watchlisttools-edit": "Vider e modificar le observatorio",
        "watchlisttools-raw": "Modificar observatorio crude",
        "htmlform-no": "No",
        "htmlform-yes": "Si",
        "htmlform-chosen-placeholder": "Selige un option",
+       "htmlform-cloner-create": "Adder plus",
+       "htmlform-cloner-delete": "Remover",
+       "htmlform-cloner-required": "Al minus un valor es requirite.",
        "sqlite-has-fts": "$1 con supporto de recerca de texto integre",
        "sqlite-no-fts": "$1 sin supporto de recerca de texto integre",
        "logentry-delete-delete": "$1 {{GENDER:$2|deleva}} le pagina $3",
index b258bea..cc9919b 100644 (file)
@@ -33,7 +33,9 @@
                        "William Surya Permana",
                        "לערי ריינהארט",
                        "아라",
-                       "C5st4wr6ch"
+                       "C5st4wr6ch",
+                       "Raynasution",
+                       "Arifin.wijaya"
                ]
        },
        "tog-underline": "Garis bawahi pranala:",
@@ -46,7 +48,7 @@
        "tog-showtoolbar": "Tampilkan bilah alat penyuntingan",
        "tog-editondblclick": "Sunting halaman dengan klik ganda",
        "tog-editsectiononrightclick": "Fungsikan penyuntingan bagian dengan mengeklik kanan pada judul bagian",
-       "tog-watchcreations": "Tambahkan halaman yang saya buat ke daftar pantauan",
+       "tog-watchcreations": "Tambahkan halaman yang saya buat dan berkas yang saya unggah ke daftar pantauan",
        "tog-watchdefault": "Tambahkan halaman yang saya sunting ke daftar pantauan",
        "tog-watchmoves": "Tambahkan halaman yang saya pindahkan ke daftar pantauan",
        "tog-watchdeletion": "Tambahkan halaman yang saya hapus ke daftar pantauan",
        "vector-view-view": "Baca",
        "vector-view-viewsource": "Lihat sumber",
        "actions": "Tindakan",
+       "vector-more-actions": "Lainnya",
        "namespaces": "Ruang nama",
        "variants": "Varian",
        "navigation-heading": "Menu navigasi",
        "pool-timeout": "Lewat waktu menunggu kunci",
        "pool-queuefull": "Kumpulan antrean penuh",
        "pool-errorunknown": "Kesalahan yang tidak diketahui",
+       "pool-servererror": "Layanan penghitung pool ini tidak tersedia ($1).",
        "aboutsite": "Tentang {{SITENAME}}",
        "aboutpage": "Project:Perihal",
        "copyright": "Konten tersedia sesuai di bawah $1.",
        "anontalkpagetext": "----''Ini adalah halaman pembicaraan seorang pengguna anonim yang belum membuat akun atau tidak menggunakannya.\nDengan demikian, kami terpaksa harus memakai alamat IP yang bersangkutan untuk mengidentifikasikannya.\nAlamat IP seperti ini mungkin dipakai bersama oleh beberapa pengguna yang berbeda.\nJika Anda adalah seorang pengguna anonim dan merasa mendapatkan komentar-komentar yang tidak relevan yang ditujukan langsung kepada Anda, silakan [[Special:UserLogin/signup|membuat akun]] atau [[Special:UserLogin|masuk log]] untuk menghindari kerancuan dengan pengguna anonim lainnya di lain waktu.''",
        "noarticletext": "Saat ini tidak ada teks di halaman ini.\nAnda dapat [[Special:Search/{{PAGENAME}}|melakukan pencarian untuk judul halaman ini]] di halaman-halaman lain, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mencari log terkait], atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} menyunting halaman ini]</span>.",
        "noarticletext-nopermission": "!Saat ini tidak ada teks di halaman ini.\nAnda dapat [[Special:Search/{{PAGENAME}}|melakukan pencarian untuk judul halaman ini]] di halaman-halaman lain, atau <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mencari log terkait]</span>, tapi Anda tidak memiliki izin untuk membuat halaman ini",
-       "missing-revision": "Revisi #$1 halaman berjudul \"{{FULLPAGENAME}}\" tidak eksks.\n\nHal ini biasanya disebabkan oleh tautan versi terdahulu menuju halaman yang sudah dihapus.\nRinciannya dapat ditemukan di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
+       "missing-revision": "Revisi #$1 halaman berjudul \"{{FULLPAGENAME}}\" tidak eksis.\n\nHal ini biasanya disebabkan oleh tautan versi terdahulu menuju halaman yang sudah dihapus.\nRinciannya dapat ditemukan di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
        "userpage-userdoesnotexist": "Akun pengguna \"<nowiki>$1</nowiki>\" tidak terdaftar.",
        "userpage-userdoesnotexist-view": "Pengguna \"$1\" tidak terdaftar.",
        "blocked-notice-logextract": "Pengguna ini sedang diblokir.\nEntri log pemblokiran terakhir tersedia di bawah ini sebagai rujukan.",
        "parser-template-recursion-depth-warning": "Limit kedalaman hubungan berulang templat terlampaui ($1)",
        "language-converter-depth-warning": "Batas kedalaman pengonversi bahasa terlampaui ($1)",
        "node-count-exceeded-category": "Halaman dimana hitungan-node terlampaui",
+       "node-count-exceeded-category-desc": "Kategori untuk halaman dimana hitungan-node terlampaui.",
        "node-count-exceeded-warning": "Page exceeded the node-count",
        "expansion-depth-exceeded-category": "Pages where expansion depth is exceeded",
+       "expansion-depth-exceeded-category-desc": "Ini adalah kategori untuk halaman dimana kedalaman ekspansi terlampaui.",
        "expansion-depth-exceeded-warning": "Page exceeded the expansion depth",
        "parser-unstrip-loop-warning": "Unstrip loop detected",
        "parser-unstrip-recursion-limit": "Unstrip recursion limit exceeded ($1)",
        "currentrev": "Revisi terkini",
        "currentrev-asof": "Revisi terkini pada $1",
        "revisionasof": "Revisi per $1",
-       "revision-info": "Revisi per $1; $2",
+       "revision-info": "Revisi per $1 oleh {{GENDER:$6|$2}}$7",
        "previousrevision": "←Revisi sebelumnya",
        "nextrevision": "Revisi selanjutnya→",
        "currentrevisionlink": "Revisi terkini",
        "revdelete-selected-text": "{{PLURAL:$1|Revisi terpilih|Revisi terpilih}} dari [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Versi berkas terpilih|Versi berkas terpilih}} dari [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Log|Log-log}} pilihan untuk:",
+       "revdelete-text-text": "Revisi yang dihapus akan tetap muncul di halaman riwayat, tetapi bagian dari konten mereka akan menjadi tidak dapat diakses untuk umum.",
+       "revdelete-text-file": "Versi berkas yang dihapus akan tetap muncul di riwayat berkas, tetapi bagian dari konten mereka akan menjadi tidak dapat diakses untuk umum.",
+       "logdelete-text": "Acara log yang dihapus akan tetap muncul di log, tetapi bagian dari konten mereka akan menjadi tidak dapat diakses untuk umum.",
        "revdelete-text-others": "Pengurus lain pada {{SITENAME}} masih akan dapat mengakses konten tersembunyi dan dapat membatalkan penghapusan itu kembali melalui antarmuka yang sama ini, kecuali ada batasan-batasan tambahan yang ditetapkan.",
        "revdelete-confirm": "Tolong konfirmasi bahwa Anda memang bermaksud melakukan ini, memahami konsekuensinya, dan bahwa Anda melakukannya sesuai dengan [[{{MediaWiki:Policy-url}}|kebijakan]].",
        "revdelete-suppress-text": "Penyembunyian revisi '''hanya''' boleh digunakan untuk kasus-kasus berikut:\n* Informasi yang berpotensi memfitnah\n* Informasi pribadi yang tak sepantasnya\n*: ''alamat rumah dan nomor telepon, nomor kartu identitas, dan lain-lain.''",
        "editundo": "balikkan",
        "diff-empty": "(Tidak ada perbedaan)",
        "diff-multi-sameuser": "({{PLURAL:$1|Satu revisi antara|$1 revisi antara}} oleh pengguna yang sama tidak ditampilkan)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Satu revisi antara|$1 revisi antara}} oleh {{PLURAL:$2|satu pengguna lainnya|$2 pengguna}} tidak ditampilkan)",
        "diff-multi-manyusers": "({{PLURAL:$1|Satu|$1}} revisi antara oleh lebih dari $2 {{PLURAL:$2|satu|$2}} pengguna tak ditampilkan)",
        "difference-missing-revision": "{{PLURAL:$2|Satu revisi|$2 revisi}} dari perbedaan ini ($1) {{PLURAL:$2|tidak|tidak}} ditemukan.\n\nHal ini biasanya disebabkan oleh tautan diff yang kedaluwarsa ke halaman yang sudah dihapus.\nRinciannya dapat ditemukan di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
        "searchresults": "Hasil pencarian",
        "searchmenu-exists": "* Halaman '''[[$1]]'''",
        "searchmenu-new": "<strong>Buat halaman \"[[:$1]]\" di wiki ini!</strong> {{PLURAL:$2|0=|Lihat pula halaman yang ditemukan dari pencarian Anda.|Lihat pula hasil pencarian yang ditemukan.}}",
        "searchprofile-articles": "Halaman isi",
-       "searchprofile-project": "Halaman Bantuan dan Proyek",
        "searchprofile-images": "Berkas Multimedia",
        "searchprofile-everything": "Semua",
        "searchprofile-advanced": "Lanjutan",
        "searchprofile-articles-tooltip": "Pencarian di $1",
-       "searchprofile-project-tooltip": "Pencarian di $1",
        "searchprofile-images-tooltip": "Pencarian berkas",
        "searchprofile-everything-tooltip": "Pencarian di seluruh situs (termasuk halaman pembicaraan)",
        "searchprofile-advanced-tooltip": "Pencarian di ruang nama tertentu",
        "search-interwiki-default": "Hasil dari $1:",
        "search-interwiki-more": "(selanjutnya)",
        "search-relatedarticle": "Berkaitan",
-       "searcheverything-enable": "Cari di semua ruang nama",
        "searchrelated": "berkaitan",
        "searchall": "semua",
        "showingresults": "Di bawah ini ditampilkan hingga {{PLURAL:$1|'''1''' hasil|'''$1''' hasil}}, dimulai dari #'''$2'''.",
        "powersearch-togglelabel": "Pilih:",
        "powersearch-toggleall": "Semua",
        "powersearch-togglenone": "Tidak ada",
+       "powersearch-remember": "Ingar pilihan untuk pencarian selanjutnya",
        "search-external": "Pencarian eksternal",
        "searchdisabled": "Pencarian {{SITENAME}} sementara dimatikan.\nAnda dapat mencari melalui Google untuk sementara waktu.\nPerlu diingat bahwa indeks Google untuk konten {{SITENAME}} mungkin belum mencakup perubahan-perubahan terakhir.",
        "search-error": "Kesalahan terjadi saat mencari: $1",
        "allowemail": "Izinkan pengguna lain mengirim surel",
        "prefs-searchoptions": "Cari",
        "prefs-namespaces": "Ruang nama",
-       "defaultns": "Atau cari dalam ruang-ruang nama berikut:",
        "default": "baku",
        "prefs-files": "Berkas",
        "prefs-custom-css": "CSS pribadi",
        "right-move": "Memindahkan halaman",
        "right-move-subpages": "Memindahkan halaman dengan seluruh subhalamannya",
        "right-move-rootuserpages": "Memindahkan halaman utama pengguna",
+       "right-move-categorypages": "Pindahkan halaman kategori",
        "right-movefile": "Memindahkan berkas",
        "right-suppressredirect": "Tidak membuat pengalihan dari nama lama ketika memindahkan halaman",
        "right-upload": "Memuat berkas",
        "action-createpage": "membuat halaman baru",
        "action-createtalk": "membuat halaman pembicaraan baru",
        "action-createaccount": "membuat akun pengguna ini",
+       "action-history": "lihat riwayat halaman ini",
        "action-minoredit": "menandai sebagai suntingan kecil",
        "action-move": "memindahkan halaman ini",
        "action-move-subpages": "memindahkan halaman ini, dan semua sub-halamannya",
        "action-move-rootuserpages": "memindahkan halaman utama pengguna",
+       "action-move-categorypages": "pindahkan halaman kategori",
        "action-movefile": "pindahkan berkas ini",
        "action-upload": "memuatkan berkas ini",
        "action-reupload": "menimpa berkas yang telah ada",
        "recentchanges-label-unpatrolled": "Suntingan ini belum terpatroli",
        "recentchanges-label-plusminus": "Perubahan ukuran halaman dalam bita",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "(lihat pula [[Special:NewPages|daftar halaman baru]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lihat pula [[Special:NewPages|daftar halaman baru]])",
        "rcnotefrom": "Di bawah ini adalah perubahan sejak <strong>$2</strong> (ditampilkan sampai <strong>$1</strong> perubahan).",
        "rclistfrom": "Perlihatkan perubahan terbaru sejak $3 $2",
        "rcshowhideminor": "$1 suntingan kecil",
        "unwatchedpages": "Halaman yang tak dipantau",
        "listredirects": "Daftar pengalihan",
        "listduplicatedfiles": "Daftar berkas yang berduplikat",
+       "listduplicatedfiles-summary": "Ini adalah daftar berkas di mana versi terbaru dari berkas tersebut merupakan duplikat dari versi terbaru dari beberapa berkas lain. Hanya berkas lokal yang dianggap.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] memiliki [[$3|{{PLURAL:$2|sebuah duplikat|$2 duplikat}}]].",
        "unusedtemplates": "Templat yang tak digunakan",
        "unusedtemplatestext": "Daftar berikut adalah semua halaman pada ruang nama {{ns:template}} yang tidak dipakai di halaman mana pun.\nCek dahulu pranala lain ke templat tersebut sebelum menghapusnya.",
        "trackingcategories-name": "Nama pesan",
        "trackingcategories-desc": "Kriteria inklusi kategori",
        "noindex-category-desc": "Halaman tidak diindeks oleh robot karena ini mempunyai kata khusus <code><nowiki>__NOINDEX__</nowiki></code> padanya dan berada dalam ruang nama yang mengizinkan penanda itu.",
+       "index-category-desc": "Halaman ini memiliki <code><nowiki>__INDEX__</nowiki></code> di atasnya (dan dalam ruang nama yang mana bendera yang diperbolehkan), dan karenanya diindeks oleh robot di mana itu biasanya tidak akan.",
        "post-expand-template-inclusion-category-desc": "Setelah memperluas semua templat, ukuran halaman menjadi lebih besar dari <code>$wgMaxArticleSize</code>, sehingga beberapa templat tidak diperluas.",
+       "post-expand-template-argument-category-desc": "Setelah memperluas argumen templat (sesuatu dalam tiga tanda kurung, seperti <code>{{{Foo}}}</code>), halaman tersebut lebih besar dari <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "Terlalu banyak fungsi parser (seperti <code>#ifexist</code>) termasuk pada halaman. Lihat [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "Kategori ditambahkan jika halaman tersebut berisi pranala rusak (pranala untuk menanamkan sebuah berkas ketika berkas tersebut tidak ada).",
+       "hidden-category-category-desc": "Ini adalah kategori dengan <code><nowiki>__HIDDENCAT__</nowiki></code> di atasnya, yang mencegah dari muncul di kotak tautan kategori pada halaman, secara default.",
        "trackingcategories-nodesc": "Deskripsi tidak tersedia.",
        "trackingcategories-disabled": "Kategori dinonaktifkan",
        "mailnologin": "Tidak ada alamat surel",
        "watchnologin": "Belum masuk log",
        "addwatch": "Tambahkan ke daftar pantauan",
        "addedwatchtext": "Halaman \"[[:$1]]\" telah ditambahkan ke [[Special:Watchlist|daftar pantauan]] Anda.\nPerubahan-perubahan berikutnya pada halaman tersebut dan halaman pembicaraan terkaitnya akan tercantum di sini.",
+       "addedwatchtext-short": "Halaman \"$1\" telah ditambahkan ke daftar pantauan Anda.",
        "removewatch": "Hapus dari daftar pantauan",
        "removedwatchtext": "Halaman \"[[:$1]]\" telah dihapus dari [[Special:Watchlist|daftar pantauan]] Anda.",
+       "removedwatchtext-short": "Halaman \"$1\" telah dihapus dari daftar pantauan Anda.",
        "watch": "Pantau",
        "watchthispage": "Pantau halaman ini",
        "unwatch": "Batal pantau",
        "sp-contributions-newbies-sub": "Untuk pengguna baru",
        "sp-contributions-newbies-title": "Kontribusi pengguna baru",
        "sp-contributions-blocklog": "Log pemblokiran",
+       "sp-contributions-suppresslog": "kontribusi pengguna yang dihapus",
        "sp-contributions-deleted": "kontribusi pengguna yang dihapus",
        "sp-contributions-uploads": "unggahan",
        "sp-contributions-logs": "log",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] telah diblokir.<br />\nLihat [[Special:BlockList|daftar pemblokiran]] untuk meninjau kembali pemblokiran.",
        "ipb-blockingself": "Anda akan memblokir diri sendiri! Apakah Anda yakin akan melakukannya?",
        "ipb-confirmhideuser": "Anda akan memblokir pengguna dengan mengaktifkan \"sembunyikan pengguna\" diaktifkan. Ini akan menyembunyikan nama pengguna pada semua daftar dan entri log. Apakah Anda yakin ingin melakukannya?",
+       "ipb-confirmaction": "Jika Anda yakin Anda benar-benar ingin melakukannya, periksa kolom \"{{int:ipb-confirm}}\" di bagian bawah.",
        "ipb-edit-dropdown": "Sunting alasan pemblokiran",
        "ipb-unblock-addr": "Hilangkan blokir $1",
        "ipb-unblock": "Hilangkan blokir seorang pengguna atau suatu alamat IP",
        "movepagetalktext": "Halaman pembicaraan yang berkaitan juga akan dipindahkan secara otomatis '''kecuali apabila:'''\n\n*Sebuah halaman pembicaraan yang tidak kosong telah ada di bawah judul baru, atau\n*Anda tidak memberi tanda cek pada kotak di bawah ini\n\nDalam kasus tersebut, apabila diinginkan, Anda dapat memindahkan atau menggabungkan halaman secara manual.",
        "movearticle": "Pindahkan halaman:",
        "moveuserpage-warning": "'''Peringatan:''' Anda tengah memindahkan halaman pengguna. Perlu diketahui bahwa hanya halaman yang akan dipindahkan namun pengguna ''tidak akan'' berganti nama.",
+       "movecategorypage-warning": "<strong>Peringatan:</strong> Anda akan memindahkan halaman kategori. Perlu diketahui bahwa hanya halaman yang akan dipindahkan dan setiap halaman dalam kategori lama <em>tidak</em> akan dikategorikan ulang ke yang baru.",
        "movenologintext": "Anda harus menjadi pengguna terdaftar dan telah [[Special:UserLogin|masuk log]] untuk dapat memindahkan suatu halaman.",
        "movenotallowed": "Anda tak memiliki hak akses untuk memindahkan halaman.",
        "movenotallowedfile": "Anda tak memiliki hak untuk memindahkan berkas.",
        "cant-move-user-page": "Anda tidak memiliki hak akses untuk memindahkan halaman pengguna (terpisah dari subhalaman).",
        "cant-move-to-user-page": "Anda tidak memiliki hak akses untuk memindahkan halaman ke suatu halaman pengguna (kecuali ke subhalaman pengguna).",
+       "cant-move-category-page": "Anda tidak memiliki izin untuk memindahkan halaman kategori.",
+       "cant-move-to-category-page": "Anda tidak memiliki izin untuk memindahkan halaman ke halaman kategori.",
        "newtitle": "Ke judul baru:",
        "move-watch": "Pantau halaman ini",
        "movepagebtn": "Pindahkan halaman",
        "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]].",
        "tooltip-preferences-save": "Simpan preferensi",
        "tooltip-summary": "Masukkan sebuah ringkasan pendek",
        "common.css": "/* CSS yang ada di sini akan diterapkan pada semua kulit. */",
-       "cologneblue.css": "/* CSS yang ada di sini akan diterapkan pada kulit Cologne Blue. */",
        "monobook.css": "/* CSS yang ada di sini akan diterapkan pada kulit Monobook. */",
-       "modern.css": "/* CSS yang ada di sini akan diterapkan pada kulit Modern. */",
        "vector.css": "/* CSS nan ado di siko diterapkan pado kulik Vektor. */",
        "print.css": "/* CSS yang ada di sini akan diterapkan pada tampilan cetak. */",
        "noscript.css": "/* CSS di sini akan mempengaruhi pengguna dengan skrip Java non-aktif */",
        "group-sysop.css": "/* CSS di sini hanya mempengaruhi pengurus */",
        "group-bureaucrat.css": "/* CSS di sini hanya mempengaruhi birokrat */",
        "common.js": "/* JavaScript yang ada di sini akan diterapkan untuk semua kulit. */",
-       "cologneblue.js": "/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Cologne Blue */",
        "monobook.js": "/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit MonoBook */",
-       "modern.js": "/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Modern */",
        "vector.js": "/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Vector */",
        "group-autoconfirmed.js": "/* Semua JavaScript di sini hanya dimuatkan untuk pengguna terkonfirmasi otomatis */",
        "group-bot.js": "/* Semua JavaScript di sini hanya dimuatkan untuk bot */",
        "pageinfo-category-pages": "Jumlah halaman",
        "pageinfo-category-subcats": "Jumlah subkategori",
        "pageinfo-category-files": "Jumlah berkas",
-       "skinname-cologneblue": "Biru Köln",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Modern",
        "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Tandai telah dipatroli",
        "markaspatrolledtext": "Tandai halaman ini telah dipatroli",
        "newimages-summary": "Halaman istimewa berikut menampilkan daftar berkas yang terakhir dimuat",
        "newimages-legend": "Penyaring",
        "newimages-label": "Nama berkas (atau sebagian dari nama berkas):",
+       "newimages-showbots": "Tampilkan unggahan oleh bot",
        "noimages": "Tidak ada yang dilihat.",
        "ilsubmit": "Cari",
        "bydate": "berdasarkan tanggal",
        "imgmultigo": "Cari!",
        "imgmultigoto": "Pergi ke halaman $1",
        "img-lang-default": "(bahasa default)",
+       "img-lang-info": "Jadikan gambar ini dalam $1. $2",
        "img-lang-go": "Tuju ke",
        "ascending_abbrev": "naik",
        "descending_abbrev": "turun",
        "watchlistedit-raw-done": "Daftar pantauan Anda telah diperbarui.",
        "watchlistedit-raw-added": "{{PLURAL:$1|$1 judul telah}} ditambahkan:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|$1 judul telah}} dikeluarkan:",
+       "watchlistedit-clear-title": "Daftar pantauan dihapus",
+       "watchlistedit-clear-legend": "Hapus daftar pantauan",
+       "watchlistedit-clear-explain": "Semua judul akan dihapus dari daftar pantauan Anda",
+       "watchlistedit-clear-titles": "Judul:",
+       "watchlistedit-clear-submit": "Hapus daftar pantauan (Ini bersifat permanen!)",
+       "watchlistedit-clear-done": "Daftar pantauan Anda telah dihapus.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 judul telah|$1 judul telah}} dihapus:",
+       "watchlistedit-too-many": "Ada terlalu banyak halaman untuk ditampilkan di sini.",
+       "watchlisttools-clear": "Hapus daftar pantauan",
        "watchlisttools-view": "Tampilkan perubahan terkait",
        "watchlisttools-edit": "Tampilkan dan sunting daftar pantauan",
        "watchlisttools-raw": "Sunting daftar pantauan mentah",
        "duration-centuries": "{{PLURAL:$1||}}$1 abad",
        "duration-millennia": "{{PLURAL:$1||}}$1 milenium",
        "rotate-comment": "Gambar diputar $1 {{PLURAL:$1|derajat}} searah jarum jam",
+       "limitreport-title": "Parser profil data:",
        "limitreport-cputime": "Penggunaan waktu CPU",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|detik|detik}}",
        "limitreport-walltime": "Penggunaan waktu riil",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|detik|detik}}",
+       "limitreport-ppvisitednodes": "Preprosesor mengunjungi hitungan node",
+       "limitreport-ppgeneratednodes": "Preprosesor menghasilkan hitungan node",
+       "limitreport-postexpandincludesize": "Pasca memperluas mencakup ukuran",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bita|bita}}",
        "limitreport-templateargumentsize": "Ukuran argumen temlat",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bita|bita}}",
index 715a939..2df91a7 100644 (file)
        "vector-view-view": "Basaen",
        "vector-view-viewsource": "Kitaen ti taudan",
        "actions": "Dagiti aramid",
+       "vector-more-actions": "Adu pay",
        "namespaces": "Dagiti nagan ti espasio",
        "variants": "Sab-sabali a pagsasao",
        "navigation-heading": "Pagdaliasatan ti pagpilian",
        "permalink": "Agnanayon a silpo",
        "print": "Imaldit",
        "view": "Kitaen",
+       "view-foreign": "Kitaen idiay $1",
        "edit": "Urnosen",
+       "edit-local": "Urnosen ti lokal a deskripsion",
        "create": "Agaramid",
+       "create-local": "Agnayon ti lokal a deskripsion",
        "editthispage": "Urnosen daytoy a panid",
        "create-this-page": "Partuaten daytoy a panid",
        "delete": "Ikkaten",
        "jumptonavigation": "pagdaliasatan",
        "jumptosearch": "biruken",
        "view-pool-error": "Pasensian, dagiti servers ket nadagsenan unay tattan.\nAdu unay dagiti agar-aramat nga agbuy-buya ti daytoy a panid.\nPangaasi nga agurayka met bassit sakbay a padasem manen ti mangserrek daytoy a panid.\n\n$1",
+       "generic-pool-error": "Pasensian, dagiti server ket agdama a nadagsenan unay.\nAdu unay dagiti agar-aramat nga agbuybuya ti daytoy a rekurso.\nPangngaasi nga agurayka bassit sakbay a padasem manen a serrekan daytoy a rekurso.",
        "pool-timeout": "Madamdama agur-uray para iti kandado",
        "pool-queuefull": "Napunnon ti nagyanan ti pagur-urayan",
        "pool-errorunknown": "Di am-ammo a biddut",
+       "pool-servererror": "Ti serbisio ti pagbilangan ti pisina ket saan a magun-od ($1).",
        "aboutsite": "Maipanggep ti {{SITENAME}}",
        "aboutpage": "Project:Maipanggep",
        "copyright": "Ti linaon ket magun-od babaen ti $1 malaksid no adda sabali a naibaga.",
        "gotaccountlink": "Sumrek",
        "userlogin-resetlink": "Nalipatam dagiti salaysay ti pagserrekmo?",
        "userlogin-resetpassword-link": "Nalipatam ti kontraseniasmo?",
+       "userlogin-helplink2": "Tulong iti panagserrek",
        "userlogin-loggedin": "Nakastrekkan a kas ni {{GENDER:$1|$1}}.\nUsaren ti porma dita baba tapno sumrek a kas sabali nga agar-aramat.",
        "userlogin-createanother": "Agaramid pay ti sabali a pakabilangan",
        "createacct-emailrequired": "Esurat a pagtaengan",
        "resetpass-abort-generic": "Ti panagsukat ti kontrasenias ket pinasardeng babaen ti maysa a pagpaatiddog.",
        "resetpass-expired": "Nagpason ti kontraseniasmo. Pangngaasi a mangiyasentar ti baro a kontrasenias tapno makastrek.",
        "resetpass-expired-soft": "Nagpason ti kontraseniasmo, ken nasken a maiyasentar manen. Pangngaasi nga agpili tattan ti baro a kontrasenias, wenno pinduten ti \"{{int:resetpass-submit-cancel}}\"  tapno maiyasentarto intono madamdama.",
+       "resetpass-validity-soft": "Saan nga umiso ti kontraseniasmo: $1\n\nAgpilika tattan ti baro a kontrasenias, wenno pinduten ti \"{{int:resetpass-submit-cancel}}\" tapno isaad intono madamdama.",
        "passwordreset": "Iyasentar manen ti kontrasenias",
        "passwordreset-text-one": "Lippasem daytoy a porma tapno maiyasentar manen ti bukodmo a kontrasenias.",
        "passwordreset-text-many": "{{PLURAL:$1|Agpunno ti maysa kadagiti pagikabilan tapno makaawat ti temporario a kontrasenias babaen ti esurat.}}",
        "edit-gone-missing": "Saan a mapabaro daytoy a panid.\nKasla met naikkaten.",
        "edit-conflict": "Adda kasinnungat ti panag-urnos.",
        "edit-no-change": "Ti inurnosmo ket saan a naikaskaso, ngamin ket awan ti nasukatan a testo.",
+       "postedit-confirmation-created": "Ti panid ket napartuaten.",
+       "postedit-confirmation-restored": "Ti panid ket naisublin.",
        "postedit-confirmation-saved": "Ti inurnosmo ket naidulinen.",
        "edit-already-exists": "Saan a makaaramid ti baro a panid.\nAdda met daytoyen.",
        "defaultmessagetext": "Kasisigud a testo ti mensahe",
        "parser-template-recursion-depth-warning": "Ti kinauneg ti panagdullit ti plantilia ket nagpatingga ti napalabes ($1)",
        "language-converter-depth-warning": "Ti kauneg ti panagaramid ti pagsasao ket napalabes ti agpatingga a ($1)",
        "node-count-exceeded-category": "Dagiti panid a simmurok ti bilang ti nodo",
+       "node-count-exceeded-category-desc": "Ti kategoria para kadagiti panid a nalabsan ti bilang ti nodo.",
        "node-count-exceeded-warning": "Ti panid ket nasurokanna ti bilang ti nodo",
        "expansion-depth-exceeded-category": "Dagiti panid a nasurokan ti kauneg ti panagpadakkel",
+       "expansion-depth-exceeded-category-desc": "Daytoy ket kategoria para kadagiti panid a nalabsan ti kauneg ti panagpadakkel.",
        "expansion-depth-exceeded-warning": "Ti panid ket nasurokanna ti kauneg ti panagpadakkel",
        "parser-unstrip-loop-warning": "Adda nakita a di-naukisan a silo",
        "parser-unstrip-recursion-limit": "Ti di-naukisan a panagsumro manen a patingga ket nasurokan ($1)",
        "currentrev": "Kinaudi a binaliwan",
        "currentrev-asof": "Kinaudi a panagbalbaliw manipud idi $1",
        "revisionasof": "Panagbalbaliw manipud idi $1",
-       "revision-info": "Panagbaliw manipud idi $1 babaen ni $2",
+       "revision-info": "Panagbaliw manipud idi $1 babaen ni {{GENDER:$6|$2}}$7",
        "previousrevision": "←Daan a panagbalbaliw",
        "nextrevision": "Nabarbaro a panagbalbaliw→",
        "currentrevisionlink": "Kinaudi a binaliwan",
        "revdelete-no-file": "Awan dayta nainaganan a papeles.",
        "revdelete-show-file-confirm": "Sigurado kadi a kayatmo ti mangkita ti naikkat a baliwan ti papeles \"<nowiki>$1</nowiki>\" a naggapu idi $2 idi $3?",
        "revdelete-show-file-submit": "Wen",
+       "revdelete-selected-text": "{{PLURAL:$1|Napili a nabaliwan|Dagiti napili a nabaliwan}} iti [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Napili a bersion ti papeles|Dagiti napili a bersion ti papeles}} iti [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Ti napili a listaan ti napasamak|Dagiti napili a listaan ti napasamak}}:",
        "revdelete-text-text": "Dagiti naikkat a rebision ket agparangto pay laeng iti panid ti pakasaritaan, ngem dagiti paset ti linaonda ket saanton a publiko a maserrekan.",
        "revdelete-text-file": "Dagiti naikkat a bersion ti papeles ket agparangto pay laeng iti pakasaritaan ti papeles, ngem dagiti paset ti linaonda ket saanton a publiko a maserrekan.",
        "searchmenu-exists": "'''Adda panid a nanaganan ti \"[[:$1]]\" iti daytoy a wiki.'''",
        "searchmenu-new": "<strong>Partuaten ti panid ti \"[[:$1]]\" iti daytoy a wiki!</strong> {{PLURAL:$2|0=|Kitaen pay ti panid a nabirukan ti panagbirukmo.|Kitaen pay dagiti resulta a nabirukan ti panagbiruk.}}",
        "searchprofile-articles": "Dagiti naglaon a panid",
-       "searchprofile-project": "Tulong ken Gandat a pampanid",
        "searchprofile-images": "Sabsabali a midia",
        "searchprofile-everything": "Amin amin",
        "searchprofile-advanced": "Napasayaat",
        "searchprofile-articles-tooltip": "Agbirukka idiay $1",
-       "searchprofile-project-tooltip": "Agbirukka idiay $1",
        "searchprofile-images-tooltip": "Agbirukka para iti papeles",
        "searchprofile-everything-tooltip": "Birukem amin a linaon (uray dagiti makipatangan a panid)",
        "searchprofile-advanced-tooltip": "Agbirukka kadagiti naiduma a \"nagan ti espasio\"",
        "search-interwiki-default": "Dagiti resulta manipud ti $1:",
        "search-interwiki-more": "(adu pay)",
        "search-relatedarticle": "Mainaig",
-       "searcheverything-enable": "Agbirukka kadagiti amin a nagan ti espasio",
        "searchrelated": "mainaig",
        "searchall": "amin",
        "showingresults": "Maiparang dita baba agingga {{PLURAL:$1|iti '''1''' a nagbanagan|dagiti '''$1''' a nagbanagan}} a mangrugi iti #'''$2'''.",
        "powersearch-togglelabel": "Markaan:",
        "powersearch-toggleall": "Amin",
        "powersearch-togglenone": "Awan",
+       "powersearch-remember": "Lagipen ti napili para kadagiti masakbayan a panagbiruk",
        "search-external": "Akinruar a panagbiruk",
        "searchdisabled": "Ti panagbiruk iti {{SITENAME}} ket nabaldado.\nMabalinmo ti agbiruk idiay Google tattan.\nLaglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.",
        "search-error": "Adda maysa a biddut  napasamak bayat nga agbirbiruk:$1",
        "allowemail": "Pakabaelam ti esurat a naggapu kadagiti sabali nga agar-aramat",
        "prefs-searchoptions": "Biruken",
        "prefs-namespaces": "Dagiti nagan ti espasio",
-       "defaultns": "Wenno saan agbirukka kadagitoy a nagan ti espasio:",
        "default": "kasisigud",
        "prefs-files": "Dagiti papeles",
        "prefs-custom-css": "Naiduma a CSS",
        "prefs-emailconfirm-label": "Pammasingked ti esurat:",
        "youremail": "Esurat:",
        "username": "{{GENDER:$1|Nagan ti agar-aramat}}:",
-       "uid": "ID ti {{GENDER:$1|Agar-aramat}}:",
        "prefs-memberingroups": "{{GENDER:$2|Kameng}} ti {{PLURAL:$1|a grupo|a grupgrupo}}:",
        "prefs-registration": "Oras a nagrehistro:",
        "yourrealname": "Pudno a nagan:",
        "right-move": "Iyalis dagiti panid",
        "right-move-subpages": "Iyalis dagiti panid a kakuyog dagiti subpanidda.",
        "right-move-rootuserpages": "Iyalis dagiti ramut a panid ti agar-aramat",
+       "right-move-categorypages": "Iyalis ti pampanid ti kategoria",
        "right-movefile": "Iyalis dagiti papeles",
        "right-suppressredirect": "Saan nga agaramid ti baw-ing a naggapo iti taudan no iyalis dagiti panid",
        "right-upload": "Agipan ti papeles",
        "action-createpage": "agpartuat kadagiti panid",
        "action-createtalk": "agaramid kadagiti pagtungtungan a panid",
        "action-createaccount": "agpartuat ti pakabilangan daytoy nga agar-aramat",
+       "action-history": "kitaen ti pakasaritaan daytoy a panid",
        "action-minoredit": "markaam a bassit nga urnos daytoy",
        "action-move": "iyalis daytoy a panid",
        "action-move-subpages": "iyalis daytoy a panid, ken dagiti subpanidna",
        "action-move-rootuserpages": "iyalis dagiti ramut a panid ti agar-aramat",
+       "action-move-categorypages": "iyalis ti pampanid ti kategoria",
        "action-movefile": "iyalis daytoy a papeles",
        "action-upload": "ikarga daytoy a papeles",
        "action-reupload": "suratam manen dagiti adda a papeles",
        "recentchanges-label-unpatrolled": "Daytoy a panag-urnos ket saan pay a napatruliaan",
        "recentchanges-label-plusminus": "Ti panagbaliw ti kadakkel ti panid babaen ti bilang dagiti byte",
        "recentchanges-legend-heading": "'''Leyenda:'''",
-       "recentchanges-legend-newpage": "(kitaen pay ti [[Special:NewPages|listaan ti baro a pampanid]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kitaen pay ti [[Special:NewPages|listaan ti baro a pampanid]])",
        "rcnotefrom": "Dita baba ket dagiti sinukatan manipud idi strong>$2</strong> (agingga iti <strong>$1</strong> a naipakita).",
        "rclistfrom": "Ipakita dagiti kabarbaro a sinukatan a mangrugi manipud idi $3 $2",
        "rcshowhideminor": "$1 dagiti bassit a panag-urnos",
        "download": "ikarga",
        "unwatchedpages": "Di mabambantayan a pampanid",
        "listredirects": "Listaan dagiti baw-ing",
+       "listduplicatedfiles": "Listaan dagiti papeles nga addaan kadagiti duplikado",
+       "listduplicatedfiles-summary": "Daytoy ket listaan dagiti papeles a ti kaudian unay a bersion ti papeles ket duplikado ti kaudian unay a bersion iti sabali a papeles. Dagiti laeng lokal a papeles ti maikeddeng.",
+       "listduplicatedfiles-entry": "Ti [[:File:$1|$1]] ket addaan [[$3|{{PLURAL:$2|iti duplikado|kadagiti $2 a duplikado}}]].",
        "unusedtemplates": "Dagiti saan a nausar a plantilia",
        "unusedtemplatestext": "Daytoy a panid ket ilistana dagiti panid idiay {{ns:template}} a nagan ti espasio a saan a nairaman iti sabali a panid.\nLaglagipem ti agkita kadagiti sabsabali a silpo ti plantilia sakbay nga ikkatem ida.",
        "unusedtemplateswlh": "dagiti sabali a silpo",
        "pageswithprop-prophidden-binary": "binario a pateg ti tagikua a nailemmeng ($1)",
        "doubleredirects": "Dagiti namindua a naibaw-ing",
        "doubleredirectstext": "Daytoy a panid ket ilistana dagiti panid nga agbaw-ing kadagiti sabsabali a baw-ing a pampanid.\nIti tunggal maysa nga aray ket adda nagyanna kadagiti silpo iti umuna ken maikadua a baw-ing, ken iti puntaan iti maikadua a baw-ing, nga isu ti \"pudno\" a puntaan ti panid, nga ti umuna a baw-ing ket isu ti ipatudona.\n<del>Nakurosan</del> dagita naikabil ket napadtuan.",
-       "double-redirect-fixed-move": "Ti [[$1]] ket naiyalisen.\nTattan ket naibaw-ing idiay [[$2]].",
-       "double-redirect-fixed-maintenance": "Simsimpaen dagiti namindua a naibaw-ing a naggapo idiay [[$1]] nga ipan idiay [[$2]].",
+       "double-redirect-fixed-move": "Naiyalisen ti [[$1]].\nAutomatiko idi a napabaro ken naibaw-ing tattan idiay [[$2]].",
+       "double-redirect-fixed-maintenance": "Automatiko a simsimpaen ti doble a baw-ing manipud ti [[$1]] idiay [[$2]] iti panagtaripato nga obra.",
        "double-redirect-fixer": "Panagsimpa ti baw-ing",
        "brokenredirects": "Dagiti naputed a baw-ing",
        "brokenredirectstext": "Dagitoy sumaganad a baw-ing ket nakasilpo kadagiti awan a panid:",
        "deadendpagestext": "Dagitoy a pampanid ket saan a nakasilpo ti sabali a pampanid ditoy {{SITENAME}} .",
        "protectedpages": "Dagiti nasalakniban a panid",
        "protectedpages-indef": "Inggat ingana a salakniban laeng",
-       "protectedpages-summary": "Daytoy a panid ket ilistana dagiti adda a panid nga agdama a nasalakniban. Para iti listaan dagiti titulo a nasalakniban manipud ti pannakapartuat, kitaen ti [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+       "protectedpages-summary": "Daytoy a panid ket ilistana dagiti panid nga agdama a nasalakniban. Para iti listaan dagiti titulo a nasalakniban manipud ti pannakapartuat, kitaen ti [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Dagiti sariap a salaknib laeng",
        "protectedpages-noredirect": "Ilemmeng dagiti baw-ing",
        "protectedpagesempty": "Awan ti pampanid nga agdama a nasalakniban babaen kadagitoy a parametro.",
        "protectedpages-unknown-timestamp": "Di ammo",
        "protectedpages-unknown-performer": "Di ammo nga agar-aramat",
        "protectedtitles": "Dagiti nasalakniban a titulo",
-       "protectedtitles-summary": "Daytoy a panid ket ilistana dagiti titulo nga agdama a nasalakniban manipud ti pannakapartuat. Para iti listaan dagiti adda a panid a nasalakniban, kitaen ti [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+       "protectedtitles-summary": "Daytoy a panid ket ilistana dagiti titulo nga agdama a nasalakniban manipud ti pannakapartuat. Para iti listaan dagiti adda a panid a nasalakniban, kitaen ti  [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]..",
        "protectedtitlesempty": "Awan dagiti titulo nga agdama a nasalakniban iti dagitoy a parametro.",
        "listusers": "Listaan dagiti agar-aramat",
        "listusers-editsonly": "Ipakita laeng dagiti agar-aramat nga adda inurnosda",
        "log-title-wildcard": "Agsapul kadagiti titulo nga agrugi iti daytoy a testo",
        "showhideselectedlogentries": "Ipakita/ilemmeng dagiti napili a naikabil ti listaan",
        "allpages": "Amin a pampanid",
-       "alphaindexline": "$1 iti $2",
        "nextpage": "sumaruno a panid ($1)",
        "prevpage": "Napalabas a panid ($1)",
        "allpagesfrom": "Ipakita dagiti panid a mangrugi iti:",
        "listgrouprights-removegroup-self": "Agikkat ti {{PLURAL:$2|a grupo|kadagiti grupo}} manipud ti bukod a pakabilangan: $1",
        "listgrouprights-addgroup-self-all": "Inayon amin dagiti grupo iti bukod a pakabilangan",
        "listgrouprights-removegroup-self-all": "Ikkatem amin dagiti grupo manipud ti bukod a pakabilangan",
+       "listgrouprights-namespaceprotection-header": "Dagiti panangigawid ti nagan ti espasio",
+       "listgrouprights-namespaceprotection-namespace": "Nagan ti espasio",
+       "listgrouprights-namespaceprotection-restrictedto": "Karbengan wenno karkarbengan a mangpalubos nga agurnos ti agar-aramat",
+       "trackingcategories": "Pagsurotan a katkategoria",
+       "trackingcategories-summary": "Daytoy a panid ket ilistana ti pagsurotan a katkategoria nga automatiko a nayonan babaen ti sopwer ti MediaWiki. Ti nagnaganda ket mabalin a mabaliwan babaen ti panagbaliw kadagiti maitutop a mensahe ti sistema iti nagan ti espasio ti {{ns:8}}.",
+       "trackingcategories-msg": "Pagsurotan a kategoria",
+       "trackingcategories-name": "Nagan ti mensahe",
+       "trackingcategories-desc": "Kriteria ti panangiraman ti kategoria",
+       "noindex-category-desc": "Ti panid ket saan naipagsurotan babaen dagiti robot gapu ta addaan iti salamangka a balikas ti <code><nowiki>__NOINDEX__</nowiki></code> ken adda iti nagan ti espasio a maipalubos ti wagayway.",
+       "index-category-desc": "Ti panid ket addaan iti <code><nowiki>__INDEX__</nowiki></code> (ken adda iti nagan ti espasio a maipalubos ti wagayway), ken isu a naipagsurotan babaen dagiti robot ngem no iti kadawyan ket saan.",
+       "post-expand-template-inclusion-category-desc": "Kalpasan ti panagpadakkel kadagiti amin a plantilia, ti kadakkel ti panid ket dakdakkel ngem ti <code>$wgMaxArticleSize</code>, isu a dagiti plantilia ket saan a napadakkel.",
+       "post-expand-template-argument-category-desc": "Kalpasan ti panagpadakkel ti argumento ti plantilia (dagiti addaan iti tallo a pangrikep, kasla ti <code>{{{Foo}}}</code>), ti panid ket dakdakkel ngem ti <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "Adu unay dagiti nangina nga annong ti parser (kasla ti <code>#ifexist</code>) a nairaman iti panid. Kitaen ti[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Kategoria a nainayon no ti panid ket aglaon ti nadadael a silpo ti papeles (ti silpo a panangisengngat ti papeles no awan ti papeles).",
+       "hidden-category-category-desc": "Daytoy ket kategoria nga addaan iti <code><nowiki>__HIDDENCAT__</nowiki></code> , a mangpawil daytoy nga agparang kadagiti silpo ti kahon ti kategoria kadagiti panid, bbabaen ti kasisigud.",
+       "trackingcategories-nodesc": "Awan ti magun-od a deskripsion.",
+       "trackingcategories-disabled": "Nabaldado ti kategoria",
        "mailnologin": "Awan ti pagipatulodan a pagtaengan",
        "mailnologintext": "Masapul a [[Special:UserLogin|nakastrekka]] ken adda umisu nga esurat a pagtaengan idiay [[Special:Preferences|kaykayatmo]] ti agipatulod ti esurat kadagiti sabsabali nga agar-aramat.",
        "emailuser": "Esuratan daytoy nga agar-aramat",
        "watchnologin": "Saan a nakastrek",
        "addwatch": "Inayon iti bambantayan",
        "addedwatchtext": "Ti panid iti \"[[:$1]]\" ket nainayonen idiay [[Special:Watchlist|listaan ti bambantayam]].\nDagiti masakbayan a panagsukat iti daytoy a panid ken dagiti mainaig a tungtunganna a panid ket mailistanto idiay.",
+       "addedwatchtext-short": "Ti panid ti \"$1\" ket nainayonen iti listaan ti bambantayam.",
        "removewatch": "Ikkaten dita bambantayan",
        "removedwatchtext": "Daytoy a panid  \"[[:$1]]\" ket naikkat idiay [[Special:Watchlist|bambantayam]].",
+       "removedwatchtext-short": "Ti panid ti \"$1\" ket naikkaten manipud ti listaan ti bambantayam.",
        "watch": "bantayan",
        "watchthispage": "Bantayan daytoy a panid",
        "unwatch": "Saanen a bantayan",
        "unwatchthispage": "Isardeng a bantayan daytoy a panid",
        "notanarticle": "Saan a naglaon a panid",
        "notvisiblerev": "Ti panagbalbaliw ti sabali nga agar-aramat ket naikkaten",
-       "watchlist-details": "{{PLURAL:$1|$1 panid|$1 dagiti panid}} a bambantayam, saan a mairaman dagiti panid ti tungtungan.",
+       "watchlist-details": "{{PLURAL:$1|$1 panid|$1 dagiti panid}} a bambantayam, saan a naisina a mairaman dagiti panid ti tungtungan.",
        "wlheader-enotif": "Napakabaelan ti panangipakaammo ti esurat.",
        "wlheader-showupdated": "Dagiti panid a nasukatanen manipud ti kinaudi a panagsarungkarmo ket naipakita iti '''napuskol'''",
        "wlnote2": "Dita baba ket dagiti binalbaliwan {{PLURAL:$1|iti napalabas nga oras|kadagiti napalabas a <strong>$1</strong> nga oras}}, manipud idi $2, $3.",
        "protect-locked-blocked": "Saanmo a mabalin a sukatan dagiti kita ti salaknib no naserraanka.\nAdda ditoy kadagiti agdama a kasasaad ti panid '''$1''':",
        "protect-locked-dblock": "Ti kita ti salaknib ket saan a masukatan gapu ti agdama a kandado ti database.\nAdda ditoy kadagiti agdama a kasasaad ti panid '''$1''':",
        "protect-locked-access": "Awan ti pammalubos ti pakabilangam a mangsukat kadagiti lessaad ti salaknib ti panid.\nDagitoy dagiti agdama a kasasaad ti panid a '''$1''':",
-       "protect-cascadeon": "Daytoy a panid ket agdama a nasalakniban gapu ta nairaman kadagiti sumaganad a {{PLURAL:$1|panid, nga addaan|pampanid, nga addaan}} ti sipapakat a salaknib ti amin-amin.\nMabalinmo a sukatan ti lessaad ti salaknib daytoy a panid, ngem saanna a tignayen ti salaknib nga amin-amin.",
+       "protect-cascadeon": "Daytoy a panid ket agdama a nasalakniban gapu ta nairaman kadagiti sumaganad a {{PLURAL:$1|panid, nga addaan|pampanid, nga addaan}} iti sipapakat a salaknib a sariap.\nDagiti panagbaliw iti agpang ti salaknib iti daytoy a panid ket saan a mabanagan ti salaknib a sariap.",
        "protect-default": "Palubosan amin nga agar-aramat",
        "protect-fallback": "Palubosan laeng dagiti agar-aramat nga adda iti \"$1\" a pammalubos",
        "protect-level-autoconfirmed": "Palubosan laeng dagiti automatiko a napasingkedan nga agar-aramat",
        "contributions-title": "Inar-aramid ti agar-aramat para kenni $1",
        "mycontris": "Naar-aramid",
        "contribsub2": "Para kenni {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Ti pakabilangan ti agar-aramat \"$1\" ket saan a nakarehistro.",
        "nocontribs": "Awan ti nasarakan a nasukatan a kapada daytoy a kita.",
        "uctop": "(agdama)",
        "month": "Manipud iti bulan ti (ken nasapsapa pay):",
        "movepagetalktext": "Ti mainaig a tungtungan ti panid ket giddato a maiyalis a karamanna '''malaksid:'''\n*No addan sigud nga awan linaonna a tungtungan ti panid babaen ti baro a nagan, wenno\n*No ikkatem ti kur-itna ti kahon iti baba.\n\nKadagitoy a kaso, masapul nga iyalis wenno itiponmo a manual ti panid no kayatmo.",
        "movearticle": "Iyalis ti panid:",
        "moveuserpage-warning": "'''Ballaag:''' Mangrugrugika nga agiyalis ti panid ti agar-aramat. Pangngaasi a laglapipen a ti panid ket isu laeng ti mabalin nga iyalis ken ti agar-aramat ket ''saan'' a managanan.",
+       "movecategorypage-warning": "<strong>Ballaag:</strong> Mangiyal-aliskan iti panid ti kategoria. Pangngaasi a laglagipen a ti maiyalisto laeng ket ti panid ken ti aniaman a pampanid iti daan a kategoria ket <em>saanto</em> a maikategoria iti baro.",
        "movenologintext": "Masapul a nakarehistroka nga agar-aramat ken [[Special:UserLogin|nakastrek]] tapno makaiyalis iti panid.",
        "movenotallowed": "Awan ti pammalubosmo nga agiyalis kadagiti panid.",
        "movenotallowedfile": "Awan ti pammalubosmo nga agiyalis kadagiti papeles.",
        "cant-move-user-page": "Awan ti pammalubos mo nga agiyalis kadagiti panid ti agar-aramat (malaksid kadaiti subpanid).",
        "cant-move-to-user-page": "Awan ti pammalubos mo nga agiyalis ti panid idiay panid ti agar-aramat (malaksid kadagiti subpanid ti agar-aramat).",
+       "cant-move-category-page": "Awan ti pammalubosmo nga agiyalis kadagiti panid ti kategoria.",
+       "cant-move-to-category-page": "Awan ti pammalubosmo nga agiyalis ti panid iti panid ti kategoria.",
        "newtitle": "Iti baro a titulo:",
        "move-watch": "Bantayan daytoy a panid",
        "movepagebtn": "Iyalis ti panid",
        "newimages-summary": "Daytoy nga espesial a panid ket ipakitana ti kinaudi a pinag-ipan kadagiti papeles.",
        "newimages-legend": "Sagat",
        "newimages-label": "Nagan ti papeles (wenno paset na) :",
+       "newimages-showbots": "Ipakita dagiti naikarga babaen dagiti bot",
        "noimages": "Awan ti makita.",
        "ilsubmit": "Biruken",
        "bydate": "babaen ti petsa",
        "watchlistedit-raw-done": "Napabaro ti listaan ti bambantayam.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 a titulo ti|dagiti $1 a titulo ti}} nainayon:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 a titulo ti|dagiti $1 dagiti titulo ti}} naikkat:",
+       "watchlistedit-clear-title": "Nadalusanen ti listaan ti bambantayan",
+       "watchlistedit-clear-legend": "Dalusan ti listaan ti bambantayan",
+       "watchlistedit-clear-explain": "Amin dagiti titulo ket maikkatto manipud ti listaan ti bambantayam.",
+       "watchlistedit-clear-titles": "Dagiti titulo:",
+       "watchlistedit-clear-submit": "Dalusan ti listaan ti bambantayan (Daytoy ket permanente!)",
+       "watchlistedit-clear-done": "Nadalusanen ti bambantayam.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 a titulo|$1 kadagiti titulo}} ti naikkat:",
+       "watchlistedit-too-many": "Adu unay a pampanid ti maiparang ditoy.",
+       "watchlisttools-clear": "Dalusan ti listaan ti bambantayan",
        "watchlisttools-view": "Kitaen dagiti maitunos a sinukatan",
        "watchlisttools-edit": "Kitaen ken urnosen ti listaan ti bambantayan",
        "watchlisttools-raw": "Urnosen ti kilaw a listaan ti bambantayan",
        "htmlform-no": "Saan",
        "htmlform-yes": "Wen",
        "htmlform-chosen-placeholder": "Agpili ti pagpilian",
+       "htmlform-cloner-create": "Agnayon pay ti adu",
+       "htmlform-cloner-delete": "Ikkaten",
+       "htmlform-cloner-required": "Saan a basbassit ngem maysa a pateg ti masapul.",
        "sqlite-has-fts": "$1 adda ti suporta ti napno a testo ti panagbiruk",
        "sqlite-no-fts": "$1 awan ti suporta ti napno a testo ti panagbiruk",
        "logentry-delete-delete": "Ni $1 ket {{GENDER:$2|inikkatna}} ti panid ti $3",
index d7a1e69..51a299b 100644 (file)
        "searchmenu-exists": "'''Það er síða að nafni „[[:$1]]“ á þessum wiki'''",
        "searchmenu-new": "<strong>Skapaðu síðuna \"[[:$1]]\" á þessum wiki!<strong>\nSjá einnig {{PLURAL:$2|0=|leitarniðurstöðuna|leitarniðurstöðurnar}}.",
        "searchprofile-articles": "Efnissíður",
-       "searchprofile-project": "Hjálpar- og verkefnasíður",
        "searchprofile-images": "Margmiðlanir",
        "searchprofile-everything": "Allt",
        "searchprofile-advanced": "Nánar",
        "searchprofile-articles-tooltip": "Leita í $1",
-       "searchprofile-project-tooltip": "Leita í $1",
        "searchprofile-images-tooltip": "Leita að skrám",
        "searchprofile-everything-tooltip": "Leita í öllu efni (þar á meðal spjallsíðum)",
        "searchprofile-advanced-tooltip": "Leita í ákveðnum nafnrýmum",
        "search-interwiki-default": "$1 útkomur:",
        "search-interwiki-more": "(fleiri)",
        "search-relatedarticle": "Tengt",
-       "searcheverything-enable": "Leita í öllum nafnrýmum",
        "searchrelated": "tengt",
        "searchall": "öllum",
        "showingresults": "Sýni <strong>$1</strong> {{PLURAL:$1|niðurstöðu|niðurstöður}} frá og með #<strong>$2</strong>.",
        "allowemail": "Virkja tölvupóst frá öðrum notendum",
        "prefs-searchoptions": "Leit",
        "prefs-namespaces": "Nafnrými",
-       "defaultns": "Leita í þessum nafnrýmum sjálfgefið:",
        "default": "sjálfgefið",
        "prefs-files": "Skrár",
        "prefs-custom-css": "Sérsniðið CSS-útlit",
        "prefs-emailconfirm-label": "Staðfesting netfangs:",
        "youremail": "Netfang:",
        "username": "{{Gender:$1|Notandanafn}}:",
-       "uid": "Raðnúmer {{GENDER:$1|notanda}}:",
        "prefs-memberingroups": "{{GENDER:$2|Meðlimur}} {{PLURAL:$1|hóps|hópa}}:",
        "prefs-registration": "Nýskráningartími:",
        "yourrealname": "Fullt nafn:",
        "recentchanges-label-minor": "Þetta er minniháttar breyting",
        "recentchanges-label-bot": "Þessi breyting var gerð af vélmenni",
        "recentchanges-label-unpatrolled": "Þessi breyting hefur ekki verið yfirfarin",
-       "recentchanges-legend-newpage": "(sjá einng [[Special:NewPages|lista yfir nýjar síður]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sjá einng [[Special:NewPages|lista yfir nýjar síður]])",
        "rcnotefrom": "Að neðan eru breytingar síðan <strong>$2<strong> (allt að <strong>$1<strong> sýndar).",
        "rclistfrom": "Sýna breytingar frá og með $3 $2",
        "rcshowhideminor": "$1 minniháttar breytingar",
        "log-title-wildcard": "Leita að titlum sem byrja á þessum texta",
        "showhideselectedlogentries": "Sýna/fela valdar aðgerða færslur",
        "allpages": "Allar síður",
-       "alphaindexline": "$1 til $2",
        "nextpage": "Næsta síða ($1)",
        "prevpage": "Fyrri síða ($1)",
        "allpagesfrom": "Sýna síður frá og með:",
        "pageinfo-category-pages": "Fjöldi síðna",
        "pageinfo-category-subcats": "Fjöldi undirflokka",
        "pageinfo-category-files": "Fjöldi skráa",
-       "skinname-cologneblue": "Kölnarblátt",
        "skinname-monobook": "EinBók",
-       "skinname-modern": "Nútímalegt",
        "markaspatrolleddiff": "Merkja sem yfirfarið",
        "markaspatrolledtext": "Merkja þessa síðu sem yfirfarna",
        "markedaspatrolled": "Merkja sem yfirfarið",
index 450eb53..a94af0e 100644 (file)
@@ -71,7 +71,8 @@
                        "ZioNicco",
                        "לערי ריינהארט",
                        "PeppeAeco",
-                       "아라"
+                       "아라",
+                       "Lucas2"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
@@ -94,7 +95,7 @@
        "tog-enotifwatchlistpages": "Inviami una email quando viene modificata una pagina o un file presente tra gli osservati speciali",
        "tog-enotifusertalkpages": "Inviami una email quando viene modificata la mia pagina di discussione",
        "tog-enotifminoredits": "Inviami una email anche per le modifiche minori di pagine e file",
-       "tog-enotifrevealaddr": "Rivela il mio indirizzo e-mail nei messaggi di avviso",
+       "tog-enotifrevealaddr": "Mostra il mio indirizzo nelle e-mail di notifica",
        "tog-shownumberswatching": "Mostra il numero di utenti che hanno la pagina in osservazione",
        "tog-oldsig": "Firma attuale:",
        "tog-fancysig": "Tratta la firma come wikitesto (senza collegamento automatico)",
        "vector-view-view": "Leggi",
        "vector-view-viewsource": "Visualizza sorgente",
        "actions": "Azioni",
+       "vector-more-actions": "Altro",
        "namespaces": "Namespace",
        "variants": "Varianti",
        "navigation-heading": "Menu di navigazione",
        "delete": "Cancella",
        "deletethispage": "Cancella questa pagina",
        "undeletethispage": "Recupera questa pagina",
-       "undelete_short": "Recupera {{PLURAL:$1|una revisione|$1 revisioni}}",
+       "undelete_short": "Recupera {{PLURAL:$1|una versione|$1 versioni}}",
        "viewdeleted_short": "Vedi {{PLURAL:$1|una modifica cancellata|$1 modifiche cancellate}}",
        "protect": "Proteggi",
        "protect_change": "cambia",
        "badtitle": "Titolo non corretto",
        "badtitletext": "Il titolo della pagina richiesta è vuoto, errato oppure deriva da un errore nei collegamenti interlingua o interwiki.\nPotrebbe inoltre contenere uno o più caratteri il cui uso non è ammesso nei titoli.",
        "perfcached": "I dati che seguono sono estratti da una copia ''cache'' del database, e potrebbero non essere aggiornati. Un massimo di {{PLURAL:$1|un risultato è disponibile|$1 risultati sono disponibili}} in cache.",
-       "perfcachedts": "I dati che seguono sono estratti da una copia ''cache'' del database, il cui ultimo aggiornamento risale al $1. Un massimo di {{PLURAL:$4|un risultato è disponibile|$4 risultati sono disponibili}} in cache.",
+       "perfcachedts": "I dati che seguono sono estratti da una copia ''cache'' del database, il cui ultimo aggiornamento risale al $1. Un massimo di {{PLURAL:$4|un risultato è disponibile|$4 risultati è disponibile}} in cache.",
        "querypage-no-updates": "Gli aggiornamenti della pagina sono temporaneamente sospesi. I dati in essa contenuti non verranno aggiornati.",
        "viewsource": "Visualizza sorgente",
        "viewsource-title": "Visualizza sorgente di $1",
        "noname": "Il nome utente indicato non è valido.",
        "loginsuccesstitle": "Accesso effettuato",
        "loginsuccess": "'''Sei stato connesso al server di {{SITENAME}} con il nome utente di \"$1\".'''",
-       "nosuchuser": "Non è registrato alcun utente di nome \"$1\". I nomi utente sono sensibili alle maiuscole. Verificare il nome inserito o [[Special:UserLogin/signup|creare un nuovo accesso]].",
+       "nosuchuser": "Non è registrato alcun utente di nome \"$1\".\nI nomi utente sono sensibili alle maiuscole.\nVerificare il nome inserito o [[Special:UserLogin/signup|creare una nuova utenza]].",
        "nosuchusershort": "Non è registrato alcun utente di nome \"$1\". Verificare il nome inserito.",
        "nouserspecified": "È necessario specificare un nome utente.",
        "login-userblocked": "Questa utenza è bloccata. Non è possibile effettuare il login.",
        "anontalkpagetext": "----\n''Questa è la pagina di discussione di un utente anonimo, che non ha ancora creato un'utenza o comunque non la sta usando. Per identificarlo è quindi necessario usare il numero del suo indirizzo IP. Gli indirizzi IP possono però essere condivisi da più utenti. Se sei un utente anonimo e ritieni che i commenti presenti in questa pagina non si riferiscano a te, [[Special:UserLogin/signup|crea una nuova utenza]] o [[Special:UserLogin|entra con quella che già hai]] per evitare di essere confuso con altri utenti anonimi in futuro.''",
        "noarticletext": "In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati] oppure [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificare la pagina ora]</span>.",
        "noarticletext-nopermission": "In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati]</span>, ma non hai i permessi per creare questa pagina.",
-       "missing-revision": "La revisione #$1 della pagina \"{{FULLPAGENAME}}\" non esiste.\n\nQuesto si verifica solitamente seguendo un collegamento a una pagina cancellata, in una cronologia non aggiornata.\nI dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni].",
+       "missing-revision": "La versione #$1 della pagina \"{{FULLPAGENAME}}\" non esiste.\n\nQuesto si verifica solitamente seguendo un collegamento a una pagina cancellata, in una cronologia non aggiornata.\nI dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni].",
        "userpage-userdoesnotexist": "L'account \"<nowiki>$1</nowiki>\" non corrisponde a un utente registrato. Verificare che si intenda davvero creare o modificare questa pagina.",
        "userpage-userdoesnotexist-view": "L'account utente \"$1\" non è registrato.",
        "blocked-notice-logextract": "Questo utente è attualmente bloccato.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:",
        "yourtext": "Il tuo testo",
        "storedversion": "La versione memorizzata",
        "nonunicodebrowser": "'''Attenzione: si sta utilizzando un browser non compatibile con i caratteri Unicode. Per consentire la modifica delle pagine senza creare inconvenienti, i caratteri non ASCII vengono visualizzati nella casella di modifica sotto forma di codici esadecimali.'''",
-       "editingold": "'''Attenzione: si sta modificando una versione non aggiornata della pagina.<br />\nSe si sceglie di salvarla, tutti i cambiamenti apportati dopo questa revisione andranno perduti.'''",
+       "editingold": "'''ATTENZIONE: si sta modificando una versione non aggiornata della pagina. Salvandola così, tutti i cambiamenti apportati dopo questa versione saranno sovrascritti.'''",
        "yourdiff": "Differenze",
        "copyrightwarning": "Per favore tieni presente che tutti i contributi a {{SITENAME}} si considerano pubblicati nei termini d'uso della licenza $2 (vedi $1 per maggiori dettagli).\nSe non desideri che i tuoi testi possano essere modificati e ridistribuiti da chiunque senza alcuna limitazione, non inviarli qui.<br />\nInviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera.\n'''Non inviare materiale protetto da copyright senza autorizzazione!'''",
        "copyrightwarning2": "Per favore tieni presente che tutti i contributi a {{SITENAME}} possono essere modificati, stravolti o cancellati da altri contributori.\nSe non vuoi che i tuoi testi possano essere alterati, allora non inserirli.<br />\nInviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera (vedi $1 per maggiori dettagli).\n'''Non inviare materiale protetto da copyright senza autorizzazione!'''",
        "longpageerror": "'''Errore: il testo inviato è lungo {{PLURAL:$1|1|$1}} kilobyte, che è maggiore della dimensione massima consentita ({{PLURAL:$2|1|$2}} kilobyte).'''\nIl testo non può essere salvato.",
-       "readonlywarning": "'''Attenzione: il database è stato bloccato per manutenzione, è quindi impossibile salvare le modifiche in questo momento.'''\nPer non perderle, è possibile copiare quanto inserito finora nella casella di modifica, incollarlo in un programma di elaborazione testi e salvarlo in attesa dello sblocco del database.\n\nL'amministratore che ha bloccato il database ha fornito questa spiegazione: $1",
+       "readonlywarning": "<strong>ATTENZIONE</strong>: il database è bloccato per manutenzione, non è momentaneamente possibile salvare le modifiche effettuate.\nPer non perderle, copiale in un file di testo e salvalo in attesa dello sblocco del database.\n\nL'amministratore che impostato il blocco ha fornito questa spiegazione: $1.",
        "protectedpagewarning": "'''Attenzione: questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla.'''\nL'ultimo elemento del registro è riportato di seguito per informazione:",
        "semiprotectedpagewarning": "'''Nota:''' Questa pagina è stata bloccata in modo che solo gli utenti registrati possano modificarla.\nL'ultimo elemento del registro è riportato di seguito per informazione:",
        "cascadeprotectedwarning": "'''Attenzione:''' Questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla. Ciò avviene perché la pagina è inclusa {{PLURAL:$1|nella pagina indicata di seguito, che è stata protetta|nelle pagine indicate di seguito, che sono state protette}} selezionando la protezione \"ricorsiva\":",
        "node-count-exceeded-category": "Pagine dove viene superato il numero di nodi",
        "node-count-exceeded-category-desc": "Una categoria per pagine dove viene superato il numero di nodi.",
        "node-count-exceeded-warning": "Questa pagina ha superato il numero di nodi",
-       "expansion-depth-exceeded-category": "Pagine dove viene superata la profondità di espansione",
+       "expansion-depth-exceeded-category": "Pagine nelle quali è superata la profondità di espansione",
        "expansion-depth-exceeded-category-desc": "Questa è una categoria per pagine dove viene superata la profondità di espansione.",
        "expansion-depth-exceeded-warning": "Questa pagina ha superato la profondità di espansione",
        "parser-unstrip-loop-warning": "Rilevato ciclo di Unstrip",
        "currentrev": "Versione attuale",
        "currentrev-asof": "Versione attuale delle $1",
        "revisionasof": "Versione delle $1",
-       "revision-info": "Versione del $4 alle $5 di $2",
+       "revision-info": "Versione del $4 alle $5 di {{GENDER:$6|$2}}$7",
        "previousrevision": "← Versione meno recente",
        "nextrevision": "Versione più recente →",
        "currentrevisionlink": "Versione attuale",
        "rev-suppressed-text-unhide": "Questa versione della pagina è stata '''rimossa'''.\nConsultare il [{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} log di rimozione] per ulteriori dettagli.\nAgli amministratori è ancora consentito [$1 visualizzare questa versione] se necessario.",
        "rev-deleted-text-view": "Questa versione della pagina è stata '''cancellata'''.\nGli amministratori possono ancora visualizzarla; consultare il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.",
        "rev-suppressed-text-view": "Questa versione della pagina è stata '''rimossa'''.\nGli amministratori possono ancora visualizzarla; consultare il [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log di rimozione] per ulteriori dettagli.",
-       "rev-deleted-no-diff": "Non è possibile visualizzare questo confronto tra versioni perché una delle revisioni è stata '''cancellata'''.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.",
-       "rev-suppressed-no-diff": "Non è possibile visualizzare questo confronto tra versioni perché una delle revisioni è stata '''cancellata'''.",
-       "rev-deleted-unhide-diff": "Una delle revisioni di questo confronto tra versioni è stata '''cancellata'''.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.\nAgli amministratori è ancora consentito [$1 visualizzare il confronto] se necessario.",
-       "rev-suppressed-unhide-diff": "Una delle revisioni di questo confronto di versioni è stata '''rimossa'''.\nPotrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log delle rimozioni].\nIn quanto amministratore puoi ancora [$1 visualizzare questo confronto di versioni], se vuoi procedere.",
-       "rev-deleted-diff-view": "Una delle revisioni di questo confronto di versioni è stata '''cancellata'''.\nIn quanto amministratore, puoi visualizzare questo confronto di versioni; potrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni].",
-       "rev-suppressed-diff-view": "Una delle revisioni di questo confronto di versioni è stata '''rimossa'''.\nIn quanto amministratore puoi visualizzare questo confronto di versioni; potrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log delle rimozioni].",
+       "rev-deleted-no-diff": "Non è possibile visualizzare questo confronto tra versioni perché una delle versioni è stata '''cancellata'''.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.",
+       "rev-suppressed-no-diff": "Non è possibile visualizzare questo confronto tra versioni perché una delle versioni è stata '''cancellata'''.",
+       "rev-deleted-unhide-diff": "Una delle versioni di questo confronto tra versioni è stata '''cancellata'''.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.\nAgli amministratori è ancora consentito [$1 visualizzare il confronto] se necessario.",
+       "rev-suppressed-unhide-diff": "Una delle versioni di questo confronto di versioni è stata '''rimossa'''.\nPotrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log delle rimozioni].\nIn quanto amministratore puoi ancora [$1 visualizzare questo confronto di versioni], se vuoi procedere.",
+       "rev-deleted-diff-view": "Una delle versioni di questo confronto di versioni è stata '''cancellata'''.\nIn quanto amministratore, puoi visualizzare questo confronto di versioni; potrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni].",
+       "rev-suppressed-diff-view": "Una delle versioni di questo confronto di versioni è stata '''rimossa'''.\nIn quanto amministratore puoi visualizzare questo confronto di versioni; potrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log delle rimozioni].",
        "rev-delundel": "mostra/nascondi",
        "rev-showdeleted": "mostra",
        "revisiondelete": "Cancella o ripristina versioni",
        "revdelete-selected-text": "{{PLURAL:$1|Versione selezionata|Versioni selezionate}} di [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Versione selezionata|Versioni selezionate}} del file di [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Evento del registro selezionato|Eventi del registro selezionati}}:",
-       "revdelete-text-text": "Le versioni cancellate appariranno ancora nella cronologia della pagina, ma parti del loro contenuto sarà inaccessibile al pubblico.",
+       "revdelete-text-text": "Le versioni cancellate appariranno ancora nella cronologia della pagina, ma parte del loro contenuto sarà inaccessibile al pubblico.",
        "revdelete-text-file": "Le versioni di file cancellati appariranno ancora nella cronologia del file, ma parti del loro contenuto sarà inaccessibile al pubblico.",
        "logdelete-text": "Gli eventi cancellati appariranno ancora nei registri, ma parti del loro contenuto sarà inaccessibile al pubblico.",
        "revdelete-text-others": "Altri amministratori di {{SITENAME}} saranno ancora in grado di accedere ai contenuti nascosti e potranno ripristinarli nuovamente attraverso questa stessa interfaccia, se non sono state impostate restrizioni aggiuntive.",
        "revdelete-radio-set": "Nascondi",
        "revdelete-radio-unset": "Mostra",
        "revdelete-suppress": "Nascondi le informazioni anche agli amministratori",
-       "revdelete-unsuppress": "Elimina le limitazioni sulle revisioni ripristinate",
+       "revdelete-unsuppress": "Elimina le limitazioni sulle versioni ripristinate",
        "revdelete-log": "Motivo:",
-       "revdelete-submit": "Applica {{PLURAL:$1|alla revisione selezionata|alle revisioni selezionate}}",
-       "revdelete-success": "'''Visibilità della revisione aggiornata correttamente.'''",
+       "revdelete-submit": "Applica {{PLURAL:$1|alla versione selezionata|alle versioni selezionate}}",
+       "revdelete-success": "'''Visibilità della versione aggiornata correttamente.'''",
        "revdelete-failure": "'''La visibilità della versione non può essere aggiornata:'''\n$1",
        "logdelete-success": "'''Visibilità dell'evento impostata correttamente.'''",
        "logdelete-failure": "'''La visibilità dell'evento non può essere impostata:'''\n$1",
        "revdel-restore": "cambia la visibilità",
        "pagehist": "Cronologia della pagina",
        "deletedhist": "Cronologia cancellata",
-       "revdelete-hide-current": "Impossibile nascondere l'oggetto con data $1 $2 in quanto è la revisione attuale.",
+       "revdelete-hide-current": "Impossibile nascondere l'oggetto con data $1 $2 in quanto è la versione attuale.",
        "revdelete-show-no-access": "Impossibile mostrare l'oggetto con data $1 $2 in quanto è stato identificato come \"riservato\" e non si dispone del relativo accesso.",
        "revdelete-modify-no-access": "Impossibile modificare l'oggetto con data $1 $2 in quanto è stato identificato come \"riservato\" e non si dispone del relativo accesso.",
        "revdelete-modify-missing": "Impossibile modificare l'oggetto con ID $1 in quanto non è presente nel database.",
        "suppressionlog": "Soppressioni",
        "suppressionlogtext": "Di seguito sono elencate le cancellazioni e i blocchi con del contenuto nascosto agli amministratori.\nVedi l'[[Special:BlockList|elenco dei blocchi]] per l'elenco dei bandi e dei blocchi attivi al momento.",
        "mergehistory": "Unione cronologie",
-       "mergehistory-header": "Questa pagina consente di unire le revisioni appartenenti alla cronologia di una pagina (detta pagina di origine) alla cronologia di una pagina più recente.\nÈ necessario accertarsi che la continuità storica della pagina non venga alterata.",
+       "mergehistory-header": "Questa pagina consente di unire le versioni appartenenti alla cronologia di una pagina (detta pagina di origine) alla cronologia di una pagina più recente.\nÈ necessario accertarsi che la continuità storica della pagina non venga alterata.",
        "mergehistory-box": "Unisci la cronologia di due pagine:",
        "mergehistory-from": "Pagina di origine:",
        "mergehistory-into": "Pagina di destinazione:",
        "mergehistory-list": "Cronologia cui è applicabile l'unione",
-       "mergehistory-merge": "È possibile unire le revisioni di [[:$1]] indicate di seguito alla cronologia di [[:$2]]. Usare la colonna con i pulsanti di opzione per unire tutte le revisioni fino alla data e ora indicate. Si noti che se vengono usati i pulsanti di navigazione, la colonna con i pulsanti di opzione viene azzerata.",
+       "mergehistory-merge": "È possibile unire le versioni di [[:$1]] indicate di seguito alla cronologia di [[:$2]]. Usare la colonna con i pulsanti di opzione per unire tutte le versioni fino alla data e ora indicate. Si noti che se vengono usati i pulsanti di navigazione, la colonna con i pulsanti di opzione viene azzerata.",
        "mergehistory-go": "Mostra le modifiche che possono essere unite",
-       "mergehistory-submit": "Unisci le revisioni",
-       "mergehistory-empty": "Nessuna revisione da unire.",
-       "mergehistory-success": "{{PLURAL:$3|Una revisione di [[:$1]] è stata unita|$3 revisioni di [[:$1]] sono state unite}} alla cronologia di [[:$2]].",
+       "mergehistory-submit": "Unisci le versioni",
+       "mergehistory-empty": "Nessuna versione da unire.",
+       "mergehistory-success": "{{PLURAL:$3|Una versione di [[:$1]] è stata unita|$3 versioni di [[:$1]] sono state unite}} alla cronologia di [[:$2]].",
        "mergehistory-fail": "Impossibile unire le cronologie. Verificare la pagina e i parametri temporali.",
        "mergehistory-no-source": "La pagina di origine $1 non esiste.",
        "mergehistory-no-destination": "La pagina di destinazione $1 non esiste.",
        "mergehistory-same-destination": "Le pagine di origine e di destinazione non possono coincidere",
        "mergehistory-reason": "Motivo:",
        "mergelog": "Unioni",
-       "pagemerge-logentry": "ha unito [[$1]] a [[$2]] (revisioni fino a $3)",
+       "pagemerge-logentry": "ha unito [[$1]] a [[$2]] (versioni fino a $3)",
        "revertmerge": "Annulla unioni",
        "mergelogpagetext": "Di seguito sono elencate le ultime operazioni di unione della cronologia di due pagine.",
        "history-title": "$1: cronologia delle modifiche",
        "searchmenu-exists": "'''Sul sito esiste una pagina il cui nome è \"[[:$1]]\"'''",
        "searchmenu-new": "<strong>Crea la pagina \"[[:$1]]\" su questo wiki!</strong> {{PLURAL:$2|0=|Vedi anche la pagina trovata con la tua ricerca|Vedi anche i risultati della ricerca}}",
        "searchprofile-articles": "Pagine di contenuti",
-       "searchprofile-project": "Pagine di aiuto e relative al progetto",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tutto",
        "searchprofile-advanced": "Avanzata",
        "searchprofile-articles-tooltip": "Cerca in $1",
-       "searchprofile-project-tooltip": "Cerca in $1",
        "searchprofile-images-tooltip": "Cerca file",
        "searchprofile-everything-tooltip": "Cerca ovunque (incluse le pagine di discussione)",
        "searchprofile-advanced-tooltip": "Cerca nei namespace personalizzati",
        "search-interwiki-default": "Risultati da $1:",
        "search-interwiki-more": "(altro)",
        "search-relatedarticle": "Risultati correlati",
-       "searcheverything-enable": "Cerca in tutti i namespace",
        "searchrelated": "correlati",
        "searchall": "tutti",
        "showingresults": "Di seguito {{PLURAL:$1|viene presentato al massimo '''1''' risultato|vengono presentati al massimo '''$1''' risultati}} a partire dal numero '''$2'''.",
        "powersearch-togglelabel": "Seleziona:",
        "powersearch-toggleall": "Tutti",
        "powersearch-togglenone": "Nessuno",
+       "powersearch-remember": "Ricorda la selezione per le prossime ricerche",
        "search-external": "Ricerca esterna",
        "searchdisabled": "La ricerca interna di {{SITENAME}} non è attiva; nel frattempo si può provare ad usare un motore di ricerca esterno come Google. (Si noti però che i contenuti di {{SITENAME}} presenti in tali motori potrebbero non essere aggiornati.)",
        "search-error": "Si è verificato un errore durante la ricerca: $1",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Oceano Indiano",
        "timezoneregion-pacific": "Oceano Pacifico",
-       "allowemail": "Abilita la ricezione di messaggi e-mail da altri utenti",
+       "allowemail": "Abilita la ricezione di messaggi email da altri utenti",
        "prefs-searchoptions": "Ricerca",
        "prefs-namespaces": "Namespace",
-       "defaultns": "Altrimenti, cerca in questi namespace:",
        "default": "predefinito",
        "prefs-files": "File",
        "prefs-custom-css": "CSS personalizzato",
        "right-delete": "Cancella pagine",
        "right-bigdelete": "Cancella pagine con cronologie lunghe",
        "right-deletelogentry": "Cancella e ripristina voci di registro specifiche",
-       "right-deleterevision": "Nasconde revisioni specifiche delle pagine",
-       "right-deletedhistory": "Visualizza le revisioni della cronologia cancellate senza il testo associato",
-       "right-deletedtext": "Visualizza testo cancellato e modifiche fra revisioni cancellate",
+       "right-deleterevision": "Nasconde versioni specifiche delle pagine",
+       "right-deletedhistory": "Visualizza le versioni della cronologia cancellate senza il testo associato",
+       "right-deletedtext": "Visualizza testo cancellato e modifiche fra versioni cancellate",
        "right-browsearchive": "Ricerca nelle pagine cancellate",
        "right-undelete": "Recupera una pagina",
-       "right-suppressrevision": "Rivede e recupera revisioni nascoste agli amministratori",
+       "right-suppressrevision": "Rivede e recupera versioni nascoste agli amministratori",
        "right-suppressionlog": "Visualizza i registri privati",
        "right-block": "Blocca le modifiche da parte di altri utenti",
        "right-blockemail": "Impedisce a un utente di inviare email",
        "recentchanges-summary": "Questa pagina presenta le modifiche più recenti ai contenuti del sito.",
        "recentchanges-noresult": "Nessuna modifica durante il periodo inserito che soddisfa questi criteri.",
        "recentchanges-feed-description": "Questo feed riporta le modifiche più recenti ai contenuti del sito.",
-       "recentchanges-label-newpage": "Questa modifica ha creato una nuova pagina",
-       "recentchanges-label-minor": "Questa è una modifica minore",
-       "recentchanges-label-bot": "Questa modifica è stata effettuata da un bot",
-       "recentchanges-label-unpatrolled": "Questa modifica non è stata ancora verificata",
-       "recentchanges-label-plusminus": "La dimensione della pagina è cambiata di questo numero di byte",
+       "recentchanges-label-newpage": "Creazione di una nuova pagina",
+       "recentchanges-label-minor": "Modifica minore",
+       "recentchanges-label-bot": "Modifica effettuata da un bot",
+       "recentchanges-label-unpatrolled": "Modifica non ancora verificata",
+       "recentchanges-label-plusminus": "Variazione della pagina in numero di byte",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "(vedi anche [[Special:NewPages|l'elenco delle nuove pagine]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vedi [[Special:NewPages|le nuove pagine]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Di seguito sono elencate le modifiche apportate a partire da <strong>$2</strong> (mostrate fino a <strong>$1</strong>).",
        "rclistfrom": "Mostra le modifiche apportate a partire da $3 $2",
        "filehist-dimensions": "Dimensioni",
        "filehist-filesize": "Dimensione del file",
        "filehist-comment": "Commento",
-       "imagelinks": "Uso del file",
+       "imagelinks": "Utilizzo del file",
        "linkstoimage": "{{PLURAL:$1|La seguente pagina contiene|Le seguenti $1 pagine contengono}} collegamenti al file:",
        "linkstoimage-more": "Più di $1 {{PLURAL:$1|pagina punta|pagine puntano}} a questo file.\nDi seguito sono elencate solo {{PLURAL:$1|la prima pagina che punta|le prime $1 pagine che puntano}} a questo file.\nÈ disponibile un [[Special:WhatLinksHere/$2|elenco completo]].",
        "nolinkstoimage": "Nessuna pagina contiene collegamenti al file.",
        "withoutinterwiki-summary": "Le pagine indicate di seguito sono prive di collegamenti alle versioni in altre lingue:",
        "withoutinterwiki-legend": "Prefisso",
        "withoutinterwiki-submit": "Mostra",
-       "fewestrevisions": "Pagine con meno revisioni",
+       "fewestrevisions": "Pagine con meno versioni",
        "nbytes": "$1 {{PLURAL:$1|byte}}",
        "ncategories": "$1 {{PLURAL:$1|categoria|categorie}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki}}",
        "nlinks": "$1 {{PLURAL:$1|collegamento|collegamenti}}",
        "nmembers": "$1 {{PLURAL:$1|elemento|elementi}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|elemento|elementi}}",
-       "nrevisions": "$1 {{PLURAL:$1|revisione|revisioni}}",
+       "nrevisions": "$1 {{PLURAL:$1|versione|versioni}}",
        "nviews": "$1 {{PLURAL:$1|visita|visite}}",
        "nimagelinks": "Utilizzato su $1 {{PLURAL:$1|pagina|pagine}}",
        "ntransclusions": "usato in $1 {{PLURAL:$1|pagina|pagine}}",
        "specialpage-empty": "Questa pagina speciale è attualmente vuota.",
        "lonelypages": "Pagine orfane",
-       "lonelypagestext": "Le pagine indicate di seguito sono prive di collegamenti provenienti da altre pagine di {{SITENAME}} e non sono incluse in nessuna pagina del sito.",
+       "lonelypagestext": "Le pagine indicate di seguito sono prive di collegamenti provenienti da altre pagine di {{SITENAME}} e non sono incluse in alcuna pagina del sito.",
        "uncategorizedpages": "Pagine prive di categorie",
        "uncategorizedcategories": "Categorie prive di categorie",
        "uncategorizedimages": "File privi di categorie",
        "wantedtemplates": "Template richiesti",
        "mostlinked": "Pagine più richiamate",
        "mostlinkedcategories": "Categorie più richiamate",
-       "mostlinkedtemplates": "Template più utilizzati",
+       "mostlinkedtemplates": "Pagine più inlcuse",
        "mostcategories": "Pagine con più categorie",
        "mostimages": "File più richiamati",
        "mostinterwikis": "Pagine con più interwiki",
        "move": "Sposta",
        "movethispage": "Sposta questa pagina",
        "unusedimagestext": "In questo elenco sono presenti i file caricati e non usati nel sito.\nPotrebbero essere presenti immagini che sono usate da altri siti con un collegamento diretto.",
-       "unusedcategoriestext": "Le pagine delle categorie indicate di seguito sono state create ma non contengono nessuna pagina né sottocategoria.",
+       "unusedcategoriestext": "Le seguenti pagine testuali esistono, sebbene le categorie corrispondenti siano vuote.",
        "notargettitle": "Dati mancanti",
        "notargettext": "Non è stata indicata una pagina o un utente in relazione al quale eseguire l'operazione richiesta.",
        "nopagetitle": "La pagina di destinazione non esiste",
        "trackingcategories-disabled": "La categoria è disabilitata",
        "mailnologin": "Nessun indirizzo cui inviare il messaggio",
        "mailnologintext": "Per inviare messaggi e-mail ad altri utenti è necessario [[Special:UserLogin|accedere al sito]] e aver registrato un indirizzo valido nelle proprie [[Special:Preferences|preferenze]].",
-       "emailuser": "Scrivi all'utente",
+       "emailuser": "Invia una email all'utente",
        "emailuser-title-target": "Invia una email a questo {{GENDER:$1|utente}}",
        "emailuser-title-notarget": "Invia una email a un utente",
-       "emailpage": "Invia un messaggio email all'utente",
+       "emailpage": "Invia una email all'utente",
        "emailpagetext": "Usare il modulo sottostante per inviare un messaggio e-mail all'{{GENDER:$1|utente}} indicato. L'indirizzo specificato nelle [[Special:Preferences|preferenze]] del mittente apparirà nel campo \"Da:\" del messaggio per consentire al destinatario di rispondere direttamente.",
        "defemailsubject": "Messaggio da {{SITENAME}} dall'utente \"$1\"",
        "usermaildisabled": "e-mail utente disabilitata",
        "watchnologin": "Accesso non effettuato",
        "addwatch": "Aggiungi agli osservati speciali",
        "addedwatchtext": "La pagina \"[[:$1]]\" è stata aggiunta alla propria [[Special:Watchlist|lista degli osservati speciali]].\nD'ora in poi, le modifiche apportate alla pagina e alla sua discussione verranno elencate in quella sede.",
+       "addedwatchtext-short": "La pagina \"$1\" è stata aggiunta alla propria lista degli osservati speciali.",
        "removewatch": "Rimuovi dagli osservati speciali",
-       "removedwatchtext": "La pagina \"[[:$1]]\" è stata eliminata dalla [[Special:Watchlist|lista degli osservati speciali]].",
+       "removedwatchtext": "La pagina \"[[:$1]]\" è stata rimossa dalla propria [[Special:Watchlist|lista degli osservati speciali]].",
+       "removedwatchtext-short": "La pagina \"$1\" è stata rimossa dalla propria lista degli osservati speciali.",
        "watch": "Segui",
        "watchthispage": "Segui questa pagina",
        "unwatch": "Non seguire",
        "unwatchthispage": "Smetti di seguire",
        "notanarticle": "Questa pagina non è una voce",
-       "notvisiblerev": "La revisione è stata cancellata",
+       "notvisiblerev": "La versione è stata cancellata",
        "watchlist-details": "La lista degli osservati speciali contiene {{PLURAL:$1|una pagina (e la rispettiva pagina di discussione)|$1 pagine (e le rispettive pagine di discussione)}}.",
        "wlheader-enotif": "La notifica via email è attiva.",
        "wlheader-showupdated": "Le pagine che sono state modificate dopo l'ultima visita sono evidenziate in '''grassetto'''.",
        "exbeforeblank": "Il contenuto prima dello svuotamento era: '$1'",
        "delete-confirm": "Cancella \"$1\"",
        "delete-legend": "Cancella",
-       "historywarning": "'''Attenzione:''' La pagina che stai per cancellare ha una cronologia con approssimativamente $1 {{PLURAL:$1|revisione|revisioni}}:",
+       "historywarning": "'''Attenzione:''' La pagina che stai per cancellare ha una cronologia con approssimativamente $1 {{PLURAL:$1|versione|versioni}}:",
        "confirmdeletetext": "Stai per cancellare una pagina con tutta la sua cronologia. Per cortesia, conferma che è tua intenzione procedere a tale cancellazione, che hai piena consapevolezza delle conseguenze della tua azione e che essa è conforme alle linee guida stabilite in [[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "Azione completata",
        "actionfailed": "Azione fallita",
        "deletereasonotherlist": "Altra motivazione",
        "deletereason-dropdown": "* Motivazioni più comuni per la cancellazione\n** Spam\n** Vandalismo\n** Violazione di copyright\n** Richiesta dell'autore\n** Redirect rotto",
        "delete-edit-reasonlist": "Modifica i motivi di cancellazione",
-       "delete-toobig": "La cronologia di questa pagina è molto lunga (oltre $1 {{PLURAL:$1|revisione|revisioni}}). La sua cancellazione è stata limitata per evitare di creare accidentalmente dei problemi di funzionamento al database di {{SITENAME}}.",
-       "delete-warning-toobig": "La cronologia di questa pagina è molto lunga (oltre $1 {{PLURAL:$1|revisione|revisioni}}). La sua cancellazione può creare dei problemi di funzionamento al database di {{SITENAME}}; procedere con cautela.",
+       "delete-toobig": "La cronologia di questa pagina è molto lunga (oltre $1 {{PLURAL:$1|versione|versioni}}). La sua cancellazione è stata limitata per evitare di creare accidentalmente dei problemi di funzionamento al database di {{SITENAME}}.",
+       "delete-warning-toobig": "La cronologia di questa pagina è molto lunga (oltre $1 {{PLURAL:$1|versione|versioni}}). La sua cancellazione può creare dei problemi di funzionamento al database di {{SITENAME}}; procedere con cautela.",
        "deleting-backlinks-warning": "'''Attenzione:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|altre pagine]] contengono collegamenti o inclusioni alla pagina che stai per cancellare.",
        "rollback": "Annulla le modifiche",
        "rollback_short": "Rollback",
        "restriction-level-all": "tutti i livelli",
        "undelete": "Visualizza pagine cancellate",
        "undeletepage": "Visualizza e recupera le pagine cancellate",
-       "undeletepagetitle": "'''Quanto segue è composto da revisioni cancellate di [[:$1|$1]]'''.",
+       "undeletepagetitle": "'''Quanto segue è composto da versioni cancellate di [[:$1|$1]]'''.",
        "viewdeletedpage": "Visualizza le pagine cancellate",
        "undeletepagetext": "{{PLURAL:$1|La pagina indicata di seguito è stata cancellata, ma è ancora in archivio e pertanto può essere recuperata|Le pagine indicate di seguito sono state cancellate, ma sono ancora in archivio e pertanto possono essere recuperate}}. L'archivio può essere svuotato periodicamente.",
        "undelete-fieldset-title": "Ripristina versioni",
-       "undeleteextrahelp": "Per recuperare l'intera cronologia della pagina, lasciare tutte le caselle deselezionate e fare clic su '''''{{int:undeletebtn}}'''''.\nPer effettuare un ripristino selettivo, selezionare le caselle corrispondenti alle revisioni da ripristinare e fare clic su '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "{{PLURAL:$1|Una revisione|$1 revisioni}} in archivio",
-       "undeletehistory": "Recuperando questa pagina, tutte le sue versioni verranno ripristinate nella relativa cronologia.\nSe dopo la cancellazione è stata creata una nuova pagina con lo stesso titolo, le revisioni recuperate saranno inserite nella cronologia precedente.",
-       "undeleterevdel": "Il ripristino non verrà effettuato se determina la cancellazione parziale della versione attuale della pagina o del file interessato. In tal caso, è necessario rimuovere il segno di spunta o l'oscuramento dalle revisioni cancellate più recenti.",
-       "undeletehistorynoadmin": "Questa pagina è stata cancellata.\nIl motivo della cancellazione è mostrato qui sotto, assieme ai dettagli dell'utente che ha modificato questa pagina prima della cancellazione.\nIl testo contenuto nelle revisioni cancellate è disponibile solo agli amministratori.",
-       "undelete-revision": "Revisione cancellata della pagina $1, inserita il $4 alle $5 da $3:",
-       "undeleterevision-missing": "Revisione errata o mancante. Il collegamento è errato oppure la revisione è stata già ripristinata o eliminata dall'archivio.",
-       "undelete-nodiff": "Non è stata trovata nessuna revisione precedente.",
+       "undeleteextrahelp": "Per recuperare l'intera cronologia della pagina, lasciare tutte le caselle deselezionate e fare clic su '''''{{int:undeletebtn}}'''''.\nPer effettuare un ripristino selettivo, selezionare le caselle corrispondenti alle versioni da ripristinare e fare clic su '''''{{int:undeletebtn}}'''''.",
+       "undeleterevisions": "{{PLURAL:$1|Una versione|$1 versioni}} in archivio",
+       "undeletehistory": "Recuperando questa pagina, tutte le sue versioni saranno ripristinate nella relativa cronologia.\nSe dopo la cancellazione è stata creata una nuova pagina con lo stesso titolo, le versioni recuperate saranno inserite nella cronologia precedente.",
+       "undeleterevdel": "Il ripristino non verrà effettuato se determina la cancellazione parziale della versione attuale della pagina o del file interessato. In tal caso, è necessario rimuovere il segno di spunta o l'oscuramento dalle versioni cancellate più recenti.",
+       "undeletehistorynoadmin": "Questa pagina è stata cancellata.\nIl motivo della cancellazione è mostrato qui sotto, assieme ai dettagli dell'utente che ha modificato questa pagina prima della cancellazione.\nIl testo contenuto nelle versioni cancellate è disponibile solo agli amministratori.",
+       "undelete-revision": "Versione cancellata della pagina $1, inserita il $4 alle $5 da $3:",
+       "undeleterevision-missing": "Versione errata o mancante. Il collegamento è errato oppure la versione è stata già ripristinata o eliminata dall'archivio.",
+       "undelete-nodiff": "Non è stata trovata nessuna versione precedente.",
        "undeletebtn": "Ripristina",
        "undeletelink": "visualizza/ripristina",
        "undeleteviewlink": "visualizza",
        "undeleteinvert": "Inverti selezione",
        "undeletecomment": "Motivo:",
-       "undeletedrevisions": "{{PLURAL:$1|Una revisione recuperata|$1 revisioni recuperate}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|Una revisione|$1 revisioni}} e $2 file recuperati",
+       "undeletedrevisions": "{{PLURAL:$1|Una versione recuperata|$1 versioni recuperate}}",
+       "undeletedrevisions-files": "{{PLURAL:$1|Una versione|$1 versioni}} e $2 file recuperati",
        "undeletedfiles": "{{PLURAL:$1|Un file recuperato|$1 file recuperati}}",
        "cannotundelete": "Ripristino non riuscito:\n$1",
        "undeletedpage": "'''La pagina $1 è stata recuperata'''\n\nConsultare il [[Special:Log/delete|log delle cancellazioni]] per vedere le cancellazioni e i recuperi più recenti.",
        "undelete-search-prefix": "Mostra le pagine il cui titolo inizia con:",
        "undelete-search-submit": "Cerca",
        "undelete-no-results": "Nessuna pagina corrispondente nell'archivio delle cancellazioni.",
-       "undelete-filename-mismatch": "Impossibile annullare la cancellazione della revisione del file con timestamp $1: nome file non corrispondente.",
-       "undelete-bad-store-key": "Impossibile annullare la cancellazione della revisione del file con timestamp $1: file non disponibile prima della cancellazione.",
+       "undelete-filename-mismatch": "Impossibile annullare la cancellazione della versione del file con timestamp $1: nome file non corrispondente.",
+       "undelete-bad-store-key": "Impossibile annullare la cancellazione della versione del file con timestamp $1: file non disponibile prima della cancellazione.",
        "undelete-cleanup-error": "Errore nella cancellazione del file di archivio non utilizzato \"$1\".",
        "undelete-missing-filearchive": "Impossibile ripristinare l'ID $1 dell'archivio file in quanto non è presente nel database. Potrebbe essere stato già ripristinato.",
        "undelete-error": "Errore nel ripristino della pagina",
        "sp-contributions-talk": "discussione",
        "sp-contributions-userrights": "gestione dei permessi",
        "sp-contributions-blocked-notice": "Questo utente è attualmente bloccato. L'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:",
-       "sp-contributions-blocked-notice-anon": "Questo indirizzo IP è attualmente bloccato. Di seguito è riportato l'ultimo elemento del registro dei blocchi:",
+       "sp-contributions-blocked-notice-anon": "Questo indirizzo IP è attualmente bloccato.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:",
        "sp-contributions-search": "Ricerca contributi",
        "sp-contributions-username": "Indirizzo IP o nome utente:",
-       "sp-contributions-toponly": "Mostra solo i contributi che sono le ultime revisioni per la pagina",
+       "sp-contributions-toponly": "Mostra solo i contributi che sono le ultime versioni per la pagina",
        "sp-contributions-newonly": "Visualizza solo le modifiche che sono creazioni di pagina",
        "sp-contributions-submit": "Ricerca",
        "whatlinkshere": "Puntano qui",
        "nolinkshere-ns": "Non vi sono pagine che puntano a '''[[:$1]]''' nel namespace selezionato.",
        "isredirect": "redirect",
        "istemplate": "inclusione",
-       "isimage": "link verso file",
+       "isimage": "collegamento a file",
        "whatlinkshere-prev": "{{PLURAL:$1|precedente|precedenti $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|successivo|successivi $1}}",
        "whatlinkshere-links": "← collegamenti",
        "whatlinkshere-hideredirs": "$1 redirect",
        "whatlinkshere-hidetrans": "$1 inclusioni",
-       "whatlinkshere-hidelinks": "$1 link",
+       "whatlinkshere-hidelinks": "$1 collegamenti",
        "whatlinkshere-hideimages": "$1 link da file",
        "whatlinkshere-filters": "Filtri",
        "autoblockid": "Autoblocco #$1",
        "unblock": "Sblocca utente",
        "blockip": "Blocco utente",
        "blockip-legend": "Blocca l'utente",
-       "blockiptext": "Usare il modulo sottostante per bloccare l'accesso in scrittura a uno specifico indirizzo IP o un utente registrato.\nIl blocco dev'essere operato per prevenire atti di vandalismo e in stretta osservanza della [[{{MediaWiki:Policy-url}}|policy di {{SITENAME}}]].\nIndicare il motivo specifico per il quale si procede al blocco (per esempio, citando i titoli di eventuali pagine oggetto di vandalismo).",
+       "blockiptext": "Usare il modulo sottostante per bloccare l'accesso in scrittura a uno specifico indirizzo IP o a un utente registrato.\nIl blocco dev'essere operato per prevenire atti di vandalismo e in stretta osservanza delle [[{{MediaWiki:Policy-url}}|regole di {{SITENAME}}]].\nIndicare il motivo specifico per il quale si procede al blocco (per esempio, citando i titoli di eventuali pagine oggetto di vandalismo).",
        "ipaddressorusername": "Indirizzo IP o nome utente:",
        "ipbexpiry": "Scadenza del blocco:",
        "ipbreason": "Motivo:",
        "unblocked-id": "Il blocco $1 è stato rimosso",
        "blocklist": "Utenti bloccati",
        "ipblocklist": "Utenti bloccati",
-       "ipblocklist-legend": "Trova un utente bloccato",
+       "ipblocklist-legend": "Cerca un utente bloccato",
        "blocklist-userblocks": "Nascondi i blocchi degli utenti registrati",
        "blocklist-tempblocks": "Nascondi i blocchi temporanei",
        "blocklist-addressblocks": "Nascondi i blocchi di un solo IP",
        "ip_range_toolarge": "Non è possibile bloccare range superiori al /$1",
        "proxyblocker": "Blocco dei proxy aperti",
        "proxyblockreason": "Questo indirizzo IP è stato bloccato perché risulta essere un proxy aperto. Si prega di contattare il proprio fornitore di accesso a Internet o il supporto tecnico e informarli di questo grave problema di sicurezza.",
-       "sorbsreason": "Questo indirizzo IP è elencato come proxy aperto nella blacklist DNSBL utilizzata da {{SITENAME}}.",
-       "sorbs_create_account_reason": "Non è possibile creare nuovi accessi da questo indirizzo IP perché è elencato come proxy aperto nella blacklist DNSBL utilizzata da {{SITENAME}}.",
+       "sorbsreason": "Questo indirizzo IP è elencato come proxy aperto nella lista DNSBL utilizzata da {{SITENAME}}.",
+       "sorbs_create_account_reason": "Non è possibile creare nuove utenze con questo indirizzo IP perché è elencato come proxy aperto nella lista DNSBL utilizzata da {{SITENAME}}.",
        "xffblockreason": "Un indirizzo IP presente nell'intestazione X-Forwarded-For, tuo o del server proxy che stai utilizzando, è stato bloccato. La motivazione originale del blocco è: $1",
        "cant-see-hidden-user": "L'utente che si sta tentando di bloccare è stato già bloccato e nascosto. Poiché non hai il permesso \"hideuser\", non è possibile visualizzare o modificare il blocco dell'utente.",
        "ipbblocked": "Non puoi bloccare o sbloccare altri utenti, perché tu stesso sei bloccato",
        "delete_and_move_text": "==Cancellazione richiesta==\n\nLa pagina specificata come destinazione \"[[:$1]]\" esiste già. Vuoi cancellarla per proseguire con lo spostamento?",
        "delete_and_move_confirm": "Sì, sovrascrivi la pagina esistente",
        "delete_and_move_reason": "Cancellata per rendere possibile lo spostamento da \"[[$1]]\"",
-       "selfmove": "Il nuovo titolo è uguale al vecchio; impossibile spostare la pagina su se stessa.",
+       "selfmove": "Il titolo di destinazione è uguale a quello di provenienza, non è possibile spostare una pagina su se stessa.",
        "immobile-source-namespace": "Non è possibile spostare pagine del namespace \"$1\"",
        "immobile-target-namespace": "Non è possibile spostare pagine nel namespace \"$1\"",
        "immobile-target-namespace-iw": "Un collegamento interwiki non è una destinazione valida per spostare la pagina.",
        "export": "Esporta pagine",
        "exporttext": "È possibile esportare il testo e la cronologia delle modifiche di una pagina o di un gruppo di pagine in formato XML per importarle in altri siti che utilizzano il software MediaWiki, attraverso la [[Special:Import|pagina delle importazioni]].\n\nPer esportare le pagine indicare i titoli nella casella di testo sottostante, uno per riga, e specificare se si desidera ottenere l'ultima versione e tutte le versioni precedenti, con i dati della cronologia della pagina, oppure soltanto l'ultima versione e i dati corrispondenti all'ultima modifica.\n\nIn quest'ultimo caso si può anche utilizzare un collegamento, ad esempio [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] per esportare \"[[{{MediaWiki:Mainpage}}]]\".",
        "exportall": "Esporta tutte le pagine",
-       "exportcuronly": "Includi solo la revisione attuale, non l'intera cronologia",
+       "exportcuronly": "Includi solo la versione attuale, non l'intera cronologia",
        "exportnohistory": "----\n'''Nota:''' l'esportazione dell'intera cronologia delle pagine attraverso questa interfaccia è stata disattivata per motivi legati alle prestazioni del sistema.",
        "exportlistauthors": "Includi l'elenco completo dei contributori per ogni pagina",
        "export-submit": "Esporta",
        "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.",
        "importstart": "Importazione delle pagine in corso...",
-       "import-revision-count": "{{PLURAL:$1|una revisione importata|$1 revisioni importate}}",
+       "import-revision-count": "{{PLURAL:$1|una versione importata|$1 versioni importate}}",
        "importnopages": "Nessuna pagina da importare.",
        "imported-log-entries": "Importat{{PLURAL:$1|o|i}} $1 {{PLURAL:$1|evento|eventi}} di log.",
        "importfailed": "Importazione non riuscita: <nowiki>$1</nowiki>",
        "importlogpage": "Importazioni",
        "importlogpagetext": "Di seguito sono elencate le importazioni di pagine provenienti da altre wiki, complete di cronologia.",
        "import-logentry-upload": "ha importato [[$1]] tramite upload",
-       "import-logentry-upload-detail": "{{PLURAL:$1|una revisione importata|$1 revisioni importate}}",
+       "import-logentry-upload-detail": "{{PLURAL:$1|una versione importata|$1 versioni importate}}",
        "import-logentry-interwiki": "ha trasferito da altra wiki la pagina $1",
-       "import-logentry-interwiki-detail": "{{PLURAL:$1|una revisione importata|$1 revisioni importate}} da $2",
+       "import-logentry-interwiki-detail": "{{PLURAL:$1|una versione importata|$1 versioni importate}} da $2",
        "javascripttest": "Sperimentazione JavaScript",
        "javascripttest-title": "In esecuzione test per $1",
        "javascripttest-pagetext-noframework": "Questa pagina è riservata all'esecuzione di test di JavaScript.",
        "tooltip-summary": "Inserire una breve sintesi",
        "interlanguage-link-title": "$1 - $2",
        "common.css": "/* Gli stili CSS inseriti qui si applicano a tutte le skin */",
-       "cologneblue.css": "/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Cologne Blue */",
        "monobook.css": "/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Monobook */",
-       "modern.css": "/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Modern */",
        "vector.css": "/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Vector */",
        "print.css": "/* Gli stili CSS inseriti qui si applicano all'output in stampa */",
        "noscript.css": "/ * Gli stili CSS inseriti qui si applicano agli utenti che hanno JavaScript disabilitato * /",
        "group-sysop.css": "/ * Gli stili CSS inseriti qui si applicheranno solo agli amministratori/sysop * /",
        "group-bureaucrat.css": "/ * Gli stili CSS inseriti qui si applicheranno solo ai burocrati * /",
        "common.js": "/* Il codice JavaScript inserito qui viene caricato da ciascuna pagina, per tutti gli utenti. */",
-       "cologneblue.js": "/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin Cologne Blue */",
        "monobook.js": "/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin MonoBook */",
-       "modern.js": "/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin Modern */",
        "vector.js": "/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin Vector */",
        "group-autoconfirmed.js": "/ * Il codice JavaScript inserito qui viene caricato solo per gli utenti autoconvalidati * /",
        "group-user.js": "/ * Il codice JavaScript inserito qui viene caricato solo per gli utenti registrati * /",
        "patrol-log-page": "Modifiche verificate",
        "patrol-log-header": "Di seguito sono elencate le verifiche delle modifiche.",
        "log-show-hide-patrol": "$1 registro delle modifiche verificate",
-       "deletedrevision": "Cancellata la vecchia revisione di $1.",
+       "deletedrevision": "Cancellata la vecchia versione di $1.",
        "filedeleteerror-short": "Errore nella cancellazione del file: $1",
        "filedeleteerror-long": "Si sono verificati degli errori nel tentativo di cancellare il file:\n\n$1",
        "filedelete-missing": "Impossibile cancellare il file \"$1\" in quanto non esiste.",
-       "filedelete-old-unregistered": "La revisione del file indicata, \"$1\", non è contenuta nel database.",
+       "filedelete-old-unregistered": "La versione del file indicata, \"$1\", non è contenuta nel database.",
        "filedelete-current-unregistered": "Il file specificato, \"$1\", non è contenuto nel database.",
        "filedelete-archive-read-only": "Il server Web non è in grado di scrivere nella directory di archivio \"$1\".",
        "previousdiff": "← Differenza precedente",
        "comparepages": "Confronta le pagine",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
-       "compare-rev1": "Revisione 1",
-       "compare-rev2": "Revisione 2",
+       "compare-rev1": "Versione 1",
+       "compare-rev2": "Versione 2",
        "compare-submit": "Confronta",
        "compare-invalid-title": "Il titolo che hai specificato non è valido.",
        "compare-title-not-exists": "Il titolo che hai specificato non esiste.",
index 65c9ee9..9caf57c 100644 (file)
        "vector-view-view": "閲覧",
        "vector-view-viewsource": "ソースを閲覧",
        "actions": "操作",
+       "vector-more-actions": "その他",
        "namespaces": "名前空間",
        "variants": "変種",
        "navigation-heading": "案内メニュー",
        "currentrev": "最新版",
        "currentrev-asof": "$1時点における最新版",
        "revisionasof": "$1時点における版",
-       "revision-info": "$1時点における$2による版",
+       "revision-info": "$1時点における{{GENDER:$6|$2}}による版$7",
        "previousrevision": "←前の版",
        "nextrevision": "次の版→",
        "currentrevisionlink": "最新版",
        "revdelete-show-file-submit": "はい",
        "revdelete-selected-text": "[[:$2]] の{{PLURAL:$1|選択された版}}:",
        "logdelete-selected": "{{PLURAL:$1|選択された記録項目}}:",
+       "revdelete-text-text": "削除された版は履歴に表示され続けますが、一般の利用者が内容を閲覧できなくなります。",
+       "revdelete-text-file": "削除されたファイルの版はファイルの履歴に表示されつづけますが、一般の利用者はその内容の一部を閲覧できなくなります。",
+       "logdelete-text": "削除された記録項目は記録に表示されつづけますが、一般の利用者はその内容の一部を閲覧できなくなります。",
        "revdelete-text-others": "追加の制限を設定しない限り、{{SITENAME}} の他の管理者は非表示コンテンツにまだアクセスでき、この同じインターフェースを通してそれを復元することができます。",
        "revdelete-confirm": "この操作を行おうとしていること、その結果を理解していること、[[{{MediaWiki:Policy-url}}|方針]]に従っていること、を確認してください。",
        "revdelete-suppress-text": "秘匿は、<strong>以下の場合に限って</strong>使用すべきです:\n* 名誉毀損のおそれがある記述\n* 非公開個人情報\n*: <em>自宅の住所、電話番号、個人を識別できる公的な番号など</em>",
        "searchmenu-exists": "<strong>このウィキには「[[:$1]]」という名前のページがあります。</strong>{{PLURAL:$2|0=|検索で見つかった他のページも参照してください。}}",
        "searchmenu-new": "<strong>このウィキでページ「[[:$1]]」を新規作成しましょう。</strong>{{PLURAL:$2|0=|検索で見つかった他のページも参照してください。}}",
        "searchprofile-articles": "本文ページ",
-       "searchprofile-project": "ヘルプとプロジェクトページ",
        "searchprofile-images": "マルチメディア",
        "searchprofile-everything": "すべて",
        "searchprofile-advanced": "詳細",
        "searchprofile-articles-tooltip": "$1内を検索",
-       "searchprofile-project-tooltip": "$1内を検索",
        "searchprofile-images-tooltip": "ファイルを検索",
        "searchprofile-everything-tooltip": "全本文ページ (トークページを含む) 内を検索",
        "searchprofile-advanced-tooltip": "特定の名前空間内を検索",
        "search-interwiki-default": "$1からの結果:",
        "search-interwiki-more": "(続き)",
        "search-relatedarticle": "関連",
-       "searcheverything-enable": "すべての名前空間を検索",
        "searchrelated": "関連",
        "searchall": "すべて",
        "showingresults": "<strong>$2</strong> 件目以降の最大 {{PLURAL:$1|<strong>$1</strong> 件の結果}}を表示しています。",
        "allowemail": "他の利用者からのメールを受け取る",
        "prefs-searchoptions": "検索",
        "prefs-namespaces": "名前空間",
-       "defaultns": "指定した名前空間のみを検索:",
        "default": "既定",
        "prefs-files": "ファイル",
        "prefs-custom-css": "カスタムCSS",
        "recentchanges-label-unpatrolled": "巡回されていない編集",
        "recentchanges-label-plusminus": "ページ サイズの増減 (バイト単位)",
        "recentchanges-legend-heading": "'''凡例:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|新しいページ一覧]]も参照)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|新しいページ一覧]]も参照)",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "以下は<strong>$2</strong>以降の更新です (最大 <strong>$1</strong> 件)。",
        "rclistfrom": "$3の$2以降の更新を表示する",
        "largefileserver": "このファイルは、サーバー設定で許されている最大サイズより大きいです。",
        "emptyfile": "アップロードしたファイルは内容が空のようです。\nファイル名の指定が間違っている可能性があります。\n本当にこのファイルをアップロードしたいのか、確認してください。",
        "windows-nonascii-filename": "このウィキではファイル名に特殊文字を使用できません。",
-       "fileexists": "この名前のファイルは既に存在します。置き換えていいかどうか確信が持てない場合は、<strong>[[:$1]]</strong>を確認してください。\n[[$1|thumb]]",
+       "fileexists": "この名前のファイルは既に存在します。{{GENDER:|}}置き換えていいかどうか確信が持てない場合は、<strong>[[:$1]]</strong>を確認してください。\n[[$1|thumb]]",
        "filepageexists": "このファイルのための説明ページは既に<strong>[[:$1]]</strong>に作成されていますが、現在、ファイルが存在しません。\n入力した概要は説明ページに反映されません。\n新しい概要を表示させるには、説明ページを手動で編集する必要があります。\n[[$1|thumb]]",
        "fileexists-extension": "類似した名前のファイルが既に存在します: [[$2|thumb]]\n* アップロード中のファイルの名前: <strong>[[:$1]]</strong>\n* 既存ファイルの名前: <strong>[[:$2]]</strong>\n違う名前を選択してください。",
        "fileexists-thumbnail-yes": "このファイルは元の画像から縮小されたもの <em>(サムネイル)</em> のようです。\n[[$1|thumb]]\nファイル <strong>[[:$1]]</strong> を確認してください。\n確認したファイルが同じ画像の元のサイズの版の場合は、サムネイルを別途アップロードする必要はありません。",
        "trackingcategories-msg": "追跡用カテゴリ",
        "trackingcategories-name": "メッセージ名",
        "trackingcategories-desc": "カテゴリに入る基準",
+       "noindex-category-desc": "このページは <code><nowiki>__NOINDEX__</nowiki></code> というマジックワードを含んでおり、その印が有効になっている名前空間にあるため、ロボットによる収集の対象になりません。",
+       "index-category-desc": "このページは <code><nowiki>__INDEX__</nowiki></code> というマジックワードを含んでおり、その印が有効になっている名前空間にあるため、通常と異なり、ロボットによる収集の対象になります。",
        "post-expand-template-inclusion-category-desc": "テンプレートを展開したあとのページ サイズが <code>$wgMaxArticleSize</code> よりも大きいため、一部のテンプレートが展開されなかった",
        "post-expand-template-argument-category-desc": "テンプレート引数 (<code>{{{Foo}}}</code> のような三重中括弧部分) を展開したあとのページが <code>$wgMaxArticleSize</code> よりも大きい",
        "expensive-parserfunction-category-desc": "高負荷なパーサー関数 (<code>#ifexist</code> など) の呼び出し回数が多過ぎるページ。[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] を参照してください。",
        "watchnologin": "ログインしていません",
        "addwatch": "ウォッチリストに追加",
        "addedwatchtext": "ページ「[[:$1]]」を[[Special:Watchlist|ウォッチリスト]]に追加しました。\nこのページまたはそのトークページが変更されると、ウォッチリストに表示されます。",
+       "addedwatchtext-short": "ページ「$1」をウォッチリストに追加しました。",
        "removewatch": "ウォッチリストから除去",
        "removedwatchtext": "ページ「[[:$1]]」を[[Special:Watchlist|ウォッチリスト]]から除去しました。",
+       "removedwatchtext-short": "ページ「$1」をウォッチリストから除去しました。",
        "watch": "ウォッチ",
        "watchthispage": "このページをウォッチする",
        "unwatch": "ウォッチ解除",
        "thumbnail_image-type": "対応していない画像形式です",
        "thumbnail_gd-library": "GDライブラリの構成が不完全です: 関数$1が不足",
        "thumbnail_image-missing": "ファイルが見つかりません: $1",
+       "thumbnail_image-failure-limit": "このサムネイルの描画に失敗した回数($1 回以上)が上限を超えました。しばらく後でもう一度お試しください。",
        "import": "ページデータの取り込み",
        "importinterwiki": "ウィキ間移動の取り込み",
        "import-interwiki-text": "取り込むウィキとページ名を選択してください。\n版の日付と編集者名は保持されます。\nウィキ間移動のすべての取り込み操作は[[Special:Log/import|取り込み記録]]に記録されます。",
        "tooltip-summary": "短い要約を入力してください",
        "interlanguage-link-title": "$2: $1",
        "common.css": "/* ここに記述したCSSはすべての外装に反映されます */",
-       "cologneblue.css": "/* ここに記述したCSSはケルンブルー外装の利用者に影響します */",
        "monobook.css": "/* ここに記述したCSSはモノブック外装の利用者に影響します */",
-       "modern.css": "/* ここに記述したCSSはモダン外装の利用者に影響します */",
        "vector.css": "/* ここに記述したCSSはベクター外装の利用者に影響します */",
        "print.css": "/* ここに記述したCSSは印刷出力に影響します */",
        "noscript.css": "/* ここに記述したCSSはJavaScriptを無効にしている利用者に影響します */",
        "group-sysop.css": "/* ここに記述したCSSは管理者のみに影響します */",
        "group-bureaucrat.css": "/* ここに記述したCSSはビューロクラットのみに影響します */",
        "common.js": "/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */",
-       "cologneblue.js": "/* ここにあるすべてのJavaScriptは、ケルンブルー外装を使用している利用者に対して読み込まれます */",
        "monobook.js": "/* ここにあるすべてのJavaScriptは、モノブック外装を使用している利用者に対して読み込まれます */",
-       "modern.js": "/* ここにあるすべてのJavaScriptは、モダン外装を使用している利用者に対して読み込まれます */",
        "vector.js": "/* ここにあるすべてのJavaScriptは、ベクター外装を使用している利用者に対して読み込まれます */",
        "group-autoconfirmed.js": "/* ここにあるすべてのJavaScriptは、自動承認された利用者のみに読み込まれます */",
        "group-user.js": "/* ここにあるすべてのJavaScriptは、登録利用者のみに読み込まれます */",
        "pageinfo-category-pages": "ページ数",
        "pageinfo-category-subcats": "下位カテゴリ数",
        "pageinfo-category-files": "ファイル数",
-       "skinname-cologneblue": "ケルンブルー",
        "skinname-monobook": "モノブック",
-       "skinname-modern": "モダン",
        "skinname-vector": "ベクター",
        "markaspatrolleddiff": "巡回済みにする",
        "markaspatrolledtext": "このページを巡回済みにする",
        "watchlistedit-raw-done": "ウォッチリストを更新しました。",
        "watchlistedit-raw-added": "{{PLURAL:$1|$1 ページ}}を追加しました:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|$1 ページ}}を除去しました:",
+       "watchlistedit-clear-title": "ウォッチリストの全消去",
+       "watchlistedit-clear-legend": "ウォッチリストの全消去",
        "watchlistedit-clear-explain": "ウォッチリストに追加されたページ名がすべて除去されます",
        "watchlistedit-clear-titles": "ページ名:",
+       "watchlistedit-clear-submit": "ウォッチリストの全消去 (この操作は取り消せません!)",
+       "watchlistedit-clear-done": "ウォッチリストを全消去しました。",
        "watchlistedit-clear-removed": "{{PLURAL:$1|$1 件のページ}}を除去しました:",
        "watchlistedit-too-many": "ページ数が多すぎるため表示できません。",
+       "watchlisttools-clear": "ウォッチリストの全消去",
        "watchlisttools-view": "関連する変更を閲覧",
        "watchlisttools-edit": "ウォッチリストの閲覧と編集",
        "watchlisttools-raw": "ウォッチリストをテキストで編集",
index dc61e25..f579940 100644 (file)
        "searchmenu-exists": "'''Ana kaca kanthi jeneng \"[[$1]]\" ing wiki iki'''",
        "searchmenu-new": "'''Gawé kaca \"[[:$1]]\" ing wiki iki!'''",
        "searchprofile-articles": "Kaca isi",
-       "searchprofile-project": "Kaca pitulung lan proyèk",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Kabèh",
        "searchprofile-advanced": "Tataran luwih dhuwur/maju",
        "searchprofile-articles-tooltip": "Panggolèkan ing $1",
-       "searchprofile-project-tooltip": "Panggolèkan ing $1",
        "searchprofile-images-tooltip": "Panggolèkan berkas",
        "searchprofile-everything-tooltip": "Panggolèkan kabèh isi (klebu kaca-kaca wicara)",
        "searchprofile-advanced-tooltip": "Panggolèkan ing bilik jeneng biasa (''custom'')",
        "search-interwiki-default": "Pituwas $1:",
        "search-interwiki-more": "(luwih akèh)",
        "search-relatedarticle": "Kagandhèng",
-       "searcheverything-enable": "Golèki ing kabèh bilik-jeneng",
        "searchrelated": "kagandhèng",
        "searchall": "kabèh",
        "showingresults": "Ing ngisor iki dituduhaké {{PLURAL:$1|'''1''' kasil|'''$1''' kasil}}, wiwitané saking #<strong>$2</strong>.",
        "allowemail": "Marengaké panganggo liyané ngirim layang èlèktronik (email).",
        "prefs-searchoptions": "Golèk",
        "prefs-namespaces": "Ruang jeneng / Bilik jeneng",
-       "defaultns": "Utawa golèki ing bilik jeneng iki:",
        "default": "baku",
        "prefs-files": "Berkas",
        "prefs-custom-css": "CSS pribadi",
        "prefs-emailconfirm-label": "Konfirmasi layang-e:",
        "youremail": "Layang élèktronik (E-mail):",
        "username": "{{GENDER:$1|Asma panganggo}}:",
-       "uid": "{{GENDER:$1|ID panganggo}}:",
        "prefs-memberingroups": "{{GENDER:$2|Anggota}} {{PLURAL:$1|klompok|klompok-klompok}}:",
        "prefs-registration": "Wektu régistrasi:",
        "yourrealname": "Asma sajatiné :",
        "recentchanges-label-unpatrolled": "Suntingan iki durung dipatroli",
        "recentchanges-label-plusminus": "Gedhene kaca wis diowahi segede niki.",
        "recentchanges-legend-heading": "'''Katrangan:'''",
-       "recentchanges-legend-newpage": "(dhelengen uga: [[Special:NewPages|daftar kaca anyar]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (dhelengen uga: [[Special:NewPages|daftar kaca anyar]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Ing ngisor iki owah-owahan wiwit <strong>$2</strong> (kapacak nganti <strong>$1</strong> owah-owahan).",
        "rclistfrom": "Saiki nuduhaké owah-owahan wiwit tanggal $3 $2",
        "log-title-wildcard": "Golèk irah-irahan utawa judhul sing diawali mawa tèks kasebut",
        "showhideselectedlogentries": "Tuduhalé/dhelikaké èntri log kapilih",
        "allpages": "Kabèh kaca",
-       "alphaindexline": "$1 tumuju $2",
        "nextpage": "Kaca sabanjuré ($1)",
        "prevpage": "Kaca sadurungé ($1)",
        "allpagesfrom": "Kaca-kaca kawiwitan kanthi:",
index 0712260..f279420 100644 (file)
        "vector-view-view": "შემოწმებული სტატია",
        "vector-view-viewsource": "წყაროს ხილვა",
        "actions": "მოქმედებები",
+       "vector-more-actions": "მეტი",
        "namespaces": "სახელთა სივრცე",
        "variants": "ვარიანტები",
        "navigation-heading": "სანავიგაციო მენიუ",
        "print": "ამობეჭდე",
        "view": "იხილე",
        "edit": "რედაქტირება",
+       "edit-local": "ლოკალური აღწერის რედაქტირება",
        "create": "შექმნა",
+       "create-local": "ლოკალური აღწერის დამატება",
        "editthispage": "გვერდის რედაქტირება",
        "create-this-page": "ამ გვერდის შექმნა",
        "delete": "წაშლა",
        "jumptonavigation": "ნავიგაცია",
        "jumptosearch": "ძიება",
        "view-pool-error": "უკაცრავად, მაგრამ სერვერები გადატვირთულია.\nშემოსულია ამ გვერდის სანახავად ძალიან ბევრი მოთხოვნა.\nგთხოვთ, დაელოდეთ და გაიმერეთ მოთხოვნა ცოტა მოგვიანებით.\n\n$1",
+       "generic-pool-error": "უკაცრავად, მაგრამ სერვერები გადატვირთულია.\nბევრი მომხმარებელი ცდილობს ამ რესურსის ნახვას.\nგთხოვთ, დაელოდეთ და გაიმერეთ მოთხოვნა ცოტა მოგვიანებით.",
        "pool-timeout": "ბლოკირების ლოდინის დრო ამოიწურა",
        "pool-queuefull": "მოთხოვნების დამგროვებელი სავსეა",
        "pool-errorunknown": "უცნობი შეცდომა",
        "loginlanguagelabel": "ენა: $1",
        "suspicious-userlogout": "თქვენი მოთხოვნა გასვლის შესახებ გაუქმებულია, რადგანაც იგი გავს ქეშირებადი პროქსის ან არაკორექტული ბრაუზერის მოთხოვნას.",
        "pt-login": "შესვლა",
+       "pt-login-button": "შესვლა",
        "pt-createaccount": "ანგარიშის შექმნა",
        "pt-userlogout": "გასვლა",
        "php-mail-error-unknown": "ამოუცნობი შეცდომა PHP-ის mail() ფუნქციაში",
        "edit-gone-missing": "გვერდის განახლეა შეუძლებელია.\nშესაძლოა, იგი წაიშალა.",
        "edit-conflict": "რედაქციების კონფლიქტი.",
        "edit-no-change": "თქვენი შესწორება არ იქნა შენახული, რადგანაც ტექსტის ცვლილება არ მოხდა.",
+       "postedit-confirmation-created": "გვერდი შეიქმნა.",
        "postedit-confirmation-saved": "თქვენი რედაქტირება შენახულია.",
        "edit-already-exists": "ახალი გვერდის შექმნა არ მოხერხდა.\nის უკვე არსებობს.",
        "defaultmessagetext": "შეტყობინების სტანდარტული ტექსტი",
        "searchmenu-exists": "'''ამ ვიკიპროექტში არის გვერდი „[[:$1]]“'''",
        "searchmenu-new": "'''შექმენით გვერდი „[[:$1]]“ ამ ვიკიში!''' {{PLURAL:$2|0=|აგრეთვე იხილე ძიები შედეგი.|აგრეთვე იხილე ძიების შედეგები.}}",
        "searchprofile-articles": "ძირითადი გვერდები",
-       "searchprofile-project": "დახმარების და პროექტის გვერდები",
        "searchprofile-images": "მულტიმედია",
        "searchprofile-everything": "ყველაფერი",
        "searchprofile-advanced": "გაფართოებული",
        "searchprofile-articles-tooltip": "ძიება $1ში",
-       "searchprofile-project-tooltip": "ძიება $1ში",
        "searchprofile-images-tooltip": "ფაილების ძიება",
        "searchprofile-everything-tooltip": "ყველა გვერდზე ძიება (მათ შორის განხილვის გვერდები)",
        "searchprofile-advanced-tooltip": "ძიება სახელთა მოცემულ სივრცეში",
        "search-result-score": "რელევანტურობა $1 %",
        "search-redirect": "(გადამისამართება $1)",
        "search-section": "(სექცია $1)",
+       "search-file-match": "(ემთხვევა ფაილის შინაარსს)",
        "search-suggest": "ხომ არ იგულისხმეთ: $1?",
        "search-interwiki-caption": "დობილი პროექტები",
        "search-interwiki-default": "შედეგები $1-დან:",
        "search-interwiki-more": "(გაგრძელება)",
        "search-relatedarticle": "დაკავშირებული",
-       "searcheverything-enable": "ძიება სახელთა ყველა სივრცეებში",
        "searchrelated": "მიბმული",
        "searchall": "ყველა",
        "showingresults": "ქვემოთ იხილეთ <b>$1</b>-მდე შედეგი დაწყებული #<b>$2</b>-იდან.",
        "allowemail": "სხვა მომხმარებლებისგან ელ. ფოსტის მიღების ნებართვა",
        "prefs-searchoptions": "ძიების პარამეტრები",
        "prefs-namespaces": "სახელთა სივრცეები",
-       "defaultns": "სხვა შემთხვევაში ძიება შემდეგ სახელთა სივრცეებში:",
        "default": "სტანდარტული",
        "prefs-files": "ფაილები",
        "prefs-custom-css": "მომხმარებლის CSS",
        "recentchanges-label-unpatrolled": "ეს რედაქტირება გადაუმოწმებელია",
        "recentchanges-label-plusminus": "ცვლილებების ზომა ბაიტებში",
        "recentchanges-legend-heading": "'''ლეგენდა:'''",
-       "recentchanges-legend-newpage": "(იხ. აგრეთვე [[Special:NewPages|ახალი გვერდების სია]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (იხ. აგრეთვე [[Special:NewPages|ახალი გვერდების სია]])",
        "rcnotefrom": "ქვემოთ მოყვანილია ცვლილებები <strong>$2</strong>-დან (ნაჩვენებია არაუმეტეს <strong>$1</strong>).",
        "rclistfrom": "ახალი ცვლილებების ჩვენება დაწყებული $3 $2-დან",
        "rcshowhideminor": "მცირე რედაქტირების $1",
        "rcshowhideanons-show": "ჩვენება",
        "rcshowhideanons-hide": "დამალვა",
        "rcshowhidepatr": "გაკონტროლებული ცვლილებების $1",
+       "rcshowhidepatr-show": "ჩვენება",
+       "rcshowhidepatr-hide": "დამალვა",
        "rcshowhidemine": "ჩემი რედაქტირების $1",
        "rcshowhidemine-show": "ჩვენება",
        "rcshowhidemine-hide": "დამალვა",
        "ninterwikis": "$1 {{PLURAL:$1|ინტერვიკი|ინტერვიკი}}",
        "nlinks": "$1 ბმული",
        "nmembers": "$1 წევრი",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|წევრი|წევრი}}",
        "nrevisions": "$1 რედაქტირება",
        "nviews": "$1 ჩვენება",
        "nimagelinks": "გამოიყენება $1 {{PLURAL:$1|გვერდზე}}",
        "listgrouprights-removegroup-self": "შეუძლია წაშალოს {{PLURAL:$2|ჯგუფი|ჯგუფები}} თავისი ანგარიშიდან: $1",
        "listgrouprights-addgroup-self-all": "შეუძლია ყელა ჯგუფია ჩამატება ანგარიშს.",
        "listgrouprights-removegroup-self-all": "შეუძლია თავისი ანგარიშის ყველა ჯგუფის წაშლა.",
+       "listgrouprights-namespaceprotection-namespace": "სახელთა სივრცე",
+       "trackingcategories-name": "შეტყობინების სახელი",
+       "trackingcategories-nodesc": "აღწერა არ არის.",
+       "trackingcategories-disabled": "კატეგორია გამორთულია",
        "mailnologin": "გამგზავნი მისამართი არ არის მითითებული.",
        "mailnologintext": "თქვენ უნდა [[Special:UserLogin|წარადგენილი იყოთ სისტემისადმი]] და გქონდეთ წესიერი ელექტრონული ფოსტის მისამართი თქვენს [[Special:Preferences|კონფიგურაციაში]] იმისთვის, რომ გაუგზავნოთ წერილების სხვა მომხმარებლებს.",
        "emailuser": "გაუგზავნეთ იმეილი ამ მომხმარებელს",
        "watchnologin": "რეგისტრაცია ვერ შესრულდა",
        "addwatch": "კონტროლის სიაში დამატება",
        "addedwatchtext": "გვერდი „[[:$1]]“ დაემატა თქვენს [[Special:Watchlist|კონტროლის სიას]].\nამ და მასთან დაკავშირებული განხილვის გვერდის შემდგომი ცვლილებები აისახება იქ.",
+       "addedwatchtext-short": "გვერდი „$1“ დაემატა თქვენი კონტროლის სიას.",
        "removewatch": "კონტროლის სიიდან წაშლა",
        "removedwatchtext": "გვერდი „[[:$1]]“ ამოღებულია თქვენი [[Special:Watchlist|კონტროლის სიიდან]].",
+       "removedwatchtext-short": "გვერდი „$1“ წაიშალა თქვენი კონტროლის სიიდან.",
        "watch": "კონტროლი",
        "watchthispage": "ამ გვერდის კონტროლი",
        "unwatch": "კონტროლის მოხსნა",
        "contributions-title": "მომხმარებლის წვლილი $1",
        "mycontris": "წვლილი",
        "contribsub2": "მომხმარებელი {{GENDER:$3|$1}} წვლილი ($2)",
+       "contributions-userdoesnotexist": "მომხმარებლის ანგარიში „$1“ არ არის რეგისტრირებული.",
        "nocontribs": "ძებნისას მითითებული პარამეტრების შესაბამისი არც ერთი ცვლილება ნაპოვნი არ არის",
        "uctop": "(მიმდინარე)",
        "month": "თვე:",
        "sp-contributions-newbies-sub": "ახალბედებისთვის",
        "sp-contributions-newbies-title": "ბოლოს დარეგისტრირებულ მომხმარებელთა წვლილი",
        "sp-contributions-blocklog": "ბლოკირების ისტორია",
+       "sp-contributions-suppresslog": "მომხმარებლის წაშლილი წვლილი",
        "sp-contributions-deleted": "მომხმარებლის წაშლილი შესწოებები",
        "sp-contributions-uploads": "ატვირთვები",
        "sp-contributions-logs": "ჟურნალები",
        "sp-contributions-toponly": "აჩვენე მხოლოდ ბოლო ვერსიები",
        "sp-contributions-submit": "ძიება",
        "whatlinkshere": "ბმული გვერდზე",
-       "whatlinkshere-title": "გვერდები, რომლებიც შეიცავენ ბმულებს „$1“-ზე",
+       "whatlinkshere-title": "გვერდები, რომლებიც შეიცავენ „$1“-ის ბმულებს",
        "whatlinkshere-page": "გვერდი:",
        "linkshere": "მომდევნო გვერდები შეიცავენ ბმულებს '''[[:$1]]'''-ზე:",
        "nolinkshere": "'''[[:$1]]'''-ზე ბმული არ არის.",
        "tooltip-summary": "შეიყვანეთ მოკლე სქოლიო",
        "interlanguage-link-title": "$1 — $2",
        "common.css": "/** აქ ჩასმული CSS გამოყენებული იქნება გაფორმების ყველა გარეკანზე */",
-       "cologneblue.css": "/* აქ ჩასმული CSS გამოყენებული იქნება კელნის ლურჯი გაფორმების თემაში */",
        "monobook.css": "/* აქ ჩასმული CSS გავლენას იქონიებს Monobook ინტერფეისის მომხმარებლებზე */",
-       "modern.css": "/* აქ ჩასმული CSS გამოყენებული იქნება თანამედროვე გაფორმების თემაში */",
        "vector.css": "/* აქ ჩასმული CSS გამოყენებული იქნება ვექტორული გაფორმების თემაში */",
        "group-autoconfirmed.css": "/* აქ განთავსებული CSS გამოყენებული იქნება მხოლოდ ავტომატურად დადასტურებული მომხმარებლებისათვის */",
        "group-bot.css": "/* აქ განთავსებული CSS გამოყენებული იქნება მხოლოდ ბოტებისათვის */",
        "pageinfo-length": "გვერდის სიგრძე (ბაიტებში)",
        "pageinfo-article-id": "გვერდის ID",
        "pageinfo-language": "გვერდის შინაარსის ენა",
+       "pageinfo-content-model": "გვერდის შინაარსის მოდელი",
        "pageinfo-robot-policy": "ინდექსაცია საძიებო რობოტებით",
        "pageinfo-robot-index": "დაშვებულია",
        "pageinfo-robot-noindex": "არ არის დაშვებული",
        "pageinfo-category-pages": "გვერდების რაოდენობა",
        "pageinfo-category-subcats": "ქვეკატეგორიების რაოდენობა",
        "pageinfo-category-files": "ფაილების რაოდენობა",
-       "skinname-cologneblue": "კელნის ლურჯი",
        "skinname-monobook": "მონობუკი",
-       "skinname-modern": "თანამედროვე",
        "skinname-vector": "ვექტორული",
        "markaspatrolleddiff": "მონიშნე როგორც პატრულირებული",
        "markaspatrolledtext": "მონიშნე ეს სტატია როგორც პატრულირებული",
        "newimages-summary": "ეს სპეცგვერდი აჩვენებს ბოლო დროს ატვირთულ ფაილებს.",
        "newimages-legend": "ფილტრი",
        "newimages-label": "ფაილის (ან მისი სახელის) ნაწილი",
+       "newimages-showbots": "ბოტის ატვირთვების ჩვენება",
        "noimages": "გადასახედი არაფერია.",
        "ilsubmit": "ძიება",
        "bydate": "თარიღით",
        "percent": "$1%",
        "parentheses": "($1)",
        "brackets": "[$1]",
+       "quotation-marks": "„$1“",
        "imgmultipageprev": "&larr; წინა გვერდი",
        "imgmultipagenext": "შემდეგი გვერდი &rarr;",
        "imgmultigo": "გადასვლა",
        "imgmultigoto": "გადასვლა გვერდზე $1",
+       "img-lang-default": "(საწყისი ენა)",
        "img-lang-go": "წინ",
        "ascending_abbrev": "დაბრ",
        "descending_abbrev": "აღწერა",
        "watchlistedit-raw-done": "თქვენი კონტროლის სია განახლდა.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 სათაური|$1 სათაურები}} მიემატა:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 სათაური|$1 სათაურები}} წაიშალა:",
+       "watchlistedit-clear-title": "კონტროლის სიის გასუფთავება",
+       "watchlistedit-clear-legend": "კონტროლის სიის გასუფთავება",
+       "watchlistedit-clear-explain": "თქვენი კონტროლის სიიდან ყველა ჩანაწერი წაიშლება",
+       "watchlistedit-clear-titles": "სათაურები:",
+       "watchlistedit-clear-submit": "კონტროლის სიის გასუფთავება (ეს შეუქცევადია!)",
+       "watchlistedit-clear-done": "თქვენი კონტროლის სია გასუფთავდა.",
+       "watchlisttools-clear": "კონტროლის სიის გასუფთავება",
        "watchlisttools-view": "დაკავშირებული ცვლილებების ხილვა",
        "watchlisttools-edit": "კონტროლის სიის ხილვა და რედაქტირება",
        "watchlisttools-raw": "კონტროლის სიის რედაქტირება ტექსტის ფორმატში",
        "htmlform-no": "არა",
        "htmlform-yes": "დიახ",
        "htmlform-chosen-placeholder": "აირჩიეთ პარამეტრი",
+       "htmlform-cloner-create": "მეტის დამატება",
+       "htmlform-cloner-delete": "წაშლა",
        "sqlite-has-fts": "$1 სრული ტექსტის ძიების მხარდაჭერით",
        "sqlite-no-fts": "$1 სრული ტექსტის ძიების მხარდაჭერის გარეშე",
        "logentry-delete-delete": "მომხმარებელმა $1 {{GENDER:$2|წაშალა}} გვერდი: „$3“",
index 7737c39..5d33b0c 100644 (file)
        "searchmenu-exists": "'''Yella asebter s isem \"[[:$1]]\" deg wiki agi.'''",
        "searchmenu-new": "'''Snulfud asebter « [[:$1|$1]] » deg wiki agi !'''",
        "searchprofile-articles": "Isebtar n ugbur",
-       "searchprofile-project": "Isebtaren n tallat dɣa n usenfa",
        "searchprofile-images": "Agetmedia",
        "searchprofile-everything": "Akk",
        "searchprofile-advanced": "Anadi anemhal",
        "searchprofile-articles-tooltip": "Nadi deg $1",
-       "searchprofile-project-tooltip": "Nadi deg $1",
        "searchprofile-images-tooltip": "Nadi  ifuyla agetmedia",
        "searchprofile-everything-tooltip": "Nadi deg akk usmel (ula deg isebtaren n umyannan)",
        "searchprofile-advanced-tooltip": "Fren ideggen n isemawen i unadi",
        "search-interwiki-default": "Igemmaḍ ɣef $1 :",
        "search-interwiki-more": "(ugar)",
        "search-relatedarticle": "Amassaɣ",
-       "searcheverything-enable": "Nadi deg akkw tallunin n isemawen",
        "searchrelated": "ineqqes",
        "searchall": "akk",
        "showingresults": "Tamuli n {{PLURAL:$1|'''Yiwen''' wegmud|'''$1''' n yigmad}} seg  #'''$2'''.",
        "allowemail": "Eǧǧ imseqdacen wiyaḍ a k-aznen email",
        "prefs-searchoptions": "Nadi",
        "prefs-namespaces": "Talluntin n isemawen",
-       "defaultns": "Nadi s lexṣas deg tallunin agi n isemawen :",
        "default": "ameslugen",
        "prefs-files": "Ifayluwen",
        "prefs-custom-css": "CSS asagen",
        "prefs-emailconfirm-label": "Aragag n tirawt :",
        "youremail": "E-mail *:",
        "username": "{{GENDER:$1|Isem n umseqdac|Isem n tamseqdact}} :",
-       "uid": "Uḍḍun n {{GENDER:$1|umseqdac|tamseqdact}}:",
        "prefs-memberingroups": "{{GENDER:$2|Aεeggal|Taɛggalt}} n {{PLURAL:$1|ugraw|igrawen}} :",
        "prefs-registration": "Azmez n tiggezt :",
        "yourrealname": "Isem n ṣṣeḥ *:",
        "recentchanges-label-unpatrolled": "Abeddel agi mazal yesɛa aselken.",
        "recentchanges-label-plusminus": "Tiddi n usebtar tetwebeddel s umḍan agi n itamḍanen.",
        "recentchanges-legend-heading": "'''Aglam :'''",
-       "recentchanges-legend-newpage": "(zeṛ daɣen [[Special:NewPages|umuɣ n isebtar imaynuten]]).",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zeṛ daɣen [[Special:NewPages|umuɣ n isebtar imaynuten]]).",
        "recentchanges-legend-plusminus": "(''± 123'')",
        "rcnotefrom": "Deg ukessar llan ibeddlen seg wasmi '''$2''' (ar '''$1''').",
        "rclistfrom": "Ssken ibeddlen imaynuten seg $3 $2",
        "log-title-wildcard": "Nadi ɣef izwal i yebdan s uḍris-agi",
        "showhideselectedlogentries": "Beqqeḍ/ffer isekcam n uɣmis agi",
        "allpages": "Akk isebtar",
-       "alphaindexline": "$1 ar $2",
        "nextpage": "Asebter ameḍfir ($1)",
        "prevpage": "Asebter ssabeq ($1)",
        "allpagesfrom": "Ssken isebtar seg:",
index 94d44db..bd13cab 100644 (file)
        "nov": "Teş",
        "dec": "Gağ",
        "pagecategories": "{{PLURAL:$1|Kategoriye|Kategoriy}}",
-       "category_header": "Pelê ke kategoriya \"$1\" derê",
+       "category_header": "Pelê ke kategoriya \"$1\" miyan derê",
        "subcategories": "Kategoriyê bınêni",
        "category-media-header": "Medyawa ke kategoriya \"$1\" dera",
        "category-empty": "''Na kategoriye de hona qet nustey ya ki medya çinê.''",
        "searchmenu-exists": "''Ena 'Wikipediya de ser \"[[:$1]]\" yew pel esto'''",
        "searchmenu-new": "'''Nê wiki de pela \"[[:$1]]\" baferne!'''",
        "searchprofile-articles": "Pelê tedeesteu",
-       "searchprofile-project": "Pelê yardımi u procey",
        "searchprofile-images": "Multimedya",
        "searchprofile-everything": "Her çi",
        "searchprofile-advanced": "Raverşiyae",
        "searchprofile-articles-tooltip": "$1 de cıfeteliye",
-       "searchprofile-project-tooltip": "$1 de cıfeteliye",
        "searchprofile-images-tooltip": "Dosya bıfeteliye",
        "searchprofile-everything-tooltip": "Zerreki pêro sae ke (pelunê hurênaişi daxıl)",
        "searchprofile-advanced-tooltip": "Caunê namunê xısusiu de cıfeteliye",
        "allowemail": "Karberunê binun ra ''e-mail''i fael ke",
        "prefs-searchoptions": "Alternatifê cıcêraişi",
        "prefs-namespaces": "Caê namey",
-       "defaultns": "Halo bin de zerrê nê caunê namey de cıfeteliye:",
        "default": "ihmal",
        "prefs-files": "Dosyey",
        "youremail": "E-poste:",
index c8f9b81..6534651 100644 (file)
        "vector-view-view": "Оқу",
        "vector-view-viewsource": "Қайнарын қарау",
        "actions": "Әрекеттер",
+       "vector-more-actions": "Тағы",
        "namespaces": "Есім кеңістіктері",
        "variants": "Нұсқалар",
        "navigation-heading": "Бағыттау мәзірі",
        "suspicious-userlogout": "Сіздің жүйеден шығу сұранымыңыз қабылданбады, өйткені бұл бұзылған браузер немесе кэштеуші прокси арқылы жіберілгенге ұқсайды.",
        "pt-login": "Кіру",
        "pt-login-button": "Кіру",
-       "pt-createaccount": "Тіркелгі жасау",
+       "pt-createaccount": "Тіркелу",
        "pt-userlogout": "Шығу",
        "php-mail-error-unknown": "Mail() PHP-функциясындағы белгісіз қате.",
        "user-mail-no-addy": "Е-пошта мекенжайынсыз хабарлама жіберуді байқап көрді.",
        "explainconflict": "Осы бетті сіз өңдей бастағанда басқа біреу бетті өзгерткен.\nЖоғарғы мәтін аумағында қазіргі уақытта бар бет мәтінінен тұрады.\nТөменгі мәтін аумағында сіздің өзгертулеріңіз көрсетіледі.\nӨзгертуіңізді бар мәтінге біріктіруге тура келеді.\n«{{int:savearticle}}» батырмасын басқанда </strong>тек</strong> жоғарғы мәтін аумағы сақталады.",
        "yourtext": "Мәтініңіз",
        "storedversion": "Сақталған нұсқасы",
-       "nonunicodebrowser": "<strong>Ескерту: Шолғышыңыз Unicode белгілеуіне үйлесімді емес</strong>\nЖұмыс істеуге ықтималдық беру үшін, төмендегі кірістіру орнында ASCII емес таңбалар оналтылық кодымен көрсетіледі.",
-       "editingold": "<strong>Ð\95Ñ\81кеÑ\80Ñ\82Ñ\83: Ð\9eÑ\81Ñ\8b Ð±ÐµÑ\82Ñ\82Ñ\96Ò£ ÐµÑ\80Ñ\82еÑ\80ек Ñ\82үзеÑ\82Ñ\83Ñ\96н Ó©Ò£Ð´ÐµÐ¿ Ð¶Ð°Ñ\82Ñ\8bÑ\80Ñ\81Ñ\8bз.</strong>\nÐ\91ұнÑ\8b Ñ\81аÒ\9bÑ\82аÑ\81аңÑ\8bз Ð¾Ñ\81Ñ\8b Ñ\82үзеÑ\82Ñ\83ден кейінгі барлық өзгерістер жоғалады.",
+       "nonunicodebrowser": "<strong>Ескерту: Шолғышыңыз Юникод белгілеуіне үйлесімді емес</strong>\nЖұмыс істеуге ықтималдық беру үшін төмендегі кірістіру орнында ASCII емес таңбалар оналтылық кодымен көрсетіледі.",
+       "editingold": "<strong>Ð\95Ñ\81кеÑ\80Ñ\82Ñ\83: Ð\9eÑ\81Ñ\8b Ð±ÐµÑ\82Ñ\82Ñ\96Ò£ Ð±Ò±Ñ\80Ñ\8bÒ£Ò\93Ñ\8b Ð½Ò±Ñ\81Ò\9bаÑ\81Ñ\8bн Ó©Ò£Ð´ÐµÑ\83деÑ\81Ñ\96з.</strong>\nÐ\91ұнÑ\8b Ñ\81аÒ\9bÑ\82аÑ\81аңÑ\8bз Ð¾Ñ\81Ñ\8b Ð½Ò±Ñ\81Ò\9bадан кейінгі барлық өзгерістер жоғалады.",
        "yourdiff": "Айырмашылықтар",
-       "copyrightwarning": "Аңғартпа: {{SITENAME}} жобасына берілген барлық үлестер $2 (көбірек ақпарат үшін: $1) құжатына сай деп саналады.\nЕгер жазуыңыздың еркін өңделуін және ақысыз көпшілікке таратуын қаламасаңыз, мында жарияламауыңыз жөн.<br />\nТағы да, бұл мағлұмат өзіңіз жазғаныңызға, не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз.\n'''АВТОРЛЫҚ ҚҰҚЫҚПЕН ҚОРҒАУҒАН МАҒЛҰМАТТЫ РҰҚСАТСЫЗ ЖАРИЯЛАМАҢЫЗ!'''",
-       "copyrightwarning2": "Аңғартпа: {{SITENAME}} жобасына берілген барлық үлестерді басқа үлескерлер өңдеуге, өзгертуге, не аластауға мүмкін.\nЕгер жазуыңыздың еркін өңделуін қаламасаңыз, мында жарияламауыңыз жөн.<br />\nТағы да, бұл мағлұмат өзіңіз жазғаныңызға, не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз (көбірек ақпарат үшін $1 қужатын қараңыз).\n'''АВТОРЛЫҚ ҚҰҚЫҚПЕН ҚОРҒАУҒАН МАҒЛҰМАТТЫ РҰҚСАТСЫЗ ЖАРИЯЛАМАҢЫЗ!'''",
-       "longpageerror": "<strong>Ò\9aÐ\90ТÐ\95Ð\9bÐ\86Ð\9a: Ð¡Ð°Ò\9bÑ\82амаÒ\9bÑ\88Ñ\8b Ð±Ð¾Ð»Ò\93ан Ð¼Ó\99Ñ\82Ñ\96нÑ\96Ò£Ñ\96здÑ\96Ò£ ÐºÓ©Ð»ÐµÐ¼Ñ\96 {{PLURAL:$1|килобайÑ\82|$1 ÐºÐ¸Ð»Ð¾Ð±Ð°Ð¹Ñ\82}}, ең көбі {{PLURAL:$2|килобайт|$2 килобайт}} рұқсат етілген көлемінен асқан.</strong>\nБұл сақталмайды.",
-       "readonlywarning": "'''ЕСКЕТУ: Дерекқор баптау үшін құлыпталған, сондықтан дәл қазір өңдемеңізді сақтай алмайсыз.\nКейін қолдану үшін мәтінді қойып алып және қойып, мәтін файлына сақтауңызға болады.''' \nӘкімшінің құлыптау себебі келесідей: $1",
-       "protectedpagewarning": "<strong>Ескерту: Бұл бет өңдеуден қорғалған. Тек әкімші құқықтары бар қатысушылар ғана өңдей алады.</strong>\nТөменде бет журналының соңғы жазбасы көрсетілген:",
+       "copyrightwarning": "{{SITENAME}} жобасына қосқан барлық үлестеріңіз $2 (көбірек ақпарат үшін: $1) аясында жарияланатынын ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін және ақысыз көпшілікке таралуын қаламасаңыз мұнда жарияламаңыз<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз.\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!</strong>",
+       "copyrightwarning2": "{{SITENAME}} жобасына қосқан барлық үлестеріңізді басқа үлескерлер өңдеуге, өзгертуге немесе аластауы мүмкін екенін ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін қаламасаңыз осында жарияламаңыз.<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз. (көбірек ақпарат үшін $1 құжатын қараңыз).\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!",
+       "longpageerror": "<strong>Ò\9aÐ\90ТÐ\95Ð\9bÐ\86Ð\9a: Ð¡Ð°Ò\9bÑ\82амаÒ\9bÑ\88Ñ\8b Ð±Ð¾Ð»Ò\93ан Ð¼Ó\99Ñ\82Ñ\96нÑ\96Ò£Ñ\96здÑ\96Ò£ ÐºÓ©Ð»ÐµÐ¼Ñ\96 {{PLURAL:$1|бÑ\96Ñ\80 ÐºÐ¸Ð»Ð¾Ð±Ð°Ð¹Ñ\82|$1 ÐºÐ¸Ð»Ð¾Ð±Ð°Ð¹Ñ\82}} ең көбі {{PLURAL:$2|килобайт|$2 килобайт}} рұқсат етілген көлемінен асқан.</strong>\nБұл сақталмайды.",
+       "readonlywarning": "<strong>ЕСКЕРТУ: Дерекқор техникалық жұмыстар жасау үшін құлыпталған сондықтан дәл қазір өңдемеңізді сақтай алмайсыз.</strong>\nКейін сақтау үшін мәтініңізді мәтін файлына көшіріп алыпуңызға болады. \n\nАдминстратор оны құлыптау себебін келесідей түсіндіреді: $1",
+       "protectedpagewarning": "<strong>Ескерту: Бұл бет өңдеуден қорғалған сондықтан тек әкімші құқықтары бар қатысушылар ғана өңдей алады.</strong>\nТөменде соңғы журнал жазбасы көрсетілген:",
        "semiprotectedpagewarning": "<strong>Ескерту:</strong> Бет жартылай қорғалған, сондықтан осыны тек тіркелген қатысушылар өңдей алады.\nТөменде бет журналының соңғы жазбасы көрсетілген:",
-       "cascadeprotectedwarning": "<strong>Ескерту:</strong>  Бұл бет қорғалған, енді тек әкімші құқықтары бар қатысушылар ғана бұны өңдей алады, себебі бұл келесі «баулы қорғауы» бар {{PLURAL:$1|бетіне|беттеріне}} кірістілген бет:",
-       "titleprotectedwarning": "'''Ескерту: Бұл бет атауы бастаудан қорғалған, сондықтан [[Special:ListGroupRights|арнайы құқықтары]] бар қатысушылар бұндай атаумен бетті бастай алады.'''\nТөменде бет журналының соңғы жазбасы көрсетілген:",
+       "cascadeprotectedwarning": "<strong>Ескерту:</strong> Бұл бет қорғалған, сондықтан тек әкімші құқықтары бар қатысушылар ғана өңдей алады, себебі бұл келесі «баулы қорғауы» бар {{PLURAL:$1|бетіне|беттеріне}} кірістілген бет:",
+       "titleprotectedwarning": "</strong>Ескерту: Бұл бет атауы бастаудан қорғалған, сондықтан [[Special:ListGroupRights|арнайы құқықтары]] бар қатысушылар бұндай атаумен бетті бастай алады.</strong>\nТөменде бет журналының соңғы жазбасы көрсетілген:",
        "templatesused": "Бұл бетте қолданылған {{PLURAL:$1|үлгі|үлгілер}}:",
        "templatesusedpreview": "Беттің қарап шығуында қолданылған {{PLURAL:$1|үлгі|үлгілер}}:",
        "templatesusedsection": "Бұл бөлімде қолданылған {{PLURAL:$1|үлгі|үлгілер}}:",
        "template-protected": "(қорғалған)",
        "template-semiprotected": "(жартылай қорғалған)",
        "hiddencategories": "Бұл бет {{PLURAL:$1|1 жасырын санаттың|$1 жасырын санаттың}} мүшесі:",
-       "nocreatetext": "{{SITENAME}} жобасында жаңа бет бастауы шектелген.\nКері қайтып бар бетті өңдеуіңізге болады, немесе [[Special:UserLogin|кіруіңізге не тіркелуіңізге]] болады.",
-       "nocreate-loggedin": "Жаңа бет бастауға рұқсатыңыз жоқ.",
+       "nocreatetext": "{{SITENAME}} жобасында жаңа беттерді бастау мүмкіндігі шектелген.\nКері қайта аласыз және бар бетті өңдей аласыз немесе [[Special:UserLogin|кіріңіз не тіркеліңіз]].",
+       "nocreate-loggedin": "Жаңа беттерді бастауға рұқсатыңыз жоқ.",
        "sectioneditnotsupported-title": "Бөлімдерді өңдеу қолдамайды",
-       "sectioneditnotsupported-text": "Бұл бетте бөлімдерді өңдеуді қолдамайды.",
+       "sectioneditnotsupported-text": "Бұл бетте бөлім өңдеуін қолдамайды.",
        "permissionserrors": "Рұқсат қатесі",
-       "permissionserrorstext": "Ð\91ұнÑ\8b Ñ\96Ñ\81Ñ\82еÑ\83ге Ñ\80Ò±Ò\9bÑ\81аÑ\82Ñ\8bÒ£Ñ\8bз Ð¶Ð¾Ò\9b, ÐºÐµÐ»ÐµÑ\81Ñ\96 {{PLURAL:$1|Ñ\81ебеп|Ñ\81ебепÑ\82еÑ\80}} Ð±Ð¾Ð¹Ñ\8bнÑ\88а:",
-       "permissionserrorstext-withaction": "$2 дегенге рұқсатыңыз жоқ, келесі {{PLURAL:$1|себеп|себептер}} бойынша:",
-       "recreate-moveddeleted-warn": "'''Назар аудар: Алдында жойылған бетті қайта бастайын деп тұрсыз.'''\n\nБұл бетті жаңадан бастаудың орынды екеніне көз жеткізіңіз.\nТөменде бұл бетке қатысты жою және жылжыту журналы көрсетілген:",
+       "permissionserrorstext": "Ð\9aелеÑ\81Ñ\96 {{PLURAL:$1|Ñ\81ебеп|Ñ\81ебепÑ\82еÑ\80}} Ð±Ð¾Ð¹Ñ\8bнÑ\88а Ð±Ò±Ð½Ñ\8b Ñ\96Ñ\81Ñ\82еÑ\83ге Ñ\80Ò±Ò\9bÑ\81аÑ\82Ñ\8bÒ£Ñ\8bз Ð¶Ð¾Ò\9b:",
+       "permissionserrorstext-withaction": "Келесі {{PLURAL:$1|себеп|себептер}} бойынша $2 дегенге рұқсатыңыз жоқ:",
+       "recreate-moveddeleted-warn": "<strong>Назар аударыңыз: Алдында жойылған бетті қайта бастамақшысыз.</strong>\n\nБұл бетті жаңадан бастаудың орынды екеніне көз жеткізіңіз.\nТөменде бұл бетке қатысты жою және жылжыту журналы ыңғайлылық үшін көрсетілген:",
        "moveddeleted-notice": "Бұл бет жойылған.\nТөменде бұл бетке қатысты жою және жылжыту журналы көрсетілген:",
        "log-fulllog": "Толық журналды қарау",
-       "edit-hook-aborted": "Түзету ілмек арқылы болдырмады.\nҚосымша түсіндірмелер көрсетілмеген.",
-       "edit-gone-missing": "Ð\91еÑ\82Ñ\82Ñ\96 Ð¶Ð°Ò£Ð°Ñ\80Ñ\82Ñ\83 Ð¼Ò¯Ð¼ÐºÑ\96н ÐµÐ¼ÐµÑ\81.\nÐ\9cүмкÑ\96н, Ð±Ò±Ð» Ð±ÐµÑ\82 Ð¶Ð¾Ð¹Ñ\8bлÒ\93ан.",
+       "edit-hook-aborted": "Өңдеме ілмек арқылы болдырмады.\nҚандай да бір түсіндірме берілмеген.",
+       "edit-gone-missing": "Ð\91еÑ\82Ñ\82Ñ\96 Ð¶Ð°Ò£Ð°Ñ\80Ñ\82Ñ\83 Ð¼Ò¯Ð¼ÐºÑ\96н ÐµÐ¼ÐµÑ\81.\nÐ\91ұл Ð±ÐµÑ\82 Ð¶Ð¾Ð¹Ñ\8bлÒ\93ан Ð±Ð¾Ð»Ñ\83 Ð¼Ò¯Ð¼ÐºÑ\96н.",
        "edit-conflict": "Өңдемелер қақтығысы.",
        "edit-no-change": "Өңдемеңіз мәтінге өзгеріс жасамағандықтан еленілмеді.",
+       "postedit-confirmation-created": "Бетті бастадыңыз.",
+       "postedit-confirmation-restored": "Бетті қалпына келтірдіңіз.",
        "postedit-confirmation-saved": "Өңдемеңіз сақталды.",
-       "edit-already-exists": "Ð\96аңа Ð±ÐµÑ\82 Ð¶Ð°Ñ\81ау мүмкін емес.\nОл әлдеқашан бар.",
-       "defaultmessagetext": "Әдепкі мәтіні",
+       "edit-already-exists": "Ð\96аңа Ð±ÐµÑ\82 Ð±Ð°Ñ\81Ñ\82ау мүмкін емес.\nОл әлдеқашан бар.",
+       "defaultmessagetext": "Әдепкі хабарлама мәтіні",
        "invalid-content-data": "Жарамсыз дерек мазмұны",
-       "content-not-allowed-here": "\"$1\" контенті [[$2]] бетінде рұқсат етілмейді.",
-       "editwarning-warning": "Ð\91ұл Ð±ÐµÑ\82Ñ\82Ñ\96 Ò\9bалдÑ\8bÑ\80Ñ\81аңÑ\8bз қандай да бір жасаған өзгерістеріңізді жоғалтуыңыз мүмкін. \nЕгер сiз кіріп отырсаңыз баптауларыңыздағы «{{int:prefs-editing}}» бөлімінен бұл ескертуді өшіре аласыз.",
+       "content-not-allowed-here": "«$1» мазмұны [[$2]] бетінде рұқсат етілмейді.",
+       "editwarning-warning": "Ð\91ұл Ð±ÐµÑ\82Ñ\82Ñ\96 Ò\9bалдÑ\8bÑ\80Ñ\8bп ÐºÐµÑ\82Ñ\81еңÑ\96з қандай да бір жасаған өзгерістеріңізді жоғалтуыңыз мүмкін. \nЕгер сiз кіріп отырсаңыз баптауларыңыздағы «{{int:prefs-editing}}» бөлімінен бұл ескертуді өшіре аласыз.",
        "editpage-notsupportedcontentformat-title": "Контент форматы қолдамайды",
-       "content-model-wikitext": "Уикимәтін",
+       "content-model-wikitext": "уикимәтін",
        "content-model-text": "қалыпты мәтін",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "expensive-parserfunction-warning": "'''Ескерту:''' Бұл бетте тым көп шығыс алатын құрылым талдатқыш жетелерінің қоңырау шалулары бар.\n\nБұл $2  {{PLURAL:$2|call|calls}} шамасынан кем болуы жөн, осы арада {{PLURAL:$1|қазір $1 call|қазір $1 calls}}.",
+       "expensive-parserfunction-warning": "<strong>Ескерту:</strong> Бұл бет тым көп шығыс алатын құрылым талдатқыш жетелер шақыруынан тұрады.\n\nБұл $2  {{PLURAL:$2|шақыру|шақырулар}} шамасынан кем болуы керек, осы арада {{PLURAL:$1|қазір $1 шақыру|қазір $1 шақыру}}.",
        "expensive-parserfunction-category": "Шығыс алатын құрылым талдатқыш жетелерінің тым көп шақырымы бар беттер",
-       "post-expand-template-inclusion-warning": "Ескерту: Үлгі кірістіру өлшемі тым үлкен.\nКейбір үлгілер кірістірілмейді.",
+       "post-expand-template-inclusion-warning": "<strong>Ескерту:</strong> Үлгі кірістіру мөлшері тым үлкен.\nКейбір үлгілер кірістірілмейді.",
        "post-expand-template-inclusion-category": "Үлгі кірістірілген беттер өлшемі асып кетті",
        "post-expand-template-argument-warning": "<strong>Ескерту:</strong> Бұл бетте тым көп ұлғайтылған өлшемі болған ең кемінде бір үлгі дәлелі бар.\nБұның дәлелдерін қалдырып кеткен.",
        "post-expand-template-argument-category": "Үлгі дәлелдерін қалдырып кеткен беттер",
-       "undo-success": "Бұл өңдеме жоққа шығарылуы мүмкін. Талабыңызды құптап алдын ала төмендегі салыстыруды тексеріп шығыңыз да, өңдемені жоққа шығаруын бітіру үшін төмендегі өзгерістерді сақтаңыз.",
+       "parser-template-loop-warning": "Үлгі тұйығы кездесті: [[$1]]",
+       "undo-success": "Бұл өңдемені жоққа шығарымақшысыз. Алдымен алдын-ала төмендегі салыстыруды тексеріп шығыңыз да бетті сақтаңыз.",
        "undo-failure": "Бұл өңдеме жоққа шығарылмайды, себебі арада қақтығысты өңдемелер бар.",
-       "undo-norev": "Бұл өңдеме жоққа шығарылмайды, себебі бұл жоқ немесе жойылған.",
+       "undo-norev": "Ð\91ұл Ó©Ò£Ð´ÐµÐ¼Ðµ Ð¶Ð¾Ò\9bÒ\9bа Ñ\88Ñ\8bÒ\93аÑ\80Ñ\8bлмайдÑ\8b, Ñ\81ебебÑ\96 Ð±Ò±Ð» Ð±ÐµÑ\82 Ð¶Ð¾Ò\9b Ð½ÐµÐ¼ÐµÑ\81е Ð¶Ð¾Ð¹Ñ\8bлÒ\93ан.",
        "undo-nochange": "Өңдеме әлдеқашан жоққа шығарылғаны анықталды.",
-       "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|т]]) істеген нөмір $1 түзетуін [[Project:Жоққа шығару|жоққа шығарды]]",
+       "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|т]]) істеген нөмір $1 түзетуін жоққа шығарды",
        "undo-summary-username-hidden": "$1 нұсқасын жасырылған қатысушы жоққа шығарды",
-       "cantcreateaccounttitle": "Ð\96аңа Ñ\82іркелгі жасалмады",
+       "cantcreateaccounttitle": "Тіркелгі жасалмады",
        "cantcreateaccount-text": "Бұл IP мекенжайдан (<strong>$1</strong>) жаңа тіркелгі жасауын [[User:$3|$3]] бұғаттаған.\n\n$3 есімді қатысушының келтіріген себебі: <em>$2</em>",
-       "viewpagelogs": "Бұл бет үшін журнал оқиғаларын қарау",
-       "nohistory": "Мында бұл беттінің түзету тарихы жоқ.",
-       "currentrev": "Ең соңғы түзету",
-       "currentrev-asof": "$1 кезіндегі нұсқасы",
-       "revisionasof": "$1 кезіндегі түзету",
-       "revision-info": "$1 кезіндегі $2 істеген түзету",
-       "previousrevision": "← Ескі түзетулер",
-       "nextrevision": "Жаңа түзетулер →",
-       "currentrevisionlink": "Ағымдағы түзетулер",
-       "cur": "ағым.",
-       "next": "кел.",
-       "last": "соң.",
+       "cantcreateaccount-range-text": "'''$1''' ауқымындағы IP мекенжайдан сіздің IP мекенжайыңыз да кіреді ('''$4''') жаңа тіркелгі жасауын [[User:$3|$3]] бұғаттаған.\n\n$3 есімді қатысушының келтіріген себебі: ''$2'",
+       "viewpagelogs": "Бұл беттің журнал оқиғаларын қарау",
+       "nohistory": "Мында бұл беттің өңделу тарихы жоқ.",
+       "currentrev": "Ең соңғы нұсқа",
+       "currentrev-asof": "$1 кезіндегі ең соңғы нұсқасы",
+       "revisionasof": "$1 кезіндегі нұсқасы",
+       "revision-info": "$1 кезіндегі $2 істеген нұсқа",
+       "previousrevision": "← Ескілеу нұсқасы",
+       "nextrevision": "Жаңалау нұсқасы →",
+       "currentrevisionlink": "Ең соңғы нұсқасы",
+       "cur": "ағым",
+       "next": "келесі",
+       "last": "соңғы",
        "page_first": "алғашқысына",
        "page_last": "соңғысына",
-       "histlegend": "Айырмасын бөлектеу: салыстырмақ нұсқаларының қосу көздерін белгілеп <Enter> пернесін басыңыз, немесе төмендегі батырманы нұқыңыз.<br />\nШартты белгілер: (ағым.) = ағымдық нұсқамен айырмасы,\n(соң.) = алдыңғы нұсқамен айырмасы, ш = шағын өңдеме",
+       "histlegend": "Айырмасын таңдау: Салыстырмақ нұсқаларының қосу көздерін белгілеп <Enter> пернесін басыңыз немесе төмендегі батырманы басыңыз.<br />\nШартты белгілер: <strong>({{int:cur}})</strong> = ең соңғы нұсқамен айырмасы,\n<strong>({{int:last}})</strong> = алдыңғы нұсқамен айырмасы, <strong>{{int:minoreditletter}}</strong> = шағын өңдеме",
        "history-fieldset-title": "Тарихынан іздеу",
        "history-show-deleted": "Жойылғанын ғана көрсету",
        "histfirst": "Ең ескісіне",
        "histlast": "Ең жаңасына",
        "historysize": "({{PLURAL:$1|1 байт|$1 байт}})",
        "historyempty": "(бос)",
-       "history-feed-title": "Түзету тарихы",
-       "history-feed-description": "Мына уикидегі бұл беттің түзету тарихы",
+       "history-feed-title": "Өңделу тарихы",
+       "history-feed-description": "Мына уикидегі бұл беттің өңделу тарихы",
        "history-feed-item-nocomment": "$2 кезіндегі $1 деген",
-       "history-feed-empty": "Сұратылған бет жоқ болды.\nОл мына уикиден жойылған, немесе атауы ауыстырылған.\nОсыған қатысты жаңа беттерді [[Special:Search|бұл уикиден іздеуді]] байқап көріңіз.",
-       "rev-deleted-comment": "(өңдеу түйіндемесі аласталды)",
-       "rev-deleted-user": "(қатысушы аты аласталды)",
-       "rev-deleted-event": "(әрекет журналы аласталды)",
-       "rev-deleted-user-contribs": "[Қатысушы аты немесе IP-мекенжайы жойылған — өңдемелері қатысушы үлесі бетінен жасырылған]",
-       "rev-deleted-text-permission": "Бұл беттің түзетуі (нұсқасы) <strong>жойылған</strong>.\n[{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналында] егжей-тегжейін таба аласыз.",
-       "rev-deleted-text-unhide": "Бұл беттің түзетуі (нұсқасы) <strong>жойылған</strong>.\n[{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналында] егжей-тегжейін таба аласыз.\nЕгер сіз жалғастырсаңыз [$1 бұл нұсқаны көре] аласыз.",
-       "rev-deleted-text-view": "Бұл беттің түзетуі (нұсқасы) <strong>жойылған</strong>.\n[{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналында] егжей-тегжейін таба аласыз.",
-       "rev-deleted-no-diff": "Бұл айырмашылықты көре алмайсыз себебі бір түзетуі (нұсқасы) <strong>жойылған</strong>.\n[{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналында] егжей-тегжейін таба аласыз.",
+       "history-feed-empty": "Сұратылған бет жоқ.\nОл бұл уикиден жойылған немесе атауы өзгертілген.\nОсыған қатысты жаңа беттерді [[Special:Search|бұл уикиден іздеуді]] байқап көріңіз.",
+       "rev-deleted-comment": "(өңдеу түйіндемесін аластады)",
+       "rev-deleted-user": "(қатысушы есімін аластады)",
+       "rev-deleted-event": "(әрекет журналын аластады)",
+       "rev-deleted-user-contribs": "[Қатысушы аты немесе IP мекенжайы жойылған — өңдемелері қатысушы үлесі бетінен жасырылған]",
+       "rev-deleted-text-permission": "Бұл беттің түзетуі (нұсқасы) <strong>жойылған</strong>.\n[{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Жою журналынан] егжей-тегжейін таба аласыз.",
+       "rev-deleted-text-unhide": "Бұл беттің түзетуі (нұсқасы) <strong>жойылған</strong>.\n[{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Жою журналынан] егжей-тегжейін таба аласыз.\nЕгер сіз жалғастырсаңыз [$1 бұл нұсқаны көре] аласыз.",
+       "rev-suppressed-text-unhide": "Бұл беттің түзетуі (нұсқасы) <strong>жасырылған</strong>.\n[{{fullurl:{{#special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Жасыру журналынан] егжей-тегжейін таба аласыз.\nЕгер сіз жалғастырсаңыз [$1 бұл нұсқаны көре] аласыз.",
+       "rev-deleted-text-view": "Бұл беттің түзетуі (нұсқасы) <strong>жойылған</strong>.\n[{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Жою журналынан] егжей-тегжейін таба аласыз.",
+       "rev-suppressed-text-view": "Бұл беттің түзетуі (нұсқасы) <strong>жасырылған</strong>.\n[{{fullurl:{{#special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Жасыру журналынан] егжей-тегжейін таба аласыз.",
+       "rev-deleted-no-diff": "Бұл айырмашылықты көре алмайсыз себебі бір түзетуі (нұсқасы) <strong>жойылған</strong>.\n[{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Жою журналынан] егжей-тегжейін таба аласыз.",
        "rev-suppressed-no-diff": "Бұл айырмашылықты көре алмайсыз себебі бір түзетуі (нұсқасы) <strong>жойылған</strong>.",
-       "rev-deleted-unhide-diff": "Бір түзетуі (нұсқасы) <strong>жойылған</strong>.\nегжей-тегжейін [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналынан] таба аласыз.\nЕгер жалғастырсаңыз [$1 бұл айырмашылықты] көре аласыз.",
+       "rev-deleted-unhide-diff": "Бір түзетуі (нұсқасы) <strong>жойылған</strong>.\nЕгжей-тегжейін [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналынан] таба аласыз.\nЕгер жалғастырсаңыз [$1 бұл айырмашылықты] көре аласыз.",
+       "rev-suppressed-unhide-diff": "Бір түзетуі (нұсқасы) <strong>жасырылған</strong>.\nЕгжей-тегжейін [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналынан] таба аласыз.\nЕгер жалғастырсаңыз [$1 бұл айырмашылықты] көре аласыз.",
+       "rev-deleted-diff-view": "Бұл нұсқалар айырмасының бір нұсқасы <strong>жойылған</strong>.\n[{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Жою журналынан] егжей-тегжейін таба аласыз.",
+       "rev-suppressed-diff-view": "Бұл нұсқалар айырмасының бір нұсқасы <strong>жасырылған</strong>.\n[{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Жасыру журналынан] егжей-тегжейін таба аласыз.",
        "rev-delundel": "көрінісін өзгерту",
        "rev-showdeleted": "көрсету",
-       "revisiondelete": "ТүзеÑ\82Ñ\83леÑ\80дÑ\96 жою/жоюды болдырмау",
+       "revisiondelete": "Ð\9dÒ±Ñ\81Ò\9bалаÑ\80дÑ\8b жою/жоюды болдырмау",
        "revdelete-nooldid-title": "Нысана түзету жарамсыз",
-       "revdelete-nooldid-text": "Бұл жетені орындау үшін нысана түзетуін/түзетулерін келтірілмепсіз,\nкелтірілген түзету жоқ, не ағымдық түзетуді жасыру үшін әрекеттеніп көрдіңіз.",
+       "revdelete-nooldid-text": "Бұл жетені орындау үшін нысана түзету(лер)ін келтірілмепсіз,\nкелтірілген нұсқа жоқ немесе ағымдық түзетуді жасыру үшін әрекеттеніп көрдіңіз.",
+       "revdelete-no-file": "Көрсетілген файл жоқ",
+       "revdelete-show-file-confirm": "$2 $3 кезіндегі «<nowiki>$1</nowiki>» файлының жойылған нұсқаларын көргіңіз келе ме?",
        "revdelete-show-file-submit": "Иә",
+       "revdelete-selected-text": "[[:$2]] бетінің {{PLURAL:$1|таңдалған нұсқасы|таңдалған нұсқалары}} :",
+       "revdelete-selected-file": "[[:$2]] дегеннің {{PLURAL:$1|таңдалған файл нұсқасы|таңдалған файл нұсқалары}} :",
        "logdelete-selected": "Бөлектенген {{PLURAL:$1|журнал оқиғасы|журнал оқиғалары}}:",
        "revdelete-legend": "Көрініс тиымдарын қою:",
        "revdelete-hide-text": "Түзету мәтінін жасыр",
        "searchmenu-exists": "'''Бұл жобада «[[:$1]]» деген бет бар.'''",
        "searchmenu-new": "<strong>«[[:$1]]» осындай атпен бұл уикиде бетті бастау!</strong> {{PLURAL:$2|0=|Іздегеніңіз бойынша табылған беттер:|Табылған іздеу нәтижелері:}}",
        "searchprofile-articles": "Негізгі беттер",
-       "searchprofile-project": "Анықтама және жоба беттері",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Барлық жерде",
        "searchprofile-advanced": "Кеңейтілген",
        "searchprofile-articles-tooltip": "$1 іздеу",
-       "searchprofile-project-tooltip": "$1 іздеу",
        "searchprofile-images-tooltip": "Файлдарды іздеу",
        "searchprofile-everything-tooltip": "Барлық беттерден іздеу (талқылау беттерін қоса)",
        "searchprofile-advanced-tooltip": "Әдепкі есім кеңістігінен іздеу",
        "search-interwiki-default": "$1 нәтиже:",
        "search-interwiki-more": "(көбірек)",
        "search-relatedarticle": "Қатысты",
-       "searcheverything-enable": "Барлық есім кеңістігінен іздеу",
        "searchrelated": "қатысты",
        "searchall": "барлық",
        "showingresults": "Төменде нөмір '''$2''' орнынан бастап барынша '''$1''' нәтиже көрсетіледі.",
        "allowemail": "Басқадан хат қабылдауын қосу",
        "prefs-searchoptions": "Іздеу бапталымдары",
        "prefs-namespaces": "Есім кеңістіктері",
-       "defaultns": "Мына есім кеңістіктерінде басқаша іздеу:",
        "default": "әдепкі",
        "prefs-files": "Файлдар",
        "prefs-custom-css": "CSS өзгертпелі",
        "right-sendemail": "Басқа қатысушыларға е-пошта жіберу",
        "right-passwordreset": "Өзгерген құпия сөз арқылы хабарламаларды шолу",
        "newuserlogpage": "Тіркелу журналы",
-       "newuserlogpagetext": "Бұл қатысушы тіркелгі жасау журналы",
+       "newuserlogpagetext": "Бұл қатысушы тіркелу журналы",
        "rightslog": "Қатысушы құқықтары журналы",
        "rightslogtext": "Бұл қатысушы құқықтарын өзгерту журналы.",
        "action-read": "Осы бетті оқу",
        "recentchanges-label-unpatrolled": "Бұл өңдеме әлі тексеруден өтпеді.",
        "recentchanges-label-plusminus": "Байт бойынша беттің өзгеріс өлшемі",
        "recentchanges-legend-heading": "'''Шартты белгілер:'''",
-       "recentchanges-legend-newpage": "(қ: [[Special:NewPages|бөлек бетте]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (қ: [[Special:NewPages|бөлек бетте]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "Төменде <strong>$2</strong> кезінен бергі (<strong>$1</strong> өңдемеге дейін) өзгерістер көрсетіледі.",
        "rclistfrom": "$2, $3 кезінен бергі жаңа өзгерістерді көрсет.",
        "rcshowhidemine": "Өңдемелерімді $1",
        "rcshowhidemine-show": "көрсету",
        "rcshowhidemine-hide": "жасыру",
-       "rclinks": "Соңғы $2 күнде болған, соңғы $1 өзгерісті көрсет<br />$3",
+       "rclinks": "Соңғы $2 күнде болған соңғы $1 өзгерісті көрсет<br />$3",
        "diff": "айырм",
        "hist": "тарихы",
        "hide": "жасыру",
        "upload_directory_read_only": "Жүктеу қалтасына ($1) веб-сервер жаза алмайды.",
        "uploaderror": "Жүктеу қатесі",
        "upload-recreate-warning": "'''Ескету: Бұл атаумен файл жойылған немесе жылжытылған'''\n\nThe deletion and move log for this page are provided here for convenience:",
-       "uploadtext": "ТөмендегÑ\96 Ð¿Ñ\96Ñ\88Ñ\96ндÑ\96 Ñ\84айлдаÑ\80дÑ\8b Ð¶Ò¯ÐºÑ\82еÑ\83 Ò¯Ñ\88Ñ\96н Ò\9bолданÑ\8bÒ£Ñ\8bз.\nÐ\90лдÑ\8bнда Ð¶Ò¯ÐºÑ\82елген Ñ\84айлдаÑ\80дÑ\8b Ò\9bаÑ\80аÑ\83 Ð½Ðµ Ñ\96здеÑ\83 Ò¯Ñ\88Ñ\96н [[Special:FileList|жүкÑ\82елген Ñ\84айлдаÑ\80 Ñ\82Ñ\96зÑ\96мÑ\96не]] Ð±Ð°Ñ\80Ñ\8bÒ£Ñ\8bз. Ð¡Ð¾Ð½Ð´Ð°Ð¹-аÒ\9b Ñ\84айлдаÑ\80дÑ\8bÒ£ Ð¶Ò¯ÐºÑ\82елÑ\83Ñ\96 [[Special:Log/upload|жүкÑ\82елÑ\96 Ð¶Ñ\83Ñ\80налÑ\8bна]], Ð°Ð» Ð¶Ð¾Ð¹Ñ\8bлÒ\93ан Ñ\84айлдаÑ\80 [[Special:Log/delete|жойÑ\8bлÑ\83 Ð¶Ñ\83Ñ\80налÑ\8bна]] Ð¶Ð°Ð·Ñ\8bладÑ\8b.\n\nСÑ\83Ñ\80еÑ\82Ñ\82Ñ\96 Ð¼Ð°Ò\9bалаÒ\93а Ò\9bоÑ\81Ñ\83 Ò¯Ñ\88Ñ\96н ÐºÐµÐ»ÐµÑ\81Ñ\96 Ñ\82Ó\99Ñ\81Ñ\96лдеÑ\80дÑ\96 Ò\9bолданÑ\8bÒ£Ñ\8bз:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' Ñ\84айлдÑ\8bÒ£ Ñ\82олÑ\8bÒ\9b Ð½Ò±Ñ\81Ò\9bаÑ\81Ñ\8bн Ð¾Ñ\80наÑ\82Ñ\83 Ò¯Ñ\88Ñ\96н;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|Ñ\81Ñ\83Ñ\80еÑ\82 Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bбÑ\8b]]</nowiki></code>''' 200px ÐºÑ\96Ñ\88Ñ\96Ñ\80ейÑ\82Ñ\96лген Ñ\84айлдÑ\8b Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bбÑ\8bн Ò\9bоÑ\81Ñ\8bп Ñ\81ол Ð¶Ð°Ò\9bÒ\9bа Ð¾Ñ\80налаÑ\81Ñ\82Ñ\8bÑ\80Ñ\83;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' Ñ\82ек Ñ\84айлÒ\93а Ñ\81Ñ\96лÑ\82еме Ð¶Ð°Ñ\81аÑ\83 Ò¯Ñ\88Ñ\96н.",
+       "uploadtext": "ТөмендегÑ\96 Ð¿Ñ\96Ñ\88Ñ\96ндÑ\96 Ñ\84айлдаÑ\80дÑ\8b Ð¶Ò¯ÐºÑ\82еÑ\83 Ò¯Ñ\88Ñ\96н Ò\9bолданÑ\8bÒ£Ñ\8bз.\nÐ\90лдÑ\8bнда Ð¶Ò¯ÐºÑ\82елген Ñ\84айлдаÑ\80дÑ\8b Ò\9bаÑ\80аÑ\83 Ð½Ðµ Ñ\96здеÑ\83 Ò¯Ñ\88Ñ\96н [[Special:FileList|жүкÑ\82елген Ñ\84айлдаÑ\80 Ñ\82Ñ\96зÑ\96мÑ\96не]] Ð±Ð°Ñ\80Ñ\8bÒ£Ñ\8bз. Ð¡Ð¾Ð½Ð´Ð°Ð¹-аÒ\9b Ñ\84айлдаÑ\80дÑ\8bÒ£ Ð¶Ò¯ÐºÑ\82елÑ\83Ñ\96 [[Special:Log/upload|жүкÑ\82елÑ\83 Ð¶Ñ\83Ñ\80налÑ\8bна]], Ð°Ð» Ð¶Ð¾Ð¹Ñ\8bлÒ\93ан Ñ\84айлдаÑ\80 [[Special:Log/delete|жойÑ\8bлÑ\83 Ð¶Ñ\83Ñ\80налÑ\8bна]] Ð¶Ð°Ð·Ñ\8bладÑ\8b.\n\nФайлдÑ\8b Ð¼Ð°Ò\9bалаÒ\93а Ò\9bоÑ\81Ñ\83 Ò¯Ñ\88Ñ\96н ÐºÐµÐ»ÐµÑ\81Ñ\96 Ñ\82Ó\99Ñ\81Ñ\96лдеÑ\80дÑ\96 Ò\9bолданÑ\8bÒ£Ñ\8bз:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> Ñ\84айлдÑ\8bÒ£ Ñ\82олÑ\8bÒ\9b Ð½Ò±Ñ\81Ò\9bаÑ\81Ñ\8bн Ð¾Ñ\80наÑ\82Ñ\83 Ò¯Ñ\88Ñ\96н;\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|Ñ\81Ñ\83Ñ\80еÑ\82 Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bбÑ\8b]]</nowiki></code></strong> 200px ÐºÑ\96Ñ\88Ñ\96Ñ\80ейÑ\82Ñ\96лген Ñ\84айлдÑ\8b Â«Ñ\84айл Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bбÑ\8b» Ñ\81ипаÑ\82Ñ\82амаÑ\81Ñ\8bн Ò\9bоÑ\81Ñ\8bп Ñ\81ол Ð¶Ð°Ò\9bÒ\9bа Ð¾Ñ\80налаÑ\81Ñ\82Ñ\8bÑ\80Ñ\83;\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> Ñ\84айл ÐºÓ©Ñ\80Ñ\81еÑ\82Ñ\96лÑ\83Ñ\96нÑ\81Ñ\96з Ñ\84айлÒ\93а Ñ\82Ñ\96келеÑ\83 Ñ\81Ñ\96лÑ\82еÑ\83 Ò¯Ñ\88Ñ\96н",
        "upload-permitted": "Рұқсат етілген файл түрлері: $1.",
        "upload-preferred": "Ұнамды файл түрлері $1.",
        "upload-prohibited": "Рұқсат етілмеген файл түрлері: $1.",
        "booksources": "Кітап қайнарлары",
        "booksources-search-legend": "Кітап қайнарларын іздеу",
        "booksources-go": "Өту",
-       "booksources-text": "Төменде жаңа және қолданған кітаптар сататын тораптарының сілтемелері тізімделген. Бұл тораптарда ізделген кітаптар туралы былайғы ақпарат болуға мүмкін.",
+       "booksources-text": "Төменде жаңа және қолданған кітаптар сататын тораптарының сілтемелері тізімделген және ізделген кітаптар туралы қосымша ақпарат болуы мүмкін:",
        "specialloguserlabel": "Орындаушы:",
        "speciallogtitlelabel": "Нысана (атауы немесе қатысушы):",
        "log": "Журналдар",
        "uctop": "(соңғы)",
        "month": "Мына айдан (және ертеректен):",
        "year": "Мына жылдан (және ертеректен):",
-       "sp-contributions-newbies": "Тек жаңа тіркелгіден жасаған үлестерді көрсету",
+       "sp-contributions-newbies": "Тек жаңа тіркелгендер үлестерін көрсету",
        "sp-contributions-newbies-sub": "Жаңа тіркелгендер үшін",
-       "sp-contributions-newbies-title": "Жаңа тіркелгендер үшін қатысушы үлестері",
+       "sp-contributions-newbies-title": "Жаңа тіркелген қатысушылар үлесі",
        "sp-contributions-blocklog": "бұғатталу журналы",
        "sp-contributions-deleted": "жойылған үлесі",
        "sp-contributions-uploads": "жүктеулері",
        "linkshere": "'''[[:$1]]''' дегенге мына беттер сілтейді:",
        "nolinkshere": "'''[[:$1]]''' дегенге еш бет сілтемейді.",
        "nolinkshere-ns": "Таңдалған есім кеңістігінде '''[[:$1]]''' дегенге ешқандай бет сілтемейді.",
-       "isredirect": "айдаÑ\82у беті",
+       "isredirect": "баÒ\93Ñ\8bÑ\82Ñ\82ау беті",
        "istemplate": "кірікбет",
        "isimage": "файл сілтемесі",
        "whatlinkshere-prev": "{{PLURAL:$1|алдыңғы|алдыңғы $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|келесі|келесі $1}}",
        "whatlinkshere-links": "← сілтемелер",
-       "whatlinkshere-hideredirs": "айдаÒ\93Ñ\8bÑ\88Ñ\82арды $1",
-       "whatlinkshere-hidetrans": "кірікбеттерді $1",
+       "whatlinkshere-hideredirs": "Ð\91аÒ\93Ñ\8bÑ\82Ñ\82аÑ\83Ñ\88Ñ\8bларды $1",
+       "whatlinkshere-hidetrans": "кіріcтірілген беттерді $1",
        "whatlinkshere-hidelinks": "сілтемелерді $1",
        "whatlinkshere-hideimages": "файл сілтемелерін $1",
        "whatlinkshere-filters": "Сүзгілер",
        "tooltip-preferences-save": "Бапталымдарыңызды сақтау",
        "tooltip-summary": "Қысқаша түйіндемесін енгізіңіз",
        "common.css": "/* Мында орналастырылған CSS барлық мәнерлерде қолданылады */",
-       "cologneblue.css": "/* Мында орналастырылған CSS тек «Көлн зеңгірлігі» (cologneblue) мәнерін пайдаланушыларына ықпал етеді skin */",
        "monobook.css": "/* Мында орналастырылған CSS тек «Дара кітап» (monobook) мәнерін пайдаланушыларына ықпал етеді */",
-       "modern.css": "/* Мында орналастырылған CSS тек «Заманауи» (modern) мәнерін пайдаланушыларына ықпал етеді */",
        "common.js": "/* Мындағы әртүрлі JavaScript кез келген бет қотарылғанда барлық пайдаланушылар үшін жегіледі. */",
-       "cologneblue.js": "/* Мындағы JavaScript тек «Көлн зеңгірлігі» (cologneblue) мәнерін пайдаланушылар үшін жегіледі */",
        "monobook.js": "/* Мындағы JavaScript тек «Дара кітап» (monobook) мәнерін пайдаланушылар үшін жегіледі */",
-       "modern.js": "/* Мындағы JavaScript тек «Заманауи» (modern) мәнерін пайдаланушылар үшін жегіледі */",
        "anonymous": "{{SITENAME}} тіркелгісіз {{PLURAL:$1|қатысушысы|қатысушылары}}",
        "siteuser": "{{SITENAME}} қатысушы $1",
        "anonuser": "{{SITENAME}} анонимді қатысушы: $1",
        "pageinfo-category-pages": "Беттер саны",
        "pageinfo-category-subcats": "Санатшалар саны",
        "pageinfo-category-files": "Файлдар саны",
-       "skinname-cologneblue": "Көк зеңгірлігі (cologneblue)",
        "skinname-monobook": "Жеке кітап (monobook)",
-       "skinname-modern": "Заманауи (modern)",
        "markaspatrolleddiff": "Зерттелді деп белгілеу",
        "markaspatrolledtext": "Бұл бетті тексерілді деп белгілеу",
        "markedaspatrolled": "Тексерілді деп белгіленді",
        "specialpages-note": "* Қалпты арнайы беттер.\n* <span class==\"mw-specialpagerestricted\">Шектелген арнайы беттер.</span>",
        "specialpages-group-maintenance": "Техникалық талқылау есептері",
        "specialpages-group-other": "Тағы басқа арнайы беттер",
-       "specialpages-group-login": "Кіру / тіркелгі жасау",
+       "specialpages-group-login": "Кіру / тіркелу",
        "specialpages-group-changes": "Жуықтағы өзгерістер мен журналдар",
        "specialpages-group-media": "Медиа баянаттары және жүктелгендер",
        "specialpages-group-users": "Қатысушылар және олардың құқықтары",
        "logentry-move-move-noredirect": "$1 $3 бетін $4 бетіне {{GENDER:$2|жылжытты}} (айдатқыш қалдырмады)",
        "logentry-move-move_redir": "$1 $3 бетін $4 деген айдатқыш үстіне {{GENDER:$2|жылжытты}}",
        "logentry-move-move_redir-noredirect": "$1 $3 бетін $4 деген айдатқыш үстіне {{GENDER:$2|жылжытты}} (айдатқыш қалдырылмады)",
-       "logentry-newusers-newusers": "$1 жаңадан қатысушы тіркелгісін {{GENDER:$2|жасады}}",
-       "logentry-newusers-create": "$1 жаңадан аккаунт тіркеді",
+       "logentry-newusers-newusers": "$1 жаңадан тіркелді",
+       "logentry-newusers-create": "$1 жаңадан тіркелді",
        "logentry-newusers-create2": "$1 $3 деген аккаунт {{GENDER:$2|тіркеді}}",
        "logentry-newusers-byemail": "$1 $3 деген аккаунт {{GENDER:$2|тіркеді}} және құпия сөзі е-пошта арқылы жіберілді",
        "logentry-newusers-autocreate": "$1 қатысушы аккаунтын автоматты түрде {{GENDER:$2|тіркеді}}",
index fa16fff..3585ccd 100644 (file)
        "searchmenu-exists": "* ទំព័រ '''[[$1]]'''",
        "searchmenu-new": "'''បង្កើតទំព័រ \"[[:$1]]\" នៅ​លើ​វិគី​នេះ!'''",
        "searchprofile-articles": "ទំព័រ​មាតិកា",
-       "searchprofile-project": "ជំនួយ និង​ទំព័រ​គម្រោង",
        "searchprofile-images": "ពហុ​ព័ត៌មាន",
        "searchprofile-everything": "ទាំងអស់",
        "searchprofile-advanced": "ថ្នាក់ខ្ពស់",
        "searchprofile-articles-tooltip": "ស្វែងរកក្នុង $1",
-       "searchprofile-project-tooltip": "ស្វែងរកក្នុង $1",
        "searchprofile-images-tooltip": "ស្វែងរកឯកសាររូបភាព",
        "searchprofile-everything-tooltip": "ស្វែងរកក្នុងខ្លឹមសារទាំងអស់(រួមបញ្ចូលទាំងទំព័រពិភាក្សា)",
        "searchprofile-advanced-tooltip": "ស្វែងរកក្នុងប្រភេទកំណត់ដោយអ្នកប្រើប្រាស់",
        "search-interwiki-default": "លទ្ធផលពី$1៖",
        "search-interwiki-more": "(បន្ថែមទៀត)",
        "search-relatedarticle": "ទាក់ទិន",
-       "searcheverything-enable": "ស្វែងរកនៅក្នុងលំហឈ្មោះទាំងអស់",
        "searchrelated": "ទាក់ទិន",
        "searchall": "ទាំងអស់",
        "showingresults": "ខាងក្រោមកំពុងបង្ហាញរហូតដល់ {{PLURAL:$1|'''១''' លទ្ឋផល|'''$1''' លទ្ឋផល}} ចាប់ផ្ដើមពីលេខ #'''$2'''។",
        "allowemail": "ទទួលអ៊ីមែលពីអ្នកប្រើប្រាស់ដទៃទៀត",
        "prefs-searchoptions": "ស្វែងរក",
        "prefs-namespaces": "ប្រភេទ",
-       "defaultns": "ស្វែងរក​ក្នុង​លំហឈ្មោះ​ទាំងនេះ​តាម​បែប​ផ្សេង៖",
        "default": "លំនាំដើម",
        "prefs-files": "ឯកសារ",
        "prefs-custom-css": "កែតំរូវ CSS",
        "prefs-emailconfirm-label": "បញ្ជាក់ទទួលស្គាល់អ៊ីមែល៖",
        "youremail": "អ៊ីមែល៖",
        "username": "{{GENDER:$1|អត្តនាម}}៖",
-       "uid": "អត្តលេខ{{GENDER:$1|អ្នកប្រើប្រាស់}}៖",
        "prefs-memberingroups": "{{GENDER:$2|សមាជិក}}ក្នុង{{PLURAL:$1|ក្រុម|ក្រុម}}៖",
        "prefs-registration": "កាលបរិច្ឆេទចុះឈ្មោះ៖",
        "yourrealname": "ឈ្មោះពិត៖",
        "recentchanges-label-unpatrolled": "ការកែប្រែនេះមិនទាន់ត្រូវបានល្បាតទេ",
        "recentchanges-label-plusminus": "ទំហំទំព័រត្រូវបានផ្លាស់ប្ដូរគិតជាចំនួនបៃ",
        "recentchanges-legend-heading": "''កំណត់សម្គាល់៖'''",
-       "recentchanges-legend-newpage": "(មើលផងដែរនូវ [[Special:NewPages|បញ្ជីទំព័រថ្មី]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (មើលផងដែរនូវ [[Special:NewPages|បញ្ជីទំព័រថ្មី]])",
        "rcnotefrom": "ខាងក្រោមនេះជាបន្លាស់ប្ដូរនានាគិតចាប់តាំងពី '''$2''' (បង្ហាញអតិបរមាចំនួន '''$1''')។",
        "rclistfrom": "បង្ហាញបន្លាស់ប្ដូរថ្មីៗចាប់តាំងពី $3 $2",
        "rcshowhideminor": "$1កំណែប្រែ​តិចតួច",
        "log-title-wildcard": "ស្វែងរកចំណងជើងចាប់ផ្តើមដោយឃ្លានេះ",
        "showhideselectedlogentries": "បង្ហាញ/លាក់កំណត់ហេតុដែលបានជ្រើសយក",
        "allpages": "ទំព័រទាំងអស់",
-       "alphaindexline": "ពីទំព័រ $1 ដល់ទំព័រ $2",
        "nextpage": "ទំព័របន្ទាប់ ($1)",
        "prevpage": "ទំព័រមុន ($1)",
        "allpagesfrom": "បង្ហាញទំព័រផ្ដើមដោយ៖",
        "tooltip-preferences-save": "រក្សាទុកចំណង់ចំណូលចិត្ត",
        "tooltip-summary": "សរសេរចំណារពន្យល់ថ្មីមួយ",
        "common.css": "/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើគ្រប់សំបកទាំងអស់ */",
-       "cologneblue.css": "/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Cologne Blue */",
        "monobook.css": "/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Monobook */",
-       "modern.css": "/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Modern */",
        "vector.css": "/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Vector */",
        "anonymous": "{{PLURAL:$1|user|អ្នកប្រើប្រាស់}}អនាមិកនៃ {{SITENAME}}",
        "siteuser": "អ្នកប្រើប្រាស់{{SITENAME}} $1",
        "pageinfo-category-pages": "ចំនួនទំព័រ",
        "pageinfo-category-subcats": "ចំនួនកូនចំណាត់ថ្នាក់ក្រុម",
        "pageinfo-category-files": "ចំនួនឯកសារ",
-       "skinname-cologneblue": "ទឹកអប់ខៀវ",
        "skinname-monobook": "សៀវភៅឯក",
-       "skinname-modern": "ទំនើប",
        "skinname-vector": "វ៉ិចទ័រ​​",
        "markaspatrolleddiff": "ចំណាំថាបានល្បាត",
        "markaspatrolledtext": "ចំណាំទំព័រនេះថាបានល្បាត",
index 8213653..cc392e1 100644 (file)
        "userexists": "ನೀವು ನೀಡಿದ ಸದಸ್ಯರ ಹೆಸರು ಆಗಲೆ ಬಳಕೆಯಲ್ಲಿದೆ. ದಯವಿಟ್ಟು ಬೇರೊಂದು ಹೆಸರನ್ನು ಆಯ್ಕೆ ಮಾಡಿ.",
        "loginerror": "ಲಾಗಿನ್ ದೋಷ",
        "createacct-error": "ಖಾತೆ ನಿರ್ಮಾಣ ತ್ರುಟಿ",
-       "createaccounterror": "ಖಾತೆ ನಿರ್ಮಾಣ ಮಾಡಲಿಕ್ಕೆ ಆಗಲಿಲ್ಲ.",
+       "createaccounterror": "$1 ಖಾತೆ ನಿರ್ಮಾಣ ಮಾಡಲಿಕ್ಕೆ ಆಗಲಿಲ್ಲ.",
        "nocookiesnew": "ನಿಮ್ಮ ಬಳಕೆದಾರ ಖಾತೆಯು ಸೃಷ್ಟಿತವಾಗಿದೆ, ಆದರೆ ನೀವು ಲಾಗ್ ಇನ್ ಆಗಿಲ್ಲ.\n{{SITENAME}} ಲಾಗ್ ಇನ್ ಮಾಡಲು cookieಗಳನ್ನು ಉಪಯೋಗಿಸುತ್ತದೆ.\nನಿಮ್ಮ ಗಣಕಯಂತ್ರದಲ್ಲಿ cookieಗಳು ನಿಷಿದ್ಧವಾಗಿದೆ.\nದಯವಿಟ್ಟು ಈ ನಿಷೇಧವನ್ನು ತೆಗೆದು, ನಿಮ್ಮ ಬಳಕೆದಾರ ಹೆಸರು ಮತ್ತು ಪ್ರವೇಶಪದಗಳನ್ನು ಉಪಯೋಗಿಸಿ ಲಾಗ್ ಇನ್ ಆಗಿ.",
        "nocookieslogin": "{{SITENAME}} ಬಳಕೆದಾರರನ್ನು ಲಾಗ್ ಇನ್ ಮಾಡಲು cookieಗಳನ್ನು ಉಪಯೋಗಿಸುತ್ತದೆ.\nನಿಮ್ಮ ಗಣಕಯಂತ್ರದಲ್ಲ್ cookieಗಳ ಉಪಯೋಗ ನಿಷಿದ್ಧವಾಗಿದೆ.\nದಯವಿಟ್ಟು ಆ ನಿಷೇಧವನ್ನು ತೆಗೆದು ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.",
        "noname": "ನೀವು ಸರಿಯಾದ ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಸೂಚಿಸಿಲ್ಲ.",
        "loginsuccesstitle": "ಲಾಗಿನ್ ಯಶಸ್ವಿ",
        "loginsuccess": "ನೀವು ಈಗ \"$1\" ಆಗಿ ವಿಕಿಪೀಡಿಯಕ್ಕೆ ಲಾಗಿನ್ ಆಗಿದ್ದೀರಿ.",
-       "nosuchuser": "\"$1\" ಹೆಸರಿನ ಯಾವ ಸದಸ್ಯರೂ ಇಲ್ಲ.\nಕಾಗುಣಿತವನ್ನು ಪರೀಕ್ಷಿಸಿ, ಅಥವಾ [[Special:UserLogin/signup|ಹೊಸ ಸದಸ್ಯತ್ವ ಖಾತೆಯನ್ನು ಸೃಷ್ಟಿಸಿ]].",
+       "nosuchuser": "\"$1\" à²¹à³\86ಸರಿನ à²¯à²¾à²µ à²¸à²¦à²¸à³\8dಯರà³\82 à²\87ಲà³\8dಲ.\nಸದಸà³\8dಯನಾಮದಲà³\8dಲಿ à²²à²\98à³\81 à²®à²¤à³\8dತà³\81 à²¦à³\80ರà³\8dà²\98 à²\85à²\95à³\8dಷರà²\97ಳಲà³\8dಲಿ à²µà³\8dಯತà³\8dಯಾಸವಿದà³\86.\nà²\95ಾà²\97à³\81ಣಿತವನà³\8dನà³\81 à²ªà²°à³\80à²\95à³\8dಷಿಸಿ, à²\85ಥವಾ [[Special:UserLogin/signup|ಹà³\8aಸ à²¸à²¦à²¸à³\8dಯತà³\8dವ à²\96ಾತà³\86ಯನà³\8dನà³\81 à²¸à³\83ಷà³\8dà²\9fಿಸಿ]].",
        "nosuchusershort": "\"$1\" ಹೆಸರಿನ ಸದಸ್ಯರು ಯಾರೂ ಇಲ್ಲ.\nಹೆಸರಲ್ಲಿ ಕಾಗುಣಿತ ತಪ್ಪಿದೆಯೆ ಎಂದು ಪರೀಕ್ಷಿಸಿ.",
        "nouserspecified": "ನೀವು ಒಂದು ಸದಸ್ಯತ್ವದ ಹೆಸರನ್ನು ಸೂಚಿಸಬೇಕು.",
        "login-userblocked": "ಈ ಬಳಕೆದಾರರನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ. ಲಾಗಿನ್ ಆಗಲು ಸಾದ್ಯವಿಲ್ಲ.",
        "passwordtooshort": "ಪ್ರವೇಶಪದ ಕನಿಷ್ಟ {{PLURAL:$1|೧ ಅಕ್ಷರವನ್ನು|$1 ಅಕ್ಷರಗಳನ್ನು}} ಹೊಂದಿರಬೇಕು.",
        "password-name-match": "ನಿಮ್ಮ ಬಳಕೆದಾರ ಹೆಸರಿನಿಂದ ಪ್ರವೇಶಪದ ವಿಭಿನ್ನವಾಗಿರಬೇಕು.",
        "password-login-forbidden": "ಈ ಬಳಕೆದಾರರ ಹೆಸರು ಮತ್ತು ಪ್ರವೇಶಪದವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.",
-       "mailmypassword": "ಹà³\8aಸ à²ªà³\8dರವà³\87ಶ à²ªà²¦à²µà²¨à³\8dನà³\81 à²\87-à²\85à²\82à²\9aà³\86 à²®à³\82ಲà²\95 à²\95ಳà³\81ಹಿಸಿ",
+       "mailmypassword": "ಪà³\8dರವà³\87ಶಪದವನà³\8dನà³\81 à²ªà³\81ನà²\83ಸà³\8dಥಾಪಿಸಿ.",
        "passwordremindertitle": "{{SITENAME}}ಗೆ ಹೊಸ ತಾತ್ಕಾಲಿಕ ಪ್ರವೇಶ ಪದ",
        "passwordremindertext": "{{SITENAME}} ($4) ಸೈಟಿಗೆ ಹೊಸ ಪ್ರವೇಶಪದವನ್ನು $1 ಐ.ಪಿ. ವಿಳಾಸದಿಂದ ಕೋರಲಾಗಿದೆ.\nಸದಸ್ಯ \"$2\" ಅವರ ಹೊಸ ಪ್ರವೇಶಪದ ಈಗ \"$3\".\nನೀವು ಲಾಗ್ ಇನ್ ಆಗಿ ತಮ್ಮ ಪ್ರವೇಶಪದವನ್ನು ಬದಲಾಯಿಸಿ.\n\nನೀವು ಈ ಕೋರಿಕೆಯನ್ನು ಮಾಡಿಲ್ಲದಿದ್ದರೆ, ಅಥವ ನೀವು ನಿಮ್ಮ ಹಳೆಯ ಪ್ರವೇಶಪದವನ್ನು ನೆನಪಿಸಿಕೊಂಡರೆ ಈ ಮಾಹಿತಿಗೆ ಗಮನ ನೀಡದೆ ನಿಮ್ಮ ಹಳೆಯ ಪ್ರವೇಶಪದವನ್ನು ಉಪಯೋಗಿಸಲು ಮುಂದುವರೆಸಿರಿ.",
        "noemail": "ಸದಸ್ಯ \"$1\" ಅವರ ಹೆಸರಿನಲ್ಲಿ ಯಾವ ಇ-ಅಂಚೆ ವಿಳಾಸವೂ ದಾಖಲಾಗಿಲ್ಲ.",
        "edit-gone-missing": "ಪುಟವನ್ನು ಪ್ರಸ್ತುತಗೊಳಿಸಲು ಸಾದ್ಯವಿಲ್ಲ, ಪುಟವು ಬಹುಶ: ಅಳಿಸಲ್ಪಟ್ಟಿರಬಹುದು",
        "edit-conflict": "ಸಂಪಾದನಾ ಘರ್ಷಣೆ.",
        "edit-no-change": "ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಕಡೆಗಣಿಸಲಾಗಿದೆ ಏಕೆಂದರೆ ಪಠ್ಯದಲ್ಲಿ ಯಾವುದೇ ಬದಲಾವಣೆ ಮಾಡಲಾಗಿಲ್ಲ್ಲ",
-       "postedit-confirmation": "ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಉಳಿಸಲಾಗಿದೆ.",
+       "postedit-confirmation-saved": "ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಉಳಿಸಲಾಗಿದೆ.",
        "edit-already-exists": "ಹೊಸ ಪುಟವನ್ನು ಸೃಷ್ಟಿಸಲಾಗಲಿಲ್ಲ.\nಅದು ಆಗಲೆ ಅಸ್ಥಿತ್ವದಲ್ಲಿದೆ.",
        "content-model-javascript": "ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್",
        "content-model-css": "ಸಿಎಸ್‍ಎಸ್",
        "revdelete-hide-user": "ಸಂಪಾದಕರ ಬಳಕೆಯ ಹೆಸರು/IP ಅಡಗಿಸು",
        "revdelete-hide-restricted": "ಈ ನಿಬಂಧನೆಗಳನ್ನು ನಿರ್ವಾಹಕರಿಗೂ ಅನ್ವಯಿಸು ಮತ್ತು ಈ interface ಗೆ ಬೀಗ ಹಾಕು",
        "revdelete-radio-same": "(ಬದಲಾಯಿಸಬೇಡಿ)",
-       "revdelete-radio-set": "ಹà³\8cದà³\81",
+       "revdelete-radio-set": "à²\85ಡà²\97ಿದ",
        "revdelete-radio-unset": "ಇಲ್ಲ",
        "revdelete-suppress": "ನಿರ್ವಾಹಕರಿಂದ ಮತ್ತಿತರರಿಂದ ಬಂದ ಮಾಹಿತಿಯನ್ನು ಅಡಗಿಸು",
        "revdelete-unsuppress": "ಪುನಃ ಸ್ಥಾಪಿಸಿದ ಬದಲಾವಣೆಗಳ ಮೇಲಿನ ನಿಬಂಧನೆಗಳನ್ನು ತೆಗೆ",
        "searchmenu-exists": "'''\"[[:$1]]\" ಹೆಸರಿನ ಪುಟ ಈ ವಿಕಿಯಲ್ಲಿದೆ.'''",
        "searchmenu-new": "'''''[[:$1]]'' ಪುಟವನ್ನು ಈ ವಿಕಿಯಲ್ಲಿ ಸೃಷ್ಟಿಸಿ!'''",
        "searchprofile-articles": "ಲೇಖನ ಪುಟ",
-       "searchprofile-project": "ಸಹಾಯ ಮತ್ತು ಯೋಜನೆ ಪುಟಗಳು",
        "searchprofile-images": "ಬಹುಮಾಧ್ಯಮ",
        "searchprofile-everything": "ಪ್ರತಿಯೊಂದು",
        "searchprofile-advanced": "ಪರಿಣತ",
        "searchprofile-articles-tooltip": "$1 ನಲ್ಲಿ ಹುಡುಕಿ",
-       "searchprofile-project-tooltip": "$1 ನಲ್ಲಿ ಹುಡುಕಿ",
        "searchprofile-images-tooltip": "ಹುದುಕಿ  ಹಲೆಯನು",
        "searchprofile-everything-tooltip": "ಹುದುಕಿ ಯಲ ಸುಮನು (ಇಥಿಯದಿ ಮಾಥು ಹಲೆ)",
        "searchprofile-advanced-tooltip": "ಹುಧುಕಿ ನಮ ಜಾಗ ಹೆಸರುಸ್ತಲ್ಲ",
        "allowemail": "ಬೇರೆ ಸದಸ್ಯರಿಂದ ಈ-ಮೈಲ್‍ಗಳನ್ನು ಸ್ವೀಕರಿಸು",
        "prefs-searchoptions": "ಹುಡುಕು",
        "prefs-namespaces": "ನಾಮವರ್ಗಗಳು",
-       "defaultns": "ಮೂಲಸ್ಥಿತಿಯಲ್ಲಿ ಈ ಪುಟಪ್ರಬೇಧಗಳಲ್ಲಿ ಹುಡುಕಿ:",
        "default": "ಮೂಲಸ್ಥಿತಿ",
        "prefs-files": "ಫೈಲುಗಳು",
        "youremail": "ಇ-ಅಂಚೆ:",
        "username": "ಸದಸ್ಯತ್ವದ ಹೆಸರು:",
-       "uid": "ಬಳಕೆದಾರ ID:",
        "prefs-memberingroups": "ಈ {{PLURAL:$1|ಗುಂಪಿನ|ಗುಂಪುಗಳ}} ಸದಸ್ಯ:",
        "yourrealname": "ನಿಜ ಹೆಸರು:",
        "yourlanguage": "ಭಾಷೆ:",
        "badsiglength": "ನಿಮ್ಮ ಅಡ್ಡಹೆಸರು ತುಂಬಾ ಉದ್ದವಾಗಿದೆ.\nಅದು $1 {{PLURAL:$1|ಅಕ್ಷರಕ್ಕಿಂತ|ಅಕ್ಷರಗಳಿಗಿಂತ}} ಕಡಿಮೆ ಇರಬೇಕು.",
        "yourgender": "ಲಿಂಗ:",
        "gender-unknown": "ನಾನು ಹೇಳಲಿಚ್ಛಿಸುವುದಿಲ್ಲ",
-       "gender-male": "à²\97à²\82ಡಸà³\81",
-       "gender-female": "ಸà³\8dತà³\8dರà³\80",
+       "gender-male": "à²\85ವನà³\81 à²µà²¿à²\95ಿ à²ªà³\81à²\9fà²\97ಳನà³\8dನà³\81 à²¸à²\82ಪಾದಿಸà³\81ತà³\8dತಾನà³\86",
+       "gender-female": "à²\85ವಳà³\81 à²µà²¿à²\95ಿ à²ªà³\81à²\9fà²\97ಳನà³\8dನà³\81 à²¸à²\82ಪಾದಿಸà³\81ತà³\8dತಾಳà³\86",
        "email": "ಇ-ಅಂಚೆ",
        "prefs-help-realname": "ನಿಜ ಹೆಸರು ನೀಡುವುದು ಐಚ್ಛಿಕ. ನೀವು ಅದನ್ನು ನೀಡಿದಲ್ಲಿ ನಿಮ್ಮ ಕಾಣಿಕೆಗಳಿಗೆ ನಿಮಗೆ ಮನ್ನಣೆ ನೀಡಲಾಗುವುದು.",
        "prefs-help-email": "ಇ-ಅಂಚೆ ವಿಳಾಸ ಕಡ್ಡಾಯವಲ್ಲ, ಆದರೆ ನೀವು ಅದನ್ನು ನೀಡಿದರೆ ನೀವು ನಿಮ್ಮ ಪ್ರವೇಶ ಪದವನ್ನು ಮರೆತರೆ ಅದನ್ನು ನಿಮಗೆ ಇ-ಅಂಚೆಯಿಂದ ಕಳುಹಿಸಿಬಹುದು.",
        "logempty": "ದಾಖಲೆಗಳಲ್ಲಿ ಇದಕ್ಕೆ ಹೋಲುವ ಯಾವ ವಸ್ತುವೂ ಇಲ್ಲ.",
        "log-title-wildcard": "ಈ ಪದಗಳಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಶೀರ್ಷಿಕೆಗಳನ್ನು ಹುಡುಕು",
        "allpages": "ಎಲ್ಲ ಪುಟಗಳು",
-       "alphaindexline": "$1 ಇಂದ $2",
        "nextpage": "ಮುಂದಿನ ಪುಟ ($1)",
        "prevpage": "ಹಿಂದಿನ ಪುಟ ($1)",
        "allpagesfrom": "ಇದರಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಪುಟಗಳನ್ನು ತೋರಿಸು:",
        "watchnologin": "ಲಾಗಿನ್ ಆಗಿಲ್ಲ",
        "addwatch": "ವೀಕ್ಷಣಾಪಟ್ಟಿಗೆ ಸೇರಿಸು",
        "addedwatchtext": "\"[[:$1]]\" ಪುಟವನ್ನು ನಿಮ್ಮ [[Special:Watchlist|ವೀಕ್ಷಣಾಪಟ್ಟಿಗೆ]] ಸೇರಿಸಲಾಗಿದೆ. ಈ ಪುಟದ ಮತ್ತು ಇದರ ಚರ್ಚಾ ಪುಟದ ಮುಂದಿನ ಬದಲಾವಣೆಗಳು ವೀಕ್ಷಣಾ ಪಟ್ಟಿಯಲ್ಲಿ ಕಾಣಸಿಗುತ್ತವೆ, ಮತ್ತು [[Special:RecentChanges|ಇತ್ತೀಚೆಗಿನ ಬದಲಾವಣೆಗಳ]] ಪಟ್ಟಿಯಲ್ಲಿ ಈ ಪುಟಗಳನ್ನು ದಪ್ಪಕ್ಷರಗಳಲ್ಲಿ ಕಾಣಿಸಲಾಗುವುದು.\n\n<p>ಈ ಪುಟವನ್ನು ವೀಕ್ಷಣಾ ಪಟ್ಟಿಯಿಂದ ತೆಗೆಯಬಯಸಿದಲ್ಲಿ, ಮೇಲ್ಪಟ್ಟಿಯಲ್ಲಿ ಕಾಣಿಸಿರುವ \"ವೀಕ್ಷಣಾ ಪುಟದಿಂದ ತೆಗೆ\" ಅನ್ನು ಕ್ಲಿಕ್ಕಿಸಿ.",
+       "addedwatchtext-short": "\"$1\" ಪುಟವನ್ನು ನಿಮ್ಮ ವೀಕ್ಷಣಾಪಟ್ಟಿಗೆ ಸೇರಿಸಲಾಗಿದೆ.",
        "removewatch": "ವೀಕ್ಷಣಾಪಟ್ಟಿಯಿಂದ ತೆಗೆ",
        "removedwatchtext": "\"[[:$1]]\" ಪುಟವನ್ನು ನಿಮ್ಮ [[Special:Watchlist|ವೀಕ್ಷಣಾಪಟ್ಟಿಯಿಂದ]] ತೆಗೆಯಲಾಗಿದೆ.",
+       "removedwatchtext-short": "\"$1\" ಪುಟವನ್ನು ನಿಮ್ಮ ವೀಕ್ಷಣಾಪಟ್ಟಿಂದ ತೆಗೆಯಲಾಗಿದೆ.",
        "watch": "ವೀಕ್ಷಿಸಿ",
        "watchthispage": "ಈ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಿ",
        "unwatch": "ವೀಕ್ಷಣಾ ಪಟ್ಟಿಯಿಂದ ತೆಗೆ",
        "unblock": "ಬಳಕೆದಾರನ ತಡೆಯನ್ನು ತೆಗೆ",
        "blockip": "ಈ ಸದಸ್ಯನನ್ನು ತಡೆ ಹಿಡಿಯಿರಿ",
        "blockip-legend": "ಬಳಕೆದಾರನನ್ನು ತಡೆಹಿಡಿ",
-       "ipadressorusername": "IP ವಿಳಾಸ ಅಥವ ಬಳಕೆಯ ಹೆಸರು:",
+       "ipaddressorusername": "IP ವಿಳಾಸ ಅಥವ ಬಳಕೆಯ ಹೆಸರು:",
        "ipbexpiry": "ಅಂತ್ಯ:",
        "ipbreason": "ಕಾರಣ:",
        "ipbreason-dropdown": "*ತಡೆಹಿಡಿಯುವಿಕೆಗೆ ಸಾಧಾರಣ ಕಾರಣಗಳು\n** ತಪ್ಪು ಮಾಹಿತಿಯನ್ನು ಸೇರಿಸುವುದು\n** ಪುಟದಲ್ಲಿರುವ ಮಾಹಿತಿಯನ್ನು ತೆಗೆಯುವುದು\n** ಬಾಹ್ಯ ತಾಣಗಳಿಗೆ ಜಾಹೀರಾತಿಗೆ ಕೊಂಡಿ ಸೇರಿಸುವುದು\n** ಪುಟಗಳಲ್ಲಿ ಅರ್ಥವಿಲ್ಲದ ಮಾಹಿತಿ ಸೇರಿಸುವುದು\n** ಬೇರೆಯವರನ್ನು ಬೆದರಿಸುವ/ಕಾಡುವ ವರ್ತನೆ\n** ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು ಖಾತೆಗಳ ದುರುಪಯೋಗ\n** ಒಪ್ಪಿಗೆಯಿರದಂತಹ ಬಳಕೆಯ ಹೆಸರು",
        "newimages": "ಹೊಸ ಫೈಲುಗಳ ಪ್ರದರ್ಶನ",
        "imagelisttext": "ಕೆಳಗೆ ಇರುವುದು '''$1''' {{PLURAL:$1|ಫೈಲಿನ|ಫೈಲುಗಳ}} ಪಟ್ಟಿ, $2 ಏರ್ಪಾಟಾಗಿದೆ.",
        "newimages-summary": "ಈ ವಿಶೇಷ ಪುಟವು ಕೊನೆಯದಾಗಿ ಅಪ್ಲೋಡ್ ಆಗಿರುವ ಫೈಲುಗಳನ್ನು ತೋರುತ್ತದೆ",
-       "showhidebots": "($1 ಬಾಟ್‍ಗಳು)",
        "noimages": "ನೋಡಲು ಏನೂ ಇಲ್ಲ.",
        "ilsubmit": "ಹುಡುಕು",
        "bydate": "ದಿನಾಂಕಕ್ಕನುಗುಣವಾಗಿ",
        "watchlistedit-raw-titles": "ಶೀರ್ಷಿಕೆಗಳು:",
        "watchlistedit-raw-added": "{{PLURAL:$1|೧ ಶೀರ್ಷಿಕೆಯನ್ನು|$1 ಶೀರ್ಷಿಕೆಗಳನ್ನು}} ಸೇರಿಸಲಾಯಿತು:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|೧ ಶೀರ್ಷಿಕೆಯನ್ನು|$1 ಶೀರ್ಷಿಕೆಗಳನ್ನು}} ತೆಗೆಯಲಾಯಿತು:",
+       "watchlistedit-clear-titles": "ಶೀರ್ಷಿಕೆಗಳು:",
        "watchlisttools-view": "ಸೂಚಿಸಲ್ಪಟ್ಟ ಬದಲಾವಣೆಗಳನ್ನು ವೀಕ್ಷಿಸಿ",
        "watchlisttools-edit": "ವೀಕ್ಷಣಾಪಟ್ಟಿಯನ್ನು ನೋಡು ಮತ್ತು ಸಂಪಾದಿಸು",
        "watchlisttools-raw": "ಮೂಲ ವೀಕ್ಷಣಾಪಟ್ಟಿಯನ್ನು ಸಂಪಾದಿಸು",
index 70ab6d9..8c9e38b 100644 (file)
@@ -37,7 +37,8 @@
                        "לערי ריינהארט",
                        "관인생략",
                        "아라",
-                       "Keysuck"
+                       "Keysuck",
+                       "Infinity"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "vector-view-view": "읽기",
        "vector-view-viewsource": "원본 보기",
        "actions": "행위",
+       "vector-more-actions": "더 보기",
        "namespaces": "이름공간",
        "variants": "변수",
        "navigation-heading": "둘러보기 메뉴",
        "virus-scanfailed": "검사 실패 (코드 $1)",
        "virus-unknownscanner": "알 수 없는 백신 소프트웨어:",
        "logouttext": "'''지금 로그아웃했습니다.'''\n\n브라우저 캐시를 지우지 않으면 일부 문서에서 로그인이 되어 있는 것처럼 보일 수 있습니다.",
-       "welcomeuser": "$1 님, 환영합니다!",
+       "welcomeuser": "$1님, 환영합니다!",
        "welcomecreation-msg": "계정이 만들어졌습니다.\n[[Special:Preferences|{{SITENAME}} 사용자 환경 설정]]을 바꿀 수 있습니다.",
        "yourname": "사용자 이름:",
        "userlogin-yourname": "사용자 계정 이름",
        "currentrev": "최신판",
        "currentrev-asof": "$1 기준 최신판",
        "revisionasof": "$1 판",
-       "revision-info": "$2 사용자의 $1 판",
+       "revision-info": "{{GENDER:$6|$2}} 사용자의 $1 판$1",
        "previousrevision": "← 이전 판",
        "nextrevision": "다음 판 →",
        "currentrevisionlink": "최신판",
        "historyempty": "(비었음)",
        "history-feed-title": "편집 역사",
        "history-feed-description": "이 문서의 편집 역사",
-       "history-feed-item-nocomment": "$2에 대한 $1의 편집",
+       "history-feed-item-nocomment": "$2에 $1님의 편집",
        "history-feed-empty": "요청한 문서가 존재하지 않습니다.\n해당 문서가 삭제되었거나, 문서 이름이 바뀌었을 수 있습니다.\n[[Special:Search|위키의 검색]]을 사용해 관련 문서를 찾아보세요.",
        "rev-deleted-comment": "(편집 요약 삭제됨)",
        "rev-deleted-user": "(사용자 이름 삭제됨)",
        "searchmenu-exists": "'''이 위키에 \"[[:$1]]\"의 이름을 가진 문서가 있습니다.'''",
        "searchmenu-new": "<strong>이 위키에 \"[[:$1]]\" 문서를 만드세요!</strong> {{PLURAL:$2|0=|검색으로 찾은 문서도 보세요.|찾은 검색 결과도 보세요.}}",
        "searchprofile-articles": "본문",
-       "searchprofile-project": "도움말 및 프로젝트 문서",
        "searchprofile-images": "멀티미디어",
        "searchprofile-everything": "모든 문서",
        "searchprofile-advanced": "고급",
        "searchprofile-articles-tooltip": "$1에서 검색",
-       "searchprofile-project-tooltip": "$1에서 검색",
        "searchprofile-images-tooltip": "파일 검색",
        "searchprofile-everything-tooltip": "모든 내용 (토론 문서를 포함) 검색",
        "searchprofile-advanced-tooltip": "다음 설정한 이름공간에서 검색",
        "search-interwiki-default": "$1 로부터의 결과:",
        "search-interwiki-more": "(더 보기)",
        "search-relatedarticle": "관련",
-       "searcheverything-enable": "모든 이름공간에서 검색",
        "searchrelated": "관련",
        "searchall": "모두",
        "showingresults": "'''$2'''번 부터의 {{PLURAL:$1|결과 '''1'''개|결과 '''$1'''개}}입니다.",
        "powersearch-togglelabel": "확인:",
        "powersearch-toggleall": "모두",
        "powersearch-togglenone": "모두 제외",
+       "powersearch-remember": "향후 검색에 선택 기억하기",
        "search-external": "바깥에서 검색",
        "searchdisabled": "{{SITENAME}} 검색이 비활성화되어 있습니다.\n검색이 작동하지 않는 동안에는 Google(구글)을 통해 검색할 수 있습니다.\n검색 엔진의 내용은 최신이 아닐 수 있다는 점을 참고하세요.",
        "search-error": "검색하는 동안 오류가 발생했습니다: $1",
        "preferences": "사용자 환경 설정",
        "mypreferences": "환경 설정",
-       "prefs-edits": "편집 수:",
+       "prefs-edits": "편집 수:",
        "prefsnologintext2": "사용자 환경 설정을 설정하려면 $1하십시오.",
        "prefs-skin": "스킨",
        "skin-preview": "미리 보기",
        "allowemail": "다른 사용자가 보낸 이메일을 받음",
        "prefs-searchoptions": "검색",
        "prefs-namespaces": "이름공간",
-       "defaultns": "다음 이름공간에서 검색:",
        "default": "기본값",
        "prefs-files": "파일",
        "prefs-custom-css": "사용자 CSS",
        "right-purge": "확인 없이 문서의 캐시를 새로 고침",
        "right-autoconfirmed": "IP 기반의 속도 제한에 영향을 받지 않음",
        "right-bot": "봇의 편집으로 취급",
-       "right-nominornewtalk": "토론 문서를 새로 만들때 사소한 편집 사용 불가능",
+       "right-nominornewtalk": "토론 문서에 사소한 편집으로 새 메시지를 보낼 수 없음",
        "right-apihighlimits": "API 상한 상승",
        "right-writeapi": "API 작성",
        "right-delete": "문서 삭제",
        "recentchanges-label-unpatrolled": "아직 순찰하지 않은 편집",
        "recentchanges-label-plusminus": "바이트로 표기된 바뀐 문서 크기",
        "recentchanges-legend-heading": "'''범례:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|새 문서 목록]]도 보세요)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|새 문서 목록]]도 보세요)",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "다음은 <strong>$2</strong>에서부터 바뀐 문서 <strong>$1</strong>개입니다.",
        "rclistfrom": "$3 $2부터 시작하는 새로 바뀐 문서 보기",
        "unusedtemplateswlh": "다른 링크",
        "randompage": "임의 문서로",
        "randompage-nopages": "{{PLURAL:$2|다음}} 이름공간에는 문서가 없습니다: $1",
-       "randomincategory": "분류에 있는 임의 문서",
+       "randomincategory": "분류 안의 임의 문서",
        "randomincategory-invalidcategory": "\"$1\"(은)는 올바른 분류 이름이 아닙니다.",
        "randomincategory-nopages": "[[:Category:$1]]에 문서가 없습니다.",
        "randomincategory-selectcategory": "분류에서 임의 문서 얻기: $1 $2",
        "statistics-pages": "전체 문서",
        "statistics-pages-desc": "토론 문서, 넘겨주기 문서 등을 포함하는 위키에 있는 모든 문서입니다",
        "statistics-files": "올려져 있는 파일",
-       "statistics-edits": "{{SITENAME}} 설치 후 문서의 전체 편집 횟수",
-       "statistics-edits-average": "문서당 평균 편집 수",
+       "statistics-edits": "{{SITENAME}} 설치 이후 문서의 전체 편집 수",
+       "statistics-edits-average": "문서당 평균 편집 수",
        "statistics-views-total": "총 방문 수",
        "statistics-views-total-desc": "존재하지 않는 문서나 특수 문서에 대한 방문 수는 포함하지 않았습니다",
        "statistics-views-peredit": "편집당 방문 횟수",
        "listgrouprights-namespaceprotection-header": "이름공간 제한",
        "listgrouprights-namespaceprotection-namespace": "이름공간",
        "listgrouprights-namespaceprotection-restrictedto": "사용자가 편집할 수 있는 권한",
-       "trackingcategories": "분류 추적",
-       "trackingcategories-summary": "이 페이지는 미디어위키 소프트웨어에 의해 자동으로 채워지는 분류 추적을 나열합니다. 그들의 이름은 {{ns:8}} 이름공간에 관련된 시스템 메시지를 바꾸어서 바꿀 수 있습니다.",
-       "trackingcategories-msg": "분류 추적",
+       "trackingcategories": "추적용 분류",
+       "trackingcategories-summary": "이 페이지는 미디어위키 소프트웨어에 의해 자동으로 만들어지는 추적용 분류를 나열합니다. 그들의 이름은 {{ns:8}} 이름공간에 관련된 시스템 메시지를 바꾸어서 바꿀 수 있습니다.",
+       "trackingcategories-msg": "추적용 분류",
        "trackingcategories-name": "메시지 이름",
        "trackingcategories-desc": "분류 포함 기준",
        "noindex-category-desc": "문서는 그것과 그 플래그가 허용된 곳에 있는 이름공간에서 <code><nowiki>__NOINDEX__</nowiki></code> 특수 명령이 있기 때문에 로봇이 색인하지 않습니다.",
        "enotif_body": "$WATCHINGUSERNAME님,\n\n$PAGEINTRO $NEWPAGE\n\n편집 요약: $PAGESUMMARY $PAGEMINOREDIT\n\n다음을 통해 편집자와 대화를 할 수 있습니다:\n이메일: $PAGEEDITOR_EMAIL\n위키: $PAGEEDITOR_WIKI\n\n로그인한 상태에서 이 문서를 열기 전에는 다른 알림 이메일을 더 이상 보내지 않습니다. 모든 주시 문서의 알림 딱지를 초기화할 수도 있습니다.\n\n{{SITENAME}} 알림 시스템\n\n--\n이메일 알림 설정을 바꾸시려면 이곳을 방문해주세요:\n{{canonicalurl:{{#special:Preferences}}}}\n\n주시문서 설정을 바꾸려면 다음을 사용하세요:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\n주시문서에서 이 문서를 지우려면 이곳을 방문해주세요:\n$UNWATCHURL\n\n도움을 얻거나 피드백 하기:\n$HELPPAGE",
        "created": "만들었",
        "changed": "바꾸었",
-       "deletepage": "문서 삭제하기",
+       "deletepage": "문서 삭제",
        "confirm": "확인",
        "excontent": "내용: \"$1\"",
        "excontentauthor": "내용: \"$1\" (유일한 편집자는 \"[[Special:Contributions/$2|$2]]\")",
        "sp-contributions-newbies-sub": "새 사용자의 기여",
        "sp-contributions-newbies-title": "새 사용자의 기여",
        "sp-contributions-blocklog": "차단 기록",
-       "sp-contributions-suppresslog": "ì\82­ì \9cë\90\9c 사용자 기여",
+       "sp-contributions-suppresslog": "ì\88¨ê²¨ì§\84 사용자 기여",
        "sp-contributions-deleted": "삭제된 사용자 기여",
        "sp-contributions-uploads": "올린 파일",
        "sp-contributions-logs": "기록",
        "importbadinterwiki": "인터위키 링크가 잘못되었습니다.",
        "importsuccess": "가져오기 완료!",
        "importnosources": "문서를 가져올 출처가 정의되지 않았고 문서 역사 올리기가 비활성화되었습니다.",
-       "importnofile": "가져오기 파일이 올려지지 않았습니다.",
+       "importnofile": "가져오기 파일이 올려지지 않았습니다.",
        "importuploaderrorsize": "파일 올리기를 통한 가져오기에 실패했습니다.\n파일이 허용된 크기 제한보다 큽니다.",
        "importuploaderrorpartial": "가져오기 파일을 올리는 데 실패하였습니다.\n파일이 부분적으로만 올려졌습니다.",
        "importuploaderrortemp": "가져오기 파일을 올리는 데 실패했습니다.\n임시 폴더가 존재하지 않습니다.",
        "tooltip-summary": "짧은 요약을 적어주세요",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* 이 CSS 설정은 모든 스킨에 동일하게 적용됩니다 */",
-       "cologneblue.css": "/* 이 CSS 설정은 쾰른 블루 스킨을 사용하는 사용자에게 적용됩니다 */",
        "monobook.css": "/* 이 CSS 설정은 모노북 스킨을 사용하는 사용자에게 적용됩니다 */",
-       "modern.css": "/* 이 CSS 설정은 모던 스킨을 사용하는 사용자에게 적용됩니다 */",
        "vector.css": "/* 이 CSS 설정은 벡터 스킨을 사용하는 사용자에게 적용됩니다 */",
        "print.css": "/* 이 CSS 설정은 인쇄 출력 화면에 적용됩니다 */",
        "noscript.css": "/* 이 CSS 설정은 자바스크립트를 비활성화한 사용자에 적용됩니다 */",
        "group-sysop.css": "/* 이 CSS 설정은 관리자에만 적용됩니다 */",
        "group-bureaucrat.css": "/* 이 CSS 설정은 사무관에만 적용됩니다 */",
        "common.js": "/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */",
-       "cologneblue.js": "/* 이 자바스크립트 설정은 쾰른 블루 스킨을 사용하는 사용자에게 적용됩니다 */",
        "monobook.js": "/* 이 자바스크립트 설정은 모노북 스킨을 사용하는 사용자에게 적용됩니다 */",
-       "modern.js": "/* 이 자바스크립트 설정은 모던 스킨을 사용하는 사용자에게 적용됩니다 */",
        "vector.js": "/* 이 자바스크립트 설정은 벡터 스킨을 사용하는 사용자에게 적용됩니다 */",
        "group-autoconfirmed.js": "/* 이 자바스크립트 설정은 자동 인증된 사용자에만 적용됩니다 */",
        "group-bot.js": "/* 이 자바스크립트 설정은 봇에만 적용됩니다 */",
        "pageinfo-category-pages": "문서 수",
        "pageinfo-category-subcats": "하위 분류 수",
        "pageinfo-category-files": "파일 수",
-       "skinname-cologneblue": "쾰른 블루",
        "skinname-monobook": "모노북",
-       "skinname-modern": "모던",
        "skinname-vector": "벡터",
        "markaspatrolleddiff": "검토한 문서로 표시",
        "markaspatrolledtext": "이 문서를 검토한 것으로 표시",
        "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-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-added": "{{PLURAL:$1|제목 1개|제목 $1개}}를 추가했습니다:",
-       "watchlistedit-raw-removed": "{{PLURAL:$1|제목 1개|제목 $1개}}를 제거했습니다:",
-       "watchlistedit-clear-title": "주시문서 목록이 지워짐",
+       "watchlistedit-raw-added": "{{PLURAL:$1|문서 1개|문서 $1개}}를 추가했습니다:",
+       "watchlistedit-raw-removed": "{{PLURAL:$1|문서 1개|문서 $1개}}를 제거했습니다:",
+       "watchlistedit-clear-title": "주시문서 목록 지우기",
        "watchlistedit-clear-legend": "주시문서 목록 지우기",
-       "watchlistedit-clear-explain": "모든 제목이 주시문서 목록에서 제거됩니다",
+       "watchlistedit-clear-explain": "모든 문서가 주시문서 목록에서 제거됩니다",
        "watchlistedit-clear-titles": "제목:",
        "watchlistedit-clear-submit": "주시목록 문서 지우기 (이는 영구적입니다!)",
        "watchlistedit-clear-done": "주시문서 목록을 지웠습니다.",
-       "watchlistedit-clear-removed": "{{PLURAL:$1|제목 1개|제목 $1개}}를 제거했습니다:",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|문서 1개|문서 $1개}}를 제거했습니다:",
        "watchlistedit-too-many": "여기에 보여질 문서가 너무 많습니다.",
-       "watchlisttools-clear": "주시문서 목록 우기",
+       "watchlisttools-clear": "주시문서 목록 우기",
        "watchlisttools-view": "주시문서 최근 바뀜",
        "watchlisttools-edit": "주시문서 목록 보기/편집하기",
        "watchlisttools-raw": "주시문서 목록 직접 편집하기",
index 157fd68..138054b 100644 (file)
        "vector-action-unprotect": "Джакълауну тюрлендир",
        "vector-view-create": "Къура",
        "vector-view-edit": "Тюрлендир",
-       "vector-view-history": "Тарихин кёргюз",
+       "vector-view-history": "Тарихи",
        "vector-view-view": "Окъу",
        "vector-view-viewsource": "Кодха къара",
        "actions": "Этиуле",
+       "vector-more-actions": "Энтда",
        "namespaces": "Атланы аламы",
        "variants": "Вариантла",
        "navigation-heading": "Навигация меню",
        "jumptonavigation": "навигация",
        "jumptosearch": "излеу",
        "view-pool-error": "Кечгинлик, бусагъатда серверле бош тюйюлдюле.\nБу бетге къараргъа излегенле асыры кёбдюле.\nКечирек кириб кёрюгюз.\n\n$1",
+       "generic-pool-error": "Кечгинлик, бусагъатда серверле бош тюйюлдюле.\nБу ресурсха къараргъа излегенле асыры кёбдюле.\nКечирек кириб кёрюгюз.",
        "pool-timeout": "Блокланыуну сакълау заман ётдю",
        "pool-queuefull": "Соруула джыйыучу толуду",
        "pool-errorunknown": "Билинмеген халат",
+       "pool-servererror": "Пул санаучу къуллукъ ишлемеди ($1).",
        "aboutsite": "{{SITENAME}} сайтны юсюнден",
        "aboutpage": "Project:Суратлау",
        "copyright": "Ичиндегиси,  $1 лицензиягъа кёре бериледи (башха белгиленмеген эсе).",
        "nospecialpagetext": "<strong>Сиз излеген къуллукъ бет джокъду.</strong>\n\nБолгъан къуллукъ бетлени тизмеси: [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Халат",
        "databaseerror": "Информация базада халат",
+       "databaseerror-textcl": "Билгиле базада халат чыкъды.",
        "databaseerror-query": "Соруулау: $1",
        "databaseerror-error": "Халат: $1",
        "laggedslavemode": "Эс бёлюгюз! Бу бетге ахыр джангыртыула болмазгъа боллукъдула.",
        "changeemail-submit": "Адресни тюрлендир",
        "changeemail-cancel": "Ызына алыу",
        "resettokens": "Токенлени джибер",
+       "resettokens-legend": "Токенлени джибер",
        "resettokens-tokens": "Токенле:",
+       "resettokens-token-label": "$1 (бусагъатдагъы: $2)",
        "bold_sample": "Къалын джазыу",
        "bold_tip": "Къалын джазыу",
        "italic_sample": "Сёдегей джазыу",
        "searchmenu-exists": "'''Бу викиде «[[:$1]]» бет барды'''",
        "searchmenu-new": "<strong>Бу вики-проектде «[[:$1]]» бетни къура!</strong>\n{{PLURAL:$2|0=|Дагъыда табылгъан излеу эсебге къарагъыз.|Дагъыда табылгъан излеу эсеблеге къарагъыз.}}",
        "searchprofile-articles": "Баш бетле",
-       "searchprofile-project": "Болушлукъ эм проект бетле",
        "searchprofile-images": "Мультимедия",
        "searchprofile-everything": "Хар къайда",
        "searchprofile-advanced": "Кенгерген",
        "searchprofile-articles-tooltip": "$1 ичинде изле",
-       "searchprofile-project-tooltip": "$1 ичинде изле",
        "searchprofile-images-tooltip": "Файлланы изле",
        "searchprofile-everything-tooltip": "Бютеу бетледе изле (сюзюу бетледе да)",
        "searchprofile-advanced-tooltip": "Энчи ат аланладада изле",
        "search-result-score": "Келишиулюк: $1%",
        "search-redirect": "(Джиберилиниу $1)",
        "search-section": "($1 бёлюм)",
+       "search-file-match": "(файлны ичиндегиси бла бирди)",
        "search-suggest": "Муну излей болурмусуз: $1",
        "search-interwiki-caption": "Джууукъ проектле",
-       "search-interwiki-default": "$1 Ñ\8dÑ\81еблеÑ\80и:",
+       "search-interwiki-default": "$1 Ñ\81айÑ\82дан Ñ\8dÑ\81ебле:",
        "search-interwiki-more": "(дагъыда)",
        "search-relatedarticle": "Байламлы",
-       "searcheverything-enable": "Атланы бютеу аламларында изле",
        "searchrelated": "бейламлы",
        "searchall": "бютеу",
        "showingresults": "Тюбюрек №&nbsp;<strong>$2</strong> башлаб <strong>$1</strong> {{PLURAL:$1|1=эсеб|эсебле}} {{PLURAL:$1|1=кёргюзюлгенди|кёргюзюлгендиле}}.",
        "allowemail": "Башха къошулуучуладан электрон почтаны келмеге къой",
        "prefs-searchoptions": "Излеу",
        "prefs-namespaces": "Атла алам",
-       "defaultns": "Башха халда бу атла аламлада изле:",
        "default": "тынгылау бла",
        "prefs-files": "Файлла",
        "prefs-custom-css": "Энчи CSS",
        "right-move": "бетлени атларын тюрлендириу",
        "right-move-subpages": "бетлени атларын тюббетлери бла бирге тюрлендириу",
        "right-move-rootuserpages": "Къошулуучуланы тамыр бетлерин атын тюрлендир",
+       "right-move-categorypages": "категория бетлени атларын тюрлендириу",
        "right-movefile": "файлланы атларын тюрлендириу",
        "right-suppressredirect": "Бетни атытюрленсе, эски атындан джбериу этилмейди",
        "right-upload": "файлла джюклеу",
        "right-reupload-shared": "Орта файл сакълау джерни, локал бла ауушдур",
        "right-upload_by_url": "URL адресинден файлла джюклеу",
        "right-purge": "Мюкюл бетсиз бетлени кешлерин ариула",
-       "right-autoconfirmed": "Джарым-джакълы бетлени тюрлендир",
+       "right-autoconfirmed": "IP-адресге кёре теркликни чеклеу джокъду",
        "right-bot": "Автомат процесс кибик сана",
        "right-nominornewtalk": "Къошулуучу сюзюу бетде этген гитче тюрлениуле, къошулуучугъа джангы билдириу бла билдирилмез",
        "right-apihighlimits": "API-соруулагъа мийик лимит хайырлан",
        "action-move": "бу бетни атын тюрлендириу",
        "action-move-subpages": "Бу бетни бютеу бёлюмлери бла атын тюрлендириу",
        "action-move-rootuserpages": "къошулуучуланы тамыр бетлерини атларын тюрлендириу",
+       "action-move-categorypages": "категория бетлени атларын тюрлендириу",
        "action-movefile": "бу файлны атын тюрлендириу",
        "action-upload": "бу файлны джюклеу",
        "action-reupload": "болгъан файлны юсюне джаздырыу",
        "action-editmywatchlist": "кёзде тургъан тизменги тюрлендириу",
        "action-viewmywatchlist": "кёзде тургъан тизменги кёрюу",
        "nchanges": "$1 {{PLURAL:$1|тюрлениу|тюрлениу}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ахыр кере киргенден бери}}",
        "enhancedrc-history": "тарих",
        "recentchanges": "Ахыр тюрлениуле",
        "recentchanges-legend": "Ахыр тюрлениулени джарашдырыулары",
        "recentchanges-label-bot": "Бу тюрлендириуню бот этгенди",
        "recentchanges-label-unpatrolled": "Бу тюрлендириу алкъын патруль этилинмегенди",
        "recentchanges-label-plusminus": "Бетни ёлчеми быллай бир байтха тюрленнгенди",
-       "recentchanges-legend-newpage": "(къарагъыз: [[Special:NewPages|джангы бетлени тизмеси]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (къарагъыз: [[Special:NewPages|джангы бетлени тизмеси]])",
+       "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Тюбюрекде <strong>$2</strong> башлаб (<strong>$1</strong> дери) тюрлендириуле кёрюнедиле",
        "rclistfrom": "$3 $2 башлаб джангы тюрлениулени кёргюз",
        "rcshowhideminor": "гитче тюрлениулени $1",
        "unusedtemplateswlh": "башха джибериуле",
        "randompage": "Эсде болмагъан бет",
        "randompage-nopages": "{{PLURAL:$2|1=Ат аланында|Ат аланында}} чырт бир бет джокъду: $1.",
+       "randomincategory": "Категориядагъы эсде болмагъан бет",
+       "randomincategory-invalidcategory": "«$1» категория джокъду.",
+       "randomincategory-nopages": "[[:Category:$1]] категорияда бетле джокъдула.",
        "randomincategory-selectcategory-submit": "Кёч",
        "randomredirect": "Сакъланмагъан джибериу",
        "randomredirect-nopages": "«$1» ат аланда чырт бир джибериу джокъду.",
        "statistics-users-active": "Актив къошулуучула",
        "statistics-users-active-desc": "Ахыр {{PLURAL:$1|кюнде|$1 кюнде}} ишлеме этген къошулуучула",
        "statistics-mostpopular": "Эм кёб къаралгъан бетле",
+       "pageswithprop-prop": "Амалны аты:",
        "pageswithprop-submit": "Таб",
        "doubleredirects": "Джибериу болгъан джибериуле",
        "doubleredirectstext": "Бу бетде башхы джибериулеге этилген джибериулени тизмеси барды.\nХар тизгин биринчи неда экинчи джибериуню эмда асламысында бетни аты джазылгъан, биринчи джибериу кёргюзген, экинчи джибериуню нюзюр бети джазылады.\n<del>Юсю сызылгъан</del> джазыула тюзетилген этгендиле.",
        "protectedpages-timestamp": "Дата/заман",
        "protectedpages-page": "Бет",
        "protectedpages-expiry": "Бошалыу датасы",
+       "protectedpages-performer": "Къошулуучуну джакълау",
+       "protectedpages-params": "Джакълауну параметрлери",
        "protectedpages-reason": "Чурум",
        "protectedpages-unknown-timestamp": "Билинмейди",
        "protectedpages-unknown-performer": "Белгили болмагъан къошулуучу",
        "listgrouprights-removegroup-self": "кесини тергеу джазыуундан {{PLURAL:$2|1=къауум|къауумланы}} къораталлыкъды: $1",
        "listgrouprights-addgroup-self-all": "Бютеу къауумланы кесини тергеу джазыууна къошаллыкъды",
        "listgrouprights-removegroup-self-all": "Кесини тергеу джазыуундан бютеу къауумланы къораталлыкъды",
+       "listgrouprights-namespaceprotection-header": "Ат аламны чеклеулери",
        "listgrouprights-namespaceprotection-namespace": "Атла алам",
        "trackingcategories": "Марлаб туруучу категорияла",
        "trackingcategories-msg": "Марлаб туруучу категория",
        "file-exists-sharedrepo": "Сайланнган файл ат орта сакълауда алайсызда барды.\nБашха ат сайлагъыз.",
        "export": "Статьяланы экспорт эт",
        "exporttext": "Белгили бетни неда бет къауумну  текстлерин эмда тюрлендириу журналын XML-гъа экспорт этерге боллукъсуз. Бу МедиаВики хайырланнган башха бир  викиге [[Special:Import|импорт]] этерге боллукъду.\n\nБетлени экспорт этер ючюн атын тюбюндеги тюрлендириу сафда  джазыгъыз, бир ат бир сафха болсун, сора статьяланы тюрлендириуюню бютеу тарихинми огъесе статьяланы ахыр версияларынмы экспорт этерге излегенигизни оноуун этигиз.\n\nСиз дагъыда джангыз ахыр версияланы эскпорт этерча айры адресни хайырландырыргъа боллукъсуз. Сёз ючюн [[{{MediaWiki:Mainpage}}]] бет ючюн [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] адрес боллукъду.",
+       "exportall": "Бютеу бетлени экспорт эт",
        "exportcuronly": "Озгъан версияланы алмай, джангыз ахыр версияны ал",
        "exportnohistory": "----\n'''Эсгертиу:''' Бетни тюрлендириуню толу тарихини экспорту, перформанс проблемалары ючюн джукълатылыбды.",
        "export-submit": "Эспорт эт",
        "importlogpage": "Импортну журналы",
        "importlogpagetext": "Башха викиледен бетлени тюрлендириу тарихин администраторланы импорт этиую.",
        "import-logentry-upload": "[[$1]] файл джюклениую бла импорт этилди",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|1=версия|версия}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|версия}}",
        "import-logentry-interwiki": "$1 трансвикиленди",
-       "import-logentry-interwiki-detail": "$2 бетден  $1 {{PLURAL:$1|1=весрия|версия}}",
+       "import-logentry-interwiki-detail": "$2 бетден  $1 {{PLURAL:$1|версия}}",
        "javascripttest": "JavaScript тинтилиую",
        "javascripttest-title": "$1 тинтиле турады",
        "tooltip-pt-userpage": "Къошулуучу бетигиз",
        "lastmodifiedatby": "Бет эм ахыр $3 джанындан $2, $1 заманда тюрлендирилгенди.",
        "othercontribs": "$1 джанындан этилген ишге тамалланады.",
        "others": "башхала",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|1=къошулуучу|къошулуучула}} $1",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|къошулуучусу|къошулуучулары}} $1",
        "anonusers": "{{SITENAME}} аноним {{PLURAL:$2|къошулуучусу|къошулуучулары}} $1",
        "creditspage": "Бетни кредитлери",
        "nocredits": "Бу къошулуучу ючюн кредит билги джокъду.",
        "pageinfo-category-pages": "Бетлени саны",
        "pageinfo-category-subcats": "Тюбкатегорияланы саны",
        "pageinfo-category-files": "Файлланы саны",
-       "skinname-cologneblue": "Кёльн такъылыкъ",
        "skinname-monobook": "Моно-китаб",
-       "skinname-modern": "Бусагъатдагъы",
        "skinname-vector": "Вектор",
        "markaspatrolleddiff": "Контроль этилгенин белгиле",
        "markaspatrolledtext": "Сыналгъан статья кибик белгиле",
        "watchlistedit-raw-done": "Кёзюгюзде тургъан тизмегиз сакъланнганды.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 башлыкъ|$1 башлыкъ}} къошулду:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 башлыкъ|$1 башлыкъ}} кетерилди:",
+       "watchlistedit-clear-legend": "Кёздеги тизмени ариула",
        "watchlistedit-clear-titles": "Башлыкъла:",
        "watchlisttools-view": "Тизмеден бетледе тюрлениуле",
        "watchlisttools-edit": "Тизмеге къарау эм тюрлендириу",
index 2b2e49e..695500f 100644 (file)
        "permalink": "Ne Permalink noh heh",
        "print": "Drocke",
        "view": "Beloore",
+       "view-foreign": "Op $1 beloohre",
        "edit": "Ändere",
        "create": "Aanlääje",
        "editthispage": "De Sigg ändere",
        "jumptonavigation": "Noh de Navigation",
        "jumptosearch": "Jangk Söke!",
        "view-pool-error": "Deiht uns leid, de ßöörvere han em Momang ze vill ze donn.\nZoh vill Metmaacher versöhke di Sigg heh aanzelohre.\nBes esu joot un waat e Weilsche, ih dat de versöhks, di Sigg noch ens opzeroofe.\n\n$1",
+       "generic-pool-error": "Schahd, onser ẞöövere han ze vell ze donn.\nZoh vill Lück welle dat heh beloohre.\nWaad ene Momang, ih dat De et wider versöhs.",
        "pool-timeout": "Zick zem Waade affjeloufe, diweil mer op en Sperr am Waade wohre",
        "pool-queuefull": "De Schlang zom Waade op ene freie Prozäß zom Beärbeide es vull",
        "pool-errorunknown": "Dä Fähler kenne mer nit",
        "node-count-exceeded-category": "Sigge, woh dä <i lang=\"en\" xml:lang=\"en\">node-count</i> övverschredde es",
        "node-count-exceeded-warning": "Heh di Sigg hät dä <i lang=\"en\" xml:lang=\"en\">node-count</i> övverschredde",
        "expansion-depth-exceeded-category": "Sigge, woh de <i lang=\"en\" xml:lang=\"en\">expansion depth</i> övverschredde es",
+       "expansion-depth-exceeded-category-desc": "Dat heh es de Saachjropp för Sigge, woh de <i lang=\"en\" xml:lang=\"en\">expansion depth</i> övverschreddde es.",
        "expansion-depth-exceeded-warning": "Heh di Sigg hät de <i lang=\"en\" xml:lang=\"en\">expansion depth</i> övverschredde",
        "parser-unstrip-loop-warning": "Ene Befähl em Täx betrick sesch op sesch sellef.",
        "parser-unstrip-recursion-limit": "Ene Befähl em Täx es mieh wi {{PLURAL:$1|eijmohl|$1 Mohl|jaa nit}} met  sesch sellef verschachtelt.",
        "searchmenu-exists": "*Sigg '''[[$1]]'''",
        "searchmenu-new": "<strong>Donn de Sigg „[[:$1|$1]]“ hee em Wiki aanlääje.</strong>\n{{PLURAL:$2|Beloor Der ävver och die Sigg, di beim Söhke jefonge wood.|Beloor Der ävver och die Sigge, di beim Söhke jefonge woode sin.|}}",
        "searchprofile-articles": "Sigge vum Enhalt",
-       "searchprofile-project": "Hülp- ov Projäk-Sigge",
        "searchprofile-images": "Dateie met Medije",
        "searchprofile-everything": "Övverall noh",
        "searchprofile-advanced": "Extra",
        "searchprofile-articles-tooltip": "Söök en de $1",
-       "searchprofile-project-tooltip": "Söök en de $1",
        "searchprofile-images-tooltip": "Söök noh Dateie",
        "searchprofile-everything-tooltip": "Söök övverall dren, och op de Klaafsigge",
        "searchprofile-advanced-tooltip": "Donn en ußjesohte Appachtemangs sööke",
        "search-interwiki-default": "Op $1 woodte heh di Träffer jefonge:",
        "search-interwiki-more": "(mieh)",
        "search-relatedarticle": "Ähnlesch",
-       "searcheverything-enable": "En alle Appachtemangs söhke",
        "searchrelated": "ähnlesch",
        "searchall": "all",
        "showingresults": "Onge {{PLURAL:$1|weed <strong>eine</strong>|wääde bes <strong>$1</strong>|weed <strong>keine</strong>}} vun de jefonge Endrähsch jezeisch, vun de Nommer <strong>$2</strong> av.",
        "allowemail": "E-Mail vun andere Metmaacher zolooße",
        "prefs-searchoptions": "Enschtällonge för et Söhke",
        "prefs-namespaces": "Appachtemangs",
-       "defaultns": "Söns don en hee dä Appachtemengs söhke:",
        "default": "Standaad",
        "prefs-files": "Dateie",
        "prefs-custom-css": "Selfsjemaat <i lang=\"en\">Cascading Style Sheet</i>",
        "recentchanges-label-unpatrolled": "Heh di Änderung es noch nit nohjeloort",
        "recentchanges-label-plusminus": "Der Ömvang vun dä Sigg hät sesch öm di Aanzahl Bytes verändert.",
        "recentchanges-legend-heading": "'''Lejänd:'''",
-       "recentchanges-legend-newpage": "(Loor och noh de [[Special:NewPages|Leß met de neue Sigge]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Loor och noh de [[Special:NewPages|Leß met de neue Sigge]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Hee {{PLURAL:$1|es ein|sin bes op <strong>$1</strong>|es keine}} fun de Änderunge zick dem <strong>$3</strong> öm <strong>$4</strong> Uhr opjelėß.",
        "rclistfrom": "Zeich de Änderunge vum $3 $2 aan",
        "unwatchedpages": "Sigge, wo keiner drop oppass",
        "listredirects": "Ömleitunge",
        "listduplicatedfiles": "Leß met dubbelte Datteije",
+       "listduplicatedfiles-summary": "Dat heh es en Leß met Datteije, woh de neuste Väsjuhn vun es desällve es, wi de neuste Väsjuhn vun öhnds en ander Dattei. Bloß Datteije heh e Wiki sin med em Boot.",
        "listduplicatedfiles-entry": "Zoh dä Dattei [[:File:$1|$1]] ham_mer [[$3|{{PLURAL:$2|a Dubbel|$2 Dubbelte|kein Dubbelte}}]] jefonge.",
        "unusedtemplates": "Schablone oder Baustein, die nit jebruch wääde",
        "unusedtemplatestext": "Hee sin all de Schablone opjeliss, die em Appachtemeng „{{ns:template}}“ sin, die nit en\nander Sigge enjefüg wääde. Ih De jet dovun fottschmieß, denk dran, se künnte och op en ander Aat jebruch\nwääde, un luur Der der iehr ander Links aan!",
        "listgrouprights-removegroup-self": "Kann sesch sällver {{PLURAL:$2|eruß nämme uß dä Metmaacherjropp:|uß $2 Metmaacherjroppe eruß nämme:|uß kei Metmaacherjropp eruß nämme.}} $1",
        "listgrouprights-addgroup-self-all": "Kann sesch sällver en alle Metmaacherjroppe erenn donn",
        "listgrouprights-removegroup-self-all": "Kann sesch sällver uß alle Metmaacherjroppe eruß nämme",
+       "listgrouprights-namespaceprotection-namespace": "Appachtemang",
        "trackingcategories-name": "Dä Nohreesch udder däm Täxschtöck singe Nahme",
+       "trackingcategories-disabled": "Di Saachjrobb es afjeschalldt.",
        "mailnologin": "Keij E-Mail Adress",
        "mailnologintext": "Do mööts ald aanjemeldt un [[Special:UserLogin|enjelogg]] sin, un en jode E-Mail\nAdress en Dinge [[Special:Preferences|ming Enstellunge]] stonn han, öm en E-Mail aan andere Metmaacher ze\nschecke.",
        "emailuser": "E-mail aan dä Metmaacher",
        "watchnologin": "Nit enjelogg",
        "addwatch": "En de Oppassliss don",
        "addedwatchtext": "Die Sigg „[[:$1]]“ es jetz en Dinge [[Special:Watchlist|Oppaßleß]].\nWann di Sigg udder ier Klaafsigg verändert weed, kütt dat af jäz heh en di Oppaßleß.",
+       "addedwatchtext-short": "De Sigg  „$1“ es en Ding Oppaßleß openumme.",
        "removewatch": "Us de Oppassliss nämme",
        "removedwatchtext": "Die Sigg „[[:$1]]“ es jetz us de [[Special:Watchlist|Oppassliss]] erusjenomme.",
+       "removedwatchtext-short": "De Sigg  „$1“ es uß Dinge Oppaßleß eruß jenumme.",
        "watch": "Drop Oppasse",
        "watchthispage": "Op die Sigg oppasse",
        "unwatch": "Nimieh drop Oppasse",
        "unwatchthispage": "Nit mieh op die Sigg oppasse",
        "notanarticle": "Keine Atikkel",
        "notvisiblerev": "Di Version es fottjeschmesse",
-       "watchlist-details": "Do häs {{PLURAL:$1|<strong>ein</strong> Sigg|<strong>$1</strong> Sigge|<strong>kein</strong> Sigg}} en dä Oppassliss{{PLURAL:$1|, un di Klaafsigg dozo|, un de Klaafsigge dozo|}}.",
+       "watchlist-details": "Do häß {{PLURAL:$1|ein Sigg|$1 Sigge|kein Sigg}} en Dinge Oppaßleß{{PLURAL:$1|, un di Klaafsigg dohzoh|, un de Klaafsigge dohzoh|}}.",
        "wlheader-enotif": "Et <i lang=\"en\">e-mail</i> Schecke es enjeschalt.",
        "wlheader-showupdated": "Wann se Einer jeändert hätt, zickdäm De se et letzte Mol aanjeluurt häs, sin die Sigge <strong>extra markeet</strong>.",
        "wlnote2": "Heh sin de Änderonge us de läzde {{PLURAL:$1|Schtond|<strong>$1</strong> Schtonde|kein Schtond}} bes zom $2 öm $3 Uhr.",
        "contributions-title": "Beidräsch fum  $1",
        "mycontris": "Beidrähch",
        "contribsub2": "För {{GENDER:$3|dä|et|dä Metmaacher|de|dat}} $1: $1 ($2)",
+       "contributions-userdoesnotexist": "Ene Metmaacher mem Nahme „$1“ ham_mer nit.",
        "nocontribs": "Mer han kein Änderunge jefonge, en de Logböcher, die do passe däte.",
        "uctop": "(Neuste)",
        "month": "un Moohnt:",
        "movepagetalktext": "Dä Sigg ehr Klaafsigg, wann se ein hät, weed automatisch met  ömjenannt, '''usser''' wann:\n* de Sigg en en ander Appachtemeng kütt,\n* en Klaafsigg met däm neue Name ald do es, un et steiht och jet drop,\n* De unge en däm Kääsje '''kei''' Hökche aan häs.\nEn dänne Fäll, muss De Der dä Enhald vun dä Klaafsigge selvs vörnemme, un eröm kopeere watte bruchs.",
        "movearticle": "Sigg zem Ömnenne:",
        "moveuserpage-warning": "'''Opjepaß:''' Do wells en Metmaachersigg ömnänne, domet weed ävver dä Metmaacher sellver ''nit'' met ömjenannt.",
+       "movecategorypage-warning": "<strong>Opjepaß:</strong> Do kanns bloß di Sigg vun dä Saachjropp ömbenänne. Sigge, di en dä ahle Saachjropp sin, blieve doh. Se kumme nit met en di neue Saachjropp.",
        "movenologintext": "Do mööts ald aanjemeldt un [[Special:UserLogin|enjelogg]] sin, öm en Sigg ömzenenne.",
        "movenotallowed": "Do kriss nit erlaub, en däm Wiki heh de Sigge ömzenenne.",
        "movenotallowedfile": "Do häs nit dat Rääsch, Dateie ömzenenne.",
        "cant-move-user-page": "Do häs nit dat Rääsch, öm enem Metmaacher sing eetzte Sigg ömzedeufe.",
        "cant-move-to-user-page": "Do häs nit dat Rääsch, en Sigg tirkäk op en Metmaacher-Sigg ömzenänne, Do kanns se ävver op en Ungersigg dofun ömnenne.",
+       "cant-move-category-page": "Do häß nit dat Rääsch, Saachjroppesigge ömzebenänne.",
+       "cant-move-to-category-page": "Do häß nit dat Rääsch, en Sigg obb en Saachjroppesigg ömzebenänne.",
        "newtitle": "op dä neue Name",
        "move-watch": "Op die Sigg heh oppasse",
        "movepagebtn": "Ömnenne",
        "tooltip-summary": "Jif en koote Zesammefassung en",
        "interlanguage-link-title": "$1 ($2)",
        "common.css": "/* CSS heh aan dä Stell hät Uswirkunge op all Ovverflääsche */",
-       "cologneblue.css": "/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Kölsch Blau“ */",
        "monobook.css": "/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Monobooch“ */",
-       "modern.css": "/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Modern“ */",
        "vector.css": "/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Vector“ */",
        "print.css": "/* CSS heh aan dä Stell wirrek nur op et Sigge Drökke */",
        "noscript.css": "/* Dat CSS heh aan dä Stell krijje nur de Metmaacher met affjeschaldt JavaSkrepp jescheck */",
        "group-sysop.css": "/* Dat CSS heh aan dä Stell krijje nur dem Wiki sing Köbeße jescheck */",
        "group-bureaucrat.css": "/* Dat CSS heh aan dä Stell krijje nur de Bürrokraate jescheck */",
        "common.js": "/* Jedes JavaScrip hee kütt för jede Metmaacher in jede Sigg erinn */",
-       "cologneblue.js": "/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch \"Kölsch Blou\" jescheck */",
        "monobook.js": "/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch \"Monnobooch\" jescheck */",
-       "modern.js": "/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch \"Modern\" jescheck */",
        "vector.js": "/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch \"Vector\" jescheck */",
        "group-autoconfirmed.js": "/* De JavaSkreppte fun hee krijje bloß de autemattesch beshtääteschte Metmaacher jescheck */",
        "group-bot.js": "/* De JavaSkreppte fun hee krijje bloß de Bots jescheck */",
        "pageinfo-category-pages": "De Aanzahl Sigge",
        "pageinfo-category-subcats": "De Aanzahl Ongerjroppe",
        "pageinfo-category-files": "De Aanzahl Dateie",
-       "skinname-cologneblue": "Kölsch Blau",
        "skinname-monobook": "MonoBoch",
-       "skinname-modern": "Modern",
        "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Nohjeluurt. Dun dat fasshallde.",
        "markaspatrolledtext": "De Änderung es nohjeluert, dun dat fasshallde",
        "newimages-summary": "Heh die Sigg zeig die zoletz huhjeladene Belder un Dateie aan.",
        "newimages-legend": "Ußwähle",
        "newimages-label": "Dä Dattei ier Name udder e Stöck dofun:",
+       "newimages-showbots": "Zeisch, wat de Bots huhjelaade han.",
        "noimages": "Kein Dateie jefunge.",
        "ilsubmit": "Söhk",
        "bydate": "nohm Datum",
        "word-separator": "&#32;",
        "ellipsis": "&nbsp;…",
        "parentheses": "($1)",
+       "quotation-marks": "„$1“",
        "imgmultipageprev": "← de Sigg dovör",
        "imgmultipagenext": "de Sigg donoh →",
        "imgmultigo": "Lohß Jonn!",
        "watchlistedit-raw-done": "Ding Oppassliss es fassjehallde.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Eine Sigge-Tittel wood|<strong>$1</strong> Sigge-Tittele woodte|Keine Sigge-Tittel}} dobeijedonn:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Eine Endrach es eruß jefloore:|<strong>$1</strong> Endräsh es eruß jefloore:|Keine Endrach es eruß jefloore.}}",
+       "watchlistedit-clear-title": "Oppaßleß läddesch jemaad",
+       "watchlistedit-clear-legend": "Oppaßleß läddesch maache",
+       "watchlistedit-clear-explain": "Alle vun heh dä Siggetettelle fleeje uß dä Oppaßless eruß.",
+       "watchlistedit-clear-titles": "Siggetettelle",
+       "watchlistedit-clear-submit": "Maach Ding Oppaßleß läddesch.",
+       "watchlistedit-clear-done": "Ding Oppaßleß es läddesch jemaad.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Eine Siggetettel wood|$1 Siggetettele sin}} eruß jenumme:",
+       "watchlistedit-too-many": "Et sen zoh vell Sigge för heh aanzezeije.",
+       "watchlisttools-clear": "Maach de Oppaßleß läddesch",
        "watchlisttools-view": "Oppaßliß — Änderunge zeije",
        "watchlisttools-edit": "beloore un beärbede",
        "watchlisttools-raw": "rüh beärbeijde | expochteere | empochteere",
        "htmlform-no": "Nää",
        "htmlform-yes": "Joh",
        "htmlform-chosen-placeholder": "Söhk jäd_uß",
+       "htmlform-cloner-create": "Mieh derbei donn",
+       "htmlform-cloner-delete": "Fottnämme",
+       "htmlform-cloner-required": "Winnischsdens eine Wääd es nühdesch.",
        "sqlite-has-fts": "Version $1 (un kann en janze Täxte söhke)",
        "sqlite-no-fts": "Version $1 (kann ävver nit en janze Täxte söhke)",
        "logentry-delete-delete": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Sigg „$3“ fottjeschmeße.",
index b9b62ad..689a9ad 100644 (file)
        "createaccount-title": "Çêkirina hesabekî ji {{SITENAME}}",
        "createaccount-text": "Kesek ji te ra account'ekî bikarhêneran \"$2\" li {{SITENAME}} ($4) çêkir. Şîfreya otomatîk ji \"$2\" ra \"$3\" ye.\nNiha ê baş be eger tu xwe qeyd bikê û tu şîfreya xwe biguherînê.\n\nEger account'a bikarhêneran şaşî hate çêkirin, guhdare vê peyamê meke.",
        "loginlanguagelabel": "Ziman: $1",
+       "pt-login": "Têkeve",
+       "pt-login-button": "Têkeve",
+       "pt-createaccount": "Hesabekî çêke",
+       "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î:",
        "searchmenu-exists": "'''Rûpeleke bi navê \"[[:$1]]\" li ser vê wîkiyê heye.'''",
        "searchmenu-new": "Rûpela \"[[:$1]]\" çêke!",
        "searchprofile-articles": "Rûpelên naverokê",
-       "searchprofile-project": "Rûpelên alîkariyê û projeyê",
        "searchprofile-images": "Multîmedya",
        "searchprofile-everything": "Her tişt",
        "searchprofile-advanced": "Pêşketî",
        "searchprofile-articles-tooltip": "Di $1 da lêbigere",
-       "searchprofile-project-tooltip": "Di $1 da lêbigere",
        "searchprofile-images-tooltip": "Li pelan bigere",
        "search-result-size": "$1 ({{PLURAL:$2|peyvek|$2 peyv}})",
        "search-result-score": "Lêhatin: $1%",
        "prefs-emailconfirm-label": "Piştrastkirina E-nameyê:",
        "youremail": "E-nameya te:",
        "username": "{{GENDER:$1|Navê bikarhêner}}:",
-       "uid": "Nasnameya bikarhêner:",
        "prefs-memberingroups": "Endamê/a {{PLURAL:$1|komê|koman}}:",
        "prefs-registration": "Dema xweqeydkirinê:",
        "yourrealname": "Navê te yê rast:",
        "logempty": "Tiştek di vir de nîne.",
        "log-title-wildcard": "Li sernavan bigere, yê bi vê destpêdikin",
        "allpages": "Hemû rûpel",
-       "alphaindexline": "$1 heta $2",
        "nextpage": "Rûpela pêşî ($1)",
        "prevpage": "Rûpelê berî vê ($1)",
        "allpagesfrom": "Rûpela di rêza yekemîn de:",
index c48b946..019ed05 100644 (file)
        "vector-view-view": "Legere",
        "vector-view-viewsource": "Fontem inspicere",
        "actions": "Actiones",
+       "vector-more-actions": "Plus",
        "namespaces": "Spatia nominalia",
        "variants": "Variantes",
        "errorpagetitle": "Erratum",
        "searchmenu-exists": "'''Iam est pagina \"[[:$1]]\"'''",
        "searchmenu-new": "'''Creare paginam \"[[:$1]]\"'''",
        "searchprofile-articles": "Paginae contentorum",
-       "searchprofile-project": "Paginae adiutati et incepti",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Omnia",
        "searchprofile-advanced": "Callidissime",
        "searchprofile-articles-tooltip": "Quaerere in $1",
-       "searchprofile-project-tooltip": "Quaerere in $1",
        "searchprofile-images-tooltip": "Fasciculos quaerere",
        "searchprofile-everything-tooltip": "Omnia perscrutari (etiam paginae disputationis)",
        "searchprofile-advanced-tooltip": "In spatiis nominalibus accommotis quaerere",
        "search-interwiki-default": "$1 eventus:",
        "search-interwiki-more": "(plus)",
        "search-relatedarticle": "Relata",
-       "searcheverything-enable": "Quaerere in omnibus spatiis nominalibus",
        "searchrelated": "relata",
        "searchall": "omnia",
        "showingresults": "Subter monstrans {{PLURAL:$1|'''1''' eventu|'''$1''' eventibus}} tenus incipiens ab #'''$2'''.",
        "allowemail": "Sinere litteras electronicas inscriptioni electronicae meae mittere",
        "prefs-searchoptions": "Quaerere",
        "prefs-namespaces": "Spatia nominalia",
-       "defaultns": "Aut quaerere per haec spatia nominalia:",
        "default": "praedeterminatum",
        "prefs-files": "Fasciculi",
        "prefs-custom-css": "CSS proprium",
        "prefs-emailconfirm-label": "Adfirmatio inscriptionis electronicae:",
        "youremail": "Inscriptio electronica:",
        "username": "Nomen usoris:",
-       "uid": "ID usoris:",
        "prefs-registration": "Dies creationis rationis:",
        "yourrealname": "Nomen verum:",
        "yourlanguage": "Lingua:",
        "recentchanges-label-bot": "Hanc recensionem automaton fecit",
        "recentchanges-label-unpatrolled": "Haec recensio nondum est examinata",
        "recentchanges-label-plusminus": "Magnitudo paginae per istam copiam octetorum mutata est",
-       "recentchanges-legend-newpage": "(vide etiam [[Special:NewPages|indicem paginarum novarum]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide etiam [[Special:NewPages|indicem paginarum novarum]])",
        "rcnotefrom": "Subter sunt '''$1''' nuperrime mutata in proxima '''$2''' die.",
        "rclistfrom": "Monstrare mutata nova incipiens ab $3 $2",
        "rcshowhideminor": "$1 recensiones minores",
        "alllogstext": "Ostentantur omnia acta {{grammar:genitive|{{SITENAME}}}}.\nAdspectum graciliorem potes facere modum indicum, nomen usoris (cave litteras maiusculas minusculasque), vel titulum paginae (cave etiam litteras maiusculas minusculasque) seligendo.",
        "log-title-wildcard": "Quaerere titulos qui incipiunt litteris",
        "allpages": "Paginae omnes",
-       "alphaindexline": "$1 ad $2",
        "nextpage": "Pagina proxima ($1)",
        "prevpage": "Pagina superior ($1)",
        "allpagesfrom": "Monstrare paginas ab:",
        "pageinfo-recent-edits": "Praesens numerus recensionum (intra praeterita $1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Categoria celata|Categoriae celatae}} ($1)",
        "pageinfo-toolboxlink": "De hac pagina",
-       "skinname-cologneblue": "Caerulus Colonia",
        "markaspatrolleddiff": "Indicare hanc paginam qua circumita",
        "markaspatrolledtext": "Indicare hanc paginam qua circumita",
        "markedaspatrolled": "Indicare hanc paginam qua circumita",
index 0337d37..e58a386 100644 (file)
        },
        "tog-underline": "Linken ënnersträichen:",
        "tog-hideminor": "Kleng Ännerungen an de rezenten Ännerunge verstoppen",
-       "tog-hidepatrolled": "Iwwerkuckten Ännerungen an de \"Rezenten Ännerungen\" verstoppen",
-       "tog-newpageshidepatrolled": "Iwwerkuckte Säiten op der Lëscht vun den \"Neie Säite\" verstoppen",
+       "tog-hidepatrolled": "Nogekuckt Ännerungen an de \"Rezenten Ännerungen\" verstoppen",
+       "tog-newpageshidepatrolled": "Nogekuckt Säiten op der Lëscht vun den \"Neie Säite\" verstoppen",
        "tog-extendwatchlist": "Iwwerwaachungslëscht op all Ännerungen ausbreeden, net nëmmen op déi rezentst",
-       "tog-usenewrc": "Rezent Ännerunge an Iwwerwaachungslëscht pro Säit weisen",
+       "tog-usenewrc": "Rezent Ännerungen an Iwwerwaachungslëscht pro Säit weisen",
        "tog-numberheadings": "Iwwerschrëften automatesch numeréieren",
        "tog-showtoolbar": "Ännerungstoolbar weisen",
        "tog-editondblclick": "Säite mat Duebelklick änneren",
        "vector-view-view": "Liesen",
        "vector-view-viewsource": "Quellcode weisen",
        "actions": "Aktiounen",
+       "vector-more-actions": "Méi",
        "namespaces": "Nummraim",
        "variants": "Varianten",
        "navigation-heading": "Navigatiounsmenü",
        "redirectpagesub": "Viruleedungssäit",
        "lastmodifiedat": "Dës Säit gouf de(n) $1 ëm $2 Auer fir d'lescht geännert.",
        "viewcount": "Dës Säit gouf bis elo {{PLURAL:$1|emol|$1-mol}} ofgefrot.",
-       "protectedpage": "Gespaarte Säit",
+       "protectedpage": "Gespaart Säit",
        "jumpto": "Wiesselen op:",
        "jumptonavigation": "Navigatioun",
        "jumptosearch": "sichen",
        "parser-template-loop-warning": "Endlos Schleef an der Schabloun: [[$1]] entdeckt",
        "parser-template-recursion-depth-warning": "D'Limit vun der Zuel vun de Verschachtelunge vu Schabloune gouf iwwerschratt ($1)",
        "language-converter-depth-warning": "D'Limite vun der déift vun der Sproochëmwandlung gouf iwwerschratt ($1)",
+       "node-count-exceeded-category-desc": "Eng Kategorie fir Säiten an deenen d'Zuel vun de Kniet (Node-count) ze grouss ass.",
        "parser-unstrip-loop-warning": "Endlos Schleef entdeckt",
        "converter-manual-rule-error": "An der Regel iwwer déi manuell Ëmwandlung vun der Sprooch gouf e Feeler fonnt",
        "undo-success": "D'Ännerung gëtt réckgängeg gemaach. Iwwerpréift w.e.g. de Verglach ënnendrënner fir nozekuckeen ob et sou richteg ass, duerno späichert w.e.g d'Ännerungen of, fir dës Aktioun ofzeschléissen.",
        "currentrev": "Aktuell Versioun",
        "currentrev-asof": "Aktuell Versioun vum $1",
        "revisionasof": "Versioun vum $1",
-       "revision-info": "Versioun vum $1 vum $2.",
+       "revision-info": "Versioun vum $1 vum {{GENDER:$6|$2}}$7.",
        "previousrevision": "← Méi al Versioun",
        "nextrevision": "Méi rezent Versioun →",
        "currentrevisionlink": "Aktuell Versioun",
        "searchmenu-exists": "* Säit '''[[$1]]'''",
        "searchmenu-new": "<strong>Opmaache vun der Säit ''[[:$1]]'' op dëser Wiki!</strong> {{PLURAL:$2|0=|Kuckt och d'Säit déi Dir beim siche fonnt hutt.|Kuckt och d'Resultater déi Dir beim siche fonnt hutt.}}",
        "searchprofile-articles": "Säite mat Inhalt",
-       "searchprofile-project": "Hëllef a Projetssäiten",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alles",
        "searchprofile-advanced": "Erweidert",
        "searchprofile-articles-tooltip": "Sichen a(n) $1",
-       "searchprofile-project-tooltip": "Sichen a(n) $1",
        "searchprofile-images-tooltip": "No Fichiere sichen",
        "searchprofile-everything-tooltip": "Op alle Säiten nom Inhalt sichen  (inklusiv Diskussiounssäiten)",
        "searchprofile-advanced-tooltip": "Sich an den Nummraim déi an de perséinlichen Astellungen festgeluecht sinn",
        "search-interwiki-default": "Resultater vu(n) $1:",
        "search-interwiki-more": "(méi)",
        "search-relatedarticle": "A Verbindung",
-       "searcheverything-enable": "An allen Nummraim sichen",
        "searchrelated": "a Verbindng",
        "searchall": "all",
        "showingresults": "Hei gesitt der  {{PLURAL:$1| '''1''' Resultat|'''$1''' Resultater}}, ugefaange mat #'''$2'''.",
        "allowemail": "E-Maile vun anere Benotzer kréien.",
        "prefs-searchoptions": "Sichen",
        "prefs-namespaces": "Nummraim",
-       "defaultns": "Soss an dësen Nummraim sichen:",
        "default": "Standard",
        "prefs-files": "Fichieren",
        "prefs-custom-css": "Benotzerdefinéierten CSS",
        "right-move": "Säite réckelen",
        "right-move-subpages": "Säiten zesumme mat hiren Ënnersäite réckelen",
        "right-move-rootuserpages": "Haapt-Benotzersäite réckelen",
+       "right-move-categorypages": "Kategorie-Säite réckelen",
        "right-movefile": "Fichiere réckelen",
        "right-suppressredirect": "Keng Viruleedung vum alen Numm aus uleeë wann eng Säit geréckelt gëtt",
        "right-upload": "Fichieren eroplueden",
        "action-move": "dës Säit ze réckelen",
        "action-move-subpages": "dës Säit an déi Ënnersäiten déi dozou gehéieren ze réckelen",
        "action-move-rootuserpages": "Haapt-Benotzersäite réckelen",
+       "action-move-categorypages": "Kategorie-Säite ze réckelen",
        "action-movefile": "Dëse Fichier réckelen",
        "action-upload": "dëse Fichier eropzelueden",
        "action-reupload": "dëse Fichier (deen et scho gëtt) z'iwwerschreiwen",
        "recentchanges-label-unpatrolled": "Dës Ännerung gouf nach net nogekuckt",
        "recentchanges-label-plusminus": "D'Gréisst vun der Säit huet sech ëm déi Zuel vu Bytes geännert",
        "recentchanges-legend-heading": "'''Legend:'''",
-       "recentchanges-legend-newpage": "(kuckt och [[Special:NewPages|Lëscht vun den neie Säiten]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kuckt och [[Special:NewPages|Lëscht vun den neie Säiten]])",
        "recentchanges-legend-plusminus": "''(±123)''",
        "rcnotefrom": "Ugewise ginn d'Ännerunge vum <strong>$2</strong> un (maximal <strong>$1</strong> Ännerunge gi gewisen).",
        "rclistfrom": "Nei Ännerunge vu(n) $3 $2 u weisen",
        "largefileserver": "Dëse Fichier ass méi grouss wéi déi um Server agestallte Maximalgréisst.",
        "emptyfile": "De Fichier deen Dir eropgelueden hutt, schéngt eidel ze sinn. Dëst kann duerch en Tippfeeler am Numm vum Fichier kommen. Préift w.e.g. no, op Dir dëse Fichier wierklech eropluede wëllt.",
        "windows-nonascii-filename": "Dës Wiki ënnerstëtzt d'Spezialzeechen an de Fichiersnimm net.",
-       "fileexists": "Et gëtt schonn e Fichier mat dësem Numm, kuckt w.e.g.\n<strong>[[:$1]]</strong> wann Dir net sécher sidd, ob Dir den Numm ännere wëllt.\n[[$1|thumb]]",
+       "fileexists": "Et gëtt schonn e Fichier mat dësem Numm, kuckt w.e.g.\n<strong>[[:$1]]</strong> no wann {{GENDER:|Dir}} net sécher sidd, ob Dir en ännere wëllt.\n[[$1|thumb]]",
        "filepageexists": "D'Beschreiwungssäit fir dëse Fichier gouf schonn als <strong>[[:$1]]</strong> ugeluecht, et gëtt awer kee Fichier mat deem Numm.\n\nDe Resumé deen Dir agitt, gëtt net op d'Beschreiwungssäit iwwerholl.\nFir datt Äre Resumé do opdaucht musst Dir e manuell änneren.\n[[$1|thumb]]",
        "fileexists-extension": "E Fichier mat engem ähnlechen Numm gëtt et schonn: [[$2|thumb]]\n* Numm vum Fichier deen Dir versicht eropzelueden: <strong>[[:$1]]</strong>\n* Numm vum Fichier deen et scho gëtt: <strong>[[:$2]]</strong>\nWielt w.e.g. en aneren Numm.",
        "fileexists-thumbnail-yes": "Beim Fichier schéngt et sech ëm e klengt Bild ''(Miniatur)'' ze handelen. [[$1|thumb]]\nKuckt de Fichier <strong>[[:$1]]</strong> w.e.g. no.\nWann et sech ëm d'Bild an der Originalgréisst handelt, da brauch kee separat Bild als Miniatur eropgelueden ze ginn.",
        "wantedtemplates": "Gewënscht Schablounen",
        "mostlinked": "Dacks verlinkt Säiten",
        "mostlinkedcategories": "Dacks benotzt Kategorien",
-       "mostlinkedtemplates": "Dacks benotzt Schablounen",
+       "mostlinkedtemplates": "Säiten déi am dacksten agebonn sinn",
        "mostcategories": "Säite mat de meeschte Kategorien",
        "mostimages": "Dacks benotzt Biller",
        "mostinterwikis": "Säite mat de meeschten Interwikilinken",
        "watchnologin": "Net ageloggt",
        "addwatch": "Op d'Iwwerwaachungslëscht derbäisetzen",
        "addedwatchtext": "D'Säit \"[[:$1]]\" gouf op är [[Special:Watchlist|Iwwerwaachungslëscht]] gesat.\nAll weider Ännerungen op dëser Säit an der associéierter Diskussiounssäit ginn hei opgelëscht.",
+       "addedwatchtext-short": "D'Säit \"$1\" gouf op Är Iwwerwaachungslëscht derbäigesat.",
        "removewatch": "Vun der Iwwerwaachungslëscht erofhuelen",
        "removedwatchtext": "D'Säit \"[[:$1]]\" gouf vun [[Special:Watchlist|ärer Iwwerwaachungslëscht]] erofgeholl.",
+       "removedwatchtext-short": "D'Säit \"$1\" gouf vun Ärer Iwwerwaachungslëscht erofgeholl.",
        "watch": "Iwwerwaachen",
        "watchthispage": "Dës Säit iwwerwaachen",
        "unwatch": "Net méi iwwerwaachen",
        "rollbacklinkcount-morethan": "méi wéi {{PLURAL:$1|Eng Ännerung|$1 Ännerungen}} zrécksetzen",
        "rollbackfailed": "Zrécksetzen huet net geklappt",
        "cantrollback": "Lescht Ännerung kann net zréckgesat ginn. De leschten Auteur ass deen eenzegen Auteur vun dëser Säit.",
-       "alreadyrolled": "Déi lescht Ännerung vun der Säit [[:$1]] vum [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);; kann net zeréckgesat ginn;\neen Aneren huet dëst entweder scho gemaach oder nei Ännerungen agedroen.\n\nDéi lescht Ännerung vun der Säit ass vum [[User:$3|$3]] ([[User talk:$3|Diskussioun]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "alreadyrolled": "Déi lescht Ännerung vun der Säit [[:$1]] vum [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); kann net zréckgesat ginn;\neen Aneren huet dat entweder scho gemaach oder nei Ännerungen agedroen.\n\nDéi lescht Ännerung vun der Säit war vum [[User:$3|$3]] ([[User talk:$3|Diskussioun]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "De Resumé vun der Ännerung war: \"''$1''\".",
        "revertpage": "Ännerunge vum [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussioun]]) zréckgesat op déi lescht Versioun vum [[User:$1|$1]]",
        "revertpage-nouser": "Zréckgesaten Ännerungen duerch e verstoppte Benotzer op déi lescht Versioun vum {{GENDER:$1|[[User:$1|$1]]}}",
        "movenotallowedfile": "Dir hutt net d'Recht fir Fichieren ze réckelen.",
        "cant-move-user-page": "Dir hutt net déi néideg Rechter fir Benotzerhaaptsäiten ze réckelen.",
        "cant-move-to-user-page": "Dir hutt net d'Recht fir eng Säit op eng Benotzersäit (ausser op eng Ënnersäit vun enger Benotzersäit) ze réckelen.",
+       "cant-move-category-page": "Dir hutt net déi néideg Rechter fir Kategorie-Säiten ze réckelen.",
+       "cant-move-to-category-page": "Dir hutt net déi néideg Rechter fir eng Säit op eng Kategoriesäit ze réckelen.",
        "newtitle": "Op den neien Titel:",
        "move-watch": "Dës Säit iwwerwaachen",
        "movepagebtn": "Säit réckelen",
        "tooltip-recreate": "D'Säit nees uleeën, obwuel se geläscht gi war.",
        "tooltip-upload": "Mam eroplueden ufänken",
        "tooltip-rollback": "\"Zrécksetzen\" mécht all Ännerunge vum leschten \"Auteur\" an engem Klick nees réckgängeg.",
-       "tooltip-undo": "\"Zréck\" setzt dës Ännerung zréck a mécht den Ännerungsformulaire am Modus \"kucken ouni ofzespäicheren\" op.\nErlaabt et e Grond an de Resumé derbäizesetzen.",
+       "tooltip-undo": "\"Zréck\" setzt dës Ännerung zréck a mécht den Ännerungsformulaire am Modus \"kucken ouni ofzespäicheren\" op, fir datt een  eventuell eng Ursaach an de Resumé ka schreiwen.",
        "tooltip-preferences-save": "Astellunge späicheren",
        "tooltip-summary": "Gitt e kuerze Resumé an",
        "interlanguage-link-title": "$1 - $2",
        "common.css": "/* Dës CSS huet nëmmen Afloss op de Skin ''Chick''  */",
-       "cologneblue.css": "/* Dës CSS huet nëmmen Afloss op de Skin ''Köln Blo''  */",
        "monobook.css": "/* Dës CSS huet nëmmen Afloss op de Skin ''Monobook''  */",
-       "modern.css": "/* Dës CSS huet nëmmen Afloss op de Skin ''Modern''  */",
        "common.js": "/* All JavaScript hei gëtt fir all Benotzer beim Luede vun all Säit gelueden. */",
        "anonymous": "{{PLURAL:$1|Anonyme Benotzer|Anonym Benotzer}} op {{SITENAME}}",
        "siteuser": "{{SITENAME}}-Benotzer $1",
        "pageinfo-category-pages": "Zuel vun de Säiten",
        "pageinfo-category-subcats": "Zuel vun den Ënnerkategorien",
        "pageinfo-category-files": "Zuel vun de Fichieren",
-       "skinname-cologneblue": "Köln Blo",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Modern",
        "markaspatrolleddiff": "Als nogekuckt markéieren",
        "markaspatrolledtext": "Dës Säit als nogekuckt markéieren",
        "markedaspatrolled": "ass als nogekuckt markéiert",
        "newimages-summary": "Dës Spezialsäit weist eng Lëscht mat de Fichieren déi als lescht eropgeluede goufen.",
        "newimages-legend": "Filter",
        "newimages-label": "Numm vum Fichier (oder en Deel dovun):",
+       "newimages-showbots": "Vu Botten eropgeluede Fichiere weisen",
        "noimages": "Keng Biller fonnt.",
        "ilsubmit": "Sichen",
        "bydate": "no Datum",
        "watchlistedit-raw-done": "Är Iwwerwaachungslëscht gouf aktualiséiert.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 Säit gouf|$1 Säite goufen}} derbäigesat:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 Säit gouf|$1 Säite goufen}} erausgeholl:",
+       "watchlistedit-clear-title": "Eidelgemaachten Iwwerwaachungslëscht",
        "watchlistedit-clear-legend": "Iwwerwaachungslëscht eidelmaachen",
        "watchlistedit-clear-explain": "All D'Säite gi vun Ärer Iwwerwaachungslëscht erofgeholl",
        "watchlistedit-clear-titles": "Säiten:",
index 365b76f..a301c5a 100644 (file)
        "searchmenu-exists": "'''И вики-проектда \"[[:$1]]\" тlвар алай ччин ава.'''",
        "searchmenu-new": "'''И вики-проектда «[[:$1]]» ччин туькӀуьрун!'''",
        "searchprofile-articles": "Асул ччинар",
-       "searchprofile-project": "Куьмек гунин ва проектдин ччинар",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Вири",
        "searchprofile-advanced": "Гегьеншдиз",
        "searchprofile-articles-tooltip": "$1-да къекъуьгъ",
-       "searchprofile-project-tooltip": "$1-да къекъуьгъ",
        "searchprofile-images-tooltip": "Файлар жугъура",
        "searchprofile-everything-tooltip": "Вири ччинра къекъуьгъ (веревирдрин ччинар кваз)",
        "searchprofile-advanced-tooltip": "Ганвай тlварарин генгвилера къекъуьгъ",
        "group-bureaucrat-member": "{{GENDER:$1|бюрократ}}",
        "grouppage-user": "{{ns:project}}:Иштиракчияр",
        "grouppage-bot": "{{ns:project}}:Бот",
-       "grouppage-sysop": "{{ns:project}}:Ð\9aÑ\8aавÑ\85аÑ\8fр",
+       "grouppage-sysop": "{{ns:project}}:Ð\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80ар",
        "right-read": "Ччинар кIелун",
        "right-edit": "Дегишар хъувун",
        "right-move": "Ччинрин тIварар эхцигун",
index a5dd37a..a4ca693 100644 (file)
        "tog-hidepatrolled": "Scund i mudifegh verifegaa intra i ültem mudifegh",
        "tog-newpageshidepatrolled": "Scund i paginn verifegaa de la lista di paginn növ",
        "tog-extendwatchlist": "Slarga la funziun \"tegn sot ögg\" in manera che la fà vidè tüt i mudifegh, minga dumà l'ültema",
-       "tog-usenewrc": "Dupra i ültem mudifegh avanzaa (ghe vör el JavaScript)",
-       "tog-numberheadings": "Utu-nümerazión di paragraf",
-       "tog-showtoolbar": "Fá vidé ai butún da redataziún (JavaScript)",
-       "tog-editondblclick": "Redatá i pagin cun al dópi clich (JavaScript)",
-       "tog-editsectiononrightclick": "Abilitá redatazziún dai sezziún cun al clic<br />\nsüi titul dai sezziún (JavaScript)",
-       "tog-watchcreations": "Giunta i paginn ch'hoo creaa mì a la lista di paginn che tegni sot ögg",
-       "tog-watchdefault": "Gjüntá i pagin redataa in dala lista dii pagin tegnüü d'öcc",
-       "tog-watchmoves": "Giunta i paginn ch'hoo muvüü a la lista di paginn che tegni sot ögg",
-       "tog-watchdeletion": "Giunta i paginn ch'hoo scancelaa a la lista di paginn che tegni sot ögg",
+       "tog-usenewrc": "Reönés le mudifiche per pàgina endèle ölteme mudìfiche 'ndèi oservàcc speciài",
+       "tog-numberheadings": "Auto-nümerazion di paragraf",
+       "tog-showtoolbar": "Fà ved la barra dei arnés de modifica",
+       "tog-editondblclick": "Redatá i pagin cun al dópi clich",
+       "tog-editsectiononrightclick": "Abilitá mudifica di seziún cun al clic dester sül tìtul",
+       "tog-watchcreations": "Giunta i paginn e i archivi ch'hoo creaa mì a la lista di paginn che tegni sot ögg",
+       "tog-watchdefault": "Gjüntá i pagin e i archivi mudificaa in dela lista dii pagin tegnüü d'öcc",
+       "tog-watchmoves": "Giunta i paginn e i archivi ch'hoo muvüü a la lista di paginn che tegni sot ögg",
+       "tog-watchdeletion": "Giunta i paginne i archivi ch'hoo scancelaa a la lista di paginn che tegni sot ögg",
        "tog-minordefault": "Marca tücc i mudifegh cume piscinìn",
        "tog-previewontop": "Fá vidé un'anteprima anaanz dala finèstra da redatazziún",
        "tog-previewonfirst": "Fá vidé l'anteprima ala prima redatazziún",
+       "tog-enotifwatchlistpages": "Màndem 'na e-mail quan che vé mudificàda 'na pagina o 'n archivi che g'ho 'ntra i mé oservàcc speciài",
        "tog-enotifusertalkpages": "Mandem un messagg e-mail quand che gh'è di mudifegh a la mè pàgina di ciaciarad",
-       "tog-enotifminoredits": "Màndem un messagg e-mail anca per i mudifegh piscinín",
+       "tog-enotifminoredits": "Màndem un messagg e-mail anca per i mudifegh piscinín ai articol e ai archivi",
        "tog-enotifrevealaddr": "Lassa vedè 'l mè indirizz e-mail int i messagg d'avis",
+       "tog-shownumberswatching": "Fa vet el nümer de ütent che té d'ögg l'articol",
        "tog-oldsig": "Firma esistenta:",
        "tog-fancysig": "Trata la firma cume test wiki (senza nissön ligam utumatich)",
-       "tog-watchlisthideown": "Sconda i me mudifich dai pagin che a ten d'ögg",
-       "tog-watchlisthidebots": "Sconda i mudifich di bot da i pagin che a ten d'ögg",
+       "tog-uselivepreview": "Ativa la funzion \"Live Preview\" (anteprima al vul)",
+       "tog-forceeditsummary": "Ciamem cunferma semai che 'l camp oget l'è öt",
+       "tog-watchlisthideown": "Scont le mé mudìfiche endèi oservàcc speciài",
+       "tog-watchlisthidebots": "Sconda i mudifich di bot da i pagin uservaa special",
+       "tog-watchlisthideminor": "Scont le mudìfiche picinìne 'ndèi oservàcc speciai",
+       "tog-watchlisthideliu": "Scont le mudìfiche dei ütèncc autenticàcc endèi oservàcc speciài",
+       "tog-watchlisthideanons": "Scont le mudìfiche dei ütèncc anònim endèi oservàcc speciài",
+       "tog-watchlisthidepatrolled": "Scont le mudìfiche verificàde endèi oservàcc speciài",
        "tog-ccmeonemails": "Spedissem una copia di messagg spedii a i alter druvadur",
        "tog-diffonly": "Mustra mía el cuntegnüü de la pagina apress ai ''diffs''",
        "tog-showhiddencats": "Fà vidè i categurij scundüü",
        "tog-norollbackdiff": "Mustra mía i ''diffs'' dop che i henn staa ripristinaa cun un rollback",
+       "tog-useeditwarning": "Avìzem quan che so dré a nà fò de 'na pàgina sènsa ìga salvàt le mudìfiche",
+       "tog-prefershttps": "Dopra sèmper 'na conesiù sigüra quan che s'è autenticàcc",
        "underline-always": "Semper",
        "underline-never": "Mai",
        "underline-default": "Mantegn i impustazión standard del browser o de l'interfàcia",
@@ -57,7 +67,7 @@
        "editfont-sansserif": "Font sans-serif",
        "editfont-serif": "Font serif",
        "sunday": "Dumeniga",
-       "monday": "Lündesdí",
+       "monday": "Lünesdí",
        "tuesday": "Martedì",
        "wednesday": "Merculdí",
        "thursday": "Giuedí",
        "oct": "Utu",
        "nov": "Nuv",
        "dec": "Dic",
+       "january-date": "{{PLURAL:$1|1°|$1}} de zenér",
+       "february-date": "{{PLURAL:$1|1°|$1}} de febrér",
+       "march-date": "{{PLURAL:$1|1°|$1}} de Mars",
+       "april-date": "{{PLURAL:$1|1°|$1}} de Bril",
+       "may-date": "{{PLURAL:$1|1°|$1}} de Magio",
+       "june-date": "{{PLURAL:$1|1°|$1}} de Zögn",
+       "july-date": "{{PLURAL:$1|1°|$1}} de Löi",
+       "august-date": "{{PLURAL:$1|1°|$1}} de Agost",
+       "september-date": "{{PLURAL:$1|1°|$1}} de Setèmber",
+       "october-date": "{{PLURAL:$1|1°|$1}} de Utùer",
+       "november-date": "{{PLURAL:$1|1°|$1}} de Noèmber",
+       "december-date": "{{PLURAL:$1|1°|$1}} de Dezèmber",
        "pagecategories": "{{PLURAL:$1|Categuria|Categurij}}",
        "category_header": "Artìcuj int la categuria \"$1\"",
        "subcategories": "Suta-categurij",
        "category-subcat-count": "{{PLURAL:$2|Quela categuria chì la gh'ha dumà una sota-categuria, missa chì de sota.|Quela categuria chì la gh'ha {{PLURAL:$1|una sota-categuria|$1 sota-categurij}} chì de sota, sü un tutal de $2.}}",
        "category-subcat-count-limited": "Quela categuria chì la gh'ha denter {{PLURAL:$1|la sut-categuria| i $1 sut-categurij}} chì abass.",
        "category-article-count": "{{PLURAL:$2|Quela categuria chì la gh'ha dumà quela pagina chì.|In quela categuria chì gh'è {{PLURAL:$1|la pagina indicada|i $1 paginn indicaa}} de $2 che gh'hinn in tutal.}}",
+       "category-article-count-limited": "Chèsta categuria la g'ha dét {{PLURAL:$1|l'artìcol|i $1 artìcoi}} elencàcc ché sota:",
        "category-file-count": "{{PLURAL:$2|Quela categuria chì la gh'ha denter dumà el file chì suta|Quela categuria chì la gh'ha denter {{PLURAL:$1|'l file|$1 i file}} ripurtaa chì suta, sü un tutal de $2.}}",
+       "category-file-count-limited": "Chèsta categuria la g'ha dét {{PLURAL:$1|l'archivi|i $1 archivi}} elencàcc ché sota:",
        "listingcontinuesabbrev": "cont.",
        "index-category": "Paginn indicizaa",
+       "noindex-category": "Paginn minga indicizaa",
+       "broken-file-category": "Pàgine con dét colegamèncc che va mìa",
        "about": "A pruposit də",
        "article": "Pagina de cuntegnüü",
        "newwindow": "(sa derviss int un'óltra finèstra)",
        "cancel": "Lassa perd",
-       "moredotdotdot": "Püssee",
+       "moredotdotdot": "Amò...",
+       "morenotlisted": "Chèsta lìsta l'è mìa compléta",
        "mypage": "La mè pagina",
        "mytalk": "i mè discüssiun",
        "anontalk": "Ciciarad per quel adress IP chì",
        "navigation": "Navegazión",
        "and": "&#32;e",
        "qbfind": "Tröva",
-       "qbbrowse": "Sföja",
+       "qbbrowse": "Fà passà",
        "qbedit": "Mudifega",
        "qbpageoptions": "Opzión de la pagina",
        "qbmyoptions": "I mè paginn",
        "vector-view-view": "Legg",
        "vector-view-viewsource": "Varda el codes",
        "actions": "Azión",
+       "vector-more-actions": "Amò",
        "namespaces": "Namespace",
        "variants": "Variant",
        "navigation-heading": "Menù de navigasiù",
        "postcomment": "Sezión növa",
        "articlepage": "Varda l'articul",
        "talk": "Discüssión",
-       "views": "Visid",
+       "views": "Vìste",
        "toolbox": "Arnés",
        "userpage": "Vidè la pàgina del dovrat",
        "projectpage": "Varda la pagina de servizzi",
        "jumptonavigation": "Navigazión",
        "jumptosearch": "cerca",
        "view-pool-error": "Ne rincress, ma i server a hinn bej caregaa al mument.\nTrop drovat a hinn 'dree pruvà a vardà quela pagina chì.\nPer piasè, specia un mument prima de pruà a vardà anmò quela pagina chì.\n\n$1",
+       "generic-pool-error": "Ne rincress, ma i server a hinn bej caregaa al mument.\nTrop drovat a hinn 'dree pruvà a vardà chèsta risorsa.\nPer piasè, specia un mument prima de pruà a cargà anmò quela risorsa chì.\n\n$1",
        "pool-timeout": "Tép scadìt per l'operasiù de blocàgio",
        "pool-queuefull": "La cùa del \"pool\" l'è piéna",
        "pool-errorunknown": "Erùr mìa cunusìt",
-       "aboutsite": "A prupòsit de {{SITENAME}}",
+       "pool-servererror": "El contör dei pool l'è mìa dispunìbil ($1).",
+       "aboutsite": "A mèret de {{SITENAME}}",
        "aboutpage": "Project:A pruposit",
-       "copyright": "El cuntegnüü a l'è dispunibil sota a una licenza $1.",
+       "copyright": "Se minga marcaa in manera diferenta, el cuntegnüü a l'è dispunibil sota a una licenza $1.",
        "copyrightpage": "{{ns:project}}:Dirit d'autur",
        "currentevents": "Atüalitaa",
        "currentevents-url": "Project:Aveniment Recent",
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "retrievedfrom": "Utegnüü de \"$1\"",
        "youhavenewmessages": "A gh'hii di $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Te g'hét}} $1 de {{PLURAL:$3|'n óter ütènt|$3 ütèncc}} ($2).",
+       "youhavenewmessagesmanyusers": "Te g'hét $1 de divèrsi ütèncc ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|en mesàgio nöf|999=mesàgi nöf}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|öltem cambiamènt|999=öltem cambiamèncc}}",
        "youhavenewmessagesmulti": "Te gh'hee di messagg növ ins'el $1",
        "editsection": "mudifega",
        "editold": "mudifega",
        "viewsourcelink": "fà vidè el codes surgent",
        "editsectionhint": "Mudifega la sezión $1",
        "toc": "Cuntegnüü",
-       "showtoc": "fà vidè",
+       "showtoc": "fà ved",
        "hidetoc": "scund",
+       "collapsible-collapse": "sara sü",
+       "collapsible-expand": "dèrf fò",
        "thisisdeleted": "Varda o rimet a post $1?",
-       "viewdeleted": "Te vöret vidè $1?",
+       "viewdeleted": "Vöret vidè $1?",
        "restorelink": "{{PLURAL:$1|1 mudifega scancelada|$1 mudifegh scancelaa}}",
        "feedlinks": "Feed:",
        "feed-invalid": "Mudalità de sotascrizión del feed minga valida",
        "page-rss-feed": "Feed RSS per \"$1\"",
        "page-atom-feed": "Feed Atom per \"$1\"",
        "red-link-title": "$1 (la pagina la gh'è minga)",
+       "sort-descending": "Met en ùrden del piö grant al piö pesèn",
+       "sort-ascending": "Met en ùrden del piö pesèn al piö grant",
        "nstab-main": "Articul",
        "nstab-user": "Pagina persunala",
        "nstab-media": "Pagina multimediala",
        "nospecialpagetext": "<strong>T'hee ciamaa una pagina speciala minga valida.</strong>\n\nUna lista di paginn special la se pö truà in de la [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Erur",
        "databaseerror": "Erur in del database",
+       "databaseerror-text": "Gh'è stat 'n erùr endèna query söl database.\nPöl das che ghe sàpe en erùr de programasiù endèl software.",
+       "databaseerror-textcl": "Gh'è stat 'n erùr endèna query söl database",
+       "databaseerror-query": "Ricérca: $1",
+       "databaseerror-function": "Funsiù: $1",
+       "databaseerror-error": "Erur: $1",
+       "laggedslavemode": "<strong>Ocio:</strong> Pöl das che la pàgina la g'hape gnemò dét i agiurnamèncc piö nöf.",
        "readonly": "Database blucaa",
+       "enterlockreason": "Indicà el mutìf del bloch e specificà el momènt che se pènsa de tiràl vià",
+       "readonlytext": "Adès come adès el database l'è blocàt e se pöl mìa fà mudìfiche a le pàgine gne creàn de nöe. El bloch de sòlet el depènt de operasiù de maütensiù del database. Se pödarà turnà a doprà 'l database quan che le operasiù de manütensiù le sarà finìde.\n\nL'aministradur del sistéma che g'ha blocàt el database el g'ha dat chèsta spiegasiù: $1",
        "missing-article": "El database l'ha minga truaa el test d'una pagina che l'avaria duvüü truà, ciamaa \"$1\" $2.\n\nQuest chì a l'è de solet causaa perchè al s'è riciamaa un paragón intra revisión vegg de la pagina o un ligam a una versión vegia d'una pagina che l'è stada scancelada\n\nSe l'è minga inscì, te pudariet vegh truà un bug in del software.\n\nPer piasè, fa raport a 'n'[[Special:ListUsers/sysop|aministradur]], cun la nota de l'URL.",
        "missingarticle-rev": "(revision#: $1)",
        "missingarticle-diff": "(Diff: $1, $2)",
+       "readonly_lag": "El database l'è stat blocàt en automàtich per lasà che i server i se sincrunìze col master.",
        "internalerror": "Erur in del sistema",
        "internalerror_info": "Erur intern: $1",
        "filecopyerror": "L'è mía staa pussibel cubià l'archivi \"$1\" in \"$2\"",
+       "filerenameerror": "L'è mía staa pussibel rinumunà l'archivi \"$1\" in \"$2\"",
+       "filedeleteerror": "L'è mía staa pussibel scancelà l'archivi \"$1\"",
+       "directorycreateerror": "L'è mía staa pussibel creà la cartèla \"$1\"",
+       "filenotfound": "L'è mía staa pussibel trövà l'archivi \"$1\"",
+       "unexpected": "Valur inaspetaa: \"$1\"=\"$2\"",
+       "formerror": "Erur: el sistéma 'l rìa mìa a mandà vià 'l mòdulo",
+       "badarticleerror": "Operasiù mìa pirmitìda per chèsta pàgina.",
+       "cannotdelete": "La pagina o l'archivi \"$1\" i g'ha mìa püdìt véser scancelàcc.\nPöl das che i sàpe zà stacc scancelàcc de vergü óter.",
+       "cannotdelete-title": "L'è mìa stat pusìbol scancelà la pàgina \"$1\"",
+       "delete-hook-aborted": "El scancelamènt l'è stat anulàt de l'hook.\nGh'è stat dat nesöna spiegasiù.",
        "badtitle": "Títul mía bun",
        "badtitletext": "El titul de la pagina ciamada a l'è vöj, sbajaa o cun carater minga acetaa, opüra al vegn d'un erur in di ligam intra sit wiki diferent o versión in lenguv diferent de l'istess sit.",
        "viewsource": "Còdas surgent",
-       "protectedpagetext": "Cula pagina chi l'è stata blucà per impedinn la mudifica.",
-       "viewsourcetext": "L'è pussibil vèd e cupià el codes surgent de cula pagina chí:",
-       "editinginterface": "'''Ocio''': Te see adree a mudifegà una pàgina che la se dröva per generà 'l test de l'interfacia del prugrama. Qualsìa mudìfega fada la cambierà l'interfacia de tüt i druvadur. Se te gh'hee intenzión de fà una tradüzión, per piasì cunsiderà la pussibilità de druvà [//translatewiki.net/wiki/Main_Page?setlang=lmo translatewiki.net], 'l pruget de lucalizazión de MediaWiki.",
+       "viewsource-title": "Còdas surgent per $1",
+       "actionthrottled": "Asiù ritardàda",
+       "protectedpagetext": "Chela pagina chi l'è stata blucàda per impedinn la mudifica o altre azion.",
+       "viewsourcetext": "L'è pussibil vèd e cupià el codes surgent de chela pagina chí:",
+       "editinginterface": "'''Ocio''': Te see adree a mudifegà una pàgina che la se dröva per generà 'l test de l'interfacia del prugrama. Ogna mudìfega fada la cambierà l'interfacia de tüt i druvadur. Se te gh'hee intenzión de fà una tradüzión, per piasì cunsiderà la pussibilità de druvà [//translatewiki.net/ translatewiki.net], 'l pruget de lucalizazión de MediaWiki.",
+       "namespaceprotected": "Te g'hét mìa 'l permès nesesàre per mudificà le pàgine del namespace <strong>$1</strong>.",
+       "mypreferencesprotected": "Te g'hét mìa i permès nesesàre per mudificà le tò preferènse",
        "ns-specialprotected": "I paginn special i pören mía vess mudifegaa",
-       "logouttext": "'''Adess a sii descuness.'''\n\nA pudé andà inanz a druvà la {{SITENAME}} in manera anònima, o a pudé <span class='plainlinks'>[$1 cunètev anmò]</span> cun l'istess suranomm o cun un suranomm diferent.\nTegné cünt che certi paginn pödass che i seguiten a vedess tant 'me se a füdìssuv anmò cuness, fin quand che hii nò vudaa 'l ''cache'' del voster browser.",
+       "exception-nologin": "Te seet minga dent in del sistema",
+       "exception-nologin-text": "Te g'harèset de [[Special:Userlogin|autenticàt]] (cioè fà 'l log-in) per püdì doprà chèsta pàgina o asiù.",
+       "virus-scanfailed": "scansiù falìda (còdes $1)",
+       "logouttext": "'''Ades te sét scolegàt.'''\n\nOcio che 'na quach pàgina la te pödarès vègner fò compàgn che se te g'hèset mìa fat el log-out enfìna a che te snètet mìa fò la cache del tò browser.",
+       "welcomeuser": "Benvegnüü\\Benriàt, $1",
+       "welcomecreation-msg": "El to cünt l'è staa pruntaa. Desmenteghet mía de persunalizà i to [[Special:Preferences|preferenz de {{SITENAME}}]].",
        "yourname": "El to suranóm:",
+       "userlogin-yourname": "Nom del ütènt",
+       "userlogin-yourname-ph": "Mèt dét el tò nòm de ütènt",
+       "createacct-another-username-ph": "Mèt dét el nòm de ütènt",
        "yourpassword": "Parola d'urdin",
-       "yourpasswordagain": "Mett dent ammò la parola d'urdin",
-       "remembermypassword": "Regordass la mè parola d'urdin (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "userlogin-yourpassword": "Password",
+       "userlogin-yourpassword-ph": "Mèt dét la tò password",
+       "createacct-yourpassword-ph": "Mèt dét la password",
+       "yourpasswordagain": "Tùrna a scrìer la password",
+       "createacct-yourpasswordagain": "Conférma la password",
+       "createacct-yourpasswordagain-ph": "Tùrna a mèter dét la password",
+       "remembermypassword": "Regordass la mé password (per mìa de piö de {{PLURAL:$1|dé|dé}})",
+       "userlogin-remembermypassword": "Tègnem colegàt",
+       "userlogin-signwithsecure": "Dòpra 'na conesiù sigüra",
+       "yourdomainname": "Specificà 'l domini",
+       "password-change-forbidden": "Te pödet mìa cambià password sö chèsta wiki",
+       "externaldberror": "Gh'è 'n erùr söl server de autenticasiù estèrno o sedenò se g'ha mìa le autorizasiù nesesàre per agiurnà i dati de registrasiù estèrni.",
        "login": "Va dent",
        "nav-login-createaccount": "Vena denter / Crea un cünt",
        "loginprompt": "Par cunett a {{SITENAME}}, a duvii abilitá i galet.",
        "logout": "Va fö",
        "userlogout": "Và fö",
        "notloggedin": "Te seet minga dent in del sistema",
+       "userlogin-noaccount": "Sét gnemò registràt?",
+       "userlogin-joinproject": "Regìstret sö {{SITENAME}}",
        "nologin": "Gh'avii anmò da registrav? $1.",
        "nologinlink": "Creé un cünt!",
        "createaccount": "Creá un cünt",
        "gotaccount": "Gh'hee-t giamò un cünt? '''$1'''.",
        "gotaccountlink": "Va dent in del sistema",
-       "createaccountmail": "per indirizz e-mail",
+       "userlogin-resetlink": "Sét desmentegàt i tò dati de autenticasiù?",
+       "userlogin-resetpassword-link": "Sét desmentegàt la tò password?",
+       "userlogin-helplink2": "G'hét bezògn de 'na mà per autenticàt?",
+       "userlogin-loggedin": "Te sét zabèla autenticàt come {{GENDER:$1|$1}}.\nDòpra el mòdulo ché sóta per turnà a autenticàt come 'n óter ütènt.",
+       "userlogin-createanother": "Créa 'n ótra ütènsa",
+       "createacct-emailrequired": "Indirìs e-mail",
+       "createacct-emailoptional": "Indirìs e-mail (upsiunàl)",
+       "createacct-email-ph": "Mét dét el tò indiris e-mail",
+       "createacct-another-email-ph": "Mét dét l'indirìs e-mail",
+       "createaccountmail": "Dòpra 'na password a càzo temporànea e màndela a l'indirìs e-mail specificàt",
+       "createacct-realname": "Nòm véro (upsiunàl)",
+       "createaccountreason": "Mutìf:",
+       "createacct-reason": "Mutìf:",
+       "createacct-reason-ph": "Che fòza che sét dré a creà 'n ótra ütènsa?",
+       "createacct-captcha": "Contròl de sigürèsa",
+       "createacct-imgcaptcha-ph": "Mèt dét el tèst che te èdet ché sura",
+       "createacct-submit": "Créa la tò ütènsa",
+       "createacct-another-submit": "Créa 'n ótra ütènsa",
+       "createacct-benefit-heading": "{{SITENAME}} la crès gràsie a le persùne compagn de té.",
+       "createacct-benefit-body1": "{{PLURAL:$1|cambiamènt|cambiamèncc}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|artìcol|artìcoi}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|contribüdur recènt|contribüdur recèncc}}",
        "badretype": "I password che t'hee miss a hinn diferent.",
-       "userexists": "El nom de duvrat che t'hee miss dent a l'è giamò dupraa.\nPer piasè, scerniss un alter suranom.",
+       "userexists": "El nom de duvrat che t'hee miss dent a l'è giamò dupraa.\nPer piasè, scerniss un alter nom.",
        "loginerror": "Erur in de l'andà dent in del sistema.",
+       "createacct-error": "Erùr endèl creà l'ütènsa",
        "createaccounterror": "Se pö minga creà el cünt: $1",
        "nocookiesnew": "El cünt a l'è staa creaa, ma t'hee minga pudüü andà dent in del sistema.\n{{SITENAME}} al dupra i cookies per fà andà i duvrat in del sistema.\nTì te gh'hee i cookies disabilitaa.\nPer piasè, abilita i cookies e pröa anmò a andà dent cunt el tò nom e la password.",
-       "noname": "Vüü avii mía specificaa un nomm d'üsüari valévul.",
-       "loginsuccesstitle": "La cunessiun l'è scumenzada cun sücess.",
-       "loginsuccess": "Al é connectaa a {{SITENAME}} compagn \"$1\".",
+       "nocookieslogin": "{{SITENAME}} el dòpra i cookies per l'operasiù de log-in dei ütèncc. I tò cookies envéce i è dizativàcc. Atìvei e pröa tùrna.",
+       "nocookiesfornew": "L'ütènsa l'è mìa stàda creàda, perchè l'è mìa stat pusìbol confermà la sò fónt. Dà 'n öciàda de ìga i cookies atìf, tùrna a cargà chèsta pàgina e pröa amò m'na ólta.",
+       "noname": "Te g'hét mìa specificàt en nòm de ütènt bù.",
+       "loginsuccesstitle": "Login efetuàt.",
+       "loginsuccess": "<strong>Adès te sét cunitìt al server de {{SITENAME}} col nòm ütènt de \"$1\".</strong>",
        "nosuchuser": "A gh'è nissün druvat cun 'l nom ''$1''. <br />\nI suranomm i henn sensibil a i leter majùscul.<br />\nCuntrola 'l nom che t'hee metüü denter o [[Special:UserLogin/signup|crea un cünt növ]].",
        "nosuchusershort": "Ghe n'è mia d'ütent cun el nom de \"$1\". Ch'el cuntrola se l'ha scrivüü giüst.",
        "nouserspecified": "Te gh'heet da specificà un nom del druvatt.",
+       "login-userblocked": "Chèsta ütènsa l'è blocàda. La conesiù l'è mìa cunsentìda.",
        "wrongpassword": "La ciav che t'hee metüü denter l'è nò giüsta. Pröva turna per piasè.",
        "wrongpasswordempty": "T'hee no metüü denter la parola ciav. Pröva turna per piasè.",
-       "mailmypassword": "Spedissem una password növa per e-mail",
+       "passwordtooshort": "Le password le g'ha de ìga alméno {{PLURAL:$1|1 caràter|$1 caràter}}.",
+       "password-name-match": "La tò password la g'ha de éser diferènta del tò nòm de ütènt",
+       "password-login-forbidden": "L'üzo de chesto nom ütent e de chèsta password l'è stat pruibìt.",
+       "mailmypassword": "Tùrna a defenéser la password",
        "passwordremindertext": "Un quajdün (prubabilment ti, cun l'indiriz IP $1) l'ha ciamaa da mandagh 'na ciav növa per andà denter int 'l sistema de {{SITENAME}} ($4).\nLa ciav per 'l druvadur \"$2\" adess l'è \"$3\".\nSariss mej andà denter int 'l sit almanch una völta prima de cambià la ciav.\nLa to ciav tempuranea la scaderà da chì a {{PLURAL:$5|un dì|$5 dì}}.\n\nSe te nò staa ti a ciamà 'sta ciav chì, o magara t'hee truaa la ciav vegia e te vör pü cambiala, te pör ignurà 'stu messagg chì e 'ndà inanz a druà la ciav vegia.",
+       "noemail": "Gh'è registràt nisü indirìs e-mail per l'ütènt \"$1\".",
+       "noemailcreate": "Bezògna fornéser en indirìs e-mail bù",
        "passwordsent": "Una parola ciav bele növa l'è staa spedii a l'indiriz e-mail registra da l'ütent \"$1\".\nPer piasè, ve drent anmò dop che te l'ricevüü.",
        "blocked-mailpassword": "'L to indirizz IP l'è blucaa, e per quela resón lì te pö mía druvà la funzion de recüper de la password.",
+       "mailerror": "Erùr endel mandà la e-mail: $1",
        "emailauthenticated": "'L tò indirizz e-mail l'è staa verificaa 'l $2 ai $3.",
-       "emailnotauthenticated": "Ul tò adrèss da pòsta letronica l è mia staa gnamò verificaa. Nissün mesacc al saraa mandaa par i servizzi che segütan.",
+       "emailnotauthenticated": "El tò indirìs e-mail l'è gnemò stat confermàt. Nesöna e-mail la sarà mandàda per le funsiù elencàde ché sota.",
        "emailconfirmlink": "Cunferma 'l to indirizz e-mail",
-       "accountcreated": "Cunt bell-e-cread",
-       "accountcreatedtext": "'L cünt del druvat $1 l'è bele pruntaa.",
+       "cannotchangeemail": "I indirìs e-mail i pöl mìa éser cambiàcc en chèsta wiki.",
+       "emaildisabled": "Chèsto sit el pöl mìa mandà vià le e-mail.",
+       "accountcreated": "Ütènsa creàda",
+       "accountcreatedtext": "Ghè stat creàt l'ütènsa per [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|msg]]).",
+       "createaccount-title": "Creasiù de 'n ütènsa a {{SITENAME}}",
+       "login-abort-generic": "La tò autenticasiù l'è falìda - Operasiù anulàda",
        "loginlanguagelabel": "Lengua: $1",
-       "changepassword": "Mudifega la paròla d'urdin",
-       "oldpassword": "Paròla d'urdin végja:",
-       "newpassword": "Paròla d'urdin növa:",
-       "retypenew": "Scriv ancamò la paròla d'urdin növa:",
+       "pt-login": "Va dent",
+       "pt-login-button": "Va dent",
+       "pt-createaccount": "Creá un cünt",
+       "pt-userlogout": "Va fö (logout)",
+       "user-mail-no-addy": "Te g'hét sercàt de mandà vià 'na e-mail sènsa specificà l'indirìs",
+       "user-mail-no-body": "Te g'hét sercàt de mandà vià 'na e-mail conden tèst vöt o tròp cürt.",
+       "changepassword": "Càmbia la password",
+       "resetpass_announce": "Per completà la conesiù, te g'hét de definì 'na password nöa.",
+       "resetpass_header": "Càmbia la password de l'ütènsa",
+       "oldpassword": "Password vècia:",
+       "newpassword": "Password nöa:",
+       "retypenew": "Tùrna a mèter dét la password nöa:",
+       "resetpass_submit": "Defenés la password e regìstret (fà 'l log-in)",
+       "changepassword-success": "La tò password l'è stàda cambiàda sènsa erùr!",
+       "changepassword-throttled": "Te g'hét fat tròp tacc tentatìf de autenticàt en poch tép, adès te g'hét de spetà $1 per püdì turnà a pröà.",
+       "resetpass_forbidden": "Te pödet mìa cambià le password",
+       "resetpass-no-info": "Te g'hét de éser cunitìt per acéder diretamènt a la pàgina",
+       "resetpass-submit-loggedin": "Càmbia la password",
+       "resetpass-submit-cancel": "Scancèla l'operasiù",
+       "resetpass-wrong-oldpass": "Password temporànea o atöàla mìa bùna.\nLa password la pödarès véser stàda zamò cambiàda, o sedenò te pödarèset vìga zamò fat domànda de 'na password temporànea nöa.",
+       "resetpass-recycled": "Te g'harèset de turnà a defenéser la tò password con vergót de diferènt de la password che te g'hét adès.",
+       "resetpass-temp-emailed": "L'autenticasiù l'è stàda fàda conden còdes temporàneo, mandàt per e-mail. Per completà la registrasiù, bizògna che te defenéset 'na password nöa ché:",
+       "resetpass-temp-password": "Password temporànea:",
+       "resetpass-abort-generic": "La mudìfica de la password l'è stàda blocàda de 'n estensiù.",
+       "resetpass-expired": "La tò password l'è scadìda. Te g'harèset de defenéser 'na password nöa semài che te öt autenticàt.",
+       "resetpass-validity-soft": "La tò password l'è mìa bùna: $1\n\nTe g'harèset de catà fò 'n ótra password o clicà sö \"{{int:resetpass-submit-cancel}}\" per turnà a definìla piö tàrde.",
+       "passwordreset": "Tùrna a defenéser la password",
+       "passwordreset-text-one": "Empenés chèsto mòdulo per turnà a defenéser la tò password.",
+       "passwordreset-legend": "Tùrna a defenéser la password",
+       "passwordreset-disabled": "La ridefinisiù de la password l'è mìa atìva sö chèsta wiki",
+       "passwordreset-emaildisabled": "Le funsiù de pòsta eletrònica i è stàde disativàde sö chèsta wiki.",
+       "passwordreset-username": "Nòm de ütènt",
+       "passwordreset-domain": "Domini:",
+       "passwordreset-email": "Indirìs e-mail:",
+       "passwordreset-emailtitle": "Detài de l'ütènsa sö {{SITENAME}}",
+       "passwordreset-emailelement": "Nòm ütènt: $1\nPassword temporànea: $2",
+       "passwordreset-emailsent": "Gh'è stat mandàt vià 'na e-mail de redefinisiù de la password.",
+       "passwordreset-emailsent-capture": "Gh'è stat mandàt vià chèsta e-mail de redefinisiù de la password:",
+       "changeemail": "Càmbia l'indirìs e-mail",
+       "changeemail-header": "Càmbia l'indirìs e-mail de l'ütènsa",
+       "changeemail-none": "(nisü)",
+       "changeemail-password": "La password sö {{SITENAME}}:",
+       "changeemail-submit": "Càmbia l'indirìs e-mail",
+       "changeemail-cancel": "Scancèla l'operasiù",
+       "changeemail-throttled": "Te g'hét fat tròp tacc tentatìf de autenticàt, adès te g'hét de spetà $1 per püdì turnà a pröà.",
+       "resettokens": "Redefenés i tokens",
+       "resettokens-no-tokens": "Gh'è nisü token de redefenéser.",
+       "resettokens-legend": "Redefenés i tokens",
+       "resettokens-tokens": "Token:",
+       "resettokens-token-label": "$1 (valùr de adès: $2)",
+       "resettokens-done": "Tokens redefinìcc.",
+       "resettokens-resetbutton": "Redefenés i tokens selesiunàcc",
        "bold_sample": "Test in grasset",
        "bold_tip": "Test in grasset",
        "italic_sample": "Test in cursiv",
        "showpreview": "Famm vedè prima",
        "showdiff": "Famm vedè i cambiament",
        "anoneditwarning": "Tì te set minga entraa. In de la crunulugia de la pagina se vedarà el tò IP.",
+       "anonpreviewwarning": "''Te g'hét mìa fat el log-in. Semài che te sàlvet la pàgina, el tò indirìs IP el vegnarà registràt endèla crunulugìa.''",
+       "missingcommenttext": "Mèt dét en comènt ché sota",
        "summary-preview": "Pröva de l'uget:",
+       "blockedtitle": "Ütènsa blocàda",
        "blockedtext": "'''El to nom del druvadur o el to indirizz IP l'è stat blucaa.'''\n\nEl bloch l'è stat fat da $1.\nEl mutiv per el bloch l'è: ''$2''\n\n* Principi del bloch: $8\n* Scadenza del bloch: $6\n* Blucaa: $7\n\nSe a vurii, a pudii cuntatà $1 o un olter [[{{MediaWiki:Grouppage-sysop}}|aministradur]] per discüt el bloch.\n\nFeegh a ment che la funzion 'Manda un email a quel druvadur chì' l'è mia ativa se avii mia registraa un indirizz e-mail valid ind i voster [[Special:Preferences|preferenz]] o se l'üsagg de 'sta funzion l' è stat blucaa.\n\nL'indirizz IP curent l'è $3, el nümer ID del bloch l'è #$5.\nFee el piasè d'inclüd tüt i detaj chì de sura in qualsessìa dumanda che a decidii de fà.",
-       "accmailtext": "La parola d'urdin per \"$1\" l'è stada mandada a $2.",
-       "newarticle": "(Növ)",
+       "blockednoreason": "Gh'è stat dat nisü mutìf",
+       "loginreqtitle": "Autenticasiù nesesària",
+       "loginreqlink": "autenticàs (fà 'l log-in)",
+       "loginreqpagetext": "Per véder le otre pàgine ghe öl $1.",
+       "accmailtitle": "Password mandàda",
+       "accmailtext": "La password per [[User talk:$1|$1]] l'è stada mandada a $2. Chèsta password la pöl véser cambiàda per [[Special:ChangePassword|cambià la password]] apéna dòpo che te g'harét fat el log-in.",
+       "newarticle": "(Nöf)",
        "newarticletext": "Te seet andaa adree a un ligam a una pagina che la esista gnamò.\nPer creà la pagina, a l'è assee che te tachet a scriv in del box desota (varda la [$1 pagina de vüt] per savèn püssee).\nSe te seet chì per erur, schiscia \"indree\" in sül tò browser.",
-       "anontalkpagetext": "''Questa chí a l'é la pagina da ciciarada d'un druvadur che l'ha nonanmò registraa un cünt, o che 'l le dröva mia.\nPer 'sta reson chí, el pò vess identificaa dumà cunt el sò indirizz nümereg de IP.\n'Stu indirizz IP el pö vess druvaa da püssee d'un druvadur. Se te seet un druvadur anònim e ve someja che un quaj messagg ch'al ga par ch'al gh'a nagòt à vidé con lu, ch'al prœuva a [[Special:UserLogin|creà el sò cunt]].''",
+       "anontalkpagetext": "''Questa chí a l'é la pagina da ciciarada d'un druvadur che l'ha nonanmò registraa un cünt, o che 'l le dröva mia.\nPer 'sta reson chí, el pò vess identificaa dumà cunt el sò indirizz nümereg de IP.\n'Stu indirizz IP el pö vess druvaa da püssee d'un druvadur. Se te seet un druvadur anònim e te someja che un quaj messagg al ga nagòt à vidé con de ti, prœuva a [[Special:UserLogin/signup|creà 'n ütènsa nöa]] o [[Special:UserLogin|regìstret con chèla che te g'hét zà]] inscì de minga vess scunfundüü anmò con quaj alter ütent anomim.''",
        "noarticletext": "Per 'l mument quela pagina chì l'è vöja. Te pòdet [[Special:Search/{{PAGENAME}}|cercà quel articul chì]] int i alter paginn, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercà int i register imparentaa], o sedenò [{{fullurl:{{FULLPAGENAME}}|action=edit}} mudifichè 'sta pagina chì adess-adess]</span>.",
+       "noarticletext-nopermission": "Per 'l mument quela pagina chì l'è vöja. Te pòdet [[Special:Search/{{PAGENAME}}|cercà quel articul chì]] int i alter paginn, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercà int i register imparentaa], ma te gh'ét nò i permiss per creà-la</span>.",
+       "userpage-userdoesnotexist": "L'ütènsa \"$1\" l'è mìa registràda. Arda bé semài che te ölet creàla o mudificàa adilbù.",
+       "userpage-userdoesnotexist-view": "L'ütènsa \"$1\" l'è mìa registràda.",
+       "blocked-notice-logextract": "Per el mument quel druvadur chì l'è blucaa. L'ültima entrada int el register di bloch l'è repurtada chì de suta per riferiment:",
        "clearyourcache": "'''Nòta:''' dòpu che avii salvaa, pudaría véss neçessari de scancelá la memòria \"cache\" dal vòst prugráma də navigazziún in reet par vidé i mudifich faa. '''Mozilla / Firefox / Safari:''' tegní schiscjaa al butún ''Shift'' intaant che sə clica ''Reload'', upüür schiscjá ''Ctrl-Shift-R'' (''Cmd-Shift-R'' sül Apple Mac); '''IE:''' schiscjá ''Ctrl'' intaant che sə clica ''Refresh'', upüür schiscjá ''Ctrl-F5''; '''Konqueror:''': semplicemeent clicá al butún ''Reload'', upüür schiscjá ''F5''; '''Opera''' i üteent pudarían vech büsögn da scancelá cumpletameent la memòria \"cache\" in ''Tools&rarr;Preferences''.",
-       "previewnote": "''''''Atenziun'''! Questa pagina la serviss dumà de vardà. I cambiament hinn minga staa salvaa.'''",
+       "updated": "(Agiurnàt)",
+       "note": "<strong>Ocio:</strong>",
+       "previewnote": "<strong>Atenziun! Questa pagina la serviss dumà de vardà.</strong> I cambiament hinn gnamò staa salvaa.'''",
+       "continue-editing": "Và 'ndel area de mudifica",
        "editing": "Mudifega de $1",
+       "creating": "Creasiù de $1",
        "editingsection": "Mudifega de $1 (sezión)",
        "editingcomment": "Adree a mudifegà $1 (sezión növa)",
+       "editconflict": "Cunflit de edisiù sö $1",
+       "explainconflict": "'N óter ütènt el g'ha salvàt 'na versiù nöa de l'articol entàt che te sìet dré a fà le tò mudìfiche.\nL'area de mudìfica de sura la g'ha dét el test de la pàgina che gh'è on-line adès, isé come che l'è stat agiurnàt de l'óter ütènt.\nLa versiù co le tò mudìfiche envéce te la tróet endèl'area de mudìfica de sòta.\nSemài che te ölarèset confermàle, te g'hét de riportà le tò mudìfiche endèl tèst de l'area de sura.\nA schisà el butù '{{int:savearticle}}', se salvarà '''apéna''' el test che gh'è dét endèl'àrea de mudìfica de sura.",
        "yourtext": "El tò test",
+       "storedversion": "La versiù en memória",
+       "editingold": "<strong>Ocio: Te sét dré a mudificà 'na versiù mìa agiurnàda de chèsta pàgina.</strong> Semài che te la sàlvet, töcc i cambiamèncc facc dòpo de chèsta versiù le narà pèrde.",
        "yourdiff": "Diferenz",
        "copyrightwarning": "Ten per piasè present che tüt i cuntribüzión a {{SITENAME}} se cunsideren daa sota una licenza $2 (varda $1 per savèn püssee).\nSe te vöret minga che i tò test i poden vess mudifegaa e redistribüii d'una persona qualsessia senza nissüna limitazión, mandei minga a {{SITENAME}}<br />\nCunt el test che te mandet tì te deciaret anca che, sota la tò respunsabilità, che el test te l'hee scrivüü depertì 'me uriginal, o pür che l'è una cobia d'una funt de dumini pübligh o un'altra funt libera in manera cumpagna.<br />\n'''MANDA MINGA DEL MATERIAL CHE L'E' CUERT D'UN DIRIT D'AUTUR SENZA UTURIZAZIUN'''",
-       "protectedpagewarning": "'''Ocio: quela pagina chì l'è stada blucaa in manéra che dumá i dupradur cunt i privilegg de sysop i pören mudificàla.'''",
+       "protectedpagewarning": "'''Ocio: quela pagina chì l'è stada blucaa in manéra che dumá i dupradur cunt i privilegg de sysop i pören mudificàla.''' L'öltem element del register l'è riportàt ché sota per dà 'n riferimènt:",
        "semiprotectedpagewarning": "'''Nota:''' Quela pagina chì l'è stada blucada in manera che dumà i druvadur registraa i pören mudifegàla.\nL'ültima vus del register l'è mustrada chì de suta per riferiment:",
        "templatesused": "{{PLURAL:$1|Mudel|Mudej}} dopraa in quela pagina chì:",
        "templatesusedpreview": "{{PLURAL:$1|Mudel|Mudej}} dopraa in quela pröva chì:",
+       "templatesusedsection": "{{PLURAL:$1|Mudel|Mudej}} dopraa in quela sezion chì:",
        "template-protected": "(prutegiüü)",
        "template-semiprotected": "(semi-prutegiüü)",
        "hiddencategories": "Quela pagina chì la fa part de {{PLURAL:$1|una categuria|$1 categurij}} scundüü:",
+       "nocreate-loggedin": "Te g'hét mìa 'l permès per creà pàgine nöe",
+       "sectioneditnotsupported-title": "Mudìfica dele sesiù mìa suportàda",
+       "sectioneditnotsupported-text": "La mudìfica de le sesiù l'è mìa suportàda en chèsta pàgina.",
+       "permissionserrors": "Erur de permès",
+       "permissionserrorstext": "Te gh'hee minga i permiss per fall, per {{PLURAL:$1|quel motiv chì |quij motiv chì}}:",
        "permissionserrorstext-withaction": "Te gh'hee minga i permiss per $2, per {{PLURAL:$1|quela resón chì |quij resón chì}}:",
        "recreate-moveddeleted-warn": "'''Ocio: te see adree a creà turna una pagina che l'eva giamò stada scancelada.'''\n\nCuntrulee se l'è propi el cas de cuntinuà a mudifegà 'sta pagina chì.\nPer cumudità, la lista di scancelament e di San Martìn l'è ripurtada chi de suta:",
+       "log-fulllog": "Arda el log compléto",
+       "edit-hook-aborted": "L'hook el g'ha anulàt la mudìfica e 'l g'ha dat nesöna spiegasiù.",
+       "edit-gone-missing": "Se pöl mìa agiurnà la pàgina.\nPar che la sàpe stàda scancelàda.",
+       "edit-conflict": "Cunflit de edisiù",
+       "edit-no-change": "La modifica l'è stàda ignuràda perchè gh'è mìa stat fat cambiamèncc al test.",
+       "postedit-confirmation-created": "La pàgina l'è stàda creàda.",
+       "postedit-confirmation-restored": "La pàgina l'è stàda ripristinàda.",
+       "postedit-confirmation-saved": "La tò mudìfica l'è stàda memurizàda.",
+       "edit-already-exists": "Se pöl mìa creà 'na pàgina nöa.\nLa gh'è zamò.",
+       "defaultmessagetext": "Test standard",
+       "content-model-wikitext": "wikitest",
+       "content-model-text": "test normal",
+       "content-model-javascript": "JavaScript",
+       "content-model-css": "CSS",
        "undo-summary": "Scancelada la mudifega $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Ciciarada]])",
+       "cantcreateaccounttitle": "Impusìbol creà 'n ütènt",
+       "cantcreateaccount-text": "La creasiù de ütènse de part de chèsto indirìs IP (<strong>$1</strong>) l'è stàda blocàda de l'ütènt [[User:$3|$3]]. El mutìf specificàt de $3 l'è <em>$2</em>",
+       "cantcreateaccount-range-text": "La creasiù de ütènse de part de indirìs IP endèl interval '''$1''', del qual el fà part apò a 'l tò ('''$4'''), l'è stàda blocàda de [[User:$3|$3]].\n\nEl mutìf specificàt de $3 l'è ''$2''.",
        "viewpagelogs": "Varda i register de quela pagina chì",
+       "nohistory": "El sistéma el rìa mìa a catà la crunulugìa de le versiù de chèsta pàgina.",
+       "currentrev": "Versiù de adès",
        "currentrev-asof": "Versión curenta di $1",
        "revisionasof": "Revisión $1",
+       "revision-info": "Versiù del $4 a le $5 de {{GENDER:$6|$2}}$7",
        "previousrevision": "←Versión püssee vegia",
        "nextrevision": "Revisión püssee növ →",
        "currentrevisionlink": "Varda la revisión curenta",
        "cur": "Cur",
        "next": "pròssim",
        "last": "ültima",
+       "page_first": "prìma",
+       "page_last": "öltema",
        "histlegend": "Selezion di diferenz: seleziuná i balitt di version de cumpará e pö schisciá ''enter'' upüra al buton in scima ala tabèlina.<br />\nSpiegazzion di símbul: (cur) = diferenza cun la version curenta, (ültima) = diferenza cun l'ültima version, M = mudifega piscinína.",
        "history-fieldset-title": "Varda la cronolugia",
+       "history-show-deleted": "Apéna chèi scancelàcc",
        "histfirst": "Püssee vegg",
        "histlast": "Püssee növ",
+       "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
+       "historyempty": "(öda)",
+       "history-feed-title": "Crunulugìa",
+       "history-feed-description": "Crunulogia de la pàgina sö la wiki",
+       "history-feed-item-nocomment": "$1 el $2",
+       "history-feed-empty": "La pàgina che te sét dré a sercà la gh'è mìa; pöl das che la sàpe stàda scancelàda o spostàda. Arda bé co la [[Special:Search|pàgina de ricérca]] semài che gh'è dele pàgine nöe.",
+       "rev-deleted-comment": "(Ogèt de la mudìfica scancelàt)",
+       "rev-deleted-user": "(nòm de ütènt scancelàt)",
+       "rev-deleted-event": "(asiù del log scancelàda)",
+       "rev-deleted-user-contribs": "[nòm ütènt o indirìs IP scancelàt - mudìfica scundìda de la crunulugìa]",
        "rev-deleted-text-permission": "Questa version de la pagina l'è stada '''scancelada'''.\nPer infurmazion, varda ind el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} register di scancelament].",
        "rev-delundel": "fa vidè/scund",
+       "rev-showdeleted": "Fà ved",
+       "revisiondelete": "Scancèla o riprìstina versiù",
+       "revdelete-nooldid-title": "Versiù mìa specificàda",
+       "revdelete-no-file": "L'archivi specificàt l'ezìste mìa",
+       "revdelete-show-file-submit": "Sé",
+       "revdelete-hide-text": "Test de la versiù",
+       "revdelete-hide-image": "Scont el contenùto de l'archivi",
+       "revdelete-hide-name": "Scont l'asiù e 'l sò ogèt",
+       "revdelete-hide-comment": "Ogèt o mutìf de la mudìfica",
+       "revdelete-hide-user": "Nom o indirìs IP de l'autùr",
+       "revdelete-radio-same": "(càmbia mìa)",
+       "revdelete-radio-set": "Scond",
+       "revdelete-radio-unset": "Fà vèt",
+       "revdelete-unsuppress": "Tira vià le restrisiù sö le versiù ripristinàde",
+       "revdelete-log": "Mutìf:",
+       "revdelete-submit": "Aplica {{PLURAL:$1|a la versiù selesiunàda|a le versiù selesiunàde}}",
        "revdel-restore": "Cambia la visibilità",
+       "pagehist": "Crunulugia de la pagina",
+       "deletedhist": "Crunulugìa scancelàda",
+       "revdelete-otherreason": "Alter resón/spiegazión",
+       "revdelete-reasonotherlist": "Alter mutiv",
        "revdelete-edit-reasonlist": "Mudifega i mutiv del scancelament",
+       "mergehistory-submit": "Önés le versiù",
+       "mergehistory-reason": "Mutìf:",
+       "pagemerge-logentry": "el g'ha ünìt [[$1]] a [[$2]] (reviziù 'nfìna al $3)",
        "revertmerge": "Scancela i ünión",
-       "history-title": "Cronolugia di mudifegh de \"$1\"",
+       "history-title": "Crunulugia di mudifegh de \"$1\"",
+       "difference-title-multipage": "Diferènsa 'ntra le pàgine \"$1\" e \"$2\"",
+       "difference-multipage": "(Diferènsa 'ntra le pàgine)",
        "lineno": "Riga $1:",
        "compareselectedversions": "Compara i versión seleziunaa",
        "editundo": "turna a 'me che l'era",
+       "diff-empty": "(Nesöna diferènsa)",
        "searchresults": "Risültaa de la recerca.",
        "searchresults-title": "Resültaa de la ricerca de \"$1\"",
        "toomanymatches": "Gh'è tropi curispundens. Mudifichè la richiesta.",
+       "titlematches": "Corespondènse endel tìtol de le pàgine",
        "textmatches": "Truvaa int 'l test di paginn",
        "notextmatches": "La vus che t'hee ciamaa la gh'ha minga una curispundenza in del test di paginn.",
        "prevn": "precedent {{PLURAL:$1|$1}}",
        "nextn": "pròssim {{PLURAL:$1|$1}}",
-       "viewprevnext": "Vidé ($1 {{int:pipe-separator}} $2) ($3).",
+       "prevn-title": "{{PLURAL:$1|Rezültàt precedènt|$1 rezültàcc precedèncc}}",
+       "nextn-title": "Next $1 {{PLURAL:$1|result|results}}",
+       "shown-title": "Fà ved {{PLURAL:$1|on resultaa|$1 resultaa}} per pàgina",
+       "viewprevnext": "Ved ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-new": "'''Trà in pee la pagina \"[[:$1]]\" ins quel sit chì!'''",
        "searchprofile-articles": "Paginn de cuntegnüü",
-       "searchprofile-project": "Paginn de jüt e de pruget",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tüt",
        "searchprofile-advanced": "Avanzaa",
        "searchprofile-articles-tooltip": "Cerca in $1",
-       "searchprofile-project-tooltip": "Cerca in $1",
+       "searchprofile-images-tooltip": "Sérca l'archivi",
        "searchprofile-everything-tooltip": "Cerca depertüt (anca int i paginn de discüssion)",
        "searchprofile-advanced-tooltip": "Cerca int i namespace persunalizaa",
        "search-result-size": "$1 ({{PLURAL:$2|1 parola|$2 paroll}})",
+       "search-result-score": "Atinènsa: $1%",
        "search-redirect": "(redirezión $1)",
        "search-section": "(sessión $1)",
+       "search-file-match": "(corespondènsa endèl test de l'archivi)",
        "search-suggest": "Vurivet dì: $1",
        "search-interwiki-caption": "Pruget fredej",
-       "search-interwiki-default": "$1 resültaa",
+       "search-interwiki-default": "Rezültàcc de $1:",
        "search-interwiki-more": "(püssee)",
+       "search-relatedarticle": "Rezültàcc corelàcc",
+       "searchrelated": "Corelàcc",
+       "searchall": "tücc",
        "powersearch-legend": "Recerca avanzada",
        "powersearch-ns": "Cerca in di namespace:",
+       "powersearch-togglelabel": "Selesiùna:",
+       "powersearch-toggleall": "Töcc",
+       "powersearch-togglenone": "Nisü",
        "preferences": "Preferenz",
-       "mypreferences": "i mè preferenz",
+       "mypreferences": "Preferenz",
        "prefs-edits": "Quantità de mudifegh faa:",
+       "prefsnologintext2": "Te g'harèset de $1 per defenéser le preferènse de l'ütènt.",
        "prefs-skin": "Aspett de l'interfacia",
-       "datedefault": "Nissüna preferenza",
-       "prefs-personal": "Carateristich dal dupradur",
+       "skin-preview": "Anteprìma",
+       "datedefault": "Nesöna preferènsa",
+       "prefs-labs": "Funsiù sperimentài",
+       "prefs-user-pages": "Pàgine ütènt",
+       "prefs-personal": "Prufil ütènt",
        "prefs-rc": "Cambiament recent",
        "prefs-watchlist": "Paginn tegnüü d'ögg",
        "prefs-watchlist-days": "Nümer de dì da mustrà ind i paginn da tegn d'ögg:",
+       "prefs-watchlist-days-max": "Màsimo $1 {{PLURAL:$1|dé|dé}}",
        "prefs-watchlist-edits": "Nümer de mudifegh da mustrà cunt i fünzión avanzaa:",
+       "prefs-watchlist-edits-max": "Nömer màsim: 1000",
        "prefs-misc": "Ólter",
-       "prefs-rendering": "Aparenza",
+       "prefs-resetpass": "Càmbia la password",
+       "prefs-changeemail": "Càmbia l'indirìs e-mail",
+       "prefs-setemail": "Defenés l'indirìs e-mail",
+       "prefs-email": "Upsiù e-mail",
+       "prefs-rendering": "Aspèt",
        "saveprefs": "Tegn i mudifech",
-       "restoreprefs": "Ristabiliss i impustazión de default",
-       "prefs-editing": "Mudifich",
+       "restoreprefs": "Ristabiliss i impustazión de default (en töte le sesiù)",
+       "prefs-editing": "Cazèla de mudìfica",
        "rows": "Riich:",
        "columns": "Culònn:",
        "searchresultshead": "Cerca",
+       "stub-threshold-disabled": "Dezativàt",
+       "recentchangesdays": "Dé de fà éder endèi öltem cambiamèncc:",
+       "recentchangesdays-max": "Màsimo $1 {{PLURAL:$1|dé|dé}}",
        "recentchangescount": "Nümer de mudifegh da mustrà per ''default'':",
        "savedprefs": "I preferenz hinn stai salvaa.",
-       "timezonelegend": "Lucalitaa",
-       "localtime": "Urari lucaal",
-       "servertime": "Urari dal sèrver",
-       "guesstimezone": "Catá l urari dal sèrver",
+       "timezonelegend": "Füs oràre:",
+       "localtime": "Ura local:",
+       "timezoneuseserverdefault": "Dòpra l'ura predefinìda de la wiki ($1)",
+       "timezoneuseoffset": "Oter (specificà la diferènsa)",
+       "servertime": "Ura dal sèrver",
+       "guesstimezone": "Dòpra l'ura del browser",
+       "timezoneregion-africa": "Africa",
+       "timezoneregion-america": "America",
+       "timezoneregion-antarctica": "Antartich",
+       "timezoneregion-arctic": "Artich",
+       "timezoneregion-asia": "Asia",
+       "timezoneregion-atlantic": "Oceano Atlantich",
+       "timezoneregion-australia": "Australia",
+       "timezoneregion-europe": "Europa",
+       "timezoneregion-indian": "Ocean Indian",
+       "timezoneregion-pacific": "Ocean Pacifich",
        "allowemail": "Permètt ai altar üteent də cuntatamm par email",
-       "prefs-searchoptions": "Upzión de ricerca",
-       "defaultns": "Tröva sempar in di caamp:",
+       "prefs-searchoptions": "Ricerca",
+       "prefs-namespaces": "Namespaces",
+       "default": "predefinit",
        "prefs-files": "Archivi",
+       "prefs-custom-css": "CSS personalizàt",
+       "prefs-custom-js": "JavaScript personalizat",
+       "prefs-common-css-js": "CSS/JavaScript cundivis per töte le skin:",
        "prefs-emailconfirm-label": "Cunferma de l'e-mail:",
        "youremail": "E-mail",
-       "username": "Nom dal dovrée",
-       "uid": "ID del druvadur:",
-       "prefs-memberingroups": "Mémber {{PLURAL:$1|del grüp|di grüp}}:",
-       "prefs-registration": "Registraa dal:",
+       "username": "{{GENDER:$1|Nom ütent}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Mèmber}} {{PLURAL:$1|del grupo|dei grupi}}:",
+       "prefs-registration": "Data de registrasiù:",
        "yourrealname": "Nomm:",
        "yourlanguage": "Lengua:",
+       "yourvariant": "Variant de la lèngua:",
+       "prefs-help-variant": "La variant o grafia co la qual te preferéset véder le pàgine de la wiki.",
        "yournick": "Suranomm:",
        "prefs-help-signature": "I cument ind i paginn de discüssion i gh'han de vess firmaa cun \"<nowiki>~~~~</nowiki>\" che 'l sarà pö cunvertì int la tua firma cun tacada la data e l'ura.",
-       "yourgender": "Géner:",
-       "gender-unknown": "Mía specifegaa",
-       "gender-male": "Mas'c",
-       "gender-female": "Femena",
-       "prefs-help-gender": "Upziunal: druvaa per adatà i messagg del software a segónda del gener del druvadur. Questa infurmazion chì la sarà püblica.",
+       "yourgender": "Gh'è de rivulgìs a té come màs·cc o fèmina?",
+       "gender-unknown": "Preferissi specifegaa nò",
+       "gender-male": "L'è registrat sö {{SITENAME}}",
+       "gender-female": "L'è registràda sö {{SITENAME}}",
+       "prefs-help-gender": "La definisiù de chèsta preferènsa l'è m,ìa ubligatória.\nEl software el dòpra chèsto valur per rivulgìs a té o lüminàt ai óter col tò zèner gramaticàl giöst (al maschìl o al feminìl).\nChèsta 'nformasiù però la sarà püblica.",
        "email": "Indirizz de pòsta elettrònica.",
-       "prefs-help-email": "L'e-mail a l'è mia obligatòri, però al permet da mandàv una ciav noeva in cas che ve la desmenteghé. A podé apó scernì da lassà entrà i alter dovrat in contat con violter senza da busogn da svelà la vosta identità.",
+       "prefs-help-email": "L'indirìs e-mail l'è mìa ubligatóre, ma 'l serf per mandàt la tò password semài che te g'hèset de desmentegàtela.",
+       "prefs-help-email-required": "L'indirìs e-mail l'è ubligatóre",
        "prefs-info": "Infurmazion de bas",
        "prefs-i18n": "Internaziunalizazión",
-       "prefs-advancedrendering": "Fünzión avanzaa",
+       "prefs-signature": "Fìrma",
+       "prefs-dateformat": "Furmàt de la data",
+       "prefs-timeoffset": "Ure de diferensa",
+       "prefs-advancedediting": "Upsiù generài",
+       "prefs-editor": "Editur",
+       "prefs-preview": "Anteprìma",
+       "prefs-advancedrc": "Upsiù avansàde",
+       "prefs-advancedrendering": "Upsiù avansàde",
+       "prefs-advancedsearchoptions": "Upsiù avansàde",
+       "prefs-advancedwatchlist": "Upsiù avansàde",
+       "prefs-displayrc": "Upsiù de visualizasiù",
+       "prefs-displaywatchlist": "Upsiù de visualizasiù",
+       "prefs-tokenwatchlist": "Token",
+       "prefs-diffs": "Diferènse",
+       "prefs-help-prefershttps": "Chèsta preferènsa la g'harà efèt la pròsima ólta che te se autèntichet.",
+       "email-address-validity-valid": "L'indirìs e-mail el par bù",
+       "email-address-validity-invalid": "Mèt dét en indirìs e-mail che funsiùna",
        "userrights": "Gestión di dirit di druvadur",
        "userrights-lookup-user": "Gestion di grüp di druvaduu",
        "userrights-user-editname": "Butée dent un nom da dovrat",
        "editusergroup": "Mudifega i grüp del druvadur",
-       "editinguser": "Mudifega di dirit del druvadur '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+       "editinguser": "Mudìfica i dirìcc de ütènt de l'ütènsa '''[[User:$1|$1]]''' $2",
        "userrights-editusergroup": "Mudifega i grüp del druvadur",
        "saveusergroups": "Salva i grüp di druvadur",
        "userrights-groupsmember": "El fà part di grüp:",
        "userrights-no-interwiki": "Te gh'hee mía i permiss necessari per pudè mudifegà i dirit di druvadur di olter wiki.",
        "userrights-nodatabase": "La base dat $1 a gh'é mia, o pura a l'é mia locala.",
        "userrights-nologin": "Al gh'a da [[Special:UserLogin|rintrà ent el sistema]] con un cunt d'administrator par podé dà di drecc ai dovracc.",
-       "userrights-notallowed": "A l'ha mia li permission par podé dà di drecc ai dovracc.",
+       "userrights-notallowed": "Te g'hét mìa l'autorizasiù per mudificà i permès de ütènt.",
        "userrights-changeable-col": "Grüp che te pö mudifegà",
        "userrights-unchangeable-col": "Grüp che te pö mia mudifegà",
        "group-user": "Druvadur",
        "group-autoconfirmed": "Druvadur che i s'henn cunvalidaa deperlur",
        "group-sysop": "Aministradur",
-       "group-user-member": "Dovratt",
+       "group-all": "(töcc)",
+       "group-user-member": "{{GENDER:$1|ütènt}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|ütènt autoconvalidat|ütènta autoconvalidada|ütent/a autoconvalidat/da}}",
+       "group-bot-member": "{{GENDER:$1|bot}}",
+       "group-sysop-member": "{{GENDER:$1|amministradur|amministradura|amministradur/ra}}",
        "grouppage-user": "{{ns:project}}:Druvadur",
+       "grouppage-autoconfirmed": "{{ns:project}}:Ütèncc autoconvalidàcc",
+       "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Aministradur",
        "right-edit": "Edita pàgini",
-       "right-createaccount": "Crea cünt de dovratt bej-e növ",
-       "newuserlogpage": "Rrgister di druvat növ",
+       "right-createtalk": "Creà pàgine de discusiù",
+       "right-createaccount": "Creà ütènse nöe",
+       "right-minoredit": "Segnà le mudìfiche come picinìne",
+       "right-move": "Spostà le pàgine",
+       "right-move-subpages": "Spostà le pàgine e le sotapàgine",
+       "right-move-rootuserpages": "Spostà le pàgine principài dei ütèncc",
+       "right-move-categorypages": "Spostà le categurìe",
+       "right-movefile": "Spostà i archivi",
+       "right-suppressredirect": "Mìa creà 'n ''redirect'' automàtich quan che se spòsta 'na pàgina",
+       "right-upload": "Cargà sö 'n archivi",
+       "right-reupload": "Surascrìer i archìvi che ezìste zamò",
+       "right-reupload-own": "Surascrìer en ardchivi che ezìste zamò cargàt sö del stès ütènt",
+       "right-delete": "Scancelà pàgine",
+       "right-browsearchive": "Sercà pàgine scancelàde",
+       "right-undelete": "Ripristinà pàgine scancelàde",
+       "right-suppressrevision": "Eder e ripristinà versiù scundìde ai aministradùr",
+       "right-suppressionlog": "Eder regìster privàcc",
+       "right-block": "Blocà le mudìfiche de ótre ütènse",
+       "right-blockemail": "Fà in manera che quel ütent chì 'l poda mia spedì di messagg e-mail",
+       "right-hideuser": "Blocà en nòm de ütènt e scundìl al püblich",
+       "right-unblockself": "Desblocà sè stès",
+       "right-siteadmin": "Blocà e desblocà el database",
+       "newuserlogpage": "Register di ütent növ",
        "rightslog": "Dirit di druvat",
+       "action-read": "lèzer chèsta pàgina",
        "action-edit": "mudifega quela pagina chì",
+       "action-createpage": "creà pàgine",
+       "action-createtalk": "creà pàgine de discusiù",
+       "action-createaccount": "creà chèsta ütènsa",
+       "action-history": "ardà la crunulugìa de chèsta pàgina",
+       "action-minoredit": "segnà chèsta mudìfica come picinìna",
+       "action-move": "spostà chèsta pàgina",
+       "action-move-rootuserpages": "spostà le pàgine principài dei ütèncc",
+       "action-move-categorypages": "spostà le categurìe",
+       "action-movefile": "spòsta chèsto archivi",
+       "action-upload": "càrga sö chèsto archivi",
+       "action-reupload": "surascrìf chèsto archivi (che l'ezìste zà)",
+       "action-upload_by_url": "cargà chèsto archivi de 'n indirìs URL",
+       "action-writeapi": "doprà le API en scritüra",
+       "action-delete": "scancelà chèsta pàgina",
+       "action-deleterevision": "scancelà chèsta versiù",
+       "action-deletedhistory": "ardà la crunulugìa scancelàda de chèsta pàgina",
+       "action-browsearchive": "sercà pàgine scancelàde",
+       "action-undelete": "ripristinà chèsta pàgina",
+       "action-suppressrevision": "riéder e ripristinà le mudìfiche scundìde",
+       "action-suppressionlog": "éder chèsto regìster privàt",
+       "action-block": "blocà le mudìfiche de chèsto ütènt",
+       "action-protect": "cambià i leèi de protesiù de chèsta pàgina",
+       "action-import": "emportà pàgine de le ótre wiki",
+       "action-importupload": "emportà pàgine col upload de archivi",
+       "action-patrol": "segnà le mudìfiche dei óter ütèncc come verificàde",
+       "action-autopatrol": "segnà le tò mudìfiche come verificàde",
+       "action-userrights": "cambià töcc i permès dei ütèncc",
+       "action-userrights-interwiki": "cambià i permès dei ütèncc de le ótre wiki",
+       "action-siteadmin": "blocà o sblocà el database",
+       "action-sendemail": "mànda e-mail",
+       "action-editmywatchlist": "cambià la lìsta dei tò oservàcc speciài",
+       "action-viewmywatchlist": "ardà la lìsta dei tò oservàcc speciài",
+       "action-viewmyprivateinfo": "ardà le tò informasiù personài",
+       "action-editmyprivateinfo": "cambià le tò informasiù personài",
        "nchanges": "$1 {{PLURAL:$1|mudifega|mudifegh}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|de l'öltima vìzita}}",
+       "enhancedrc-history": "crunulugìa",
        "recentchanges": "Cambiament recent",
        "recentchanges-legend": "Upzión ültem mudifegh",
        "recentchanges-summary": "In quela pagina chì a gh'è i cambiament püssee recent al cuntegnüü del sit.",
        "recentchanges-label-minor": "Quela chì l'è una mudifega piscinina.",
        "recentchanges-label-bot": "Quela mudifega chì l'ha fada un bot",
        "recentchanges-label-unpatrolled": "Quela mudifega chì a l'è stada mimga anmò verificada.",
-       "recentchanges-legend-newpage": "$1 - pagina növa",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (arda apò [[Special:NewPages|la lìsta de le pàgine nöe]])",
        "rcnotefrom": "Chì de sota gh'è la lista di mudifegh de <b>$2</b> (fina a <b>$1</b>).",
        "rclistfrom": "Fà vidè i cambiament növ a partì de $3 $2",
        "rcshowhideminor": "$1 i mudifegh piscinín",
+       "rcshowhideminor-show": "Fà vèd",
+       "rcshowhideminor-hide": "Scond",
        "rcshowhidebots": "$1 i bot",
-       "rcshowhideliu": "$1 i dupradur cunetüü",
+       "rcshowhidebots-show": "Fà ved",
+       "rcshowhidebots-hide": "Scond",
+       "rcshowhideliu": "$1 ütèncc registràcc",
+       "rcshowhideliu-show": "Fà ved",
+       "rcshowhideliu-hide": "Scond",
        "rcshowhideanons": "$1 i dupradur anònim",
+       "rcshowhideanons-show": "Fà ved",
+       "rcshowhideanons-hide": "Scond",
+       "rcshowhidepatr": "$1 mudìfiche verificàde",
+       "rcshowhidepatr-show": "Fà ved",
+       "rcshowhidepatr-hide": "Scond",
        "rcshowhidemine": "$1 i mè mudifich",
+       "rcshowhidemine-show": "Fà ved",
+       "rcshowhidemine-hide": "Scond",
        "rclinks": "Fà vedé i ültim $1 cambiament in di ültim $2 dì<br />$3",
        "diff": "dif",
        "hist": "stòria",
        "hide": "Scund",
-       "show": "Famm vedè",
+       "show": "Fà ved",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
+       "number_of_watching_users_pageview": "[tignìda d'öcc de {{PLURAL:$1|1 ütènt|$1 ütèncc}}]",
+       "rc_categories_any": "Töcc",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} dopo la mudìfica",
        "newsectionsummary": "/* $1 */ sezión növa",
-       "rc-enhanced-expand": "Varda i detali (al vör el JavaScript)",
+       "rc-enhanced-expand": "Fà ved i detai",
        "rc-enhanced-hide": "Scund i detali",
+       "rc-old-title": "creàda en urìgin come \"$1\"",
        "recentchangeslinked": "Cambiament culegaa",
        "recentchangeslinked-feed": "Cambiament culegaa",
        "recentchangeslinked-toolbox": "Cambiament culegaa",
        "recentchangeslinked-summary": "Questa chì a l'è una lista di paginn faa de poch temp ai paginn culigaa a quela specifegada (o a member d'una categuria specifegada).\nI paginn dent in [[Special:Watchlist|la lista ch'it ten-e sot euj]] i resten marcaa in \"grasset\"",
        "recentchangeslinked-page": "Nom de la pagina:",
        "recentchangeslinked-to": "Fà vidè dumà i mudifegh ai paginn culigaa a quela dada",
-       "upload": "Carga sü un file",
+       "upload": "Carga sü un archivi",
        "uploadbtn": "Carga sü",
        "uploadnologin": "Minga cuness",
+       "uploadnologintext": "Per cargà 'n archivi bezògna $1.",
        "uploadlogpage": "Log di file caregaa",
+       "filename": "Nom de l'archivi",
        "filedesc": "Sumari",
        "fileuploadsummary": "Sumari:",
+       "filesource": "Fónt:",
        "ignorewarnings": "Ignora tücc i avertimeent",
        "largefileserver": "Chel archivi-chí al è püssee graant che ul serviduur al sía cunfigüraa da permett.",
+       "savefile": "Salva l'archivi",
        "uploadedimage": "l'ha cargaa \"[[$1]]\"",
        "sourcefilename": "Nomm da l'archivi surgeent:",
        "destfilename": "Nomm da l'archivi da destinazziun:",
        "imgfile": "archivi",
        "listfiles": "Listá i imàgin",
-       "listfiles_date": "Dada",
+       "listfiles_thumb": "Miniadüra",
+       "listfiles_date": "Data",
        "listfiles_name": "Nomm",
-       "listfiles_user": "Dovratt",
-       "filehist": "Storia de l'archivi",
-       "filehist-help": "Schiscia in sü un grüp data/ura per vidè el file cumè che'l se presentava in quel mument là",
+       "listfiles_user": "Ütènt",
+       "listfiles_size": "Dimensiù en byte",
+       "listfiles_description": "Descrisiù",
+       "listfiles_count": "Versiù",
+       "listfiles-latestversion": "Versiù de adès",
+       "listfiles-latestversion-yes": "Sé",
+       "listfiles-latestversion-no": "Nò",
+       "file-anchor-link": "Archivi",
+       "filehist": "Crunulugia de l'archivi",
+       "filehist-help": "Schiscia in sü un grüp data/ura per vidè l'archivi cumè che'l se presentava in quel mument là",
        "filehist-deleteall": "scancela tüt",
        "filehist-deleteone": "Scancèla",
        "filehist-revert": "Butar torna 'me ch'al era",
        "filehist-datetime": "Data/Ura",
        "filehist-thumb": "Miniadüra",
        "filehist-thumbtext": "Miniadüra de la versión di $1",
-       "filehist-user": "Dovrat",
-       "filehist-dimensions": "Dimensión",
-       "filehist-comment": "Uget",
-       "imagelinks": "Ligamm al file",
+       "filehist-nothumb": "Nesöna miniadüra",
+       "filehist-user": "Ütent",
+       "filehist-dimensions": "Dimensiù",
+       "filehist-filesize": "Dimensiù de l'archivi",
+       "filehist-comment": "Comènt",
+       "imagelinks": "Üzo de l'archivi",
        "linkstoimage": "{{PLURAL:$1|Quela pagina chì la gh'ha |$1 Quij paginn chì i gh'hann}} ligam al file:",
        "sharedupload": "Quel archivi chì al vegn de $1 e'l pö vess dupraa da alter pruget",
        "sharedupload-desc-here": "Quel ''file'' chì al vegn de $1 e 'l pö vess druvaa da alter pruget.\nLa descrizión sura la sua [$2 pagina de descrizión del file] l'è mustrada chì suta.",
        "uploadnewversion-linktext": "Carga una versión növa de quel file chì",
        "filerevert-intro": "Te seet adree a bütà turna el file '''[[Media:$1|$1]]''' a la [$4 version del $2, $3].",
-       "filerevert-comment": "Uget:",
-       "filerevert-defaultcomment": "Bütada turna la versión di $2, $1",
+       "filerevert-comment": "Mutif:",
+       "filerevert-defaultcomment": "Ripristinàt la versiù del $2, $1",
+       "filerevert-submit": "Riprìstina 'mè che l'era",
+       "filerevert-success": "'''L'archivi [[Media:$1|$1]]''' l'è stat ripristinat a la [$4 versiù del $2, $3].",
        "filedelete": "Scancela $1",
-       "filedelete-legend": "Scancela 'l file",
+       "filedelete-legend": "Scancela l'archivi",
        "filedelete-intro-old": "Te seet adree a scancelà la versión de '''[[Media:$1|$1]]''' del [$4 $2, $3].",
-       "filedelete-comment": "Reson:",
+       "filedelete-comment": "Mutif:",
+       "filedelete-submit": "Scancèla",
+       "filedelete-success": "L'archivi '''$1''' l'è stat scancelàt.",
+       "filedelete-success-old": "La versiù de l'archivi '''[[Media:$1|$1]]''' del $2, $3  l'è stada scancelada.",
        "filedelete-otherreason": "Alter resón/spiegazión:",
        "filedelete-reason-otherlist": "Óltra resón",
        "filedelete-reason-dropdown": "*I sòlit resón per i scancelament\n** Viulazión de copyright\n** File dubi",
        "unusedtemplates": "Templat mia druvaa",
        "unusedtemplateswlh": "alter culegament",
        "randompage": "Una pagina a cas",
+       "randomincategory-selectcategory-submit": "Và",
        "randomredirect": "Un redirect a cas",
        "statistics": "Statistich",
        "statistics-header-pages": "Statistegh di paginn",
        "statistics-users": "[[Special:ListUsers|Druvadur]] registraa",
        "statistics-users-active": "Druvadur ativ",
        "statistics-users-active-desc": "Druvadur che i hann faa un'azión int {{PLURAL:$1|l'ültem dì|i ültem $1 dì}}",
+       "pageswithprop-submit": "Và",
        "doubleredirects": "Redirezziún dópi",
+       "double-redirect-fixer": "Coretùr de redirects",
        "brokenredirects": "Redirezziún interótt",
+       "brokenredirectstext": "I redirects ché sóta i pùnta a pàgine che gh'è mìa:",
+       "brokenredirects-edit": "mudifega",
+       "brokenredirects-delete": "scancèla",
+       "withoutinterwiki": "Pàgine sènsa interwiki",
+       "withoutinterwiki-legend": "Prefìs",
+       "withoutinterwiki-submit": "Fà ved",
+       "fewestrevisions": "Pàgine con piö póche reviziù",
        "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
+       "ncategories": "$1 {{PLURAL:$1|categuria|Categurie}}",
+       "ninterwikis": "$1 {{PLURAL:$1|interwiki}}",
+       "nlinks": "$1 {{PLURAL:$1|colegament|colegamencc}}",
        "nmembers": "$1 {{PLURAL:$1|element|element}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|elemènt|elemèncc}}",
+       "nrevisions": "$1 {{PLURAL:$1|reviziù}}",
+       "nviews": "$1 {{PLURAL:$1|vìzita|vìzite}}",
+       "nimagelinks": "Dopràt sö $1 {{PLURAL:$1|pàgina|pàgine}}",
+       "ntransclusions": "dopràt sö $1 {{PLURAL:$1|pàgina|pàgine}}",
+       "specialpage-empty": "Chèsta pàgina speciàl al momènt l'è öda.",
+       "lonelypages": "Pàgine òrfane",
+       "lonelypagestext": "Le pàgine elencàde ché sóta le g'ha mìa colegamèncc che é de ótre pàgine de {{SITENAME}} e i è mìa dét en nesöna ótra pàgina del sit.",
        "uncategorizedpages": "Paginn ch'i gh'hann mía de categuria",
        "uncategorizedcategories": "Categurij mía categurizaa",
        "uncategorizedimages": "''File'' ch'i gh'hann mía de categuria.",
        "uncategorizedtemplates": "Mudel ch'i gh'hann mía de categuria.",
        "unusedcategories": "Categurij mía druvaa",
        "unusedimages": "Imagin mia druvaa",
+       "popularpages": "Pàgine éste piö de spès",
        "wantedcategories": "Categurij ricercaa",
        "wantedpages": "Pagin ricercaa",
        "mostlinked": "Püssè ligaa a pagin",
        "mostlinkedcategories": "Categurij cun püssee ligamm",
+       "mostlinkedtemplates": "Mudèi dopràcc piö de spès",
        "mostcategories": "Articui cun püssee categurij",
        "mostimages": "Püssè ligaa a imagin",
+       "mostinterwikis": "Pàgine con piö tacc interwikis",
        "mostrevisions": "Articui cun püssè revisiún",
        "prefixindex": "Tüt i paginn cun prefiss",
        "shortpages": "Paginn püssee cürt",
        "longpages": "Paginn püssee lungh",
        "deadendpages": "Pagin senza surtida",
+       "protectedpages": "Pàgine prutigìde",
+       "protectedpages-indef": "Apéna protesiù infinìte",
+       "protectedpages-noredirect": "Scond i redirezion (redirect)",
+       "protectedpages-page": "Articul",
+       "protectedpages-expiry": "Scadènsa:",
+       "protectedpages-performer": "Ütènt che l'ha prutigìda",
+       "protectedpages-params": "Tìpo de protesiù",
+       "protectedpages-reason": "Mutìf",
+       "protectedpages-unknown-timestamp": "Mìa cunusìt",
+       "protectedpages-unknown-performer": "Ütènt mìa cunusìt",
+       "protectedtitles": "Tìtoi prutigìcc",
        "listusers": "Lista di dupradur registraa",
        "listusers-editsonly": "Mustra dumà i dupradur cun di mudifegh",
        "listusers-creationsort": "Cavèzza per data de creazión",
+       "listusers-desc": "Mèt en ùrden a calà",
+       "usereditcount": "$1 {{PLURAL:$1|cambiamènt|cambiamèncc}}",
        "usercreated": "Creaa el $1 a $2",
        "newpages": "Paginn növ",
+       "newpages-username": "Nòm ütènt:",
        "ancientpages": "Paginn püssee vegg",
        "move": "Sposta",
        "movethispage": "Sposta quela pagina chì",
        "booksources": "Surgent per i lìber",
        "booksources-search-legend": "Cerca i fónt di liber",
        "booksources-go": "Va",
-       "specialloguserlabel": "Üteent:",
-       "speciallogtitlelabel": "Titul:",
+       "specialloguserlabel": "Ütent:",
+       "speciallogtitlelabel": "Asiù fàda sö:",
        "log": "Register",
        "logempty": "El log l'è vöj.",
        "allpages": "Tücc i pagin",
-       "alphaindexline": "de $1 a $2",
        "prevpage": "Pagina prima ($1)",
        "allpagesfrom": "Fàm vedè i paginn a partì da:",
        "allpagesto": "Fàm ved i paginn fín a:",
        "allarticles": "Tucc i artícoj",
        "allpagessubmit": "Inanz",
        "allpagesprefix": "Varda i pagin ch'i scumenza per:",
+       "allpages-hide-redirects": "Scond i bot",
        "categories": "Categurij",
-       "deletedcontributions": "Cuntribüziun scancelaa",
+       "special-categories-sort-count": "mèt en ùrden per nömer",
+       "special-categories-sort-abc": "mèt en ùrden alfabétich",
+       "deletedcontributions": "Mudìfiche del ütènt scancelàde",
        "deletedcontributions-title": "Cuntribüziun scancelaa",
-       "linksearch": "Ligam de föra",
+       "sp-deletedcontributions-contribs": "mudìfiche",
+       "linksearch": "Sérca ligam de föra",
        "listusersfrom": "Fàm vedè i dupradur a partì da:",
+       "listusers-submit": "Fà ved",
+       "activeusers": "Lìsta dei ütèncc atìf",
        "activeusers-from": "Fàm vedè i dupradur a partì da:",
-       "listgrouprights": "Dirit del grüp di druvat",
+       "activeusers-hidebots": "Scond i bot",
+       "activeusers-hidesysops": "Scond i aministradur",
+       "activeusers-noresult": "Nisü ütènt troàt",
+       "listgrouprights": "Diricc del grüp dei ütèncc",
+       "listgrouprights-group": "Grüp",
+       "listgrouprights-rights": "Dirìcc",
+       "listgrouprights-helppage": "Help:Diricc del grupo",
        "listgrouprights-members": "(Lista di member)",
        "emailuser": "Manda un email a quel druvadur chì",
        "emailsent": "Messagg spedii",
        "watch": "Tegn d'öcc",
        "watchthispage": "Tegn d'ögg quela pagina chì",
        "unwatch": "Tegn pü d'ögg",
+       "unwatchthispage": "Desmèt de tègner d'öcc",
        "watchlist-details": "{{PLURAL:$1|$1 pagina|$1 paginn}} tegnüü sot ögg, fö che i paginn de discüssión.",
        "wlshowlast": "Fa vidé i ültim $1 ur $2 dì $3",
        "watchlist-options": "Upzión lista d'ussevazión",
        "enotif_body": "Cara $WATCHINGUSERNAME,\n\nLa pàgina $PAGETITLE del sit {{SITENAME}} a l'è stada $CHANGEDORCREATED del $PAGEEDITDATE da $PAGEEDITOR, varda $PAGETITLE_URL per la version curenta.\n\n$NEWPAGE\n\nSumari de la mudifega, metüü denter da l'autur: $PAGESUMMARY $PAGEMINOREDIT\n\nPer cuntatà l'autur:\nper e-mail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nGhe sarà pü mía de nutificazion in cas d'una quaj oltra mudifega, a manch che te veet nò a visità la pàgina in questión.\nDe surapü, te pö mudifegà l'impustazion de l'avis de nutifega per quij paginn che i henn ins la lista di paginn che te tegn d'ögg.\n\n             'L to sistema de nutifega da {{SITENAME}}\n\n--\nPer mudifegà l'impustazión de la lista di paginn che te tegn d'ögg, varda\n{{canonicalurl:Special:Watchlist/edit}}\n\nPer fà di cumünicazion de servizzi e per cercà jüt:\n$HELPPAGE",
        "changed": "cambiaa",
        "deletepage": "Scancela la pagina",
+       "confirm": "Cunférma",
        "excontent": "'l cuntegnüü l'eva: '$1'",
        "excontentauthor": "'l cuntegnüü l'eva: '$1' (e l'ünich cuntribüdur l'eva staa '[[Special:Contributions/$2|$2]]')",
        "exbeforeblank": "Inanz da vess svujaa 'l cuntegnüü l'eva: '$1'",
-       "historywarning": "'''Ocio!''' La pagina che a sii adree a scancelà la gh'a una stòria cun $1 {{PLURAL:$1|revisión|revisionn}}:",
+       "delete-confirm": "Scancèla \"$1\"",
+       "delete-legend": "Scancèla",
+       "historywarning": "'''Ocio!''' La pagina che a sii adree a scancelà la gh'a una crunulugìa cun presapoch $1 {{PLURAL:$1|revision|revision}}:",
        "confirmdeletetext": "A te see lì per scancelà una pagina cun tüta la sua crunulugìa.\nPer piasè, dà la cunferma che te gh'hee intenzión de andà inanz cun 'l scancelament, che te see al curent di cunseguenz, e che te see adree a fàl segónd i regulament de [[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "Aziun cumpletada",
+       "actionfailed": "Asiù falìda",
        "deletedtext": "La pagina \"$1\" l'è stada scancelada. Varda el $2 per una lista di ültim scancelaziun.",
        "dellogpage": "Register di scancelament",
        "deletionlog": "log di scancelament",
        "modifiedarticleprotection": "A l'è müdaa el nivel de prutezión per \"[[$1]]\"",
        "unprotectedarticle": "l'ha sblucaa \"[[$1]]\"",
        "protect-title": "Prutezziún da \"$1\"",
+       "protect-title-notallowed": "Arda el leèl de protesiù de \"$1\"",
        "prot_1movedto2": "[[$1]] spustaa in [[$2]]",
-       "protect-legend": "Cunferma de blocch",
-       "protectcomment": "Reson:",
-       "protectexpiry": "Scadenza:",
+       "protect-norestrictiontypes-title": "Pàgina che se pöl mìa protèger",
+       "protect-legend": "Cunferma la protesiù",
+       "protectcomment": "Mutìf:",
+       "protectexpiry": "Scadènsa:",
        "protect_expiry_invalid": "Scadenza pü bona",
        "protect_expiry_old": "Scadenza giamò passada",
        "protect-text": "Chì se pö vardà e müdà el nivel de prutezión de la pagina '''$1'''.",
        "protect-level-sysop": "dumà per i aministradur",
        "protect-summary-cascade": "recursiva",
        "protect-expiring": "scadenza: $1 (UTC)",
+       "protect-expiring-local": "scadés ai $1",
+       "protect-expiry-indefinite": "per semper",
        "protect-cascade": "Prutegg i paginn ch'i fan part de questa (prutezión recursiva)",
        "protect-cantedit": "Te pödet minga mudifegà i nivel de prutezión a quela pagina chì, per via che t'hee minga el permiss de mudifegala.",
        "protect-dropdown": "*Mutiv cumün per la prutezion\n** Tròp vandalism\n** Tròp spam\n** Edit war\n** Pagina cun parecc tràfich",
        "maximum-size": "Misüra màssima:",
        "pagesize": "(byte)",
        "restriction-edit": "Mudifega",
+       "restriction-move": "Sposta",
+       "restriction-create": "Crea",
+       "restriction-upload": "Carga sö",
+       "restriction-level-all": "töcc i leèi",
        "undelete": "Varda i pagin scancelaa",
+       "undeletepage": "Arda e riprìstina le pàgine scancelàde",
+       "viewdeletedpage": "Varda i pagin scancelaa",
+       "undelete-fieldset-title": "Riprìstina versiù",
        "undelete-nodiff": "Per questa pagina gh'è nanca una revisiun precedenta.",
        "undeletebtn": "Rimett a post",
        "undeletelink": "Varda/büta indree",
+       "undeleteviewlink": "arda",
+       "undeleteinvert": "Invertì la seleziòn",
+       "undeletecomment": "Mutìf:",
        "undeletedrevisions": "{{PLURAL:$1|1 revision|$1 versiun}} rimetüü a post",
+       "undelete-search-title": "Sérca pàgine scancelàde",
+       "undelete-search-box": "Sérca pàgine scancelàde",
+       "undelete-search-prefix": "Fà ved i paginn che scumenzen per:",
+       "undelete-search-submit": "Sérca",
+       "undelete-show-file-submit": "Sé",
        "namespace": "Namespace:",
        "invert": "Invertì la seleziòn",
        "blanknamespace": "(Principal)",
        "linkshere": "I paginn chì de sota gh'hann di ligam che porten a '''[[:$1]]''':",
        "isredirect": "redirezión",
        "istemplate": "inclüsión",
-       "isimage": "ligam a una figüra",
+       "isimage": "ligam a un archivi",
        "whatlinkshere-prev": "{{PLURAL:$1|quel prima|$1 prima}}",
        "whatlinkshere-next": "{{PLURAL:$1|dopu|$1 dopu}}",
        "whatlinkshere-links": "← ligam",
        "unblockip": "Desblòca quel druvàt chì",
        "ipusubmit": "Tö via 'stu bloch chì",
        "unblocked": "[[User:$1|$1]] l'è staa desblucaa",
-       "ipblocklist": "Adrèss IP e druvàt blucaa",
+       "ipblocklist": "Ütèncc blocàcc",
+       "ipblocklist-legend": "Sérca 'n ütènt blocàt",
+       "blocklist-userblocks": "Scond i bloch dei ütencc registràcc",
+       "blocklist-tempblocks": "Scond i bloch temporanei",
+       "blocklist-addressblocks": "Scond i bloch de 'n IP",
+       "blocklist-rangeblocks": "Scond i bloch de pachècc de IP",
+       "blocklist-timestamp": "Data e ùra",
+       "blocklist-target": "Destinasiù",
+       "blocklist-expiry": "Scadés",
+       "blocklist-by": "Aministradur che g'ha blocàt",
+       "blocklist-params": "Tìpo de bloch",
+       "blocklist-reason": "Mutìf",
+       "ipblocklist-submit": "Sérca",
+       "ipblocklist-localblock": "Bloch locàl",
+       "ipblocklist-otherblocks": "{{PLURAL:$1|Óter blòch|Óter blòch}}",
        "infiniteblock": "per semper",
        "expiringblock": "el finiss el $1 a $2",
        "anononlyblock": "dumà i anònim",
        "emailblock": "e-mail blucaa",
        "blocklist-nousertalk": "el pö mía mudifegà la soa pagina de discüssión",
        "ipblocklist-empty": "El register di bloch l'è vöj.",
+       "ipblocklist-no-results": "L'indirìs IP o 'l nòm de ütènt sercàt l'è mìa blocàt.",
        "blocklink": "bloca",
        "unblocklink": "desbloca",
        "change-blocklink": "cambia bloch",
        "contribslink": "cuntribüzión",
+       "emaillink": "mànda e-mail",
        "blocklogpage": "Log di blocch",
        "blocklogentry": "l'ha blucaa [[$1]] per un temp de $2 $3",
        "blocklogtext": "Quel chì l'è el register di bloch e desbloch di druvadur.\nI indirizz IP che i henn staa blucaa utumaticament i henn mía cumpres int la lista.\nVarda el [[Special:BlockList|register di IP blucaa]] per la lista de tüt i bloch uperaziunaj ativ.",
        "block-log-flags-nocreate": "blucada la creazión de cünt növ",
        "movepagetext": "Duvraant la büeta chí-da-sota al re-numinerà una pàgina, muveent tüta la suva stòria al nomm nööf. Ul vecc títul al deventarà una pàgina da redirezziun al nööf títul. I liamm a la vegja pàgina i sarà mia cambiaa: assürévas da cuntrulá par redirezziun dopi u rumpüüt.\nA sii respunsàbil da assüráss che i liamm i sigüta a puntá intúe i è süpunüü da ná.\nNutii che la pàgina la sarà '''mia''' muvüda se a gh'è gjamò una pàgina al nööf títul, a maanch che la sía vöja, una redirezziun cun nissüna stòtia d'esizziun passada. Cheest-chí al signífega ch'a pudii renuminá indrée\nuna pàgina intúe l'évuf renuminada via par eruur, e che vüü pudii mia surascriif una pàgina esisteent.\n\n\n<b>ATENZIUN!</b>\nCheest-chí al pöö vess un canbi dràstegh e inaspetaa par una pàgina pupülara: par piasée assürévas ch'a ii capii i cunsegueenz da cheest-chí prima da ná inaanz.",
        "movepagetalktext": "La pagina de discüssión tacada a quel articul chì, la sarà spustada in manera utumatega insema a l'articul, '''asca in quij cas chì:'''\n* quand che la pagina a l'è spustada intra namespace diferent\n* se in del növ titul al gh'è giamò una pagina de discüssiun (minga vöja)\n* el quadret de cunferma chì de sota a l'è staa deseleziónaa.\nIn quij cas chì, se'l var la pena, ghe sarà de spustà a man i infurmazión de la pagina de discüssión.",
-       "movearticle": "Möva l'articul",
+       "movearticle": "Spòsta la pàgina:",
        "newtitle": "Titul növ:",
        "move-watch": "Gionta chela pagina chí ai pàgin à tegní d'œucc.",
        "movepagebtn": "Sposta quela pagina chì",
        "articleexists": "Una pagina che la se ciama cumpagn la gh'è giamò, opüra el nom che hii scernüü al va minga ben. <br />\nChe 'l scerna, per piasè, un nom diferent per quel articul chì.",
        "movetalk": "Sposta anca la pagina de discüssión",
        "movelogpage": "Register di San Martin",
-       "movereason": "Resón:",
-       "revertmove": "büta indree a 'mè che l'era",
-       "delete_and_move": "Scancelá e mööf",
+       "movereason": "Mutìf:",
+       "revertmove": "Riprìstina 'mè che l'era",
+       "delete_and_move": "Scancèla e möf",
+       "delete_and_move_confirm": "Sé, surascrìf la pàgina che gh'è zà",
        "export": "Espurtá pagin",
        "allmessages": "Tücc i messacc dal sistéma",
+       "allmessagesname": "Nòm",
        "allmessagesdefault": "Test standard",
        "allmessagescurrent": "Test curent",
        "allmessagestext": "Chesta chí l è una lista də messácc də sistema dispunibil indal MediaWiki: namespace.",
+       "allmessages-filter-legend": "Fìlter",
+       "allmessages-filter-unmodified": "Mìa mudificàcc",
+       "allmessages-filter-all": "Töcc",
+       "allmessages-filter-modified": "Mudificàcc",
+       "allmessages-prefix": "Fìltra per prefìs:",
+       "allmessages-language": "Lèngua:",
+       "allmessages-filter-submit": "Và",
        "thumbnail-more": "Ingrandí",
        "import": "Impurtá di pagin",
        "tooltip-pt-userpage": "La tò pagina druvat",
        "tooltip-rollback": "El \"Rollback\" al scancela cunt un clich i mudifigh faa a quela pagina chì de l'ültem cuntribüdur",
        "tooltip-undo": "\"Undo\" al scancela questa mudifega chì e la derv la finestra de mudifega in manera de vardà prima. La te lassa giuntàgh una spiegazión de la mudifega.",
        "siteuser": "{{SITENAME}} ütent $1",
+       "pageinfo-contentpage-yes": "Sé",
+       "pageinfo-protect-cascading-yes": "Sé",
        "deletedrevision": "Scancelada la revision vegia de $1.",
        "previousdiff": "← Diferenza püssee vegia",
        "nextdiff": "Mudifega püssee növa →",
        "svg-long-desc": "archivi in furmaa SVG, dimensión nominaj  $1 × $2 pixel, dimensión de l'archivi: $3",
        "show-big-image": "Versión a resolüzión volta",
        "newimages": "Espusizión di imàgin növ",
+       "newimages-legend": "Fìltra",
+       "noimages": "Gh'è negót de éder.",
        "ilsubmit": "Truvá",
+       "bydate": "per data",
+       "monday-at": "Lönesdé a le $1",
+       "tuesday-at": "Martedé a le $1",
+       "wednesday-at": "Mercoldé a le $1",
+       "thursday-at": "Giöedé a le $1",
+       "friday-at": "Venerdé a le $1",
+       "saturday-at": "Sàbot a le $1",
+       "sunday-at": "Dümìnica a le $1",
+       "yesterday-at": "Gér a le $1",
        "bad_image_list": "El furmaa a l'è quest chì:\n\nSe tegnen bón dumà i list póntaa (i righ che scumincen per *).\nEl prim ligam de ogni riga la gh'ha de vess un ligam a un file minga desideraa.\nI ligam che i vegnen dopu, in sü l'istessa riga, i vegnen cónsideraa di ecezión (che'l vör dì paginn induè che 'l file se'l pö riciamà in manera nurmala).",
        "metadata": "Metadat",
        "metadata-help": "Quel file chì al gh'ha dent di infurmazión adiziunaj, che l'è prubabil che j'ha giuntaa la fotocamera o 'l scanner dupraa per fàl o digitalizàl. Se el file a l'è staa mudifegaa, un quajvün di detali i pudarien curespund pü ai mudifegh faa.",
        "metadata-expand": "Fà vidè i detali",
        "metadata-collapse": "Scund i detali",
        "metadata-fields": "I camp di metadat EXIF listaa in quel messagg chì i saran mustraa in de la pagina de la figüra quand che la tabela di metadat la sarà presentada furma cürta. Per impustazión i alter camp i saran scundüü.\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": "Larghèsa",
+       "exif-imagelength": "Altèsa",
+       "exif-bitspersample": "Bit per componènt",
+       "exif-compression": "Sistéma de compresiù",
+       "exif-photometricinterpretation": "Strütüra dei pixel",
+       "exif-orientation": "Orientamènt",
+       "exif-samplesperpixel": "Nömer de le componencc",
+       "exif-planarconfiguration": "Dispuzisiù dei dati",
+       "exif-ycbcrsubsampling": "Rapórt de campinamènt Y / C",
+       "exif-ycbcrpositioning": "Puzisiù componèncc Y e C",
+       "exif-xresolution": "Resulusiù orizontàla",
+       "exif-yresolution": "Resulusiù verticàla",
+       "exif-stripoffsets": "Puzisiù dei dati de la foto",
+       "exif-rowsperstrip": "Nömer de rìghe per fàsa",
+       "exif-imagedescription": "Tìtol de la foto",
        "watchlistall2": "tücc",
        "namespacesall": "tücc",
        "monthsall": "tücc",
        "confirmemail_sent": "Ul mesacc da cunfermazziún l è staa mandaa.",
        "confirmemail_success": "'L voster indirizz e-mail l'è staa cunfermaa: adess a pudii druvà la wiki.",
        "confirmemail_loggedin": "Adess 'l voster indirizz e-mail l'è staa cunfermaa",
+       "confirm_purge_button": "Cunferma",
+       "confirm-watch-button": "OK",
+       "imgmultigo": "Và!",
        "autosumm-blank": "Pagina svujada",
        "watchlisttools-view": "Varda i mudifegh impurtant",
        "watchlisttools-edit": "Varda e mudifega la lista di paginn che te tegnet sut ögg",
        "watchlisttools-raw": "Mudifega la lista in furmaa test",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ciciarade]])",
        "version": "Versiun",
-       "specialpages": "Paginn special"
+       "specialpages": "Paginn special",
+       "tags-active-yes": "Sé",
+       "tags-active-no": "Nò",
+       "tags-edit": "mudìfica",
+       "rightsnone": "(nisü)",
+       "expand_templates_ok": "OK"
 }
index e9e4a8d..eab0c70 100644 (file)
        "tog-previewontop": "پیش سیل نه دما جعوه ویرایشت نشو بیئه",
        "tog-previewonfirst": "پیش سیل نه د اولین ویرایشت نشو بیئه",
        "tog-enotifwatchlistpages": "اوسه که یه گل بلگه یا فایلی د سیل برگ مه آلشت بوئه منه وا ایمیل خور کو",
-       "tog-enotifusertalkpages": "وختی که بلگه گپسن کارور آلشت پیدا کرد منه وا ایمیل خور کو",
+       "tog-enotifusertalkpages": "وختی که بلگه گپسن کاریار آلشت پیدا کرد منه وا ایمیل خور کو",
        "tog-enotifminoredits": "همچنو اوسه که ویرایشتیا کؤچکی د بلگیا یا فایلیا انجوم بوئه منه خور کو",
        "tog-enotifrevealaddr": "نشونی ایمیل منه د ایمیل اشگار نشو بیه",
-       "tog-shownumberswatching": "انازه کاروریایی که د حالت دیئنن نشو بیه",
+       "tog-shownumberswatching": "انازه کاریاریایی که د حالت دیئنن نشو بیه",
        "tog-oldsig": "امضايی هيئش:",
        "tog-fancysig": "وا امضا چی ویکی متن برخورد کو",
        "tog-uselivepreview": "د پیش سیل زنه استفاده کو",
        "tog-watchlisthideown": "قام كو ويرايشت منه د",
        "tog-watchlisthidebots": "ویرایشت یا بوت نه د سیل برگ قام کو",
        "tog-watchlisthideminor": "قام كو ويرايشت کؤچک منه د",
-       "tog-watchlisthideliu": "ویرایشت یا کاروریا وامئن سیستم نه د سیل برگ قام کو",
+       "tog-watchlisthideliu": "ویرایشت یا کاریاریا وامئن سیستم نه د سیل برگ قام کو",
        "tog-watchlisthideanons": "ویرایشت یا کاروریا ناشناس نه د سیل برگ قام کو",
        "tog-watchlisthidepatrolled": "ویرایش تیا د تی رس نه د سیل برگ قام کو",
-       "tog-ccmeonemails": "کپی ایمیل یا منه که سی کسونا تر می فرسنم سیم کل کو",
+       "tog-ccmeonemails": "کپی انجومانامه یا منه که سی کاریاریا تر می فرسنم سیم کل کو",
        "tog-diffonly": "بلگیایی که شومل فرخیا هارن نشون نیه",
        "tog-showhiddencats": "دسه يا قام بيئنه نشون بيه",
        "tog-norollbackdiff": "فرخیا نه د بین بوریت نها یه گل عقو گرد کردن",
        "about": "دباره",
        "article": "محتوا بلگه",
        "newwindow": "(نيمدری  تازه وا کو)",
-       "cancel": "رد Ù\83ردن",
+       "cancel": "اÙ\86جÙ\88Ù\85 Ø´Û\8cÙ\88سن",
        "moredotdotdot": "بيشتر",
        "morenotlisted": "ای ليست كامل نبيه",
        "mypage": "بلگه",
        "permalink": "چسب ون هميشئی",
        "print": "چاپ كردن",
        "view": "ديئن",
+       "view-foreign": "د $1 نه بوینیت",
        "edit": "ويرايشت",
        "create": "راس كردن",
        "editthispage": "ويرايشت ای بلگه",
        "talk": "گپ",
        "views": "ديئنيا",
        "toolbox": "اوزاريا",
-       "userpage": "ديئن بلگه كارور",
+       "userpage": "ديئن بلگه کاریار",
        "projectpage": "ديئن بلگه پروجه",
        "imagepage": "ديئن بلگه جانیا",
        "mediawikipage": "ديئن بلگه پيغوم",
        "sort-descending": "كم بيئن منظم",
        "sort-ascending": "زياد بيئن منظم",
        "nstab-main": "بلگه",
-       "nstab-user": "بلگه كارور",
+       "nstab-user": "بلگه کاریار",
        "nstab-media": "بلگه رسانه",
        "nstab-special": "بلگيا ويجه",
        "nstab-project": "بلگه پروجه",
        "virus-scanfailed": "زل بیئن شکست حرد($1)",
        "virus-unknownscanner": "ويروس كش ناآشگار",
        "welcomeuser": "خوش اومايت،$1!",
-       "yourname": "نوم كاروری:",
+       "yourname": "نوم کاریاری:",
        "userlogin-yourname": "نوم كاروری",
-       "userlogin-yourname-ph": "نوم كاروری تو نه وارد بكيد",
+       "userlogin-yourname-ph": "نوم کاریاری تو نه وارد بكيد",
        "createacct-another-username-ph": "نوم كاروری ته وارد كو",
        "yourpassword": "پاسورد:",
        "userlogin-yourpassword": "رمز",
        "yourpasswordagain": "دوواره رمز بزه",
        "createacct-yourpasswordagain": "رمز محكم كو",
        "createacct-yourpasswordagain-ph": "دوواره رمز بزه",
-       "remembermypassword": "اومائن وا مئن منه د ای مرورگر د ویر داشتو(سی بیشترین$1{{PLURAL:$1|day|days}})",
+       "remembermypassword": "اومائن وا مئن منه د ای مرورگر د ویر داشتو(سی بیشترونه$1{{جمی:$1|روز|روزیا}})",
        "userlogin-remembermypassword": "منه مئن سيستم وادار",
        "userlogin-signwithsecure": "د وصل بيئن امن استفاده كو",
        "yourdomainname": "پوشگیر شما:",
        "userlogin-resetlink": "جزییات وامین اومائن تونه د ویر بردیته",
        "userlogin-resetpassword-link": "پاسورد د ویرتو رئته؟",
        "userlogin-helplink2": "هومیاری وا مین اومائن",
-       "userlogin-loggedin": "شما ایسه د عنوان {{جنس:$1|$1}} اومایته وا مین.\nد فرم هاری سی وا مین اومائن وه عنوان کارور هنی استفاده بکیتو.",
+       "userlogin-loggedin": "شما ایسه د عنوان {{جنس:$1|$1}} اومایته وا مین.\nد فرم هاری سی وا مین اومائن وه عنوان کاریار هنی استفاده بکیتو.",
        "userlogin-createanother": "يه گل حساوهنی راست بكيد",
        "createacct-emailrequired": "نشونی ايميل",
        "createacct-emailoptional": "نشونی ايميل",
        "noemail": "هیچ نشونی ایمیلی سی کارور $1 ضفط نبیه.",
        "noemailcreate": "شما باید یه نشونی نومه معتور فراهم بکید",
        "mailerror": "خطا داره کل موئه:$1",
-       "emailauthenticated": "نشونی ایمیلتو د $2 سی 3$ مئکم بیه.",
+       "emailauthenticated": "نشونی انجومانامه تونه د $2 سی 3$ مئکم بیه.",
        "emailconfirmlink": "نشونی ايملتو نه محكم بكيد",
        "cannotchangeemail": "نشونی ایمیل حساو نتونه د ای ویکی آلشت بوئه.",
        "emaildisabled": "ای مالگه نتونه ایمیل بفرسنه",
        "resetpass_forbidden": "پاسوردیا نتونن آلشت بوئن",
        "resetpass-no-info": "شما با بیایت د سیستم تا د ای بلگه دسرسی داشتویت",
        "resetpass-submit-loggedin": "پاسورد نه آلشت بكيت",
-       "resetpass-submit-cancel": "رد Ù\83ردن",
+       "resetpass-submit-cancel": "اÙ\86جÙ\88Ù\85 Ø´Û\8cÙ\88سن",
        "resetpass-temp-password": "رمز موقت:",
        "passwordreset": "د نۈ وارد كردن رمز",
        "passwordreset-legend": "د نۈ وارد كردن رمز",
        "changeemail-none": "(هيش كوم)",
        "changeemail-password": "شما {{SITENAME}} پاسورد:",
        "changeemail-submit": "آلشت کردن ایمیل",
-       "changeemail-cancel": "رد Ù\83ردن",
+       "changeemail-cancel": "اÙ\86جÙ\88Ù\85 Ø´Û\8cÙ\88سن",
        "resettokens": "تازه کردن نشونه یا",
        "resettokens-no-tokens": "هیژ نشونه ای سی تازه کردن نئ.",
        "resettokens-legend": "تازه کردن نشونه یا",
        "subject": "موضو/سر خط:",
        "minoredit": "يه ويرايشت كؤچكيه",
        "watchthis": "ديئن ای بلگه",
-       "savearticle": "بÙ\84Ú¯Ù\87 Ø¶Ø¨Ø· Ø¨Ù\88ئه",
+       "savearticle": "اÙ\85اÛ\8cÛ\8cÙ\87 Ú©Ø±Ø¯Ù\86 Ø¨Ù\84Ú¯ه",
        "preview": "پيش سيل",
        "showpreview": "پيش نمائش نشون بيئه",
        "showdiff": "آلشتيانه نشون بيئه",
        "blocked-notice-logextract": "ای کارور ایسنی دسرسی ناره.\nآخری نشون قلف ورودی د هار ایچه سی سرچشمه آماده بیه:",
        "updated": "(تازه بيه)",
        "note": "'''نيسنن:'''",
-       "previewnote": "Ù\81Ù\82Ø· Ø§Û\8c Ù¾Û\8cØ´ Ø³Û\8cÙ\84 Ø¯ Ù\88Û\8cرتÙ\88 Ø¨Ø§.\nØ¢Ù\84شتÛ\8cاتÙ\88 Ù\87Ù\86Û\8c Ø°Ø®Û\8cره نبیه.",
+       "previewnote": "Ù\81Ù\82Ø· Ø§Û\8c Ù¾Û\8cØ´ Ø³Û\8cÙ\84 Ø¯ Ù\88Û\8cرتÙ\88 Ø¨Ø§.\nØ¢Ù\84شتÛ\8cاتÙ\88 Ù\87Ù\86Û\8c Ø§Ù\85اÛ\8cÛ\8cه نبیه.",
        "continue-editing": "رو د راساگه ویرایشت",
        "editing": "د حالت ويرايشت$1",
        "creating": "راس كردن $1",
        "editingsection": "د حال ویرایشت$1(بشخ)",
        "editingcomment": "د حال ویرایشت$1(بشخ تازه)",
        "editconflict": "تضاد د ویرایشت:$1",
-       "explainconflict": "داÙ\88سÙ\87 Ú©Ù\87 Ø´Ù\85ا Ø´Ø±Ù\88 Ø¯ Ù\88Û\8cراÛ\8cشت Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ú©Ø±Ø¯Û\8cتÙ\87Ø\8c Û\8cÙ\87 Ù\86Ù\81ر Ù\87Ù\86Û\8c Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ø¢Ù\84شت Ø¯Ø¦Ù\87.\nراساگÙ\87 Ø±Ù\88ئÛ\8c Ù\85تÙ\86 Ø¨Ù\84Ú¯Ù\87 Ù\85تÙ\86 Ù\86Ù\87 Ú\86Û\8c Û\8cÙ\87 Ú©Ù\87 Ù\88جÙ\88د Ø¯Ø§Ø´ØªÙ\88Ù\87 Ø¯ Ù\88ر Ù\85Û\8cئرÙ\87.\nØ¢Ù\84شتÛ\8cا Ø´Ù\85ا Ø¯ Ù\85تÙ\86 Ù\87ارÛ\8c Ù\86Ø´Ù\88 Ø¯Ø¦Ù\87 Ù\87ئ.\nØ´Ù\85ا Ø¨Ø§ Ø¢Ù\84شتÛ\8cاتÙ\88Ù\86Ù\87 Ø¯ Ù\85تÙ\86 Ú©Ù\87 Ù\87ئش Û\8cÚ©Û\8c Ø¨Ú©Û\8cد.\nÙ\81Ù\82Ø· Ù\85تÙ\86Û\8c Ú©Ù\87 Ù\87ا Ø¯ Ø±Ù\88 Ø¯ Ù\88ختÛ\8c Ú©Ù\87 Ø´Ù\85ا\"{{رÙ\82Ù\85:ذخÛ\8cرÙ\87 Ú¯Ù\88تار}}\" Ù\86Ù\87 Ú¯Ø²Ø§Ø±Ø´Øª Ù\85Û\8c Ú©Û\8cد Ø°Ø®Û\8cره بوئه",
+       "explainconflict": "داÙ\88سÙ\87 Ú©Ù\87 Ø´Ù\85ا Ø´Ø±Ù\88 Ø¯ Ù\88Û\8cراÛ\8cشت Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ú©Ø±Ø¯Û\8cتÙ\87Ø\8c Û\8cÙ\87 Ù\86Ù\81ر Ù\87Ù\86Û\8c Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ø¢Ù\84شت Ø¯Ø¦Ù\87.\nراساگÙ\87 Ø±Ù\88ئÛ\8c Ù\85تÙ\86 Ø¨Ù\84Ú¯Ù\87 Ù\85تÙ\86 Ù\86Ù\87 Ú\86Û\8c Û\8cÙ\87 Ú©Ù\87 Ù\88جÙ\88د Ø¯Ø§Ø´ØªÙ\88Ù\87 Ø¯ Ù\88ر Ù\85Û\8cئرÙ\87.\nØ¢Ù\84شتÛ\8cا Ø´Ù\85ا Ø¯ Ù\85تÙ\86 Ù\87ارÛ\8c Ù\86Ø´Ù\88 Ø¯Ø¦Ù\87 Ù\87ئ.\nØ´Ù\85ا Ø¨Ø§ Ø¢Ù\84شتÛ\8cاتÙ\88Ù\86Ù\87 Ø¯ Ù\85تÙ\86 Ú©Ù\87 Ù\87ئش Û\8cÚ©Û\8c Ø¨Ú©Û\8cد.\nÙ\81Ù\82Ø· Ù\85تÙ\86Û\8c Ú©Ù\87 Ù\87ا Ø¯ Ø±Ù\88 Ø¯ Ù\88ختÛ\8c Ú©Ù\87 Ø´Ù\85ا\"{{رÙ\82Ù\85:ذخÛ\8cرÙ\87 Ú¯Ù\88تار}}\" Ù\86Ù\87 Ú¯Ø²Ø§Ø±Ø´Øª Ù\85Û\8c Ú©Û\8cد Ø§Ù\85اÛ\8cÛ\8cه بوئه",
        "yourtext": "متن شما",
        "storedversion": "دوواره دیئن انبار بیه.",
        "yourdiff": "فرخيا",
        "moveddeleted-notice": "ای بلگه پاک بیه.\nپاک بین و جمشت ای بلگه سی سرچشمه دئین فراهم بیه",
        "log-fulllog": "دیئن همه پهرستنومه یا",
        "edit-conflict": "مخالفت نه ویرایشت بکید",
-       "postedit-confirmation": "ویرایشتتو ذخیره بی",
+       "postedit-confirmation-saved": "ویرایشتتو اماییه بی",
        "edit-already-exists": "نبوئه یه گل بلگه تازه راس بکید.\nوه هئیش.",
        "defaultmessagetext": "متن پیغوم پیش فرض",
        "content-failed-to-parse": "د یک تیچیسن چیا مئن $2 د مدل $1:$3",
        "searchmenu-exists": "'''ایچه بلگه ای هئ وه نوم\"[[:$1]]\" که ها د ای ویکی'''",
        "searchmenu-new": "'''ای بلگه نه راس كو \"[[:$1]]\" د ای  ويكي!'''",
        "searchprofile-articles": "بلگيا محتوا",
-       "searchprofile-project": "بلگيا هومياری پروجه",
        "searchprofile-images": "رسانيا جمی",
        "searchprofile-everything": "همه چی",
        "searchprofile-advanced": "پيشرفته",
        "searchprofile-articles-tooltip": "بگرد مئن $1",
-       "searchprofile-project-tooltip": "بگرد مئن $1",
        "searchprofile-images-tooltip": "بگرد سی فايليا",
        "searchprofile-everything-tooltip": "همه محتوا نه پی جوری كو (شاملا بلگيا چك چنه)",
        "searchprofile-advanced-tooltip": "نوم جايا نوم ديار بگرد",
        "search-interwiki-default": "$1 نتیجه یا:",
        "search-interwiki-more": "(بیشتر)",
        "search-relatedarticle": "مرتوط",
-       "searcheverything-enable": "همه نوم جايا نوم ديار بگرد",
        "searchrelated": "مرتوط",
        "searchall": "همه",
        "showingresultsheader": "{{PLURAL:$5|نتيجه '''$1''' د'''$3'''|نتيجه يا '''$1 - $2''' د'''$3'''}} سيli'''$4'''",
        "prefs-rc": "آلشتیا تازه باو",
        "prefs-watchlist": "سیل برگ",
        "prefs-watchlist-days": "روزیا نه د سیل برگ نشو دئه بو:",
-       "prefs-watchlist-edits-max": "فره تری شماره:1000",
+       "prefs-watchlist-edits-max": "شماره بیشترونه:1000",
        "prefs-misc": "شيوسن",
        "prefs-resetpass": "پاسورد نه آلشت بكيت",
        "prefs-changeemail": "نشونی ایمیل تو نه آلشت بکید",
        "prefs-setemail": "يه گل ايميل بنیت",
+       "prefs-email": "چیا هنی انجومانامه",
        "prefs-rendering": "شلک و ری",
-       "saveprefs": "ذخÙ\8aره كردن",
+       "saveprefs": "اÙ\85اÛ\8cÛ\8cه كردن",
        "prefs-editing": "د حالت ويرايشت",
        "rows": "رديفيا:",
        "columns": "ستينا:",
        "searchresultshead": "پی جوری",
        "stub-threshold-disabled": "د كار ونن",
        "recentchangesdays": "روزیا آلشتیا تازه باو نه نشو بیه:",
-       "recentchangesdays-max": "فره ترین $1 {{جمی:$1|روز|روزیا}}",
+       "recentchangesdays-max": "$1 بیشترونه {{جمی:$1|روز|روزیا}}",
        "prefs-help-recentchangescount": "یه شامل آلشتیا تازه،ویرگاریا بلگه و پهرستنومه یا هئ.",
-       "savedprefs": "Ù\88Û\8cجÙ\87 Ú¯Û\8cا Ù\87Ù\86Û\8c ØªÙ\88 Ø°Ø®Û\8cره بیه.",
+       "savedprefs": "Ù\88Û\8cجÙ\87 Ú¯Û\8cا Ù\87Ù\86Û\8c ØªÙ\88 Ø§Ù\85اÛ\8cÛ\8cه بیه.",
        "timezonelegend": "وخت راساگه",
        "localtime": "وخت ولاتی:",
        "timezoneuseserverdefault": "وخت راساگه",
        "prefs-emailconfirm-label": "مئکم کردن ایمیل:",
        "youremail": "ايميل:",
        "username": "{{جنس:$1|نوم کاروری}}:",
-       "uid": "{{جنس:$1|کارور}}آی دی:",
        "prefs-memberingroups": "{{جنس:$2|اندوم}}  {{جمی:$1|گرویا|گرویا}}:",
        "prefs-registration": "موقع ثوت نام:",
        "yourrealname": "نوم راستكی:",
        "userrights-user-editname": "نوم كاروری ته وارد كو",
        "editusergroup": "ویرایشت گرویا کاروری",
        "userrights-editusergroup": "ویرایشت گرویا کاروری",
-       "saveusergroups": "ذخÛ\8cرÙ\87 Ú©Ø±Ø¯ Ú¯Ø±Ù\88Û\8cا Ú©Ø§Ø±Ù\88ری",
+       "saveusergroups": "اÙ\85اÛ\8cÛ\8cÙ\87 Ú©Ø±Ø¯Ù\86 Ú¯Ø±Ù\88Û\8cا Ú©Ø§Ø±Û\8cاری",
        "userrights-groupsmember": "اندوم:",
        "userrights-reason": "دليل:",
        "userrights-no-interwiki": "شما سی ویرایشت حقوق کارور د ویکی یا هنی دسرسی ناریت.",
        "right-move-subpages": "بلگه یا و زیر بلگه یا شونه جا وه جا کو",
        "right-move-rootuserpages": "بلگه یا ریشه ای کارور نه جا وه جا کو",
        "right-movefile": "فایلیا نه جا وه جا کو",
+       "right-suppressredirect": "اوسه که بلگه یا د بین رئتنه هیچ واگردونی سی بلگه یا سرچشمه دروس نبیه",
        "right-upload": "سوار کردن فايلا",
        "right-upload_by_url": "سوار کرد فایلیا د یو آر ال",
        "right-writeapi": "د نیسنن ای پی آی استفاده بکید",
        "recentchanges-label-bot": "ای ويرايشت نه يه بوت انجوم ديئه",
        "recentchanges-label-unpatrolled": "ای ويرايشت هنی تيه واداشت نبيه",
        "recentchanges-legend-heading": "'''میراث:'''",
-       "recentchanges-legend-newpage": "(همچنو بوینیت [[ویجه:بلگیا تازه|نوم گه بلگیا تازه]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچنو بوینیت [[ویجه:بلگیا تازه|نوم گه بلگیا تازه]])",
        "rcnotefrom": "د هار آلشتیا د $2 هیئن(د بال د $1 نشون دئه بیه)",
        "rclistfrom": "آلشتیا تازه ایی که وا $3 $2 شرو بیه نشونش بئه",
        "rcshowhideminor": "ويرايشتيا کؤچک $1",
        "minoreditletter": "م",
        "newpageletter": "ن",
        "boteditletter": "ب",
-       "number_of_watching_users_pageview": "[$1 دینه {{جمی:$1|کارور|کاروریا}}]",
+       "number_of_watching_users_pageview": "[$1 دینه {{جمی:$1|کاریار|کاریاریا}}]",
        "rc_categories": "دسه یا نه محدود کو(وا \"|\" جگا بوئن",
        "rc_categories_any": "هرکوم",
        "rc-change-size-new": "$1 {{جمی:$1|بایت|بایتیا}} نها آلشت",
        "recentchangeslinked-to": "آلشتیایی که د بلگه یا هوم پیوند بینه وه جا بلگه دئیه بیه نشو بیه",
        "upload": "بلم گير كردن فايلا",
        "uploadbtn": "سوار کردن فایل",
-       "reuploaddesc": "سÙ\88ار Ú©Ø±Ø¯Ù\86 Ù\86Ù\87 Ø±Ø¯ Ø¨Ú©Û\8cد و د ورئردیت جابلگ سوارکرد",
+       "reuploaddesc": "سÙ\88ار Ú©Ø±Ø¯Ù\86 Ù\86Ù\87 Ø§Ù\86جÙ\88Ù\85 Ø´Û\8cÙ\88 Ø¨Ú©Û\8cت و د ورئردیت جابلگ سوارکرد",
        "uploadnologin": "وارد نبیه",
        "uploadnologintext": "لطفن $1 سی سوارکرد جانیایا.",
        "uploaderror": "خطا د سوار کردن",
        "filename-tooshort": "نوم فایل فره کؤچکه.",
        "illegal-filename": "نوم فایل اجاره ندئه بیه.",
        "unknown-error": "یه گل خطا نادیار ری ون کرده.",
-       "savefile": "جاÙ\86Û\8cا Ù\86Ù\87 Ø°Ø®Û\8cره کو",
+       "savefile": "جاÙ\86Û\8cا Ù\86Ù\87 Ø§Ù\85اÛ\8cÛ\8cه کو",
        "uploadedimage": "سوارکرد\"[[$1]]\"",
        "overwroteimage": "یه گل نسقه تازه د \"[[$1]]\" سوار بیه",
        "uploaddisabled": "سوار کردن د کار نئ.",
        "upload-proto-error": "پروتکل نادروس",
        "upload-file-error": "خطا مینونه",
        "upload-misc-error": "خطا سوار کرد ناشناخته",
+       "upload-too-many-redirects": "ای یو آر ال د ورگیرنه واگردونیا فرئی هئ",
        "upload-copy-upload-invalid-domain": "ورداشتن سوارکردیا د ای پوشگئر د دسرس نئ.",
        "backend-fail-notexists": "فایل $1 وجود ناره.",
        "backend-fail-delete": "نبوئه جانیا $1 پاک بوئه",
        "listfiles_thumb": "بن کلکی",
        "listfiles_date": "تاريخ",
        "listfiles_name": "نوم",
-       "listfiles_user": "كارور",
+       "listfiles_user": "کاریار",
        "listfiles_size": "انازه",
        "listfiles_count": "نسقیا",
        "listfiles-show-all": "شومل نسقه یا نهاتری عسگیا",
        "filehist-thumb": "عسگ كؤچك بيه",
        "filehist-thumbtext": "كؤچك كردن سی  نسقه چی $1",
        "filehist-nothumb": "هیچ بن کلیکی نئ",
-       "filehist-user": "كارور",
+       "filehist-user": "کاریار",
        "filehist-dimensions": "بعديا",
        "filehist-filesize": "انازه فایل",
        "filehist-comment": "نظر",
        "linkstoimage": "دمال بيه {{PLURAL:$1|ديس ونيا بلگه|$1 ديس ون بلگيا}} دای فایل:",
        "nolinkstoimage": "ایچه هیژ بلگه ای سی هوم پیوند بیئن وا ای فایل نی",
        "morelinkstoimage": " [[ویجه:چه هوم پیوندی ها ایچه/$1|هوم پیوندیا هنی]]سی ای فایل بونیت.",
+       "linkstoimage-redirect": "$1 (واگردونی جانیا) $2",
        "sharedupload": "ای جانیا که د $1 هئ شایت د پروجه یا هنی استفاده بیه.",
        "sharedupload-desc-here": "فایلی که د $1 شایت د مئن پروجیا هنی استفاده بیه.\nتوضی دباره[$2 file description page] د هار نشو دئئه بیه",
        "filepage-nofile": "چنو فایلی وا ای نوم نئ.",
        "mimesearch": "پی جوری ام آی ام ای",
        "download": "گرتن",
        "unwatchedpages": "بلگه یا ندئیه بیه",
+       "listredirects": "نوم گه واگردونیا",
        "unusedtemplates": "قالویا وه کار نبرده بیه.",
        "unusedtemplateswlh": "هوم پیوندیا هنی",
        "randompage": "بلگه بختكی",
        "randomincategory-invalidcategory": "\"$1\"  نوم دسه معتوری نئ.",
        "randomincategory-nopages": "هیچ بلگه ای د ای  [[:دسه نئ:$1|$1]] دسه.",
        "randomincategory-selectcategory-submit": "رو",
+       "randomredirect": "واگردونی بختکی",
        "statistics": "آماريا",
        "statistics-header-pages": "بلگه آماریا",
        "statistics-header-edits": "آماریا نه ویرایشت بکید",
        "statistics-header-views": "آماریا نه بوینیت",
-       "statistics-header-users": "آماریا کارور",
+       "statistics-header-users": "آماریا کاریار",
        "statistics-header-hooks": "آماریا هنی",
        "statistics-articles": "بلگه یا مینونه",
        "statistics-pages": "بلگیا",
+       "statistics-pages-desc": "همه بلگه یا د ویکی،د ور گیرنه بلگه یا چک چنه،واگردونیا و چیا هنیه.",
        "statistics-files": "جانیا یا سوار بیه",
        "statistics-edits-average": "میانگین ویرایشت یا سی هر بلگه",
        "statistics-views-total": "همه نه بوینیت",
        "statistics-views-peredit": "هر ویرایشت نه بوینیت",
-       "statistics-users": "ثوت نام بیه [[ویجه:نوم گه کاروریا|کاروریا]]",
+       "statistics-users": "ثوت نام بیه [[ویجه:نوم گه کاریاریا|کاریاریا]]",
        "statistics-users-active": "کاروریا کارکو",
        "statistics-mostpopular": "بلگه یایی که بیشتر دیئه بینه",
        "pageswithprop-submit": "رو",
+       "doubleredirects": "واگردونیا دوتایی",
+       "double-redirect-fixed-move": "[[$1]]جا وه جا بیه .\nوه خودکارونه وه روز بیه و ایسه وه د[[$2]] واگردونی بیه.",
+       "double-redirect-fixer": "تعمیر کننه واگردونی",
+       "brokenredirectstext": "واگردونیا نهاتر د بلگه یایی که وجود نارن هوم پیوند بینه.",
        "brokenredirects-edit": "ویرایشت",
        "brokenredirects-delete": "پاك كردن",
        "withoutinterwiki": "بلگه یایی که هوم پیوند زون نارن",
        "longpages": "بلگه یا گپ",
        "deadendpages": "بلگه یا نابود بیئنی",
        "protectedpages": "بلگه یا حفاظت بيه",
+       "protectedpages-noredirect": "واگردونیا قام بیه",
        "protectedpages-page": "بلگه",
        "protectedpages-expiry": "تموم بیه آ",
        "protectedpages-performer": "کارور حفاظت بیه",
        "log": "نیسنن رخ ونیا",
        "all-logs-page": "همه پهرستنومه یا عمومی",
        "allpages": "همه بلگيا",
-       "alphaindexline": "$1 د\n$2",
        "nextpage": "بلگه نهایی($1)",
        "prevpage": "بلگه دمایی($1)",
        "allarticles": "همه بلگيا",
        "allpagessubmit": "رو",
        "allpagesbadtitle": "عنوان بلگه حاسته بیه معتور نی،یا  یه گل مئن زونی یا مئن ویکی عنوان غلطه.\nیه شایت شومل یکی با یا بیشتر کاراکتریا نبوئه که سی ای موضوعیا استفاده بوئن",
+       "allpages-hide-redirects": "واگردونیا قام بیه",
        "cachedspecial-refresh-now": "دیئن آخری.",
        "categories": "دسه يا",
        "deletedcontributions": "هومیاریا پاک بیه کارور",
        "blocklogentry": " [[$1]] وا یه گل وخت تموم بیئن $2 و $3  قلف بیه",
        "block-log-flags-nocreate": "حساو راس کردن عاجز بیه.",
        "block-log-flags-nousertalk": "نبوئه بلگه چک چنه خوتونه ویرایشت بکید",
+       "lockdb": "قلف کردن رسینه گا",
+       "unlockconfirm": "هره، مه واقعند میهام که رسینه گا وا بوئه.",
+       "unlockbtn": "رسینه گا قلف نبیه",
+       "lockdbsuccesssub": "رسینه گا د خوئی قلف بیه",
        "move-page": "$1 جا وه جا کو",
        "movenotallowed": "شما وه جا وه جا کردن بلگه دسرسی ناریت",
        "movenotallowedfile": "شما وه جا وه جا کردن جانیایا دسرسی ناریت",
        "movepagebtn": "بلگه جا وه جا کو",
+       "movepage-moved-redirect": "یه گل واگردونی دروس بیه.",
        "movelogpage": "جاوه جا کردن",
        "movelogpagetext": "د هار یه گل نوم گه د جا وه جایی یا بلگه هئ",
        "revertmove": "لرستن",
        "tooltip-ca-nstab-template": "ديئن قالو",
        "tooltip-ca-nstab-category": "ديئن بلگه دسه بنی",
        "tooltip-minoredit": "یه نه د عنوان حیرده ویرایشت ثوت کو",
-       "tooltip-save": "Ø¢Ù\84شتÙ\8aاتÙ\88Ù\86Ù\87 Ø°Ø®Ù\8aره بكيد",
+       "tooltip-save": "Ø¢Ù\84شتÙ\8aاتÙ\88Ù\86Ù\87 Ø§Ù\85اÛ\8cÛ\8cه بكيد",
        "tooltip-preview": "پیش سیل آلشتیاتو،لطفن پیش د ذخیره دش استفاده بکیتو",
        "tooltip-diff": "آلشتیا نه که شما د ای متن راس کردیته نشو بیئه",
        "tooltip-compareselectedversions": "فرخیا مینجا دو تا د دو بار دیئن ای بلگه نه بوینیت",
        "siteusers": "{{نوم سیل جا}} {{جمی:$2|کارور|کاروریا}} $1",
        "pageinfo-language": "بلگه مینونه زون",
        "pageinfo-content-model": "شلگ مینونه بلگه",
+       "pageinfo-redirects-name": "شماره واگردونیا ای بلگه",
+       "pageinfo-redirectsto": "واگردونی سی",
        "pageinfo-category-files": "شماره جانیایا",
        "patrol-log-page": "پهرستنومه گشتن",
        "filedeleteerror-short": "خطا پاک نبیئن جانیا:$1",
        "img-lang-go": "رو",
        "table_pager_limit_submit": "رو",
        "autosumm-replace": "مینونه وا \"َ$1\" جاگزین بی",
+       "autoredircomment": "بلگه واگردونی بیه سی[[$1]]",
        "watchlisttools-view": "آلشتیا مرتوط نه بوینیت",
        "watchlisttools-edit": "سیل برگ بوینیتو و ویرایشت بکید",
        "watchlisttools-raw": "سیل برگ نه ردیفی ویرایشت کو",
        "version-ext-colheader-version": "نسقه",
        "version-ext-colheader-license": "ليسانس",
        "version-ext-colheader-credits": "نیسنه یا",
+       "redirect": "واگردونی وا جانیا،بلگه یا وانیئری نوم دیارکو",
        "redirect-submit": "رو",
        "redirect-file": "نوم جانیا",
        "fileduplicatesearch-filename": "نوم جانیا:",
        "specialpages-group-media": "گزارشتیا رسانه و سوارکردیا",
        "specialpages-group-users": "کاروریا و حقوق",
        "specialpages-group-pages": "نوم گه بلگه یا",
+       "specialpages-group-redirects": "بلگه ویجه واگردونی بیه",
        "external_image_whitelist": "یه خط نه ول بکید چی وه<pre>",
        "tag-filter": "فيلتر [[Special:Tags|Tag]]:",
        "tags-display-header": "دیاری کردن د نوم گه آلشتیا",
index 781b149..0ce7d1c 100644 (file)
        "image_sample": "Piemers.jpg",
        "image_tip": "Ievietots attēls",
        "media_sample": "Piemers.ogg",
-       "media_tip": "Saite uz multimēdiju failu",
+       "media_tip": "Faila saite",
        "sig_tip": "Tavs paraksts ar laika atzīmi",
        "hr_tip": "Horizontāla līnija (neizmanto lieki)",
        "summary": "Kopsavilkums:",
        "expensive-parserfunction-category": "Lapas ar pārāk daudz laikietilpīgiem apstrādes funkciju izsaukumiem",
        "post-expand-template-inclusion-warning": "'''Brīdinājums:''' iekļauto veidņu izmērs ir par lielu.\nDažas veidnes netiks iekļautas.",
        "post-expand-template-inclusion-category": "Lapas, kurām pārsniegts iekļauto veidņu apjoms",
-       "post-expand-template-argument-warning": "'''Brīdinājums:''' Šī lapa satur vairāk neka vienu veidni argumentu, kas ir pārāk liels pec paplašināšanas.\nŠie argumenti ir izlaists.",
+       "post-expand-template-argument-warning": "'''Brīdinājums:''' Šī lapa satur vismaz vienu veidnes argumentu, kura lielums pēc paplašināšanas pārsniedz tehnisko limitu.\nVisi šādi argumenti tiks izlaisti.",
        "post-expand-template-argument-category": "Lapas, kurās ir izlaisti veidņu argumenti",
        "parser-template-loop-warning": "Veidne ir ievietota tādā pašā veidnē: [[$1]]",
        "undo-success": "Šo izmaiņu ir iespējams atcelt.\nLūdzu, pārbaudi zemāk redzamajā salīdzinājumā, vai tu to tiešām vēlies darīt, un pēc tam saglabā lapu, lai pabeigtu izmaiņas atcelšanu.",
        "searchmenu-exists": "'''Šajā projektā ir raksts ar nosaukumu \"[[:$1]]\"'''",
        "searchmenu-new": "'''Izveido rakstu \"[[:$1]]\" šajā projektā!'''",
        "searchprofile-articles": "Rakstos",
-       "searchprofile-project": "Palīdzības un projektu lapās",
        "searchprofile-images": "Multivides failos",
        "searchprofile-everything": "Visur",
        "searchprofile-advanced": "Izvēlēties sīkāk",
        "searchprofile-articles-tooltip": "Meklēt iekš $1",
-       "searchprofile-project-tooltip": "Meklēt iekš $1",
        "searchprofile-images-tooltip": "Meklēt attēlus, audio un video failus",
        "searchprofile-everything-tooltip": "Meklēt visur (ieskaitot diskusiju lapas)",
        "searchprofile-advanced-tooltip": "Izvēlēties nosaukumvietas, kurās meklēt",
        "search-interwiki-default": "Rezultāti no $1:",
        "search-interwiki-more": "(vairāk)",
        "search-relatedarticle": "Saistītais",
-       "searcheverything-enable": "Meklēt visās nosaukumvietās",
        "searchrelated": "saistītais",
        "searchall": "viss",
        "showingresults": "Šobrīd ir {{PLURAL:$1|redzama|redzamas}} '''$1''' {{PLURAL:$1|lapa|lapas}}, sākot ar #'''$2'''.",
        "allowemail": "Atļaut saņemt e-pastus no citiem lietotājiem",
        "prefs-searchoptions": "Meklēšana",
        "prefs-namespaces": "Vārdtelpas",
-       "defaultns": "Meklēt šajās vārdtelpās pēc noklusējuma:",
        "default": "pēc noklusējuma",
        "prefs-files": "Attēli",
        "prefs-custom-css": "Personīgais CSS",
        "prefs-emailconfirm-label": "E-pasta statuss:",
        "youremail": "Tava e-pasta adrese:",
        "username": "{{GENDER:$1|Lietotājvārds}}:",
-       "uid": "{{GENDER:$1|Lietotāja|Lietotājas}} ID:",
        "prefs-memberingroups": "Pieder {{PLURAL:$1|grupai|grupām}}:",
        "prefs-registration": "Reģistrēšanās datums:",
        "yourrealname": "Tavs īstais vārds:",
        "recentchanges-label-unpatrolled": "Šis labojums vēl nav pārbaudīts",
        "recentchanges-label-plusminus": "Par tik baitiem tika izmainīts lapas izmērs",
        "recentchanges-legend-heading": "'''Apzīmējumi:'''",
-       "recentchanges-legend-newpage": "(skatīt arī [[Special:NewPages|jaunās lapas]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (skatīt arī [[Special:NewPages|jaunās lapas]])",
        "rcnotefrom": "Šobrīd redzamas izmaiņas kopš '''$2''' (parādītas ne vairāk par '''$1''').",
        "rclistfrom": "Parādīt jaunas izmaiņas kopš $3 $2",
        "rcshowhideminor": "$1 maznozīmīgos",
        "logempty": "Reģistrā nav atbilstošu ierakstu.",
        "log-title-wildcard": "Meklēt virsrakstus, kas sākas ar šo tekstu",
        "allpages": "Visas lapas",
-       "alphaindexline": "no $1 līdz $2",
        "nextpage": "Nākamā lapa ($1)",
        "prevpage": "Iepriekšējā lapa ($1)",
        "allpagesfrom": "Parādīt lapas sākot ar:",
index bc2ad0f..4e9e21b 100644 (file)
        "pool-timeout": "Fe-potoana voahoatra ho an'ny hidy.",
        "pool-queuefull": "Feno ny lisitry ny asa hatao",
        "pool-errorunknown": "Tsi-fetezana tsy fantatra",
+       "pool-servererror": "Tsy mandeha ny rahraha fanisana ($1).",
        "aboutsite": "Mombamomba ny {{SITENAME}}",
        "aboutpage": "Project:Mombamomba",
        "copyright": "Ny lisansa $1 no mamehy ny fampiasana ity voatoatiny ity.",
        "edit-gone-missing": "Tsy afaka natao update ilay pejy.\nMety voafafa angamba izy.",
        "edit-conflict": "Adi-panovàna.",
        "edit-no-change": "Tsy norarahian'ny rindrankajy ny fanovanao satria tsy nanova ny lahatsoratra ianao.",
+       "postedit-confirmation-created": "Voaforona ilay pejy.",
+       "postedit-confirmation-restored": "Tafaverina ilay pejy.",
        "postedit-confirmation-saved": "Voatahiry ny fanovanao.",
        "edit-already-exists": "Tsy afaka amboarina ilay pejy vaovao.\nEfa misy izy.",
        "defaultmessagetext": "Hafatra raha tsy misy",
        "parser-template-recursion-depth-warning": "Fetran'ny halalin'ny fiantsoana endrika voahoatra ($1).",
        "language-converter-depth-warning": "Mihoatra ny fetran-kalalin'ny mpamadika teny ($1)",
        "node-count-exceeded-category": "Pejy izay ahitana fihoatran'ny isam-patotra (node)",
+       "node-count-exceeded-category-desc": "Sokajy ho an'ny pejy ahitana isan'ny naody mihoatra.",
        "node-count-exceeded-warning": "Pejy manana isam-patotra mihoatra",
        "expansion-depth-exceeded-category": "Pejy manana halalim-panitarana mihoatra",
+       "expansion-depth-exceeded-category-desc": "Sokajy ho an'ny pejy ahitana halalim-piitarana mihoatra.",
        "expansion-depth-exceeded-warning": "Pejy manana halalim-panitarana mihoatra",
        "parser-unstrip-loop-warning": "Nahitana tondro mifolaka tsy azo vahana",
        "parser-unstrip-recursion-limit": "Tafahoatra ny fetra avo ny fetra recursion ($1)",
        "searchmenu-exists": "'''Misy pejy mitondra anarana « [[:$1]] » eto amin'ity wiki ity'''",
        "searchmenu-new": "<strong>Hamorona ny pejy \"[[:$1]]\" eto amin'ity wiki ity!</strong> {{PLURAL:$2|0=|Jereo koa ny pejy hita tamin'ny karokao.|Jereo koa ny valim-pikarohana hita.}}",
        "searchprofile-articles": "Pejy misy votoatiny",
-       "searchprofile-project": "Pejy fanampiana sy pejy tetikasa",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Izy Rehetra",
        "searchprofile-advanced": "Fikarohana antsipirihany",
        "searchprofile-articles-tooltip": "Hikaroka ao amin'ny $1",
-       "searchprofile-project-tooltip": "Hikaroka ao amin'ny $1",
        "searchprofile-images-tooltip": "Hikaroka rakitra multimedia",
        "searchprofile-everything-tooltip": "Hitady eraky ny tranonkala (miaraka amin'ny pejin-dresaka)",
        "searchprofile-advanced-tooltip": "Hitady ny anaran-tsehatra ho an'ny fikarohana",
        "search-interwiki-default": "Valiny amin'ny $1 :",
        "search-interwiki-more": "(be kokoa)",
        "search-relatedarticle": "voadinika",
-       "searcheverything-enable": "Hitady anatin'ny anaran-tsehatra rehetra:",
        "searchrelated": "voadinika",
        "searchall": "rehetra",
        "showingresults": "Omeo ny valiny{{PLURAL:$1||}} miisa hatramin'ny <b>$1</b> manomboka ny #<b>$2</b>.",
        "allowemail": "Hanaiky ny fandefasana mailaka avy amin'ny mpikambana hafa",
        "prefs-searchoptions": "Karoka",
        "prefs-namespaces": "Toeran'anarana",
-       "defaultns": "Fikarohana tsipalotra anatin'ireo anaran-tsehatra ireo :",
        "default": "tsipalotra",
        "prefs-files": "Rakitra",
        "prefs-custom-css": "CSS manokana",
        "prefs-emailconfirm-label": "Famarinana ny imailaka :",
        "youremail": "Imailaka:",
        "username": "{{GENDER:$1}}Anaram-pikambana :",
-       "uid": "{{GENDER:$1}}mpikambana :",
        "prefs-memberingroups": "Mpikambana{{GENDER:$2}} ao amin'ny vondrona{{PLURAL:$1}}:",
        "prefs-registration": "Daty fidirana :",
        "yourrealname": "Tena anarana marina:",
        "recentchanges-label-unpatrolled": "Ity fanovana ity dia mbola tsy voamarina",
        "recentchanges-label-plusminus": "IO ny isan'ny oktety niova tamin'ilay pejy",
        "recentchanges-legend-heading": "'''Maribolana:'''",
-       "recentchanges-legend-newpage": "(jereo koa ny [[Special:NewPage|lisitry ny pejy vaovao]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (jereo koa ny [[Special:NewPage|lisitry ny pejy vaovao]])",
        "rcnotefrom": "Ity eto ambany ity ny lisitry ny vao niova manomboka ny <b>$2</b> (hatramin'ny <b>$1</b> no miseho).",
        "rclistfrom": "Asehoy izay vao niova manomboka ny $3 $2",
        "rcshowhideminor": "$1 ny fanovàna kely",
        "log-title-wildcard": "Hitady amin'ny lohateny manomboka amin'io soratra io",
        "showhideselectedlogentries": "Haneho/Hanafina ny iditry ny laogy nofidiana",
        "allpages": "Pejy rehetra",
-       "alphaindexline": "$1 hatramin'ny $2",
        "nextpage": "Pejy manaraka ($1)",
        "prevpage": "Pejy taloha ($1)",
        "allpagesfrom": "Asehoy ny pejy manomboka ny:",
index df1ce4f..1ce7021 100644 (file)
        "usercsspreview": "'''Ingeklah bahawa Sanak sadang manampilan pratayang dari CSS Sanak.\nPratayang iko alun disimpan!'''",
        "userjspreview": "'''Ingeklah bahawa nan Sanak liek hanyolah pratayang JavaScript Sanak, dan bahawa pratayang tasabuik alun disimpan!'''",
        "sitecsspreview": "'''Ingeklah bahawa Sanak hanyo manampilan pratayang dari CSS iko.'''\n'''Parubahan alun disimpan!'''",
-       "sitejspreview": "'''Ingeklah bahawa Sanak hanyo manampilan pratayang dari Kode JavaScript iko.'''\n'''Parubahan alun disimpan!'''",
+       "sitejspreview": "<strong>Ingek! Sanak hanyo manampilan pratonton kode JavaScript ko. Parubahan alun basimpan!</strong>",
        "userinvalidcssjstitle": "'''Paringatan:''' Kulik \"$1\" indak ditamuan. Harap diingek bahawa laman .css dan .js manggunokan huruf kecil, contoh {{ns:user}}:Foo/vector.css dan bukannyo {{ns:user}}:Foo/Vector.css.",
        "updated": "(Dipabaharui)",
        "note": "'''Catatan:'''",
        "searchmenu-exists": "'''Ado laman nan banamo \"[[:$1]]\" pado wiki ko.'''",
        "searchmenu-new": "'''Buek laman \"[[:$1]]\" di wiki ko!'''",
        "searchprofile-articles": "Laman isi",
-       "searchprofile-project": "Laman Bantuan jo Proyek",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Sadonyo",
        "searchprofile-advanced": "Labiah lanjuik",
        "searchprofile-articles-tooltip": "Cari di $1",
-       "searchprofile-project-tooltip": "Cari di $1",
        "searchprofile-images-tooltip": "Cari untuak berkas",
        "searchprofile-everything-tooltip": "Cari kasadonyo (tamasuak laman rundiang)",
        "searchprofile-advanced-tooltip": "Pacarian di ruang namo tatantu",
        "search-interwiki-default": "Hasil $1:",
        "search-interwiki-more": "(salanjuiknyo)",
        "search-relatedarticle": "Bakaitan",
-       "searcheverything-enable": "Cari kasado ruangnamo",
        "searchrelated": "bakaitan",
        "searchall": "sado",
        "showingresults": "Di bawah ko dikaluaan sampai {{PLURAL:$1|'''$1''' hasil}}, dimulai dari #'''$2'''.",
        "allowemail": "Izinkan pangguno lain mangirim surel",
        "prefs-searchoptions": "Cari",
        "prefs-namespaces": "Ruangnamo",
-       "defaultns": "Ataupun cari dalam ruangnamo ko:",
        "default": "baku",
        "prefs-files": "Berkas",
        "prefs-custom-css": "CSS paribadi",
        "prefs-emailconfirm-label": "Surel konfirmasi:",
        "youremail": "Surel:",
        "username": "{{GENDER:$1|Namo pangguno}}:",
-       "uid": "ID {{GENDER:$1|pangguno}}:",
        "prefs-memberingroups": "{{GENDER:$2|Anggota}} {{PLURAL:$1|kalompok}}:",
        "prefs-registration": "Wakatu pandaftaran:",
        "yourrealname": "Namo asli:",
        "log-title-wildcard": "Cari judul nan diawali jo teks ko",
        "showhideselectedlogentries": "Tunjuakan/Suruakan entri log tapiliah",
        "allpages": "Kasado laman",
-       "alphaindexline": "$1 sampai $2",
        "nextpage": "Laman salanjuiknyo ($1)",
        "prevpage": "Laman sabalunnyo ($1)",
        "allpagesfrom": "Tunjuakan laman mulai dari:",
        "blockip": "Sakek pangguno",
        "blockip-legend": "Sakek pangguno",
        "blockiptext": "Gunoan formulir di bawah ko untuak manyakek akses dari sabuah alamaik IP atau pangguno.\nIko hanyo buliah dilakuan untuak mancagah vandal, dan sajalan jo [[{{MediaWiki:Policy-url}}|kabijakan]].\nMasuakan alasan sakek di bawah (contoh, mambuek karusakan atau vandal).",
-       "ipadressorusername": "Alamaik IP atau namo pangguno:",
+       "ipaddressorusername": "Alamaik IP atau namo pangguno:",
        "ipbexpiry": "Sampai:",
        "ipbreason": "Alasan:",
        "ipbreason-dropdown": "*Alasan umum sakek\n** Marusak (vandal)\n** Mangagiah informasi palsu\n** Mangilangkan isi laman\n** Spam pautan ka situs lua\n** Mambuek ota gadang di laman\n** Babuek intimidasi/palecehan\n** Manyalahgunoan babarapo akun\n** Namo pangguno talarang\n** Bot alun ado bot flag",
        "pageinfo-category-pages": "Jumlah laman",
        "pageinfo-category-subcats": "Jumlah subkategori",
        "pageinfo-category-files": "Jumlah berkas",
-       "skinname-cologneblue": "Biru Köln",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderen",
        "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Tandoi lah dipatroli",
        "markaspatrolledtext": "Tandoi laman ko lah dipatroli",
        "newimages-summary": "Laman istimewa barikuik manunjuakan daftar berkas nan tarakhia dimuek",
        "newimages-legend": "Panyariang",
        "newimages-label": "Namo berkas (atau sabagian darinyo):",
-       "showhidebots": "($1 bot)",
        "noimages": "Indak ado nan dicaliak.",
        "ilsubmit": "Cari",
        "bydate": "jo tanggal",
index c0b054c..9b67474 100644 (file)
        "vector-view-view": "Читај",
        "vector-view-viewsource": "Извор",
        "actions": "Дејства",
+       "vector-more-actions": "Повеќе",
        "namespaces": "Именски простори",
        "variants": "Варијанти",
        "navigation-heading": "Навигационо мени",
        "currentrev": "Тековна преработка",
        "currentrev-asof": "Последна преработка од $1",
        "revisionasof": "Преработка од $1",
-       "revision-info": "Преработка од $1; направена од $2",
+       "revision-info": "Преработка од $1; направена од {{GENDER:$6|$2}}$7",
        "previousrevision": "← Претходна преработка",
        "nextrevision": "Следна преработка →",
        "currentrevisionlink": "Последна преработка",
        "searchmenu-exists": "'''На ова вики има страница со наслов „[[:$1]]“'''",
        "searchmenu-new": "<strong>Создајте ја страницата „[[:$1]]“ на ова вики!</strong> {{PLURAL:$2|0=|Погледајте ја и страницата најдена со пребарувањето.|Погледајте ги и најдените резултати од пребарувањето.}}",
        "searchprofile-articles": "Статии",
-       "searchprofile-project": "Помош и проектни страници",
        "searchprofile-images": "Податотеки",
        "searchprofile-everything": "Сè",
        "searchprofile-advanced": "Напредно",
        "searchprofile-articles-tooltip": "Пребарување во $1",
-       "searchprofile-project-tooltip": "Пребарување во $1",
        "searchprofile-images-tooltip": "Пребарување на податотеки",
        "searchprofile-everything-tooltip": "Пребарување по сета содржина (вклучувајќи страници за разговор)",
        "searchprofile-advanced-tooltip": "Пребарување во именски простори по избор",
        "search-interwiki-default": "Најдено на $1:",
        "search-interwiki-more": "(уште)",
        "search-relatedarticle": "Поврзано",
-       "searcheverything-enable": "Барај во сите именски простори",
        "searchrelated": "поврзано",
        "searchall": "сè",
        "showingresults": "Подолу {{PLURAL:$1|е прикажан '''1''' резултат|се прикажани '''$1''' резултати}} почнувајќи од бр. '''$2'''.",
        "powersearch-togglelabel": "Одбери:",
        "powersearch-toggleall": "Сè",
        "powersearch-togglenone": "Ништо",
+       "powersearch-remember": "Запамти го изборот за идни пребарувања",
        "search-external": "Надворешно пребарување",
        "searchdisabled": "{{SITENAME}} пребарувањето е оневозможено.\nВо меѓувреме, можете да пребарувате преку Google.\nДа напоменеме дека нивното индексирање на {{SITENAME}} содржините може да биде застарено.",
        "search-error": "Се појави грешка при пребарувањето: $1",
        "allowemail": "Дозволи е-пошта од други корисници",
        "prefs-searchoptions": "Пребарување",
        "prefs-namespaces": "Именски простори",
-       "defaultns": "Инаку пребарувај во овие именски простори:",
        "default": "по основно",
        "prefs-files": "Податотеки",
        "prefs-custom-css": "Посебно CSS",
        "recentchanges-label-unpatrolled": "Ова уредување сè уште не е испатролирано",
        "recentchanges-label-plusminus": "Промена на големината на страницата во бајти",
        "recentchanges-legend-heading": "'''Легенда:'''",
-       "recentchanges-legend-newpage": "(погл. и [[Special:NewPages|списокот на нови страници]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (погл. и [[Special:NewPages|списокот на нови страници]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Подолу се промените направени од <strong>$2</strong> наваму (се прикажуваат до <b>$1</b>).",
        "rclistfrom": "Прикажи нови промени почнувајќи од $3 $2",
        "largefileserver": "Големината на оваа податотека е поголема од максимално дозволената големина од серверот.",
        "emptyfile": "Податотеката што ја подигнавте е празна.\nОва може да се должи на грешка во нејзиното име.\nПроверете дали навистина сакате да ја подигнете ваквата податотека.",
        "windows-nonascii-filename": "Опслужувачот не поддржува податотечни имиња со специјални знаци.",
-       "fileexists": "Податотека со ова име веќе постои, проверете <strong>[[:$1]]</strong> ако не сте сигурни дали сакате да го промените.\n[[$1|thumb]]",
+       "fileexists": "Податотека со ова име веќе постои. Проверете <strong>[[:$1]]</strong> ако не {{GENDER:|сте}} сигурни дали сакате да ја промените.\n[[$1|thumb]]",
        "filepageexists": "Страницата за опис на оваа податотека е веќе создадена на <strong>[[:$1]]</strong>, но не постои податотека со тоа име.\nОписот кој го внесовте нема да стои на страницата за опис.\nДоколку сакате описот да стои тука, ќе морате да го уредите рачно.\n[[$1|thumb]]",
        "fileexists-extension": "Податотека со слично име веќе постои: [[$2|thumb]]\n* Име на податотека која се подигнува: <strong>[[:$1]]</strong>\n* Име на постоечка податотека: <strong>[[:$2]]</strong>\nВе молиме изберете друго име за податотеката.",
        "fileexists-thumbnail-yes": "Се чини дека податотеката е слика со намалена големина ''(минијатура)''. [[$1|thumb]]\nПроверете ја податотеката <strong>[[:$1]]</strong>.\nАко податотеката која ја проверувате е истата слика во својата изворна големина тогаш не мора да ја подигате дополнително.",
        "wantedtemplates": "Потребни шаблони",
        "mostlinked": "Најмногу врски до страници",
        "mostlinkedcategories": "Најмногу врски до категории",
-       "mostlinkedtemplates": "Ð\9dаÑ\98многÑ\83 Ð²Ñ\80Ñ\81ки ÐºÐ¾Ð½ Ñ\88аблони",
+       "mostlinkedtemplates": "Ð\9dаÑ\98многÑ\83 Ð¿Ñ\80евмеÑ\82наÑ\82и Ñ\81Ñ\82Ñ\80аниÑ\86и",
        "mostcategories": "Страници со најмногу категории",
        "mostimages": "Најмногу врски до податотеки",
        "mostinterwikis": "Страници со најмногу меѓувики",
        "watchnologin": "Не сте најавени",
        "addwatch": "Додај во списокот на набљудувања",
        "addedwatchtext": "Страницата „[[:$1]]“ е додадена во [[Special:Watchlist|списокот на набљудувања]].\nИдните промени на оваа страница и нејзината страница за разговор ќе се прикажуваат таму.",
+       "addedwatchtext-short": "Страницата „$1“ е додадена во вашите набљудувања.",
        "removewatch": "Отстрани од списокот на набљудувања",
        "removedwatchtext": "Страницата „[[:$1]]“ е отстранета од [[Special:Watchlist|списокот на набљудувања]].",
+       "removedwatchtext-short": "Страницата „$1“ е отстранета од вашите набљудувања.",
        "watch": "Набљудувај",
        "watchthispage": "Набљудувај ја страницава",
        "unwatch": "Престани со набљудување",
        "excontent": "содржината беше: '$1'",
        "excontentauthor": "содржината беше: '$1' (и единствениот автор беше '$2')",
        "exbeforeblank": "содржината пред бришењето беше: '$1'",
-       "delete-confirm": "Ð\98збÑ\80иÑ\88и „$1“",
+       "delete-confirm": "Ð\91Ñ\80иÑ\88еÑ\9aе Ð½Ð° „$1“",
        "delete-legend": "Бришење",
        "historywarning": "'''Предупредување:''' Страницата што сакате да ја избришете има историја со околу $1 {{PLURAL:$1|преработка|преработки}}:",
        "confirmdeletetext": "На пат сте трајно да избришете страница заедно со нејзината историја.\nПотврдете дека имате намера да го направите ова, дека ги разбирате последиците од тоа и дека го правите во согласност со [[{{MediaWiki:Policy-url}}|правилата]].",
        "tooltip-summary": "Внесете краток опис",
        "interlanguage-link-title": "$1 — $2",
        "common.css": "/* Тука поставениот CSS ќе се применува врз сите рува */",
-       "cologneblue.css": "/* Тука поставениот CSS ќе се применува врз корисниците што го избрале рувото „Келнско сино“ */",
        "monobook.css": "/* Тука поставениот CSS ќе се применува врз корисниците на рувото „Монобук“ */",
-       "modern.css": "/* Тука поставениот CSS се однесува на корисниците на рувото „Современо“ */",
        "vector.css": "/* Тука поставениот CSS се однесува на корисниците на рувото „Векторско“ */",
        "print.css": "/* Тука поставениот CSS ќе се применува во верзијата за печатење */",
        "noscript.css": "/* Тука поставениот CSS се однесува на корисниците што имаат оневозможено JavaScript */",
        "group-sysop.css": "/* Тука поставениот CSS ќе се применува само врз системските оператори */",
        "group-bureaucrat.css": "/* Тука поставениот CSS ќе се применува само врз бирократите */",
        "common.js": "/* Тука поставениот JavaScript ќе им се вчитува на сите корисници при отворањето на секоја страница. */",
-       "cologneblue.js": "/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Келнско сино“ */",
        "monobook.js": "/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Монобук“ */",
-       "modern.js": "/* Било која Јава скрипта поставена овде ќе биде вчитана за сите корисници што го користат рувото Современо */",
        "vector.js": "/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Векторско“ */",
        "group-autoconfirmed.js": "/* Тука поставениот JavaScript  ќе им се вчитува само на автопотврдените корисници */",
        "group-user.js": "/* Тука поставениот JavaScript  ќе им се вчитува само на регистрираните корисници */",
        "pageinfo-category-pages": "Број на страници",
        "pageinfo-category-subcats": "Број на поткатегории",
        "pageinfo-category-files": "Број на податотеки",
-       "skinname-cologneblue": "Келнско сино",
        "skinname-monobook": "Монобук",
-       "skinname-modern": "Современо",
        "skinname-vector": "Векторско",
        "markaspatrolleddiff": "Означи како проверена верзија",
        "markaspatrolledtext": "Означи ја верзијата како проверена",
index 8ee8c40..76e63fd 100644 (file)
        "vector-view-view": "വായിക്കുക",
        "vector-view-viewsource": "മൂലരൂപം കാണുക",
        "actions": "നടപടികൾ",
+       "vector-more-actions": "കൂടുതൽ",
        "namespaces": "നാമമേഖല",
        "variants": "രൂപഭേദങ്ങൾ",
        "navigation-heading": "ഗമന വഴികാട്ടി",
        "edit-gone-missing": "ഈ താൾ പുതുക്കുവാൻ സാധിക്കുകയില്ല.\nഇത് മായ്ക്കപ്പെട്ടതായി കാണുന്നു.",
        "edit-conflict": "തിരുത്തൽ സമരസപ്പെടായ്ക.",
        "edit-no-change": "ഇപ്പോഴുള്ള സ്ഥിതിയിൽ നിന്നു യാതൊരു മാറ്റവും ഇല്ലാത്തതിനാൽ താങ്കളുടെ തിരുത്തലുകൾ തിരസ്കരിക്കപ്പെട്ടിരിക്കുന്നു.",
+       "postedit-confirmation-created": "താൾ സൃഷ്ടിച്ചിരിക്കുന്നു.",
+       "postedit-confirmation-restored": "താൾ പുൻഃസ്ഥാപിച്ചിരിക്കുന്നു.",
        "postedit-confirmation-saved": "താങ്കളുടെ തിരുത്ത് സേവ് ചെയ്തിരിക്കുന്നു.",
        "edit-already-exists": "പുതിയ താൾ സൃഷ്ടിക്കാൻ കഴിഞ്ഞില്ല.\nതാൾ ഇപ്പോൾ തന്നെ നിലവിലുണ്ട്.",
        "defaultmessagetext": "സ്വതേയുള്ള സന്ദേശ എഴുത്ത്",
        "parser-template-recursion-depth-warning": "ഫലകത്തിന്റെ പുനരാവർത്തന ആഴത്തിന്റെ പരിധി കഴിഞ്ഞിരിക്കുന്നു ($1)",
        "language-converter-depth-warning": "ഭാഷ മാറ്റൽ ഉപകരണത്തിന്റെ ആഴത്തിന്റെ പരിധി കവിഞ്ഞിരിക്കുന്നു ($1)",
        "node-count-exceeded-category": "നോഡ്-എണ്ണം അധികരിച്ച താളുകൾ",
+       "node-count-exceeded-category-desc": "നോഡ്-എണ്ണം അധികരിച്ച താളുകൾക്കുള്ള വർഗ്ഗം.",
        "node-count-exceeded-warning": "താൾ നോഡ്-എണ്ണം അധികരിച്ചിരിക്കുന്നു",
        "expansion-depth-exceeded-category": "വികസന ആഴം അധികരിച്ച താളുകൾ",
+       "expansion-depth-exceeded-category-desc": "വികസന ആഴം അധികരിച്ച താളുകൾക്കുള്ള വർഗ്ഗം.",
        "expansion-depth-exceeded-warning": "താളിന്റെ വികസന ആഴം അധികരിച്ചിരിക്കുന്നു",
        "parser-unstrip-loop-warning": "അൺസ്ട്രിപ്പ് (Unstrip) പാഴ്സർ ഫങ്ഷനിൽ കുരുക്ക് കണ്ടെത്തി",
        "parser-unstrip-recursion-limit": "അൺസ്ട്രിപ്പ് (Unstrip) പാഴ്സർ ഫങ്ഷന്റെ പുനരാവർത്തന പരിധി അധികരിച്ചിരിക്കുന്നു ($1)",
        "currentrev": "ഇപ്പോഴുള്ള രൂപം",
        "currentrev-asof": "$1 -ൽ നിലവിലുള്ള രൂപം",
        "revisionasof": "$1-നു നിലവിലുണ്ടായിരുന്ന രൂപം",
-       "revision-info": "$1-നു ഉണ്ടായിരുന്ന രൂപം സൃഷ്ടിച്ചത്:- $2",
+       "revision-info": "$1-നു ഉണ്ടായിരുന്ന രൂപം സൃഷ്ടിച്ചത്:- {{GENDER:$6|$2}}$7",
        "previousrevision": "←പഴയ രൂപം",
        "nextrevision": "പുതിയ രൂപം→",
        "currentrevisionlink": "ഇപ്പോഴുള്ള രൂപം",
        "searchmenu-exists": "'''\"[[:$1]]\" എന്ന തലക്കെട്ടിൽ ഒരു താൾ ഈ വിക്കിയിൽ നിലവിലുണ്ട്'''",
        "searchmenu-new": "<strong>ഈ വിക്കിയിൽ \"[[:$1]]\" എന്ന താൾ സൃഷ്ടിക്കുക!</strong> {{PLURAL:$2|0=|ഒപ്പം താങ്കളുടെ തിരയലിനു ലഭിച്ച ഫലമായ ഈ താൾ കാണുക.|ഒപ്പം താങ്കളുടെ തിരയലിനു ലഭിച്ച ഫലങ്ങൾ കാണുക.}}",
        "searchprofile-articles": "ലേഖനങ്ങളിൽ",
-       "searchprofile-project": "സഹായം, പദ്ധതി താളുകളിൽ",
        "searchprofile-images": "പ്രമാണങ്ങളിൽ",
        "searchprofile-everything": "എല്ലാം",
        "searchprofile-advanced": "വിപുലമായ വിധം",
        "searchprofile-articles-tooltip": "$1 മേഖലയിൽ തിരയുക",
-       "searchprofile-project-tooltip": "$1 മേഖലകളിൽ തിരയുക",
        "searchprofile-images-tooltip": "പ്രമാണങ്ങൾക്ക് വേണ്ടി തിരയുക",
        "searchprofile-everything-tooltip": "എല്ലാ ഉള്ളടക്കവും തിരയുക (സംവാദത്താളുകൾ ഉൾപ്പെടെ)",
        "searchprofile-advanced-tooltip": "തിരഞ്ഞെടുത്ത നാമമേഖലകളിൽ തിരച്ചിൽ നടത്തുവാൻ",
        "search-interwiki-default": "$1 വിക്കിയിൽ നിന്നുള്ള ഫലങ്ങൾ:",
        "search-interwiki-more": "(കൂടുതൽ)",
        "search-relatedarticle": "ബന്ധപ്പെട്ടവ",
-       "searcheverything-enable": "എല്ലാ നാമമേഖലകളും തിരയുക",
        "searchrelated": "ബന്ധപ്പെട്ടവ",
        "searchall": "എല്ലാം",
        "showingresults": "'''$2''' മുതലുള്ള {{PLURAL:$1|'''ഒരു''' ഫലം|'''$1''' ഫലങ്ങൾ}} താഴെ പ്രദർശിപ്പിക്കുന്നു.",
        "powersearch-togglelabel": "അടയാളപ്പെടുത്തുക:",
        "powersearch-toggleall": "എല്ലാം",
        "powersearch-togglenone": "ഒന്നുംവേണ്ട",
+       "powersearch-remember": "ഭാവിയിലെ തിരച്ചിലുകൾക്കായി ഇപ്പോൾ തിരഞ്ഞെടുത്തവ ഓർത്തുവെയ്ക്കുക",
        "search-external": "ബാഹ്യ അന്വേഷണം",
        "searchdisabled": "{{SITENAME}} സം‌രംഭത്തിൽ തിരച്ചിൽ ദുർബലപ്പെടുത്തിയിരിക്കുന്നു. താങ്കൾക്ക് ഗൂഗിൾ ഉപയോഗിച്ച് തത്കാലം തിരച്ചിൽ നടത്താവുന്നതാണ്‌. പക്ഷെ ഗൂഗിളിൽ {{SITENAME}} സം‌രംഭത്തിന്റെ സൂചിക കാലഹരണപ്പെട്ടതായിരിക്കാൻ സാദ്ധ്യതയുണ്ട്.",
        "search-error": "തിരയുന്നതിനിടെ ഒരു പിഴവുണ്ടായി: $1",
        "allowemail": "എനിക്ക് എഴുത്തയക്കാൻ മറ്റുള്ളവരെ അനുവദിക്കുക",
        "prefs-searchoptions": "തിരച്ചിൽ",
        "prefs-namespaces": "നാമമേഖലകൾ",
-       "defaultns": "അല്ലെങ്കിൽ ഈ നാമമേഖലകളിൽ തിരയുക:",
        "default": "സ്വതേ",
        "prefs-files": "പ്രമാണങ്ങൾ",
        "prefs-custom-css": "സ്വന്തം സി.എസ്.എസ്.",
        "right-move": "താളുകൾ നീക്കുക",
        "right-move-subpages": "താളുകൾ അവയുടെ ഉപതാളുകളോടുകൂടീ നീക്കുക",
        "right-move-rootuserpages": "അടിസ്ഥാന ഉപയോക്തൃതാൾ മാറ്റുക",
+       "right-move-categorypages": "വർഗ്ഗ താളുകൾ മാറ്റുക",
        "right-movefile": "പ്രമാണങ്ങൾ നീക്കുക",
        "right-suppressredirect": "താളുകൾ മാറ്റുമ്പോൾ സ്രോതസ്സ് താളിൽ തിരിച്ചുവിടലുകൾ സൃഷ്ടിക്കാതിരിക്കുക",
        "right-upload": "പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുക",
        "action-createpage": "താളുകൾ നിർമ്മിക്കുക",
        "action-createtalk": "സംവാദ താളുകൾ നിർമ്മിക്കുക",
        "action-createaccount": "ഈ ഉപയോക്തൃനാമം സൃഷ്ടിക്കുക",
+       "action-history": "ഈ താളിന്റെ നാൾവഴി കാണുക",
        "action-minoredit": "ഈ തിരുത്തൽ ഒരു ചെറിയ തിരുത്തലായി അടയാളപ്പെടുത്തുക",
        "action-move": "ഈ താൾ മാറ്റുക",
        "action-move-subpages": "ഈ താളും ഇതിന്റെ ഉപതാളുകളും നീക്കുക",
        "action-move-rootuserpages": "ഉപയോക്താവിന്റെ അടിസ്ഥാന താൾ മാറ്റുക",
+       "action-move-categorypages": "വർഗ്ഗ താളുകൾ മാറ്റുക",
        "action-movefile": "ഈ പ്രമാണം നീക്കുക",
        "action-upload": "ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യുക",
        "action-reupload": "നിലവിലുള്ള പ്രമാണത്തിന്റെ ഉപരിയായി സ്ഥാപിക്കുക",
        "action-viewmyprivateinfo": "താങ്കളുടെ സ്വകാര്യവിവരങ്ങൾ കാണുക",
        "action-editmyprivateinfo": "താങ്കളുടെ സ്വകാര്യവിവരങ്ങൾ തിരുത്തുക",
        "nchanges": "{{PLURAL:$1|ഒരു മാറ്റം|$1 മാറ്റങ്ങൾ}}",
-       "enhancedrc-since-last-visit": "കഴിഞ്ഞ സന്ദർശനത്തിനു ശേഷം {{PLURAL:$1|ഒരെണ്ണം|$1 എണ്ണം}}.",
+       "enhancedrc-since-last-visit": "കഴിഞ്ഞ സന്ദർശനത്തിനു ശേഷം {{PLURAL:$1|ഒരെണ്ണം|$1 എണ്ണം}}",
        "enhancedrc-history": "നാൾവഴി",
        "recentchanges": "സമീപകാല മാറ്റങ്ങൾ",
        "recentchanges-legend": "സമീപകാല മാറ്റങ്ങളുടെ ക്രമീകരണം",
        "recentchanges-label-unpatrolled": "ഇതുവരെ റോന്തുചുറ്റപ്പെടാത്ത തിരുത്ത്",
        "recentchanges-label-plusminus": "താളിന്റെ വലിപ്പം ഇത്രയും ബൈറ്റുകൾ മാറിയിരിക്കുന്നു",
        "recentchanges-legend-heading": "'''സൂചന:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|പുതിയ താളുകളുടെ പട്ടികയും]] കാണുക)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|പുതിയ താളുകളുടെ പട്ടികയും]] കാണുക)",
        "rcnotefrom": "<strong>$2</strong> മുതലുള്ള മാറ്റങ്ങൾ (<strong>$1</strong> എണ്ണം വരെ കാണാം).",
        "rclistfrom": "$3 $2 മുതലുള്ള മാറ്റങ്ങൾ പ്രദർശിപ്പിക്കുക",
        "rcshowhideminor": "ചെറുതിരുത്തലുകൾ $1",
        "largefileserver": "സെർവറിൽ ചിട്ടപ്പെടുത്തിയതുപ്രകാരം ഈ പ്രമാണത്തിന്റെ വലിപ്പം അനുവദനീയമായതിലും കൂടുതലാണ്‌.",
        "emptyfile": "താങ്കൾ അപ്‌ലോഡ് ചെയ്ത പ്രമാണം ശൂന്യമാണെന്നു കാണുന്നു.\nപ്രമാണത്തിന്റെ പേരിലുള്ള അക്ഷരത്തെറ്റായിരിക്കാം ഇതിനു കാരണം.\nഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യണോ എന്നൊരിക്കൽ കൂടി പരിശോധിക്കുക.",
        "windows-nonascii-filename": "പ്രത്യേകാക്ഷരങ്ങളുള്ള പ്രമാണനാമങ്ങൾ ഈ വിക്കി പിന്തുണയ്ക്കുന്നില്ല.",
-       "fileexists": "ഇതേ പേരിൽ വേറെ ഒരു പ്രമാണം നിലവിലുണ്ട്.\nദയവായി <strong>[[:$1]]</strong> പരിശോധിച്ച് പ്രസ്തുത പ്രമാണം മാറ്റണമോ എന്നു തീരുമാനിക്കുക.\n[[$1|thumb]]",
+       "fileexists": "ഇതേ പേരിൽ വേറെ ഒരു പ്രമാണം നിലവിലുണ്ട്.\nദയവായി <strong>[[:$1]]</strong> പരിശോധിച്ച് പ്രസ്തുത പ്രമാണം {{GENDER:|മാറ്റണമോ}} എന്നു തീരുമാനിക്കുക.\n[[$1|thumb]]",
        "filepageexists": "ഈ പ്രമാണത്തിനുള്ള വിവരണതാൾ <strong>[[:$1]]</strong> എന്നു സൃഷ്ടിക്കപ്പെട്ടിട്ടുണ്ട്, പക്ഷേ ഇതേ പേരിൽ പ്രമാണം ഒന്നും നിലവിലില്ല.\nവിവരണതാളിൽ താങ്കൾ ഇവിടെ ചേർക്കുന്ന ലഘുകുറിപ്പ് പ്രത്യക്ഷപ്പെടുന്നതല്ല.\nഅവിടെ ലഘുകുറിപ്പ് വരാൻ ആ താൾ താങ്കൾ സ്വയം തിരുത്തേണ്ടതാണ്.\n[[$1|ലഘുചിത്രം]]",
        "fileexists-extension": "ഇതേ പേരിൽ മറ്റൊരു പ്രമാണം നിലവിലുണ്ട്: [[$2|ലഘുചിത്രം]]\n* ഇപ്പോൾ അപ്‌ലോഡ് ചെയ്ത പ്രമാണത്തിന്റെ പേര്‌: <strong>[[:$1]]</strong>\n* നിലവിലുള്ള പ്രമാണത്തിന്റെ പേര്‌: <strong>[[:$2]]</strong>\nമറ്റൊരു പേരു തിരഞ്ഞെടുക്കുക.",
        "fileexists-thumbnail-yes": "ഈ ചിത്രം വലിപ്പം കുറച്ച ഒന്നാണെന്നു ''(ലഘുചിത്രം)'' കാണുന്നു.\n[[$1|ലഘുചിത്രം]]\nദയവായി <strong>[[:$1]]</strong> എന്ന ചിത്രം പരിശോധിക്കുക.\n[[:$1]] എന്ന ചിത്രവും ഈ ചിത്രവും ഒന്നാണെങ്കിൽ ലഘുചിത്രത്തിനു വേണ്ടി മാത്രമായി ചിത്രം അപ്‌ലോഡ് ചെയ്യേണ്ടതില്ല.",
        "pageswithprop-submit": "പോകൂ",
        "doubleredirects": "ഇരട്ട തിരിച്ചുവിടലുകൾ",
        "doubleredirectstext": "ഈ താളിൽ ഒരു തിരിച്ചുവിടലിൽ നിന്നും മറ്റു തിരിച്ചുവിടൽ താളുകളിലേയ്ക്ക് പോകുന്ന താളുകൾ കൊടുത്തിരിക്കുന്നു. ഓരോ വരിയിലും ഒന്നാമത്തേയും രണ്ടാമത്തേയും തിരിച്ചുവിടൽ താളിലേക്കുള്ള കണ്ണികളും, രണ്ടാമത്തെ തിരിച്ചുവിടൽ താളിൽ നിന്നു ശരിയായ ലക്ഷ്യതാളിലേക്കുള്ള കണ്ണികളും ഉൾക്കൊള്ളുന്നു.\n<del>വെട്ടിക്കൊടുത്തിരിക്കുന്നവ</del> ശരിയാക്കിയവയാണ്.",
-       "double-redirect-fixed-move": "[[$1]] മാറ്റിയിരിക്കുന്നു.\nഇത് ഇപ്പോൾ [[$2]] എന്നതിലേയ്ക്ക് തിരിച്ചുവിടപ്പെട്ടിരിക്കുന്നു.",
-       "double-redirect-fixed-maintenance": "[[$1]] എന്ന താളിൽ നിന്ന് [[$2]] എന്ന താളിലേയ്ക്കുള്ള ഇരട്ട തിരിച്ചുവിടൽ ശരിയാക്കുന്നു.",
+       "double-redirect-fixed-move": "[[$1]] മാറ്റിയിരിക്കുന്നു.\nഇത് ഇപ്പോൾ സ്വയം പുതുക്കപ്പെട്ട് [[$2]] എന്നതിലേയ്ക്ക് തിരിച്ചുവിടപ്പെട്ടിരിക്കുന്നു.",
+       "double-redirect-fixed-maintenance": "[[$1]] à´\8eà´¨àµ\8dà´¨ à´¤à´¾à´³à´¿àµ½ à´¨à´¿à´¨àµ\8dà´¨àµ\8d [[$2]] à´\8eà´¨àµ\8dà´¨ à´¤à´¾à´³à´¿à´²àµ\87à´¯àµ\8dà´\95àµ\8dà´\95àµ\81à´³àµ\8dà´³ à´\87à´°à´\9fàµ\8dà´\9f à´¤à´¿à´°à´¿à´\9aàµ\8dà´\9aàµ\81വിà´\9fൽ à´ªà´°à´¿à´ªà´¾à´²à´¨à´\9càµ\8bലിà´\95ൾà´\95àµ\8dà´\95à´¿à´\9fàµ\86 à´¸àµ\8dവയà´\82 à´¶à´°à´¿à´¯à´¾à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81.",
        "double-redirect-fixer": "തിരിച്ചുവിടൽ ശരിയാക്കിയത്",
        "brokenredirects": "മുറിഞ്ഞ തിരിച്ചുവിടലുകൾ",
        "brokenredirectstext": "താഴെക്കാണുന്ന തിരിച്ചുവിടലുകൾ നിലവിലില്ലാത്ത താളുകളിലേയ്ക്കാണ്‌:",
        "wantedtemplates": "അവശ്യ ഫലകങ്ങൾ",
        "mostlinked": "ഏറ്റവുമധികം കണ്ണികളാൽ ചേർത്തിരിക്കുന്ന താളുകൾ",
        "mostlinkedcategories": "ഏറ്റവുമധികം താളുകൾ ചേർത്തിട്ടുള്ള വർഗ്ഗങ്ങൾ",
-       "mostlinkedtemplates": "à´\8fà´±àµ\8dറവàµ\81മധിà´\95à´\82 à´\95à´£àµ\8dണി à´\9aàµ\87ർതàµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´«à´²à´\95à´\99àµ\8dà´\99ൾ",
+       "mostlinkedtemplates": "à´\8fà´±àµ\8dറവàµ\81മധിà´\95à´\82 à´\89ൾപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95ൾ",
        "mostcategories": "ഏറ്റവുമധികം വർഗ്ഗങ്ങൾ ഉൾപ്പെടുത്തിയിരിക്കുന്ന താളുകൾ",
        "mostimages": "ഏറ്റവുമധികം കണ്ണി ചേർത്തിരിക്കുന്ന പ്രമാണങ്ങൾ",
        "mostinterwikis": "ഏറ്റവുമധികം അന്തർവിക്കികളുള്ള താളുകൾ",
        "watchnologin": "ലോഗിൻ ചെയ്തിട്ടില്ല",
        "addwatch": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിലേക്കു ചേർക്കുക",
        "addedwatchtext": "താങ്കൾ [[Special:Watchlist|ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിലേക്ക്]] \"[[:$1]]\" എന്ന ഈ താൾ ചേർത്തിരിക്കുന്നു. ഇനി മുതൽ ഈ താളിലും ബന്ധപ്പെട്ട സം‌വാദം താളിലും ഉണ്ടാകുന്ന മാറ്റങ്ങൾ ആ പട്ടികയിൽ ദൃശ്യമാവും.",
+       "addedwatchtext-short": "\"$1\" എന്ന താൾ താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടികയിലേക്ക് ചേർത്തു.",
        "removewatch": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ നിന്നും ഒഴിവാക്കുക",
        "removedwatchtext": "താങ്കൾ [[Special:Watchlist|ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ]] നിന്നും \"[[:$1]]\" എന്ന താൾ നീക്കം ചെയ്തിരിക്കുന്നു.",
+       "removedwatchtext-short": "\"$1\" എന്ന താൾ താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടികയിൽ നിന്ന് നീക്കി.",
        "watch": "മാറ്റങ്ങൾ ശ്രദ്ധിക്കുക",
        "watchthispage": "ഈ താൾ ശ്രദ്ധിക്കുക",
        "unwatch": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ നിന്നു മാറ്റുക",
        "movepagetalktext": "'''ബന്ധപ്പെട്ട സം‌വാദത്താൾ സ്വയം മാറ്റപ്പെടാതിരിക്കാനുള്ള കാരണങ്ങൾ'''\n*അതേ പേരിൽ തന്നെ ശൂന്യമല്ലാത്ത ഒരു സം‌വാദത്താൾ നിലവിലുണ്ടെങ്കിൽ\n*താങ്കൾ താഴെയുള്ള ചെൿബോക്സ് ഉപയോഗിച്ചിട്ടില്ലെങ്കിൽ\n\nഅത്തരം സന്ദർഭങ്ങളിൽ സം‌വാദത്താളുകൾ താങ്കൾ സ്വയം കൂട്ടിച്ചേർക്കേണ്ടതാണ്.",
        "movearticle": "മാറ്റേണ്ട താൾ",
        "moveuserpage-warning": "'''മുന്നറിയിപ്പ്:''' ഉപയോക്താവിനുള്ള താളാണ് താങ്കൾ മാറ്റാൻ പോകുന്നത്. താൾ മാത്രമേ മാറുകയുള്ളു എന്നും ഉപയോക്താവിന്റെ പേര് ''മാറുകയില്ലെന്നും'' ദയവായി ഓർക്കുക.",
+       "movecategorypage-warning": "<strong>മുന്നറിയിപ്പ്:</strong> താങ്കൾ ഒരു വർഗ്ഗതാൾ മാറ്റാൻ പോവുകയാണ്. ഈ താൾ മാത്രമേ മാറുകയുള്ളുവെന്നും പഴയ വർഗ്ഗത്തിൽ ഉണ്ടായിരുന്ന താളുകളൊന്നും പുനർവർഗ്ഗീകരണം ചെയ്യാത്ത പക്ഷം പുതിയതിലേക്ക് <em>മാറില്ലെന്നും</em> ഓർക്കുക.",
        "movenologintext": "തലക്കെട്ടു മാറ്റാനുള്ള അനുമതി കൈവരിക്കാൻ താങ്കൾ ഒരു രജിസ്റ്റേർഡ് ഉപയോക്താവായിരിക്കുകയും [[Special:UserLogin|ലോഗിൻ ചെയ്തിരിക്കുകയും]] ചെയ്യേണ്ടത് അത്യന്താപേക്ഷിതമാണ്‌.",
        "movenotallowed": "താളുകളുടെ തലക്കെട്ടു മാറ്റുവാനുള്ള അനുവാദം താങ്കൾക്കില്ല.",
        "movenotallowedfile": "പ്രമാണങ്ങൾ മാറ്റാനുള്ള അനുമതി താങ്കൾക്കില്ല.",
        "cant-move-user-page": "ഉപയോക്താവിനുള്ള താളുകളുടെ തലക്കെട്ട് മാറ്റാനുള്ള അനുമതി താങ്കൾക്കില്ല (ഉപതാളുകൾ ഉൾപ്പെടുന്നില്ല).",
        "cant-move-to-user-page": "ഉപയോക്താവിനുള്ള താളിന്റെ തലക്കെട്ടു മാറ്റാനുള്ള അനുമതി താങ്കൾക്കില്ല (ഉപയോക്താവിനുള്ള ഉപതാളുകൾ ഒഴിച്ച്).",
+       "cant-move-category-page": "വർഗ്ഗ താളുകൾ മാറ്റാനുള്ള അനുവാദം താങ്കൾക്കില്ല.",
+       "cant-move-to-category-page": "ഒരു താൾ വർഗ്ഗ താളാക്കി മാറ്റാനുള്ള അനുവാദം താങ്കൾക്കില്ല.",
        "newtitle": "പുതിയ തലക്കെട്ട്:",
        "move-watch": "ഈ താളിലെ മാറ്റങ്ങൾ ശ്രദ്ധിക്കുക",
        "movepagebtn": "താൾ മാറ്റുക",
        "tooltip-summary": "ചെറിയൊരു ചുരുക്കം ചേർക്കുക",
        "common.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. എല്ലാ ദൃശ്യരൂപങ്ങൾക്കും ബാധകമായിരിക്കും */",
        "monobook.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. മോണോബുക്ക് ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */",
-       "modern.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. നവീനം ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */",
        "vector.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. വെക്റ്റർ ദൃശ്യരൂപത്തിനു ബാധകമായിരിക്കും*/",
        "noscript.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്., ജാവാസ്ക്രിപ്റ്റ് സജ്ജമാക്കിയിട്ടില്ലാത്ത ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും */",
        "group-autoconfirmed.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. യാന്ത്രികമായി സ്ഥിരീകരിച്ച ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും */",
        "group-bureaucrat.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. ബ്യൂറോക്രാറ്റുകൾക്ക് ബാധകമായിരിക്കും */",
        "common.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് എല്ലാ ഉപയോക്താക്കൾക്കും, എല്ലാ താളുകളിലും പ്രവർത്തിക്കുന്നതായിരിക്കും */",
        "monobook.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് മോണോബുക്ക് ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */",
-       "modern.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് നവീനം ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */",
        "vector.js": "/*ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് വെക്റ്റർ ദൃശ്യരൂപം ഉപയോഗിക്കുന്ന ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും*/",
        "group-autoconfirmed.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് യാന്ത്രികമായി സ്ഥിരീകരിക്കപ്പെട്ട ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും */",
        "group-bot.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് ബോട്ടുകൾക്ക് ബാധകമായിരിക്കും */",
        "pageinfo-category-pages": "താളുകളുടെ എണ്ണം",
        "pageinfo-category-subcats": "ഉപവർഗ്ഗങ്ങളുടെ എണ്ണം",
        "pageinfo-category-files": "പ്രമാണങ്ങളുടെ എണ്ണം",
-       "skinname-cologneblue": "ക്ലോൺ നീല",
        "skinname-monobook": "മോണോബുക്ക്",
-       "skinname-modern": "നവീനം",
        "skinname-vector": "വെക്റ്റർ",
        "markaspatrolleddiff": "റോന്തുചുറ്റിയതായി അടയാളപ്പെടുത്തുക",
        "markaspatrolledtext": "ഈ താളിൽ റോന്തുചുറ്റിയതായി രേഖപ്പെടുത്തുക",
        "newimages-summary": "ചുരുക്കം",
        "newimages-legend": "അരിപ്പ",
        "newimages-label": "പ്രമാണത്തിന്റെ പേര്‌ (അഥവാ പേരിന്റെ ഭാഗം)",
+       "newimages-showbots": "യന്ത്രങ്ങൾ ചെയ്ത അപ്‌ലോഡുകൾ പ്രദർശിപ്പിക്കുക",
        "noimages": "ഒന്നും കാണാനില്ല.",
        "ilsubmit": "തിരയൂ",
        "bydate": "ദിനക്രമത്തിൽ",
        "watchlistedit-raw-done": "താങ്കളുടെ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക പുതുക്കിയിരിക്കുന്നു.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 താൾ|$1 താളുകൾ}} പട്ടികയിലേക്കു ചേർത്തിരിക്കുന്നു:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 താൾ|$1 താളുകൾ}} പട്ടികയിൽ നിന്നു മാറ്റിയിരിക്കുന്നു:",
+       "watchlistedit-clear-title": "ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക ശൂന്യമാക്കുക",
+       "watchlistedit-clear-legend": "ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക ശൂന്യമാക്കുക",
+       "watchlistedit-clear-explain": "താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടികയിലെ എല്ലാ തലക്കെട്ടുകളും ഒഴിവാക്കിയിരിക്കുന്നു",
+       "watchlistedit-clear-titles": "തലക്കെട്ടുകൾ:",
+       "watchlistedit-clear-submit": "ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക ശൂന്യമാക്കുക (ഇത് സ്ഥിരമായിരിക്കും!)",
+       "watchlistedit-clear-done": "താങ്കളുടെ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക ശൂന്യമാക്കിയിരിക്കുന്നു.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|ഒരു തലക്കെട്ട്|$1 തലക്കെട്ടുകൾ}} ഒഴിവാക്കി:",
+       "watchlistedit-too-many": "പ്രദർശിപ്പിക്കാൻ വളരെയധികം താളുകൾ ഉണ്ട്.",
+       "watchlisttools-clear": "ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക ശൂന്യമാക്കുക",
        "watchlisttools-view": "ബന്ധപ്പെട്ട മാറ്റങ്ങൾ പ്രദർശിപ്പിക്കുക",
        "watchlisttools-edit": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക കാണുക, തിരുത്തുക",
        "watchlisttools-raw": "താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയുടെ മൂലരൂപം തിരുത്തുക",
        "htmlform-no": "ഇല്ല",
        "htmlform-yes": "ശരി",
        "htmlform-chosen-placeholder": "ഒരു ഐച്ഛികം തിരഞ്ഞെടുക്കുക",
+       "htmlform-cloner-create": "കൂടുതൽ ചേർക്കുക",
+       "htmlform-cloner-delete": "നീക്കം ചെയ്യുക",
+       "htmlform-cloner-required": "കുറഞ്ഞത് ഒരു വിലയെങ്കിലും നൽകിയിരിക്കണം.",
        "sqlite-has-fts": "പൂർണ്ണ-എഴുത്ത് തിരച്ചിൽ പിന്തുണയുള്ള $1",
        "sqlite-no-fts": "പൂർണ്ണ-എഴുത്ത് തിരച്ചിൽ പിന്തുണയില്ലാത്ത $1",
        "logentry-delete-delete": "$3 എന്ന താൾ $1 {{GENDER:$2|മായ്ച്ചിരിക്കുന്നു}}",
index a184e82..83c1024 100644 (file)
        "searchmenu-exists": "'''Энэ викид \"[[:$1]]\" гэсэн хуудас байна'''",
        "searchmenu-new": "<strong> Энэ викид \"[[:$1]]\" хуудсыг үүсгэх!</strong> {{PLURAL:$2|0=|Мөн хайлтаар олдсон хуудсаа харна.|Мөн хайлтаар олдсон хуудсаа харна.}}",
        "searchprofile-articles": "Агуулгын хуудсууд",
-       "searchprofile-project": "Тусламжийн болон төслийн хуудсууд",
        "searchprofile-images": "Мультмедиа",
        "searchprofile-everything": "Бүгдийг",
        "searchprofile-advanced": "Шилж хайх",
        "searchprofile-articles-tooltip": "$1 дотор хайх",
-       "searchprofile-project-tooltip": "$1 дотор хайх",
        "searchprofile-images-tooltip": "Файлуудаас хайх",
        "searchprofile-everything-tooltip": "Бүх агуулгаас хайх (үүнд ярианы хуудсуудыг оролцуулах)",
        "searchprofile-advanced-tooltip": "Сонгосон нэрний зайнуудаас хайх",
        "search-interwiki-default": "$1 үр дүн:",
        "search-interwiki-more": "(илүү их)",
        "search-relatedarticle": "Холбоотой",
-       "searcheverything-enable": "Бүх нэрний зайнуудад хайх",
        "searchrelated": "холбоотой",
        "searchall": "бүгдийг",
        "showingresults": "Доор #'''$2'''-с эхлэсэн '''$1''' илэрцийг үзүүлж байна.",
        "allowemail": "Бусад хэрэглэгчдээс ирэх мэйлийг зөвшөөрөх",
        "prefs-searchoptions": "Хайлт",
        "prefs-namespaces": "Нэрний зайнууд",
-       "defaultns": "Үгүй бол эдгээр нэрний зайнуудад хайх:",
        "default": "анхны байдал",
        "prefs-files": "Файлууд",
        "prefs-custom-css": "Өөрийн сонгосон CSS",
        "prefs-emailconfirm-label": "Мэйлийн баталгаажуулалт:",
        "youremail": "Мэйл хаяг:",
        "username": "{{GENDER:$1|Хэрэглэгчийн нэр}}:",
-       "uid": "{{GENDER:$1|Хэрэглэгчийн}} ID:",
        "prefs-memberingroups": "{{PLURAL:$1|грүпийн|грүпийн}} {{GENDER:$2|гишүүн}} :",
        "prefs-registration": "Бүртгүүлсэн цаг:",
        "yourrealname": "Жинхэнэ нэр:",
        "recentchanges-label-newpage": "Шинэ хуудас үүссэн байна",
        "recentchanges-label-minor": "Бага зэргийн засвар",
        "recentchanges-label-bot": "Робот гүйцэтгэсэн засвар",
-       "recentchanges-label-unpatrolled": "ЭнÑ\8d Ð·Ð°Ñ\81ваÑ\80Ñ\8bг Ð¾Ð´Ð¾Ð¾Ð³Ð¸Ð¹Ð½ Ð±Ð°Ð¹Ð´Ð»Ð°Ð°Ñ\80 Ð¼Ð°Ð½Ð°Ð°Ð³Ò¯Ð¹ Ð±Ð°Ð¹Ð½Ð°",
+       "recentchanges-label-unpatrolled": "ЭнÑ\8d Ð·Ð°Ñ\81ваÑ\80Ñ\8bг Ð¼Ð°Ð½Ð°Ð¶ Ð°Ð¼Ð¶Ð°Ð°Ð³Ò¯Ð¹",
        "recentchanges-label-plusminus": "Өөрчлөгдсөн байт хэмжээ",
        "recentchanges-legend-heading": "'''Таних үсэг:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|жагсааж харах]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|жагсааж харах]])",
        "rcnotefrom": "Доорх нь '''$2'''-с хойших өөрчлөлтүүд ('''$1''' хүртэлхийг харуулав) юм.",
        "rclistfrom": "$3 $2-с хойших шинэ засваруудыг үзүүлэх",
        "rcshowhideminor": "Бага зэргийн засваруудыг $1",
        "log-title-wildcard": "Энэ текстээр эхлэсэн гарчигуудыг хайх",
        "showhideselectedlogentries": "Сонгосон логуудыг харагдуулах/нуух",
        "allpages": "Бүх хуудас",
-       "alphaindexline": "$1-с $2 хүртэл",
        "nextpage": "Дараагийн хуудас ($1)",
        "prevpage": "Өмнөх хуудас ($1)",
        "allpagesfrom": "Хамгийн эхэлж харуулах хуудас:",
index 418cbb6..745e48e 100644 (file)
        "vector-view-view": "वाचा",
        "vector-view-viewsource": "स्रोत पहा",
        "actions": "क्रिया",
+       "vector-more-actions": "अधिक",
        "namespaces": "नामविश्वे",
        "variants": "अस्थिरके",
        "navigation-heading": "दिक्चालन यादी",
        "searchmenu-exists": "'''या विकिवर \"[[:$1]]\" या नावाचे पान आहे.'''",
        "searchmenu-new": "<strong>या विकिवर \"[[:$1]]\" हे पान तयार करा!</strong> {{PLURAL:$2|0=|See also the page found with your search.|सापडलेले शोध निकालही पहा.}}",
        "searchprofile-articles": "आशय-पाने",
-       "searchprofile-project": "साहाय्य व प्रकल्प पाने",
        "searchprofile-images": "बहुमाध्यमे",
        "searchprofile-everything": "सगळे",
        "searchprofile-advanced": "प्रगत",
        "searchprofile-articles-tooltip": "$1 मध्ये शोधा",
-       "searchprofile-project-tooltip": "$1मध्ये शोधा",
        "searchprofile-images-tooltip": "संचिकांसाठी शोधा",
        "searchprofile-everything-tooltip": "सर्व पाने शोधा (चर्चापानांसहित)",
        "searchprofile-advanced-tooltip": "निवडलेल्या नामविश्वांमध्ये शोधा:",
        "search-interwiki-default": "$1चे निकाल:",
        "search-interwiki-more": "(आणखी)",
        "search-relatedarticle": "जवळील",
-       "searcheverything-enable": "सर्वनामविश्वांमध्ये शोधा:",
        "searchrelated": "संबंधित",
        "searchall": "सर्व",
        "showingresults": "#'''$2'''पासून {{PLURAL:$1|'''1'''पर्यंतचा निकाल|'''$1'''पर्यंतचे निकाल}} खाली दाखवले आहे.",
        "allowemail": "इतर सदस्यांकडून माझ्या ई-मेल पत्त्यावर ई-मेल येण्यास मुभा द्या",
        "prefs-searchoptions": "शोधा",
        "prefs-namespaces": "नामविश्वे",
-       "defaultns": "या नामविश्वातील अविचल शोध :",
        "default": "अविचल",
        "prefs-files": "संचिका",
        "prefs-custom-css": "सीएसएस पद्धत बदला",
        "prefs-emailconfirm-label": "विपत्र निश्चितीकरण:",
        "youremail": "विपत्र:",
        "username": "{{GENDER:$1|सदस्यनाम}}:",
-       "uid": "{{GENDER:$1|सदस्य}}खाते:",
        "prefs-memberingroups": "{{PLURAL:$1|गटातील|गटांतील}}{{GENDER:$2|सदस्य}} :",
        "prefs-registration": "नोंदणीची वेळ:",
        "yourrealname": "खरे नाव:",
        "recentchanges-label-unpatrolled": "हे संपादन अजून तपासल्या गेले नाही",
        "recentchanges-label-plusminus": "या पानाचा आकार इतक्या बाइट्स ने बदलला",
        "recentchanges-legend-heading": "'''विवरण:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|नविन पानांची यादी]] हेही पाहा)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नविन पानांची यादी]] हेही पाहा)",
        "recentchanges-legend-plusminus": "(''±१२३'')",
        "rcnotefrom": "खाली <b>$2</b> पासूनचे ('''$1''' पर्यंत) बदल दाखविले आहेत.",
        "rclistfrom": "$3 $2 नंतर केले गेलेले बदल दाखवा.",
        "log-title-wildcard": "या मजकुरापासून सुरू होणारी शीर्षके शोधा.",
        "showhideselectedlogentries": "निवडलेले लॉग पहाणे /लपवणे",
        "allpages": "सर्व पृष्ठे",
-       "alphaindexline": "$1 पासून $2 पर्यंत",
        "nextpage": "पुढील पान ($1)",
        "prevpage": "मागील पान ($1)",
        "allpagesfrom": "पुढील शब्दाने सुरू होणारे लेख दाखवा:",
        "pageinfo-category-pages": "पानांची संख्या",
        "pageinfo-category-subcats": "उपवर्गांची संख्या",
        "pageinfo-category-files": "संचिकांची संख्या",
-       "skinname-cologneblue": "सुरेखनीळी",
        "skinname-monobook": "मोनोबुक",
-       "skinname-modern": "आधुनिक",
        "skinname-vector": "सदिश",
        "markaspatrolleddiff": "टेहळणी केल्याची खूण करा",
        "markaspatrolledtext": "या पानावर गस्त झाल्याची खूण करा",
index de5046f..35e9b13 100644 (file)
        "moredotdotdot": "Lagi...",
        "morenotlisted": "Senarai ini tidak lengkap.",
        "mypage": "Halaman",
-       "mytalk": "Perbualan",
-       "anontalk": "Perbualan bagi IP ini",
+       "mytalk": "Perbincangan",
+       "anontalk": "Perbincangan bagi IP ini",
        "navigation": "Pandu arah",
        "and": "&#32;dan",
        "qbfind": "Cari",
        "cannotchangeemail": "Alamat e-mel akaun tidak boleh diubah di wiki ini.",
        "emaildisabled": "Tapak ini tidak boleh menghantar e-mel.",
        "accountcreated": "Akaun dibuka",
-       "accountcreatedtext": "Akaun pengguna [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|bual]]) telah dibuka.",
+       "accountcreatedtext": "Akaun pengguna untuk [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|bincang]]) telah dibuka.",
        "createaccount-title": "Pembukaan akaun {{SITENAME}}",
        "createaccount-text": "Seseorang telah membuka akaun untuk\nalamat e-mel anda di {{SITENAME}} ($4) dengan nama \"$2\" dan kata laluan \"$3\".\nAnda boleh log masuk dan tukar kata laluan anda sekarang.\n\nSila abaikan mesej ini jika anda tidak meminta untuk membuka akaun tersebut.",
        "login-throttled": "Anda telah mencuba log masuk berulang kali.\nSila tunggu $1 dan cuba lagi.",
        "searchmenu-exists": "* Laman '''[[$1]]'''",
        "searchmenu-new": "<strong>Cipta laman \"[[:$1]]\" di wiki ini!</strong>\n{{PLURAL:$2|0=|Lihat juga halaman yang ditemui dalam pencarian anda.|Lihat juga hasil pencarian yang ditemui.}}",
        "searchprofile-articles": "Laman kandungan",
-       "searchprofile-project": "Laman bantuan dan projek",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Semua",
        "searchprofile-advanced": "Maju",
        "searchprofile-articles-tooltip": "Cari dalam $1",
-       "searchprofile-project-tooltip": "Cari dalam $1",
        "searchprofile-images-tooltip": "Cari fail",
        "searchprofile-everything-tooltip": "Cari semua kandungan (termasuk laman perbincangan)",
        "searchprofile-advanced-tooltip": "Cari dalam ruang nama yang tersuai",
        "search-interwiki-default": "Hasil dari $1:",
        "search-interwiki-more": "(lagi)",
        "search-relatedarticle": "Berkaitan",
-       "searcheverything-enable": "Cari dalam semua ruang nama",
        "searchrelated": "berkaitan",
        "searchall": "semua",
        "showingresults": "Yang berikut ialah '''$1''' hasil bermula daripada yang {{PLURAL:$2|pertama|ke-'''$2'''}}.",
        "allowemail": "Benarkan e-mel daripada pengguna lain",
        "prefs-searchoptions": "Cari",
        "prefs-namespaces": "Ruang nama",
-       "defaultns": "Jika tidak cari dalam ruang nama ini:",
        "default": "asali",
        "prefs-files": "Fail",
        "prefs-custom-css": "CSS tempahan",
        "email": "E-mel",
        "prefs-help-realname": "Nama sebenar adalah tidak wajib. Jika dinyatakan, ia akan digunakan untuk mengiktiraf karya anda.",
        "prefs-help-email": "Alamat e-mail adalah tidak wajib, tapi diperlukan untuk set semula kata laluan jika anda terlupa kata laluan anda.",
-       "prefs-help-email-others": "Anda juga boleh memilih untuk membiarkan pengguna lain menghubungi anda menerusi laman perbualan anda tanpa perlu mendedahkan identiti anda.",
+       "prefs-help-email-others": "Anda juga boleh memilih untuk membolehkan pengguna lain menghubungi anda melalui e-mel melalui sebuah pautan pada laman pengguna atau perbincangan anda.\nAlamat e-mel anda tidak didedahkan apabila pengguna lain menghubungi anda.",
        "prefs-help-email-required": "Alamat e-mel adalah wajib.",
        "prefs-info": "Maklumat asas",
        "prefs-i18n": "Pengantarabangsaan",
        "recentchanges-label-unpatrolled": "Suntingan ini belum dirondai",
        "recentchanges-label-plusminus": "Saiz laman telah berubah sebanyak jumlah bait ini",
        "recentchanges-legend-heading": "'''Petunjuk:'''",
-       "recentchanges-legend-newpage": "(lihat juga [[Special:NewPages|senarai laman baru]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lihat juga [[Special:NewPages|senarai laman baru]])",
        "rcnotefrom": "Yang berikut adalah semua suntingan sejak <b>$2</b> (yang dipaparkan sehingga <b>$1</b>).",
        "rclistfrom": "Paparkan perubahan sejak $3 $2",
        "rcshowhideminor": "$1 suntingan kecil",
        "rollbacklinkcount-morethan": "mengundurkan lebih daripada $1 {{PLURAL:$1|suntingan}}",
        "rollbackfailed": "Pengunduran gagal",
        "cantrollback": "Suntingan tersebut tidak dapat dibalikkan: penyumbang terakhir adalah satu-satunya pengarang bagi rencana ini.",
-       "alreadyrolled": "Suntingan terakhir bagi [[:$1]] oleh [[User:$2|$2]] ([[User talk:$2|Perbualan]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tidak dapat dibalikkan; terdapat pengguna lain yang telah menyunting atau membalikkan laman itu.\n\nSuntingan terakhir telah dibuat oleh [[User:$3|$3]] ([[User talk:$3|Perbualan]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "alreadyrolled": "Suntingan terakhir bagi [[:$1]] oleh [[Pengguna:$2|$2]] ([[Perbincangan pengguna:$2|bincang]]{{int:pipe-separator}}[[Khas:Sumbangan/$2|{{int:contribslink}}]]) tidak dapat dibalikkan; seorang pengguna lain sudahpun menyunting atau membalikkan laman itu.\n\nSuntingan terakhir kepada laman ini telah dibuat oleh [[Pengguna:$3|$3]] ([[Perbincangan pengguna:$3|bincang]]{{int:pipe-separator}}[[Khas:Sumbangan/$3|{{int:contribslink}}]]).",
        "editcomment": "Ringkasan sutingan: \"''$1''\".",
        "revertpage": "Membalikkan suntingan oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|Perbincangan]]) kepada versi terakhir oleh [[User:$1|$1]]",
        "revertpage-nouser": "Membalikkan suntingan oleh seorang pengguna tersorok kepada semakan terakhir oleh {{GENDER:$1|[[User:$1|$1]]}}",
        "javascripttest-pagetext-unknownframework": "Kerangka \"$1\" tidak dikenali.",
        "javascripttest-pagetext-frameworks": "Sila pilih salah satu kerangka yang berikut: $1",
        "javascripttest-pagetext-skins": "Sila pilih satu kulit untuk menjalankan ujian:",
-       "javascripttest-qunit-intro": "Rujuk [$1 dokumentasi ujian] di mediawiki.org.",
+       "javascripttest-qunit-intro": "Lihat [$1 pendokumenan ujian] di mediawiki.org.",
        "javascripttest-qunit-heading": "Suit ujian MediaWiki JavaScript QUnit",
        "tooltip-pt-userpage": "Laman pengguna anda",
        "tooltip-pt-anonuserpage": "Laman pengguna bagi alamat IP anda",
-       "tooltip-pt-mytalk": "Laman perbualan anda",
+       "tooltip-pt-mytalk": "Laman perbincangan anda",
        "tooltip-pt-anontalk": "Perbincangan mengenai penyuntingan daripada alamat IP anda",
        "tooltip-pt-preferences": "Keutamaan saya",
        "tooltip-pt-watchlist": "Senarai laman yang anda pantau",
        "tooltip-preferences-save": "Simpan keutamaan",
        "tooltip-summary": "Berikan ringkasan",
        "common.css": "/* CSS yang terletak di sini akan digunakan pada semua kulit */",
-       "cologneblue.css": "/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Cologne Blue */",
        "monobook.css": "/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Monobook */",
-       "modern.css": "/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Moden */",
        "vector.css": "/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Vector */",
        "anonymous": "{{PLURAL:$1|Pengguna|Pengguna-pengguna}} {{SITENAME}} tanpa nama",
        "siteuser": "Pengguna {{SITENAME}}, $1",
        "pageinfo-category-pages": "Bilangan halaman",
        "pageinfo-category-subcats": "Bilangan subkategori",
        "pageinfo-category-files": "Bilangan fail",
-       "skinname-cologneblue": "Cologne Blue",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moden",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "Tanda ronda",
        "markaspatrolledtext": "Tanda ronda laman ini",
index fb2765c..04ba2d1 100644 (file)
@@ -8,7 +8,8 @@
                        "Roderick Mallia",
                        "Urhixidur",
                        "아라",
-                       "CharlieTheCabbie"
+                       "CharlieTheCabbie",
+                       "Leli Forte"
                ]
        },
        "tog-underline": "Ħoloq sottolinjati:",
@@ -16,9 +17,9 @@
        "tog-hidepatrolled": "Aħbi l-modifiki verifikati fit-tibdil riċenti",
        "tog-newpageshidepatrolled": "Aħbi l-paġni verifikati mil-lista tal-paġni l-ġodda",
        "tog-extendwatchlist": "Espandi l-lista ta' osservazzjoni biex turi t-tibdil kollu, u mhux biss dak riċenti",
-       "tog-usenewrc": "Iġbor il-modifiki skont il-paġna fit-tibdil riċenti u fil-lista ta' osservazzjonijiet (bżonn tal-Javascript)",
+       "tog-usenewrc": "Iġbor il-tibdil skont paġna fil-tibdil riċenti u lista' ta paġni osservati",
        "tog-numberheadings": "Numerazzjoni awtomatika tat-titli tas-sezzjonijiet",
-       "tog-showtoolbar": "Uri l-kolonna tal-għodda għall-immodifikar (bżonn tal-JavaScript)",
+       "tog-showtoolbar": "Uri tal-għodda għall-modifikar il-paġni",
        "tog-editondblclick": "Immodifika l-paġni permezz ta' klikk doppju (bżonn tal-JavaScript)",
        "tog-editsectiononrightclick": "L-immodifikar ta' sezzjonijiet bi klikk lemini fuq it-titli tas-sezzjonijiet (bżonn tal-JavaScript)",
        "tog-watchcreations": "Żid il-paġni li noħloq u l-fajls li ntella' fil-lista ta' osservazzjoni tiegħi",
        "viewsourcetext": "Tista' tara u tikkopja s-sors ta' din il-paġna:",
        "viewyourtext": "Tista' tara u tikkopja s-sors tal-'''modifiki tiegħek''' fuq din il-paġna:",
        "protectedinterface": "Din il-paġna għanda element li tagħmel parti mill-interfaċċa tal-utent tas-software, u għaldaqstant ġiet protetta sabiex ma jkunx hemm abbuż.",
-       "editinginterface": "'''Avviż:''' Qiegħed tagħmel modifiki lejn paġna li qegħdha tintuża biex tipprovdi interfaċċa għall-messaġġi tas-software. Kull modifika f'din il-paġna se taffetwa l-apparenza tal-faċċata tal-utenti kollha. Għat-traduzzjonijiet, ikkunsidra l-possibilità li tuża'  [//translatewiki.net/wiki/Main_Page?setlang=mt translatewiki.net], il-proġett MediaWiki għal-lokalizzazzjoni.",
+       "editinginterface": "'''Avviż:''' Qiegħed tagħmel modifiki lejn paġna li qiegħda tintuża biex tipprovdi interfaċċa għall-messaġġi tas-software. Kull modifika f'din il-paġna se taffetwa l-apparenza tal-faċċata tal-utenti kollha. Għat-traduzzjonijiet, ikkunsidra l-possibilità li tuża  [//translatewiki.net/wiki/Main_Page?setlang=mt translatewiki.net], il-proġett MediaWiki għal-lokalizzazzjoni.",
        "cascadeprotected": "Din il-paġna ġiet protetta mill-modifiki, minħabba li tinkludi {{PLURAL:$1|paġni, li huwa|paġni, li huma}} protetti bil-preferenza tal-\"kaskata\" mixewla:\n$2",
        "namespaceprotected": "Inti m'għandhekx il-permess li timodifika paġni fin-''namespace'' '''$1''.",
        "customcssprotected": "M'għandekx il-permessi neċessarji sabiex timmodifika din il-paġna tas-CSS, minħabba li għandha tqegħid personali ta' utent ieħor.",
        "virus-scanfailed": "Tfittxija falliet (kodiċi $1)",
        "virus-unknownscanner": "antivirus mhux magħruf:",
        "logouttext": "'''Bħalissa tinsab barra mill-kont tiegħek.'''\n\nTista' tkompli tuża' {{SITENAME}} bħala utent anonimu, jew tista' terġa <span class='plainlinks'>[$1 tidħol]</span> bħala l-istess utent jew wieħed differenti.\nKun af li ċerti paġni jistgħu jkomplu jidhru bħallikieku l-illogjar 'l barra mill-kont qatt ma seħħ, sakemm ma tħassarx il-cache tal-browser.",
-       "yourname": "Isem tal-utent:",
-       "userlogin-yourname": "Isem tal-utent",
-       "userlogin-yourname-ph": "Daħħal l-isem tal-utent tiegħek",
+       "yourname": "Isem l-utent:",
+       "userlogin-yourname": "Isem l-utent",
+       "userlogin-yourname-ph": "Daħħal isem l-utent tiegħek",
        "yourpassword": "Password:",
        "userlogin-yourpassword": "Password",
        "userlogin-yourpassword-ph": "Daħħal il-password tiegħek",
+       "createacct-yourpassword-ph": "Daħħal password",
        "yourpasswordagain": "Erġa' ikteb il-password:",
        "createacct-yourpasswordagain": "Ikkonferma l-password",
        "createacct-yourpasswordagain-ph": "Erġa' daħħal il-password",
        "userlogin-resetlink": "Insejt kif tidħol fil-kont tiegħek?",
        "userlogin-resetpassword-link": "Irrisettja l-password",
        "createacct-emailrequired": "Indirizz elettroniku",
-       "createacct-emailoptional": "Indirizz elettroniku (fakultattiv)",
+       "createacct-emailoptional": "Indirizz elettroniku (mhux obbligatorju)",
        "createacct-email-ph": "Daħħal l-indirizz elettroniku tiegħek",
        "createaccountmail": "Uża password każwali temporanja u ibgħatha fuq l-indirizz elettroniku mniżżel hawn taħt",
        "createacct-realname": "Isem proprju (fakultattiv)",
        "createacct-benefit-body2": "paġna",
        "createacct-benefit-body3": "{{PLURAL:$1|kontributur|kontributuri}} riċenti",
        "badretype": "Il-passwords li daħħalt ma jaqblux.",
-       "userexists": "L-isem tal-utent li daħħalt diġà meħud. Jekk jogħġbok, agħżel isem differenti.",
+       "userexists": "L-isem l-utent li daħħalt diġà meħud. Jekk jogħġbok, agħżel isem differenti.",
        "loginerror": "Problemi fil-login",
        "createacct-error": "Problema fil-ħolqien tal-kont",
        "createaccounterror": "Il-kont ma jistax jinħoloq: $1",
-       "nocookiesnew": "Il-Kont tal-utent għal l-aċċess ġie maħluq, però ma kienx possibli li tagħmel aċċess għal {{SITENAME}} għax il-''cookies'' huma disattivati. Erġa' prova l-aċċess bl-isem tal-utent u l-password wara li tkun attivajt il-''cookies'' tal-''browser''.",
+       "nocookiesnew": "Ir-reġistrazzjoni ġiet kompluta, imma mhuwiex possibbli li taċċessa {{SITENAME}} minħabba li l-cookies huma diżattivati. Attiva l-cookies, u erġa' pprova idħol bl-isem l-utent u l-password tiegħek.",
        "nocookieslogin": "L-aċċess għal {{SITENAME}} jagħmel użu minn ''cookies'', li bħalissa huma disattivati. Jekk jogħġbok erġa' prova idħol wara li tkun attivajt il-''cookies'' fil-browser.",
        "nocookiesfornew": "Il-kont ma ġiex maħluq, minħabba li ma stajniex nikkonfermaw is-sors. Assigura ruħek li l-cookies huma attivati, u erġa' tella' l-paġna biex terġa' tipprova.",
        "noname": "L-isem tal-utent li tajt mhuwiex validu.",
        "passwordreset-text-one": "Imla din il-formola sabiex tirrisettja l-password.",
        "passwordreset-legend": "Irrisettja l-password",
        "passwordreset-disabled": "L-irrisettjar tal-password fuq din il-wiki ġie diżattivat.",
-       "passwordreset-username": "Isem tal-utent:",
+       "passwordreset-username": "Isem l-utent:",
        "passwordreset-domain": "Dominju:",
        "passwordreset-capture": "Ara l-kontenut tal-messaġġ?",
        "passwordreset-capture-help": "Jekk tagħżel din il-kaxxa, l-indirizz elettroniku (bil-password temporanja) se jiġi muri lilek barra milli jintbagħat lill-utent.",
        "permissionserrorstext": "Inti m'għandhekx dritt li tagħmel hekk, għar-{{PLURAL:$1|raġuni|raġunijiet}} segwenti:",
        "permissionserrorstext-withaction": "M'għandekx il-permessi neċessarji biex $2, minħabba r-{{PLURAL:$1|raġuni|raġunijiet}} segwenti:",
        "recreate-moveddeleted-warn": "'''Twissija: Inti qiegħed toħloq mill-ġdid paġna li ġiet imħassra.'''\n\nAċċerta ruħek jekk huwiex opportun li tkompli timmodifika din il-paġna.\nIr-reġistru tat-tħassir u tal-mixi huwa pprovdut għal aktar konvenjenza:",
-       "moveddeleted-notice": "Din il-paġna ġiet imħassra. Ir-reġistri tat-tħassir u tal-mixi għal din il-paġna huma provduti hawn taħt bħala referenza.",
+       "moveddeleted-notice": "Din il-paġna ġiet imħassra. \nIr-reġistri tat-tħassir u jimxu għal din il-paġna huma provduti hawn taħt bħala referenza.",
        "log-fulllog": "Uri r-reġistru sħiħ",
        "edit-hook-aborted": "Il-modifika ġiet abbandunata mill-''hook''.\nMa ngħatat l-ebda spjegazzjoni.",
        "edit-gone-missing": "Il-paġna ma tistax tiġi aġġornata.\nJidher li din ġiet imħassra.",
        "edit-conflict": "Kunflitt tal-editjar.",
        "edit-no-change": "Il-modifika li għamilt ġiet injorata, minħabba li ebda bidla ma saret lejn it-test.",
+       "postedit-confirmation-created": "Il-paġna ġiet maħluqa.",
        "postedit-confirmation-saved": "Il-modifika tiegħek ġiet salvata.",
        "edit-already-exists": "Ma tistax tinħoloq din il-paġna.\nDin teżisti diġà.",
        "editwarning-warning": "Jekk tħalli din il-paġna jista' jwassal sabiex titlef kwalunkwe tibdil li tkun għamilt. Jekk int tinsab fil-kont tiegħek, tista' tneħħi dan l-avviż fis-sezzjoni \"Modifiki\" tal-preferenzi tiegħek.",
        "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!'''",
        "searchprofile-articles": "Paġni ta' kontenut",
-       "searchprofile-project": "Paġni ta' għajnuna u ta' proġett",
        "searchprofile-images": "Multimedja",
        "searchprofile-everything": "Kollox",
        "searchprofile-advanced": "Avvanzata",
        "searchprofile-articles-tooltip": "Fittex f'$1",
-       "searchprofile-project-tooltip": "Fittex f'$1",
        "searchprofile-images-tooltip": "Fittex għal fajls",
        "searchprofile-everything-tooltip": "Fittex kullimkien (inklużi l-paġni ta' diskussjoni)",
        "searchprofile-advanced-tooltip": "Fittex fi spazji tal-isem personalizzati",
        "search-interwiki-default": "Riżultati ta' $1:",
        "search-interwiki-more": "(aktar)",
        "search-relatedarticle": "Relatati",
-       "searcheverything-enable": "Fittex fl-ispazji tal-isem kollha",
        "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'''.",
        "prefs-email": "Opzjonijiet għall-posta elettronika",
        "prefs-rendering": "Dehra",
        "saveprefs": "Salva l-preferenzi",
-       "restoreprefs": "Irkupra l-impostazzjonijiet awtomatiċi",
+       "restoreprefs": "Irkupra l-konfigurazzjoni oriġinali (fis-sezzjonijiet kollha)",
        "prefs-editing": "Modifiki",
        "rows": "Fillieri:",
        "columns": "Kolonni:",
        "allowemail": "Ħalli li jaslulek ittri-e mingħand utenti oħrajn",
        "prefs-searchoptions": "Fittex",
        "prefs-namespaces": "Namespace",
-       "defaultns": "Fil-każ kuntrarju, fittex f'dawn l-ispazji tal-isem:",
        "default": "predefinit",
        "prefs-files": "Fajls",
        "prefs-custom-css": "CSS personalizzat",
        "prefs-reset-intro": "Inti tista' tuża' din il-paġna sabiex terġa' tbiddel il-preferenzi tiegħek għal dawk li ngħatawlek fil-bidu. Din l-operazzjoni hija definittiva u ma tistax tiġi mħassra.",
        "prefs-emailconfirm-label": "Konferma tal-ittra-e:",
        "youremail": "E-mail:",
-       "username": "{{GENDER:$1|Isem tal-utent}}:",
+       "username": "{{GENDER:$1|Isem l-utent}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membru}} tal-{{PLURAL:$1|grupp|gruppi}}:",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "Ħin ta' reġistrazzjoni:",
        "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-newpage": "(ara wkoll il-[[Special:NewPages|lista tal-paġni l-ġodda]])",
+       "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 jibdew minn $3 $2",
+       "rclistfrom": "Uri l-modifiki ġodda li jibdew minn $3 $2",
        "rcshowhideminor": "$1 modifiki żgħar",
+       "rcshowhideminor-show": "Uri",
        "rcshowhidebots": "$1 bot",
+       "rcshowhidebots-show": "Uri",
        "rcshowhideliu": "Utenti reġistrati: $1",
+       "rcshowhideliu-show": "Uri",
        "rcshowhideanons": "Utenti anonimi: $1",
+       "rcshowhideanons-show": "Uri",
        "rcshowhidepatr": "$1 modifiki kontrollati",
+       "rcshowhidepatr-show": "Uri",
        "rcshowhidemine": "$1 modifiki tiegħi",
+       "rcshowhidemine-show": "Uri",
        "rclinks": "Uri l-aħħar $1 modifiki fl-aħħar $2 ġranet<br />$3",
        "diff": "diff",
        "hist": "kron",
        "usereditcount": "$1 {{PLURAL:$1|kontribuzzjonijiet|kontribuzzjoni}}",
        "usercreated": "{{GENDER:$3|Maħluq}} nhar il-$1 fil-$2",
        "newpages": "Paġni ġodda",
-       "newpages-username": "Isem tal-utent:",
+       "newpages-username": "Isem l-utent:",
        "ancientpages": "L-iktar paġni qodma",
        "move": "Mexxi",
        "movethispage": "Ċaqlaq din il-paġna",
        "nowikiemailtext": "Dan l-utent iddeċieda li ma jirċivix posta elettronika minn utenti oħrajn.",
        "emailnotarget": "Isem tal-utent tar-riċevitur ma jeżistix jew mhuwiex validu.",
        "emailtarget": "Daħħal l-isem tal-utent tar-riċevitur",
-       "emailusername": "Isem tal-utent:",
+       "emailusername": "Isem l-utent:",
        "emailusernamesubmit": "Ibgħat",
        "email-legend": "Ibgħat posta elettronika lil utent ieħor fuq {{SITENAME}}",
        "emailfrom": "Minn:",
        "usermessage-summary": "Messaġġ tas-sistema",
        "usermessage-editor": "Messaġġier tas-sistema",
        "watchlist": "Lista ta' osservazzjoni tiegħi",
-       "mywatchlist": "Lista ta' osservazzjoni",
+       "mywatchlist": "Lista ta' paġni osservati",
        "watchlistfor2": "Tal-utent $1 $2",
        "nowatchlist": "Il-lista ta' osservazzjoni tiegħek hija vojta.",
        "watchlistanontext": "Sabiex tara u timmodifika l-lista ta' osservazzjoni tiegħek, hemm bżonn li $1.",
        "undelete-show-file-confirm": "Inti ċert li trid tara reviżjoni imħassra tal-fajl \"<nowiki>$1</nowiki>\" ta' nhar $2, fil-ħin ta' $3?",
        "undelete-show-file-submit": "Iva",
        "namespace": "Spazju tal-isem:",
-       "invert": "Inverti l-għażla",
+       "invert": "Aqleb l-għażla",
        "tooltip-invert": "Agħżel din il-kaxxa biex taħbi l-modifiki lejn paġni li jinsabu fl-ispazji tal-isem magħżula (u l-ispazju tal-isem assoċjat jekk hu magħżul)",
        "namespace_association": "Spazju tal-isem assoċjat",
        "tooltip-namespace_association": "Agħżel din il-kaxxa sabiex tinkludi l-paġna ta' diskussjoni jew l-oġġett tal-ispazju tal-isem assoċjat mal-ispazju tal-isem magħżul",
        "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": "Tirreġistra ruħek huwa avviżat però mhux obbligatorju.",
+       "tooltip-pt-login": "Ir-reġistrazzjoni hija mħeġġa, għalkemm mhijiex obbligatorja",
        "tooltip-pt-logout": "Oħroġ (illogja 'l barra)",
        "tooltip-ca-talk": "Diskussjoni dwar il-kontenut tal-paġna",
        "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 l-fonti tagħha.",
+       "tooltip-ca-viewsource": "Din il-paġna hija protetta. Tista' tara s-sors tagħha.",
        "tooltip-ca-history": "Verżjonijiet preċedenti ta' din il-paġna",
        "tooltip-ca-protect": "Ipproteġi din il-paġna",
        "tooltip-ca-unprotect": "Biddel il-protezzjoni ta' din il-paġna",
        "tooltip-t-specialpages": "Lista tal-paġni speċjali kollha",
        "tooltip-t-print": "Verżjoni tal-ipprintjar ta' din il-paġna",
        "tooltip-t-permalink": "Ħolqa permanenti għal din il-verżjoni tal-paġna",
-       "tooltip-ca-nstab-main": "Uri l-kontenut tal-paġna",
+       "tooltip-ca-nstab-main": "Uri l-paġna ta' kontenut",
        "tooltip-ca-nstab-user": "Uri l-paġna tal-utent",
        "tooltip-ca-nstab-media": "Uri l-paġna tal-medja",
        "tooltip-ca-nstab-special": "Din hija paġna speċjali, ma tistax tagħmel modifiki f'din il-paġna",
        "tooltip-preferences-save": "Salva l-preferenzi",
        "tooltip-summary": "Daħħal taqsira żgħira",
        "common.css": "/* CSS li tpoġġa hawnhekk irrid jiġi applikat fl-iskins kollha */",
-       "cologneblue.css": "/* CSS li tpoġġa hawnhekk se jaffetwa dawk l-utenti li jagħmlu użu mill-aspett grafiku Cologne Blue */",
        "monobook.css": "/* CSS li tpoġġa hawnhekk se jaffetwa dawk l-utenti li jagħmlu użu mill-iskin ''Monobook'' */",
-       "modern.css": "/* CSS li tpoġġa hawnhekk se jaffetwa dawk l-utenti li jagħmlu użu mill-aspett grafiku Modern */",
        "common.js": "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal kull utent f'kull tniżżil ta' paġna. */",
-       "cologneblue.js": "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''Cologne Blue'' */",
        "monobook.js": "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''Monobook'' */",
-       "modern.js": "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''Modern''*/",
        "anonymous": "{{PLURAL:$1|Utent anonimu|Utenti anonimi}} ta' {{SITENAME}}",
        "siteuser": "$1, utent tal-{{SITENAME}}",
        "anonuser": "$1, utent anonimu ta' {{SITENAME}}",
        "pageinfo-protect-cascading": "Protezzjoni li tintiret minn hawnhekk",
        "pageinfo-protect-cascading-yes": "Iva",
        "pageinfo-protect-cascading-from": "Protezzjoni li tintiret minn",
-       "skinname-cologneblue": "Cologne Blue",
        "skinname-monobook": "Monobook",
-       "skinname-modern": "Modern",
        "markaspatrolleddiff": "Marka l-modifiki bħalha verifikati",
        "markaspatrolledtext": "Immarka din il-paġna bħala verifikata",
        "markedaspatrolled": "Markat bħalha verifikat",
index d4630c2..e68762c 100644 (file)
        "searchmenu-exists": "'''Те викисэнть ули \"[[$1]]\" лем марто лопа'''",
        "searchmenu-new": "<strong>Шкик \"[[:$1]]\" лопанть те викисэнть!</strong> {{PLURAL:$2|0=|Ваномс лопантькак, конань муик вешнемасонть.|Ваномс савкстнэньгак, конатне вешнемасонть муевсть.}}",
        "searchprofile-articles": "Потмокс лопат",
-       "searchprofile-project": "Лезкс ды проекттэ лопат",
        "searchprofile-images": "Мультимедия",
        "searchprofile-everything": "Весе",
        "searchprofile-advanced": "Седе домка",
        "searchprofile-articles-tooltip": "Вешнемс вана тестэ $1",
-       "searchprofile-project-tooltip": "Вешнемс вана тестэ $1",
        "searchprofile-images-tooltip": "Вешнемс файлат",
        "searchprofile-everything-tooltip": "Вешнемс весе лопатнева (кортнема лопатневаяк)",
        "searchprofile-advanced-tooltip": "Вешнемс башка теезь лемпотмотнестэ",
        "search-interwiki-default": "$1 савкс:",
        "search-interwiki-more": "(седе ламо)",
        "search-relatedarticle": "Малавикс",
-       "searcheverything-enable": "Вешнемс весе лем потмотнестэ",
        "searchrelated": "малавикс",
        "searchall": "весе",
        "showingresultsheader": "{{PLURAL:$5|муевсь <strong>$1</strong> вана <strong>$3</strong>-тнень эйстэ|муевсть <strong>$1 - $2</strong> <strong>$3</strong>-тнень эйстэ}} <strong>$4</strong> вешнеманть лангс",
        "prefs-files": "Файлат",
        "youremail": "Е-сёрма:",
        "username": "Теицянь леметь:",
-       "uid": "Теицянь ID:",
        "yourrealname": "Алкуксонь леметь:",
        "yourlanguage": "Келесь:",
        "yournick": "Кедень путома:",
        "recentchanges-label-minor": "Те а покшкэ витнемась-петнемась",
        "recentchanges-label-bot": "Те витнеманть-петнеманть теизе кона-кона бот",
        "recentchanges-label-unpatrolled": "",
-       "recentchanges-legend-newpage": "(вантаять [[Special:NewPages|од лопань лемрисьме]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (вантаять [[Special:NewPages|од лопань лемрисьме]])",
        "rcnotefrom": "Ало невтезь  '''$2''' лиякстомтомасто саезь ('''$1''' видс).",
        "rclistfrom": "Невтемс од витьнематнень $3 $2-нть эйстэ саезь.",
        "rcshowhideminor": "$1 апокшкэ витнемат-петнемат",
        "all-logs-page": "Весемень туртов весе совамодо-кемекстамодо журналт",
        "logempty": "Сови-лиси журналсто а муевить тень марто вейкеть тевть",
        "allpages": "Весе лопат",
-       "alphaindexline": "$1-сто  $2-нтень",
        "nextpage": "Седе тов лопась ($1)",
        "prevpage": "Седе икелень лопа ($1)",
        "allpagesfrom": "Невтемс лопатнень тестэ ушодозь:",
        "unblock": "Нолдамс теицянть саймасто",
        "blockip": "Аравтомс теицянть саймас",
        "blockip-legend": "Аравтомс теицянть саймас",
-       "ipadressorusername": "IP адрес эли теицянь лем:",
+       "ipaddressorusername": "IP адрес эли теицянь лем:",
        "ipbexpiry": "Таштомома шказо:",
        "ipbreason": "Тувталось:",
        "ipbsubmit": "Озавтомс те теицянть саймес",
        "pageinfo-subpages-name": "Те лопанть явкслопанзо",
        "pageinfo-edits": "Зяроксть витнезь-петнезь",
        "pageinfo-authors": "Весемезэ зяро авторонзо",
-       "skinname-modern": "НееньШкань",
        "markaspatrolleddiff": "Тешкстамс ванстнемань ютазекс",
        "markaspatrolledtext": "Тешкстамс те лопанть ванстнемань ютазекс",
        "markedaspatrolled": "Тешкстазь ванстнемань ютазекс",
        "newimages": "Од файлатьнень галлереясь",
        "newimages-legend": "Сувтеме",
        "newimages-label": "Файлалем (эли пельксэзэ):",
-       "showhidebots": "($1 ботт)",
        "noimages": "Арась мезе ваномс.",
        "ilsubmit": "Вешнэмс",
        "bydate": "чинь коряс",
index 5e6e0c3..c32edf6 100644 (file)
        "vector-view-view": "Tha̍k",
        "vector-view-viewsource": "Khoàⁿ goân-sú lōe-iông",
        "actions": "Tōng-chok",
+       "vector-more-actions": "閣看",
        "namespaces": "Miâ-khong-kan",
        "variants": "piàn-thé",
        "navigation-heading": "導覽目錄",
        "shown-title": "Múi ia̍h hián-sī $1 {{PLURAL:$1|kiat-kó|kiat-kó}}",
        "viewprevnext": "Khoàⁿ ($1 {{int:pipe-separator}} $2) ($3)",
        "searchprofile-articles": "Loē-iông ia̍h",
-       "searchprofile-project": "幫助佮事工的頁",
        "searchprofile-images": "To-mûi-thé",
        "searchprofile-everything": "Só͘-ū ê",
        "searchprofile-advanced": "chìn-chi̍t-pō͘",
        "searchprofile-articles-tooltip": "Tī $1 chhoé",
-       "searchprofile-project-tooltip": "Tī $1 chhoé",
        "searchprofile-images-tooltip": "Chhoé tóng-àn",
        "searchprofile-everything-tooltip": "揣全部(包括討論頁)",
        "searchprofile-advanced-tooltip": "佇你家己設的名空間內底揣",
        "servertime": "Server sî-kan hiān-chāi sī",
        "guesstimezone": "Tùi liû-lám-khì chhau--lâi",
        "allowemail": "Ún-chún pa̍t-ê iōng-chiá kià email kòe-lâi",
-       "defaultns": "Tī chiah ê miâ-khong-kan chhiau-chhōe:",
        "prefs-files": "Tóng-àn",
        "youremail": "Lí ê email:",
        "yourrealname": "Lí ê chin miâ:",
index 9d0feae..f3908ec 100644 (file)
        "nextn-title": "{{PLURAL:$1|Risultato successivo|$1 risultate successive}}",
        "shown-title": "Fa vere {{PLURAL:$1|'nu risultato|$1 risultate}} ppe paggena",
        "viewprevnext": "Vere($1 {{int:pipe-separator}} $2) ($3).",
-       "searchmenu-new": "'''Cria a paggena \"[[:$1]]\" ncopp'â chisto wiki!'''",
+       "searchmenu-new": "<strong>'''Cria a paggena \"[[:$1]]\" ncopp'â chisto wiki!'''</strong> {{PLURAL:$2|0=|Vede anche 'a paggena truovata cu 'a recerca tuja|Vede anche 'e risultate d\"a recerca}}",
        "searchprofile-articles": "Paggene 'e contenute",
-       "searchprofile-project": "Paggene 'e ajùto e relative 'o prugietto",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tutto",
        "searchprofile-advanced": "Avanzate",
        "searchprofile-articles-tooltip": "Circa dint'ô $1",
-       "searchprofile-project-tooltip": "Circa dint'ô $1",
        "searchprofile-images-tooltip": "Circa file",
        "searchprofile-advanced-tooltip": "Circa dint'e namespace perzonalizzate",
        "search-result-size": "$1 ({{PLURAL:$2|'na parola|$2 parole}})",
        "booksources-go": "Vàje",
        "log": "Logs",
        "allpages": "Tutte 'e ppaggene",
-       "alphaindexline": "da $1 a $2",
        "allarticles": "Tutt' 'e vvoce",
        "allinnamespace": "Tutt' 'e ppaggene d''o namespace $1",
        "allpagessubmit": "Vàje",
        "whatlinkshere-hideimages": "$1 links ddo file",
        "whatlinkshere-filters": "Filtre",
        "blockip": "Ferma utelizzatóre",
-       "ipadressorusername": "Nnerizzo IP o nomme utente",
+       "ipaddressorusername": "Nnerizzo IP o nomme utente",
        "ipboptions": "2 ore:2 hours,1 juorno:1 day,3 juorne:3 days,1 semmana:1 week,2 semmane:2 weeks,1 mise:1 month,3 mese:3 months,6 mese:6 months,1 anno:1 year,infinito:infinite",
        "blockipsuccesssub": "Blocco aseguito",
        "ipblocklist": "Utenti bloccate",
index fe08230..0c04b4f 100644 (file)
        "vector-view-view": "Les",
        "vector-view-viewsource": "Vis kilden",
        "actions": "Handlinger",
+       "vector-more-actions": "Mer",
        "namespaces": "Navnerom",
        "variants": "Varianter",
        "navigation-heading": "Navigasjonsmeny",
        "parser-template-recursion-depth-warning": "Mal er brukt for mange ganger ($1)",
        "language-converter-depth-warning": "Dybdegrense for språkkonvertering overskredet ($1)",
        "node-count-exceeded-category": "Sider hvor antallet noder er overskredet",
+       "node-count-exceeded-category-desc": "En kategori for sider der antallet noder er overskredet.",
        "node-count-exceeded-warning": "Siden har overskredet antallet noder",
        "expansion-depth-exceeded-category": "Sider hvor hvor ekspansjonsdybden er overskredet",
+       "expansion-depth-exceeded-category-desc": "Dette er en kategori for sider hvor ekspansjonsdybden er overskredet.",
        "expansion-depth-exceeded-warning": "Sida har overskredet ekspansjonsdybden",
        "parser-unstrip-loop-warning": "«Unstrip»-loop påvist",
        "parser-unstrip-recursion-limit": "Rekursjonsgrense for taggfjerning overskredet ($1)",
        "searchmenu-exists": "* Siden '''[[$1]]'''",
        "searchmenu-new": "'''Opprett siden ''[[:$1]]'' på denne wikien.'''\n<strong>Opprett siden \"[[:$1]]\" på denne wikien!</strong> {{PLURAL:$2|0=|Se også siden oppnådd gjennom søket ditt.|Se også de oppnådde søkeresultatene.}}",
        "searchprofile-articles": "Innholdssider",
-       "searchprofile-project": "Hjelp- og prosjektsider",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alt",
        "searchprofile-advanced": "Avansert",
        "searchprofile-articles-tooltip": "Søk i $1",
-       "searchprofile-project-tooltip": "Søk i $1",
        "searchprofile-images-tooltip": "Søk etter filer",
        "searchprofile-everything-tooltip": "Søk i alt innhold (inkldert diskusjonssider)",
        "searchprofile-advanced-tooltip": "Søk i visse navnerom",
        "search-interwiki-default": "Resultater fra $1:",
        "search-interwiki-more": "(mer)",
        "search-relatedarticle": "Relatert",
-       "searcheverything-enable": "Søk i alle navnerom",
        "searchrelated": "relatert",
        "searchall": "alle",
        "showingresults": "Nedenfor vises opptil {{PLURAL:$1|'''ett''' resultat|'''$1''' resultater}} fra og med nummer <b>$2</b>.",
        "allowemail": "Tillat andre å sende meg e-post",
        "prefs-searchoptions": "Søk",
        "prefs-namespaces": "Navnerom",
-       "defaultns": "Søk ellers i disse navnerommene:",
        "default": "standard",
        "prefs-files": "Filer",
        "prefs-custom-css": "Personlig CSS",
        "right-move": "Flytte sider",
        "right-move-subpages": "Flytte sider med undersider",
        "right-move-rootuserpages": "Flytte hovedbrukersider",
+       "right-move-categorypages": "Flytte kategorisider",
        "right-movefile": "Flytte filer",
        "right-suppressredirect": "Behøver ikke å opprette omdirigeringer ved sideflytting",
        "right-upload": "Laste opp filer",
        "action-move": "flytte denne siden",
        "action-move-subpages": "flytte denne siden og dens undersider",
        "action-move-rootuserpages": "flytte hovedbrukersider",
+       "action-move-categorypages": "flytte kategorisider",
        "action-movefile": "flytte denne filen",
        "action-upload": "laste opp denne filen",
        "action-reupload": "overskrive den nåværende filen",
        "recentchanges-label-unpatrolled": "Denne redigeringen har ikke blitt patruljert ennå",
        "recentchanges-label-plusminus": "Sidestørrelsen kan endres med dette antallet bytes",
        "recentchanges-legend-heading": "'''Tegnforklaring:'''",
-       "recentchanges-legend-newpage": "(se også [[Special:NewPages|liste av nye sider]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se også [[Special:NewPages|liste av nye sider]])",
        "recentchanges-legend-plusminus": "«(±123)»",
        "rcnotefrom": "Nedenfor er endringene gjort siden <strong>$2</strong> (frem til <strong>$1</strong> vises).",
        "rclistfrom": "Vis nye endringer fra og med $3 $2",
        "watchnologin": "Ikke logget inn",
        "addwatch": "Legg til i overvåkningslisten",
        "addedwatchtext": "Siden «[[:$1]]» er lagt til [[Special:Watchlist|overvåkningslisten]] din.\nFremtidige endringer til denne siden og den tilhørende diskusjonssiden blir listet opp der.",
+       "addedwatchtext-short": "Siden «$1» har blitt lagt til i overvåkningslisten din.",
        "removewatch": "Fjern fra overvåkningslisten",
        "removedwatchtext": "Siden «[[:$1]]» er fjernet fra [[Special:Watchlist|overvåkningslisten din]].",
+       "removedwatchtext-short": "Siden «$1» har blitt fjernet fra overvåkningslisten din.",
        "watch": "Overvåk",
        "watchthispage": "Overvåk denne siden",
        "unwatch": "Avslutt overvåkning",
        "delete-edit-reasonlist": "Rediger begrunnelser for sletting",
        "delete-toobig": "Denne siden har en stor redigeringshistorikk, med over {{PLURAL:$1|$1&nbsp;revisjon|$1&nbsp;revisjoner}}. Muligheten til å slette slike sider er begrenset for å unngå utilsiktet forstyrring av {{SITENAME}}.",
        "delete-warning-toobig": "Denne siden har en stor redigeringshistorikk, med over {{PLURAL:$1|$1&nbsp;revisjon|$1&nbsp;revisjoner}}. Sletting av denne siden kan forstyrre databasen til {{SITENAME}}; vær varsom.",
-       "deleting-backlinks-warning": "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}|Andre sider]] lenker til eller inkluderer siden du er i ferd med å slette.",
+       "deleting-backlinks-warning": "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] lenker til eller inkluderer siden du er i ferd med å slette.",
        "rollback": "Fjern redigeringer",
        "rollback_short": "Tilbakestill",
        "rollbacklink": "tilbakestill",
        "movepagetalktext": "Den tilhørende diskusjonssiden vil automatisk bli flyttet sammen med siden '''med mindre:'''\n*Det allerede finnes en diskusjonsside som ikke er tom under det nye navnet, eller\n*Du fjerner markeringen i boksen nedenfor.\n\nI disse tilfellene er du nødt til å flytte eller flette siden manuelt, om ønskelig.",
        "movearticle": "Flytt side:",
        "moveuserpage-warning": "'''Advarsel:''' Du er i ferd med å flytte en brukerside. Merk at kun siden vil bli flyttet; brukernavnet vil ''ikke'' bli endret.",
+       "movecategorypage-warning": "<strong>Advarsel:</strong> Du er i ferd med å flytte en kategoriside. Merk at kun siden blir flyttet, og at sider i det gamle kategorinavnet <em>ikke</em> blir omkategorisert til det nye navnet.",
        "movenologintext": "Du må være registrert bruker og være [[Special:UserLogin|logget på]] for å flytte en side.",
        "movenotallowed": "Du har ikke tillatelse til å flytte sider.",
        "movenotallowedfile": "Du har ikke tillatelse til å flytte filer.",
        "cant-move-user-page": "Du har ikke tillatelse til å flytte brukersider (bortsett fra undersider).",
        "cant-move-to-user-page": "Du har ikke tillatelse til å flytte brukersider (bortsett fra undersider).",
+       "cant-move-category-page": "Du har ikke tillatelse til å flytte kategorisider.",
+       "cant-move-to-category-page": "Du har ikke tillatelse til å flytte en side til en kategoriside.",
        "newtitle": "Til ny tittel:",
        "move-watch": "Overvåk kilde- og målsiden",
        "movepagebtn": "Flytt side",
        "tooltip-undo": "«Angre» tilbakestiller denne endringen og åpner redigeringsskjemaet i forhåndsvisningsmodus. Det tillater en å legge til en begrunnelse i redigeringsforklaringen.",
        "tooltip-preferences-save": "Lagre innstillinger",
        "tooltip-summary": "Skriv et kort sammendrag",
-       "interlanguage-link-title": "$1 &ndash; $2",
+       "interlanguage-link-title": "$1  $2",
        "common.css": "/* CSS plassert i denne fila vil gjelde for alle utseender. */",
-       "cologneblue.css": "/* CSS i denne fila vil gjelde alle som bruker drakta Kølnerblå */",
        "monobook.css": "/* CSS i denne fila vil gjelde alle som bruker drakta Monobook */",
-       "modern.css": "/* CSS i denne fila vil gjelde alle som bruker drakta Modern */",
        "common.js": "/* Javascript i denne fila vil gjelde for alle drakter. */",
-       "cologneblue.js": "/* Javascript i denne fila vil gjelde for brukere av drakta Kølnerblå */",
        "monobook.js": "/* Javascript i denne fila vil gjelde for brukere av drakta Monobook */",
-       "modern.js": "/* Javascript i denne fila vil gjelde for brukere av drakta Modern */",
        "anonymous": "{{PLURAL:$1|Anonym bruker|Anonyme brukere}} av {{SITENAME}}",
        "siteuser": "{{SITENAME}}-bruker $1",
        "anonuser": "{{SITENAME}}s anonyme bruker $1",
        "pageinfo-category-pages": "Antall sider",
        "pageinfo-category-subcats": "Antall underkategorier",
        "pageinfo-category-files": "Antall filer",
-       "skinname-cologneblue": "Kølnerblå",
        "skinname-monobook": "Monobook",
-       "skinname-modern": "Moderne",
        "markaspatrolleddiff": "Merk som patruljert",
        "markaspatrolledtext": "Merk denne siden som patruljert",
        "markedaspatrolled": "Merket som patruljert",
        "newimages-summary": "Denne spesialsiden viser de sist opplastede filene.",
        "newimages-legend": "Filnavn",
        "newimages-label": "Filnavn (helt eller delvis):",
+       "newimages-showbots": "Vis opplastinger av botter",
        "noimages": "Ingenting å se.",
        "ilsubmit": "Søk",
        "bydate": "etter dato",
        "watchlistedit-raw-done": "Overvåkningslisten din er oppdatert.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Én tittel|$1 titler}} ble lagt til:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Én tittel|$1 titler}} ble fjernet:",
+       "watchlistedit-clear-title": "Rensket overvåkningslisten",
+       "watchlistedit-clear-legend": "Rensk overvåkninslisten",
+       "watchlistedit-clear-explain": "Alle titlene blir fjernet fra overvåkningslisten din",
+       "watchlistedit-clear-titles": "Titler:",
+       "watchlistedit-clear-submit": "Rensk overvåkningslisten (dette er permanent!)",
+       "watchlistedit-clear-done": "Overvåkningslisten din har blitt rensket.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Én tittel|$1 titler}} ble fjernet:",
+       "watchlistedit-too-many": "Det er for mange sider til å vise dem her.",
+       "watchlisttools-clear": "Rensk overvåkningslisten",
        "watchlisttools-view": "Vis relevante endringer",
        "watchlisttools-edit": "Vis og rediger overvåkningsliste",
        "watchlisttools-raw": "Rediger rå overvåkningsliste",
index 1fc788b..639926c 100644 (file)
@@ -14,7 +14,8 @@
                        "Urhixidur",
                        "Ævar Arnfjörð Bjarmason <avarab@gmail.com>",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Kolega2357"
                ]
        },
        "tog-underline": "Verwiezingen onderstrepen",
        "vector-view-view": "Lezen",
        "vector-view-viewsource": "Brontekste bekieken",
        "actions": "Haandeling",
+       "vector-more-actions": "Meer",
        "namespaces": "Naamruumtes",
        "variants": "Variaanten",
        "navigation-heading": "Navigasiemenu",
        "currentrev": "Leste versie",
        "currentrev-asof": "Leste versie van $1",
        "revisionasof": "Versie op $1",
-       "revision-info": "Versie op $1 van $2",
+       "revision-info": "Versie op $1 van {{GENDER:$6|$2}}$7",
        "previousrevision": "&larr; eerdere versie",
        "nextrevision": "niejere versie &rarr;",
        "currentrevisionlink": "versie zo as t noen is",
        "searchmenu-exists": "'''Der is n zied mit de naam \"[[:$1]]\" op disse wiki.'''",
        "searchmenu-new": "<strong>De zied \"[[:$1]]\" op disse wiki anmaken!</strong> \n{{PLURAL:$2|0=|Zie oek de zied mit joew zeukresultaoten.|Zie oek de lieste mit evunnen zeukresultaoten.}}",
        "searchprofile-articles": "Artikels",
-       "searchprofile-project": "Hulp- en projektziejen",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alles",
        "searchprofile-advanced": "Uutebreid",
        "searchprofile-articles-tooltip": "Zeuken in $1",
-       "searchprofile-project-tooltip": "Zeuken in $1",
        "searchprofile-images-tooltip": "Zeuken naor bestaanden",
        "searchprofile-everything-tooltip": "Alle inhoud deurzeuken (oek overlegziejen)",
        "searchprofile-advanced-tooltip": "Zeuken in de an-egeven naamruumtes",
        "search-interwiki-default": "Resultaoten van $1:",
        "search-interwiki-more": "(meer)",
        "search-relatedarticle": "Verwaant",
-       "searcheverything-enable": "In alle naamruumten zeuken",
        "searchrelated": "verwaant",
        "searchall": "alles",
        "showingresults": "Hieronder {{PLURAL:$1|steet '''1''' resultaot|staon '''$1''' resultaoten}}  <b>$1</b> vanaof nummer <b>$2</b>.",
        "allowemail": "Berichten van aandere gebrukers toestaon",
        "prefs-searchoptions": "Zeukinstellingen",
        "prefs-namespaces": "Naamruumtes",
-       "defaultns": "Aanders in de volgende naamruumten zeuken:",
        "default": "standard",
        "prefs-files": "Bestaanden",
        "prefs-custom-css": "Persoonlike CSS",
        "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-newpage": "(zie oek de [[Special:NewPages|lieste mit nieje ziejen]])",
+       "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",
        "rcshowhideminor": "$1 kleine wiezigingen",
        "cantrollback": "De wiezigingen konnen niet hersteld wörden; der is mer 1 auteur.",
        "alreadyrolled": "Kan de leste wieziging van de zied [[:$1]] deur [[User:$2|$2]] ([[User talk:$2|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); niet weerummedreien.\nn Aander hef disse zied al bewarkt of hersteld naor n eerdere versie.\n\nDe leste bewarking op disse zied is edaon deur [[User:$3|$3]] ([[User talk:$3|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "De bewarkingssamenvatting was: ''$1''.",
-       "revertpage": "Wiezigingen deur [[Special:Contributions/$2|$2]] hersteld tot de versie nao de leste wieziging deur $1",
+       "revertpage": "Wiezigingen deur [[Special:Contributions/$2|$2]] hersteld tot de versie nao de leste wieziging deur [[User:$1|$1]]",
        "revertpage-nouser": "Wiezigingen deur n verbörgen gebruker weerummedreid naor de leste versie deur {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Wiezigingen van $1; weerummedreid naor de leste versie van $2.",
        "sessionfailure-title": "Sessiefout",
        "pageinfo-category-pages": "Antal ziejen",
        "pageinfo-category-subcats": "Antal onderkategorieën",
        "pageinfo-category-files": "Antal bestaanden",
-       "skinname-cologneblue": "Keuls blauw",
        "skinname-monobook": "Monobook",
-       "skinname-modern": "Niejmoeds",
        "markaspatrolleddiff": "Zet op nao-ekeken",
        "markaspatrolledtext": "Disse zied is op nao-ekeken ezet",
        "markedaspatrolled": "Op nao-ekeken ezet",
index a2f5334..0a479c3 100644 (file)
@@ -10,7 +10,8 @@
                        "Urhixidur",
                        "Zylbath",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Kolega2357"
                ]
        },
        "tog-underline": "Verwies ünnerstrieken",
        "searchmenu-exists": "* Sied '''[[$1]]'''",
        "searchmenu-new": "'''Stell de Sied „[[:$1]]“ in dit Wiki nee op!'''",
        "searchprofile-articles": "Inholdsieden",
-       "searchprofile-project": "Hülp- un Projektsieden",
        "searchprofile-images": "Datein",
        "searchprofile-everything": "Allens",
        "searchprofile-advanced": "Verwiedert",
        "searchprofile-articles-tooltip": "Söken in $1",
-       "searchprofile-project-tooltip": "Söken in $1",
        "searchprofile-images-tooltip": "Na Datein söken",
        "searchprofile-everything-tooltip": "Allen Inholt dörsöken (inklusiv Diskuschoonssieden)",
        "searchprofile-advanced-tooltip": "Söök in angevene Naamrüüm",
        "search-interwiki-default": "$1 Resultaten:",
        "search-interwiki-more": "(mehr)",
        "search-relatedarticle": "Verwandt",
-       "searcheverything-enable": "In all Naamrüüm söken",
        "searchrelated": "verwandt",
        "searchall": "all",
        "showingresults": "Hier {{PLURAL:$1|is een Resultat|sünd '''$1''' Resultaten}}, anfungen mit #'''$2'''.",
        "allowemail": "Nettbreven vun annere Brukers annehmen",
        "prefs-searchoptions": "Söökopschonen",
        "prefs-namespaces": "Naamrüüm",
-       "defaultns": "Anners söök in disse Naamrüüm:",
        "default": "Standard",
        "prefs-files": "Datein",
        "prefs-custom-css": "Anpasst CSS",
        "prefs-emailconfirm-label": "E-Mail-Bestätigung:",
        "youremail": "Dien E-Mail (kene Plicht) *",
        "username": "Brukernaam:",
-       "uid": "Bruker-ID:",
        "prefs-memberingroups": "Liddmaten vun de {{PLURAL:$1|Grupp|Gruppen}}:",
        "prefs-registration": "Tied vun dat Anmellen:",
        "yourrealname": "Dien echten Naam (kene Plicht)",
        "logempty": "In’e Logböker nix funnen, wat passt.",
        "log-title-wildcard": "Titel fangt an mit …",
        "allpages": "Alle Sieden",
-       "alphaindexline": "$1 bet $2",
        "nextpage": "tokamen Siet ($1)",
        "prevpage": "Vörige Siet ($1)",
        "allpagesfrom": "Sieden wiesen, de mit disse Bookstaven anfangt:",
        "cantrollback": "De Ännern kann nich trüchnahmen warrn; de letzte Autor is de eenzige.",
        "alreadyrolled": "Dat Trüchnehmen vun de Ännern an de Siet [[:$1]] vun [[User:$2|$2]] ([[User talk:$2|Diskuschoonssiet]]{{int:pipe-separator}}[[Special:Contributions/$2|Bidrääg]]) is nich mööglich, vun wegen dat dor en annere Ännern oder Trüchnahm wesen is.\n\nDe letzte Ännern is vun [[User:$3|$3]] ([[User talk:$3|Diskuschoon]]{{int:pipe-separator}}[[Special:Contributions/$3|Bidrääg]]).",
        "editcomment": "De Ännerkommentar weer: „''$1''“.",
-       "revertpage": "Ännern vun [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskuschoon]]) rut un de Version vun [[User:$1]] wedderhaalt",
+       "revertpage": "Ännern vun [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskuschoon]]) rut un de Version vun [[User:$1|$1]] wedderhaalt",
        "rollback-success": "Ännern vun $1 trüchsett op letzte Version vun $2.",
        "sessionfailure": "Dor weer en Problem mit diene Brukersitzung.\nDisse Akschoon is nu ut Sekerheitsgrünn afbraken, dat de Ännern nich verkehrt en annern Bruker toornt warrt.\nGah een Sied trüch un versöök dat noch wedder.",
        "protectlogpage": "Sietenschuul-Logbook",
        "blockip": "IP-Adress blocken",
        "blockip-legend": "Bruker blocken",
        "blockiptext": "Bruuk dat Formular, ene IP-Adress to blocken.\nDit schall blots maakt warrn, Vandalismus to vermasseln, aver jümmer in Övereenstimmen mit uns [[{{MediaWiki:Policy-url}}|Leidlienen]].\nOk den Grund för dat Blocken indregen.",
-       "ipadressorusername": "IP-Adress oder Brukernaam:",
+       "ipaddressorusername": "IP-Adress oder Brukernaam:",
        "ipbexpiry": "Aflooptiet",
        "ipbreason": "Grund:",
        "ipbreason-dropdown": "* Allgemene Sperrgrünn\n** Tofögen vun verkehrte Infos\n** Leddigmaken vun Sieden\n** Schrifft Tüdelkraam in Sieden\n** Bedroht annere\n** Brukernaam nich akzeptabel",
        "pageinfo-category-info": "Kategorieinformatschoon",
        "pageinfo-category-pages": "Tall vun Sied",
        "pageinfo-category-subcats": "TAll vun Ünnerkategorien",
-       "skinname-cologneblue": "Kölsch Blau",
        "markaspatrolleddiff": "As nakeken marken",
        "markaspatrolledtext": "Disse Siet as nakeken marken",
        "markedaspatrolled": "As nakeken marken",
        "newimages-summary": "Disse Spezialsiet wiest de Datein, de toletzt hoochladen worrn sünd.",
        "newimages-legend": "Filter",
        "newimages-label": "Dateinaam (oder Deel dorvun):",
-       "showhidebots": "($1 Bots)",
        "noimages": "Kene Biller.",
        "ilsubmit": "Söken",
        "bydate": "na Datum",
index c05c0dd..728cc6f 100644 (file)
        "searchmenu-exists": "''' \"[[:$1]]\" नाम गरेको पृष्ठ  यो विकीमा रहेको छ'''",
        "searchmenu-new": "'''यस विकिमा  \"[[:$1]]\" शीर्षक भएको पृष्ठ बनाउनुहोस् !'''",
        "searchprofile-articles": "सामग्री पृष्ठहरू",
-       "searchprofile-project": "सहायता र आयोजना पृष्ठहरु",
        "searchprofile-images": "मल्टिमिडिया(श्रव्य दृश्य)",
        "searchprofile-everything": "सब थोक",
        "searchprofile-advanced": "उन्नत",
        "searchprofile-articles-tooltip": "$1 मा खोज्ने",
-       "searchprofile-project-tooltip": "$1 मा खोज्ने",
        "searchprofile-images-tooltip": "फाइलहरु खोज्ने",
        "searchprofile-everything-tooltip": "सबै सामग्री खोज्ने(वार्तालाप समेत )",
        "searchprofile-advanced-tooltip": "अनुकुल नेमस्पेसमा खोज्ने",
        "search-interwiki-default": "$1देखिका नतिजाहरू:",
        "search-interwiki-more": "(अझै)",
        "search-relatedarticle": "सम्बन्धित",
-       "searcheverything-enable": "सबै नेमस्पेसेजहरुमा खोज्नुहोस्",
        "searchrelated": "सम्बन्धित",
        "searchall": "सबै",
        "showingresults": "देखाउँदै  {{PLURAL:$1|'''१''' नतिजा|'''$1''' नतिजाहरू }} , #'''$2''' बाट सुरुहुने ।",
        "allowemail": "अरु प्रयोगकर्ताहरुबाट प्राप्त हुने ईमेल enable गर्नुहोस् ।",
        "prefs-searchoptions": "खोज्ने",
        "prefs-namespaces": "नेमस्पेसेज",
-       "defaultns": "अन्यथा यी नेमस्पेसेजमा खोज्ने :",
        "default": "पूर्वनिर्धारित",
        "prefs-files": "फाइलहरु",
        "prefs-custom-css": "अनुकुलित CSS",
        "recentchanges-label-minor": "यो साधारण सम्पादन हो",
        "recentchanges-label-bot": "यो सम्पादन बोटद्वारा गरिएको थियो",
        "recentchanges-label-unpatrolled": "यो सम्पादन अहिले सम्म पट्रोल गरिएको छैन",
-       "recentchanges-legend-newpage": "([[Special:NewPages|list of new pages]] यो पनि हेर्नुहोस्)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|list of new pages]] यो पनि हेर्नुहोस्)",
        "recentchanges-legend-plusminus": "(''±१२३'')",
        "rcnotefrom": "'''$2''' देखिका परिवर्तनहरु तल ('''$1''' सम्मका देखाइन्छ)।",
        "rclistfrom": "$3 $2 देखिका नयाँ परिवर्तनहरू देखाउनु",
        "addedwatchtext": "\"[[:$1]]\" पृष्ठ [[Special:Watchlist|अवलोकनसूची]]मा थपियो\nयो पृष्ठ र यससित सम्बद्ध वार्तालाप पृष्ठमा भविष्यमा हुने परिवर्तन सूचिबद्ध गरिनेछ र यो पृष्ठ [[Special:RecentChanges|नयाँ परिवर्तनहरू]]मा छान्न सजिलोकोलागि गाढा अक्षरमा देखा पर्नेछ।",
        "removewatch": "निगरानी सुचीबाट हटाउने",
        "removedwatchtext": "पृष्ठ \"[[:$1]]\" [[Special:Watchlist|तपाईको निगरानी सूची]]बाट हटाइएको छ।",
+       "removedwatchtext-short": "पृष्ठ \"$1\" तपाईंको अवलोकनसूची बाट हटाइयो",
        "watch": "अवलोकन",
        "watchthispage": "यो पृष्ठ अवलोकन गर्नुहोस्",
        "unwatch": "निगरानीबाट हटाउने",
        "tooltip-preferences-save": "अभिरुचिहरु संग्रह गर्नुहोस्",
        "tooltip-summary": "छोटो सारांश हाल्नुहोस्",
        "common.css": "/* यहाँ राखिएका CSS सबै खोलहरुमा लागु हुनेछन् */",
-       "cologneblue.css": "/* यहाँ राखिएको CSS ले कोलोग्ने ब्लु स्किनको प्रयोगकर्ताहरुलाई प्रभावित गर्ने छ  */",
        "monobook.css": "/* यहाँ राखिएको CSS ले मोनोबुक स्किनको प्रयोगकर्ताहरुलाई प्रभावित गर्ने छ  */",
-       "modern.css": "/* यहाँ राखिएको CSS ले मोनोबुक मोडर्न प्रयोगकर्ताहरुलाई प्रभावित गर्ने छ  */",
        "vector.css": "/* यहाँ राखिएको CSS ले भेक्टर स्किनको प्रयोगकर्ताहरुलाई प्रभावित गर्ने छ  */",
        "print.css": "/* यहाँ राखिएको CSS मुद्रण नतिजालाई प्रभावित गर्छ  */",
        "anonymous": "{{SITENAME}} का {{PLURAL:$1||}} नाम नभएका सदस्य",
        "pageinfo-category-pages": "पृष्ठहरूको संख्या",
        "pageinfo-category-subcats": "उपश्रेणीहरूको संख्या",
        "pageinfo-category-files": "फाइलहरूको संख्या",
-       "skinname-cologneblue": "कोलोग्ने निलो",
        "skinname-monobook": "मोनोबुक",
-       "skinname-modern": "मोडर्न",
        "skinname-vector": "भेक्टर",
        "markaspatrolleddiff": "गस्ती गरिएको(patrolled) को रुपमा चिनो लगाउने",
        "markaspatrolledtext": "यस पृष्ठलाई गस्ती गरिएको(patrolled) को रुपमा चिनो लगाउने",
        "watchlistedit-raw-done": "तपाईको निगरानी सुची अद्यावधिक गरिएको छ।",
        "watchlistedit-raw-added": "{{PLURAL:$1|१ शिर्षक|$1 शिर्षकरु}} थपियो:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|१ शिर्षक|$1 शिर्षकरु}} हटाइयो:",
+       "watchlistedit-clear-title": "अवलोकन सूची खाली गरियो",
+       "watchlistedit-clear-legend": "अवलोकन सूची खाली गर्ने",
        "watchlistedit-clear-titles": "शीर्षकहरू :",
+       "watchlistedit-clear-submit": "अवलोकनबाट हटाउने (यो स्थायी हुन्छ!)",
        "watchlistedit-clear-done": "तपाईको निगरानी सुची हटाइएको छ।",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|१ शिर्षक|$1 शिर्षकरु}} हटाइयो:",
+       "watchlistedit-too-many": "यहाँ देखाउनका लागि अति धेरै पृष्ठहरू छन्",
+       "watchlisttools-clear": "अवलोकन सूची खाली गर्ने",
        "watchlisttools-view": "मिल्दो परिवर्तनहरु हेर्ने",
        "watchlisttools-edit": "निगरानी सूची हेर्नुहोस् र सम्पादन गर्नुहोस्",
        "watchlisttools-raw": "कच्चा निगरानी सूची सम्पादन गर्नुहोस् ।",
index 0254de2..77fe5a6 100644 (file)
@@ -55,7 +55,9 @@
                        "Wikiklaas",
                        "Wolf Lambert",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Mar(c)",
+                       "Calak"
                ]
        },
        "tog-underline": "Koppelingen onderstrepen:",
        "vector-view-history": "Geschiedenis weergeven",
        "vector-view-view": "Lezen",
        "vector-view-viewsource": "Brontekst bekijken",
-       "actions": "Handelingen",
+       "actions": "Acties",
+       "vector-more-actions": "Meer",
        "namespaces": "Naamruimten",
        "variants": "Varianten",
        "navigation-heading": "Navigatiemenu",
        "virus-unknownscanner": "onbekend antivirusprogramma:",
        "logouttext": "'''U bent nu afgemeld.'''\n\nSommige pagina's kunnen blijven weergegeven alsof u nog aangemeld bent, totdat u uw browsercache leegt.",
        "welcomeuser": "Welkom, $1!",
-       "welcomecreation-msg": "Uw gebruiker is aangemaakt.\nVergeet niet uw [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te passen.",
+       "welcomecreation-msg": "Uw account is aangemaakt.\nIndien gewenst kunt u uw [[Special:Preferences|voorkeuren]] voor {{SITENAME}} aanpassen.",
        "yourname": "Gebruikersnaam:",
        "userlogin-yourname": "Gebruikersnaam",
        "userlogin-yourname-ph": "Geef uw gebruikersnaam op",
        "userlogin-signwithsecure": "Beveiligde verbinding gebruiken",
        "yourdomainname": "Uw domein:",
        "password-change-forbidden": "U kunt uw wachtwoord niet wijzigen in deze wiki.",
-       "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of u hebt geen toestemming uw externe gebruiker bij te werken.",
+       "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of u hebt geen toestemming uw externe account bij te werken.",
        "login": "Aanmelden",
        "nav-login-createaccount": "Aanmelden / registreren",
        "loginprompt": "U moet cookies ingeschakeld hebben om u te kunnen aanmelden bij {{SITENAME}}.",
        "logout": "Afmelden",
        "userlogout": "Afmelden",
        "notloggedin": "Niet aangemeld",
-       "userlogin-noaccount": "Hebt u geen gebruiker?",
+       "userlogin-noaccount": "Hebt u geen account?",
        "userlogin-joinproject": "Word lid van {{SITENAME}}",
-       "nologin": "Nog geen gebruikersnaam? $1.",
+       "nologin": "Hebt u geen account? $1.",
        "nologinlink": "Registreren",
        "createaccount": "Registreren",
-       "gotaccount": "Hebt u al een gebruikersnaam? $1.",
+       "gotaccount": "Hebt u al een account? $1.",
        "gotaccountlink": "Aanmelden",
        "userlogin-resetlink": "Bent u uw aanmeldgegevens vergeten?",
        "userlogin-resetpassword-link": "Wachtwoord vergeten?",
        "userlogin-helplink2": "Hulp bij aanmelden",
        "userlogin-loggedin": "U bent al aangemeld als {{GENDER:$1|$1}}.\nGebruik het onderstaande formulier om aan te melden als een andere gebruiker.",
-       "userlogin-createanother": "Gebruiker aanmaken",
+       "userlogin-createanother": "Een andere account aanmaken",
        "createacct-emailrequired": "E-mailadres",
        "createacct-emailoptional": "E-mailadres (optioneel)",
        "createacct-email-ph": "Geef uw e-mailadres op",
        "invalidemailaddress": "Het e-mailadres is niet aanvaard, omdat het een ongeldige opmaak heeft.\nGeef een geldig e-mailadres op of laat het veld leeg.",
        "cannotchangeemail": "Het e-mailadres voor een gebruiker kan op deze wiki niet gewijzigd worden.",
        "emaildisabled": "Deze site kan geen e-mails verzenden.",
-       "accountcreated": "Gebruiker aangemaakt",
-       "accountcreatedtext": "De gebruiker [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|overleg]]) is aangemaakt.",
+       "accountcreated": "Account aangemaakt",
+       "accountcreatedtext": "Het gebruikersaccount voor [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|overleg]]) is aangemaakt.",
        "createaccount-title": "Gebruikers registreren voor {{SITENAME}}",
        "createaccount-text": "Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam \"$2\" en uw e-mailadres.\nHet wachtwoord voor \"$2\" is \"$3\".\nMeld u aan en wijzig uw wachtwoord.\n\nNegeer dit bericht als deze gebruiker zonder uw medeweten is aangemaakt.",
        "login-throttled": "U heeft recentelijk te veel mislukte aanmeldpogingen gedaan.\nWacht alstublieft $1 voordat u het opnieuw probeert.",
        "parser-template-recursion-depth-warning": "De recursiediepte voor sjablonen is overschreden ($1)",
        "language-converter-depth-warning": "De dieptelimiet voor de taalconvertor is overschreden ($1)",
        "node-count-exceeded-category": "Pagina's waar het maximaal aantal nodes is overschreden",
+       "node-count-exceeded-category-desc": "Een categorie voor pagina's waar het aantal knooppunten is overschreden.",
        "node-count-exceeded-warning": "Op de pagina is het maximale aantal nodes overschreden",
        "expansion-depth-exceeded-category": "Pagina's waar de expansiediepte is overschreden",
+       "expansion-depth-exceeded-category-desc": "Dit is een categorie voor pagina's waar de expansiediepte is overschreden.",
        "expansion-depth-exceeded-warning": "De pagina bevat te veel sjablonen",
        "parser-unstrip-loop-warning": "Er is een \"unstrip\"-lus gedetecteerd",
        "parser-unstrip-recursion-limit": "De recursielimiet ($1) voor \"unstrip\" is overschreden",
        "logdelete-text": "Verwijderde logboekregels zijn nog zichtbaar in de logboeken, maar delen van de inhoud zijn niet openbaar.",
        "revdelete-text-others": "Andere beheerders van {{SITENAME}} kunnen de verborgen inhoud nog steeds inzien en weer zichtbaar maken via deze interface, tenzij er aanvullende beperkingen zijn ingesteld.",
        "revdelete-confirm": "Bevestig dat u dit wilde doen, dat u de consequenties begrijpt en dat u dit doet in overeenstemming met het geldende [[{{MediaWiki:Policy-url}}|beleid]].",
-       "revdelete-suppress-text": "Gebruik versies verbergen '''alleen''' in de volgende gevallen:\n* Mogelijk smadelijke informatie;\n* Ongepaste persoonlijke gegevens, zoals:\n*: ''adres, telefoonnummers, Burger Service Nummers, enzovoort.''",
+       "revdelete-suppress-text": "Gebruik versies verbergen '''alleen''' in de volgende gevallen:\n* Mogelijk smadelijke informatie;\n* Ongepaste persoonlijke gegevens, zoals:\n*: ''adres, telefoonnummers, identificatienummer, enzovoort.''",
        "revdelete-legend": "Zichtbaarheidsbeperkingen instellen",
        "revdelete-hide-text": "Versietekst",
        "revdelete-hide-image": "Bestandsinhoud verbergen",
        "searchmenu-exists": "* Pagina '''[[$1]]'''",
        "searchmenu-new": "<strong>Maak de pagina \"[[:$1]]\" op deze wiki!</strong> {{PLURAL:$2|0=|Zie ook de pagina met uw zoekresultaat. |Zie ook de lijst met gevonden zoekresultaten}}",
        "searchprofile-articles": "Inhoudelijke pagina's",
-       "searchprofile-project": "Hulp- en projectpagina's",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alles",
        "searchprofile-advanced": "Uitgebreid",
        "searchprofile-articles-tooltip": "Zoeken in $1",
-       "searchprofile-project-tooltip": "Zoeken in $1",
        "searchprofile-images-tooltip": "Zoeken naar bestanden",
        "searchprofile-everything-tooltip": "Alle inhoud doorzoeken (inclusief overlegpagina's)",
        "searchprofile-advanced-tooltip": "Zoeken in opgegeven naamruimten",
        "search-interwiki-default": "Resultaten van $1:",
        "search-interwiki-more": "(meer)",
        "search-relatedarticle": "Gerelateerd",
-       "searcheverything-enable": "In alle naamruimten zoeken",
        "searchrelated": "gerelateerd",
        "searchall": "alle",
        "showingresults": "Hieronder {{PLURAL:$1|staat '''1''' resultaat|staan '''$1''' resultaten}} vanaf #'''$2'''.",
        "powersearch-togglelabel": "Selecteren:",
        "powersearch-toggleall": "Alle",
        "powersearch-togglenone": "Geen",
+       "powersearch-remember": "Selectie onthouden voor toekomstige zoekopdrachten",
        "search-external": "Extern zoeken",
        "searchdisabled": "Zoeken in {{SITENAME}} is niet mogelijk.\nU kunt gebruik maken van Google.\nDe gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.",
        "search-error": "Er is een fout opgetreden tijdens het zoeken: $1",
        "allowemail": "E-mail van andere gebruikers toestaan",
        "prefs-searchoptions": "Zoeken",
        "prefs-namespaces": "Naamruimten",
-       "defaultns": "Anders in de volgende naamruimten zoeken:",
        "default": "standaard",
        "prefs-files": "Bestanden",
        "prefs-custom-css": "aangepaste CSS",
        "watchnologin": "U bent niet aangemeld",
        "addwatch": "Toevoegen aan volglijst",
        "addedwatchtext": "De pagina \"[[:$1]]\" is toegevoegd aan uw [[Special:Watchlist|volglijst]].\nToekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden daar weergegeven.",
+       "addedwatchtext-short": "De pagina \"$1\" is aan uw volglijst toegevoegd.",
        "removewatch": "Verwijderen uit volglijst",
        "removedwatchtext": "De pagina \"[[:$1]]\" is van [[Special:Watchlist|uw volglijst]] verwijderd.",
+       "removedwatchtext-short": "De pagina \"$1\" is van uw volglijst verwijderd.",
        "watch": "Volgen",
        "watchthispage": "Pagina volgen",
        "unwatch": "Niet volgen",
        "movepagetalktext": "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''':\n* De overlegpagina onder de nieuwe naam al bestaat;\n* U het onderstaande vinkje deselecteert.\n\nIn die gevallen moet u de pagina handmatig hernoemen of samenvoegen.",
        "movearticle": "Te hernoemen pagina:",
        "moveuserpage-warning": "'''Waarschuwing:''' u gaat een gebruikerspagina hernoemen. Houd er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.",
+       "movecategorypage-warning": "<strong>Waarschuwing:</strong> U staat op het punt een categoriepagina te hernoemen. Houdt u er rekening mee dat alleen de categoriepagina zelf hernoemd zal worden; pagina's in de oude categorie zullen <em>niet</em> automatisch naar de nieuwe worden verplaatst.",
        "movenologintext": "U moet [[Special:UserLogin|aangemeld]] zijn om een pagina te hernoemen.",
        "movenotallowed": "U hebt geen rechten om pagina's te hernoemen.",
        "movenotallowedfile": "U hebt geen rechten om bestanden te hernoemen.",
        "tooltip-summary": "Voer een korte samenvatting in",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/** CSS die hier wordt geplaatst heeft invloed op alle skins */",
-       "cologneblue.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Keuls blauw */",
        "monobook.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Monobook */",
-       "modern.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Modern */",
        "vector.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Vector */",
        "print.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op de printuitvoer */",
        "noscript.css": "/ * CSS die hier wordt geplaatst heeft invloed voor gebruikers die JavaScript hebben uitgeschakeld * /",
        "group-sysop.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op beheerders */",
        "group-bureaucrat.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op bureaucraten */",
        "common.js": "/* JavaScript die hier wordt geplaatst heeft invloed op alle pagina's voor alle gebruikers */",
-       "cologneblue.js": "/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Keuls blauw gebruiken */",
        "monobook.js": "/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Monobook gebruiken */",
-       "modern.js": "/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Modern gebruiken */",
        "vector.js": "/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Vector gebruiken */",
        "group-autoconfirmed.js": "/* JavaScript die hier wordt geplaatst heeft alleen invloed op automatisch bevestigde gebruikers */",
        "group-user.js": "/* JavaScript die hier wordt geplaatst heeft alleen invloed op geregistreerde gebruikers */",
        "pageinfo-category-pages": "Aantal pagina's",
        "pageinfo-category-subcats": "Aantal subcategorieën",
        "pageinfo-category-files": "Aantal bestanden",
-       "skinname-cologneblue": "Keuls blauw",
        "skinname-monobook": "Monobook",
-       "skinname-modern": "Modern",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "Als gecontroleerd markeren",
        "markaspatrolledtext": "Deze pagina als gecontroleerd markeren",
        "watchlistedit-normal-done": "Er {{PLURAL:$1|is één pagina|zijn $1 pagina’s}} verwijderd van uw volglijst:",
        "watchlistedit-raw-title": "Ruwe volglijst bewerken",
        "watchlistedit-raw-legend": "Ruwe volglijst bewerken",
-       "watchlistedit-raw-explain": "Hieronder staan pagina’s op uw volglijst.\nU kunt de lijst bewerken door pagina’s te verwijderen en toe te voegen.\nEén pagina per regel.\nAls u klaar bent, klik dan op \"{{int:Watchlistedit-raw-submit}}\".\nU kunt ook [[Special:EditWatchlist|het standaard bewerkingsscherm gebruiken]].",
-       "watchlistedit-raw-titles": "Paginas:",
+       "watchlistedit-raw-explain": "Hieronder staan de pagina's op uw volglijst.\nU kunt de lijst bewerken door pagina's te verwijderen en toe te voegen;\néén pagina per regel.\nAls u klaar bent, klik dan op \"{{int:Watchlistedit-raw-submit}}\".\nU kunt ook [[Special:EditWatchlist|het standaard bewerkingsscherm gebruiken]].",
+       "watchlistedit-raw-titles": "Pagina's:",
        "watchlistedit-raw-submit": "Volglijst bijwerken",
        "watchlistedit-raw-done": "Uw volglijst is bijgewerkt.",
-       "watchlistedit-raw-added": "Er {{PLURAL:$1|is 1 pagina|zijn $1 paginas}} toegevoegd:",
-       "watchlistedit-raw-removed": "Er {{PLURAL:$1|is 1 pagina|zijn $1 paginas}} verwijderd:",
-       "watchlistedit-clear-title": "Volglijst wissen",
+       "watchlistedit-raw-added": "Er {{PLURAL:$1|is 1 pagina|zijn $1 pagina's}} toegevoegd:",
+       "watchlistedit-raw-removed": "Er {{PLURAL:$1|is 1 pagina|zijn $1 pagina's}} verwijderd:",
+       "watchlistedit-clear-title": "Volglijst gewist",
        "watchlistedit-clear-legend": "Volglijst wissen",
        "watchlistedit-clear-explain": "Alle titels zullen van uw volglijst worden verwijderd",
        "watchlistedit-clear-titles": "Titels:",
        "watchlistedit-clear-submit": "Volglijst wissen (dit is definitief!)",
        "watchlistedit-clear-done": "Uw volglijst is gewist.",
-       "watchlistedit-clear-removed": "{{PLURAL:$1|1 titel werd|$1 titels werden}} verwijderd:",
+       "watchlistedit-clear-removed": "Er {{PLURAL:$1|is 1 pagina|zijn $1 pagina's}} verwijderd:",
        "watchlistedit-too-many": "Er zijn te veel pagina's om hier weer te geven.",
        "watchlisttools-clear": "Volglijst wissen",
        "watchlisttools-view": "Relevante wijzigingen bekijken",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|heeft}} versie $4 van pagina $3 gemarkeerd als gecontroleerd",
        "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|heeft}} versie $4 van pagina $3 automatisch gemarkeerd als gecontroleerd",
        "logentry-newusers-newusers": "Gebruiker $1 {{GENDER:$2|is}} aangemaakt",
-       "logentry-newusers-create": "Gebruiker $1 {{GENDER:$2|is}} aangemaakt",
+       "logentry-newusers-create": "Gebruikersaccount $1 {{GENDER:$2|is}} aangemaakt",
        "logentry-newusers-create2": "Gebruiker $3 {{GENDER:$2|is}} aangemaakt door $1",
        "logentry-newusers-byemail": "Gebruiker $3 {{GENDER:$2|is}} aangemaakt door $1 en het wachtwoord is per e-mail verzonden",
-       "logentry-newusers-autocreate": "De gebruiker $1 {{GENDER:$2|is}} automatisch aangemaakt",
+       "logentry-newusers-autocreate": "Gebruikersaccount $1 {{GENDER:$2|is}} automatisch aangemaakt",
        "logentry-rights-rights": "$1 {{GENDER:$2|heeft}} groepslidmaatschap voor $3 gewijzigd van $4 naar $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|heeft}} het groepslidmaatschap gewijzigd voor $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|is}} automatisch gepromoveerd van $4 naar $5",
index 73132c3..9b3bf3e 100644 (file)
        "vector-view-view": "Les",
        "vector-view-viewsource": "Sjå kjelda",
        "actions": "Handlingar",
+       "vector-more-actions": "Meir",
        "namespaces": "Namnerom",
        "variants": "Variantar",
        "navigation-heading": "Navigasjonsmeny",
        "permalink": "Fast lenkje",
        "print": "Skriv ut",
        "view": "Sjå",
+       "view-foreign": "Vis på $1",
        "edit": "Endre",
+       "edit-local": "Endre lokal skildring",
        "create": "Opprett",
+       "create-local": "Legg til lokal skildring",
        "editthispage": "Endre sida",
        "create-this-page": "Opprett sida",
        "delete": "Slett",
        "searchmenu-exists": "* Sida '''[[$1]]'''",
        "searchmenu-new": "'''Opprett sida «[[:$1|$1]]» på denne wikien.'''",
        "searchprofile-articles": "Innhaldssider",
-       "searchprofile-project": "Hjelp- og prosjektsider",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alt",
        "searchprofile-advanced": "Avansert",
        "searchprofile-articles-tooltip": "Søk i $1",
-       "searchprofile-project-tooltip": "Søk i $1",
        "searchprofile-images-tooltip": "Søk etter filer",
        "searchprofile-everything-tooltip": "Søk i alt innhald (inkludert diskusjonssider)",
        "searchprofile-advanced-tooltip": "Søk i visse namnerom",
        "search-interwiki-default": "$1-resultat:",
        "search-interwiki-more": "(meir)",
        "search-relatedarticle": "Relatert",
-       "searcheverything-enable": "Søk i alle namneroma",
        "searchrelated": "relatert",
        "searchall": "alle",
        "showingresults": "Nedanfor er opp til {{PLURAL:$1|'''eitt'''|'''$1'''}} resultat som byrjar med nummer '''$2''' vist{{PLURAL:$1||e}}.",
        "allowemail": "Tillat e-post frå andre brukarar",
        "prefs-searchoptions": "Søk",
        "prefs-namespaces": "Namnerom",
-       "defaultns": "Søk elles i desse namneromma:",
        "default": "standard",
        "prefs-files": "Filer",
        "prefs-custom-css": "Eigendefinert CSS",
        "prefs-emailconfirm-label": "Stadfesting av e-post:",
        "youremail": "E-post:",
        "username": "{{GENDER:$1|Brukarnamn}}:",
-       "uid": "{{GENDER:$1|Brukar-ID}}:",
        "prefs-memberingroups": "{{GENDER:$2|Medlem}} av {{PLURAL:$1|gruppa|gruppene}}:",
        "prefs-registration": "Registreringstid:",
        "yourrealname": "Verkeleg namn:",
        "recentchanges-label-unpatrolled": "Endringa er ikkje patruljert enno",
        "recentchanges-label-plusminus": "Storleiken til sida vart endra med så mange byte",
        "recentchanges-legend-heading": "'''Tyding:'''",
-       "recentchanges-legend-newpage": "(sjå dessutan [[Special:NewPages|lista over nye sider]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sjå dessutan [[Special:NewPages|lista over nye sider]])",
        "rcnotefrom": "Nedanfor er endringane gjorde sidan <strong>$2</strong> viste (opp til <strong>$1</strong> stykke)",
        "rclistfrom": "Vis nye endringar sidan $3 $2",
        "rcshowhideminor": "$1 småplukk",
        "log-title-wildcard": "Søk i titlar som byrjar med denne teksten",
        "showhideselectedlogentries": "Vis/gøym valde loggoppføringar",
        "allpages": "Alle sider",
-       "alphaindexline": "$1 til $2",
        "nextpage": "Neste side ($1)",
        "prevpage": "Førre sida ($1)",
        "allpagesfrom": "Vis sider frå:",
        "watchlistanontext": "Du lyt $1 for å vise eller endre sider på overvakingslista di.",
        "watchnologin": "Ikkje innlogga",
        "addwatch": "↓Legg til i overvakingslista",
-       "addedwatchtext": "Sida «[[:$1]]» er lagd til i [[Special:Watchlist|overvakingslista]] di. Framtidige endringar av henne og den tilhøyrande diskusjonssida hennar vil bli oppførde der.",
+       "addedwatchtext": "Sida «[[:$1]]» er lagd til i [[Special:Watchlist|overvakingslista]] di. Framtidige endringar av henne og den tilhøyrande diskusjonssida hennar vil bli oppførte der.",
        "removewatch": "Fjerna frå overvakingslista",
        "removedwatchtext": "Sida «[[:$1]]» er fjerna frå [[Special:Watchlist|overvakingslista di]].",
        "watch": "Overvak",
        "tooltip-preferences-save": "Lagra innstillingar",
        "tooltip-summary": "Skriv inn eit kort samandrag",
        "common.css": "/* CSS plassert i denne fila vil gjelde for alle utsjånader. */",
-       "cologneblue.css": "/* CSS i denne fila vil gjelde alle som nyttar drakta Kølnerblå */",
        "monobook.css": "/* CSS-tekst som vert plassert her, endrar utsjånaden til sidedrakta Monobook */",
-       "modern.css": "/* CSS i denne fila vil gjelde alle som nyttar drakta Modern */",
        "print.css": "/* CSS i denne fila vil påverke utskriftsversjonen */",
        "common.js": "/* Javascript i denne fila vil gjelde for alle drakter. */",
-       "cologneblue.js": "/* Javascript i denne fila vil gjelde for brukarar av drakta Kølnerblå */",
        "monobook.js": "/* Javascript i denne fila vil gjelde for brukarar av drakta Monobook */",
-       "modern.js": "* Javascript i denne fila vil gjelde for brukarar av drakta Modern */",
        "anonymous": "{{PLURAL:$1|anonym brukar|anonyme brukarar}} av {{SITENAME}}",
        "siteuser": "{{SITENAME}}-brukaren $1",
        "anonuser": "{{SITENAME}} anonym brukar $1",
        "pageinfo-category-pages": "Tal sider",
        "pageinfo-category-subcats": "Tal underkategoriar",
        "pageinfo-category-files": "Tal filer",
-       "skinname-cologneblue": "Kölnerblå",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderne",
        "markaspatrolleddiff": "Merk som patruljert",
        "markaspatrolledtext": "Merk innhaldssida som patruljert",
        "markedaspatrolled": "Merk som patruljert",
        "exif-artist": "Skapar",
        "exif-copyright": "Opphavsrettsleg eigar",
        "exif-exifversion": "Exif-versjon",
-       "exif-flashpixversion": "Støtta Flashpix versjon",
+       "exif-flashpixversion": "Støtta Flashpix-versjon",
        "exif-colorspace": "Fargerom",
        "exif-componentsconfiguration": "Komponentanalyse",
        "exif-compressedbitsperpixel": "Komprimerte bits pr. pixel",
index a7dafa9..ecf18f9 100644 (file)
        "searchmenu-exists": "* Pagina '''[[$1]]'''",
        "searchmenu-new": "<strong>Crear la pagina « [[:$1|$1]] » sus aqueste wiki !</strong> {{PLURAL:$2|0=|Vejatz tanben la pagina trobada amb vòstra recèrca.|Vejatz tanben los resultats de vòstra recèrca.}}",
        "searchprofile-articles": "Paginas de contengut",
-       "searchprofile-project": "Paginas d'ajuda e del projècte",
        "searchprofile-images": "Multimèdia",
        "searchprofile-everything": "Tot",
        "searchprofile-advanced": "Avançat",
        "searchprofile-articles-tooltip": "Recercar dins $1",
-       "searchprofile-project-tooltip": "Recercar dins $1",
        "searchprofile-images-tooltip": "Recercar de fichièrs",
        "searchprofile-everything-tooltip": "Recercar dins tot lo contengut (tot incluissent las paginas de discussion)",
        "searchprofile-advanced-tooltip": "Recercar dins d'espacis de noms personalizats",
        "search-interwiki-default": "Resultats de $1 :",
        "search-interwiki-more": "(mai)",
        "search-relatedarticle": "Relatat",
-       "searcheverything-enable": "Recercar dins totes los espacis de noms",
        "searchrelated": "relatat",
        "searchall": "Totes",
        "showingresults": "Afichatge de <b>$1</b> resultat{{PLURAL:$1||s}} a partir del n°<b>$2</b>.",
        "allowemail": "Autorizar lo mandadís de corrièr electronic venent d’autres utilizaires",
        "prefs-searchoptions": "Recèrca",
        "prefs-namespaces": "Noms d’espacis",
-       "defaultns": "Autrament recercar dins aquestes espacis de noms :",
        "default": "defaut",
        "prefs-files": "Fichièrs",
        "prefs-custom-css": "CSS personalizat",
        "prefs-emailconfirm-label": "Confirmacion del corrièr electronic :",
        "youremail": "Adreça de corrièr electronic :",
        "username": "{{GENDER:$1|Nom d'utilizaire|Nom d'utilizaira}}:",
-       "uid": "Numèro d'{{GENDER:$1|utilizaire|utilizaira}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membre|Membra}} {{PLURAL:$1|del grop|dels gropes}}:",
        "prefs-registration": "Data de creacion del compte :",
        "yourrealname": "Nom vertadièr :",
        "recentchanges-label-unpatrolled": "Aqueste cambiament es pas estat verificat encara.",
        "recentchanges-label-plusminus": "La talha de la pagina a cambiat d'aqueste nombre d’octets.",
        "recentchanges-legend-heading": "'''Legenda :'''",
-       "recentchanges-legend-newpage": "(veire tanben la [[Special:NewPages|lista de las paginas novèlas]]).",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veire tanben la [[Special:NewPages|lista de las paginas novèlas]]).",
        "rcnotefrom": "Çaijós las modificacions efectuadas dempuèi lo <strong>$2</strong> (fins a <strong>$1</strong> afichats).",
        "rclistfrom": "Afichar las modificacions novèlas dempuèi lo $3 $2",
        "rcshowhideminor": "$1 los cambiaments menors",
        "tooltip-preferences-save": "Salvar las preferéncias",
        "tooltip-summary": "Apondètz un brèu resumit",
        "common.css": "/** Lo CSS plaçat aicí serà aplicat a totas las aparéncias. */",
-       "cologneblue.css": "/* Lo CSS plaçat aicí afectarà los utilizaires de l’abilhatge Cologne Blue */",
        "monobook.css": "/* Lo CSS plaçat aicí afectarà los utilizaires del skin Monobook */",
-       "modern.css": "/* Lo CSS plaçat aicí afectarà los utilizaires de l’abilhatge Modern */",
        "vector.css": "/* Lo CSS plaçat aicí afectarà los utilizaires de l’abilhatge Vector */",
        "print.css": "/* Lo CSS plaçat aicí afectarà las impressions */",
        "common.js": "/* Tot JavaScript serà cargat amb cada pagina accedida per un utilizaire quin que siá. */",
-       "cologneblue.js": "/* Tot JavaScript aicí serà cargat amb las paginas accedidas pels utilizaires de l’abilhatge Cologne Blue unicament. */",
        "monobook.js": "/* Tot JavaScript aicí serà cargat amb las paginas accedidas pels utilizaires de l’abilhatge MonoBook unicament. */",
-       "modern.js": "/* Tot JavaScript aicí serà cargat amb las paginas accedidas pels utilizaires de l’abilhatge Modern unicament. */",
        "vector.js": "/* Tot JavaScript aicí serà cargat amb las paginas accedidas pels utilizaires de l’abilhatge Vector unicament. */",
        "anonymous": "{{PLURAL:$1|Utilizaire anonim|Utilizaires anonims}} de {{SITENAME}}",
        "siteuser": "Utilizaire $1 de {{SITENAME}}",
        "pageinfo-category-pages": "Nombre de paginas",
        "pageinfo-category-subcats": "Nombre de soscategorias",
        "pageinfo-category-files": "Nombre de fichièrs",
-       "skinname-cologneblue": "Colonha Blau",
        "skinname-monobook": "Monobook",
-       "skinname-modern": "Modèrne",
        "markaspatrolleddiff": "Marcar coma essent pas un vandalisme",
        "markaspatrolledtext": "Marcar aqueste article coma pas vandalizat",
        "markedaspatrolled": "Marcat coma pas vandalizat",
index 18d96f8..12937ed 100644 (file)
@@ -15,7 +15,7 @@
                ]
        },
        "tog-underline": "ତଳେ ଥିବା ଲିଙ୍କ:",
-       "tog-hideminor": "à¬\9bà­\8bà¬\9fମà­\8bà¬\9f à¬¨à¬\97ଦ ବଦଳସବୁକୁ ଲୁଚାଇବେ",
+       "tog-hideminor": "ନିà¬\95à¬\9fରà­\87 à¬¹à­\8bà¬\87ଥିବା à¬\9bà­\8bà¬\9f ବଦଳସବୁକୁ ଲୁଚାଇବେ",
        "tog-hidepatrolled": "ନଗଦ ବଦଳରେ ଥିବା ଜଗାହୋଇଥିବା ବଦଳ ସବୁକୁ ଲୁଚାଇବେ",
        "tog-newpageshidepatrolled": "ନୂଆ ପୃଷ୍ଠାତାଲିକାରୁ ଜଗାହୋଇଥିବା ବଦଳସବୁକୁ ଲୁଚାଇବେ",
        "tog-extendwatchlist": "କେବଳ ନଗଦ ହିଁ ନୁହେଁ, ସବୁଯାକ ବଦଳକୁ ଦେଖାଇବା ପାଇଁ ଦେଖଣାତାଲିକାକୁ ପୂରା ଦେଖାଇବେ",
        "passwordreset-capture-help": "ଯଦି ଆପଣ ଘରଟିକୁ ଦେଖନ୍ତି ତେବେ (ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ ସହିତ) ଇ-ମେଲଟି ଆପଣଙ୍କୁ ଦେଖାଯିବ ଓ ବାକି ସଭ୍ୟମାନଙ୍କୁ ଚାଲିଯିବ ।",
        "passwordreset-email": "ଇ-ମେଲ ଠିକଣା:",
        "passwordreset-emailtitle": "{{SITENAME}} ର ଖାତା ସବିଶେଷ",
-       "passwordreset-emailtext-ip": "କେହି ଜଣେ (ବୋଧେ ଆପଣ, $1 IP ଠିକଣାରୁ) \n{{SITENAME}} ($4) ସାଇଟରେ ଥିବା ଆପଣଙ୍କ ଖାତାର ସବିଶେଷ ଜାଣିବାକୁ ଅନୁରୋଧ କରିଛନ୍ତି । ଏହି ଇମେଲ ଠିକଣା ସହିତ ତଳଲିଖିତ ବ୍ୟବହାରକାରୀଙ୍କ {{PLURAL:$3|ଖାତା|ଖାତାସମୂହ}} ଯୋଡ଼ା:\n\n$2\n\n{{PLURAL:$3|ଏହି ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ଟି|ଏହି ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ସବୁ}} {{PLURAL:$5|ଦିନକରେ|$5 ଦିନରେ ଅଚଳ}} ହୋଇଯିବ ।\nଆପଣ ଏବେ ଲଗ ଇନ କରି ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ବାଛନ୍ତୁ । ଯହି ଆଉ କେହି ଜଣେ ଏହି ଅନୁରୋଧ କରିଥାନ୍ତି\nକିମ୍ବା ଆପଣ ଏବେ ନିଜର ମୂଳ ପାସୱାର୍ଡ଼ ମନେ ପକାଇ ପାରିଥାନ୍ତି ତେବେ ଏହି ପାସୱାର୍ଡ଼ଟିକୁ ଆଉ ବଦଳାଇବା ଲୋଡ଼ା ନାହିଁ ।\nଆପଣ ନିଜ ପୁରୁଣା ପାସୱାର୍ଡ଼ଟି ଆଗପରି ବ୍ୟବହାର କରିପାରନ୍ତି ।",
-       "passwordreset-emailtext-user": "{{SITENAME}}ରେ ଥିବା ବ୍ୟବହାରକାରୀ $1 {{SITENAME}} ($4) ସାଇଟରେ ଥିବା ଆପଣଙ୍କ ଖାତାର ସବିଶେଷ ଜାଣିବାକୁ ଅନୁରୋଧ କରିଛନ୍ତି । ଏହି ଇମେଲ ଠିକଣା ସହିତ ତଳଲିଖିତ ବ୍ୟବହାରକାରୀଙ୍କ {{PLURAL:$3|ଖାତା|ଖାତାସମୂହ}} ଯୋଡ଼ା:\n\n$2\n\n{{PLURAL:$3|ଏହି ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ଟି|ଏହି ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ସବୁ}} {{PLURAL:$5|ଦିନକରେ|$5 ଦିନରେ ଅଚଳ}} ହୋଇଯିବ ।\nଆପଣ ଏବେ ଲଗ ଇନ କରି ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ବାଛନ୍ତୁ । ଯହି ଆଉ କେହି ଜଣେ ଏହି ଅନୁରୋଧ କରିଥାନ୍ତି\nକିମ୍ବା ଆପଣ ଏବେ ନିଜର ମୂଳ ପାସୱାର୍ଡ଼ ମନେ ପକାଇ ପାରିଥାନ୍ତି ତେବେ ଏହି ପାସୱାର୍ଡ଼ଟିକୁ ଆଉ ବଦଳାଇବା ଲୋଡ଼ା ନାହିଁ ।\nଆପଣ ନିଜ ପୁରୁଣା ପାସୱାର୍ଡ଼ଟି ଆଗପରି ବ୍ୟବହାର କରିପାରନ୍ତି ।",
+       "passwordreset-emailtext-ip": "କେହିଜଣେ (ବୋଧେ ଆପଣ, $1 IP addressରୁ) {{SITENAME}} ($4)ରେ ପାସୱାର୍ଡ଼ ରି-ସେଟ କରିବା ପାଇଁ ଅନୁରୋଧ କରିଛନ୍ତି । ଉକ୍ତ ଇମେଲ ଠିକଣା ସହିତ ଏହି {{PLURAL:$3|ସଭ୍ୟ ଖାତାଟି|ସଭ୍ୟ ଖାତାମାନ}} ସମ୍ବନ୍ଧିତ:\n\n$2\n\n{{PLURAL:$3|ଏହି ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ଟି|ଏହି ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ମାନ}} {{PLURAL:$5|ଦିନକ|$5 ଦିନ}}ରେ ଅଚଳ ହୋଇଯିବ ।\nଆପଣ ଏବେ ଲଗ ଇନ କରି ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ବାଛନ୍ତୁ । ଯଦି ଆଉ କେହି ଏହି ଅନୁରୋଧ କରିଥାନ୍ତି କିମ୍ବା ନିଜର ପୁରୁଣା ପାସୱାର୍ଡ଼ଟି ମନେପଡ଼ିଲା, ଏବଂ ଆଉ ପାସୱାର୍ଡ଼ଟି ବଦଳାଇବାକୁ ଚାହୁଁନାହାଁନ୍ତି ତାହେଲେ ଏହି ମେଲଟିକୁ ଅଣଦେଖା କରି ନିଜର ପୁରୁଣା ପାସୱାର୍ଡ଼ ବ୍ୟବହାର କରନ୍ତୁ ।",
+       "passwordreset-emailtext-user": "$1 ନାମକ ସଭ୍ୟଜଣକ {{SITENAME}}ରେ {{SITENAME}} ($4) ପାଇଁ ଆପଣଙ୍କ ପାସ ୱାର୍ଡ଼ ରିସେଟ କରିବାର ଅନୁରୋଧ କରିଛନ୍ତି । ତଳ {{PLURAL:$3|ଖାତାଟି|ଖାତାମାନ}} ଉକ୍ତ ଇମେଲ ସହିତ ସମ୍ବନ୍ଧିତ:\n\n$2\n\n{{PLURAL:$3|ଏହି ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ଟି|ଏହି ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ମାନ}} {{PLURAL:$5|ଦିନକ|$5 ଦିନ}}ରେ ଅଚଳ ହୋଇଯିବ ।\nଆପଣ ଲଗ ଇନ କରି ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ବାଛନ୍ତୁ । ଯଦି ଆଉ କେହି ଏହି ଅନୁରୋଧଟି କରିଥାନ୍ତି କିମ୍ବା ଆପଣଙ୍କର ନିଜ ପୁରୁଣା ପାସୱାର୍ଡ଼ଟି ମନେପଡ଼ିଗଲା ତେବେ ଆପଣଙ୍କୁ ଆଉ ପାସୱାର୍ଡ଼ ବଦଳାଇବାର ଆବଶ୍ୟକତା ନାହିଁ । ଆପଣ ଏହି ମେସେଜଟିକୁ ଅଣଦେଖା କରି ନିଜର ପୁରୁଣା ପାସୱାର୍ଡ଼ ବ୍ୟବହାର କରୁଥାନ୍ତୁ ।",
        "passwordreset-emailelement": "ଇଉଜର ନାମ: $1\nଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼: $2",
        "passwordreset-emailsent": "ଏକ ପାସୱାର୍ଡ଼ ପୁନଃସ୍ଥାପନ ଇମେଲ ପଠାଇଦିଆଯାଇଅଛି ।",
        "passwordreset-emailsent-capture": "ତଳେ ଦେଖାଯାଉଥିବା ଭଳି, ପାସୱାର୍ଡ଼ ପୁନଃସ୍ଥାପନ ଇମେଲଟିଏ ପଠାଇଦିଆଯାଇଛି ।",
-       "passwordreset-emailerror-capture": "à¬\97à­\8bà¬\9fିà¬\8f à¬®à¬¨à­\87ପà¬\95ାà¬\87ବା à¬\87-ମà­\87ଲ à¬¤à¬¿à¬\86ରି à¬\95ରାଯାà¬\87ଥିଲା, à¬¯à¬¾à¬¹à¬¾à¬\95ି à¬¤à¬³à­\87 à¬\85à¬\9bି, à¬\95ିନà­\8dତà­\81 à¬\8fହାà¬\95à­\81 à¬¬à­\8dà­\9fବହାରà¬\95ାରà­\80à¬\95à­\81 à¬ªà¬ à¬¾à¬\87ବାରà­\87 à¬\85ସଫଳ à¬¹à­\87ଲା :$1",
+       "passwordreset-emailerror-capture": "ପାସୱାରà­\8dଡ଼ à¬¬à¬¦à¬³à¬¾à¬\87ବା à¬¸à­\82à¬\9aନା à¬¸à¬¹ à¬\87ମà­\87ଲà¬\9fିà¬\8f à¬¤à¬¿à¬\86ରି à¬¹à­\8bà¬\87à¬\9bି, à¬¯à¬¾à¬¹à¬¾ à¬¤à¬³à­\87 à¬¦à­\87à¬\96ିପାରିବà­\87 à¥¤ à¬\95ିନà­\8dତà­\81 à¬\8fହାà¬\95à­\81 {{GENDER:$2|ସଭà­\8dà­\9f}}à¬\99à­\8dà¬\95à­\81 à¬ªà¬ à¬¾à¬\87ବାରà­\87 à¬¬à¬¿à¬«à¬³ à¬¹à­\87ଲà­\81, à¬\95ାରଣ: $1",
        "changeemail": "ଇ-ମେଲ ଠିକଣା ବଦଳାଇବେ",
        "changeemail-header": "ଖାତା ଇ-ମେଲ ଠିକଣା ବଦଳାଇବେ",
        "changeemail-text": "ଆପଣା ଇ-ମେଲ ଠିକଣା ବଦଳାଇବା ନିମନ୍ତେ ଏହି ଆବେଦନ ପତ୍ରଟି ପୂରଣ କରନ୍ତୁ । ଆପଣଙ୍କୁ ଏହି ବଦଳ ଥୟ କରିବା ପାଇଁ ନିଜର ପାସୱାର୍ଡ଼ ଦେବାକୁ ପଡ଼ିବ ।",
        "changeemail-password": "ଆପଣଙ୍କ {{SITENAME}} ପାସୱାର୍ଡ",
        "changeemail-submit": "ଇ-ମେଲ ପରିର୍ବତ୍ତନ କରନ୍ତୁ",
        "changeemail-cancel": "ନାକଚ",
+       "changeemail-throttled": "ଆପଣ ଏକାଧିକ ଥର ଲଗ ଇନ କରିବାକୁ ଚେଷ୍ଟା କରିଥାଇପାରନ୍ତି ।\nଆଉଥରେ ଚେଷ୍ଟା କରିବା ଆଗରୁ ଦୟାକରି $1 ଅପେକ୍ଷା କରନ୍ତୁ ।",
+       "resettokens": "ଟୋକନ ରିସେଟ କରନ୍ତୁ",
+       "resettokens-no-tokens": "ରିସେଟ କରିବା ପାଇଁ ଆଉ ଟୋକନ ନାହିଁ ।",
+       "resettokens-legend": "ଟୋକନ ରିସେଟ କରନ୍ତୁ",
+       "resettokens-tokens": "ଟୋକନମାନ:",
+       "resettokens-token-label": "$1 (ବର୍ତ୍ତମାନ: $2)",
+       "resettokens-done": "ଟୋକନ ରିସେଟ ହେଲା ।",
+       "resettokens-resetbutton": "ବଛାଯାଇଥିବା ଟୋକନ ରିସେଟ କରନ୍ତୁ",
        "bold_sample": "ମୋଟା ଲେଖା",
        "bold_tip": "ମୋଟା ଲେଖା",
        "italic_sample": "ତେରେଛା ଲେଖା",
        "hr_tip": "ସମାନ୍ତରାଳ ରେଖା (ବେଳେବେଳେ ବ୍ୟବହାର କରିବେ)",
        "summary": "ସାରକଥା:",
        "subject": "ବିଷୟ/ଶିରୋନାମା",
-       "minoredit": "à¬\8fହା à¬\96à­\81ବ à¬\9bà­\8bà¬\9f à¬¬à¬¦à¬³à¬\9fିà¬\8f",
+       "minoredit": "à¬\8fହା à¬\8fà¬\95 à¬¸à¬¾à¬®à¬¾à¬¨à­\8dà­\9f à¬¸à¬®à­\8dପାଦନା",
        "watchthis": "ଏହି ପୃଷ୍ଠାଟିକୁ ଦେଖିବେ",
        "savearticle": "ସାଇତିବେ [Save]",
        "preview": "ସାଇତିବା ଆଗରୁ ଦେଖନ୍ତୁ",
        "loginreqlink": "ଲଗ-ଇନ (Log in)",
        "loginreqpagetext": "ବାକି ପୃଷ୍ଠାମାନ ଦେଖିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ $1 କରିବାକୁ ପଡ଼ିବ ।",
        "accmailtitle": "ପାସୱାର୍ଡ଼ଟି ପଠାଇ ଦିଆଗଲା ।",
-       "accmailtext": "[[User talk:$1|$1]]ଙ୍କ ନିମନ୍ତେ ଏକ ଯାହିତାହି ପାସୱାର୍ଡ଼ $2ଙ୍କ ନିକଟକୁ ପଠାଗଲା ।\n\nଏହି ପାସୱାର୍ଡ଼ଟି ''[[Special:ChangePassword|ପାସୱାର୍ଡ଼ ବଦଳାଇବା]]'' ପୃଷ୍ଠାରେ ଲଗଇନ କରି କରାଯାଇପାରିବ ।",
+       "accmailtext": "[[User talk:$1|$1]] ପାଇଁ $2କୁ ଏକ ଆପେ ଆପେ ତିଆରି ପାସୱାର୍ଡ଼ ପଠାଗଲା । ଏହା ଲଗ ଇନ କଲା ପରେ<em>[[Special:ChangePassword|ପାସୱାର୍ଡ଼ ବଦଳ]]</em> ପୃଷ୍ଠାରେ ବଦଳାଯାଇପାରିବ ।",
        "newarticle": "(ନୁଆ)",
        "newarticletext": "ଆପଣ ଖୋଲିଥିବା ଲିଙ୍କଟିରେ ଏଯାଏଁ କିଛିବି ପୃଷ୍ଠା ନାହିଁ ।\nଏହି ପୃଷ୍ଠାଟିକୁ ତିଆରି କରିବା ପାଇଁ ତଳ ବାକ୍ସରେ ଟାଇପ କରନ୍ତୁ (ଅଧିକ ଜାଣିବା ପାଇଁ [$1 ସାହାଯ୍ୟ ପୃଷ୍ଠା] ଦେଖନ୍ତୁ) ।\nଯଦି ଆପଣ ଏଠାକୁ ଭୁଲରେ ଆସିଯାଇଥାନ୍ତି ତେବେ ଆପଣଙ୍କ ବ୍ରାଉଜରର '''Back''' ପତିଟି ଦବାନ୍ତୁ ।",
        "anontalkpagetext": "----''ଏହା ଏକ ଖାତା ଖୋଲିନଥିବା ବା ଖାତା ବ୍ୟବହାର କରିନଥିବା ଜଣେ ବେନାମି ସଭ୍ୟଙ୍କର ଆଲୋଚନା ପୃଷ୍ଠା ।''\nତେଣୁ ଆମ୍ଭେ ସଂଖ୍ୟା ଦେଇ ସୂଚୀତ IP ଠିକଣା ଦେଇ ତାଙ୍କୁ ଜାଣିବା ।\nଏହି ପ୍ରକାରର ଗୋଟିଏ IP ଠିକଣା ବହୁ ସଭ୍ୟଙ୍କ ଦେଇ ବ୍ୟବହାର କରାଯାଇପାରେ । \nଯଦି ଆପଣ ଜଣେ ଅଜଣା ସଭ୍ୟ ଓ ଭାବୁଛନ୍ତି ଇଆଡୁ ସିଆଡୁ ମତାମତ ସବୁ ଆପଣଙ୍କ ପାଇଁ ଦିଆଯାଇଛି ତେବେ ଦୟାକରି [[Special:UserLogin/signup|ନୂଆ ଖାତାଟିଏ ଖୋଲନ୍ତୁ]] କିମ୍ବା [[Special:UserLogin|ଆଗରୁ ଥିବା ଖାତାରେ ଲଗ ଇନ କରନ୍ତୁ]] ଯାହା ବେନାମି ସଭ୍ୟଙ୍କୁ ନେଇ ଉପୁଜିଥିବା ଦ୍ଵନ୍ଦର ସମାଧାନ କରିବ ।",
        "edit-gone-missing": "ଏହି ପୃଷ୍ଠାଟିକୁ ସତେଜ କରାଯାଇପାରିବ ନାହିଁ ।\nଏହାକୁ ଲିଭାଇ ଦିଆଗଲା ପରି ମନେ ହେଉଛି ।",
        "edit-conflict": "ବଦଳାଇବା ଦ୍ଵନ୍ଦ.",
        "edit-no-change": "ଆପଣଙ୍କ ସମ୍ପାଦନାକୁ ଅଣଦେଖା କରାଗଲା, କାରଣ ଲେଖାରେ କିଛି ବି ବଦଳ କରାଯାଇନଥିଲା ।",
+       "postedit-confirmation-created": "ଏହି ପୃଷ୍ଠାଟି ତିଆରି କରାଗଲା ।",
+       "postedit-confirmation-restored": "ଏହି ପୃଷ୍ଠାଟି ପୁନସ୍ଥାପନ କରାଗଲା ।",
        "postedit-confirmation-saved": "ଆପଣଙ୍କ ବଦଳ ସାଇତା ଗଲା ।",
        "edit-already-exists": "ନୂଆ ପୃଷ୍ଠାଟିଏ ତିଆରି କରିପାରିଲୁଁ ନାହିଁ ।\nଏହା ଆଗରୁ ଅଛି ।",
        "defaultmessagetext": "ଡିଫଲ୍ଟ ମେସେଜ ଲେଖାଗୁଡିକ",
        "content-failed-to-parse": "$1 ପ୍ରକାର ପାଇଁ $2 ଲେଖାକୁ ବର୍ଣ୍ଣନା କରିପାରିଲା ନାହିଁ: $3",
        "invalid-content-data": "ଅବୈଧ ଆଧାର ତଥ୍ୟ",
        "content-not-allowed-here": "\"$1\" ବିଷୟଗୁଡିକ [[$2]]ପୃଷ୍ଠାରେ ରହିପାରିବ ନାହିଁ",
-       "editwarning-warning": "ଏହି ପୃଷ୍ଠାକୁ ଛାଡ଼ି ଚାଲିଗଲେ ହୁଏ ତ ଆପଣ କରିଥିବା କିଛି ସମ୍ପାଦନା ହରାଇ ପାରନ୍ତି ।\nଯଦି ଆପଣ ଲଗ ଇନ କରିଥାନ୍ତି ତେବେ ଆପଣଙ୍କ ପସନ୍ଦର \"ସମ୍ପାଦନା\" ଭାଗରେ ଏହି ଚେତାବନୀଟିକୁ ଅଚଳ କରିପାରିବେ ।",
+       "editwarning-warning": "ଏହି ପୃଷ୍ଠାଟି ଛାଡ଼ି ଚାଲିଗଲେ ଆପଣ ଆଗରୁ କରିଥିବା ସମ୍ପାଦନା ହରାଇବେ । ଯଦି ଆପଣ ଲଗ ଇନ କରିଥାନ୍ତି ନିଜ ପସନ୍ଦ ପୃଷ୍ଠାର \"{{int:prefs-editing}}\" ବିଭାଗରେ ଏହି ଚେତାବନୀଟି ନିଷ୍କ୍ରିୟ କରିପାରିବେ ।",
+       "editpage-notsupportedcontentformat-title": "କଣ୍ଟେଣ୍ଟର ସଂରଚନା ସମର୍ଥିତ ନୁହେଁ",
        "content-model-wikitext": "ଉଇକିଟେକ୍ସଟ",
        "content-model-text": "ଖାଲି ଲେଖା",
        "content-model-javascript": "ଜାଭାସ୍କ୍ରିପ୍ଟ",
        "undo-success": "ଏହି ସମ୍ପାଦନା ପଛକୁ ଫେରାଯାଇପାରିବ ନାହିଁ ।\nଦୟାକରି ତୁଳନା କରି ପରଖିନିଅନ୍ତୁ ଯେ ଆପଣ ଏହାହିଁ କରିବାକୁ ଚାହୁଁଥିଲେ, ଆଉ ସମ୍ପାଦନା ଶେଷ କରିବା ପାଇଁ ତଳେ ଥିବା ବଦଳ ସାଇତି ରଖନ୍ତୁ ।",
        "undo-failure": "ଏହି ସମ୍ପାଦନା ପଛକୁ ଫେରାଯାଇ ପାରିବ ନାହିଁ କାରଣ ମଝିରେ ଘଟିଥିବା ଅନେକ ଛୋଟ ଛୋଟ ବଦଳ ଅସୁବିଧା ତିଆରି କରୁଅଛି ।",
        "undo-norev": "ଏହି ସମ୍ପାଦନାଟି ପଛକୁ ଫେରାଯାଇପାରିବ ନାହିଁ କାରଣ ଏହା ଆଉ ନାହିଁ ବା ଲିଭାଇଦିଆଯାଇଅଛି ।",
+       "undo-nochange": "ଏହି ସମ୍ପାଦନା ପଛକୁ ଫେରାଇଦିଆଯାଇଥିବା ଭଳି ଲାଗୁଛି ।",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|ଆଲୋଚନା]]) ଙ୍କ ଦେଇ କରାଯାଇଥିବା $1 ସଙ୍କଳନଟି ପଛକୁ ଫେରାଇନିଆଗଲା",
+       "undo-summary-username-hidden": "ଜଣେ ଅଜଣା ସଭ୍ୟଙ୍କ ଦେଇ ହୋଇଥିବା $1 ସଂସ୍କରଣଟି ପଛକୁ ଫେରାନ୍ତୁ",
        "cantcreateaccounttitle": "ଖାତାଟିଏ ତିଆରି କରାଯାଇପାରିବ ନାହିଁ",
        "cantcreateaccount-text": "[[User:$3|$3]]ଙ୍କ ଦେଇ ('''$1''') IP ଠିକଣାରୁ ଖାତା ଖୋଲିବାକୁ ବାରଣ କରାଯାଇଅଛି ।\n\n$3ଙ୍କ ଦେଇ ଦିଆଯାଇଥିବା କାରଣ ହେଲା ''$2''",
        "viewpagelogs": "ଏହି ପୃଷ୍ଠା ପାଇଁ ଲଗଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ ।",
        "page_first": "ପ୍ରଥମ",
        "page_last": "ଶେଷ",
        "histlegend": "ଭିନ୍ନ ବଛା: ବାଛିବା ପାଇଁ ଗୋଲ ବାଛିବା ଘରେ କ୍ଲିକ କରି ଏଣ୍ଟର ଅଥବା ତଳେ ଥିବା ବଟନ ଦବାନ୍ତୁ ।<br />\nନିର୍ଦ୍ଦେଶିକା: <strong>({{int:cur}})</strong> = ଗତ ସଂସ୍ମରଣମାନଙ୍କ ମଧ୍ୟରେ ତଫାତ, <strong>({{int:last}})</strong> = ଆଗର ସଂସ୍ମରଣମାନଙ୍କ ମଧ୍ୟରେ ତଫାତ, <strong>{{int:minoreditletter}}</strong> = ଛୋଟମୋଟ ସମ୍ପାଦନା ।",
-       "history-fieldset-title": "ଇତିହାସ ଖୋଜିବା",
+       "history-fieldset-title": "ଇତିହାସରେ ଖୋଜନ୍ତୁ",
        "history-show-deleted": "କେବଳ ଲିଭାଯାଇଥିବା",
        "histfirst": "ସବୁଠୁ ପୁରୁଣା",
        "histlast": "ନଗଦ",
        "revdelete-confirm": "ଦୟାକରି ଥୟ କରନ୍ତୁ ଯେ ଆପଣ ଏହା କରିବାକୁ ଚାହୁଁଛନ୍ତି, ଆପଣ ଏହାର ପରିଣାମ ଜାଣନ୍ତି ଓ ଆପଣ [[{{MediaWiki:Policy-url}}|ନୀତି]] ଅନୁସାରେ ଏହା କରୁଛନ୍ତି ।",
        "revdelete-suppress-text": "ଦବାଇ ରଖିବା '''କେବଳ''' ଏହି ତଳଲିଖିତ କ୍ଷେତ୍ରରେ ବ୍ୟବହାର କରାଯିବ:\n* ସମ୍ଭାବିତ ଅପମାନଜଣକ ତଥ୍ୟ\n* ଭୁଲ ବ୍ୟକ୍ତିଗତ ତଥ୍ୟ\n*: ''ଘର ଠିକଣା ଓ ଟେଲିଫୋନ ନମ୍ବର, ଭୋଟର ପରିଚୟ ନମ୍ବର, ଆଦି''",
        "revdelete-legend": "ଦେଖଣା ବାରଣ ସବୁ ଥୟ କରନ୍ତୁ",
-       "revdelete-hide-text": "ସà¬\99à­\8dà¬\95ଳନ à¬²à­\87à¬\96ା à¬²à­\81à¬\9aାà¬\87ଦିà¬\85ନà­\8dତà­\81",
+       "revdelete-hide-text": "ସà¬\82ସà­\8dà¬\95ରଣ à¬²à­\87à¬\96ା",
        "revdelete-hide-image": "ଫାଇଲ ଭିତର ପଦାର୍ଥସବୁ ଲୁଚାଇଦିଅନ୍ତୁ",
        "revdelete-hide-name": "କାମ ଓ ଲକ୍ଷ ସବୁ ଲୁଚାଇଦିଅନ୍ତୁ",
-       "revdelete-hide-comment": "ବଦଳ à¬¸à¬¾à¬°à¬\95ଥା à¬²à­\81à¬\9aାà¬\87ଦିà¬\85ନ୍ତୁ",
-       "revdelete-hide-user": "ସମà­\8dପାଦà¬\95à¬\99à­\8dà¬\95ର à¬\87à¬\89à¬\9cର ନାମ /IP ଲୁଚାଇଦିଅନ୍ତୁ",
+       "revdelete-hide-comment": "ସାରà¬\95ଥା à¬¸à¬®à­\8dପାଦନା à¬\95ରନ୍ତୁ",
+       "revdelete-hide-user": "ସମà­\8dପାଦà¬\95à¬\99à­\8dà¬\95ର à¬¸à¬­à­\8dà­\9f ନାମ /IP ଲୁଚାଇଦିଅନ୍ତୁ",
        "revdelete-hide-restricted": "ପରିଚାଳକ ଓ ବାକିମାନଙ୍କ ଠାରୁ ତଥ୍ୟକୁ ଦବାଇଦିଅନ୍ତୁ",
        "revdelete-radio-same": "(ବଦଳାନ୍ତୁ ନାହିଁ)",
        "revdelete-radio-set": "ଲୁଚାଯାଇଛି",
        "searchmenu-exists": "'''ଏହି ଉଇକିରେ \"[[:$1]]\" ନାଆଁରେ ପୃଷ୍ଠାଟିଏ ଅଛି ।'''",
        "searchmenu-new": "'''ଏହି ପ୍ରସଙ୍ଗଟି ଆଗରୁ ନାହିଁ, ତେଣୁ ''[[:$1]]'' ନାମରେ ପ୍ରସଙ୍ଗଟିଏ ଏଠାରେ ଗଢ଼ନ୍ତୁ!'''",
        "searchprofile-articles": "ସୂଚୀ ପୃଷ୍ଠା",
-       "searchprofile-project": "ସାହାଯ୍ୟ ଓ ପ୍ରକଳ୍ପ ପୃଷ୍ଠା",
        "searchprofile-images": "ମଲ୍ଟିମିଡ଼ିଆ",
        "searchprofile-everything": "ସବୁକିଛି",
        "searchprofile-advanced": "ଉନ୍ନତ",
        "searchprofile-articles-tooltip": "$1ରେ ଖୋଜିବେ",
-       "searchprofile-project-tooltip": "$1ରେ ଖୋଜିବେ",
        "searchprofile-images-tooltip": "ଫାଇଲ ସବୁ ପାଇଁ ଖୋଜିବେ",
        "searchprofile-everything-tooltip": "ପ୍ରସଙ୍ଗ ସବୁକୁ ଖୋଜିବେ (ଆଲୋଚନା ସହ)",
        "searchprofile-advanced-tooltip": "ନିଜେ ତିଆରିକରିହେବା ଭଳି ନେମସ୍ପେସରେ ଖୋଜିବେ",
        "search-interwiki-default": "$1 ରୁ ଫଳାଫଳ:",
        "search-interwiki-more": "(ଅଧିକ)",
        "search-relatedarticle": "ଯୋଡ଼ା",
-       "searcheverything-enable": "ସବୁଗୁଡ଼ିକ ନେମସ୍ପେସରେ ଖୋଜିବେ",
        "searchrelated": "ଯୋଡ଼ା",
        "searchall": "ସବୁ",
        "showingresults": "ତଳେ {{PLURAL:$1|'''ଗୋଟିଏ'''  ଫଳାଫଳ|'''$1'''ଟି ଫଳାଫଳ}} ଦେଖାଉଛୁ ଯାହା #'''$2'''ରେ ଆରମ୍ଭ ହୋଇଅଛି ।",
        "prefs-editing": "ସମ୍ପାଦନା",
        "rows": "ଧାଡ଼ି:",
        "columns": "ସ୍ତମ୍ଭସବୁ:",
-       "searchresultshead": "à¬\96à­\8bà¬\9cିବା",
+       "searchresultshead": "à¬\96à­\8bà¬\9cନà­\8dତà­\81",
        "stub-threshold": "<a href=\"#\" class=\"stub\">ଅସମ୍ପୂର୍ଣ ପୃଷ୍ଠା ଲିଙ୍କ</a> ସଜାଣି (ବାଇଟ) ପାଇଁ ସୀମା:",
        "stub-threshold-disabled": "ଅଚଳ କରିଦିଆଯାଇଛି",
        "recentchangesdays": "ନଗଦ ବଦଳରେ ଦେଖାଇବା ପାଇଁ ବାକିଥିବା ଦିନ:",
        "allowemail": "ବାକି ସଭ୍ୟମାନଙ୍କ ଠାରୁ ଆସିଥିବା ଇ-ମେଲ ସଚଳ କରାଇବେ",
        "prefs-searchoptions": "ଖୋଜିବେ",
        "prefs-namespaces": "ନେମସ୍ପେସ",
-       "defaultns": "ନଚେତ ଏହି ନେମସ୍ପେସ ଗୁଡ଼ିକରେ ଖୋଜନ୍ତୁ:",
        "default": "ପୂର୍ବ ନିର୍ଦ୍ଧାରିତ",
        "prefs-files": "ଫାଇଲ",
        "prefs-custom-css": "ମନମୁତାବକ CSS",
        "badsig": "ମୂଳ ସନ୍ତକଟି ଅଚଳ ଅଟେ ।\nHTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।",
        "badsiglength": "ଆପଣଙ୍କ ସନ୍ତକଟି ଖୁବ ଲମ୍ବା ।\nଏହା ବୋଧ ହୁଏ $1 {{PLURAL:$1|ଗୋଟି ଅକ୍ଷର|ଗୋଟି ଅକ୍ଷର}}ରୁ ଅଧିକ ।",
        "yourgender": "ଲିଙ୍ଗ:",
-       "gender-unknown": "ଲà­\81à¬\9aାଯାà¬\87ଥିବା",
-       "gender-male": "ପà­\81ରà­\81ଷ",
-       "gender-female": "ନାରà­\80",
-       "prefs-help-gender": "à¬\87à¬\9aà­\8dà¬\9bାଧିନ: à¬¸à¬«à­\8dà¬\9fà­±à­\87ରରà­\87 à¬²à¬¿à¬\99à­\8dà¬\97ବାà¬\9aà¬\95 à¬¸à¬®à­\8dବà­\8bଧନ à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬¬à­\8dà­\9fବହାର à¬\95ରାଯାà¬\87ଥାà¬\8f à¥¤\nà¬\8fହି à¬¤à¬¥à­\8dà­\9f à¬¸à¬¾à¬§à¬¾à¬°à¬£à¬°à­\87 à¬ªà­\8dରà¬\95ାଶିତ ।",
+       "gender-unknown": "à¬\9cଣାà¬\87ବାà¬\95à­\81 à¬\9aାହà­\87à¬\81 à¬¨à¬¾à¬¹à¬¿à¬\81",
+       "gender-male": "ସà­\87 (ପà­\81ରà­\81ଷ) à¬\89à¬\87à¬\95ିପà­\83ଷà­\8dଠା à¬¸à¬®à­\8dପାଦନା à¬\95ରନà­\8dତି",
+       "gender-female": "ସà­\87 (ନାରà­\80) à¬\89à¬\87à¬\95ିପà­\83ଷà­\8dଠା à¬¸à¬®à­\8dପାଦନା à¬\95ରନà­\8dତି",
+       "prefs-help-gender": "à¬\8fହି à¬ªà¬¸à¬¨à­\8dଦ à¬\87à¬\9aà­\8dà¬\9bାଧà­\80ନ à¥¤\nà¬\86ମର à¬¸à¬«à­\8dà¬\9fୱାର à¬\86ପଣà¬\99à­\8dà¬\95à­\81 à¬¸à¬®à­\8dବà­\8bଧନ à¬\95ଲାବà­\87ଳà­\87 à¬²à¬¿à¬\99à­\8dà¬\97ବାà¬\9aà¬\95 à¬¶à¬¬à­\8dଦ à¬¬à­\8dà­\9fବହାର à¬\95ରିଥାà¬\8f à¥¤\nà¬\8fହି à¬¸à­\82à¬\9aନା à¬¸à¬®à¬¸à­\8dତà­\87 à¬ªà¬¢à¬¼à¬¿à¬ªà¬¾à¬°à¬¿à¬¬à­\87 ।",
        "email": "ଇ-ମେଲ",
        "prefs-help-realname": "ପ୍ରକୃତ ନାମ ଦେବା ଆପଣଙ୍କ ଉପରେ ନିର୍ଭର କରେ ।\nଯଦି ଆପଣ ଏହା ଦିଅନ୍ତି, ତେବେ ଏହା ଆପଣଙ୍କ କାମ ପାଇଁ ଶ୍ରେୟ ଦେବାରେ ବ୍ୟବହାର କରାଯାଇପାରିବ ।",
        "prefs-help-email": "ଇ-ମେଲ ଠିକଣାଟି ଇଚ୍ଛାଧୀନ, କିନ୍ତୁ ଆପଣ ଯଦି ପାସୱାର୍ଡ଼ଟି ଭୁଲିଗଲେ ତାହା ଆଉଥରେ ତିଆରିବା ପାଇଁ ଏହା କାମରେ ଲାଗିବ ।",
        "right-move": "ପୃଷ୍ଠାସବୁ ଘୁଞ୍ଚେଇବା",
        "right-move-subpages": "ପୃଷ୍ଠା ସହିତ ସେମାନଙ୍କର ସାନପୃଷ୍ଠାସବୁକୁ ଘୁଞ୍ଚାଇଦେବେ",
        "right-move-rootuserpages": "ମୂଳ ସଭ୍ୟ ପୃଷ୍ଠାସବୁକୁ ଘୁଞ୍ଚାଇଦେବେ",
+       "right-move-categorypages": "ଶ୍ରେଣୀମାନଙ୍କୁ ଘୁଞ୍ଚାନ୍ତୁ",
        "right-movefile": "ଫାଇଲସବୁକୁ ଘୁଞ୍ଚାଇଦେବେ",
        "right-suppressredirect": "ପୃଷ୍ଠାସବୁକୁ ଘୁଞ୍ଚାଇବା ବେଳେ ମୂଳ ପୃଷ୍ଠାର ଫେରନ୍ତା ପୃଷ୍ଠା ତିଆରି କରିବେ ନାହିଁ",
        "right-upload": "ଫାଇଲ ଅପଲୋଡ଼ କରିବେ",
        "right-reupload-shared": "ବଣ୍ଟାଯାଇଥିବା ସ୍ଥାନୀୟ ମାଧ୍ୟମ ଭଣ୍ଡାରର ଫାଇଲ ଗୁଡ଼ିକ ଭରିଦେବେ",
        "right-upload_by_url": "ଏକ URLରୁ ଫାଇଲ ଅପଲୋଡ଼ କରିବେ",
        "right-purge": "ଥୟ କରିବା ବିନା ପୃଷ୍ଠାର ସାଇଟ ଅସ୍ଥାୟୀ ସ୍ମୃତିକୁ ସତେଜ କରିବେ",
-       "right-autoconfirmed": "ଅଧା-କିଳାଯାଇଥିବା ପୃଷ୍ଠାସବୁକୁ ବଦଳାଇବେ",
+       "right-autoconfirmed": "IP-ସମ୍ବନ୍ଧିତ ରେଟ ଲିମିଟ ଦ୍ୱାରା ପ୍ରଭାବିତ ହେବେନାହିଁ",
        "right-bot": "ଏକ ଆପେଆପେ ହେବା ପ୍ରକ୍ରିୟା ଭାବରେ ଗଣିବେ",
        "right-nominornewtalk": "ଆଲୋଚନା ପୃଷ୍ଠାସବୁରେ ଛୋଟ ଛୋଟ ବଦଳ ହେଲେ ତାହା ନୂଆ ଚିଟାଉ ପଠାଇବ",
        "right-apihighlimits": "API ଖୋଜାର ସର୍ବାଧିକ ସୀମା ବ୍ୟବହାର କରିବେ",
        "right-hideuser": "ସାଧାରଣରୁ ଲୁଚାଇ ଏକ ଇଉଜର ନାମକୁ ଅଟକାଇବେ",
        "right-ipblock-exempt": "IP ଅଟକ, ଆପେଆପେ-ଅଟକ ଓ ସୀମା ଅଟକସବୁକୁ ଅଲଗା ଦିଗଗାମୀ କରିବେ",
        "right-proxyunbannable": "ପ୍ରକ୍ସିର ଆପେଆପେ ହେଉଥିବା ଅଟକସବୁକୁ ଅଲଗା ଦିଗଗାମୀ କରିବେ",
-       "right-unblockself": "ସà­\87ମାନà¬\99à­\8dà¬\95à­\81 à¬\85à¬\9fà¬\95ରà­\81 à¬¬à¬¾à¬¹à¬¾à¬° କରିବେ",
-       "right-protect": "à¬\95ିଳିବା à¬¸à­\8dତରà¬\95à­\81 à¬¬à¬¦à¬³à¬¾à¬\87ବà­\87 à¬\93 à¬\95ିଳାଯାà¬\87ଥିବା à¬ªà­\83ଷà­\8dଠାମାନà¬\99à­\8dà¬\95ର à¬¸à¬®à­\8dପାଦନା à¬\95ରିବà­\87",
+       "right-unblockself": "à¬\9cଣà¬\99à­\8dà¬\95à­\81 à¬\85à¬\9fà¬\95ରà­\81 à¬\9aାଡ଼କରିବେ",
+       "right-protect": "ନିରାପତà­\8dତା à¬¬à¬¢à¬¼à¬¾à¬\87 à¬\95à­\8dà­\9fାସà¬\95à­\87ଡ଼-ନିରାପତà­\8dତା à¬ªà­\83ଷà­\8dଠାମାନà¬\99à­\8dà¬\95à­\81 à¬¬à¬¦à¬³à¬¾à¬¨à­\8dତà­\81",
        "right-editprotected": "କିଳାଯାଇଥିବା ପୃଷ୍ଠାମାନଙ୍କର ସମ୍ପାଦନା କରିବେ (କ୍ୟାସକେଡ଼କରା କିଳଣା ବିନା)",
        "right-editinterface": "ସଭ୍ୟଙ୍କ ଇଣ୍ଟରଫେସ ବଦଳାଇବେ",
        "right-editusercssjs": "ବାକି ସଭ୍ୟମାନଙ୍କର CSS ଓ ଜାଭାସ୍କ୍ରିପ୍ଟ ଫାଇଲ ସବୁକୁ ବଦଳାଇବେ",
        "action-protect": "ଏହି ପୃଷ୍ଠାର କିଳିବା ସ୍ତରକୁ ବଦଳାଇବେ",
        "action-rollback": "ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ ପୃଷ୍ଠାକୁ ବଦଳାଇଥିବା ଶେଷ ସଭ୍ୟଙ୍କ ସମ୍ପାଦନାକୁ ସଙ୍ଗେସଙ୍ଗେ ପୁରାପୁରି ପଛକୁ ଫେରାଇଦେବେ",
        "action-import": "ଆଉ ଏକ ଉଇକିରୁ ଏହି ପୃଷ୍ଠାଟି ଆଣିବେ",
-       "action-importupload": "à¬\8fà¬\95 à¬«à¬¾à¬\87ଲ à¬\85ପଲà­\8bଡ଼ରà­\81 à¬\8fହି à¬ªà­\83ଷà­\8dଠାà¬\9fି ଆଣିବେ",
+       "action-importupload": "à¬\8fà¬\95 à¬«à¬¾à¬\87ଲ à¬\85ପଲà­\8bଡ଼ରà­\81 à¬ªà­\83ଷà­\8dଠାମାନ ଆଣିବେ",
        "action-patrol": "ବାକି ମାନଙ୍କ ବଦଳକୁ ଜଗାଯାଇଥିବା ବଦଳ ବୋଲି ଚିହ୍ନିତ କରିବେ",
        "action-autopatrol": "ଆପଣା ସମ୍ପାଦନାସବୁକୁ ଜଗାଯାଇଛି ବୋଲି ଚିହ୍ନିତ କରିବେ",
        "action-unwatchedpages": "ଦେଖାଯାଇନଥିବା ପୃଷ୍ଠାର ଏକ ତାଲିକା ଦେଖାଇବେ",
        "recentchanges-summary": "ଏହି ପୃଷ୍ଠାରେ ଏହି ଉଇକିରେ ନଗଦ ବଦଳର ନିଘା ରଖିବେ",
        "recentchanges-feed-description": "ଏହି ଉଇକିରେ ଏହି ଫିଡ଼ଟିର ନଗଦ ବଦଳ ଦେଖାଇବେ ।",
        "recentchanges-label-newpage": "ଏହି ସମ୍ପାଦନା ଯୋଗୁଁ ନୂଆ ପୃଷ୍ଠାଟିଏ ତିଆରି ହେଲା",
-       "recentchanges-label-minor": "à¬\8fହା à¬\96à­\81ବ à¬¸à¬¾à¬®à¬¾à¬¨à­\8dà­\9f à¬¸à¬®à­\8dପାଦନାà¬\9fିà¬\8f",
+       "recentchanges-label-minor": "à¬\8fହା à¬\8fà¬\95 à¬¸à¬¾à¬®à¬¾à¬¨à­\8dà­\9f à¬¸à¬®à­\8dପାଦନା",
        "recentchanges-label-bot": "ଏହି ବଦଳଟି ଜଣେ '''ବଟ'''ଙ୍କ ଦେଇ କରାଯାଇଥିଲା",
        "recentchanges-label-unpatrolled": "ଏହି ବଦଳଟିକୁ ଏ ଯାଏଁ ପରଖା ଯାଇନାହିଁ",
-       "rcnotefrom": "'''$2''' ପରର ବଦଳସବୁ ତଳେ ଦିଆଗଲା ('''$1''' ଯାଏଁ ଦେଖାଯାଇଛି) ।",
+       "rcnotefrom": "<strong>$2</strong> ପର ଠାରୁ (<strong>$1</strong> ଯାଏଁ ଏଠାରେ ଅଛି) ସମସ୍ତ ବଦଳ ତଳେ ଦେଖିପାରିବେ:",
        "rclistfrom": "$3 $2ରୁ ଆରମ୍ଭ କରି ନୂଆ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
        "rcshowhideminor": "ଛୋଟମୋଟ ବଦଳ $1",
        "rcshowhideminor-show": "ଦେଖାଇବେ",
        "rc_categories_any": "ଯେ କୌଣସି",
        "rc-change-size-new": "ବଦଳପରେ $1 {{PLURAL:$1|byte|bytes}}",
        "newsectionsummary": "/* $1 */ ନୂଆ ଭାଗ",
-       "rc-enhanced-expand": "ପà­\81ରା à¬¦à­\87à¬\96ାà¬\87ବà­\87 (à¬\9cାଭାସà­\8dà¬\95à­\8dରିପà­\8dà¬\9f à¬¦à¬°à¬\95ାର)",
+       "rc-enhanced-expand": "ସବିଶà­\87ଷ à¬¦à­\87à¬\96ାନà­\8dତà­\81",
        "rc-enhanced-hide": "ବେଶି କଥାସବୁ ଲୁଚାଇଦିଅ",
        "rc-old-title": "ପ୍ରକୃତରେ \"$1\" ଭାବେ ତିଆରି କରାଯାଇକଥିଲା",
        "recentchangeslinked": "ଏଇମାତ୍ର ବଦଳାଯାଇଥିବା ପୃଷ୍ଠାର ଲିଙ୍କ",
        "reuploaddesc": "ଅପଲୋଡ଼କୁ ନାକଚ କରିବେ ଓ ଅପଲୋଡ଼ ଫର୍ମକୁ ଫେରିବେ",
        "upload-tryagain": "ବଦଳିଥିବ ଫାଇଲ ବଖାଣ ପଠାଇବା",
        "uploadnologin": "ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି",
-       "uploadnologintext": "ଫାà¬\87ଲ à¬\85ପଲà­\8bଡ଼ à¬\95ରିବା à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬\86ପଣà¬\99à­\8dà¬\95à­\81 [[Special:UserLogin|ଲà¬\97 à¬\87ନ]] à¬\95ରିବାà¬\95à­\81 à¬ªà¬¡à¬¼à¬¿ବ ।",
+       "uploadnologintext": "à¬\85ପଲà­\8bଡ଼ à¬\95ରିବା à¬ªà¬¾à¬\87à¬\81 $1 à¬\95ରିବାà¬\95à­\81 à¬¹à­\87ବ ।",
        "upload_directory_missing": "ଅପଲୋଡ଼ ସୂଚି ($1)ଟି ମିଳୁନାହିଁ ଓ ୱେବସର୍ଭର ଦେଇ ତିଆରି କରାଯାଇପାରିଲା ନାହିଁ ।",
        "upload_directory_read_only": "ଅପଲୋଡ଼ ସୂଚି ($1)ଟି ସବୁ ୱେବସର୍ଭରରେ ଲେଖାଯାଇ ପାରିବ ନାହିଁ ।",
        "uploaderror": "ଅପଲୋଡ଼ କରିବାରେ ଅସୁବିଧା",
        "license-nopreview": "(ସାଇତିବା ଆଗଦେଖଣା ମିଳୁନାହିଁ)",
        "upload_source_url": "(ଏକ ବୈଧ ସାଧାରଣରେ ଖୋଲାଯାଇପାରୁଥିବା URL)",
        "upload_source_file": "(ଆପଣଙ୍କ କମ୍ପୁଟରରେ ଥିବା ଏକ ଫାଇଲ)‌",
-       "listfiles-summary": "à¬\8fହି à¬¬à¬¿à¬¶à­\87ଷ à¬ªà­\83ଷà­\8dଠାà¬\9fି à¬¸à¬¬à­\81ଯାà¬\95 à¬\85ପଲà­\8bଡ଼ à¬\95ରାଯାà¬\87ଥିବା à¬«à¬¾à¬\87ଲ à¬¦à­\87à¬\96ାà¬\87ଥାà¬\8f à¥¤\nବà¬\9bାହà­\87ବା à¬¬à­\87ଳà­\87 à¬\95à­\87ବଳ à¬¸à¬­à­\8dà­\9fà¬\99à­\8dà¬\95 à¬¦à­\87à¬\87 à¬¨à¬\97ଦ à¬\85ପଲà­\8bଡ଼ à¬\95ରାଯାà¬\87ଥିବା à¬«à¬¾à¬\87ଲ à¬¦à­\87à¬\96ାଯାଇଥାଏ ।",
+       "listfiles-summary": "à¬\8fହି à¬¬à¬¿à¬¶à­\87ଷ à¬ªà­\83ଷà­\8dଠାà¬\9fି à¬\85ପଲà­\8bଡ଼ à¬¹à­\8bà¬\87ଥିବା à¬¸à¬®à¬¸à­\8dତ à¬«à¬¾à¬\87ଲ à¬¦à­\87à¬\96ାଇଥାଏ ।",
        "listfiles_search_for": "ମାଧ୍ୟମ ନାମଟି ଖୋଜିବେ:",
        "imgfile": "ଫାଇଲ",
        "listfiles": "ଫାଇଲ ତାଲିକା",
        "listfiles_size": "ଆକାର",
        "listfiles_description": "ବିବରଣୀ",
        "listfiles_count": "ସଂସ୍କରଣ",
+       "listfiles-latestversion": "ବର୍ତ୍ତମାନର ସଂସ୍କରଣ",
+       "listfiles-latestversion-yes": "ହଁ",
+       "listfiles-latestversion-no": "ନାଁ",
        "file-anchor-link": "ଫାଇଲ",
        "filehist": "ଫାଇଲ ଇତିହାସ",
        "filehist-help": "ଏହା ଫାଇଲଟି ସେତେବେଳେ ଯେମିତି ଦିଶୁଥିଲା ତାହା ଦେଖିବା ପାଇଁ ତାରିଖ/ବେଳା ଉପରେ କ୍ଲିକ କରନ୍ତୁ",
        "unusedtemplateswlh": "ଅନ୍ୟ ସଂଯୋଗ",
        "randompage": "ଯାହିତାହି ପୃଷ୍ଠା",
        "randompage-nopages": "ତଳେ ଥିବା {{PLURAL:$2|ନେମସ୍ପେସ|ନେମସ୍ପେସ}}: $1ରେ ଗୋଟିଏ ବି ପୃଷ୍ଠା ନାହିଁ ।",
+       "randomincategory-selectcategory-submit": "ଯାଆନ୍ତୁ",
        "randomredirect": "ଯାହିତାହି ପୁନପ୍ରେରଣ",
        "randomredirect-nopages": "\"$1\" ନାମରେ ଗୋଟିଏ ବି ପୁନପ୍ରେରଣ ନାହିଁ ।",
        "statistics": "ହିସାବ",
        "pageswithprop-submit": "ଯିବା",
        "doubleredirects": "ଯୋଡ଼ା ପୁନପ୍ରେରଣ",
        "doubleredirectstext": "ଏହି ପୃଷ୍ଠା ବାକି ବହୁବିକଳ୍ପ ପୃଷ୍ଠାମାନଙ୍କ ସହ ଯୋଡ଼ିଥାଏ ।\nପ୍ରତ୍ୟେକ ଧାଡ଼ିରେ ପ୍ରଥମ ଓ ଶେଷ ପୁନପ୍ରେରଣ ସହ ଯୋଡ଼ିବା ଲିଙ୍କ ରହିଥାଏ, ଆହୁରି ମଧ୍ୟ ଏଥିରେ ଦ୍ଵିତୀୟ ପୁନପ୍ରେରଣର ଲକ୍ଷ ସହ ଯୋଡ଼ିବାର ଲିଙ୍କ ଥାଏ , ଯାହାକି ସାଧାରଣତ \"ପ୍ରକୃତ\" ଲକ୍ଷ ପୃଷ୍ଠା ହୋଇଥାଏ, ଯାହାକୁ ପ୍ରଥମ ପୁନପ୍ରେରଣ ପୃଷ୍ଠା ଯୋଡ଼ିଥାଏ ।\n<del>କଟାହୋଇଥିବା</del> ନିବେଶସବୁ ସଜଡ଼ାଗଲା ।",
-       "double-redirect-fixed-move": "[[$1]]à¬\95à­\81 à¬\98à­\81à¬\9eà­\8dà¬\9aାଯାà¬\87à¬\85à¬\9bି à¥¤\nà¬\8fବà­\87 à¬\8fହା [[$2]]à¬\95à­\81 à¬ªà­\81ନପà­\8dରà­\87ରିତ à¬¹à­\8bà¬\87ଥାà¬\8f ।",
-       "double-redirect-fixed-maintenance": "[[$1]] à¬°à­\81 [[$2]] à¬\95à­\81 à¬¦à­\81à¬\87à¬\9fି à¬ªà­\81ନପà­\8dରà­\87ରଣରà­\87 à¬¥à¬¿à¬¬à¬¾ à¬\85ସà­\81ବିଧା à¬¸à­\81ଧାରିଦà­\87ଲà­\81à¬\81 à¥¤",
+       "double-redirect-fixed-move": "[[$1]]à¬\95à­\81 à¬\98à­\81à¬\9eà­\8dà¬\9aାଯାà¬\87à¬\85à¬\9bି à¥¤\nà¬\8fବà­\87 à¬\86ପà­\87 à¬\86ପà­\87 à¬\85ପଡà­\87à¬\9f à¬¹à­\8bà¬\87ଥାà¬\8f à¬\8fବà¬\82 à¬\8fବà­\87 [[$2]]à¬\95à­\81 à¬ªà­\81ନପà­\8dରà­\87ରିତ à¬¹à­\8bà¬\87à¬\9bି ।",
+       "double-redirect-fixed-maintenance": "[[$1]] à¬°à­\81 [[$2]] à¬¯à¬¾à¬\8fà¬\81 à¬¥à¬¿à¬¬à¬¾ à¬¦à­\81à¬\87à¬\9fି à¬\85ନାବଶà­\8dà­\9fà¬\95 à¬ªà­\81ନରà­\8dପà­\8dରà­\87ରଣ à¬°à¬\95à­\8dଷଣାବà­\87à¬\95à­\8dଷଣା à¬\95ଲାବà­\87ଳà­\87 à¬¸à¬\9cାଡ଼ିଦà­\87ଲà­\81 à¥¤",
        "double-redirect-fixer": "ପୁନପ୍ରେରଣ ସୁଧାରକ",
        "brokenredirects": "ଭଙ୍ଗା ପୁନପ୍ରେରଣ",
        "brokenredirectstext": "ତଳଲିଖିତ ପୁନପ୍ରେରଣ ସବୁ ସ୍ଥିତିହିନ ପୃଷ୍ଠାମାନଙ୍କୁ ପୁନପ୍ରେରିତ ହୋଇଥାଏ :",
        "protectedpages-indef": "କେବଳ ଆସିମୀତ କାଳ ପାଇଁ କିଳିବା",
        "protectedpages-cascade": "କିଲାଯାଇଥିବା ପୃଷ୍ଠାସବୁକୁ ଏକାଠି ସଜାଇ ରଖୁଅଛୁଁ",
        "protectedpagesempty": "ଏହି ସବୁ ସଜାଣି ସହ ଗୋଟିଏ ବି ପୃଷ୍ଠା ଏବେ କିଳାଯାଇ ନାହିଁ ।",
+       "protectedpages-timestamp": "ସମୟ",
+       "protectedpages-page": "ପୃଷ୍ଠା",
+       "protectedpages-expiry": "ଅଚଳ ହେବ",
+       "protectedpages-unknown-performer": "ଅଜଣା ସଭ୍ୟ",
        "protectedtitles": "କିଳାଯାଇଥିବା ଶିରୋନାମାମାନ",
        "protectedtitlesempty": "ଏହି ସବୁ ସଜାଣି ସହ ଗୋଟିଏ ବି ପୃଷ୍ଠା ଏବେ କିଳାଯାଇ ନାହିଁ ।",
        "listusers": "ବ୍ୟବହାରକାରୀଙ୍କ ତାଲିକା",
        "deletedcontributions-title": "ଲିଭାଇ ଦିଆଯାଇଥିବା ସଭ୍ୟଙ୍କ ଅବଦାନସମୂହ",
        "sp-deletedcontributions-contribs": "ଅବଦାନସମୂହ",
        "linksearch": "ବାହାର ଲିଙ୍କ ଖୋଜା",
-       "linksearch-pat": "à¬\96à­\8bà¬\9cିବା à¬ªà­\8dରଣାଳà­\80:",
+       "linksearch-pat": "ଖୋଜା ପ୍ରଣାଳୀ:",
        "linksearch-ns": "ନେମସ୍ପେସ:",
-       "linksearch-ok": "à¬\96à­\8bà¬\9cିବା",
+       "linksearch-ok": "à¬\96à­\8bà¬\9cନà­\8dତà­\81",
        "linksearch-text": "\"*.wikipedia.org\" ପରି ୱାଇଲ୍ଡକାର୍ଡ଼ର ବ୍ୟବହାର କରାଯାଇଥାଇ ପାରେ ।\nଏକ ଉଚ୍ଚକୋଟୀର ଡୋମେନ ଲୋଡ଼ା, ଯଥା \"*.org\".<br />\nଅନୁମୋଦିତ {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (ଯଦି କୌଣସି ପ୍ରୋଟୋକଲ ଦିଆଯାଇନଥାଏ ତେବେ ଆପେ ଆପେ http:// ହୋଇଯାଇଥାଏ) ।",
        "linksearch-line": "$1 ଟି $2ରୁ ଯୋଡ଼ାଯାଇଅଛି ।",
        "linksearch-error": "କେବଳ ହୋଷ୍ଟ ନାମର ଆରମ୍ଭରେ ୱାଇଲ୍ଡକାର୍ଡ଼ ଦେଖାଯିବ ।",
        "activeusers-noresult": "ଜଣେ ବି ସଭ୍ୟ ମିଳିଲେ ନାହିଁ ।",
        "listgrouprights": "ସଭ୍ୟ ଗୋଠ ଅଧିକାରସମୂହ",
        "listgrouprights-summary": "ତଳେ ଉଇକି ସ୍ଥିର କରାଯାଇଥିବା ଏକ ଏକ ବ୍ୟବହାରକାରୀ ଗୋଠର ତାଲିକା ଦିଆଯାଇଛି, ସେଥିରେ ସେମାନଙ୍କ ବ୍ୟବହାର ଅଧିକାର ବାବଦରେ ମଧ୍ୟ ଦିଆଯାଇଛି ।\nସେଥିରେ ବୋଧେ [[{{MediaWiki:Listgrouprights-helppage}}|ଅଧିକ ବ୍ୟକ୍ତିଗତ ବିବରଣୀ ଥାଇପାରେ]] ।",
-       "listgrouprights-key": "* <span class=\"listgrouprights-granted\">à¬\85ନà­\81ମà­\8bଦିତ à¬\85ଧିà¬\95ାର</span>\n* <span class=\"listgrouprights-revoked\">ଫà­\87ରାà¬\87 à¬¨à¬¿à¬\86ଯାଇଥିବା ଅଧିକାର</span>",
+       "listgrouprights-key": "* <span class=\"listgrouprights-granted\">à¬\85ନà­\81ମà­\8bଦିର à¬\85ଧିà¬\95ାର</span>\n* <span class=\"listgrouprights-revoked\">à¬\85à¬\9fà¬\95ାଯାଇଥିବା ଅଧିକାର</span>",
        "listgrouprights-group": "ଗୋଠ",
        "listgrouprights-rights": "ଅଧିକାର",
        "listgrouprights-helppage": "Help:ଗୋଠ ଅଧିକାର",
        "listgrouprights-removegroup-self": "{{PLURAL:$2|ଗୋଠଟିଏ|ଗୋଟି ଗୋଠ}} ନିଜ ଖାତାରୁ ହଟାଇବେ: $1",
        "listgrouprights-addgroup-self-all": "ନିଜ ଖାତାରେ ସବୁଯାକ ଗୋଠ ଯୋଡ଼ିବେ",
        "listgrouprights-removegroup-self-all": "ନିଜ ଖାତାରୁ ସବୁଯାକ ଗୋଠ ହଟାଇଦେବେ",
+       "listgrouprights-namespaceprotection-namespace": "ନେମସ୍ପେସ",
+       "listgrouprights-namespaceprotection-restrictedto": "ସଭ୍ୟଙ୍କୁ ସମ୍ପାଦନା ପାଇଁ ଦିଆଯାଇଥିବା ଅଧିକାର",
+       "trackingcategories": "ଶ୍ରେଣୀମାନ ତଦାରଖ କରାଯାଉଛି",
+       "trackingcategories-name": "ନାମ ମେସେଜ କରନ୍ତୁ",
+       "trackingcategories-nodesc": "କୌଣସି ବିବରଣ ନାହିଁ ।",
+       "trackingcategories-disabled": "ଶ୍ରେଣୀ ନିଷ୍କ୍ରିୟ କରାଯାଇଛି",
        "mailnologin": "ଗୋଟିଏ ବି ପଠାଇବା ଠିକଣା ନାହିଁ",
        "mailnologintext": "ଆପଣ ନିଜ [[Special:Preferences|ପସନ୍ଦସବୁ]]ରେ [[Special:UserLogin|ଲଗ ଇନ]] କରିଥିଲେ ଓ ନିଜର ଏକ ସଚଳ ଇ-ମେଲ ଠିକଣା ଥିଲେ ଯାଇ ବାକି ସବୁ ସଭ୍ୟଙ୍କୁ ଇ-ମେଲ ପଠାଇପାରିବେ ।",
        "emailuser": "ଏହି ସଭ୍ୟଙ୍କୁ ଇମେଲ କରିବେ",
        "watchnologin": "ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି",
        "addwatch": "ଦେଖଣାତାଲିକାରେ ଯୋଡ଼ିବେ",
        "addedwatchtext": "\"[[:$1]]\" ପୃଷ୍ଠାଟି ଆପଣଙ୍କ [[Special:Watchlist|ଦେଖଣାତାଲିକା]]ରେ ଯୋଡ଼ିଦିଆଗଲା ।\nଏହି ପୃଷ୍ଠାରେ ଭବିଷ୍ୟତର ଅଦଳ ବଦଳ ଓ ତାହା ସହ ଯୋଡ଼ା ଆଲୋଚନା ପୃଷ୍ଠା ସେଠାରେ ଦିଆଯିବ ।",
+       "addedwatchtext-short": "\"$1\" ପୃଷ୍ଠାଟି ଆପଣଙ୍କ ଦେଖଣାତାଲିକାରେ ଯୋଡ଼ାଗଲା ।",
        "removewatch": "ଦେଖଣା ତାଲିକାରୁ ହଟାଇବେ",
        "removedwatchtext": "\"[[:$1]]\" ପୃଷ୍ଠାଟି [[Special:Watchlist|ଆପଣଙ୍କ ଦେଖଣାତାଳିକା]]ରୁ ହଟାଗଲା ।",
+       "removedwatchtext-short": "\"$1\" ପୃଷ୍ଠାଟି ଆପଣଙ୍କ ଦେଖଣାତାଲିକାରୁ ହଟାଗଲା ।",
        "watch": "ଦେଖିବେ",
        "watchthispage": "ଏହି ପୃଷ୍ଠାଟିକୁ ଦେଖିବେ",
        "unwatch": "ଦେଖନାହିଁ",
        "unwatchthispage": "ଦେଖନ୍ତୁ ନାହିଁ",
        "notanarticle": "ବିଷୟବସ୍ତୁର ପୃଷ୍ଠାଟିଏ ନୁହେଁ",
        "notvisiblerev": "ଜଣେ ଅଲଗା ବ୍ୟବହାରକାରୀଙ୍କ ଦେଇ କରାଯାଇଥିବା ସେଶ ସଂସ୍କରଣଟି ଲିଭାଇଦିଆଗଲା ।",
-       "watchlist-details": "ଆପଣଙ୍କ ଦେଖଣା ତାଲିକାରେ ଆଲୋଚନା ପୃଷ୍ଠାକୁ ଛାଡ଼ି {{PLURAL:$1|$1 ଟି ପୃଷ୍ଠା|$1 ଟି ପୃଷ୍ଠା}} ଅଛି ।",
+       "watchlist-details": "ଆପଣଙ୍କ ଦେଖଣା ତାଲିକାରେ {{PLURAL:$1|$1 ଟି ପୃଷ୍ଠା|$1 ଟି ପୃଷ୍ଠା}} ଅଛି, ଆଲୋଚନା ପୃଷ୍ଠାମାନଙ୍କୁ ଅଲଗା ଗଣାଯାଇନାହିଁ ।",
        "wlheader-enotif": "ଇମେଲ ସୂଚନା ସଚଳ କରାଗଲା ।",
        "wlheader-showupdated": "ଆପଣ ଶେଷଥର ଦେଖିଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକ '''ମୋଟା ଅକ୍ଷର'''ରେ ଦେଖାଯାଉଅଛି ।",
        "wlshowlast": "ଶେଷ $1 ଘଣ୍ଟା $2 ଦିନ $3 ଦେଖାଇବେ",
        "contributions-title": "$1 ପାଇଁ ବ୍ୟବହାରକାରୀଙ୍କ ଦାନ",
        "mycontris": "ଅବଦାନ",
        "contribsub2": "$1 ($2) ପାଇଁ",
+       "contributions-userdoesnotexist": "ଇଉଜର ନାମ \"$1\" ତିଆରି କରାଯାଇ ନାହିଁ ।",
        "nocontribs": "ଏହି ନିର୍ଣ୍ଣାୟକବଳୀ ନିମନ୍ତେ କିଛି ବି ବଦଳ ମେଳ ଖାଇଲା ନାହିଁ ।",
        "uctop": "(ଏବେକାର)",
        "month": "ମାସରୁ (ଓ ତା ଆଗରୁ)",
        "sp-contributions-newbies-sub": "ନୂଆ ଖାତାମାନଙ୍କ ନିମନ୍ତେ",
        "sp-contributions-newbies-title": "ନୂଆ ଖାତାମାନଙ୍କ ନିମନ୍ତେ ସଭ୍ୟ ଅବଦାନ",
        "sp-contributions-blocklog": "ଲଗଟିକୁ ଅଟକାଇଦେବେ",
+       "sp-contributions-suppresslog": "ସଭ୍ୟଙ୍କ ଅବଦାନ ଲୁଚାଯାଇଛି",
        "sp-contributions-deleted": "ଲିଭାଇ ଦିଆଯାଇଥିବା ସଭ୍ୟଙ୍କ ଅବଦାନସମୂହ",
        "sp-contributions-uploads": "ଅପଲୋଡ଼ସବୁ",
        "sp-contributions-logs": "ଲଗସବୁ",
        "sp-contributions-search": "ଅବଦାନ ପାଇଁ ଖୋଜନ୍ତୁ",
        "sp-contributions-username": "ବ୍ୟବହାରକାରୀଙ୍କର IP ଠିକଣା ବା ଇଉଜର ନାମ:",
        "sp-contributions-toponly": "ନଗଦ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
-       "sp-contributions-submit": "à¬\96à­\8bà¬\9cିବା",
+       "sp-contributions-submit": "à¬\96à­\8bà¬\9cନà­\8dତà­\81",
        "whatlinkshere": "ଏଠାରେ ଥିବା ଲିଙ୍କ",
        "whatlinkshere-title": "\"$1\" କୁ ପୃଷ୍ଠା ଲିଙ୍କ",
        "whatlinkshere-page": "ପୃଷ୍ଠା:",
        "blocklist-by": "ଅଟକାଇବା ପରିଛା",
        "blocklist-params": "ଅଟକାଇବା ପାରାମିଟର",
        "blocklist-reason": "କାରଣ",
-       "ipblocklist-submit": "à¬\96à­\8bà¬\9cିବା",
+       "ipblocklist-submit": "à¬\96à­\8bà¬\9cନà­\8dତà­\81",
        "ipblocklist-localblock": "ସ୍ଥାନୀୟ ଅଟକ",
        "ipblocklist-otherblocks": "ବାକି {{PLURAL:$1|ଗୋଟି ଅଟକ|ଗୋଟି ଅଟକ}}",
        "infiniteblock": "ଅସିମୀତ",
        "tooltip-ca-move": "ଏହି ପୃଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବେ",
        "tooltip-ca-watch": "ଆପଣଙ୍କ ଦେଖାତାଲିକାରେ ଏଇ ପୃଷ୍ଠାଟି ମିଶାଇବେ",
        "tooltip-ca-unwatch": "ନିଜ ଦେଖଣାତାଲିକାରୁ ଏହି ପୃଷ୍ଠାଟି ବାହାର କରିଦେବେ",
-       "tooltip-search": "{{SITENAME}} à¬°à­\87 à¬\96à­\8bà¬\9cିବା",
+       "tooltip-search": "{{SITENAME}} à¬°à­\87 à¬\96à­\8bà¬\9cନà­\8dତà­\81",
        "tooltip-search-go": "ଏହି ଅବିକଳ ନାଆଁଟି ଥିଲେ ସେହି ପୃଷ୍ଠାକୁ ଯିବା",
-       "tooltip-search-fulltext": "ଏହି ଲେଖାଟି ପାଇଁ ପୃଷ୍ଠାସବୁକୁ ଖୋଜିବା",
+       "tooltip-search-fulltext": "ଏ ପୃଷ୍ଠାରେ ଥିବା ଲେଖା ପାଇଁ ପୃଷ୍ଠାମାନ ଖୋଜନ୍ତୁ",
        "tooltip-p-logo": "ପ୍ରଧାନ ପୃଷ୍ଠା",
        "tooltip-n-mainpage": "ପ୍ରଧାନ ପୃଷ୍ଠା",
        "tooltip-n-mainpage-description": "ପ୍ରଧାନ ପୃଷ୍ଠା",
        "pageinfo-length": "ପୃଷ୍ଠା ଲମ୍ବ(ବାଇଟରେ)",
        "pageinfo-article-id": "ପୃଷ୍ଠା ଆଇଡ଼ି",
        "pageinfo-language": "ପୃଷ୍ଠା ବିଷୟବସ୍ତୁର ଭାଷା",
-       "pageinfo-robot-policy": "à¬\96à­\8bà¬\9cିବା à¬\87à¬\9eà­\8dà¬\9cିନ à¬¸à­\8dଥିତି",
-       "pageinfo-robot-index": "ସà­\82à¬\9aà­\80ପତà­\8dର à¬\95ରିହà­\87à¬\89ଥିବା",
-       "pageinfo-robot-noindex": "ସà­\82à¬\9aà­\80ପତà­\8dର à¬\95ରିହà­\87à¬\89ନଥିବା",
+       "pageinfo-robot-policy": "ସà­\8dà­±à­\9fà¬\82à¬\9aାଳà¬\95 (bot) à¬¦à­\8dୱାରା à¬¸à­\82à¬\9aà­\80 à¬¨à¬¿à¬°à­\8dମିତ",
+       "pageinfo-robot-index": "à¬\85ନà­\81ମà­\8bଦିତ",
+       "pageinfo-robot-noindex": "à¬\85ନà­\81ନମà­\8bଦିତ",
        "pageinfo-views": "ଦେଖଣା ସଂଖ୍ୟା",
        "pageinfo-watchers": "ପୃଷ୍ଠା ଦେଖଣାହାରି ସଂଖ୍ୟା",
        "pageinfo-few-watchers": "$1ରୁ କମ {{PLURAL:$1|ଦେଖଣାକାରୀ|ଦେଖଣାକାରୀଗଣ}}",
-       "pageinfo-redirects-name": "ଏହି ପୃଷ୍ଠାକୁ ଲେଉଟାଣି ଅଛି",
+       "pageinfo-redirects-name": "ଏହି ପୃଷ୍ଠା ସହ ସମ୍ବନ୍ଧିତ ପୁନର୍ପ୍ରେରଣ",
        "pageinfo-subpages-name": "ଏହି ପୃଷ୍ଠାରେ ଥିବା ଉପପୃଷ୍ଠା",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirect|redirects}}; $3 {{PLURAL:$3|non-redirect|non-redirects}})",
        "pageinfo-firstuser": "ପୃଷ୍ଠା ତିଆରିକରିଛନ୍ତି",
        "svg-long-desc": "SVG ଫାଇଲ, ସାଧାରଣ ମାପ $1 × $2 ପିକ୍ସେଲ, ଫାଇଲ ଆକାର: $3",
        "svg-long-desc-animated": "Animated SVG ଫାଇଲ, ସାଧାରଣ ମାପ $1 × $2 ପିକ୍ସେଲ, ଫାଇଲ ଆକାର: $3",
        "svg-long-error": "ଅବୈଧ SVG ଫାଇଲ: $1",
-       "show-big-image": "ପà­\81ରା à¬¬à¬¡à¬¼ à¬\86à¬\95ାରରà­\87",
+       "show-big-image": "ମà­\82ଳ à¬«à¬¾à¬\87ଲ",
        "show-big-image-preview": "ଏହି ଦେଖଣାର ଆକାର: $1 ।",
        "show-big-image-other": "ବାକି {{PLURAL:$2|ରେଜୋଲୁସନ|ରେଜୋଲୁସନ}}: $1.",
        "show-big-image-size": "$1 × $2 ପିକ୍ସେଲ",
        "newimages-legend": "ଛାଣିବା",
        "newimages-label": "ଫାଇଲ ନାମ (କିମ୍ବା ତାହାର ଏକ ଭାଗ):",
        "noimages": "ଦେଖିବାକୁ କିଛି ନାହିଁ ।",
-       "ilsubmit": "à¬\96à­\8bà¬\9cିବା",
+       "ilsubmit": "à¬\96à­\8bà¬\9cନà­\8dତà­\81",
        "bydate": "ତାରିଖ ଅନୁସାରେ",
        "sp-newimages-showfrom": "$2, $1 ରେ ଆରମ୍ଭ ହେଉଥିବା ନୂଆ ଫାଇଲ ସବୁ ଦେଖାଇବେ",
        "seconds": "{{PLURAL:$1|$1 ସେକେଣ୍ଡ|$1 ସେକେଣ୍ଡ}}",
        "hours-ago": "$1 {{PLURAL:$1|ଘଣ୍ଟା}} ଆଗରୁ",
        "minutes-ago": "$1 {{PLURAL:$1|ମିନିଟ|ମିନିଟ}} ଆଗରୁ",
        "seconds-ago": "$1 {{PLURAL:$1|ସେକେଣ୍ଡ|ସେକେଣ୍ଡ}} ଆଗରୁ",
+       "monday-at": "ସୋମବାର, $1 ବେଳେ",
+       "tuesday-at": "ମଙ୍ଗଳବାର, $1 ବେଳେ",
+       "wednesday-at": "ବୁଧବାର, $1 ବେଳେ",
+       "thursday-at": "ଗୁରୁବାର, $1 ବେଳେ",
+       "friday-at": "ଶୁକ୍ରବାର, $1 ବେଳେ",
+       "saturday-at": "ଶନିବାର, $1 ବେଳେ",
+       "sunday-at": "ରବିବାର, $1 ବେଳେ",
+       "yesterday-at": "ଗତକାଲି, $1 ବେଳେ",
        "bad_image_list": "ଗଢ଼ଣଟି ଏମିତି ହେବ:\n\nକେବଳ (ଯେଉଁ ଧାଡ଼ିଗୁଡ଼ିକ * ରୁ ଆରମ୍ଭ ହୋଇଥାଏ) ସେହି ସବୁକୁ ହିସାବକୁ ନିଆଯିବ ।\nଗୋଟିଏ ଧାଡ଼ିର ପ୍ରଥମ ଲିଙ୍କଟି ଗୋଟିଏ ଖରାପ ଫାଇଲର ଲିଙ୍କ ହୋଇଥିବା ଦରକାର ।\nପ୍ରଥମ ଲିଙ୍କ ପରର ସବୁ ଲିଙ୍କକୁ ନିଆରା ବୋଲି ଧରାଯିବ । ମାନେ, ସେଇସବୁ ପୃଷ୍ଠାଦରେ ଯେଉଁଠି ଫାଇଲଟି ଧାଡ଼ି ଭିତରେ ରହିଥିବ ।",
        "metadata": "ମେଟାଡାଟା",
        "metadata-help": "ଏହି ଫରଦଟିରେ ଗୁଡ଼ାଏ ଅଧିକ କଥା ଅଛି, ବୋଧହୁଏ ଡିଜିଟାଲ କାମେରା କିମ୍ବା ସ୍କାନରରେ ନିଆଯାଇଛି । ଯଦି ଫାଇଲଟି ତାର ମୂଳ ଭାଗଠୁ ବଦଳାଜାଇଥାଏ ତେବେ କିଛି ଅଁଶ ଠିକ ଭାବେ ଦେଖାଯାଇ ନପାରେ ।",
        "exif-locationdest": "ଅବସ୍ଥିତି ଅଙ୍କାଯାଇଛି",
        "exif-locationdestcode": "ଅଙ୍କାଯାଇଥିବା ସ୍ଥାନର କୋଡ଼",
        "exif-objectcycle": "ମାଧ୍ୟମଟି ଦିନର କେତେ ବେଳେ ରଖିବାକୁ ସ୍ଥିର କରାଯାଇଛି",
-       "exif-contact": "ଯୋଗାଯୋଗ ସୂଚନାବଳି",
+       "exif-contact": "ଯୋଗାଯୋଗ ସୂଚନା",
        "exif-writer": "ଲେଖକ",
        "exif-languagecode": "ଭାଷା",
        "exif-iimversion": "IIM ସଂସ୍କରଣ",
        "exif-compression-3": "CCITT ଗୋଠ ୩ ଫାକ୍ସ ଏନକୋଡ଼ିଙ୍ଗ",
        "exif-compression-4": "CCITT ଗୋଠ ୪ ଫାକ୍ସ ଏନକୋଡ଼ିଙ୍ଗ",
        "exif-copyrighted-true": "ସତ୍ଵାଧିକାର ଥିବା",
-       "exif-copyrighted-false": "ପବà­\8dଲିà¬\95 à¬¡à­\8bମà­\87ନ",
+       "exif-copyrighted-false": "à¬\95ପିରାà¬\87à¬\9f à¬¤à¬¥à­\8dà­\9f à¬¦à¬¿à¬\86ଯାà¬\87ନାହିà¬\81",
        "exif-unknowndate": "ଅଜଣା ତାରିଖ",
        "exif-orientation-1": "ସାଧାରଣ",
        "exif-orientation-2": "ଭୂସମାନ୍ତର ଭାବେ ବୁଲାଇଦିଆଯାଇଛି",
        "imgmultipagenext": "ପର ପୃଷ୍ଠା →",
        "imgmultigo": "ଯିବା!",
        "imgmultigoto": "$1 ପୃଷ୍ଠାକୁ ଯିବେ",
+       "img-lang-default": "(ଡିଫଲ୍ଟ ଭାଷା)",
        "ascending_abbrev": "ସାନରୁ ବଡ କ୍ରମରେ",
        "descending_abbrev": "ବଖାଣ",
        "table_pager_next": "ପର ପୃଷ୍ଠା",
        "watchlistedit-raw-done": "ଆପଣଙ୍କ ଦେଖଣା ତାଲିକାଟି ଅପଡେଟ ହେଇଯାଇଛି ।",
        "watchlistedit-raw-added": "{{PLURAL:$1|ନାମଟିଏ|$1 ଗୋଟି ନାମ}} ଯୋଗ କରାଗଲା:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|ନାମଟିଏ|$1 ଗୋଟି ନାମ}} କାଢ଼ିଦିଆଗଲା:",
+       "watchlistedit-clear-titles": "ନାମ:",
        "watchlisttools-view": "ଦରକାରୀ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
        "watchlisttools-edit": "ଦେଖିବା ତାଲିକାଟିକୁ ଦେଖିବେ ଓ ବଦଳାଇବେ",
        "watchlisttools-raw": "ଫାଙ୍କା ଦେଖଣା ତାଲିକାଟିର ସମ୍ପାଦନା କରିବେ",
        "version-hook-name": "ହୁକ ନାମ",
        "version-hook-subscribedby": "କାହା ଦେଇ ମଗାଯାଇଛି",
        "version-version": "(ଭାଗ $1)",
-       "version-license": "ଲାà¬\87ସà­\87ନà­\8dସ",
+       "version-license": "ମିଡ଼ିà¬\86à¬\89à¬\87à¬\95ି à¬¸à­\8dୱତà­\8dà­±",
        "version-ext-license": "ଲାଇସେନ୍ସ",
        "version-ext-colheader-name": "ଏକ୍ସଟେନସନ",
        "version-ext-colheader-version": "ସଂସ୍କରଣ",
        "version-entrypoints": "ନିବେଶ ହେଉଥିବା ସ୍ଥାନର URLଗୁଡିକ",
        "version-entrypoints-header-entrypoint": "ପ୍ରବେଶ ବିନ୍ଦୁ",
        "version-entrypoints-header-url": "ଇଉଆରଏଲ",
+       "redirect-submit": "ଯାଆନ୍ତୁ",
+       "redirect-lookup": "ଖୋଜନ୍ତୁ:",
+       "redirect-value": "ମୂଲ୍ୟ:",
+       "redirect-user": "ସଭ୍ୟ ଆଇଡ଼ି",
+       "redirect-page": "ପୃଷ୍ଠା ଆଇଡ଼ି",
+       "redirect-revision": "ପୃଷ୍ଠା ସଂସ୍କରଣ",
+       "redirect-file": "ଫାଇଲ ନାମ",
+       "redirect-not-exists": "ମୂଳ୍ୟ ମିଳିଲା ନାହିଁ",
        "fileduplicatesearch": "ଏହାର ନକଲ ପୃଷ୍ଠା ଖୋଜିବେ ।",
        "fileduplicatesearch-summary": "ହାସ୍ ମୂଲ୍ୟକୁ ନେଇ ଦୁଇଥର ଥିବା ଫାଇଲ ଖୋଜନ୍ତୁ ।",
        "fileduplicatesearch-legend": "ନକଲ ପାଇଁ ଖୋଜନ୍ତୁ ।",
        "fileduplicatesearch-filename": "ଫାଇଲ ନାମ:",
-       "fileduplicatesearch-submit": "à¬\96à­\8bà¬\9cିବା",
+       "fileduplicatesearch-submit": "à¬\96à­\8bà¬\9cନà­\8dତà­\81",
        "fileduplicatesearch-info": "$1 × $2 pixel<br />ଫାଇଲ ପ୍ରକାର: $3<br />MIME ପ୍ରକାର: $4",
        "fileduplicatesearch-result-1": "\"$1\"ର କୌଣସି ଏକାଭଳି ଥିବା ଫାଇଲ ନାହିଁ ।",
        "fileduplicatesearch-result-n": "\"$1\" ଫାଇଲର {{PLURAL:$2|1 ଗୋଟି ଏକାଭଳି|$2 ଗୋଟି ଏକାଭଳି}} ଫାଇଲ ଅଛି ।",
        "fileduplicatesearch-noresults": "\"$1\" ନାମରେ ଗୋଟିଏ ବି ଫାଇଲ ମିଳିଲା ନାହିଁ ।",
        "specialpages": "ବିଶେଷ ପୃଷ୍ଠା",
+       "specialpages-note-top": "ଲିଜେଣ୍ଡ",
        "specialpages-note": "* ସାଧାରଣ ବିଶେଷ ପୃଷ୍ଠାମାନ ।\n* <span class=\"mw-specialpagerestricted\">କିଳାଯାଇଥିବା ବିଶେଷ ପୃଷ୍ଠାମାନ ।</span>",
        "specialpages-group-maintenance": "ରକ୍ଷଣାବେକ୍ଷଣା ବିବରଣୀ",
        "specialpages-group-other": "ବାକି ବିଶେଷ ପୃଷ୍ଠା",
        "tags-tag": "ଚିହ୍ନ ନାମ",
        "tags-display-header": "ବଦଳ ତାଲିକାରେ ଦେଖଣା",
        "tags-description-header": "ଅର୍ଥର ପୁରା ବିବରଣୀ",
+       "tags-active-header": "ସକ୍ରିୟ କି?",
        "tags-hitcount-header": "ଚିହ୍ନିତ ବଦଳ",
+       "tags-active-yes": "ହଁ",
+       "tags-active-no": "ନାଁ",
        "tags-edit": "ସମ୍ପାଦନା",
        "tags-hitcount": "$1 {{PLURAL:$1|ବଦଳ|ବଦଳସବୁ}}",
        "comparepages": "ବଦଳ ତୁଳନା କରିବେ",
        "dberr-problems": "କ୍ଷମାକରିବେ !  ଏହି ସାଇଟରେ ଟିକେ ବୈଷୟିକ ତ୍ରୁଟି ଦେଖାଦେଇଛି ।",
        "dberr-again": "କିଛି ମିନିଟ ଅପେକ୍ଷା କରିବା ସହ ଆଉ ଥରେ ଲୋଡ କରନ୍ତୁ ।",
        "dberr-info": "(ଡାଟାବେସ ସର୍ଭର ସହ ଯୋଗାଯୋଗ କରିପାରିଲୁ ନାହିଁ: $1)",
+       "dberr-info-hidden": "(ଡାଟାବେସ ସର୍ଭର ସହ ଯୋଗାଯୋଗ କରିପାରିଲୁ ନାହିଁ)",
        "dberr-usegoogle": "ଏହି ସମୟ ଭିତରେ ଆପଣ ଗୁଗଲରେ ଖୋଜି ପାରିବେ ।",
        "dberr-outofdate": "ଜାଣିରଖନ୍ତୁ ଯେ ଆମ ବିଷୟବସ୍ତୁକୁ ନେଇ ସେମାନେ ତିଆରିଥିବା ସୂଚି ବହୁପୁରାତନ ହୋଇପାରେ ।",
        "dberr-cachederror": "ଏହା ଅନୁରୋଧ କରାଯାଇଥିବା ପୃଷ୍ଠାର ଏକ ଆଗରୁ ସାଇତାଥିବା ନକଲ ଓ ସତେଜ ହୋଇ ନଥାଇପାରେ ।",
        "htmlform-selectorother-other": "ବାକି",
        "htmlform-no": "ନାହିଁ",
        "htmlform-yes": "ହଁ",
+       "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 ପୃଷ୍ଠାଟି ଲିଭାଇଦେଲେ",
-       "logentry-delete-restore": "$1 $3 ପୃଷ୍ଠାଟି ପୁନସ୍ଥାପନ କଲେ",
+       "logentry-delete-delete": "$1, $3 ପୃଷ୍ଠାଟି {{GENDER:$2|ଲିଭାଇଦେଲେ}}",
+       "logentry-delete-restore": "$1, $3 ପୃଷ୍ଠାଟି {{GENDER:$2|ପୁନସ୍ଥାପନ କଲେ}}",
        "logentry-delete-event": "$1 $3 ବେଳେ {{PLURAL:$5|ଏକ ଇତିହାସର ଘଟଣାର|$5 ଇତିହାସର ଘଟଣାମାନଙ୍କର}} ଦେଖଣା ବଦଳାଇ ଦେଲେ: $4",
        "logentry-delete-revision": "$1 $3 ପୃଷ୍ଠାରେ {{PLURAL:$5|ସଙ୍କଳନଟିଏର|$5 ସଙ୍କଳନମାନଙ୍କର}} ଦେଖଣା ବଦଳାଇ ଦେଲେ: $4",
        "logentry-delete-event-legacy": "$1 $3 ରେ ଇତିହାସର ଘଟଣାସବୁର ଦେଖଣା ବଦଳାଇଦେଲେ",
        "feedback-close": "ହୋଇଗଲା",
        "feedback-bugcheck": "ବହୁତ ଭଲ ! ଖାଲି ଦେଖିଦିଅନ୍ତୁ ଯେ ଏହା ଆଗରୁ ଥିବା [$1 known bugs] ମଧ୍ୟରୁ ନୁହେଁ ତ ।",
        "feedback-bugnew": "ମୁଁ ଯାଞ୍ଚ କରିଦେଲି । ନୂତନ ଅସୁବିଧାର ବିବରଣ କରନ୍ତୁ ।",
-       "searchsuggest-search": "à¬\96à­\8bà¬\9cିବା",
+       "searchsuggest-search": "à¬\96à­\8bà¬\9cନà­\8dତà­\81",
        "searchsuggest-containing": "ଖୋଜୁଛି...",
        "api-error-badaccess-groups": "ଆପଣଙ୍କୁ ଏହି ଉଇକିରେ ଅପଲୋଡ଼ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ ।",
        "api-error-badtoken": "ଭିତର ଅସୁବିଧା: ଖରାପ ଟୋକନ ।",
index 69f8e48..4a7cb6d 100644 (file)
        "tog-hideminor": "Vaschdegg klääne Bearwaidunge",
        "tog-hidepatrolled": "Vaschdegg gsischdede Ännarunge",
        "tog-extendwatchlist": "Zaisch alle Ännarunge unn ned nur die ledschde",
-       "tog-showtoolbar": "Wergzaisch fas Beawaide zaische (dodezu brauchd's JavaScript)",
+       "tog-showtoolbar": "Wergzaisch fas Schaffe zaische",
        "tog-previewontop": "Vorbligg owwahalwb vum Beaawaidungsfenschda zaische",
        "tog-previewonfirst": "Zaischen Vorbligg baim erschdemol Schaffe",
-       "tog-oldsig": "Voahonneni Unnaschfrid",
-       "tog-uselivepreview": "Uuvazeschada Vorbligg (bneedischd JavaScript) (vasugswais)",
+       "tog-oldsig": "Voahonneni Unnaschrifd",
+       "tog-uselivepreview": "Uuvazeschada Vorbligg (vasugswais)",
        "tog-showhiddencats": "Zaisch vaschdeglde Grubbe",
        "underline-always": "Imma",
        "underline-never": "Gaaned",
        "oct": "Ogd",
        "nov": "Nov",
        "dec": "Dez",
+       "january-date": "$1. Janua",
+       "february-date": "$1. Februa",
+       "march-date": "$1. Meaz",
+       "april-date": "$1. Abril",
+       "may-date": "$1. Mai",
+       "june-date": "$1. Juni",
+       "august-date": "$1. Auguschd",
+       "september-date": "$1. Sebdemba",
+       "october-date": "$1. Ogdowa",
+       "november-date": "$1. Nowemba",
+       "december-date": "$1. Dezemba",
        "pagecategories": "{{PLURAL:$1|Sachgrubb|Sachgrubbe}}",
        "category_header": "Saide inde Sachgrubb „$1“",
        "subcategories": "Unnagrubbe",
        "navigation": "Nawigadzion",
        "and": "&#32;unn",
        "qbfind": "Finne",
-       "qbbrowse": "Duaschschdewere",
-       "qbedit": "Beawaide",
+       "qbbrowse": "Schdewere",
+       "qbedit": "Schaffe",
        "qbpageoptions": "Die Said",
        "qbmyoptions": "Moi Saide",
        "faq": "Ofd gschdeldi Froche",
        "vector-action-protect": "Schidze",
        "vector-action-undelete": "Zriggbringe",
        "vector-view-create": "Õleesche",
-       "vector-view-edit": "Beawaide",
+       "vector-view-edit": "Drõ schaffe",
        "vector-view-history": "Dadaigschischd",
        "vector-view-view": "Lese",
        "vector-view-viewsource": "Gwelltegschd zaische",
        "permalink": "Schdendischa Lingg",
        "print": "Drugge",
        "view": "Ogugge",
-       "edit": "Beawaide",
+       "edit": "Schaffe",
+       "edit-local": "Gugg uff $1",
        "create": "Õleesche",
-       "editthispage": "Die Said beawaide",
+       "editthispage": "Onde Said schaffe",
        "create-this-page": "Mach die Said",
        "delete": "Lesche",
        "deletethispage": "Lesch die Said",
+       "undeletethispage": "Said widdaheaschdelle",
        "undelete_short": "{{PLURAL:$1|ä Ännarung|$1 Ännarunge}} widdaheaschdelle",
        "viewdeleted_short": "Zaisch {{PLURAL:$1|ä gleschdi Ännarung|$1 gleschde Ännarunge}}",
        "protect": "schidze",
        "redirectedfrom": "(Nochgschiggd worre vun $1)",
        "redirectpagesub": "Nochschigg-Said",
        "lastmodifiedat": "Die Said ischs ledschde Mol gännad worre õm $1, õm $2.",
-       "viewcount": "Die Said isch bis jedz {{PLURAL:$1|$1|$1}} mol uffgrufe worre.",
+       "viewcount": "Die Said isch bis jedz {{PLURAL:$1|ämol1|$1 mol}} uffgrufe worre.",
        "protectedpage": "Said schidze",
        "jumpto": "Hubs uff:",
        "jumptonavigation": "Nawigadzion",
        "pool-errorunknown": "Ubkonnde Irrdumm",
        "aboutsite": "Iwwa {{SITENAME}}",
        "aboutpage": "Project:Iwwa",
-       "copyright": "Was do drin schded isch unna $1 vafieschba.",
+       "copyright": "Was do drin schded isch unna $1 vafieschba, wonn nedd onnaschda vameagd.",
        "copyrightpage": "{{ns:project}}:Urhewareschd",
        "currentevents": "Aggduelli Gscheniss",
        "currentevents-url": "Project: Leschdi Gschneniss",
        "disclaimers": "Hafdungsausschluß",
        "disclaimerpage": "Project:Impressum",
-       "edithelp": "Unaschdizung fas Beawaide",
+       "edithelp": "Unaschdizung fas Schaffe",
        "mainpage": "Schdadsaid",
        "mainpage-description": "Schdadsaid",
        "policy-url": "Project:Grundsedz",
        "ok": "Alla gud",
        "retrievedfrom": "Vun \"$1\"",
        "youhavenewmessages": "Du hoschd $1 ($2).",
-       "newmessagesdifflinkplural": "ledschdi {{PLURAL:$1|Ännarung|Ännarunge}}",
+       "newmessagesdifflinkplural": "ledschdi {{PLURAL:$1|Ännarung|999=Ännarunge}}",
        "youhavenewmessagesmulti": "Do hoschd ä Nochrischd grischd: $1",
-       "editsection": "beawaide",
-       "editold": "beawaide",
+       "editsection": "schaffe",
+       "editold": "schaffe",
        "viewsourceold": "Gwelltegschd õgugge",
-       "editlink": "beawaide",
+       "editlink": "schaffe",
        "viewsourcelink": "Gwell õgugge",
        "editsectionhint": "Deel ännare: $1",
        "toc": "Inhald",
        "nosuchspecialpage": "Schbezialsaid hodds nedd",
        "error": "Irrdumm",
        "databaseerror": "Daadebongg-Irrdumm",
+       "databaseerror-error": "Fehla: $1",
+       "laggedslavemode": "<strong>Baßma uff:</strong> Die Said hodd viellaischd die ledschde Ännarunge nedd.",
        "readonly": "Daadebongg blogiead",
        "missing-article": "De Tegschd fa „$1“ $2 isch inde Daadebongg nedd gfunne worre.\n\nNoamalawees heeßd des, dass die Said gleschd worre isch.\n\nWonnse des awwa nedd isch, hoschd villaischdn Irdumm inde Daadebongg gfunne.\nBidde meldsm [[Special:ListUsers/sysop|Adminischdrador]], un gebbde URL dzu õ.",
        "missingarticle-rev": "(Ausgawenumma#: $1)",
        "virus-unknownscanner": "Uubekonnda Viresucha:",
        "welcomeuser": "Willkumme, $1!",
        "yourname": "Middawaidanõme:",
+       "userlogin-yourname": "Middawaida",
+       "userlogin-yourname-ph": "Gebb doin Nome oi",
+       "createacct-another-username-ph": "Middawaida",
        "yourpassword": "Kennword:",
+       "userlogin-yourpassword": "Password",
+       "userlogin-yourpassword-ph": "Gebb doi Password oi",
+       "createacct-yourpassword-ph": "Gebbä Password oi",
        "yourpasswordagain": "Kennword nomol oigewe:",
+       "createacct-yourpasswordagain": "Password bschdedische",
+       "createacct-yourpasswordagain-ph": "Bschdedisch doi Password",
        "remembermypassword": "Moi Kennword uffm Brausa merge (hegschdns fa $1 {{PLURAL:$1|Daach|Daach}})",
        "login": "Õmelde",
        "nav-login-createaccount": "Õmelde / Kondo õleesche",
        "userloginnocreate": "Oilogge",
        "logout": "Uffhere",
        "userlogout": "Uffhere",
+       "userlogin-noaccount": "Hoschd kä Kondo?",
        "nologin": "Hoschd noch kä Kondo? $1",
        "nologinlink": "E Kondo õleesche",
        "createaccount": "Kondo õleesche",
        "updated": "(Gännad)",
        "note": "'''Hiwes:'''",
        "previewnote": "'''Deng'g drõõ, dasses nua e Vorschau isch.'''\nDoi Ännarunge sinn noch nedd gschbaischadd worre!",
-       "editing": "Õm $1 beawaide",
+       "editing": "Õm $1 schaffe",
        "creating": "Magsch $1",
-       "editingsection": "$1 beawaide (de Deel)",
-       "editingcomment": "$1 beawaide (de Deel)",
+       "editingsection": "$1 schaffe (Deel)",
+       "editingcomment": "$1 schaffe (Deel)",
        "editconflict": "Schdraid ums Ännare: $1",
        "yourtext": "Doin Tegschd",
        "storedversion": "Gschbaischerdi Version",
        "revdelete-show-file-submit": "Ja",
        "revdelete-hide-image": "Vaschdegglde Inhald",
        "revdelete-hide-name": "Vaschdeggls",
-       "revdelete-hide-comment": "Vaschdeggls Resimee",
-       "revdelete-hide-user": "Vaschdeggl Middawaidanome/IP",
+       "revdelete-hide-comment": "Ännas Resimee",
+       "revdelete-hide-user": "Middawaidanome/IP-Address",
        "revdelete-radio-same": "(dudo nix ännare)",
-       "revdelete-radio-set": "Ja",
-       "revdelete-radio-unset": "",
+       "revdelete-radio-set": "Vaschdegld",
+       "revdelete-radio-unset": "Sischdba",
        "revdelete-log": "Grund:",
        "revdelete-submit": "Uff die {{PLURAL:$1|gewehld Asugab|gewehldi Ausgawe}} owende",
        "revdel-restore": "Sischdbakaid ännare",
        "shown-title": "Zaisch $1 {{PLURAL:$1|Eagewnis}} bro Said",
        "viewprevnext": "Gugg ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Dohods ä Said \"[[:$1]]\".'''",
-       "searchmenu-new": "'''Mach die Said „[[:$1]]“ im Wiki.'''",
+       "searchmenu-new": "<strong>Mach die Said „[[:$1]]“ im Wiki!</strong> {{PLURAL:$2|0=|Gugg a uffde Said, wu middoina Such gfunne worre isch.|Gugg a uffde gfunnene Sucheagewnis.}}",
        "searchprofile-articles": "Inhald",
-       "searchprofile-project": "Hilf- un Brojegdsaide",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alles",
        "searchprofile-advanced": "Foadgschridde",
        "searchprofile-articles-tooltip": "In $1 gugge",
-       "searchprofile-project-tooltip": "In $1 gugge",
        "searchprofile-images-tooltip": "Gugg noch Bilda",
        "searchprofile-everything-tooltip": "Such iwwaraal (a wuma dischbedierd)",
        "searchprofile-advanced-tooltip": "Gugg in õnnare Nõmensreum",
        "search-section": "(Abschnidd $1)",
        "search-suggest": "Hoschd gemäänd: $1",
        "search-interwiki-caption": "Schweschterprojekt",
-       "search-interwiki-default": "$1 Ergebnis:",
+       "search-interwiki-default": "Eagewnis vun $1:",
        "search-interwiki-more": "(meh)",
        "search-relatedarticle": "Vawond",
        "searcheverything-enable": "Gugg iwwaraal",
        "default": "Schdondad",
        "youremail": "E-Mail:",
        "username": "{{GENDER:$1|Middawaida}}:",
-       "uid": "{{GENDER:$1|Middawaida}}-Numma:",
        "prefs-memberingroups": "{{GENDER:$2|Middglied}} vun {{PLURAL:$1|Grubb|Grubbe}}:",
        "yourrealname": "Birschalischa Nõme:",
        "yourlanguage": "Schbrooch:",
        "yournick": "Naiji Unnaschfrid",
-       "yourgender": "Gschleschd:",
-       "gender-unknown": "Ghoim gkalde",
-       "gender-male": "Männlisch",
-       "gender-female": "Waiblisch",
+       "yourgender": "Wasfa'ä Gschleschd bischdn?",
+       "gender-unknown": "Do saach isch nix",
+       "gender-male": "Isch binnen Monn",
+       "gender-female": "Isch binä Fraa",
        "prefs-help-email": "E-mail muss ned soi, awwa wead fas naijsedze vum Kennwoad bneedischd, wonns vagesse hoschd.",
        "prefs-help-email-others": "Konschd a wehle, ob õnnare disch iwwan Lingg uff doina Dischbedier-Said õschbresche kennen.\nDoi Address werd ned gzaischd, wõnse midda babbln.",
        "prefs-diffs": "Unaschied",
        "right-undelete": "Said widdaheaschdelle",
        "newuserlogpage": "Naijõmeldungs-Logbuch",
        "rightslog": "Middawaidareschd-Logbuch",
-       "action-edit": "die Said beawaide",
+       "action-edit": "onde Said schaffe",
        "nchanges": "$1 {{PLURAL:$1|Ännarung|Ännarunge}}",
        "recentchanges": "Ledschdi Ännarunge",
        "recentchanges-legend": "Wehl ä Õzaisch fa die ledschde Ännarunge",
        "recentchanges-label-minor": "S'ische glenni Beawaidung",
        "recentchanges-label-bot": "Ännarunge duaschn Bod",
        "recentchanges-label-unpatrolled": "Die Ännarung isch noch nedd iwwabriefd worre",
-       "rcnotefrom": "Unne sinn Ännarunge said '''$2''' (bis '''$1''').",
+       "rcnotefrom": "Unne sinn Ännarunge said <strong>$2<-strong> (bis <strong>$1<-strong>).",
        "rclistfrom": "Zaisch die ledschde Ännarunge ab $3 $2",
        "rcshowhideminor": "Glenni Ännarunge $1",
        "rcshowhidebots": "Bots $1",
        "randompage": "Irschndn Adiggl",
        "statistics": "Schdadischdigge",
        "statistics-pages": "Saide",
-       "brokenredirects-edit": "beawaide",
+       "brokenredirects-edit": "schaffe",
        "brokenredirects-delete": "lesche",
        "withoutinterwiki-submit": "Zaische",
        "nbytes": "$1 {{PLURAL:$1|Byte|Bytes}}",
        "ncategories": "$1 {{PLURAL:$1|Sachgrubb|Sachgrubbe}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
        "nlinks": "$1 {{PLURAL:$1|Lingg|Linggs}}",
-       "nmembers": "$1 {{PLURAL:$1|Middawaida|Middawaida}}",
+       "nmembers": "$1 {{PLURAL:$1|Oidraach|Oidrääch}}",
        "nrevisions": "$1 {{PLURAL:$1|Ännarung|Ännarunge}}",
        "nimagelinks": "Used on $1 {{PLURAL:$1|Said|Saide}}",
        "ntransclusions": "oigsedzd uff $1 {{PLURAL:$1|Said|Saide}}",
        "booksources-go": "Geh",
        "log": "Logbischa",
        "allpages": "Alle Saide",
-       "alphaindexline": "vun $1 bis $2",
        "prevpage": "Voriche Said ($1)",
        "allpagesfrom": "Saide aazaische wu aafange mid:",
        "allpagesto": "Saide aazaische wu ufhere mid:",
        "watch": "Beowachde",
        "watchthispage": "Die Said beowachde",
        "unwatch": "Nemme beowachde",
-       "watchlist-details": "S hodd {{PLURAL:$1|$1 Said|$1 Saide}} uff doina Beowachdungslischd, Dischbediersaide zeeln nedd.",
+       "watchlist-details": "S hodd {{PLURAL:$1|$1 Said|$1 Saide}} uff doina Beowachdungslischd, Dischbediersaide zeeln nedd gdrennd.",
        "wlshowlast": "Die ledschde $1 Schdunnd $2 Daach $3 zaische",
        "watchlist-options": "Meschlischkaide vunde Beowachdungslischd",
        "watching": "Beowachde ...",
        "protect_expiry_old": "Zaidraum licht in de Vergangehääd.",
        "protect-text": "Du kannscht de Schutzstatus vun de Said '''$1''' aagucke un ännere.",
        "protect-locked-access": "Doi Kondo hodd kä Reschd um de Schudzsdadus vunna Said zu ännare.\nDo hodds die Oischdellunge vunde Said '''$1''':",
-       "protect-cascadeon": "Die Said isch gschizd, wail se {{PLURAL:$1|zu derre Said ghert|zu denne Saide ghert}}, wu e Kaskadesperrung gelt.\nDer Schutzstatus vun derre Said kannscht ännere, awwer des hot kää Aifluss uff d Kaskadesperrung.",
+       "protect-cascadeon": "Die Said isch gschizd, wail se {{PLURAL:$1|zu derre Said kead|zu denne Saide kead}}, wuä Kaskadeschberrung gild.\nÄnnarunge vum Saideschudz hodd awwa kän Oifluß uff die Kaskadeschberrung.",
        "protect-default": "Alle Middawaida erlauwe",
        "protect-fallback": "Bloß fa Laid mid \"$1\" Bereschdischung",
        "protect-level-autoconfirmed": "Naiji un nedd õgmeld Middawaida schberre",
        "protect-cantedit": "Du kannscht de Schutzstatus vun derre Said nit ännere, wail Du nid d Berechdichung dezu hoscht.",
        "restriction-type": "Berechdichung:",
        "restriction-level": "Schudsewene:",
-       "restriction-edit": "Beawaide",
+       "restriction-edit": "Schaffe",
        "restriction-move": "Verschiewe",
        "undelete": "Widderherschdelle",
        "undeletebtn": "Widderherschdelle",
        "tooltip-pt-login": "Du konnschd disch õmelde, awwa mugschd ned",
        "tooltip-pt-logout": "Uffhere",
        "tooltip-ca-talk": "Iwwa d Inhaldssaid dischbediere",
-       "tooltip-ca-edit": "Du konnschd die Said beawaide.\nBidde nemmde Vorschau-Gnobb vorm Schbaischare",
+       "tooltip-ca-edit": "Du konnschd onde Said schaffe.\nBidde nemmde Vorschau-Gnobb vorm Schbaischare",
        "tooltip-ca-addsection": "N'naije Abschnidd õleche",
        "tooltip-ca-viewsource": "Die Said isch gschizd. Du konnschdda de Gwelltegschd õgugge.",
        "tooltip-ca-history": "Ledschdi Ausgawe vunde Said",
        "file-nohires": "Ke heheri Ufflesung vafieschba.",
        "svg-long-desc": "SVG-Datei, Grundgreß $1 × $2 Pixels, Dadaigreß: $3",
        "show-big-image": "Uaschbringlischi Dadai",
-       "showhidebots": "(Bots $1)",
        "ilsubmit": "Such",
        "bad_image_list": "Uffbau: bloß Zaile, wu midm * õfonge werren briggsischdischd.\nDe erschd Lingg mussn Lingg zu änna uuerwinschde Dadai soi.\nÕnnare Linggs inde glaische Zail werren als Ausnõhm gnumme, des heesd, Saide, wu inde Dadai vorkumme dirfn.",
        "metadata": "Medadaade",
        "namespacesall": "alle",
        "monthsall": "alle",
        "watchlisttools-view": "Die wischdische Ännarunge õgugge",
-       "watchlisttools-edit": "Beowachdunglischd õgugge un beawaide",
-       "watchlisttools-raw": "Im große Tegschdfeld beawaide",
+       "watchlisttools-edit": "Beowachdunglischd õgugge un drõ schaffe",
+       "watchlisttools-raw": "Im große Tegschdfeld schaffe",
        "duplicate-defaultsort": "'''Baßma uff:''' De Schlissl \"$2\" dudde frijare Schlissl \"$1\" iwwaschraiwe.",
        "specialpages": "Schbezialsaide",
        "specialpages-group-other": "Onare bsundare Saide",
index 5c6e497..380ea15 100644 (file)
        "category_header": "Strony w kategorii „$1”",
        "subcategories": "Podkategorie",
        "category-media-header": "Pliki w kategorii „$1”",
-       "category-empty": "''Obecnie w tej kategorii brak stron oraz plików.''",
-       "hidden-categories": "{{PLURAL:$1|Ukryta kategoria|Ukryte kategorie|Ukrytych kategorii}}",
+       "category-empty": "<em>Obecnie w tej kategorii brak stron oraz plików.</em>",
+       "hidden-categories": "{{PLURAL:$1|Ukryta kategoria|Ukryte kategorie}}",
        "hidden-category-category": "Ukryte kategorie",
        "category-subcat-count": "{{PLURAL:$2|Ta kategoria ma tylko jedną podkategorię.|Poniżej wyświetlono $1 spośród wszystkich $2 podkategorii tej kategorii.}}",
        "category-subcat-count-limited": "Ta kategoria ma {{PLURAL:$1|1 podkategorię|$1 podkategorie|$1 podkategorii}}.",
        "vector-view-view": "Czytaj",
        "vector-view-viewsource": "Tekst źródłowy",
        "actions": "Działania",
+       "vector-more-actions": "Więcej",
        "namespaces": "Przestrzenie nazw",
        "variants": "Warianty",
        "navigation-heading": "Menu nawigacyjne",
        "unexpected": "Nieoczekiwana wartość „$1”=„$2”.",
        "formerror": "Błąd – nie można wysłać formularza",
        "badarticleerror": "Dla tej strony ta operacja nie może być wykonana.",
-       "cannotdelete": "Strona lub plik „$1” nie mogą zostać usunięte.\nMożliwe, że zostały już usunięte przez kogoś innego.",
-       "cannotdelete-title": "Nie można usunąć strony „$1”.",
+       "cannotdelete": "Nie można usunąć strony lub pliku „$1”.\nMożliwe, że zostało to już zrobione przez kogoś innego.",
+       "cannotdelete-title": "Strona „$1” nie może być usunięta.",
        "delete-hook-aborted": "Usuwanie przerwane przez hak.\nPrzyczyna nieokreślona.",
        "no-null-revision": "Nie można utworzyć zerowej wersji strony \"$1\"",
        "badtitle": "Niepoprawny tytuł",
        "node-count-exceeded-category-desc": "Kategoria dla stron, na których przekroczono liczbę węzłów.",
        "node-count-exceeded-warning": "Strona przekroczyła liczbę węzłów",
        "expansion-depth-exceeded-category": "Strony z przekroczoną głębokością rozbudowy",
+       "expansion-depth-exceeded-category-desc": "Kategoria dla stron, na których przekroczona jest głębokość rozbudowy.",
        "expansion-depth-exceeded-warning": "Strona przekroczyła głębokość rozbudowy",
        "parser-unstrip-loop-warning": "Wykryto nieskończoną pętlę",
        "parser-unstrip-recursion-limit": "Przekroczono maksymalną głębokość zagnieżdżania ($1)",
        "currentrev": "Aktualna wersja",
        "currentrev-asof": "Aktualna wersja na dzień $1",
        "revisionasof": "Wersja z $1",
-       "revision-info": "Wersja $2 z dnia $1",
+       "revision-info": "Wersja z dnia $1 autorstwa {{GENDER:$6|$2}}$7",
        "previousrevision": "← poprzednia wersja",
        "nextrevision": "następna wersja →",
        "currentrevisionlink": "przejdź do aktualnej wersji",
        "searchmenu-exists": "* Strona '''[[$1]]'''",
        "searchmenu-new": "<strong>Utwórz stronę „[[:$1]]” na tej wiki!</strong> {{PLURAL:$2|0=|Zobacz też stronę z wynikami wyszukiwania.|Zobacz też wyniki wyszukiwania.}}",
        "searchprofile-articles": "Strony",
-       "searchprofile-project": "Strony pomocy i projektu",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Wszystko",
        "searchprofile-advanced": "Zaawansowane",
        "searchprofile-articles-tooltip": "Szukanie w przestrzeni nazw $1",
-       "searchprofile-project-tooltip": "Szukanie w przestrzeniach nazw $1",
        "searchprofile-images-tooltip": "Szukanie plików",
        "searchprofile-everything-tooltip": "Szukanie w całej zawartości (także strony dyskusji)",
        "searchprofile-advanced-tooltip": "Szukanie w wybranych przestrzeniach nazw",
        "search-interwiki-default": "Wyniki od $1:",
        "search-interwiki-more": "(więcej)",
        "search-relatedarticle": "Pokrewne",
-       "searcheverything-enable": "Szukaj we wszystkich przestrzeniach nazw",
        "searchrelated": "pokrewne",
        "searchall": "wszystkie",
        "showingresults": "Poniżej znajduje się lista {{PLURAL:$1|z '''1''' wynikiem|'''$1''' wyników}}, rozpoczynając od wyniku numer '''$2'''.",
        "powersearch-togglelabel": "Zaznacz",
        "powersearch-toggleall": "wszystko",
        "powersearch-togglenone": "nic",
+       "powersearch-remember": "Zapamiętaj wybór dla kolejnych wyszukiwań",
        "search-external": "Wyszukiwanie zewnętrzne",
        "searchdisabled": "Wyszukiwanie w {{GRAMMAR:MS.lp|{{SITENAME}}}} zostało wyłączone.\nW międzyczasie możesz skorzystać z wyszukiwania Google.\nJednak informacje o treści {{GRAMMAR:D.lp|{{SITENAME}}}} mogą być w Google nieaktualne.",
        "search-error": "Wystąpił błąd podczas wyszukiwania:$1",
        "prefs-personal": "Dane użytkownika",
        "prefs-rc": "Ostatnie zmiany",
        "prefs-watchlist": "Obserwowane",
-       "prefs-watchlist-days": "Liczba dni widocznych na liście obserwowanych",
+       "prefs-watchlist-days": "Liczba dni widocznych na liście obserwowanych:",
        "prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|dzień|dni}}",
        "prefs-watchlist-edits": "Liczba edycji pokazywanych w rozszerzonej liście obserwowanych:",
        "prefs-watchlist-edits-max": "Maksymalnie 1000",
        "allowemail": "Zgadzam się, by inni użytkownicy mogli przesyłać do mnie e‐maile",
        "prefs-searchoptions": "Wyszukiwanie",
        "prefs-namespaces": "Przestrzenie nazw",
-       "defaultns": "Albo przeszukuj przestrzenie nazw:",
        "default": "domyślnie",
        "prefs-files": "Pliki",
        "prefs-custom-css": "własny CSS",
        "recentchanges-label-unpatrolled": "Ta edycja nie została jeszcze sprawdzona",
        "recentchanges-label-plusminus": "Zmieniony rozmiar strony (liczba bajtów)",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "(zobacz też [[Special:NewPages|listę nowych stron]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zobacz też [[Special:NewPages|listę nowych stron]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Poniżej pokazano zmiany wykonane po '''$2''' (nie więcej niż '''$1''' pozycji).",
        "rclistfrom": "Pokaż nowe zmiany od $3 $2",
        "trackingcategories-name": "Nazwa komunikatu",
        "trackingcategories-desc": "Kryteria włączenia kategorii",
        "noindex-category-desc": "Ta strona nie jest indeksowana przez roboty, ponieważ ma wpisane magiczne słowo <code><nowiki>__NOINDEX__</nowiki></code> i znajduje się w przestrzeni nazw, w której ta flaga jest dozwolona.",
+       "index-category-desc": "Na stronie znajduje się magiczne słowo <code><nowiki>__INDEX__</nowiki></code> (i strona znajduje się w przestrzeni nazw, w której jest ono dozwolone), więc jest indeksowana przez wyszukiwarki nawet wtedy, gdy normalnie by się to nie działo.",
        "post-expand-template-inclusion-category-desc": "Po rozwinięciu wszystkich szablonów, rozmiar strony jest większe niż <code>$wgMaxArticleSize</code>, więc niektóre szablony nie zostały rozwinięte.",
+       "post-expand-template-argument-category-desc": "Po rozwinięciu argumentu szablonu (coś w potrójnych nawiasach, np. <code>{{{Foo}}}</code>) długość strony przekracza <code>$wgMaxArticleSize</code>.",
        "expensive-parserfunction-category-desc": "Na stronie używanych jest zbyt wiele wymagających funkcji parsera (takich jak <code>#ifexist</code>). Więcej informacji na stronie [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "Kategoria dodawana do stron zawierających nieprawidłowe odwołania do plików (odwołania do nieistniejących plików).",
        "hidden-category-category-desc": "To jest kategoria z <code><nowiki>__HIDDENCAT__</nowiki></code>, co zapobiega wyświetlaniu jej w sekcji z kategoriami na stronie.",
        "watchnologin": "Nie jesteś zalogowany",
        "addwatch": "Dodaj do listy obserwowanych",
        "addedwatchtext": "Strona „[[:$1|$1]]” została dodana do Twojej [[Special:Watchlist|listy obserwowanych]].\nKażda zmiana treści tej strony lub związanej z nią strony dyskusji zostanie odnotowana na tej liście.",
+       "addedwatchtext-short": "Strona „$1” została dodana do twojej listy obserwowanych.",
        "removewatch": "Usuń z listy obserwowanych",
        "removedwatchtext": "Strona „[[:$1]]” została usunięta z Twojej [[Special:Watchlist|listy obserwowanych]].",
+       "removedwatchtext-short": "Strona „$1” została usunięta z twojej listy obserwowanych.",
        "watch": "Obserwuj",
        "watchthispage": "Obserwuj",
        "unwatch": "Nie obserwuj",
        "movepagetalktext": "Powiązana strona dyskusji, jeśli istnieje, będzie przeniesiona automatycznie, chyba że:\n*niepusta strona dyskusji już jest pod nową nazwą\n*usuniesz zaznaczenie z poniższego pola wyboru\n\nW takich przypadkach treść dyskusji można przenieść tylko ręcznie.",
        "movearticle": "Przeniesienie strony",
        "moveuserpage-warning": "'''Uwaga!''' Masz zamiar przenieść stronę użytkownika. Miej na uwadze, że zostanie przeniesiona tylko strona, a '''nazwa użytkownika pozostanie niezmieniona'''.",
-       "movecategorypage-warning": "<strong>Uwaga!</strong> Masz zamiar przenieść stronę opisu kategorii. Miej na uwadze, że strony, które należały do starej kategorii, <em>nie</em> zostaną przeniesione do nowej.",
+       "movecategorypage-warning": "<strong>Uwaga!</strong> Masz zamiar przenieść stronę kategorii. Miej na uwadze, że strony, które należały do starej kategorii, <em>nie</em> zostaną przeniesione do nowej.",
        "movenologintext": "Przenoszenie stron jest możliwe dopiero po zarejestrowaniu się i [[Special:UserLogin|zalogowaniu]].",
        "movenotallowed": "Nie masz uprawnień do przenoszenia stron.",
        "movenotallowedfile": "Nie masz uprawnień do przenoszenia plików.",
        "tooltip-summary": "Wpisz krótki opis",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* Umieszczony tutaj kod CSS zostanie zastosowany we wszystkich skórkach */",
-       "cologneblue.css": "/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Błękit */",
        "monobook.css": "/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Książka */",
-       "modern.css": "/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Nowoczesna */",
        "vector.css": "/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Wektor */",
        "print.css": "/* Umieszczony tutaj kod CSS wpłynie na wygląd wydruku */",
        "noscript.css": "/* Umieszczony tu arkusz stylów CSS będzie wykorzystywany dla użytkowników z wyłączoną obsługą JavaScript */",
        "group-sysop.css": "/* Umieszczony tutaj kod CSS dotyczyć będzie tylko administratorów */",
        "group-bureaucrat.css": "/* Umieszczony tutaj kod CSS dotyczyć będzie tylko biurokratów */",
        "common.js": "/* Umieszczony tutaj kod JavaScript zostanie załadowany przez każdego użytkownika, podczas każdego ładowania strony. */",
-       "cologneblue.js": "/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Błękit */",
        "monobook.js": "/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Książka */",
-       "modern.js": "/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Nowoczesna */",
        "vector.js": "/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Wektor */",
        "anonymous": "{{PLURAL:$1|Anonimowy użytkownik|Anonimowi użytkownicy}} {{GRAMMAR:D.lp|{{SITENAME}}}}",
        "siteuser": "{{GENDER:$2|użytkownik|użytkowniczka}} {{GRAMMAR:D.lp|{{SITENAME}}}} – $1",
        "pageinfo-category-pages": "Liczba stron",
        "pageinfo-category-subcats": "Liczba podkategorii",
        "pageinfo-category-files": "Liczba plików",
-       "skinname-cologneblue": "Błękit",
        "skinname-monobook": "Książka",
-       "skinname-modern": "Nowoczesna",
        "skinname-vector": "Wektor",
        "markaspatrolleddiff": "oznacz edycję jako „sprawdzoną”",
        "markaspatrolledtext": "Oznacz tę stronę jako „sprawdzoną”",
        "nextdiff": "następna edycja →",
        "mediawarning": "'''Uwaga!''' Plik w tym formacie może zawierać złośliwy kod.\nJeśli go otworzysz, możesz zarazić swój system.",
        "imagemaxsize": "Ograniczenie wielkości obrazków:<br /><em>(na stronach opisu plików)</em>",
-       "thumbsize": "Rozmiar miniaturki",
+       "thumbsize": "Rozmiar miniaturki:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|strona|strony|stron}}",
        "file-info": "rozmiar pliku: $1, typ MIME: $2",
        "file-info-size": "$1 × $2 pikseli, rozmiar pliku: $3, typ MIME: $4",
index 64e3008..c258fb7 100644 (file)
        "searchmenu-exists": "'''A-i é na pàgina ciamà \"[[:$1]]\" dzora a costa wiki'''",
        "searchmenu-new": "<strong>Creé la pàgina «[[:$1]]» ansima a costa wiki!</strong> {{PLURAL:$2|0=|Vëdde ëdcò la pàgina trovà con larserca.|Vëdde ëdcò j'arzultà d'arserca trovà.}}",
        "searchprofile-articles": "Pàgine ëd contnù",
-       "searchprofile-project": "Pàgine d'agiut e ëd proget",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tut",
        "searchprofile-advanced": "Avansà",
        "searchprofile-articles-tooltip": "Sërché an $1",
-       "searchprofile-project-tooltip": "Sërché an $1",
        "searchprofile-images-tooltip": "Sërché dj'archivi",
        "searchprofile-everything-tooltip": "Sërché daspërtut (ëdcò ant le pàgine ëd discussion)",
        "searchprofile-advanced-tooltip": "Sërché ant jë spassi nominaj përsonalisà",
        "search-interwiki-default": "Arzultà da $1:",
        "search-interwiki-more": "(ëd pì)",
        "search-relatedarticle": "Corelà",
-       "searcheverything-enable": "Sërché ant tùit jë spassi nominaj",
        "searchrelated": "corelà",
        "searchall": "tuti",
        "showingresults": "Ambelessì-sota a treuva fin a {{PLURAL:$1|'''1'''|'''$1'''}} arzultà, a parte dal nùmer #'''$2'''.",
        "allowemail": "Lassa che j'àutri utent am mando ëd mëssagi ëd pòsta eletrònica",
        "prefs-searchoptions": "Sërca",
        "prefs-namespaces": "Spassi nominaj",
-       "defaultns": "Dësnò, sërché an costi spassi nominaj-sì:",
        "default": "stàndard",
        "prefs-files": "Archivi",
        "prefs-custom-css": "CSS përsonaj",
        "prefs-emailconfirm-label": "Conferma dl'adrëssa ëd pòsta eletrònica:",
        "youremail": "Soa adrëssa ëd pòsta eletrònica:",
        "username": "{{GENDER:$1|Stranòm}}:",
-       "uid": "Identificativ dl'{{GENDER:$1|utent}}:",
        "prefs-memberingroups": "{{GENDER:$2|Mèmber}} {{PLURAL:$1|dla partìa|dle partìe}}:",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "Data ëd registrassion:",
        "recentchanges-label-unpatrolled": "Sta modìfica-sì a l'é pa ancó stàita verificà",
        "recentchanges-label-plusminus": "La taja dla pàgina a l'é cangià d'un nùmer ëd bytes",
        "recentchanges-legend-heading": "'''Legend:'''",
-       "recentchanges-legend-newpage": "(vëdde ëdcò [[Special:NewPages|lista dle pàgine neuve]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vëdde ëdcò [[Special:NewPages|lista dle pàgine neuve]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Ambelessì sota a-i é la lista dle modìfiche da <strong>$2</strong> (mostrà fin-a a <strong>$1</strong>).",
        "rclistfrom": "Mostré le modìfiche a parte da $3 $2",
        "log-title-wildcard": "Sërché ant ij tìtoj ch'as anandio për",
        "showhideselectedlogentries": "Smon-e/stërmé le vos ëd registr selessionà",
        "allpages": "Tute le pàgine",
-       "alphaindexline": "$1 a $2",
        "nextpage": "Pàgina che a-i ven ($1)",
        "prevpage": "Pàgina anans ($1)",
        "allpagesfrom": "Smon-e le pàgine ën partend da:",
index 1212ab8..c2daf16 100644 (file)
        "searchmenu-exists": "'''په دې ويکي يو مخ د \"[[:$1]]\" په نامه دی'''",
        "searchmenu-new": "<strong>په دې ويکي د \"[[:$1]]\" مخ جوړول!</strong> {{PLURAL:$2|0=|See also the page found with your search.|د پلټنو موندل شوې پايلې هم وگورئ.}}",
        "searchprofile-articles": "مېنځپانگيز مخونه",
-       "searchprofile-project": "د لارښود او پروژې مخونه",
        "searchprofile-images": "گڼرسنۍ",
        "searchprofile-everything": "هرڅه",
        "searchprofile-advanced": "پرمختللی",
        "searchprofile-articles-tooltip": "په $1 کې پلټل",
-       "searchprofile-project-tooltip": "په $1 کې پلټل",
        "searchprofile-images-tooltip": "د دوتنو پلټنه",
        "searchprofile-everything-tooltip": "د ټولې مېنځپانگې پلټنه (د خبرو اترو مخونو سره)",
        "searchprofile-advanced-tooltip": "د خپل خوښې په نوم-تشيالونو کې پلټل",
        "search-interwiki-default": "پايلې له $1 څخه:",
        "search-interwiki-more": "(نور)",
        "search-relatedarticle": "اړونده",
-       "searcheverything-enable": "په ټولو نوم-تشيالونو کې پلټل",
        "searchrelated": "اړونده",
        "searchall": "ټول",
        "showingresults": "دلته لاندې تر {{PLURAL:$1|'''1''' پايله|'''$1''' پايلې}} ښکاره شوي پيل له #'''$2''' شوی.",
        "allowemail": "د نورو کارنانو لخوا د برېښليک رالېږل چارن کړه",
        "prefs-searchoptions": "پلټنه",
        "prefs-namespaces": "نوم-تشيالونه",
-       "defaultns": "او يا هم په دغو نوم-تشيالونو کې پلټل:",
        "default": "تلواليز",
        "prefs-files": "دوتنې",
        "prefs-custom-css": "ځاني CSS",
        "prefs-emailconfirm-label": "د برېښليک باورتيا:",
        "youremail": "برېښليک *",
        "username": "{{GENDER:$1|کارن نوم}}:",
-       "uid": "{{GENDER:$1|کارن}} پېژندنه:",
        "prefs-memberingroups": "د {{PLURAL:$1|ډله|ډلې}} {{GENDER:$2|غړی}}:",
        "prefs-registration": "د نومليکنې وخت:",
        "yourrealname": "اصلي نوم:",
        "recentchanges-label-unpatrolled": "دغه سمون تر اوسه پورې نه دی څارل شوی",
        "recentchanges-label-plusminus": "د بايټونو د شمېر له مخې د مخ د بدلون کچه",
        "recentchanges-legend-heading": "'''لنډونونه:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|د نويو مخونو لړليک]] هم وگورئ)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|د نويو مخونو لړليک]] هم وگورئ)",
        "rcnotefrom": "دلته لاندې د <strong>$2</strong> څخه راپدېخوا پېښ شوي بدلونونه راغلي (تر <strong>$1</strong> پورې ښکاري).",
        "rclistfrom": "هغه نوي بدلونونه ښکاره کول چې له $3 $2 نه پيلېږي",
        "rcshowhideminor": "وړې سمونې $1",
        "pageinfo-category-pages": "د مخونو شمېر",
        "pageinfo-category-subcats": "د څېرمه وېشنيزو شمېر",
        "pageinfo-category-files": "د دوتنو شمېر",
-       "skinname-cologneblue": "شين کلون",
        "skinname-monobook": "مونوبوک",
-       "skinname-modern": "نوی",
        "skinname-vector": "وېکټور",
        "markaspatrolleddiff": "دا مخ څارل شوی په نخښه کول",
        "markaspatrolledtext": "دا مخ څارل شوی په نخښه کول",
index e49d587..f5bb154 100644 (file)
        "vector-view-view": "Ler",
        "vector-view-viewsource": "Ver código-fonte",
        "actions": "Ações",
+       "vector-more-actions": "Mais",
        "namespaces": "Espaços nominais",
        "variants": "Variantes",
        "navigation-heading": "Menu de navegação",
        "edit-gone-missing": "Não foi possível atualizar a página.\nEla parece ter sido eliminada.",
        "edit-conflict": "Conflito de edição.",
        "edit-no-change": "A sua edição foi ignorada, uma vez que o texto não sofreu alterações.",
+       "postedit-confirmation-restored": "Esta página foi restaurada.",
        "postedit-confirmation-saved": "Sua edição foi salva",
        "edit-already-exists": "Não foi possível criar uma nova página.\nEla já existia.",
        "defaultmessagetext": "Texto da mensagem padrão",
        "parser-template-recursion-depth-warning": "O limite de profundidade de recursividade de predefinição foi ultrapassado ($1)",
        "language-converter-depth-warning": "O limite de profundidade do conversor de línguas excedeu a ($1)",
        "node-count-exceeded-category": "Páginas em que o total de nós é excedido",
+       "node-count-exceeded-category-desc": "Uma categoria para páginas onde a contagem de nós é ultrapassada.",
        "node-count-exceeded-warning": "A página excedeu o total de nós",
        "expansion-depth-exceeded-category": "Páginas em que a profundidade de expansão é excedida",
+       "expansion-depth-exceeded-category-desc": "Esta é uma categoria para as páginas onde a profundidade de expansão é ultrapassada.",
        "expansion-depth-exceeded-warning": "A página excedeu a profundidade de expansão",
        "parser-unstrip-loop-warning": "Foi detectado um ciclo infinito unstrip",
        "parser-unstrip-recursion-limit": "Limite de recursão do unstrip excedido ($1)",
        "currentrev": "Revisão atual",
        "currentrev-asof": "Edição atual tal como às $1",
        "revisionasof": "Edição das $1",
-       "revision-info": "Edição feita às $1 por $2",
+       "revision-info": "Revisão de $1 por {{GENDER:$6|$2}}$7",
        "previousrevision": "← Edição anterior",
        "nextrevision": "Versão posterior →",
        "currentrevisionlink": "Revisão atual",
        "searchmenu-exists": "<strong>Há uma página com o nome \"[[:$1]]\" neste wiki.</strong> {{PLURAL:$2|0=|Veja também os outros resultados da pesquisa encontrados.}}",
        "searchmenu-new": "<strong>Criar a página \"[[:$1]]\" nesta wiki!</strong>{{PLURAL:$2|0=| Veja também a página encontrada com sua pesquisa.|Veja também os resultados das pesquisas encontradas.}}",
        "searchprofile-articles": "Páginas de conteúdo",
-       "searchprofile-project": "Ajuda e páginas de projeto",
        "searchprofile-images": "Multimídia",
        "searchprofile-everything": "Tudo",
        "searchprofile-advanced": "Avançado",
        "searchprofile-articles-tooltip": "Pesquisar em $1",
-       "searchprofile-project-tooltip": "Pesquisar em $1",
        "searchprofile-images-tooltip": "Pesquisar arquivos",
        "searchprofile-everything-tooltip": "Pesquisar em todo o conteúdo (incluindo páginas de discussão)",
        "searchprofile-advanced-tooltip": "Personalizar os espaços nominais onde pesquisar",
        "search-interwiki-default": "Resultados de $1:",
        "search-interwiki-more": "(mais)",
        "search-relatedarticle": "Relacionado",
-       "searcheverything-enable": "Procurar em todos os espaços nominais",
        "searchrelated": "relacionados",
        "searchall": "todos",
        "showingresults": "A seguir {{PLURAL:$1|é mostrado '''um''' resultado|são mostrados até '''$1''' resultados}}, iniciando no '''$2'''º.",
        "powersearch-togglelabel": "Selecionar:",
        "powersearch-toggleall": "Todos",
        "powersearch-togglenone": "Nenhum",
+       "powersearch-remember": "Lembrar seleção para futuras pesquisas",
        "search-external": "Pesquisa externa",
        "searchdisabled": "A busca em {{SITENAME}} se encontra desativada.\nVocê poderá pesquisar através do Google enquanto isso.\nNote que os índices do sistema de busca externo poderão conter referências desatualizadas a {{SITENAME}}.",
        "search-error": "Ocorreu um erro ao buscar por: $1",
        "allowemail": "Permitir que outros usuários me enviem e-mails",
        "prefs-searchoptions": "Busca",
        "prefs-namespaces": "Espaços nominais",
-       "defaultns": "Caso contrário pesquisar nestes espaços nominais:",
        "default": "padrão",
        "prefs-files": "Arquivos",
        "prefs-custom-css": "CSS personalizada",
        "right-move": "Mover páginas",
        "right-move-subpages": "Mover páginas com as suas subpáginas",
        "right-move-rootuserpages": "Mover páginas raiz de usuários",
+       "right-move-categorypages": "Mover páginas de categorias",
        "right-movefile": "Mover arquivos",
        "right-suppressredirect": "Não criar um redirecionamento do nome antigo quando uma página é movida",
        "right-upload": "Enviar arquivos",
        "action-createpage": "criar páginas",
        "action-createtalk": "criar páginas de discussão",
        "action-createaccount": "criar esta conta de usuário",
+       "action-history": "Ver o histórico desta página",
        "action-minoredit": "marcar esta edição como uma edição menor",
        "action-move": "mover esta página",
        "action-move-subpages": "mover esta página e suas subpáginas",
        "action-move-rootuserpages": "mover páginas raiz de usuários",
+       "action-move-categorypages": "Mover páginas de categorias",
        "action-movefile": "mover este arquivo",
        "action-upload": "enviar este arquivo",
        "action-reupload": "sobrescrever o arquivo existente",
        "recentchanges-label-unpatrolled": "Esta edição ainda não foi patrulhada",
        "recentchanges-label-plusminus": "Alteração no tamanho da página, em bytes",
        "recentchanges-legend-heading": "'''Legenda''':",
-       "recentchanges-legend-newpage": "(veja também a [[Special:NewPages|lista de páginas novas]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veja também a [[Special:NewPages|lista de páginas novas]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Abaixo estão mostradas as alterações desde <strong>$2</strong> (até <strong>$1</strong>).",
        "rclistfrom": "Mostrar as novas alterações a partir das $3 $2",
        "wantedtemplates": "Predefinições pedidas",
        "mostlinked": "Páginas com mais afluentes",
        "mostlinkedcategories": "Categorias com mais membros",
-       "mostlinkedtemplates": "Predefinições com mais afluentes",
+       "mostlinkedtemplates": "Páginas com mais transclusões",
        "mostcategories": "Páginas de conteúdo com mais categorias",
        "mostimages": "Imagens com mais afluentes",
        "mostinterwikis": "Páginas com mais interwikis",
        "protectedpages-timestamp": "Data e hora",
        "protectedpages-page": "Página",
        "protectedpages-expiry": "Expira",
-       "protectedpages-performer": "Protegendo usuário",
+       "protectedpages-performer": "Usuário que protegeu",
        "protectedpages-params": "Parâmetros de proteção.",
        "protectedpages-reason": "Motivo",
        "protectedpages-unknown-timestamp": "Desconhecido",
        "protectedpages-unknown-performer": "Usuário desconhecido",
        "protectedtitles": "Títulos protegidos",
-       "protectedtitles-summary": "Está página lista os títulos já protegidos desde a criação. Para ver a lista de páginas existentes que estão protegidas, consulte [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+       "protectedtitles-summary": "Esta página lista títulos cuja criação está impossibilitada. Para ver uma lista de páginas protegidas, consulte [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Neste momento, nenhum dos títulos está protegido com estes parâmetros.",
        "listusers": "Lista de usuários",
        "listusers-editsonly": "Mostrar apenas usuários com edições",
        "listgrouprights-removegroup-self": "Pode remover {{PLURAL:$2|grupo|grupos}} da própria conta: $1",
        "listgrouprights-addgroup-self-all": "Pode adicionar todos os grupos à própria conta",
        "listgrouprights-removegroup-self-all": "Pode remover todos os grupos da própria conta",
+       "listgrouprights-namespaceprotection-header": "Restrições de namespace",
+       "listgrouprights-namespaceprotection-namespace": "Namespace",
+       "listgrouprights-namespaceprotection-restrictedto": "Direito(s) permitindo edições do usuário",
        "trackingcategories": "Monitorando categorias",
+       "trackingcategories-disabled": "A categoria está desabilitada",
        "mailnologin": "Nenhum endereço de envio",
        "mailnologintext": "Necessita de estar [[Special:UserLogin|autenticado]] e de possuir um endereço de e-mail válido nas suas [[Special:Preferences|preferências]] para poder enviar um e-mail a outros usuários.",
        "emailuser": "Enviar-lhe um e-mail",
        "watchnologin": "Não está autenticado",
        "addwatch": "Adicionar às páginas vigiadas",
        "addedwatchtext": "A página \"[[:$1]]\" foi adicionada à sua [[Special:Watchlist|lista de páginas vigiadas]].\nFuturas modificações em tal página e páginas de discussão relacionadas serão listadas lá.",
+       "addedwatchtext-short": "A página \"$1\" foi adicionada à sua lista de páginas vigiadas.",
        "removewatch": "Remover das páginas vigiadas",
        "removedwatchtext": "A página \"[[:$1]]\" foi removida de sua [[Special:Watchlist|lista de páginas vigiadas]].",
+       "removedwatchtext-short": "A página \"$1\" foi removida de sua lista de páginas vigiadas.",
        "watch": "Vigiar",
        "watchthispage": "Vigiar esta página",
        "unwatch": "Desinteressar-se",
        "unwatchthispage": "Parar de vigiar esta página",
        "notanarticle": "Não é uma página de conteúdo",
        "notvisiblerev": "Edição eliminada",
-       "watchlist-details": "{{PLURAL:$1|$1 página|$1 páginas}} na sua lista de páginas vigiadas, excluindo páginas de discussão.",
+       "watchlist-details": "{{PLURAL:$1|$1 página|$1 páginas}} na sua lista de páginas vigiadas, excluindo as páginas de discussão.",
        "wlheader-enotif": "A notificação por email encontra-se ativada.",
        "wlheader-showupdated": "Páginas modificadas desde a sua última visita são mostradas em '''negrito'''",
        "wlnote2": "A seguir estão as mudanças nas últimas {{PLURAL:$1|hora|<strong>$1</strong> horas}}, a partir de $2, $3.",
        "contributions-title": "Contribuições {{GENDER:$1|do usuário|da usuária}} $1",
        "mycontris": "Contribuições",
        "contribsub2": "Para {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "A conta de usuário \"$1\" não está registrada.",
        "nocontribs": "Não foram encontradas mudanças com este critério.",
        "uctop": "(atual)",
        "month": "Mês (inclusive anteriores):",
        "contribslink": "contribs",
        "emaillink": "enviar um e-mail",
        "autoblocker": "Você foi automaticamente bloqueado, pois o seu Endereço IP foi recentemente usado por \"[[User:$1|$1]]\". \nO motivo apresentado para o bloqueio de $1 é: \"$2\".",
-       "blocklogpage": "Registro de bloqueio",
+       "blocklogpage": "Registro de bloqueios",
        "blocklog-showlog": "Este usuário já foi bloqueado anteriormente.\nO registro de bloqueio é fornecido abaixo, para referência:",
        "blocklog-showsuppresslog": "O usuário foi bloqueado e ocultado anteriormente.\nO registro de supressão é fornecido abaixo para referência:",
        "blocklogentry": "bloqueou \"[[$1]]\" por $2. $3",
        "movenotallowedfile": "Você não possui permissão para mover arquivos.",
        "cant-move-user-page": "Você não possui permissão de mover páginas principais de usuários.",
        "cant-move-to-user-page": "Você não tem permissão para mover uma página para uma página de usuários (exceto para uma subpágina de usuário).",
+       "cant-move-category-page": "Você não possui permissão para mover páginas de categorias.",
+       "cant-move-to-category-page": "Você não tem permissão para mover uma página para uma categoria de páginas.",
        "newtitle": "Para novo título",
        "move-watch": "Vigiar esta página",
        "movepagebtn": "Mover página",
        "movepage-moved-noredirect": "A criação de um redirecionamento foi suprimida.",
        "articleexists": "Uma página com este título já existe, ou o título que escolheu é inválido.\nPor favor, escolha outro nome.",
        "cantmove-titleprotected": "Você não pode mover uma página para tal denominação uma vez que o novo título se encontra protegido contra criação",
-       "movetalk": "Mover também a página de discussão associada.",
+       "movetalk": "Mover também a página de discussão associada",
        "move-subpages": "Mover subpáginas (até $1)",
        "move-talk-subpages": "Mover subpáginas da página de discussão (até $1)",
        "movepage-page-exists": "A página $1 já existe e não pode ser substituída.",
        "common.css": "/** o código CSS colocado aqui será aplicado a todos os temas */",
        "monobook.css": "/* o código CSS colocado aqui terá efeito nos usuários do tema Monobook */",
        "common.js": "/* Códigos JavaScript aqui colocados serão carregados por todos aqueles que acessarem alguma página deste wiki */",
-       "cologneblue.js": "/* Qualquer JavaScript aqui colocado afetará os usuários do skin Azul colonial */",
        "monobook.js": "/* Qualquer JavaScript aqui colocado afetará os usuários do skin MonoBook */",
-       "modern.js": "/* Qualquer JavaScript aqui colocado afetará os usuários do skin Moderno */",
        "vector.js": "/* Qualquer JavaScript aqui colocado afetará os usuários do skin Vector */",
        "anonymous": "{{PLURAL:$1|Usuário anônimo|Usuários anônimos}} da {{SITENAME}}",
        "siteuser": "{{GENDER:$2|um usuário|uma usuária|um usuário}} da {{SITENAME}} ($1)",
        "pageinfo-category-pages": "Número de páginas",
        "pageinfo-category-subcats": "Número de subcategorias",
        "pageinfo-category-files": "Número de arquivos",
-       "skinname-cologneblue": "Azul colonial",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderno",
        "markaspatrolleddiff": "Marcar como patrulhada",
        "markaspatrolledtext": "Marcar esta página como patrulhada",
        "markedaspatrolled": "Marcado como verificado",
        "newimages-summary": "Esta página especial mostra os arquivos mais recentemente enviados",
        "newimages-legend": "Filtrar",
        "newimages-label": "Nome de arquivo (ou parte dele):",
+       "newimages-showbots": "Mostrar uploads realizados por bots",
        "noimages": "Nada para ver.",
        "ilsubmit": "Pesquisar",
        "bydate": "por data",
        "watchlistedit-raw-done": "Sua lista de páginas vigiadas foi atualizada.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Foi adicionado um título|Foram adicionados $1 títulos}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Foi removido um título|Foram removidos $1 títulos}}:",
+       "watchlistedit-clear-explain": "Todos os títulos serão removidos da sua lista de páginas vigiadas",
+       "watchlistedit-clear-titles": "Títulos:",
+       "watchlistedit-clear-submit": "Limpar a lista de páginas vigiadas (Esta ação é permanente!)",
+       "watchlistedit-clear-done": "Sua lista de páginas vigiadas foi limpa.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Foi removido um título|Foram removidos $1 títulos}}:",
+       "watchlistedit-too-many": "Há muitas páginas para exibir aqui.",
+       "watchlisttools-clear": "Limpar a lista de páginas vigiadas",
        "watchlisttools-view": "Ver alterações relevantes",
        "watchlisttools-edit": "Ver e editar a lista de páginas vigiadas",
        "watchlisttools-raw": "Edição crua da lista de páginas vigiadas",
index c8bafd3..7dcba69 100644 (file)
@@ -85,8 +85,8 @@
        "tog-enotifminoredits": "Notificar-me por correio electrónico também sobre edições menores de páginas ou ficheiros",
        "tog-enotifrevealaddr": "Revelar o meu endereço de correio electrónico nas notificações",
        "tog-shownumberswatching": "Mostrar o número de utilizadores a vigiar",
-       "tog-oldsig": "Assinatura existente:",
-       "tog-fancysig": "Tratar assinatura como texto wiki (sem link automático)",
+       "tog-oldsig": "Assinatura atual:",
+       "tog-fancysig": "Tratar assinatura como texto wiki (sem hiperligações automáticas)",
        "tog-uselivepreview": "Usar a antevisão ao vivo (experimental)",
        "tog-forceeditsummary": "Avisar-me se deixar o resumo da edição vazio",
        "tog-watchlisthideown": "Esconder as minhas edições ao listar mudanças às páginas vigiadas",
        "tog-showhiddencats": "Mostrar categorias ocultas",
        "tog-norollbackdiff": "Omitir diferenças depois de reverter edições em bloco",
        "tog-useeditwarning": "Avisar-me ao abandonar uma página editada sem gravar as alterações.",
-       "tog-prefershttps": "Usar sempre uma ligação segura quando estiver autenticado",
+       "tog-prefershttps": "Usar sempre uma ligação segura enquanto tiver sessão iniciada",
        "underline-always": "Sempre",
        "underline-never": "Nunca",
        "underline-default": "Usar opção padrão do tema ou do navegador",
        "feb": "Fev.",
        "mar": "Mar.",
        "apr": "Abr.",
-       "may": "maio",
+       "may": "Maio",
        "jun": "Jun.",
        "jul": "Jul.",
        "aug": "Ago.",
        "vector-view-view": "Ler",
        "vector-view-viewsource": "Ver fonte",
        "actions": "Acções",
-       "namespaces": "Espaços nominais",
+       "vector-more-actions": "Mais",
+       "namespaces": "Domínios",
        "variants": "Variantes",
        "navigation-heading": "Menu de navegação",
        "errorpagetitle": "Erro",
        "help": "Ajuda",
        "search": "Pesquisa",
        "searchbutton": "Pesquisar",
-       "go": "Prosseguir",
+       "go": "Ir",
        "searcharticle": "Ir",
        "history": "Histórico",
        "history_short": "Histórico",
        "userpage": "Ver página de utilizador",
        "projectpage": "Ver página de projeto",
        "imagepage": "Ver página de ficheiro",
-       "mediawikipage": "Ver página da mensagem",
-       "templatepage": "Ver página da predefinição",
+       "mediawikipage": "Ver página de mensagem",
+       "templatepage": "Ver página de predefinição",
        "viewhelppage": "Ver página de ajuda",
-       "categorypage": "Ver página da categoria",
+       "categorypage": "Ver página de categoria",
        "viewtalkpage": "Ver discussão",
        "otherlanguages": "Noutros idiomas",
        "redirectedfrom": "(Redireccionado de $1)",
        "jumpto": "Ir para:",
        "jumptonavigation": "navegação",
        "jumptosearch": "pesquisa",
-       "view-pool-error": "Desculpe, mas de momento os servidores estão sobrecarregados.\nHá demasiados utilizadores a tentar visionar esta página.\nEspere um pouco antes de tentar aceder à página novamente, por favor.\n\n$1",
-       "generic-pool-error": "Desculpe, os servidores estão sobrecarregados nesse momento.\nDemasiados utilizadores estão tentando visualizar este recurso.\nPor favor, espere um pouco antes de tentar acessar este recurso novamente.",
+       "view-pool-error": "Desculpe, mas de momento os servidores estão sobrecarregados.\nHá demasiados utilizadores a tentar visualizar esta página.\nEspere um pouco antes de tentar aceder à página novamente, por favor.\n\n$1",
+       "generic-pool-error": "Desculpe, os servidores estão sobrecarregados nesse momento.\nDemasiados utilizadores estão tentando visualizar este recurso.\nPor favor, espere um pouco antes de tentar aceder a este recurso novamente.",
        "pool-timeout": "Tempo limite de espera para o bloqueio excedido",
        "pool-queuefull": "A fila de processos está cheia",
        "pool-errorunknown": "Erro desconhecido",
+       "pool-servererror": "O serviço ''pool counter'' não está disponível ($1).",
        "aboutsite": "Sobre a {{SITENAME}}",
        "aboutpage": "Project:Sobre",
        "copyright": "Conteúdo disponibilizado nos termos da $1, salvo indicação em contrário.",
        "nstab-user": "Página d{{GENDER:{{#titleparts:{{PAGENAME}}|1|1}}|o utilizador|a utilizadora|e utilizador(a)}}",
        "nstab-media": "Multimédia",
        "nstab-special": "Página especial",
-       "nstab-project": "Página do projeto",
+       "nstab-project": "Página de projeto",
        "nstab-image": "Ficheiro",
        "nstab-mediawiki": "Mensagem",
        "nstab-template": "Predefinição",
        "databaseerror": "Erro na base de dados",
        "databaseerror-text": "Ocorreu um erro na consulta à base de dados.\nIsto pode indicar um defeito no programa.",
        "databaseerror-textcl": "Ocorreu um erro na consulta à base de dados.",
-       "databaseerror-query": "Consulta:$1",
+       "databaseerror-query": "Consulta: $1",
        "databaseerror-function": "Função: $1",
        "databaseerror-error": "Erro: $1",
        "laggedslavemode": "'''Aviso:''' A página pode não conter as atualizações mais recentes.",
        "protectedinterface": "Esta página fornece o texto da interface ao software, e está protegida para prevenir abusos.",
        "editinginterface": "'''Aviso:''' Está a editar uma página usada para fornecer texto de interface ao software. Alterações a esta página afetarão a aparência da interface de utilizador para os outros utilizadores. Para traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt translatewiki.net], um projeto destinado à tradução do MediaWiki.",
        "cascadeprotected": "Esta página foi protegida contra edições por estar incluída {{PLURAL:$1|na página listada|nas páginas listadas}} a seguir, ({{PLURAL:$1|página essa que está protegida|páginas essas que estão protegidas}} com a opção de proteção \"em cascata\" ativada):\n$2",
-       "namespaceprotected": "Não tem permissão para editar páginas no espaço nominal '''$1'''.",
+       "namespaceprotected": "Não tem permissão para editar páginas no domínio '''$1'''.",
        "customcssprotected": "Não tem permissão para editar esta página de CSS porque esta contém as configurações pessoais de outro utilizador.",
        "customjsprotected": "Não tem permissão para editar esta página de JavaScript porque esta contém as configurações pessoais de outro utilizador.",
        "mycustomcssprotected": "Não tem permissão para editar esta página de CSS.",
        "myprivateinfoprotected": "Não tem permissão para editar a sua informação privada.",
        "mypreferencesprotected": "Não tem permissão para editar as suas preferências.",
        "ns-specialprotected": "Não é possível editar páginas especiais.",
-       "titleprotected": "Este título foi protegido contra criação por [[User:$1|$1]].\nA justificação foi \"''$2''\".",
+       "titleprotected": "Este título foi protegido contra criação por [[User:$1|$1]].\nA justificação dada foi \"''$2''\".",
        "filereadonlyerror": "Não é possível modificar o ficheiro \"$1\" porque o repositório de ficheiros \"$2\" está em modo de leitura.\n\nO administrador que efetuou o bloqueio deu a seguinte explicação: \"$3\".",
-       "invalidtitle-knownnamespace": "Título inválido com o espaço nominal \"$2\" e texto \"$3\"",
-       "invalidtitle-unknownnamespace": "Título inválido com número de espaço nominal $1 desconhecido e texto \"$2\"",
+       "invalidtitle-knownnamespace": "Título inválido com o domínio \"$2\" e texto \"$3\"",
+       "invalidtitle-unknownnamespace": "Título inválido com número de domínio $1 desconhecido e texto \"$2\"",
        "exception-nologin": "Não está autenticado",
-       "exception-nologin-text": "Por favor, [[Special:Userlogin|entre]] para poder acessar esta página ou acção.",
-       "exception-nologin-text-manual": "Por favor  $1  para poder aceder a esta página ou acção.",
+       "exception-nologin-text": "Por favor, [[Special:Userlogin|inicie sessão]] para poder aceder a esta página ou acção.",
+       "exception-nologin-text-manual": "Por favor $1, para poder aceder a esta página ou acção.",
        "virus-badscanner": "Má configuração: antivírus desconhecido: ''$1''",
        "virus-scanfailed": "a verificação falhou (código $1)",
        "virus-unknownscanner": "antivírus desconhecido:",
-       "logouttext": "'''Já não está autenticado.'''\n\nTenha em atenção que algumas páginas poderão continuar a ser apresentadas como se ainda estivesse autenticado até limpar a cache do seu browser.",
+       "logouttext": "'''Já não está autenticado.'''\n\nTenha em atenção que algumas páginas poderão continuar a ser apresentadas como se ainda estivesse autenticado até limpar a cache do seu navegador.",
        "welcomeuser": "Bem-vindo, $1!",
        "welcomecreation-msg": "A sua conta foi criada.\nNão se esqueça de personalizar as suas [[Special:Preferences|preferências]].",
-       "yourname": "Nome de utilizador:",
+       "yourname": "Nome de utilizador(a):",
        "userlogin-yourname": "Nome de utilizador(a):",
        "userlogin-yourname-ph": "Digite o seu nome de utilizador(a)",
        "createacct-another-username-ph": "Digite o nome de utilizador(a)",
-       "yourpassword": "Palavra-chave:",
-       "userlogin-yourpassword": "Palavra-chave",
-       "userlogin-yourpassword-ph": "Digite a sua palavra-chave",
-       "createacct-yourpassword-ph": "Digite uma palavra-chave",
-       "yourpasswordagain": "Repita a palavra-chave:",
-       "createacct-yourpasswordagain": "Confirme a palavra-chave",
-       "createacct-yourpasswordagain-ph": "Digite a palavra-chave novamente",
+       "yourpassword": "Palavra-passe:",
+       "userlogin-yourpassword": "Palavra-passe",
+       "userlogin-yourpassword-ph": "Digite a sua palavra-passe",
+       "createacct-yourpassword-ph": "Digite uma palavra-passe",
+       "yourpasswordagain": "Repita a palavra-passe:",
+       "createacct-yourpasswordagain": "Confirme a palavra-passe",
+       "createacct-yourpasswordagain-ph": "Digite a palavra-passe novamente",
        "remembermypassword": "Recordar os meus dados neste computador (no máximo, por $1 {{PLURAL:$1|dia|dias}})",
        "userlogin-remembermypassword": "Manter-me autenticado",
-       "userlogin-signwithsecure": "Use uma ligação segura",
+       "userlogin-signwithsecure": "Usar uma ligação segura",
        "yourdomainname": "O seu domínio:",
        "password-change-forbidden": "Não pode alterar palavras-chave nesta wiki.",
        "externaldberror": "Ocorreu um erro externo à base de dados durante a autenticação ou não lhe é permitido atualizar a sua conta externa.",
-       "login": "Autenticação",
+       "login": "Entrar",
        "nav-login-createaccount": "Entrar / criar conta",
-       "loginprompt": "É necessário ter os ''cookies'' ativados no seu browser para poder autenticar-se na {{SITENAME}}.",
+       "loginprompt": "É necessário ter os ''cookies'' ativados no seu navegador para poder autenticar-se em {{SITENAME}}.",
        "userlogin": "Criar uma conta ou entrar",
-       "userloginnocreate": "Autenticação",
+       "userloginnocreate": "Entrar",
        "logout": "Sair",
        "userlogout": "Sair",
        "notloggedin": "Não autenticado",
        "nologin": "Não possui uma conta? $1.",
        "nologinlink": "Criar uma conta",
        "createaccount": "Criar conta",
-       "gotaccount": "Já possui uma conta? '''$1'''.",
-       "gotaccountlink": "Autentique-se",
-       "userlogin-resetlink": "Esqueceu-se do seu nome de utilizador ou da palavra-chave?",
-       "userlogin-resetpassword-link": "Esqueceu a sua palavra-chave?",
-       "userlogin-helplink2": "Ajuda na autenticação",
-       "userlogin-loggedin": "Já está {{GENDER:$1|autenticado|autenticada|autenticado}} com o nome $1.\nUse o formulário abaixo para iniciar uma sessão com outro nome.",
+       "gotaccount": "Já possui uma conta? $1.",
+       "gotaccountlink": "Entrar",
+       "userlogin-resetlink": "Esqueceu-se do seu nome de utilizador ou da palavra-passe?",
+       "userlogin-resetpassword-link": "Esqueceu-se da sua palavra-passe?",
+       "userlogin-helplink2": "Ajuda para iniciar sessão",
+       "userlogin-loggedin": "Já está {{GENDER:$1|autenticado|autenticada|autenticado}} com o nome $1.\nUse o formulário abaixo para iniciar sessão com outro nome.",
        "userlogin-createanother": "Criar outra conta",
-       "createacct-emailrequired": "Endereço de email",
-       "createacct-emailoptional": "Endereço de email (opcional)",
-       "createacct-email-ph": "Digite o seu endereço de correio electrónico",
-       "createacct-another-email-ph": "Digite o endereço de correio electrónico",
+       "createacct-emailrequired": "Endereço de correio eletrónico",
+       "createacct-emailoptional": "Endereço de correio eletrónico (opcional)",
+       "createacct-email-ph": "Digite o seu endereço de correio eletrónico",
+       "createacct-another-email-ph": "Digite o endereço de correio eletrónico",
        "createaccountmail": "Usar uma palavra passe aleatória e temporária e enviar para o endereço de correio eletrónico especificado",
        "createacct-realname": "Nome verdadeiro (opcional)",
        "createaccountreason": "Motivo:",
-       "createacct-reason": "Razão",
+       "createacct-reason": "Motivo",
        "createacct-reason-ph": "Porque está a criar outra conta",
-       "createacct-captcha": "Verificar segurança",
+       "createacct-captcha": "Verificação de segurança",
        "createacct-imgcaptcha-ph": "Digite o texto que vê acima",
        "createacct-submit": "Crie a sua conta",
        "createacct-another-submit": "Criar uma outra conta",
        "createacct-benefit-body1": "{{PLURAL:$1|edição|edições}}",
        "createacct-benefit-body2": "{{PLURAL:$1|página|páginas}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contribuidor|contribuidores}} recentes",
-       "badretype": "As palavras-chave que introduziu não são iguais.",
+       "badretype": "As palavras-passe que introduziu não coincidem.",
        "userexists": "O nome de utilizador introduzido já existe.\nPor favor escolha um nome diferente.",
-       "loginerror": "Erro de autenticação",
+       "loginerror": "Erro ao iniciar sessão",
        "createacct-error": "Erro na criação da conta",
        "createaccounterror": "Não foi possível criar a conta: $1",
-       "nocookiesnew": "A conta de utilizador foi criada, mas neste momento não está autenticado.\nA {{SITENAME}} utiliza ''cookies'' para autenticar os utilizadores.\nOs ''cookies'' estão desativados no seu browser.\nAtive-os e autentique-se com o seu nome de utilizador e a sua palavra-chave, por favor.",
-       "nocookieslogin": "A {{SITENAME}} utiliza ''cookies'' para autenticar os utilizadores.\nOs ''cookies'' estão desativados no seu browser.\nAtive-os e tente novamente, por favor.",
-       "nocookiesfornew": "A conta de utilizador não foi criada, porque não foi possível confirmar a sua origem.\nCertifique-se de que tem os cookies ativados, recarregue esta página e tente novamente.",
+       "nocookiesnew": "A conta de utilizador foi criada, mas neste momento não tem sessão iniciada.\nA {{SITENAME}} utiliza ''cookies'' para autenticar os utilizadores.\nOs ''cookies'' estão desativados no seu navegador.\nAtive-os e inicie sessão com o seu nome de utilizador e a sua palavra-passe, por favor.",
+       "nocookieslogin": "A {{SITENAME}} utiliza ''cookies'' para autenticar os utilizadores.\nOs ''cookies'' estão desativados no seu navegador.\nAtive-os e tente novamente, por favor.",
+       "nocookiesfornew": "A conta de utilizador não foi criada, porque não foi possível confirmar a sua origem.\nCertifique-se de que tem os ''cookies'' ativados, recarregue esta página e tente novamente.",
        "noname": "Não especificou um nome de utilizador válido.",
-       "loginsuccesstitle": "Login bem sucedido",
+       "loginsuccesstitle": "Início de sessão bem sucedido",
        "loginsuccess": "'''Encontra-se agora ligado à {{SITENAME}} como \"$1\"'''.",
        "nosuchuser": "Não existe nenhum utilizador com o nome \"$1\".\nOs nomes de utilizador são sensíveis à capitalização.\nVerifique a ortografia, ou [[Special:UserLogin/signup|crie uma nova conta]].",
        "nosuchusershort": "Não existe um utilizador com o nome \"$1\". Verifique o nome que introduziu.",
        "nouserspecified": "Precisa de especificar um nome de utilizador.",
        "login-userblocked": "Este utilizador está bloqueado. Não é permitido o acesso.",
-       "wrongpassword": "A palavra-chave que introduziu é inválida. Tente novamente, por favor.",
-       "wrongpasswordempty": "A palavra-chave não foi introduzida. Introduza-a, por favor.",
-       "passwordtooshort": "A palavra-chave deve ter no mínimo $1 {{PLURAL:$1|carácter|caracteres}}.",
-       "password-name-match": "A sua palavra-chave tem de ser diferente do seu nome de utilizador.",
-       "password-login-forbidden": "Foi proibido o uso deste nome de utilizador e palavra-chave.",
-       "mailmypassword": "Reiniciar a palavra-chave",
-       "passwordremindertitle": "Nova palavra-chave temporária na {{SITENAME}}",
-       "passwordremindertext": "Alguém (provavelmente você, a partir do endereço IP $1) solicitou uma palavra-chave nova para a sua conta na {{SITENAME}} ($4).\nFoi criada a palavra-chave temporária \"$3\" para o utilizador \"$2\".\nSe o pedido foi feito por si, entre agora na sua conta e escolha uma palavra-chave nova.\nA palavra-chave temporária expira após {{PLURAL:$5|um dia|$5 dias}}.\n\nCaso outra pessoa tenha feito o pedido, ou se entretanto se recordou da sua palavra-chave e já não deseja alterá-la, ignore esta mensagem e continue a utilizar a palavra-chave antiga.",
+       "wrongpassword": "A palavra-passe que introduziu é inválida. Tente novamente, por favor.",
+       "wrongpasswordempty": "A palavra-passe não foi introduzida. \nIntroduza-a, por favor.",
+       "passwordtooshort": "A palavra-passe deve ter no mínimo $1 {{PLURAL:$1|carácter|caracteres}}.",
+       "password-name-match": "A sua palavra-passe tem de ser diferente do seu nome de utilizador.",
+       "password-login-forbidden": "Foi proibido o uso deste nome de utilizador e palavra-passe.",
+       "mailmypassword": "Reiniciar a palavra-passe",
+       "passwordremindertitle": "Nova palavra-passe temporária na {{SITENAME}}",
+       "passwordremindertext": "Alguém (provavelmente você, a partir do endereço IP $1) solicitou uma palavra-passe nova para a sua conta na {{SITENAME}} ($4).\nFoi criada a palavra-passe temporária \"$3\" para o utilizador \"$2\".\nSe o pedido foi feito por si, entre agora na sua conta e escolha uma palavra-passe nova.\nA palavra-passe temporária expira após {{PLURAL:$5|um dia|$5 dias}}.\n\nCaso outra pessoa tenha feito o pedido, ou se entretanto se recordou da sua palavra-passe e já não deseja alterá-la, ignore esta mensagem e continue a utilizar a palavra-passe antiga.",
        "noemail": "Não foi registado um endereço de correio eletrónico para o utilizador \"$1\".",
        "noemailcreate": "Tem de fornecer um endereço de correio eletrónico válido.",
-       "passwordsent": "Foi enviada uma palavra-chave nova para o endereço de correio eletrónico do utilizador \"$1\".\nVolte a autenticar-se após recebê-la, por favor.",
-       "blocked-mailpassword": "O seu endereço IP foi bloqueado e, portanto, não será possível utilizar a função de recuperação da palavra-chave, para prevenir o uso abusivo.",
+       "passwordsent": "Foi enviada uma palavra-passe nova para o endereço de correio eletrónico do utilizador \"$1\".\nVolte a iniciar sessão após recebê-la, por favor.",
+       "blocked-mailpassword": "O seu endereço IP foi bloqueado e, portanto, não será possível utilizar a função de recuperação da palavra-passe, para prevenir o uso abusivo.",
        "eauthentsent": "Foi enviada uma mensagem de confirmação para o endereço de correio eletrónico que especificou.\nAntes que seja enviada qualquer outra mensagem para a conta, terá de seguir as instruções na mensagem enviada, de modo a confirmar que a conta lhe pertence.",
-       "throttled-mailpassword": "Já foi enviada um email de recuperação de palavra-chave {{PLURAL:$1|na última hora|nas últimas $1 horas}}.\nPara prevenir abusos, só um email de recuperação de palavra-chave pode ser enviado a cada {{PLURAL:$1|hora|$1 horas}}.",
-       "mailerror": "Erro ao enviar correio: $1",
+       "throttled-mailpassword": "Já foi enviada um email de recuperação de palavra-passe {{PLURAL:$1|na última hora|nas últimas $1 horas}}.\nPara prevenir abusos, só um email de recuperação de palavra-passe pode ser enviado a cada {{PLURAL:$1|hora|$1 horas}}.",
+       "mailerror": "Erro ao enviar correio electrónico: $1",
        "acct_creation_throttle_hit": "Visitantes desta wiki com o seu endereço IP criaram $1 {{PLURAL:$1|conta|contas}} no último dia, o que é o máximo permitido neste período de tempo.\nEm resultado, visitantes com este endereço IP não podem criar mais nenhuma conta neste momento.",
        "emailauthenticated": "O seu endereço de correio eletrónico foi confirmado a $2, às $3.",
        "emailnotauthenticated": "O seu endereço de correio eletrónico ainda não foi confirmado.\nNão lhe serão enviadas mensagens por nenhuma das seguintes funcionalidades.",
        "emailconfirmlink": "Confirme o seu endereço de correio eletrónico",
        "invalidemailaddress": "O endereço de correio eletrónico não pode ser aceite porque parece ter um formato inválido.\nIntroduza um endereço formatado corretamente ou deixe o campo vazio.",
        "cannotchangeemail": "Os endereços de correio eletrónico das contas não podem ser alterados nesta wiki.",
-       "emaildisabled": "Este site não consegue enviar mensagens de correio eletrónico.",
+       "emaildisabled": "Este sítio não consegue enviar mensagens de correio eletrónico.",
        "accountcreated": "Conta criada",
        "accountcreatedtext": "A conta de utilizador para [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) foi criada.",
        "createaccount-title": "Criação de conta na {{SITENAME}}",
-       "createaccount-text": "Alguém criou uma conta com o nome $2 para o seu endereço de correio eletrónico, na wiki {{SITENAME}} ($4), com a palavra-chave \"$3\".\nDeve agora autenticar-se e alterar a sua palavra-chave.\n\nSe a conta foi criada por engano, pode ignorar esta mensagem.",
-       "login-throttled": "Realizou demasiadas tentativas de autenticação com esta conta.\nAguarde $1 antes de tentar novamente, por favor.",
-       "login-abort-generic": "A sua autenticação não teve êxito - Cancelada",
+       "createaccount-text": "Alguém criou uma conta com o nome $2 para o seu endereço de correio eletrónico, na wiki {{SITENAME}} ($4), com a palavra-passe \"$3\".\nDeve agora iniciar sessão e alterar a sua palavra-passe.\n\nSe a conta foi criada por engano, pode ignorar esta mensagem.",
+       "login-throttled": "Realizou demasiadas tentativas de início de sessão com esta conta.\nAguarde $1 antes de tentar novamente, por favor.",
+       "login-abort-generic": "O início de sessão não teve êxito - Cancelado",
        "loginlanguagelabel": "Língua: $1",
-       "suspicious-userlogout": "O seu pedido para sair foi negado porque parece ter sido enviado por um browser danificado ou por um proxy com cache.",
+       "suspicious-userlogout": "O seu pedido para sair foi negado porque parece ter sido enviado por um navegador danificado ou por um proxy com cache.",
        "createacct-another-realname-tip": "O fornecimento do nome verdadeiro é opcional.\nSe optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu trabalho.",
-       "pt-login": "Autenticação",
-       "pt-login-button": "Iniciar sessão",
+       "pt-login": "Entrar",
+       "pt-login-button": "Entrar",
        "pt-createaccount": "Criar uma conta",
        "pt-userlogout": "Sair",
        "php-mail-error-unknown": "Erro desconhecido na função mail() do PHP",
        "user-mail-no-addy": "Tentou enviar uma mensagem sem um endereço de correio eletrónico.",
        "user-mail-no-body": "Tentou enviar uma mensagem sem conteúdo ou com um conteúdo demasiado pequeno.",
-       "changepassword": "Alterar palavra-chave",
-       "resetpass_announce": "Para completar a autenticação, tem de definir uma palavra-chave nova.",
+       "changepassword": "Alterar palavra-passe",
+       "resetpass_announce": "Para completar a autenticação, tem de definir uma palavra-passe nova.",
        "resetpass_text": "<!-- Adicionar texto aqui -->",
-       "resetpass_header": "Alterar palavra-chave da conta",
-       "oldpassword": "Palavra-chave anterior:",
-       "newpassword": "Palavra-chave nova:",
-       "retypenew": "Repita a palavra-chave nova:",
-       "resetpass_submit": "Definir palavra-chave e entrar",
-       "changepassword-success": "A sua palavra-chave foi alterada!",
-       "changepassword-throttled": "Realizou demasiadas tentativas de autenticação com esta conta.\nAguarde $1 antes de tentar novamente, por favor.",
-       "resetpass_forbidden": "Não é possível alterar palavras-chave",
-       "resetpass-no-info": "Precisa estar autenticado para aceder diretamente a esta página.",
-       "resetpass-submit-loggedin": "Alterar palavra-chave",
+       "resetpass_header": "Alterar palavra-passe da conta",
+       "oldpassword": "Palavra-passe anterior:",
+       "newpassword": "Palavra-passe nova:",
+       "retypenew": "Repita a palavra-passe nova:",
+       "resetpass_submit": "Definir palavra-passe e entrar",
+       "changepassword-success": "A sua palavra-passe foi alterada!",
+       "changepassword-throttled": "Realizou demasiadas tentativas de início de sessão com esta conta.\nAguarde $1 antes de tentar novamente, por favor.",
+       "resetpass_forbidden": "Não é possível alterar palavras-passe",
+       "resetpass-no-info": "Precisa de iniciar sessão para aceder diretamente a esta página.",
+       "resetpass-submit-loggedin": "Alterar palavra-passe",
        "resetpass-submit-cancel": "Cancelar",
-       "resetpass-wrong-oldpass": "Palavra-chave temporária ou atual inválida.\nPode ter já alterado com sucesso a sua palavra-chave ou solicitado uma nova palavra-chave temporária.",
-       "resetpass-recycled": "Redefina a sua palavra-chave para uma diferente da atual, por favor.",
-       "resetpass-temp-emailed": "Autenticou-se usando um código temporário.\nPara completar a autenticação, tem de definir uma palavra-chave nova aqui:",
-       "resetpass-temp-password": "Palavra-chave temporária:",
-       "resetpass-abort-generic": "A alteração da palavra-chave foi cancelada por uma extensão.",
-       "resetpass-expired": "A sua palavra-chave expirou. Para autenticar-se, defina uma nova.",
-       "resetpass-expired-soft": "A sua palavra-chave expirou e tem de ser redefinida. Escolha uma nova agora ou clique \"{{int:resetpass-submit-cancel}}\" para redefini-la mais tarde.",
-       "resetpass-validity-soft": "Sua palavra-chave não é válida: $1\n\nPor favor, escolha uma nova palavra-chave agora, ou clique em \"{{int:resetpass-submit-cancel}}\" para redefini-la mais tarde.",
-       "passwordreset": "Redefinir palavra-chave",
+       "resetpass-wrong-oldpass": "Palavra-passe temporária ou atual inválida.\nPode ter já alterado com sucesso a sua palavra-passe ou solicitado uma nova palavra-passe temporária.",
+       "resetpass-recycled": "Redefina a sua palavra-passe para uma diferente da atual, por favor.",
+       "resetpass-temp-emailed": "Iniciou a sessão com um código temporário.\nPara completar a autenticação, tem de definir uma palavra-passe nova aqui:",
+       "resetpass-temp-password": "Palavra-passe temporária:",
+       "resetpass-abort-generic": "A alteração da palavra-passe foi cancelada por uma extensão.",
+       "resetpass-expired": "A sua palavra-passe expirou. Por favor, defina uma nova para iniciar a sessão.",
+       "resetpass-expired-soft": "A sua palavra-passe expirou e tem de ser redefinida. Escolha uma nova agora ou clique \"{{int:resetpass-submit-cancel}}\" para redefini-la mais tarde.",
+       "resetpass-validity-soft": "A sua palavra-passe não é válida: $1\n\nPor favor, escolha uma nova palavra-passe agora, ou clique em \"{{int:resetpass-submit-cancel}}\" para redefini-la mais tarde.",
+       "passwordreset": "Redefinir palavra-passe",
        "passwordreset-text-one": "Preencha este formulário para receber uma palavra-passe temporária por correio eletrónico.",
-       "passwordreset-text-many": "{{PLURAL:$1|Preencha um dos campos para receber uma palavra-chave temporária por correio eletrónico.}}",
-       "passwordreset-legend": "Redefinir palavra-chave",
-       "passwordreset-disabled": "A redefinição da palavra-chave foi impossibilitada nesta wiki.",
+       "passwordreset-text-many": "{{PLURAL:$1|Preencha um dos campos para receber uma palavra-passe temporária por correio eletrónico.}}",
+       "passwordreset-legend": "Redefinir palavra-passe",
+       "passwordreset-disabled": "A redefinição da palavra-passe foi impossibilitada nesta wiki.",
        "passwordreset-emaildisabled": "A funcionalidade de correio eletrónico foi desativada nesta wiki.",
-       "passwordreset-username": "Nome de utilizador:",
+       "passwordreset-username": "Nome de utilizador(a):",
        "passwordreset-domain": "Domínio:",
        "passwordreset-capture": "Ver a mensagem resultante?",
-       "passwordreset-capture-help": "Se marcar esta caixa, a mensagem (com a palavra-chave temporária) ser-lhe-á mostrada e enviada ao utilizador.",
+       "passwordreset-capture-help": "Se marcar esta caixa, a mensagem (com a palavra-passe temporária) ser-lhe-á mostrada e enviada ao utilizador.",
        "passwordreset-email": "Correio eletrónico:",
        "passwordreset-emailtitle": "Detalhes da conta na {{SITENAME}}",
        "passwordreset-emailtext-ip": "Alguém (provavelmente você, a partir do endereço IP $1) pediu a recuperação da palavra-passe no projeto {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta de utilizador está associada|As seguintes contas de utilizador estão associadas}} a este correio eletrónico:\n\n$2\n\n{{PLURAL:$3|Esta palavra-passe temporária irá|Estas palavras-passes temporárias irão}} expirar dentro de {{PLURAL:$5|um dia|$5 dias}}.\nDeve autenticar-se e escolher uma palavra-passe nova agora. Se outra pessoa fez este pedido, ou se entretanto se recordou da sua palavra-passe original e já não deseja alterá-la, pode ignorar esta mensagem e continuar a usar a palavra-passe antiga.",
        "passwordreset-emailtext-user": "O utilizador $1 do projeto {{SITENAME}} pediu a recuperação da sua palavra-passe no projeto {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta de utilizador está associada|As seguintes contas de utilizador estão associadas}} a este endereço de correio eletrónico:\n\n$2\n\n{{PLURAL:$3|Esta palavra-passe temporária irá|Estas palavras-passes temporárias irão}} expirar dentro de {{PLURAL:$5|um dia|$5 dias}}.\nDeve autenticar-se e escolher uma palavra-passe nova agora. Se outra pessoa fez este pedido, ou se entretanto se recordou da sua palavra-passe original e já não deseja alterá-la, pode ignorar esta mensagem e continuar a usar a palavra-passe antiga.",
-       "passwordreset-emailelement": "Utilizador: $1\nPalavra-chave temporária: $2",
+       "passwordreset-emailelement": "Utilizador: $1\nPalavra-passe temporária: $2",
        "passwordreset-emailsent": "Foi enviado um correio eletrónico para recuperação da palavra-passe.",
        "passwordreset-emailsent-capture": "Foi enviado um correio eletrónico para recuperação da palavra-passe, que é mostrado abaixo.",
-       "passwordreset-emailerror-capture": "Foi gerado um correio eletrónico para redefinição da palavra-chave, mostrado abaixo, mas o seu envio para {{GENDER:$2|o utilizador|a utilizadora}} falhou: $1",
+       "passwordreset-emailerror-capture": "Foi gerado um correio eletrónico para redefinição da palavra-passe, mostrado abaixo, mas o seu envio para {{GENDER:$2|o utilizador|a utilizadora}} falhou: $1",
        "changeemail": "Alterar o endereço de correio eletrónico",
        "changeemail-header": "Alterar o endereço de correio eletrónico da conta",
-       "changeemail-text": "Preencha este formulário para alterar o endereço de correio eletrónico. Para confirmar esta alteração terá de introduzir a sua palavra-chave.",
-       "changeemail-no-info": "Tem de autenticar-se para aceder diretamente a esta página.",
+       "changeemail-text": "Preencha este formulário para alterar o endereço de correio eletrónico. Para confirmar esta alteração terá de introduzir a sua palavra-passe.",
+       "changeemail-no-info": "Precisa de iniciar sessão para aceder diretamente a esta página.",
        "changeemail-oldemail": "Correio eletrónico atual:",
        "changeemail-newemail": "Novo endereço de correio eletrónico:",
        "changeemail-none": "(nenhum)",
-       "changeemail-password": "A sua senha na wiki {{SITENAME}}:",
+       "changeemail-password": "A sua palavra-passe em {{SITENAME}}:",
        "changeemail-submit": "Alterar correio eletrónico",
        "changeemail-cancel": "Cancelar",
-       "changeemail-throttled": "Realizou demasiadas tentativas de autenticação com esta conta.\nAguarde $1 antes de tentar novamente, por favor.",
+       "changeemail-throttled": "Realizou demasiadas tentativas de início de sessão.\nAguarde $1 antes de tentar novamente, por favor.",
        "resettokens": "Redefinir chaves",
        "resettokens-text": "Pode redefinir as chaves de acesso a certos dados privados associados à sua conta aqui.\n\nDeve fazê-lo se as divulgou acidentalmente a alguém ou se a sua conta tiver sido comprometida.",
        "resettokens-no-tokens": "Não há chaves para redefinir.",
        "preview": "Antevisão",
        "showpreview": "Antever resultado",
        "showdiff": "Mostrar alterações",
-       "anoneditwarning": "'''Aviso''': Não se encontra autenticado.\nO seu endereço IP será registado no histórico de edições desta página.",
-       "anonpreviewwarning": "''Não está autenticado. Gravar registará o seu endereço IP no histórico de edições da página.''",
+       "anoneditwarning": "'''Aviso''': Não iniciou sessão.\nO seu endereço IP será registado no histórico de edições desta página.",
+       "anonpreviewwarning": "''Não iniciou sessão. Ao gravar, registará o seu endereço IP no histórico de edições da página.''",
        "missingsummary": "'''Atenção:''' Não introduziu um resumo da edição.\nSe clicar novamente \"Gravar página\" a sua edição será gravada sem resumo.",
        "missingcommenttext": "Introduza um comentário abaixo, por favor.",
        "missingcommentheader": "'''Atenção:''' Não introduziu um assunto ou cabeçalho para este comentário.\nSe clicar novamente \"{{int:savearticle}}\", a sua edição será gravada sem assunto ou cabeçalho.",
        "confirmedittext": "Precisa de confirmar o seu endereço de correio eletrónico antes de começar a editar páginas.\nIntroduza e valide o endereço através das [[Special:Preferences|preferências do utilizador]], por favor.",
        "nosuchsectiontitle": "Não foi possível encontrar a secção",
        "nosuchsectiontext": "Tentou editar uma secção que não existe.\nEla pode ter sido movida ou removida enquanto estava a ver a página.",
-       "loginreqtitle": "Autenticação necessária",
-       "loginreqlink": "autenticar-se",
+       "loginreqtitle": "Início de sessão necessário",
+       "loginreqlink": "entrar",
        "loginreqpagetext": "Precisa de $1 para ver outras páginas.",
-       "accmailtitle": "Palavra-chave enviada.",
-       "accmailtext": "Uma palavra-chave gerada aleatoriamente para [[User talk:$1|$1]] foi enviada para $2.\n\nEla pode ser alterada na página [[Special:ChangePassword|de alteração da palavra-chave]] após autenticação.",
+       "accmailtitle": "Palavra-passe enviada.",
+       "accmailtext": "Uma palavra-passe gerada aleatoriamente para [[User talk:$1|$1]] foi enviada para $2.\n\nEla pode ser alterada na página [[Special:ChangePassword|de alteração da palavra-passe]] após iniciar sessão.",
        "newarticle": "(Nova)",
        "newarticletext": "Seguiu uma ligação para uma página que ainda não existe.\nPara criá-la, escreva o seu conteúdo na caixa abaixo (consulte a [$1 página de ajuda] para mais detalhes).\nSe chegou aqui por engano, clique o botão '''voltar''' (ou ''back'') do seu navegador.",
-       "anontalkpagetext": "----''Esta é a página de discussão de um utilizador anónimo que ainda não criou uma conta ou não a utiliza, pelo que temos de utilizar o endereço IP para identificá-lo(a).\nUm endereço IP pode ser partilhado por vários utilizadores.\nSe é um utilizador anónimo e sente que lhe foram direccionados comentários irrelevantes, por favor [[Special:UserLogin/signup|crie uma conta]] ou [[Special:UserLogin|autentique-se]] para evitar futuras confusões com outros utilizadores anónimos.''",
+       "anontalkpagetext": "----''Esta é a página de discussão de um utilizador anónimo que ainda não criou uma conta ou não a utiliza, pelo que temos de utilizar o endereço IP para identificá-lo(a).\nUm endereço IP pode ser partilhado por vários utilizadores.\nSe é um utilizador anónimo e sente que lhe foram direccionados comentários irrelevantes, por favor [[Special:UserLogin/signup|crie uma conta]] ou [[Special:UserLogin|inicie sessão]] para evitar futuras confusões com outros utilizadores anónimos.''",
        "noarticletext": "Ainda não existe texto nesta página.\nPode [[Special:Search/{{PAGENAME}}|pesquisar o título desta página]] noutras páginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} procurar registos relacionados]\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta página]</span>.",
        "noarticletext-nopermission": "Ainda não existe texto nesta página.\nPode [[Special:Search/{{PAGENAME}}|pesquisar o título desta página]] noutras páginas, ou <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} procurar nos registos relacionados]</span>, mas não tem permissão para criar esta página.",
        "missing-revision": "A revisão #$1 da página denominada \"{{FULLPAGENAME}}\" não existe.\n\nIsto é geralmente causado por seguir uma ligação de histórico desatualizada para uma página que foi eliminada.\nOs detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminação].",
        "userpage-userdoesnotexist": "A conta \"<nowiki>$1</nowiki>\" não se encontra registada.\nVerifique se deseja realmente criar ou editar esta página, por favor.",
        "userpage-userdoesnotexist-view": "A conta de utilizador \"$1\" não está registada.",
        "blocked-notice-logextract": "Este utilizador está bloqueado.\nPara referência, o último registo de bloqueio é apresentado abaixo:",
-       "clearyourcache": "'''Nota:''' Após gravar, terá de limpar a ''cache'' do seu browser para ver as alterações.\n*'''Firefox / Safari:''' Pressione ''Shift'' enquanto clica ''Recarregar'', ou pressione ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' no Mac)\n*'''Google Chrome:''' Pressione ''Ctrl-Shift-R'' (''⌘-Shift-R'' no Mac)\n*'''Internet Explorer:''' Pressione ''Ctrl'' enquanto clica ''Recarregar'', ou pressione ''Ctrl-F5''\n*'''Opera:''' Limpe a ''cache'' em ''Ferramentas → Preferências'' (''Tools → Preferences'')",
+       "clearyourcache": "'''Nota:''' Após gravar, terá de limpar a ''cache'' do seu navegador para ver as alterações.\n*'''Firefox / Safari:''' Pressione ''Shift'' enquanto clica ''Recarregar'', ou pressione ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' no Mac)\n*'''Google Chrome:''' Pressione ''Ctrl-Shift-R'' (''⌘-Shift-R'' no Mac)\n*'''Internet Explorer:''' Pressione ''Ctrl'' enquanto clica ''Recarregar'', ou pressione ''Ctrl-F5''\n*'''Opera:''' Limpe a ''cache'' em ''Ferramentas → Preferências'' (''Tools → Preferences'')",
        "usercssyoucanpreview": "'''Dica:''' Use o botão \"{{int:showpreview}}\" para testar o seu novo CSS antes de gravar.",
        "userjsyoucanpreview": "'''Dica:''' Use o botão \"{{int:showpreview}}\" para testar o seu novo JavaScript antes de gravar.",
        "usercsspreview": "'''Lembre-se de que está apenas a antever o seu CSS particular.\nEste ainda não foi gravado!'''",
        "previewconflict": "Esta antevisão do resultado apresenta o texto da caixa de edição acima tal como este aparecerá se escolher gravá-lo.",
        "session_fail_preview": "'''Não foi possível processar a edição devido à perda dos dados da sua sessão.\nTente novamente, por favor.\nCaso continue a não funcionar, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta.'''",
        "session_fail_preview_html": "'''Não foi possível processar a edição devido à perda dos dados da sua sessão.'''\n\n''Como a wiki {{SITENAME}} possibilita o uso de HTML bruto, a antevisão está oculta por precaução contra ataques com JavaScript.''\n\n'''Se esta é uma tentativa legítima de edição tente novamente, por favor.'''\nCaso continue a não funcionar, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta.",
-       "token_suffix_mismatch": "'''A edição foi rejeitada porque o seu browser alterou os sinais de pontuação no editor.'''\nA edição foi rejeitada para evitar perdas no texto da página.\nIsso acontece ocasionalmente quando se usa um serviço de proxy anonimizador mal configurado.'''",
+       "token_suffix_mismatch": "'''A edição foi rejeitada porque o seu navegador alterou os sinais de pontuação no editor.'''\nA edição foi rejeitada para evitar perdas no texto da página.\nIsso acontece ocasionalmente quando se usa um serviço de proxy anonimizador mal configurado.'''",
        "edit_form_incomplete": "'''Algumas partes do formulário de edição não chegaram ao servidor; verifique que a sua edição continua intacta e tente novamente, por favor.'''",
        "editing": "A editar $1",
        "creating": "A criar $1",
        "editconflict": "Conflito de edição: $1",
        "explainconflict": "A página foi alterada por alguém desde que começou a editá-la.\nA caixa de texto abaixo mostra o texto existente neste momento.\nAs suas mudanças são mostradas na área ao fundo da página.\nTerá de reintegrar as suas mudanças no texto da caixa abaixo.\n'''Só''' o texto desta caixa será gravado quando clicar \"{{int:savearticle}}\".",
        "yourtext": "O seu texto",
-       "storedversion": "Versão guardada",
+       "storedversion": "Versão gravada",
        "nonunicodebrowser": "'''Aviso: O seu navegador não é compatível com as especificações Unicode.\nFoi activado um sistema de edição alternativo que lhe permite editar as páginas com segurança: os caracteres não-ASCII aparecerão na caixa de edição no formato de códigos hexadecimais.'''",
        "editingold": "'''Aviso: Está a editar uma revisão desactualizada desta página.'''\nSe gravar, todas as mudanças feitas a partir desta revisão serão perdidas.",
        "yourdiff": "Diferenças",
        "template-semiprotected": "(semi-protegida)",
        "hiddencategories": "Esta página pertence a {{PLURAL:$1|uma categoria oculta|$1 categorias ocultas}}:",
        "edittools": "<!-- O texto colocado aqui será mostrado abaixo dos formulários de edição e de envio de ficheiros. -->",
-       "nocreatetext": "A {{SITENAME}} restringe a criação de páginas novas por utilizadores anónimos.\nPode voltar atrás e editar uma página já existente, ou [[Special:UserLogin|autenticar-se ou criar uma conta]].",
+       "nocreatetext": "A {{SITENAME}} restringe a criação de páginas novas por utilizadores anónimos.\nPode voltar atrás e editar uma página já existente, ou [[Special:UserLogin|inicie sessão ou criar uma conta]].",
        "nocreate-loggedin": "Não possui permissão para criar novas páginas.",
-       "sectioneditnotsupported-title": "Edição de seções não é suportada",
+       "sectioneditnotsupported-title": "Edição de seções não suportada",
        "sectioneditnotsupported-text": "A edição de seções não é suportada nesta página de edição.",
        "permissionserrors": "Erro de permissão",
        "permissionserrorstext": "Não possui permissão para fazer isso, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
        "content-failed-to-parse": "Falha ao analisar conteúdo $2 para modelo $1:$3",
        "invalid-content-data": "Dados de conteúdo inválidos",
        "content-not-allowed-here": "Conteúdo do tipo \"$1\" não é permitido na página [[$2]]",
-       "editwarning-warning": "Sair desta página fará com que você perca quaisquer alterações feitas por si.\nSe você se autenticou, pode desativar este aviso na secção \"{{int:prefs-editing}}\" das suas preferências.",
+       "editwarning-warning": "Sair desta página fará com que perca quaisquer alterações feitas por si.\nSe iniciou sessão, pode desativar este aviso na secção \"{{int:prefs-editing}}\" das suas preferências.",
        "editpage-notsupportedcontentformat-title": "Formato de conteúdo não suportado",
        "editpage-notsupportedcontentformat-text": "O formato de conteúdo $1 não é suportado pelo modelo de conteúdo $2.",
        "content-model-wikitext": "wikitexto",
        "converter-manual-rule-error": "Erro detetado na regra de conversão de língua manual",
        "undo-success": "É possível desfazer a edição.\nVerifique a comparação abaixo, para se certificar que corresponde ao que pretende fazer.\nDepois grave as alterações, para finalizar e desfazer a edição.",
        "undo-failure": "Não foi possível desfazer a edição por conflito com alterações intermédias.",
-       "undo-norev": "Não foi possível desfazer a edição porque ela não existe ou foi apagada.",
+       "undo-norev": "Não foi possível desfazer a edição porque não existe ou foi apagada.",
        "undo-nochange": "A edição parece já ter sido desfeita.",
        "undo-summary": "Desfez a edição $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussão]])",
        "undo-summary-username-hidden": "Desfez a edição $1 de um utilizador oculto",
        "currentrev": "Revisão atual",
        "currentrev-asof": "Edição atual desde as $1",
        "revisionasof": "Revisão das $1",
-       "revision-info": "Revisão das $1 por $2",
+       "revision-info": "Revisão em $1 por {{GENDER:$6|$2}}$7",
        "previousrevision": "← Revisão anterior",
        "nextrevision": "Revisão seguinte →",
        "currentrevisionlink": "Revisão atual",
        "revdelete-text-file": "Versões eliminadas do ficheiro ainda aparecerão no histórico da página, mas parte do seu conteúdo estará inacessível para o público.",
        "logdelete-text": "Os eventos eliminados ainda aparecerão no histórico da página, mas pare de seu conteúdo será inacessível ao público.",
        "revdelete-text-others": "Outros administradores em {{SITENAME}} podem aceder ao conteúdo oculto e torná-lo visível novamente através desta mesma interface, a menos que sejam definidas restrições adicionais.",
-       "revdelete-confirm": "Por favor confirme que pretende executar esta operação, que compreende as suas consequências e que o faz em concordância com as [[{{MediaWiki:Policy-url}}|políticas e recomendações]].",
+       "revdelete-confirm": "Por favor, confirme que pretende executar esta operação, que compreende as suas consequências e que o faz em concordância com as [[{{MediaWiki:Policy-url}}|políticas e recomendações]].",
        "revdelete-suppress-text": "A supressão '''só''' deverá ser usada nos seguintes casos:\n* Informação potencialmente caluniosa, difamatória ou injuriosa\n* Informação pessoal imprópria\n*: ''endereços de domicílio e números de telefone, números de identificação nacional, etc''",
        "revdelete-legend": "Definir restrições de visibilidade",
        "revdelete-hide-text": "Revisão do texto",
        "revdelete-hide-user": "Nome de utilizador/endereço de IP",
        "revdelete-hide-restricted": "Ocultar dados dos administradores e de todos os outros",
        "revdelete-radio-same": "(manter)",
-       "revdelete-radio-set": "Escondido",
+       "revdelete-radio-set": "Oculto",
        "revdelete-radio-unset": "Visível",
        "revdelete-suppress": "Ocultar dados dos administradores e de todos os outros",
        "revdelete-unsuppress": "Remover restrições das revisões restauradas",
        "revdelete-edit-reasonlist": "Editar motivos de eliminação",
        "revdelete-offender": "Autor da revisão:",
        "suppressionlog": "Registo de supressões",
-       "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.",
+       "suppressionlogtext": "Abaixo está uma lista das eliminações e bloqueios envolvendo conteúdo oculto para administradores.\nVeja a [[Special:BlockList|lista de bloqueios]] para uma lista de banimentos e bloqueios em efeito neste momento.",
        "mergehistory": "Fundir histórico de páginas",
        "mergehistory-header": "Esta página permite fundir o histórico de revisões de uma página no de outra.\nCertifique-se de que esta alteração manterá a continuidade histórica da página.",
        "mergehistory-box": "Fundir edições de duas páginas:",
        "searchmenu-exists": "<strong>Há uma página com o nome \"[[:$1]]\" nesta wiki.</strong> {{PLURAL:$2|0=|Veja também os outros resultados encontrados.}}",
        "searchmenu-new": "<strong>Crie a página \"[[:$1]]\" nesta wiki!</strong> {{PLURAL:$2|0=|Veja também a página encontrada na pesquisa.|Veja também os resultados da pesquisa.}}",
        "searchprofile-articles": "Páginas de conteúdo",
-       "searchprofile-project": "Páginas de ajuda e de projeto",
        "searchprofile-images": "Multimédia",
        "searchprofile-everything": "Todas",
        "searchprofile-advanced": "Personalizar",
        "searchprofile-articles-tooltip": "Pesquisar em $1",
-       "searchprofile-project-tooltip": "Pesquisar em $1",
        "searchprofile-images-tooltip": "Pesquisar ficheiros",
        "searchprofile-everything-tooltip": "Pesquisar em todo o conteúdo (incluindo páginas de discussão)",
-       "searchprofile-advanced-tooltip": "Personalizar os espaços nominais onde pesquisar",
+       "searchprofile-advanced-tooltip": "Personalizar os domínios onde pesquisar",
        "search-result-size": "$1 ({{PLURAL:$2|1 palavra|$2 palavras}})",
        "search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 ficheiro|$3 ficheiros}})",
        "search-result-score": "Relevancia: $1%",
        "search-redirect": "(redirecionamento de $1)",
        "search-section": "(seção $1)",
        "search-file-match": "(coincide com o conteúdo do ficheiro)",
-       "search-suggest": "Será que você quis dizer: $1",
+       "search-suggest": "Será que quis dizer: $1",
        "search-interwiki-caption": "Projetos irmãos",
        "search-interwiki-default": "Resultados de $1:",
        "search-interwiki-more": "(mais)",
        "search-relatedarticle": "Relacionado",
-       "searcheverything-enable": "Pesquisar em todos os espaços nominais",
        "searchrelated": "relacionados",
        "searchall": "todos",
        "showingresults": "{{PLURAL:$1|É apresentado '''um''' resultado|São apresentados até '''$1''' resultados}} abaixo{{PLURAL:$1||, começando pelo '''$2'''º}}.",
        "showingresultsheader": "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1–$2''' de '''$3'''}} para '''$4'''",
        "search-nonefound": "A pesquisa não produziu resultados.",
        "powersearch-legend": "Pesquisa avançada",
-       "powersearch-ns": "Pesquisar nos espaços nominais:",
+       "powersearch-ns": "Pesquisar nos domínios:",
        "powersearch-togglelabel": "Marcar:",
        "powersearch-toggleall": "Todos",
        "powersearch-togglenone": "Nenhum",
+       "powersearch-remember": "Lembrar seleção para pesquisas futuras",
        "search-external": "Pesquisa externa",
        "searchdisabled": "Foi impossibilitada a realização de pesquisas na {{SITENAME}}.\nEntretanto, pode realizar pesquisas através do Google.\nNote, no entanto, que a indexação da {{SITENAME}} neste motor de busca pode estar desatualizada.",
-       "search-error": "Um erro ocorreu enquanto se efectuava a busca: $1",
+       "search-error": "Um erro ocorreu enquanto se efectuava a pesquisa: $1",
        "preferences": "Preferências",
        "mypreferences": "Preferências",
        "prefs-edits": "Número de edições:",
        "prefs-watchlist-edits-max": "Máximo: 1000",
        "prefs-watchlist-token": "Chave secreta da lista de páginas vigiadas:",
        "prefs-misc": "Diversos",
-       "prefs-resetpass": "Alterar palavra-chave",
+       "prefs-resetpass": "Alterar palavra-passe",
        "prefs-changeemail": "Alterar correio eletrónico",
        "prefs-setemail": "Definir um endereço de correio eletrónico",
        "prefs-email": "Opções do correio eletrónico",
        "timezoneuseserverdefault": "Usar padrão da wiki ($1)",
        "timezoneuseoffset": "Outro (especificar diferença)",
        "servertime": "Hora do servidor:",
-       "guesstimezone": "Preencher a partir do browser",
+       "guesstimezone": "Preencher a partir do navegador",
        "timezoneregion-africa": "África",
        "timezoneregion-america": "América",
        "timezoneregion-antarctica": "Antártida",
        "timezoneregion-pacific": "Oceano Pacífico",
        "allowemail": "Aceitar correio eletrónico de outros utilizadores",
        "prefs-searchoptions": "Pesquisa",
-       "prefs-namespaces": "Espaços nominais",
-       "defaultns": "Por omissão, pesquisar nestes espaços nominais:",
+       "prefs-namespaces": "Domínios",
        "default": "padrão",
        "prefs-files": "Ficheiros",
        "prefs-custom-css": "CSS personalizada",
        "prefs-custom-js": "JS personalizado",
        "prefs-common-css-js": "CSS/JS partilhado por todos os temas:",
        "prefs-reset-intro": "Pode usar esta página para repor as configurações padrão das preferências.\nAs suas preferências serão modificadas para os valores predefinidos do site.\nEsta operação não pode ser desfeita.",
-       "prefs-emailconfirm-label": "Confirmação do endereço:",
+       "prefs-emailconfirm-label": "Confirmação do endereço eletrónico:",
        "youremail": "Correio eletrónico:",
        "username": "Nome de {{GENDER:$1|utilizador|utilizadora}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membro}} {{PLURAL:$1|do grupo|dos grupos}}:",
        "yourrealname": "Nome verdadeiro:",
        "yourlanguage": "Língua:",
        "yourvariant": "Variante da língua de conteúdo:",
-       "prefs-help-variant": "A tua variante preferida ou ortografia para mostrar no conteúdo das páginas desta wiki.",
-       "yournick": "Assinatura:",
+       "prefs-help-variant": "A sua variante preferida ou ortografia para mostrar no conteúdo das páginas desta wiki.",
+       "yournick": "Nova assinatura:",
        "prefs-help-signature": "Ao inserir comentários em páginas de discussão, assine-os colocando quatro tiles \"<nowiki>~~~~</nowiki>\" no fim dos comentários. Ao gravar, estes serão convertidos na sua assinatura mais a data e a hora da edição.",
        "badsig": "Assinatura inválida; verifique o código HTML utilizado.",
        "badsiglength": "A sua assinatura é demasiado longa.\nNão deverá conter mais de $1 {{PLURAL:$1|carácter|caracteres}}.",
        "prefs-help-gender": "Esta preferência é opcional.\nO software usa o seu valor para o endereçar e para o mencionar a outros usando o género gramatical apropriado.\nEsta informação será pública.",
        "email": "Correio eletrónico",
        "prefs-help-realname": "O fornecimento do nome verdadeiro é opcional.\nSe optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu trabalho.",
-       "prefs-help-email": "Opcional: o endereço de correio eletrónico é opcional, mas será necessário para redefinir a palavra-chave caso esqueça a antiga.",
+       "prefs-help-email": "Opcional: o endereço de correio eletrónico é opcional, mas será necessário para redefinir a palavra-passe caso esqueça a antiga.",
        "prefs-help-email-others": "Também pode optar por permitir que outros entrem em contacto consigo por correio eletrónico, através de uma ligação nas suas páginas de utilizador ou de discussão, sem revelar o seu endereço de correio eletrónico.",
        "prefs-help-email-required": "É necessário o endereço de correio eletrónico.",
        "prefs-info": "Informações básicas",
        "prefs-advancedrendering": "Opções avançadas",
        "prefs-advancedsearchoptions": "Opções avançadas",
        "prefs-advancedwatchlist": "Opções avançadas",
-       "prefs-displayrc": "Opções de visionamento",
-       "prefs-displaywatchlist": "Opções de apresentação",
+       "prefs-displayrc": "Opções de visualização",
+       "prefs-displaywatchlist": "Opções de visualização",
        "prefs-tokenwatchlist": "Chave",
        "prefs-diffs": "Diferenças",
        "prefs-help-prefershttps": "Esta preferência terá efeito no seu próximo início de sessão.",
        "prefs-tabs-navigation-hint": "Dica: Pode usar as setas direita e esquerda do teclado para navegar entre os separadores.",
-       "email-address-validity-valid": "Parece válido",
-       "email-address-validity-invalid": "Endereço válido necessário!",
+       "email-address-validity-valid": "O endereço de correio eletrónico parece válido",
+       "email-address-validity-invalid": "É necessário um endereço de correio eletrónico válido!",
        "userrights": "Gestão de privilégios do utilizador",
        "userrights-lookup-user": "Gerir grupos de utilizadores",
        "userrights-user-editname": "Introduza um nome de utilizador:",
        "userrights-reason": "Motivo:",
        "userrights-no-interwiki": "Não tem permissões para alterar os privilégios de utilizadores noutras wikis.",
        "userrights-nodatabase": "A base de dados $1 não existe ou não é uma base de dados local.",
-       "userrights-nologin": "Precisa [[Special:UserLogin|autenticar-se]] com uma conta de administrador para atribuir privilégios aos utilizadores.",
+       "userrights-nologin": "Precisa de [[Special:UserLogin|iniciar sessão]] com uma conta de administrador para atribuir privilégios aos utilizadores.",
        "userrights-notallowed": "A sua conta não tem permissão para adicionar ou remover privilégios a utilizadores.",
        "userrights-changeable-col": "Grupos que pode alterar",
        "userrights-unchangeable-col": "Grupos que não pode alterar",
-       "userrights-conflict": "Conflito entre alterações de privilégios de utilizador! Por favor, revise e confirme as suas mudanças.",
-       "userrights-removed-self": "Você removeu com sucesso os seus privilégios. Como resultado disso, já não consegue aceder a esta página.",
+       "userrights-conflict": "Conflito entre alterações de privilégios de utilizador! Por favor, reveja e confirme as suas mudanças.",
+       "userrights-removed-self": "Removeu com sucesso os seus privilégios. Como resultado disso, já não consegue aceder a esta página.",
        "group": "Grupo:",
        "group-user": "Utilizadores",
-       "group-autoconfirmed": "Utilizadores auto-confirmados",
+       "group-autoconfirmed": "Utilizadores autoconfirmados",
        "group-bot": "Robôs",
        "group-sysop": "Administradores",
        "group-bureaucrat": "Burocratas",
        "group-bureaucrat-member": "{{GENDER:$1|burocrata}}",
        "group-suppress-member": "{{GENDER:$1|supressor|supressora}}",
        "grouppage-user": "{{ns:project}}:Utilizadores",
-       "grouppage-autoconfirmed": "{{ns:project}}:Auto-confirmados",
+       "grouppage-autoconfirmed": "{{ns:project}}:Autoconfirmados",
        "grouppage-bot": "{{ns:project}}:Robôs",
        "grouppage-sysop": "{{ns:project}}:Administradores",
        "grouppage-bureaucrat": "{{ns:project}}:Burocratas",
        "right-reupload-own": "Sobrescrever um ficheiro existente carregado pelo mesmo utilizador",
        "right-reupload-shared": "Sobrescrever localmente ficheiros no repositório partilhado de imagens",
        "right-upload_by_url": "Carregar um ficheiro de um endereço URL",
-       "right-purge": "Purgar a ''cache'' de uma página no servidor sem confirmação",
+       "right-purge": "Limpar a ''cache'' de uma página no servidor sem confirmação",
        "right-autoconfirmed": "Editar páginas semi-protegidas",
        "right-bot": "Ser tratado como um processo automatizado",
        "right-nominornewtalk": "Não despoletar o aviso de mensagens novas ao fazer edições menores a páginas de discussão",
        "right-deletedtext": "Ver texto eliminado e mudanças entre revisões eliminadas",
        "right-browsearchive": "Pesquisar páginas eliminadas",
        "right-undelete": "Restaurar uma página",
-       "right-suppressrevision": "Rever e restaurar revisões ocultadas dos administradores",
+       "right-suppressrevision": "Rever e restaurar revisões ocultas dos administradores",
        "right-suppressionlog": "Ver registos privados",
        "right-block": "Impedir outros utilizadores de editarem",
        "right-blockemail": "Impedir um utilizador de enviar correio eletrónico",
        "right-hideuser": "Bloquear um nome de utilizador, escondendo-o do público",
-       "right-ipblock-exempt": "Contornar bloqueios de IP, bloqueios automáticos e bloqueios de gamas de IPs",
+       "right-ipblock-exempt": "Contornar bloqueios de IP, bloqueios automáticos e bloqueios de gamas de IP",
        "right-proxyunbannable": "Contornar bloqueios automáticos de proxies",
        "right-unblockself": "Desbloquearem-se a si próprios",
        "right-protect": "Mudar níveis de proteção e editar páginas protegidas em cascata",
        "right-edituserjs": "Editar os ficheiros JS de outros utilizadores",
        "right-editmyusercss": "Editar os seus próprios ficheiros CSS de utilizador",
        "right-editmyuserjs": "Editar os seus próprios ficheiros JavaScript de utilizador",
-       "right-viewmywatchlist": "Ver sua própria lista de páginas vigiadas",
-       "right-editmywatchlist": "Editar sua própria lista de páginas vigiadas. Observe que algumas ações seguirão adicionando páginas, mesmo sem este direito.",
-       "right-viewmyprivateinfo": "Ver os seus próprios dados privados (ex.: endereço de e-mail, nome real)",
-       "right-editmyprivateinfo": "Editar os seus próprios dados privados (ex.: endereço de e-mail, nome real)",
+       "right-viewmywatchlist": "Ver a sua lista de vigiados",
+       "right-editmywatchlist": "Editar a sua própria lista de páginas vigiadas. Observe que algumas ações continuaram a adicionar páginas, mesmo sem este direito.",
+       "right-viewmyprivateinfo": "Ver os seus próprios dados privados (ex.: endereço de correio eletrónico, nome real)",
+       "right-editmyprivateinfo": "Editar os seus próprios dados privados (ex.: endereço de correio eletrónico, nome real)",
        "right-editmyoptions": "Editar as suas próprias preferências",
        "right-rollback": "Reverter rapidamente as edições do último utilizador que editou uma página em particular",
-       "right-markbotedits": "Marcar edições revertidas como edições de bot",
+       "right-markbotedits": "Marcar edições revertidas como edições de robô",
        "right-noratelimit": "Não ser afetado pelos limites de velocidade de operação",
        "right-import": "Importar páginas de outras wikis",
        "right-importupload": "Importar páginas de um ficheiro xml",
        "right-siteadmin": "Bloquear e desbloquear a base de dados",
        "right-override-export-depth": "Exportar páginas incluindo páginas ligadas até uma profundidade de 5",
        "right-sendemail": "Enviar correio eletrónico a outros utilizadores",
-       "right-passwordreset": "Ver mensagens de redefinição da palavra-chave",
+       "right-passwordreset": "Ver mensagens de redefinição da palavra-passe",
        "newuserlogpage": "Registo de criação de utilizadores",
        "newuserlogpagetext": "Este é um registo de novas contas de utilizador",
        "rightslog": "Registo de privilégios de utilizador",
        "action-move-categorypages": "mover categorias",
        "action-movefile": "mover este ficheiro",
        "action-upload": "enviar este ficheiro",
-       "action-reupload": "sobrepor este ficheiro existente",
+       "action-reupload": "sobrescrever este ficheiro existente",
        "action-reupload-shared": "sobrepor este ficheiro num repositório partilhado",
        "action-upload_by_url": "enviar este ficheiro através de uma URL",
        "action-writeapi": "utilizar o modo de escrita da API",
        "action-userrights": "editar os privilégios de utilizadores",
        "action-userrights-interwiki": "editar privilégios de utilizadores de outras wikis",
        "action-siteadmin": "bloquear ou desbloquear a base de dados",
-       "action-sendemail": "enviar e-mails",
-       "action-editmywatchlist": "Editar sua lista de páginas vigiadas",
-       "action-viewmywatchlist": "Ver sua lista de páginas vigiadas",
-       "action-viewmyprivateinfo": "Ver sua informação privada",
-       "action-editmyprivateinfo": "Editar sua informação privada",
+       "action-sendemail": "enviar correio eletrónico",
+       "action-editmywatchlist": "editar a sua lista de páginas vigiadas",
+       "action-viewmywatchlist": "ver a sua lista de páginas vigiadas",
+       "action-viewmyprivateinfo": "ver a sua informação privada",
+       "action-editmyprivateinfo": "editar a sua informação privada",
        "nchanges": "$1 {{PLURAL:$1|alteração|alterações}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde a última visita}}",
        "enhancedrc-history": "histórico",
        "recentchanges-label-unpatrolled": "Esta edição ainda não foi patrulhada",
        "recentchanges-label-plusminus": "Alteração no tamanho da página, em bytes",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|lista de páginas novas]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|lista de páginas novas]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "Abaixo estão as mudanças desde <strong>$2</strong> (mostradas até <strong>$1</strong>).",
        "rclistfrom": "Mostrar as novas mudanças a partir das $3 $2",
        "rcshowhideminor": "$1 edições menores",
        "rcshowhideminor-show": "Mostrar",
-       "rcshowhideminor-hide": "Esconder",
+       "rcshowhideminor-hide": "Ocultar",
        "rcshowhidebots": "$1 robôs",
        "rcshowhidebots-show": "Mostrar",
-       "rcshowhidebots-hide": "Esconder",
+       "rcshowhidebots-hide": "Ocultar",
        "rcshowhideliu": "$1 utilizadores registados",
        "rcshowhideliu-show": "Mostrar",
-       "rcshowhideliu-hide": "Esconder",
+       "rcshowhideliu-hide": "Ocultar",
        "rcshowhideanons": "$1 utilizadores anónimos",
        "rcshowhideanons-show": "Mostrar",
-       "rcshowhideanons-hide": "Esconder",
+       "rcshowhideanons-hide": "Ocultar",
        "rcshowhidepatr": "$1 edições patrulhadas",
        "rcshowhidepatr-show": "Mostrar",
-       "rcshowhidepatr-hide": "Esconder",
+       "rcshowhidepatr-hide": "Ocultar",
        "rcshowhidemine": "$1 as minhas edições",
        "rcshowhidemine-show": "Mostrar",
-       "rcshowhidemine-hide": "Esconder",
+       "rcshowhidemine-hide": "Ocultar",
        "rclinks": "Mostrar as últimas $1 mudanças nos últimos $2 dias<br />$3",
        "diff": "dif",
        "hist": "his",
-       "hide": "Esconder",
+       "hide": "Ocultar",
        "show": "Mostrar",
        "minoreditletter": "m",
        "newpageletter": "N",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} após mudança",
        "newsectionsummary": "/* $1 */ nova seção",
        "rc-enhanced-expand": "Mostrar detalhes",
-       "rc-enhanced-hide": "Esconder detalhes",
+       "rc-enhanced-hide": "Ocultar detalhes",
        "rc-old-title": "originalmente criado como \"$1\"",
        "recentchangeslinked": "Alterações relacionadas",
        "recentchangeslinked-feed": "Alterações relacionadas",
        "recentchangeslinked-toolbox": "Alterações relacionadas",
        "recentchangeslinked-title": "Alterações relacionadas com \"$1\"",
-       "recentchangeslinked-summary": "Lista das mudanças recentes a todas as páginas para as quais a página fornecida contém ligações (ou de todas as que pertencem à categoria fornecida).\nAs suas [[Special:Watchlist|páginas vigiadas]] aparecem a '''negrito'''.",
+       "recentchangeslinked-summary": "Esta é uma lista de mudanças recentes a todas as páginas para as quais a página fornecida contém ligações (ou de todas as que pertencem à categoria fornecida).\nAs suas [[Special:Watchlist|páginas vigiadas]] aparecem a '''negrito'''.",
        "recentchangeslinked-page": "Nome da página:",
        "recentchangeslinked-to": "Inversamente, mostrar mudanças às páginas que contêm ligações para esta",
        "upload": "Carregar ficheiro",
        "uploadnologin": "Não autenticado",
        "uploadnologintext": "Tem de $1 para enviar ficheiros.",
        "upload_directory_missing": "O diretório de carregamento de ficheiros ($1) não existe e o servidor de internet não conseguiu criá-lo.",
-       "upload_directory_read_only": "O servidor de internet não possui permissão de escrita no diretório de carregamento de ficheiros ($1).",
+       "upload_directory_read_only": "O servidor de Internet não possui permissão de escrita no diretório de carregamento de ficheiros ($1).",
        "uploaderror": "Erro ao carregar",
        "upload-recreate-warning": "'''Aviso: Um ficheiro com esse nome foi eliminado ou movido.'''\n\nPara sua conveniência, é apresentado de seguida o registo de eliminação e de movimento da página:",
-       "uploadtext": "Utilize o formulário abaixo para fazer o carregamento de novos ficheiros.\nPara ver ou pesquisar ficheiros anteriormente enviados, consulte a [[Special:FileList|lista de ficheiros]].\nOs reenvios de um ficheiro são também registados no [[Special:Log/upload|registo de carregamentos]] e as eliminações no [[Special:Log/delete|registo de eliminações]].\n\nPara utilizar um ficheiro numa página, depois de ter feito o upload, insira uma ligação com um dos seguintes formatos:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.jpg]]</nowiki></code>''' para mostrar uma imagem nas suas dimensões originais;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.png|200px|thumb|left|texto]]</nowiki></code>''' para mostrar uma imagem com a dimensão horizontal de 200 pixels, dentro de uma caixa, na margem esquerda, contendo 'texto' como descrição (pode usar subconjuntos destas características);\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:ficheiro.ogg]]</nowiki></code>''' para apresentar uma ligação direta para o ficheiro em vez de mostrá-lo, quer este tenha por conteúdo uma imagem ou outros dados.",
+       "uploadtext": "Utilize o formulário abaixo para fazer o carregamento de novos ficheiros.\nPara ver ou pesquisar ficheiros anteriormente enviados, consulte a [[Special:FileList|lista de ficheiros]].\nOs reenvios de um ficheiro são também registados no [[Special:Log/upload|registo de carregamentos]] e as eliminações no [[Special:Log/delete|registo de eliminações]].\n\nPara utilizar um ficheiro numa página, depois de ter feito o carregamento, insira uma ligação com um dos seguintes formatos:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.jpg]]</nowiki></code>''' para mostrar uma imagem nas suas dimensões originais;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.png|200px|thumb|left|texto]]</nowiki></code>''' para mostrar uma imagem com a dimensão horizontal de 200 pixels, dentro de uma caixa, na margem esquerda, contendo 'texto' como descrição (pode usar subconjuntos destas características);\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:ficheiro.ogg]]</nowiki></code>''' para apresentar uma ligação direta para o ficheiro em vez de mostrá-lo, quer este tenha por conteúdo uma imagem ou outros dados.",
        "upload-permitted": "Tipos de ficheiro permitidos: $1.",
        "upload-preferred": "Tipos de ficheiro preferidos: $1.",
        "upload-prohibited": "Tipos de ficheiro proibidos: $1.",
        "savefile": "Gravar ficheiro",
        "uploadedimage": "carregou \"[[$1]]\"",
        "overwroteimage": "enviou uma nova versão de \"[[$1]]\"",
-       "uploaddisabled": "Carregamentos impossibilitados",
-       "copyuploaddisabled": "Upload por URL impossibilitado.",
-       "uploaddisabledtext": "O carregamento de ficheiros está impossibilitado.",
-       "php-uploaddisabledtext": "O carregamento de ficheiros está impossibilitado no PHP.\nVerifique a configuração file_uploads, por favor.",
-       "uploadscripted": "Este ficheiro contém HTML ou código que pode ser erradamente interpretado por um browser.",
-       "uploadscriptednamespace": "Este ficheiro SVG contém um espaço nominal que não é permitido '$1'",
+       "uploaddisabled": "Carregamentos desativados",
+       "copyuploaddisabled": "Carregamento por URL desativado.",
+       "uploaddisabledtext": "O carregamento de ficheiros está desativado.",
+       "php-uploaddisabledtext": "O carregamento de ficheiros está desativado no PHP.\nVerifique a configuração file_uploads, por favor.",
+       "uploadscripted": "Este ficheiro contém HTML ou código que pode ser erradamente interpretado por um navegador.",
+       "uploadscriptednamespace": "Este ficheiro SVG contém um domínio que não é permitido \"$1\".",
        "uploadinvalidxml": "Erro detectado na análise do XML do ficheiro carregado.",
-       "uploadvirus": "O ficheiro contém um vírus! Detalhes: $1",
-       "uploadjava": "Este é um ficheiro ZIP que contém um ficheiro .class de Java.\nNão é permitido o upload de ficheiros Java, porque estes podem contornar as restrições de segurança.",
+       "uploadvirus": "O ficheiro contém um vírus! \nDetalhes: $1",
+       "uploadjava": "Este é um ficheiro ZIP que contém um ficheiro .class de Java.\nNão é permitido o carregamento de ficheiros Java, porque estes podem contornar as restrições de segurança.",
        "upload-source": "Ficheiro de origem",
        "sourcefilename": "Nome do ficheiro de origem:",
        "sourceurl": "URL fonte:",
        "filename-bad-prefix": "O nome do ficheiro que está a enviar começa por '''\"$1\"''', um nome pouco explicativo, normalmente originado de forma automática por câmaras digitais. Escolha um nome de ficheiro mais explicativo, por favor.",
        "filename-prefix-blacklist": " #<!-- deixe esta linha exactamente como está --> <pre>\n# A sintaxe é a seguinte:\n#   * Tudo a partir do carácter \"#\" até ao fim da linha é um comentário\n#   * Todas as linhas não vazias são um prefixo para nomes de ficheiros típicos atribuídos automaticamente por câmaras digitais\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # alguns telefones móveis\nIMG # genérico\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- deixe esta linha exactamente como está -->",
        "upload-success-subj": "Envio efetuado com sucesso",
-       "upload-success-msg": "O seu upload de [$2] foi bem sucedido. Está disponível aqui: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problema no upload",
-       "upload-failure-msg": "Ocorreu um problema com o seu upload de [$2]:\n\n$1",
-       "upload-warning-subj": "Aviso de upload",
-       "upload-warning-msg": "Ocorreu um problema no seu upload de [$2]. Pode voltar ao [[Special:Upload/stash/$1|formulário de upload]] para resolver o problema.",
+       "upload-success-msg": "O seu carregamento de [$2] foi bem sucedido. Está disponível aqui: [[:{{ns:file}}:$1]]",
+       "upload-failure-subj": "Problema no carregamento",
+       "upload-failure-msg": "Ocorreu um problema com o seu carregamento de [$2]:\n\n$1",
+       "upload-warning-subj": "Aviso de carregamento",
+       "upload-warning-msg": "Ocorreu um problema no seu carregamento de [$2]. Pode voltar ao [[Special:Upload/stash/$1|formulário de carregamento]] para resolver o problema.",
        "upload-proto-error": "Protocolo incorreto",
        "upload-proto-error-text": "O carregamento remoto de ficheiros requer endereços URL começados por <code>http://</code> ou <code>ftp://</code>.",
        "upload-file-error": "Erro interno",
        "upload-too-many-redirects": "A URL continha demasiados redirecionamentos",
        "upload-http-error": "Ocorreu um erro HTTP: $1",
        "upload-copy-upload-invalid-domain": "Não é possível realizar carregamentos remotos neste domínio.",
-       "backend-fail-stream": "Não foi possível transmitir o ficheiro $1.",
-       "backend-fail-backup": "Não foi possível fazer backup do ficheiro $1.",
+       "backend-fail-stream": "Não foi possível transmitir o ficheiro \"$1\".",
+       "backend-fail-backup": "Não foi possível fazer cópia de segurança do ficheiro \"$1\".",
        "backend-fail-notexists": "O ficheiro $1 não existe.",
        "backend-fail-hashes": "Não foi possível obter os hashes do ficheiro para comparação.",
-       "backend-fail-notsame": "Já existe um ficheiro não idêntico em $1 .",
-       "backend-fail-invalidpath": "$1 não é um caminho de armazenamento válido.",
-       "backend-fail-delete": "Não foi possível excluir o ficheiro $1.",
+       "backend-fail-notsame": "Já existe um ficheiro não idêntico em \"$1\" .",
+       "backend-fail-invalidpath": "\"$1\" não é um caminho de armazenamento válido.",
+       "backend-fail-delete": "Não foi possível eliminar o ficheiro \"$1\".",
        "backend-fail-describe": "Não foi possível mudar metadados para o ficheiro \"$1\".",
-       "backend-fail-alreadyexists": "O ficheiro $1 já existe.",
-       "backend-fail-store": "Não foi possível armazenar o ficheiro $1 em $2.",
-       "backend-fail-copy": "Não foi possível copiar o ficheiro $1 para $2.",
-       "backend-fail-move": "Não é possível mover o ficheiro $1 para $2.",
+       "backend-fail-alreadyexists": "O ficheiro \"$1\" já existe.",
+       "backend-fail-store": "Não foi possível armazenar o ficheiro \"$1\" em \"$2\".",
+       "backend-fail-copy": "Não foi possível copiar o ficheiro \"$1\" para \"$2\".",
+       "backend-fail-move": "Não é possível mover o ficheiro \"$1\" para \"$2\".",
        "backend-fail-opentemp": "Não foi possível abrir o ficheiro temporário.",
        "backend-fail-writetemp": "Não foi possível escrever no ficheiro temporário.",
        "backend-fail-closetemp": "Não foi possível fechar o ficheiro temporário.",
-       "backend-fail-read": "Não foi possível ler o ficheiro $1.",
-       "backend-fail-create": "Não foi possível gravar o ficheiro $1.",
-       "backend-fail-maxsize": "Não foi possível gravar o ficheiro $1 porque tem mais do que {{PLURAL:$2|um byte|$2 bytes}}.",
+       "backend-fail-read": "Não foi possível ler o ficheiro \"$1\".",
+       "backend-fail-create": "Não foi possível gravar o ficheiro \"$1\".",
+       "backend-fail-maxsize": "Não foi possível gravar o ficheiro \"$1\" porque tem mais do que {{PLURAL:$2|um byte|$2 bytes}}.",
        "backend-fail-readonly": "O servidor de armazenamento \"$1\" está atualmente no modo \"somente leitura\". A razão dada foi: \"$2\"",
        "backend-fail-synced": "O ficheiro \"$1\" está num estado inconsistente nos servidores de armazenamento interno",
        "backend-fail-connect": "Não foi possível estabelecer ligação com o servidor de armazenamento \"$1\".",
        "img-auth-nopathinfo": "PATH_INFO em falta.\nO seu servidor não está configurado para passar esta informação.\nPode ser baseado em CGI e não consegue suportar img_auth.\nConsulte a documentação em https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "O endereço especificado não conduz ao diretório de carregamento de ficheiros configurado.",
        "img-auth-badtitle": "Não é possível construir um título válido a partir de \"$1\".",
-       "img-auth-nologinnWL": "Não está autenticado e o ficheiro \"$1\" não está na lista branca.",
+       "img-auth-nologinnWL": "Não tem a sessão iniciada e o ficheiro \"$1\" não está na lista branca.",
        "img-auth-nofile": "O ficheiro \"$1\" não existe.",
        "img-auth-isdir": "Está tentando aceder ao diretório \"$1\".\nSó é permitido o acesso a ficheiros.",
-       "img-auth-streaming": "A fazer o ''streaming'' de \"$1\".",
+       "img-auth-streaming": "A fazer a transmissão de \"$1\".",
        "img-auth-public": "A função do img_auth.php é produzir ficheiros a partir de uma wiki privada.\nEsta wiki está configurada como uma wiki pública.\nPara optimizar a segurança, o img_auth.php está impossibilitado de executar.",
        "img-auth-noread": "O utilizador não tem acesso de leitura ao ficheiro \"$1\".",
        "http-invalid-url": "URL inválida: $1",
-       "http-invalid-scheme": "URLs iniciadas pelo prefixo \"$1\" não são aceites.",
+       "http-invalid-scheme": "URL iniciadas pelo prefixo \"$1\" não são aceites.",
        "http-request-error": "O pedido HTTP falhou devido a um erro desconhecido.",
        "http-read-error": "Erro de leitura HTTP.",
        "http-timed-out": "O pedido HTTP expirou.",
        "http-curl-error": "Ocorreu um erro ao aceder à URL: $1",
        "http-bad-status": "Ocorreu um problema durante o pedido HTTP: $1 $2",
        "upload-curl-error6": "Não foi possível aceder à URL",
-       "upload-curl-error6-text": "Não foi possível aceder à URL.\nVerifique se o endereço está correto e o site disponível, por favor.",
+       "upload-curl-error6-text": "Não foi possível aceder à URL.\nVerifique se o endereço está correto e o sítio disponível, por favor.",
        "upload-curl-error28": "Tempo limite para o envio do ficheiro excedido",
-       "upload-curl-error28-text": "O site demorou muito tempo a responder. Verifique que o site está disponível, aguarde alguns momentos e tente novamente, por favor. Talvez queira tentar num horário menos congestionado.",
+       "upload-curl-error28-text": "O sítio demorou muito tempo a responder. Verifique que o sítio está disponível, aguarde alguns momentos e tente novamente, por favor. Talvez queira tentar num horário menos congestionado.",
        "license": "Licença:",
        "license-header": "Licenciamento",
        "nolicense": "Nenhuma selecionada",
        "filehist-current": "atual",
        "filehist-datetime": "Data/Hora",
        "filehist-thumb": "Miniatura",
-       "filehist-thumbtext": "Miniatura ''(thumbnail)'' da versão das $1",
+       "filehist-thumbtext": "Miniatura da versão das $1",
        "filehist-nothumb": "Miniatura indisponível",
        "filehist-user": "Utilizador",
        "filehist-dimensions": "Dimensões",
        "uploadnewversion-linktext": "Carregar uma nova versão deste ficheiro",
        "shared-repo-from": "de $1",
        "shared-repo": "um repositório partilhado",
-       "upload-disallowed-here": "Você não pode substituir este ficheiro.",
+       "upload-disallowed-here": "Não pode substituir este ficheiro.",
        "filerevert": "Reverter $1",
        "filerevert-legend": "Reverter ficheiro",
        "filerevert-intro": "Está prestes a reverter o ficheiro '''[[Media:$1|$1]]''' para a [$4 versão de $2 às $3].",
        "mimesearch": "Pesquisa MIME",
        "mimesearch-summary": "Esta página permite pesquisar os ficheiros da wiki, filtrando-os a partir do seu tipo MIME. O tipo MIME deve ser especificado na forma: tipo/subtipo. Alguns exemplos de tipos frequentes: <code>image/jpeg</code>, <code>image/gif</code>, <code>image/png</code>, <code>application/pdf</code>, <code>application/vnd.ms-excel</code>, <code>application/zip</code>, <code>application/vnd.ms-powerpoint</code>.",
        "mimetype": "Tipo MIME:",
-       "download": "download",
+       "download": "descarregar",
        "unwatchedpages": "Páginas não vigiadas",
        "listredirects": "Lista de redirecionamentos",
        "listduplicatedfiles": "Lista de ficheiros com duplicatas",
        "listduplicatedfiles-summary": "Esta é uma lista de ficheiros cuja suas versões mais recentes são duplicatas da versão mais recente de outros ficheiros. Somente os ficheiros locais são considerados.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] possui [[$3|{{PLURAL:$2|uma duplicata|$2 duplicatas}}]].",
        "unusedtemplates": "Predefinições não utilizadas",
-       "unusedtemplatestext": "Esta página lista todas as páginas no espaço nominal {{ns:template}} que não são incluídas em nenhuma outra página. Lembre-se de verificar a existência de outras ligações para as predefinições, antes de eliminá-las.",
+       "unusedtemplatestext": "Esta página lista todas as páginas no domínio {{ns:template}} que não são incluídas em nenhuma outra página. Lembre-se de verificar a existência de outras ligações para as predefinições, antes de eliminá-las.",
        "unusedtemplateswlh": "outras ligações",
        "randompage": "Página aleatória",
-       "randompage-nopages": "Não há páginas {{PLURAL:$2|no seguinte espaço nominal|nos seguintes espaços nominais}}: $1.",
+       "randompage-nopages": "Não há páginas {{PLURAL:$2|no seguinte domínio|nos seguintes domínios}}: $1.",
        "randomincategory": "Página aleatória na categoria",
        "randomincategory-invalidcategory": "\"$1\" não é um nome de categoria válido",
        "randomincategory-nopages": "Não há páginas na categoria [[:Category:$1|$1]].",
        "randomincategory-selectcategory": "Obter página aleatória da categoria: $1 $2",
        "randomincategory-selectcategory-submit": "Ir",
        "randomredirect": "Redirecionamento aleatório",
-       "randomredirect-nopages": "Não há redirecionamentos no espaço nominal \"$1\".",
+       "randomredirect-nopages": "Não há redirecionamentos no domínio \"$1\".",
        "statistics": "Estatísticas",
        "statistics-header-pages": "Estatísticas de páginas",
        "statistics-header-edits": "Estatísticas de edições",
        "fewestrevisions": "Páginas com menos revisões",
        "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "ncategories": "$1 {{PLURAL:$1|categoria|categorias}}",
-       "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
+       "ninterwikis": "$1 {{PLURAL:$1|interlíngua|interlínguas}}",
        "nlinks": "$1 {{PLURAL:$1|ligação|ligações}}",
        "nmembers": "$1 {{PLURAL:$1|membro|membros}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membro|membros}}",
        "wantedtemplates": "Predefinições desejadas",
        "mostlinked": "Páginas com mais afluentes",
        "mostlinkedcategories": "Categorias com mais membros",
-       "mostlinkedtemplates": "Predefinições com mais afluentes",
+       "mostlinkedtemplates": "Páginas com mais afluentes",
        "mostcategories": "Páginas com mais categorias",
        "mostimages": "Ficheiros com mais afluentes",
-       "mostinterwikis": "Páginas com mais interwikis",
+       "mostinterwikis": "Páginas com mais interlínguas",
        "mostrevisions": "Páginas com mais revisões",
        "prefixindex": "Todas as páginas iniciadas por",
-       "prefixindex-namespace": "Todas as páginas com prefixo (espaço nominal $1)",
+       "prefixindex-namespace": "Todas as páginas com prefixo (domínio $1)",
        "prefixindex-strip": "Remover prefixo",
        "shortpages": "Páginas curtas",
        "longpages": "Páginas longas",
        "protectedpages-indef": "Apenas proteções indefinidas",
        "protectedpages-summary": "Esta página lista páginas existentes que estão protegidas. Para ver os títulos cuja criação está impossibilitada, consulte [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Apenas proteções em cascata",
-       "protectedpages-noredirect": "Esconder redirecionamentos",
+       "protectedpages-noredirect": "Ocultar redirecionamentos",
        "protectedpagesempty": "Neste momento, nenhuma das páginas está protegida com estes parâmetros.",
        "protectedpages-timestamp": "Data e hora",
        "protectedpages-page": "Página",
        "usereditcount": "$1 {{PLURAL:$1|edição|edições}}",
        "usercreated": "{{GENDER:$3|Criado|Criada}} em $1 às $2",
        "newpages": "Páginas recentes",
-       "newpages-username": "Nome de utilizador:",
+       "newpages-username": "Nome de utilizador(a):",
        "ancientpages": "Páginas mais antigas",
        "move": "Mover",
        "movethispage": "Mover esta página",
        "querypage-disabled": "Esta página especial está desativada para não prejudicar o desempenho.",
        "booksources": "Fontes bibliográficas",
        "booksources-search-legend": "Pesquisar referências bibliográficas",
-       "booksources-go": "Prosseguir",
+       "booksources-go": "Ir",
        "booksources-text": "É apresentada abaixo uma lista de ligações para outros sítios na Internet que vendem livros novos e usados e talvez possuam informações adicionais sobre os livros que procura:",
        "booksources-invalid-isbn": "O número ISBN fornecido não parece ser válido; verifique a existência de erros ao copiar da fonte original.",
        "specialloguserlabel": "Executante:",
        "allpagesfrom": "Apresentar páginas desde:",
        "allpagesto": "Apresentar páginas até:",
        "allarticles": "Todas as páginas",
-       "allinnamespace": "Todas as páginas (espaço nominal $1)",
+       "allinnamespace": "Todas as páginas (domínio $1)",
        "allpagessubmit": "Ver",
        "allpagesprefix": "Apresentar páginas iniciadas por:",
        "allpagesbadtitle": "O título de página fornecido era inválido ou tinha um prefixo interlínguas ou interwikis.\nTalvez contenha um ou mais caracteres que não podem ser usados nos títulos.",
-       "allpages-bad-ns": "A {{SITENAME}} não possui o espaço nominal \"$1\".",
+       "allpages-bad-ns": "{{SITENAME}} não possui o domínio \"$1\".",
        "allpages-hide-redirects": "Ocultar redirecionamentos",
        "cachedspecial-viewing-cached-ttl": "Está a ver uma versão desta página guardada na cache há pelo menos $1.",
        "cachedspecial-viewing-cached-ts": "Está a ver uma versão da página guardada na cache, que pode estar desatualizada.",
        "cachedspecial-refresh-now": "Ver mais recente.",
        "categories": "Categorias",
        "categoriespagetext": "{{PLURAL:$1|A seguinte categoria contém páginas ou ficheiros multimédia|As seguintes categorias contêm páginas ou ficheiros multimédia}}.\nAs [[Special:UnusedCategories|categorias não utilizadas]] não são apresentadas nesta lista.\nVeja também as [[Special:WantedCategories|categorias desejadas]].",
-       "categoriesfrom": "Listar categorias começando por:",
+       "categoriesfrom": "Mostrar categorias que comecem por:",
        "special-categories-sort-count": "ordenar por contagem",
        "special-categories-sort-abc": "ordenar alfabeticamente",
        "deletedcontributions": "Edições eliminadas",
        "deletedcontributions-title": "Edições eliminadas",
        "sp-deletedcontributions-contribs": "contribuições",
        "linksearch": "Pesquisa de ligações externas",
-       "linksearch-pat": "Padrão de busca:",
-       "linksearch-ns": "Espaço nominal:",
-       "linksearch-ok": "Prosseguir",
+       "linksearch-pat": "Padrão de pesquisa:",
+       "linksearch-ns": "Domínio:",
+       "linksearch-ok": "Pesquisar",
        "linksearch-text": "É possível usar caracteres de substituição ''(wildcards)'', tais como \"*.wikipedia.org\".\nÉ necessário, pelo menos, um domínio de topo, por exemplo \"*.org\".<br />\n{{PLURAL:$2|Protocolo suportado|Protocolos suportados}}: <code>$1</code> (será utilizado http:// se não for especificado um protocolo).",
        "linksearch-line": "Ligação para $1 na página $2",
        "linksearch-error": "Caracteres de substituição ''(wildcards)'' só podem ser usados no início do endereço.",
-       "listusersfrom": "Mostrar utilizadores começando por:",
+       "listusersfrom": "Mostrar utilizadores começados por:",
        "listusers-submit": "Mostrar",
        "listusers-noresult": "Não foram encontrados utilizadores.",
        "listusers-blocked": "(bloqueado)",
        "activeusers": "Lista de utilizadores ativos",
        "activeusers-intro": "Esta é uma lista dos utilizadores com qualquer tipo de atividade {{PLURAL:$1|no último dia|nos últimos $1 dias}}.",
        "activeusers-count": "$1 {{PLURAL:$1|ação|ações}} {{PLURAL:$3|no último dia|nos últimos $3 dias}}",
-       "activeusers-from": "Mostrar utilizadores começando por:",
-       "activeusers-hidebots": "Esconder robôs",
-       "activeusers-hidesysops": "Esconder administradores",
+       "activeusers-from": "Mostrar utilizadores começados por:",
+       "activeusers-hidebots": "Ocultar robôs",
+       "activeusers-hidesysops": "Ocultar administradores",
        "activeusers-noresult": "Nenhum utilizador encontrado.",
        "listgrouprights": "Privilégios dos grupos de utilizadores",
        "listgrouprights-summary": "A seguinte lista contém os grupos de utilizadores definidos nesta wiki, com os respectivos privilégios de acesso.\nEncontram-se disponíveis [[{{MediaWiki:Listgrouprights-helppage}}|informações adicionais]] sobre privilégios individuais.",
        "listgrouprights-removegroup-self": "Remover a própria conta {{PLURAL:$2|do grupo|dos grupos}}: $1",
        "listgrouprights-addgroup-self-all": "Adicionar a própria conta a todos os grupos",
        "listgrouprights-removegroup-self-all": "Remover a própria conta de todos os grupos",
-       "listgrouprights-namespaceprotection-header": "Restrições do campo nominal",
-       "listgrouprights-namespaceprotection-namespace": "Campo nominal",
+       "listgrouprights-namespaceprotection-header": "Restrições do domínio",
+       "listgrouprights-namespaceprotection-namespace": "Domínio",
        "listgrouprights-namespaceprotection-restrictedto": "Direito(s) do utilizador para editar",
        "trackingcategories": "Monitoramento de categorias",
-       "trackingcategories-summary": "Esta página lista as categorias monitoradas que foram geradas automaticamente pelo software MediaWiki. Seus nomes podem ser alterados ao editar sua mensagem correspondente no domínio {{ns:8}}.",
+       "trackingcategories-summary": "Esta página lista as categorias monitoradas que foram geradas automaticamente pelo software MediaWiki. Os seus nomes podem ser alterados ao editar sua mensagem correspondente no domínio {{ns:8}}.",
        "trackingcategories-msg": "Categoria monitorada",
        "trackingcategories-name": "Nome da mensagem",
        "trackingcategories-desc": "Critérios de inclusão",
        "noindex-category-desc": "A página não é indexada por robôs porque contém a palavra mágica <code><nowiki>__NOINDEX__</nowiki></code> e está num domínio onde o estatuto é permitido.",
+       "index-category-desc": "A página contém a palavra mágica <code><nowiki>__INDEX__</nowiki></code> (e está num domínio em que essa marca é permitida) e, portanto, será indexada pelos robôs mesmo quando normalmente não o seria.",
+       "post-expand-template-inclusion-category-desc": "A expansão de todas as predefinições faria com que o tamanho da página ultrapassasse <code>$wgMaxArticleSize</code>, pelo que algumas predefinições não foram expandidas.",
+       "post-expand-template-argument-category-desc": "A expansão de um argumento de prefefinição (algo em chavetas triplas, como <code>{{{Foo}}}</code> ) torna a página maior do que <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "Demasiadas funções do analisador custosas (como <code>#ifexist</code>) incluídas numa página. Consulte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Categoria adicionada se a página contém um link quebrado para um ficheiro (um link para incorporar um ficheiro que não existe).",
+       "hidden-category-category-desc": "Esta é uma categoria com a marca <code><nowiki>__HIDDENCAT__</nowiki></code>, que faz com que ela não apareça na caixa de links de categoria nas páginas, por omissão.",
        "trackingcategories-nodesc": "Nenhuma descrição disponível.",
        "trackingcategories-disabled": "A categoria está desactivada.",
        "mailnologin": "Não existe endereço de envio",
        "emailccsubject": "Cópia da sua mensagem para $1: $2",
        "emailsent": "Mensagem enviada",
        "emailsenttext": "A sua mensagem foi enviada.",
-       "emailuserfooter": "Esta mensagem foi enviada por $1 para $2 usando a opção \"Contactar este utilizador\" da {{SITENAME}}.",
+       "emailuserfooter": "Esta mensagem foi enviada por $1 para $2 através da opção \"Contactar este utilizador\" em {{SITENAME}}.",
        "usermessage-summary": "Deixar mensagem de sistema.",
        "usermessage-editor": "Editor de mensagens de sistema",
        "watchlist": "Páginas vigiadas",
        "wlshowlast": "Ver últimas $1 horas $2 dias $3",
        "watchlist-options": "Opções da lista de páginas vigiadas",
        "watching": "A vigiar...",
-       "unwatching": "Deixando de vigiar...",
+       "unwatching": "A deixar de vigiar...",
        "watcherrortext": "Ocorreu um erro ao alterar a configuração da sua lista de páginas vigiadas para \"$1\".",
        "enotif_reset": "Marcar todas as páginas como visitadas",
-       "enotif_impersonal_salutation": "Utilizador da \"{{SITENAME}}\"",
+       "enotif_impersonal_salutation": "Utilizador de {{SITENAME}}",
        "enotif_subject_deleted": "A página  $1 de {{SITENAME}} foi {{GENDER:$2|eliminada}} por $2",
        "enotif_subject_created": "A página $1 de {{SITENAME}} foi {{GENDER:$2|criada}} por $2",
        "enotif_subject_moved": "A página $1 de {{SITENAME}} foi {{GENDER:$2|movida}} por $2",
        "delete-warning-toobig": "Esta página tem um histórico de edições longo, com mais de $1 {{PLURAL:$1|edição|edições}}.\nEliminá-la poderá causar problemas na base de dados da {{SITENAME}};\nprossiga com precaução.",
        "deleting-backlinks-warning": "'''Aviso:''' Há [[Special:WhatLinksHere/{{FULLPAGENAME}}|páginas]] que contêm ligações para a página que está prestes a eliminar ou que a transcluem.",
        "rollback": "Reverter edições",
-       "rollback_short": "Voltar",
-       "rollbacklink": "voltar",
-       "rollbacklinkcount": "reverter $1 {{PLURAL:$1|edição|edições}}",
-       "rollbacklinkcount-morethan": "reverter mais do que $1 {{PLURAL:$1|edição|edições}}",
+       "rollback_short": "Desfazer",
+       "rollbacklink": "desfazer",
+       "rollbacklinkcount": "desfazer $1 {{PLURAL:$1|edição|edições}}",
+       "rollbacklinkcount-morethan": "desfazer mais do que $1 {{PLURAL:$1|edição|edições}}",
        "rollbackfailed": "A reversão falhou",
        "cantrollback": "Não foi possível reverter a edição; o último contribuidor é o único autor desta página",
        "alreadyrolled": "Não foi possível reverter as edições de [[:$1]] por [[User:$2|$2]] ([[User talk:$2|discussão]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nalguém editou ou já reverteu a página.\n\nA última edição foi de [[User:$3|$3]] ([[User talk:$3|discussão]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "revertpage-nouser": "Foram revertidas as edições de um utilizador oculto para a última revisão de {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Foram revertidas as edições de $1, com o conteúdo passando a estar como na última edição de $2.",
        "sessionfailure-title": "Erro de sessão",
-       "sessionfailure": "Foram detectados problemas com a sua sessão;\na operação foi cancelada como medida de proteção contra a interceptação de sessões.\nVolte à página anterior, refresque-a e tente novamente.",
+       "sessionfailure": "Foram detectados problemas com a sua sessão;\na operação foi cancelada como medida de proteção contra a interceptação de sessões.\nVolte à página anterior, recarregue-a e tente novamente.",
        "protectlogpage": "Registo de proteção",
        "protectlogtext": "Encontra abaixo o registo de proteção e desproteção de páginas.\nConsulte a [[Special:ProtectedPages|lista de páginas protegidas]] para ver as páginas que se encontram protegidas neste momento.",
        "protectedarticle": "protegeu \"[[$1]]\"",
        "protect-title": "Alterar o nível de proteção de \"$1\"",
        "protect-title-notallowed": "Ver o nível de proteção de \"$1\"",
        "prot_1movedto2": "moveu [[$1]] para [[$2]]",
-       "protect-badnamespace-title": "Espaço nominal não passível de proteção",
-       "protect-badnamespace-text": "Páginas neste espaço nominal não podem ser protegidas.",
+       "protect-badnamespace-title": "Domínio não passível de proteção",
+       "protect-badnamespace-text": "Páginas neste domínio não podem ser protegidas.",
        "protect-norestrictiontypes-text": "Esta página não pode ser protegida porque não há nenhum tipo de restrição disponível.",
        "protect-norestrictiontypes-title": "Página não passível de proteção",
        "protect-legend": "Confirmar proteção",
        "protectcomment": "Motivo:",
-       "protectexpiry": "Expiração:",
+       "protectexpiry": "Expira a:",
        "protect_expiry_invalid": "O tempo de expiração fornecido é inválido.",
        "protect_expiry_old": "O tempo de expiração fornecido situa-se no passado.",
        "protect-unchain-permissions": "Desbloquear outras opções de proteção",
        "protect-cascadeon": "Esta página está atualmente protegida porque está incluída {{PLURAL:$1|na página listada a seguir, a qual|nas páginas listadas a seguir, as quais}} têm a proteção em cascata ativada.\nAlterações feitas ao nível de proteção desta página não afetarão a proteção em cascata.",
        "protect-default": "Permitir todos os utilizadores",
        "protect-fallback": "Permitir apenas utilizadores com o privilégio de \"$1\"",
-       "protect-level-autoconfirmed": "Permitir apenas utilizadores auto-confirmados",
+       "protect-level-autoconfirmed": "Permitir apenas utilizadores autoconfirmados",
        "protect-level-sysop": "Permitir apenas administradores",
        "protect-summary-cascade": "em cascata",
        "protect-expiring": "expira a $1 (UTC)",
        "undelete-error-long": "Foram encontrados erros ao tentar restaurar o ficheiro:\n\n$1",
        "undelete-show-file-confirm": "Tem a certeza de que quer ver a revisão eliminada do ficheiro \"<nowiki>$1</nowiki>\" de $2 às $3?",
        "undelete-show-file-submit": "Sim",
-       "namespace": "Espaço nominal:",
+       "namespace": "Domínio:",
        "invert": "Inverter seleção",
-       "tooltip-invert": "Marque esta caixa para esconder as alterações a páginas no espaço nominal selecionado (e no espaço nominal associado, se escolheu fazê-lo)",
-       "namespace_association": "Espaço nominal associado",
-       "tooltip-namespace_association": "Marque esta caixa para incluir também o espaço nominal de conteúdo ou de discussão associado à sua seleção",
+       "tooltip-invert": "Marque esta caixa para esconder as alterações a páginas no domínio selecionado (e no domínio associado, se escolheu fazê-lo)",
+       "namespace_association": "Domínio associado",
+       "tooltip-namespace_association": "Marque esta caixa para incluir também o domínio de conteúdo ou de discussão associado à sua seleção",
        "blanknamespace": "(Principal)",
        "contributions": "Contribuições {{GENDER:$1|do utilizador|da utilizadora}}",
        "contributions-title": "Contribuições {{GENDER:$1|do utilizador|da utilizadora}} $1",
        "mycontris": "Contribuições",
        "contribsub2": "Para {{GENDER:$3|$1}} ($2)",
-       "contributions-userdoesnotexist": "A conta de utilizador \"$1\" não está registrada.",
+       "contributions-userdoesnotexist": "A conta de utilizador \"$1\" não está registada.",
        "nocontribs": "Não foram encontradas alterações com este critério.",
        "uctop": "(atual)",
        "month": "Até o mês:",
        "sp-contributions-blocked-notice": "Este utilizador está bloqueado neste momento.\nPara referência é apresentado abaixo o último registo de bloqueio:",
        "sp-contributions-blocked-notice-anon": "Este endereço IP está bloqueado neste momento.\nPara referência é apresentado abaixo o último registo de bloqueio:",
        "sp-contributions-search": "Pesquisar contribuições",
-       "sp-contributions-username": "Endereço IP ou utilizador:",
+       "sp-contributions-username": "Endereço de IP ou utilizador(a):",
        "sp-contributions-toponly": "Mostrar somente as revisões mais recentes",
        "sp-contributions-newonly": "Mostrar só edições que são criações de páginas",
        "sp-contributions-submit": "Pesquisar",
        "whatlinkshere-page": "Página:",
        "linkshere": "As seguintes páginas têm ligação a '''[[:$1]]''':",
        "nolinkshere": "Não existem afluentes para '''[[:$1]]''' com as condições especificadas.",
-       "nolinkshere-ns": "Não existem ligações para '''[[:$1]]''' no espaço nominal selecionado.",
+       "nolinkshere-ns": "Não existem ligações para <strong>[[:$1]]</strong> no domínio selecionado.",
        "isredirect": "página de redirecionamento",
        "istemplate": "inclusão",
        "isimage": "ligação para ficheiro",
        "blockip": "Bloquear utilizador",
        "blockip-legend": "Bloquear utilizador",
        "blockiptext": "Utilize o formulário abaixo para bloquear o acesso de escrita a um endereço IP específico ou a um nome de utilizador.\nIsto só deve ser feito para prevenir vandalismo e de acordo com a [[{{MediaWiki:Policy-url}}|política]]. Indique a seguir um motivo de bloqueio específico (por exemplo, indicando as páginas que foram alvo de vandalismo).",
-       "ipaddressorusername": "Endereço IP ou nome de utilizador:",
-       "ipbexpiry": "Expiração:",
+       "ipaddressorusername": "Endereço de IP ou utilizador(a):",
+       "ipbexpiry": "Validade:",
        "ipbreason": "Motivo:",
        "ipbreason-dropdown": "*Razões comuns para um bloqueio\n** Inserção de informações falsas\n** Remoção de conteúdos de páginas\n** Inserção de \"spam\" para sítios externos\n** Inserção de conteúdo sem sentido/incompreensível nas páginas\n** Comportamento intimidador/inoportuno\n** Uso abusivo de contas múltiplas\n** Nome de utilizador inaceitável",
        "ipb-hardblock": "Impedir que utilizadores autenticados editem a partir deste endereço IP",
        "blocklist": "Utilizadores bloqueados",
        "ipblocklist": "Utilizadores bloqueados",
        "ipblocklist-legend": "Procurar um utilizador bloqueado",
-       "blocklist-userblocks": "Esconder bloqueios de contas",
-       "blocklist-tempblocks": "Esconder bloqueios temporários",
-       "blocklist-addressblocks": "Esconder bloqueios de IP único",
+       "blocklist-userblocks": "Ocultar bloqueios de contas",
+       "blocklist-tempblocks": "Ocultar bloqueios temporários",
+       "blocklist-addressblocks": "Ocultar bloqueios de IP único",
        "blocklist-rangeblocks": "Ocultar bloqueios de faixas",
        "blocklist-timestamp": "Data e hora",
        "blocklist-target": "Destinatário",
        "anononlyblock": "apenas anón.",
        "noautoblockblock": "bloqueio automático desativado",
        "createaccountblock": "criação de conta bloqueada",
-       "emailblock": "correio electrónico desactivado",
+       "emailblock": "correio electrónico desativado",
        "blocklist-nousertalk": "impedido de editar a própria página de discussão",
        "ipblocklist-empty": "A lista de bloqueios encontra-se vazia.",
        "ipblocklist-no-results": "O endereço IP ou nome de utilizador procurado não se encontra bloqueado.",
        "block-log-flags-noemail": "correio electrónico desactivado",
        "block-log-flags-nousertalk": "impossibilitado de editar a própria página de discussão",
        "block-log-flags-angry-autoblock": "ativado o bloqueio automático melhorado",
-       "block-log-flags-hiddenname": "nome de usuário ocultado",
-       "range_block_disabled": "A funcionalidade de administrador para o bloqueio de gamas de IPs está desativada.",
-       "ipb_expiry_invalid": "Tempo de expiração inválido.",
-       "ipb_expiry_temp": "Bloqueios com nome de utilizador ocultado devem ser permanentes.",
+       "block-log-flags-hiddenname": "nome de utilizador oculto",
+       "range_block_disabled": "A funcionalidade de administrador para o bloqueio de gamas de IP está desativada.",
+       "ipb_expiry_invalid": "Tempo de validade inválido.",
+       "ipb_expiry_temp": "Bloqueios com nome de utilizador oculto devem ser permanentes.",
        "ipb_hide_invalid": "Não foi possível suprimir esta conta; ela possui mais de {{PLURAL:$1|uma edição|$1 edições}}.",
        "ipb_already_blocked": "\"$1\" já se encontra bloqueado",
        "ipb-needreblock": "$1 já se encontra bloqueado. Deseja alterar as configurações?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Outro bloqueio|Outros bloqueios}}",
-       "unblock-hideuser": "Não pode desbloquear o utilizador, porque o nome deste utilizador foi ocultado.",
+       "unblock-hideuser": "Não pode desbloquear o utilizador, porque o nome deste utilizador foi oculto.",
        "ipb_cant_unblock": "Erro: O bloqueio com ID $1 não foi encontrado. Pode já ter sido desbloqueado.",
        "ipb_blocked_as_range": "Erro: O IP $1 não se encontra bloqueado de forma direta e não pode ser desbloqueado deste modo. No entanto, está bloqueado como parte da gama $2, a qual pode ser desbloqueada.",
-       "ip_range_invalid": "Gama de IPs inválida.",
-       "ip_range_toolarge": "Não são permitidas gamas de IPs maiores do que /$1.",
+       "ip_range_invalid": "Gama de IP inválida.",
+       "ip_range_toolarge": "Não são permitidas gamas de IP maiores do que /$1.",
        "proxyblocker": "Bloqueador de proxies",
        "proxyblockreason": "O seu endereço IP foi bloqueado por ser um ''proxy'' público.\nContacte o seu fornecedor de internet ou o serviço de apoio técnico e informe-os deste grave problema de segurança, por favor.",
        "sorbsreason": "O seu endereço IP encontra-se listado como ''proxy'' aberto na DNSBL utilizada pela {{SITENAME}}.",
        "sorbs_create_account_reason": "O seu endereço IP encontra-se listado como ''proxy'' aberto na DNSBL utilizada pela {{SITENAME}}. Não pode criar uma conta",
        "xffblockreason": "Um endereço IP presente no cabeçalho X-Forwarded-For, seja seu ou de um servidor de proxy que estiver a usar, foi bloqueado. A razão do bloqueio original foi: $1",
-       "cant-see-hidden-user": "O utilizador que está tentando bloquear já está bloqueado e oculto.\nComo não tem o privilégio para ocultar utilizadores ''(hideuser)'', não pode ver ou editar o bloqueio deste utilizador.",
+       "cant-see-hidden-user": "O utilizador que está a tentar bloquear já está bloqueado e oculto.\nComo não tem o privilégio para ocultar utilizadores ''(hideuser)'', não pode ver ou editar o bloqueio deste utilizador.",
        "ipbblocked": "Não pode bloquear ou desbloquear outros, porque está bloqueado",
        "ipbnounblockself": "Não lhe é permitido desbloquear-se a si mesmo",
        "lockdb": "Bloquear a base de dados",
        "unlockdbsuccesstext": "A base de dados foi desbloqueada.",
        "lockfilenotwritable": "O ficheiro de bloqueio da base de dados não pode ser escrito.\nPara bloquear ou desbloquear a base de dados, este precisa de poder ser escrito pelo servidor de internet.",
        "databasenotlocked": "A base de dados não está bloqueada.",
-       "lockedbyandtime": "(por $1 em $2 às $3)",
+       "lockedbyandtime": "(por {{GENDER:$1|$1}} em $2 às $3)",
        "move-page": "Mover $1",
        "move-page-legend": "Mover página",
        "movepagetext": "Usando o formulário abaixo pode mover esta página e todo o seu histórico de edições para uma página nova com outro nome.\nA página original será transformada num redirecionamento para a página nova.\nPode corrigir de forma automática os redirecionamentos existentes que apontam para a página original.\nCaso escolha não o fazer, após a operação certifique-se de que dela não resultaram  [[Special:DoubleRedirects|redirecionamentos duplos]] ou [[Special:BrokenRedirects|quebrados]].\nÉ da sua responsabilidade verificar que as ligações continuam a apontar para onde é suposto que apontem.\n\nNote que a página '''não''' será movida se já existir uma página com o novo título, a menos que esta última seja um redirecionamento sem qualquer histórico de edições.\nIsto significa que pode mover uma página de volta para o seu nome original se a tiver movido por engano e que não pode mover uma página para cima de outra já existente.\n\n'''CUIDADO!'''\nNuma página popular esta operação pode representar uma mudança drástica e inesperada;\ncertifique-se de que compreende as consequências da mudança antes de prosseguir, por favor.",
        "movearticle": "Mover página",
        "moveuserpage-warning": "'''Aviso:''' Está prestes a mover uma página de utilizador. Note que a página será apenas movida, ''sem'' alterar o nome do utilizador.",
        "movecategorypage-warning": "<strong>Aviso:</strong> Está prestes a mover uma categoria. Por favor, note que apenas moverá a página da categoria e quaisquer páginas que estejam listadas <em>não</em> serão recategorizadas na nova.",
-       "movenologintext": "Precisa de ser um utilizador registado e [[Special:UserLogin|autenticado]] para poder mover uma página.",
+       "movenologintext": "Precisa de ser um utilizador registado e [[Special:UserLogin|ter sessão iniciada]] para poder mover uma página.",
        "movenotallowed": "Não tem permissão para mover páginas.",
        "movenotallowedfile": "Não possui permissão para mover ficheiros.",
        "cant-move-user-page": "Não tem permissão para mover páginas de utilizador (pode mover sub-páginas).",
        "movepage-moved-noredirect": "A criação de um redirecionamento foi suprimida.",
        "articleexists": "Uma página com este nome já existe, ou o nome que escolheu é inválido.\nEscolha outro nome, por favor.",
        "cantmove-titleprotected": "Não pode mover uma página para esse destino, porque o novo título foi protegido para evitar a sua criação",
-       "movetalk": "Mover também a página de discussão associada.",
+       "movetalk": "Mover também a página de discussão associada",
        "move-subpages": "Mover subpáginas (até $1)",
        "move-talk-subpages": "Mover subpáginas da página de discussão (até $1)",
        "movepage-page-exists": "A página $1 já existe e não pode ser substituída.",
        "delete_and_move_confirm": "Sim, eliminar a página",
        "delete_and_move_reason": "Eliminada para poder mover \"[[$1]]\" para este título",
        "selfmove": "Os títulos de origem e destino são iguais;\nnão é possível mover uma página para ela mesma.",
-       "immobile-source-namespace": "Não é possível mover páginas no espaço nominal \"$1\"",
-       "immobile-target-namespace": "Não é possível mover páginas para o espaço nominal \"$1\"",
+       "immobile-source-namespace": "Não é possível mover páginas no domínio \"$1\"",
+       "immobile-target-namespace": "Não é possível mover páginas para o domínio \"$1\"",
        "immobile-target-namespace-iw": "Uma ligação interlíngua não é um destino válido para uma movimentação de página.",
        "immobile-source-page": "Esta página não pode ser movida.",
        "immobile-target-page": "Não é possível mover para esse título de destino.",
        "bad-target-model": "O destino pretendido usa um modelo de conteúdo diferente. Não é possível converter de $1 para $2.",
-       "imagenocrossnamespace": "Não é possível mover imagem para espaço nominal que não de imagens",
-       "nonfile-cannot-move-to-file": "Não é possível mover algo que não é um ficheiro para o espaço nominal de ficheiros",
+       "imagenocrossnamespace": "Não é possível mover imagem para domínio que não de imagens",
+       "nonfile-cannot-move-to-file": "Não é possível mover algo que não é um ficheiro para o domínio de ficheiros",
        "imagetypemismatch": "A extensão do novo ficheiro não corresponde ao seu tipo",
        "imageinvalidfilename": "O nome do ficheiro alvo é inválido",
        "fix-double-redirects": "Atualizar todos os redirecionamentos que apontem para o título original",
        "export-submit": "Exportar",
        "export-addcattext": "Adicionar à lista páginas da categoria:",
        "export-addcat": "Adicionar",
-       "export-addnstext": "Adicionar páginas do espaço nominal:",
+       "export-addnstext": "Adicionar páginas do domínio:",
        "export-addns": "Adicionar",
        "export-download": "Gravar em ficheiro",
        "export-templates": "Incluir predefinições",
        "allmessagesname": "Nome",
        "allmessagesdefault": "Texto padrão",
        "allmessagescurrent": "Texto atual",
-       "allmessagestext": "Esta é a lista das mensagens de sistema disponíveis no espaço nominal MediaWiki.\nSe deseja colaborar na localização genérica do MediaWiki, visite [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] e a [//translatewiki.net translatewiki.net].",
+       "allmessagestext": "Esta é a lista das mensagens de sistema disponíveis no domínio MediaWiki.\nSe deseja colaborar na localização genérica do MediaWiki, visite [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] e a [//translatewiki.net translatewiki.net].",
        "allmessagesnotsupportedDB": "Esta página não pode ser usada porque a <strong>$wgUseDatabaseMessages</strong> foi desativada.",
        "allmessages-filter-legend": "Filtro",
        "allmessages-filter": "Filtrar pelo estado de personalização:",
        "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": "Espaço nominal de destino:",
+       "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.",
-       "importstart": "Importando páginas...",
+       "importstart": "A importar páginas...",
        "import-revision-count": "{{PLURAL:$1|uma edição|$1 edições}}",
        "importnopages": "Não existem páginas a importar.",
        "imported-log-entries": "{{PLURAL:$1|Foi importada $1 entrada|Foram importadas $1 entradas}} de registo.",
        "import-upload": "Enviar dados em XML",
        "import-token-mismatch": "Perda dos dados da sessão. Tente novamente, por favor.",
        "import-invalid-interwiki": "Não é possível importar da wiki especificada.",
-       "import-error-edit": "A página \"$1\" não foi importada porque você não tem permissão para editá-la.",
-       "import-error-create": "A página \"$1\" não foi importada porque você não tem permissão para criá-la.",
+       "import-error-edit": "A página \"$1\" não foi importada porque não tem permissão para editá-la.",
+       "import-error-create": "A página \"$1\" não foi importada porque não tem permissão para criá-la.",
        "import-error-interwiki": "A página \"$1\" não pode ser importada pois o seu nome está reservado para um ligação externa (interlíngua).",
-       "import-error-special": "A página \"$1\" não pode ser importada porque ela pertence a um espaço nominal especial que não permite páginas.",
-       "import-error-invalid": "A página \"$1\" não pode ser importada porque seu nome é inválido.",
+       "import-error-special": "A página \"$1\" não pode ser importada porque pertence a um domínio especial que não permite páginas.",
+       "import-error-invalid": "A página \"$1\" não pode ser importada porque seu nome é inválido.",
        "import-error-unserialize": "Revisão $2 da página \"$1\" não pode ser desserializada. Foi relatado que a revisão usava o modelo de conteúdo $3 serializado como $4.",
        "import-error-bad-location": "A revisão $2, que usa o modelo de conteúdo $3, não pode ser gravada em \"$1\" nesta wiki, porque o modelo não é suportado nessa página.",
        "import-options-wrong": "{{PLURAL:$2|Opção errada|Opções erradas}}: <nowiki>$1</nowiki>",
        "import-rootpage-nosubpage": "O domínio \"$1\" da página de raiz não permite subpáginas.",
        "importlogpage": "Registo de importações",
        "importlogpagetext": "Importações administrativas de páginas com a preservação do histórico de edição de outras wikis.",
-       "import-logentry-upload": "importou [[$1]] por upload de ficheiro",
+       "import-logentry-upload": "importou [[$1]] por carregamento de ficheiro",
        "import-logentry-upload-detail": "{{PLURAL:$1|uma edição|$1 edições}}",
        "import-logentry-interwiki": "transwikis $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|$1 edição|$1 edições}} de $2",
        "javascripttest": "Teste de JavaScript",
-       "javascripttest-title": "Executando os testes $1",
+       "javascripttest-title": "A executar os testes $1",
        "javascripttest-pagetext-noframework": "Esta página é reservada para a execução de testes de JavaScript.",
        "javascripttest-pagetext-unknownframework": "Estrutura de testes \"$1\" desconhecida.",
        "javascripttest-pagetext-frameworks": "Escolha, por favor, uma das seguintes estruturas de teste: $1",
        "tooltip-pt-preferences": "Configuração dos comportamentos que prefere da wiki",
        "tooltip-pt-watchlist": "Lista de mudanças nas páginas que está a vigiar",
        "tooltip-pt-mycontris": "Lista das suas contribuições",
-       "tooltip-pt-login": "É encorajado a autenticar-se, apesar de não ser obrigatório.",
+       "tooltip-pt-login": "É encorajado que inicie sessão, apesar de não ser obrigatório.",
        "tooltip-pt-logout": "Sair da conta",
        "tooltip-ca-talk": "Discussão sobre o conteúdo da página",
-       "tooltip-ca-edit": "Pode editar esta página.\nUtilize o botão \"Antever resultado\" antes de gravar, por favor.",
+       "tooltip-ca-edit": "Pode editar esta página.\nUtilize o botão de antevisão do resultado antes de gravar, por favor.",
        "tooltip-ca-addsection": "Iniciar uma nova seção",
-       "tooltip-ca-viewsource": "Esta página está protegida; só pode ver o conteúdo.",
+       "tooltip-ca-viewsource": "Esta página está protegida.\nApenas pode visualizar o seu conteúdo",
        "tooltip-ca-history": "Edições anteriores desta página.",
        "tooltip-ca-protect": "Proteger esta página",
        "tooltip-ca-unprotect": "Alterar a proteção desta página",
-       "tooltip-ca-delete": "Apagar esta página",
+       "tooltip-ca-delete": "Eliminar esta página",
        "tooltip-ca-undelete": "Restaurar edições feitas a esta página antes da eliminação",
        "tooltip-ca-move": "Mover esta página",
        "tooltip-ca-watch": "Adicionar esta página à lista de páginas vigiadas",
        "tooltip-ca-unwatch": "Remover esta página da lista de páginas vigiadas",
-       "tooltip-search": "Pesquisar nesta wiki",
+       "tooltip-search": "Pesquisar em {{SITENAME}}",
        "tooltip-search-go": "Ir para uma página com este nome exacto, caso exista",
        "tooltip-search-fulltext": "Procurar páginas que contêm este texto",
-       "tooltip-p-logo": "Visite a página principal",
+       "tooltip-p-logo": "Visitar a página principal",
        "tooltip-n-mainpage": "Visitar a página principal",
        "tooltip-n-mainpage-description": "Visitar a página principal",
        "tooltip-n-portal": "Sobre o projeto, o que se pode fazer e onde encontrar as coisas",
        "tooltip-feed-atom": "''Feed'' Atom desta página",
        "tooltip-t-contributions": "Ver as contribuições deste utilizador",
        "tooltip-t-emailuser": "Enviar uma mensagem de correio a este utilizador",
-       "tooltip-t-upload": "Upload de ficheiros",
+       "tooltip-t-upload": "Carregar ficheiros",
        "tooltip-t-specialpages": "Lista de páginas especiais",
        "tooltip-t-print": "Versão para impressão desta página",
-       "tooltip-t-permalink": "Ligação permanente para esta versão desta página",
+       "tooltip-t-permalink": "Ligação permanente para esta versão da página",
        "tooltip-ca-nstab-main": "Ver a página de conteúdo",
        "tooltip-ca-nstab-user": "Ver a página de utilizador",
        "tooltip-ca-nstab-media": "Ver a página de multimédia",
        "tooltip-ca-nstab-special": "Esta é uma página especial, não pode ser editada.",
        "tooltip-ca-nstab-project": "Ver a página de projeto",
-       "tooltip-ca-nstab-image": "Ver a página do ficheiro",
+       "tooltip-ca-nstab-image": "Ver a página de ficheiro",
        "tooltip-ca-nstab-mediawiki": "Ver a mensagem de sistema",
        "tooltip-ca-nstab-template": "Ver a predefinição",
        "tooltip-ca-nstab-help": "Ver a página de ajuda",
-       "tooltip-ca-nstab-category": "Ver a página da categoria",
+       "tooltip-ca-nstab-category": "Ver a página de categoria",
        "tooltip-minoredit": "Marcar como edição menor",
        "tooltip-save": "Gravar as alterações",
        "tooltip-preview": "Antever as suas alterações. Use antes de gravar, por favor!",
        "tooltip-summary": "Introduza um resumo breve",
        "interlanguage-link-title": "$1 — $2",
        "common.css": "/* Código CSS colocado aqui será aplicado a todos os temas */",
-       "cologneblue.css": "/* Código CSS colocado aqui afectará os utilizadores do tema Azul colonial */",
        "monobook.css": "/* Código CSS colocado aqui afectará os utilizadores do tema Monobook */",
-       "modern.css": "/* Código CSS colocado aqui afectará os utilizadores do tema Moderno */",
        "vector.css": "/* Código CSS colocado aqui afectará os utilizadores do tema Vector */",
        "print.css": "/* Código CSS colocado aqui afectará as impressões */",
        "noscript.css": "/* Os estilos CSS colocados aqui afetarão os utilizadores que tenham o JavaScript desativado em seus navegadores */",
        "common.js": "/* Código Javascript colocado aqui será carregado para todos os utilizadores em cada carregamento de página */",
-       "cologneblue.js": "/* Código Javascript colocado aqui será carregado para utilizadores do tema Azul colonial */",
        "monobook.js": "/* Código Javascript colocado aqui será carregado para utilizadores do tema Monobook */",
-       "modern.js": "/* Código Javascript colocado aqui será carregado para utilizadores do tema Moderno */",
        "vector.js": "/* Código Javascript colocado aqui será carregado para utilizadores do tema Vector */",
        "anonymous": "{{PLURAL:$1|Utilizador anónimo|Utilizadores anónimos}} da {{SITENAME}}",
        "siteuser": "$1 da {{SITENAME}}",
        "pageinfo-category-pages": "Número de páginas",
        "pageinfo-category-subcats": "Número de subcategorias",
        "pageinfo-category-files": "Número de ficheiros",
-       "skinname-cologneblue": "Azul colonial",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderno",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "Marcar como patrulhada",
        "markaspatrolledtext": "Marcar esta página como patrulhada",
        "nextdiff": "Edição posterior →",
        "mediawarning": "<strong>Aviso:</strong> Este tipo de ficheiro pode conter código malicioso.\nSe o executar, o seu sistema pode ficar comprometido.",
        "imagemaxsize": "Tamanho limite da imagem:<br /><em>(para páginas de descrição de ficheiros)</em>",
-       "thumbsize": "Tamanho de miniaturas:",
+       "thumbsize": "Tamanho da miniatura:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|página|páginas}}",
        "file-info": "tamanho: $1, tipo MIME: $2",
        "file-info-size": "$1 × $2 pixels, tamanho: $3, tipo MIME: $4",
        "metadata": "Metadados",
        "metadata-help": "Este ficheiro contém informação adicional, provavelmente acrescentada pela câmara digital ou pelo digitalizador usados para criá-lo.\nCaso o ficheiro tenha sido modificado a partir do seu estado original, alguns detalhes poderão não refletir completamente as mudanças efetuadas.",
        "metadata-expand": "Mostrar detalhes adicionais",
-       "metadata-collapse": "Esconder detalhes adicionais",
+       "metadata-collapse": "Ocultar detalhes adicionais",
        "metadata-fields": "Os campos de metadados de imagens listados nesta mensagem serão incluídos na página de descrição da imagem quando a tabela de metadados estiver recolhida. Por omissão, outros campos estarão ocultos.\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": "Largura",
        "exif-imagelength": "Altura",
        "exif-subjectdistancerange": "Distância de alcance do motivo",
        "exif-imageuniqueid": "Identificação única da imagem",
        "exif-gpsversionid": "Versão de GPS",
-       "exif-gpslatituderef": "Latitude Norte ou Sul",
+       "exif-gpslatituderef": "Latitude norte ou sul",
        "exif-gpslatitude": "Latitude",
-       "exif-gpslongituderef": "Longitude Este ou Oeste",
+       "exif-gpslongituderef": "Longitude este ou oeste",
        "exif-gpslongitude": "Longitude",
        "exif-gpsaltituderef": "Referência de altitude",
        "exif-gpsaltitude": "Altitude",
        "exif-subjectdistancerange-1": "Macro",
        "exif-subjectdistancerange-2": "Vista próxima",
        "exif-subjectdistancerange-3": "Vista distante",
-       "exif-gpslatitude-n": "Latitude Norte",
-       "exif-gpslatitude-s": "Latitude Sul",
-       "exif-gpslongitude-e": "Longitude Este",
-       "exif-gpslongitude-w": "Longitude Oeste",
+       "exif-gpslatitude-n": "Latitude norte",
+       "exif-gpslatitude-s": "Latitude sul",
+       "exif-gpslongitude-e": "Longitude este",
+       "exif-gpslongitude-w": "Longitude oeste",
        "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metro|metros}} acima do nível do mar",
        "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metro|metros}} abaixo do nível do mar",
        "exif-gpsstatus-a": "Medição em progresso",
        "exif-gpsspeed-n": "Nós",
        "exif-gpsdestdistance-k": "Quilómetros",
        "exif-gpsdestdistance-m": "Milhas",
-       "exif-gpsdestdistance-n": "Miles náuticas",
+       "exif-gpsdestdistance-n": "Milhas náuticas",
        "exif-gpsdop-excellent": "Excelente ($1)",
        "exif-gpsdop-good": "Bom ($1)",
        "exif-gpsdop-moderate": "Moderado ($1)",
        "scarytranscludefailed": "[Não foi possível obter a predefinição a partir de $1]",
        "scarytranscludefailed-httpstatus": "[Não foi possível obter a predefinição a partir de $1: HTTP $2]",
        "scarytranscludetoolong": "[URL longa demais]",
-       "deletedwhileediting": "<strong>AVISO:</strong> Esta página foi eliminada depois de você ter começado a editá-la!",
-       "confirmrecreate": "Depois de você ter começado a editar esta página, o utilizador [[User:$1|$1]] ([[User talk:$1|conversar]]) eliminou-a pelo seguinte motivo:\n: <em>$2</em>\nPor favor, confirme que você quer realmente recriar esta página.",
-       "confirmrecreate-noreason": "O utilizador [[User:$1|$1]] ([[User talk:$1|discussão]]) eliminou esta página depois de você ter começado a editá-la. Confirme que deseja recriar a página, por favor.",
+       "deletedwhileediting": "<strong>AVISO:</strong> Esta página foi eliminada depois de ter começado a editá-la!",
+       "confirmrecreate": "Depois de ter começado a editar esta página, o utilizador [[User:$1|$1]] ([[User talk:$1|conversar]]) eliminou-a pelo seguinte motivo:\n: <em>$2</em>\nPor favor, confirme que quer realmente recriar esta página.",
+       "confirmrecreate-noreason": "O utilizador [[User:$1|$1]] ([[User talk:$1|discussão]]) eliminou esta página depois de ter começado a editá-la. Confirme que deseja recriar a página, por favor.",
        "recreate": "Recriar",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Limpar a memória cache desta página?",
-       "confirm-purge-bottom": "Purgar uma página, limpa a cache e força a sua versão mais recente a aparecer.",
+       "confirm-purge-bottom": "Recarregar uma página, limpa a cache e força a sua versão mais recente a aparecer.",
        "confirm-watch-button": "OK",
-       "confirm-watch-top": "Adicionar esta página às suas páginas vigiadas?",
+       "confirm-watch-top": "Adicionar esta página à lista de páginas vigiadas?",
        "confirm-unwatch-button": "OK",
-       "confirm-unwatch-top": "Remover esta página das páginas vigiadas?",
+       "confirm-unwatch-top": "Remover esta página da lista de páginas vigiadas?",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← página anterior",
        "imgmultipagenext": "página seguinte →",
        "table_pager_limit_submit": "Ir",
        "table_pager_empty": "Sem resultados",
        "autosumm-blank": "Limpou toda a página",
-       "autosumm-replace": "Página substituída por '$1'",
+       "autosumm-replace": "Página substituída por \"$1\"",
        "autoredircomment": "Redirecionamento para [[$1]]",
-       "autosumm-new": "Criou página com: '$1'",
+       "autosumm-new": "Criou a página com \"$1\"",
        "lag-warn-normal": "Alterações realizadas {{PLURAL:$1|no último segundo|nos últimos $1 segundos}} podem não constar desta lista.",
        "lag-warn-high": "Devido a latência elevada no acesso ao servidor da base de dados, as alterações realizadas {{PLURAL:$1|no último segundo|nos últimos $1 segundos}} podem não constar desta lista.",
        "watchlistedit-normal-title": "Editar lista de páginas vigiadas",
        "watchlisttools-edit": "Ver e editar a lista de páginas vigiadas",
        "watchlisttools-raw": "Editar a lista de páginas vigiadas em forma de texto",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussão]])",
-       "unknown_extension_tag": "\"$1\" é uma tag de extensão desconhecida",
+       "unknown_extension_tag": "\"$1\" é uma marca de extensão desconhecida",
        "duplicate-defaultsort": "<strong>Aviso:</strong> A chave de ordenação padrão \"$2\" sobrepõe-se à anterior \"$1\".",
        "version": "Versão",
        "version-extensions": "Extensões instaladas",
        "version-software": "Software instalado",
        "version-software-product": "Produto",
        "version-software-version": "Versão",
-       "version-entrypoints": "URLs de ponto de entrada",
+       "version-entrypoints": "URL de ponto de entrada",
        "version-entrypoints-header-entrypoint": "Ponto de entrada",
        "version-entrypoints-header-url": "URL",
        "redirect": "Redireccionar pelo ID do ficheiro, do utilizador ou da revisão",
        "redirect-file": "Nome do ficheiro",
        "redirect-not-exists": "Valor não encontrado",
        "fileduplicatesearch": "Ficheiros duplicados",
-       "fileduplicatesearch-summary": "Procure ficheiros duplicados tendo por base o seu resumo criptográfico ''(hash value)''.",
+       "fileduplicatesearch-summary": "Procure ficheiros duplicados tendo por base o seu resumo criptográfico.",
        "fileduplicatesearch-legend": "Procurar duplicados",
        "fileduplicatesearch-filename": "Ficheiro:",
        "fileduplicatesearch-submit": "Pesquisar",
        "compare-invalid-title": "O título que especificou é inválido.",
        "compare-title-not-exists": "O título que especificou não existe.",
        "compare-revision-not-exists": "A revisão que especificou não existe.",
-       "dberr-problems": "Desculpe! Este site está com dificuldades técnicas.",
+       "dberr-problems": "Desculpe! Este sítio está com dificuldades técnicas.",
        "dberr-again": "Experimente esperar alguns minutos e atualizar.",
        "dberr-info": "(Não foi possível contactar o servidor da base de dados: $1)",
        "dberr-info-hidden": "(Não foi possível contactar o servidor de base de dados)",
        "logentry-newusers-newusers": "A conta de utilizador $1 foi {{GENDER:$2|criada}}",
        "logentry-newusers-create": "A conta de utilizador $1 foi criada",
        "logentry-newusers-create2": "A conta de utilizador $3 foi criada por $1",
-       "logentry-newusers-byemail": "A conta de utilizador $3 foi criada por $1 e a senha foi enviada por e-mail",
+       "logentry-newusers-byemail": "A conta de utilizador $3 foi criada por $1 e a palavra-passe foi enviada por correio eletrónico",
        "logentry-newusers-autocreate": "A conta de utilizador $1 foi criada automaticamente",
        "logentry-rights-rights": "$1 modificou os privilégios do utilizador $3 de $4 para $5",
        "logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
        "searchsuggest-containing": "contendo...",
        "api-error-badaccess-groups": "Não tem permissão para enviar ficheiros para esta wiki.",
        "api-error-badtoken": "Erro interno: Chave incorrecta.",
-       "api-error-copyuploaddisabled": "O recebimento de ficheiros por URL não foi possibilitado neste servidor.",
+       "api-error-copyuploaddisabled": "O carregamento de ficheiros por URL não foi possibilitado neste servidor.",
        "api-error-duplicate": "Já {{PLURAL:$1|existe [$2 outro ficheiro]|existem [$2 outros ficheiros]}} na wiki com o mesmo conteúdo.",
        "api-error-duplicate-archive": "Já {{PLURAL:$1|existia no site [$2 outro ficheiro]|existiam no site [$2 alguns outros ficheiros]}} com o mesmo conteúdo, mas {{PLURAL:$1|foi|foram}} eliminados.",
        "api-error-duplicate-archive-popup-title": "{{PLURAL:$1|Ficheiro duplicado que já foi eliminado|Ficheiros duplicados que já foram eliminados}}",
        "api-error-invalid-file-key": "Erro interno: O ficheiro não foi encontrado no armazenamento temporário.",
        "api-error-missingparam": "Erro interno: Há parâmetros em falta no pedido.",
        "api-error-missingresult": "Erro interno: Não foi possível determinar se a cópia foi feita.",
-       "api-error-mustbeloggedin": "Tem de estar autenticado para enviar ficheiros.",
+       "api-error-mustbeloggedin": "Tem de iniciar sessão para enviar ficheiros.",
        "api-error-mustbeposted": "Erro interno: O pedido necessita do HTTP POST.",
        "api-error-noimageinfo": "O envio correu bem, mas o servidor não forneceu nenhuma informação sobre o ficheiro.",
-       "api-error-nomodule": "Erro interno: Não está definido nenhum módulo para upload de ficheiros.",
+       "api-error-nomodule": "Erro interno: Não está definido nenhum módulo para o carregamento de ficheiros.",
        "api-error-ok-but-empty": "Erro interno: o servidor não respondeu.",
        "api-error-overwrite": "Não é permitido sobrescrever um ficheiro existente.",
        "api-error-stashfailed": "Erro interno: O servidor não conseguiu armazenar o ficheiro temporário.",
        "api-error-publishfailed": "Erro interno: Servidor não conseguiu publicar ficheiro temporário.",
-       "api-error-stasherror": "Ocorreu um erro no upload do ficheiro escondido.",
+       "api-error-stasherror": "Ocorreu um erro no carregamento do ficheiro escondido.",
        "api-error-timeout": "O servidor não respondeu no prazo esperado.",
        "api-error-unclassified": "Ocorreu um erro desconhecido",
        "api-error-unknown-code": "Erro desconhecido: \"$1\"",
        "expand_templates_html_output": "Resultado HTML puro",
        "expand_templates_ok": "Expandir",
        "expand_templates_remove_comments": "Remover comentários",
-       "expand_templates_remove_nowiki": "Suprimir ''tags'' <nowiki> no resultado",
+       "expand_templates_remove_nowiki": "Suprimir marcações <nowiki> no resultado",
        "expand_templates_generate_xml": "Mostrar a árvore de análise sintáctica do XML",
        "expand_templates_generate_rawhtml": "Mostrar o HTML puro",
        "expand_templates_preview": "Antevisão do resultado"
index 69de42a..2a46ed4 100644 (file)
        "mytalk": "In the personal URLs page section - right upper corner.\n\nUsed as link title in your personal toolbox.\n\nSee also:\n* {{msg-mw|Mytalk}}\n* {{msg-mw|Accesskey-pt-mytalk}}\n* {{msg-mw|Tooltip-pt-mytalk}}\n{{Identical|Talk}}",
        "anontalk": "Link to the talk page appearing in [[mw:Help:Navigation#User_Links|user links]] for each anonymous users when [[mw:Manual:$wgShowIPinHeader|$wgShowIPinHeader]] is true.\n\nSee also:\n* {{msg-mw|Anontalk}}\n* {{msg-mw|Accesskey-pt-anontalk}}\n* {{msg-mw|Tooltip-pt-anontalk}}",
        "navigation": "This is shown as a section header in the sidebar of most skins.\n\n{{Identical|Navigation}}",
-       "and": "The translation for \"and\" appears in the [[Special:Version]] page, between the last two items of a list. If a comma is needed, add it at the beginning without a gap between it and the \"&\". <nowiki>&#32;</nowiki> is a blank space, one character long. Please leave it as it is.\n\nThis can also appear in the credits page if the credits feature is enabled,for example [{{canonicalurl:Support|action=credits}} the credits of the support page]. (To view any credits page type <nowiki>&action=credits</nowiki> at the end of any URL in the address bar.)\n{{Identical|And}}",
+       "and": "The translation for \"and\" appears in the [[Special:Version]] page, between the last two items of a list. If a comma is needed, add it at the beginning without a gap between it and the \"&\". &amp;#32; is a blank space, one character long. Please leave it as it is.\n\nThis can also appear in the credits page if the credits feature is enabled,for example [{{canonicalurl:Support|action=credits}} the credits of the support page]. (To view any credits page type <nowiki>&action=credits</nowiki> at the end of any URL in the address bar.)\n{{Identical|And}}",
        "qbfind": "Alternative for \"search\" as used in Cologne Blue skin.\n{{Identical|Find}}",
        "qbbrowse": "Heading in sidebar menu in CologneBlue skin as seen in http://i.imgur.com/I08Y3jW.png\n{{Identical|Browse}}",
        "qbedit": "Heading in sidebar menu in CologneBlue skin as seen in http://i.imgur.com/I08Y3jW.png\n{{Identical|Edit}}",
        "vector-view-view": "Tab label in the Vector skin (verb). See for example {{canonicalurl:Main_Page|useskin=vector}}.\n{{Identical|Read}}",
        "vector-view-viewsource": "Tab label in the Vector skin.\n{{Identical|View source}}",
        "actions": "{{Identical|Action}}",
+       "vector-more-actions": "Label in the Vector skin's menu for the less-important or rarer actions which are not shown as tabs (like moving the page, or for sysops deleting or protecting the page), as well as (for users with a narrow viewing window in their browser) the less-important tab actions which the user's browser is unable to fit in. {{Identical|More}}",
        "namespaces": "{{Identical|Namespace}}",
        "variants": "Used by the Vector skin.",
        "navigation-heading": "Heading shown above the navigation menu (sidebar) for screen-readers (or in non-standard skins).",
        "userlogin-yourname": "In user login & create account forms, label for username field.\n{{doc-important|<nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is '''NOT''' supported.}}\n\nSee examples: [[Special:UserLogin]] and [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n{{Identical|Username}}",
        "userlogin-yourname-ph": "Placeholder text in login & create account form field.\n\nSee example: [[Special:UserLogin]] and [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
        "createacct-another-username-ph": "Placeholder text in create account form field when one user creates an account for another.",
-       "createacct-helpusername": "Message in new create account form providing guidance for username.\n\nRefers to {{msg-mw|createacct-helpusername-url}}.",
+       "createacct-helpusername": "{{Optional}} Optional message in new create account form providing guidance for username.\n\nBlank by default.",
        "yourpassword": "In user preferences\n\n{{Identical|Password}}",
        "userlogin-yourpassword": "In login & create account forms, label for password field.\n\nSee examples: [[Special:UserLogin]] and [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n{{Identical|Password}}",
        "userlogin-yourpassword-ph": "Placeholder text in login form for password field.\n\nSee examples: [[Special:UserLogin]] and [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n{{Identical|Enter password}}",
        "createacct-reason": "In create account form, label for field to enter reason to create an account when already logged-in.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n{{Identical|Reason}}",
        "createacct-reason-ph": "Placeholder in vertical-layout create account form for reason field.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
        "createacct-captcha": "Label in vertical-layout create account form for CAPTCHA input field when repositioned by JavaScript.",
-       "createacct-imgcaptcha-help": "Help text in vertical-layout create account form for image CAPTCHA input field when repositioned by JavaScript.\n\nRefers to {{msg-mw|Createacct-captcha-help-url}}.",
+       "createacct-imgcaptcha-help": "{{Optional}} Optional help text in vertical-layout create account form for image CAPTCHA input field when repositioned by JavaScript.\n\nBlank by default.",
        "createacct-imgcaptcha-ph": "Placehodler text in vertical-layout create account form for image CAPTCHA input field when repositioned by JavaScript.",
        "createacct-submit": "Submit button on vertical-layout create account form.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
        "createacct-another-submit": "Submit button of  [[Special:UserLogin/signup]] ([[Special:CreateAccount]]) when accessed by a registered user.\n\nThe original means \"create an account in addition to the one you already have\"; sometimes, but not always, it means you are going to \"Create the account on behalf of somebody else\" or \"Create account for another\".\n{{Identical|Create another account}}",
        "currentrev": "Used in Diff Preview page. The diff is between {{msg-mw|currentrev}} and {{msg-mw|yourtext}}.\n{{Identical|Current revision}}",
        "currentrev-asof": "Used on a difference page when comparing the current versions of a page with each other.\n\nSee {{msg-mw|Revisionasof}} for the message for non-current version.\n\nParameters:\n* $1 - a date and time\n* $2 - (Optional) a date\n* $3 - (Optional) a time",
        "revisionasof": "Used on a difference page when comparing different versions of a page or when viewing an non-current version of a page.\n\nSee {{msg-mw|Currentrev-asof}} for the message for the current version.\n\nParameters:\n* $1 - the date/time at which the revision was created. e.g. \"''Revision as of 14:44, 24 January 2008''\".\n* $2 - (Optional) the date at which the revision was created\n* $3 - (Optional) the time at which the revision was created",
-       "revision-info": "Appears just below the page title when an old version of the page is being viewed.\n\nParameters:\n* $1 - date and time of revision\n* $2 - a series of links: to author of the revision, his talk page, etc.\n* $3 - (Optional) revision ID\n* $4 - (Optional) date of revision\n* $5 - (Optional) time of revision\n* $6 - (Optional) author of revision, for GENDER use",
-       "revision-info-current": "{{notranslate}}\n* $1: date and time of revision\n* $2: a series of links: to author of the revision, his talk page, etc. \n* (optional) $3: revision ID\n* (optional) $4: date of revision\n* (optional) $5: time of revision\n* (optional) $6: author of revision, for GENDER use",
+       "revision-info": "Appears just below the page title when an old version of the page is being viewed.\n\nParameters:\n* $1 - date and time of revision\n* $2 - a series of links: to author of the revision, his talk page, etc.\n* $3 - (Optional) revision ID\n* $4 - (Optional) date of revision\n* $5 - (Optional) time of revision\n* $6 - author of revision, for GENDER use\n* $7 - edit summary of revision (with leading space and in parentheses)",
+       "revision-info-current": "{{notranslate}}\n* $1: date and time of revision\n* $2: a series of links: to author of the revision, his talk page, etc. \n* (optional) $3: revision ID\n* (optional) $4: date of revision\n* (optional) $5: time of revision\n* (optional) $6: author of revision, for GENDER use\n* $7 - edit summary of revision (with leading space and in parentheses)",
        "revision-nav": "{{notranslate}}\nRefers to {{msg-mw|Pipe-separator}}.\n\nParameters:\n* $1 - prev diff. link text is {{msg-mw|Diff}}\n* $2 - prev link. link text is {{msg-mw|Previousrevision}}\n* $3 - link. link text is {{msg-mw|Currentrevisionlink}}\n* $4 - cur diff. link text is {{msg-mw|Diff}}\n* $5 - next link. link text is {{msg-mw|Nextrevision}}\n* $6 - next diff. link text is {{msg-mw|Diff}}",
        "previousrevision": "See also:\n* {{msg-mw|Nextrevision}}",
        "nextrevision": "See also:\n* {{msg-mw|Previousrevision}}",
        "revdelete-hide-text": "Option for oversight. This message is a part of the [[mw:RevisionDelete|RevisionDelete]] feature.\n[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]\n{{Related|Revdelete-hide}}",
        "revdelete-hide-image": "Option for <del>oversight</del> [[:mw:RevisionDelete|RevisionDelete]] feature.\n{{Related|Revdelete-hide}}",
        "revdelete-hide-name": "Option for oversight.\n{{Related|Revdelete-hide}}",
-       "revdelete-hide-comment": "Option for oversight. {{RevisionDelete}}\n[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]\n{{Related|Revdelete-hide}}",
+       "revdelete-hide-comment": "Option for oversight. {{RevisionDelete}}\n[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]\n{{Related|Revdelete-hide}}\n{{Identical|Edit summary}}",
        "revdelete-hide-user": "Option for oversight. {{RevisionDelete}}\n[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]\n{{Related|Revdelete-hide}}",
        "revdelete-hide-restricted": "Option for oversight.\n{{Related|Revdelete-hide}}",
        "revdelete-radio-same": "This message is a part of the [[mw:RevisionDelete|RevisionDelete]] feature. The message is a caption for a column of radioboxes inside a box with {{msg-mw|Revdelete-legend}} as a title.\n[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]\nThere are three radio buttons in each row, and the captions above each column read:\n* {{msg-mw|Revdelete-radio-same}}\n* {{msg-mw|Revdelete-radio-set}}\n* {{msg-mw|Revdelete-radio-unset}}",
        "searchmenu-new": "An option shown in a menu beside search form offering a red link to the not yet existing page having the specified title (when using the default MediaWiki search engine).\n\nParameters:\n* $1 - page title\n* $2 - the number of search results found",
        "searchmenu-new-nocreate": "{{notranslate}}",
        "searchprofile-articles": "A quick link in the advanced search box on [[Special:Search]]. Clicking on this link starts a search in the content pages of the wiki.\n\nA 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For technical definition of 'content namespaces' see [[mw:Manual:Using_custom_namespaces#Content_namespaces|MediaWiki]].\n\nPossible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.\n\n{{Identical|Content page}}",
-       "searchprofile-project": "Used as an option in [[Special:Search]].\n\nSee also:\n* {{msg-mw|Searchprofile-project|message}}\n* {{msg-mw|Searchprofile-project-tooltip|tooltip}}",
        "searchprofile-images": "An option in the [[Special:Search]].\n\nSee also:\n* {{msg-mw|Searchprofile-images|message}}\n* {{msg-mw|Searchprofile-images-tooltip|tooltip}}\n{{Identical|Muitimedia}}",
        "searchprofile-everything": "Used as an option in [[Special:Search]].\n\nSee also:\n* {{msg-mw|Searchprofile-everything|message}}\n* {{msg-mw|Searchprofile-everything-tooltip|tooltip}}",
        "searchprofile-advanced": "Used as an option in [[Special:Search]].\n\nSee also:\n* {{msg-mw|Searchprofile-advanced|message}}\n* {{msg-mw|Searchprofile-advanced-tooltip|tooltip}}\n{{Identical|Advanced}}",
        "searchprofile-articles-tooltip": "Used as tooltip for the option {{msg-mw|Searchprofile-articles}} in [[Special:Search]].\n* $1 - list of namespaces\nSee also:\n* {{msg-mw|Searchprofile-articles|message}}\n* {{msg-mw|Searchprofile-articles-tooltip|tooltip}}\n{{Identical|Search in $1}}",
-       "searchprofile-project-tooltip": "Used as tooltip for the option {{msg-mw|Searchprofile-project}} in [[Special:Search]].\n* $1 - list of namespaces\nSee also:\n* {{msg-mw|Searchprofile-project|message}}\n* {{msg-mw|Searchprofile-project-tooltip|tooltip}}\n{{Identical|Search in $1}}",
        "searchprofile-images-tooltip": "Used as tooltip for the option {{msg-mw|Searchprofile-images}} in the [[Special:Search]].\nSee also:\n* {{msg-mw|Searchprofile-images|message}}\n* {{msg-mw|Searchprofile-images-tooltip|tooltip}}",
        "searchprofile-everything-tooltip": "Used as tooltip for the option {{msg-mw|Searchprofile-everything}} in [[Special:Search]].\n\nSee also:\n* {{msg-mw|Searchprofile-everything|message}}\n* {{msg-mw|Searchprofile-everything-tooltip|tooltip}}",
        "searchprofile-advanced-tooltip": "Used as tooltip for the option {{msg-mw|Searchprofile-advanced}} in [[Special:Search]].\n\nSee also:\n* {{msg-mw|Searchprofile-advanced|message}}\n* {{msg-mw|Searchprofile-advanced-tooltip|tooltip}}",
        "search-interwiki-custom": "#REDIRECT [[MediaWiki:Wmf-search-interwiki-custom/qqq]]",
        "search-interwiki-more": "{{Identical|More}}",
        "search-relatedarticle": "This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is \"More Like This\" functionality. Microsoft glossary defines MLT as \"A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry.\"[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]\n{{Identical|Related}}",
-       "searcheverything-enable": "Used in [[Special:Preferences]], tab \"Search\".",
        "searchrelated": "This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is \"More Like This\" functionality. Microsoft glossary defines MLT as \"A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry.\"[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]\n{{Identical|Related}}",
        "searchall": "{{Identical|All}}",
        "showingresults": "This message is used on some special pages such as [[Special:WantedCategories]]. Parameters:\n* $1 - the total number of results in the batch shown\n* $2 - the number of the first item listed\nSee also:\n* {{msg-mw|Showingresultsnum}}",
        "powersearch-togglelabel": "Used in [{{canonicalurl:Special:Search|advanced=1}} Advanced search]. Synonym: \"Select\" as verb.\n{{Identical|Check}}",
        "powersearch-toggleall": "\"All\" refers to namespaces. It is used in Advanced search: {{canonicalurl:Special:Search|advanced=1}}\n{{Identical|All}}",
        "powersearch-togglenone": "\"None\" refers to namespaces. It is used in Advanced search: {{canonicalurl:Special:Search|advanced=1}}\n{{Identical|None}}",
+       "powersearch-remember": "Label for a checkbox to save namespace choice for advanced search to user preferences.",
        "search-external": "Legend of the fieldset for the input form when the internal search is disabled. Inside the fieldset [[MediaWiki:Searchdisabled]] and [[MediaWiki:Googlesearch]] is shown.",
        "searchdisabled": "{{doc-singularthey}}\nIn this sentence, \"their indexes\" refers to \"Google's indexes\".\n\nShown on [[Special:Search]] when the internal search is disabled.",
        "googlesearch": "{{notranslate}}\nShown when [[mw:Manual:$wgDisableTextSearch|$wgDisableTextSearch]] is set to true and no [[mw:Manual:$wgSearchForwardUrl|$wgSearchForwardUrl]] is set.\n\nParameters:\n* $1 - the search term\n* $2 - \"UTF-8\" (hard-coded)\n* $3 - the message {{msg-mw|Searchbutton}}",
        "allowemail": "Used in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.",
        "prefs-searchoptions": "{{Identical|Search}}",
        "prefs-namespaces": "Shown as legend of the second fieldset of the tab 'Search' in [[Special:Preferences]]\n{{Identical|Namespaces}}",
-       "defaultns": "Used in [[Special:Preferences]], tab \"Search\".",
        "default": "{{Identical|Default}}",
        "prefs-files": "Title of a tab in [[Special:Preferences]].\n{{Identical|File}}",
        "prefs-custom-css": "visible on [[Special:Preferences]] -[Skins].\n{{Identical|Custom CSS}}",
        "group-suppress-member": "{{doc-group|suppress|member}}\nThis is a member of the optional (disabled by default) user group, meant for the [[mw:RevisionDelete|RevisionDelete]] feature, to change the visibility of revisions through [[Special:RevisionDelete]].\n\n{{Identical|Oversight}}",
        "grouppage-user": "{{doc-group|user|page}}",
        "grouppage-autoconfirmed": "{{doc-group|autoconfirmed|page}}",
-       "grouppage-bot": "{{doc-group|bot|page}}",
+       "grouppage-bot": "{{doc-group|bot|page}}\n{{Identical|Bot}}",
        "grouppage-sysop": "{{doc-group|sysop|page}}",
        "grouppage-bureaucrat": "{{doc-group|bureaucrat|page}}",
        "grouppage-suppress": "{{doc-group|suppress|page}}\n{{Identical|Oversight}}",
        "recentchanges-label-unpatrolled": "Tooltip for {{msg-mw|unpatrolledletter}}",
        "recentchanges-label-plusminus": "Legend item for plus/minus.\n\nPreceded by legend example {{msg-mw|Recentchanges-legend-plusminus}}.",
        "recentchanges-legend-heading": "Used as a heading for legend box on [[Special:RecentChanges]] and [[Special:Watchlist]].\n{{Identical|Legend}}",
-       "recentchanges-legend-newpage": "Used as legend in [[Special:RecentChanges]]. Preceded by {{msg-mw|Recentchanges-label-newpage}}.",
+       "recentchanges-legend-newpage": "{{doc-important|Do not translate <code>Special:NewPages</code>.}}\nUsed as legend on [[Special:RecentChanges]] and [[Special:Watchlist]].\n\nRefers to {{msg-mw|Recentchanges-label-newpage}}.",
+       "recentchanges-legend-minor": "Used as legend on [[Special:RecentChanges]] and [[Special:Watchlist]].\n\nRefers to {{msg-mw|Recentchanges-label-minor}}.",
+       "recentchanges-legend-bot": "Used as legend on [[Special:RecentChanges]] and [[Special:Watchlist]].\n\nRefers to {{msg-mw|Recentchanges-label-bot}}.",
+       "recentchanges-legend-unpatrolled": "Used as legend on [[Special:RecentChanges]] and [[Special:Watchlist]].\n\nRefers to {{msg-mw|Recentchanges-label-unpatrolled}}.",
        "recentchanges-legend-plusminus": "{{optional}}\nA plus/minus sign with a number for the legend.",
        "rcnotefrom": "This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time.\n\nThe corresponding message is {{msg-mw|Rclistfrom}} (split into date and time).\n\nParameters:\n* $1 - the maximum number of changes that are displayed\n* $2 - a date and time\n* $3 - (Optional) a date\n* $4 - (Optional) a time",
        "rclistfrom": "Used on [[Special:RecentChanges]]. Parameters:\n* $1 - (Currently not use) date and time. The date and the time adds to the rclistfrom description.\n* $2 - time. The time adds to the rclistfrom link description (with split of date and time).\n* $3 - date. The date adds to the rclistfrom link description (with split of date and time).\n\nThe corresponding message is {{msg-mw|Rcnotefrom}}.",
        "filename": "{{Identical|Filename}}",
        "filedesc": "Used as section header in [[Special:Upload]].\n\nSee also:\n* {{msg-mw|License-header}}\n* {{msg-mw|Filestatus}}\n* {{msg-mw|Filesource}}\n{{Identical|Summary}}",
        "fileuploadsummary": "{{Identical|Summary}}",
-       "filereuploadsummary": "Label of textearea in [[Special:Upload]] when uploading a new version of existing file.",
+       "filereuploadsummary": "Label of text area in [[Special:Upload]] when uploading a new version of existing file.",
        "filestatus": "Used as section header in [[Special:Upload]].\n\nSee also:\n* {{msg-mw|License-header}}\n* {{msg-mw|Filedesc}}\n* {{msg-mw|Filesource}}",
        "filesource": "On page [[Special:Upload]] if defined $wgUseCopyrightUpload for detailed copyright information forms. This is source of file.\n\nSee also:\n* {{msg-mw|License-header}}\n* {{msg-mw|Filedesc}}\n* {{msg-mw|Filestatus}}\n{{Identical|Source}}",
        "ignorewarning": "Used as button text in the Upload form on [[Special:Upload]].\n\nSee also:\n* {{msg-mw|upload-tryagain|Submit button text}}\n* {{msg-mw|reuploaddesc|button text}}",
        "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-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.",
+       "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}}",
        "linkstoimage": "Used on image description, see for example [[:Image:Yes.png#filelinks]].\n\nParameters:\n* $1 - the number of pages that link to the file/image\nSee also:\n* {{msg-mw|Linkstoimage-more}}",
        "linkstoimage-more": "Shown on an image description page when a file is used/linked more than 100 times on other pages.\n\nParameters:\n* $1 - limit. At the moment hardcoded at 100\n* $2 - page title of the file\nSee also:\n* {{msg-mw|Linkstoimage}}",
        "nolinkstoimage": "Displayed on image description pages, see for exampe [[:Image:Tournesol.png#filelinks]].",
        "nrevisions": "Used as link text in [[Special:FewestRevisions]].\n\nThe link points to the page history (action=history).\n\nParameters:\n* $1 - number of revisions",
        "nviews": "This message is used on [[Special:PopularPages]] to say how many times each page has been viewed.\n\nPreceded by the page title, like: Page title ($1 views)\n\nParameters:\n* $1 - the number of views",
        "nimagelinks": "Used on [[Special:MostLinkedFiles]] to indicate how often a specific file is used.\n\nParameters:\n* $1 - number of pages\nSee also:\n* {{msg-mw|Ntransclusions}}",
-       "ntransclusions": "Used on [[Special:MostLinkedTemplates]] to indicate how often a template is in use.\n\nParameters:\n* $1 - number of pages\nSee also:\n* {{msg-mw|Nimagelinks}}",
+       "ntransclusions": "Used on [[Special:MostTranscludedPages]] to indicate how often a template is in use.\n\nParameters:\n* $1 - number of pages\nSee also:\n* {{msg-mw|Nimagelinks}}",
        "specialpage-empty": "Used on a special page when there is no data. For example on [[Special:Unusedimages]] when all images are used.",
        "lonelypages": "{{doc-special|LonelyPages}}",
        "lonelypages-summary": "{{doc-specialpagesummary|lonelypages}}",
        "mostlinked-summary": "{{doc-specialpagesummary|mostlinked}}",
        "mostlinkedcategories": "{{doc-special|MostLinkedCategories}}",
        "mostlinkedcategories-summary": "{{doc-specialpagesummary|mostlinkedcategories}}",
-       "mostlinkedtemplates": "{{doc-special|MostLinkedTemplates}}",
+       "mostlinkedtemplates": "{{doc-special|MostTranscludedPages}}",
        "mostlinkedtemplates-summary": "{{doc-specialpagesummary|mostlinkedtemplates}}",
        "mostcategories": "{{doc-special|MostCategories}}",
        "mostcategories-summary": "{{doc-specialpagesummary|mostcategories}}",
        "watchnologin": "Used as error page title.\n\nThe error message for this title is:\n* {{msg-mw|Watchnologintext}}\n{{Identical|Not logged in}}",
        "addwatch": "Link to a dialog box, displayed at the end of the list of categories at the foot of each page.\n\nSee also:\n* {{msg-mw|Removewatch}}",
        "addedwatchtext": "Explanation shown when clicking on the {{msg-mw|Watch}} tab. Parameters:\n* $1 - page title\nSee also:\n* {{msg-mw|Addedwatch}}",
-       "addedwatchtext-short": "Explanation shown when watching item from [[Special:UnwatchedPages]].\n\nSee also {{msg-mw|Addedwatchtext}}.",
+       "addedwatchtext-short": "Explanation shown when watching item from [[Special:UnwatchedPages]].\n\nSee also:\n* {{msg-mw|Removedwatchtext-short}}\n* {{msg-mw|Addedwatchtext}}",
        "removewatch": "Link to a dialog box, displayed at the end of the list of categories at the foot of each page.\n\nSee also:\n* {{msg-mw|Addwatch}}",
        "removedwatchtext": "After a page has been removed from a user's watchlist by clicking the {{msg-mw|Unwatch}} tab at the top of an article, this message appears just below the title of the article.\n\nParameters:\n* $1 - the title of the article\nSee also:\n* {{msg-mw|Removedwatch}}\n* {{msg-mw|Addedwatchtext}}",
-       "removedwatchtext-short": "Explanation shown when unwatching item from [[Special:UnwatchedPages]].\n\nSee also {{msg-mw|Removedwatchtext}}.",
+       "removedwatchtext-short": "Explanation shown when unwatching item from [[Special:UnwatchedPages]].\n\nSee also:\n* {{msg-mw|Addedwatchtext-short}}.\n* {{msg-mw|Removedwatchtext}}.",
        "watch": "{{doc-actionlink}}\nName of the Watch tab. Should be in the imperative mood.\n\nSee also:\n* {{msg-mw|Watch}}\n* {{msg-mw|Accesskey-ca-watch}}\n* {{msg-mw|Tooltip-ca-watch}}",
        "watchthispage": "Used as link text.\n\nSee also:\n* {{msg-mw|Unwatchthispage|link text}}\n* {{msg-mw|Notanarticle|error message}}\n{{Identical|Watch this page}}",
        "unwatch": "{{doc-actionlink}}\nLabel of \"Unwatch\" tab.\n\nSee also:\n* {{msg-mw|Unwatch}}\n* {{msg-mw|Accesskey-ca-unwatch}}\n* {{msg-mw|Tooltip-ca-unwatch}}",
        "nolinkshere-ns": "Used in [[Special:WhatLinksHere]] if empty. Parameters:\n* $1 - page title\nSee also:\n* {{msg-mw|Nolinkshere}}",
        "isredirect": "Displayed in [[Special:WhatLinksHere]] (see [{{fullurl:Special:WhatLinksHere/Project:Translator|hidelinks=1}} Special:WhatLinksHere/Project:Translator] for example).\n\n{{Identical|Redirect page}}",
        "istemplate": "Means that a page (a template, specifically) is used as <code><nowiki>{{Page name}}</nowiki></code>.\nDisplayed in [[Special:WhatLinksHere]] (see [[Special:WhatLinksHere/Template:New portal]] for example).\n{{Identical|Transclusion}}",
-       "isimage": "This message is displayed on [[Special:WhatLinksHere]] for images. It means that the image is used on the page (as opposed to just being linked to like an non-image page).",
+       "isimage": "This message is displayed on [[Special:WhatLinksHere]] for images. It means that the image is used on the page (as opposed to just being linked to like an non-image page).\n{{Identical|File link}}",
        "whatlinkshere-prev": "This is part of the navigation message on the top and bottom of Whatlinkshere pages, where it is used as the first argument of {{msg-mw|Viewprevnext}}.\n\nParameters:\n* $1 - the number of items shown per page. It is not used when $1 is zero; not sure what happens when $1 is one.\nSpecial pages use {{msg-mw|Prevn}} instead (still as an argument to {{msg-mw|Viewprevnext}}).\n\nSee also:\n* {{msg-mw|Whatlinkshere-next}}\n{{Identical|Previous}}",
        "whatlinkshere-next": "This is part of the navigation message on the top and bottom of Whatlinkshere pages, where it is used as the second argument of {{msg-mw|Viewprevnext}}.\n\nParameters:\n* $1 - the number of items shown per page. It is not used when $1 is zero; not sure what happens when $1 is one.\nSpecial pages use {{msg-mw|Nextn}} instead (still as an argument to {{msg-mw|Viewprevnext}}).\n\nSee also:\n* {{msg-mw|Whatlinkshere-prev}}\n{{Identical|Next}}",
        "whatlinkshere-links": "Used on [[Special:WhatLinksHere]]. It is a link to the WhatLinksHere page of that page.\n\nExample line:\n* [[Main Page]] ([[Special:WhatLinksHere/Main Page|{{int:whatlinkshere-links}}]])\n{{Identical|Link}}",
        "blocklogpage": "{{doc-logpage}}\n\nThe page name of [[Special:Log/block]]. Also appears in the drop down menu of [[Special:Log]] pages and in the action links of Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").\n\n{{Identical|Block log}}",
        "blocklog-showlog": "Parameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER\nSee also:\n* {{msg-mw|Blocklog-showsuppresslog}}\n* {{msg-mw|Globalblocking-showlog}}",
        "blocklog-showsuppresslog": "Parameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER",
-       "blocklogentry": "This is the text of an entry in the Block log, and recent changes, after hour (and date, only in the Block log) and sysop name:\n* $1 - the blocked user or IP (with link to contributions and talk)\n* $2 - the duration of the block (hours, days etc.) or the specified expiry date\n* $3 - contains \"(details) (''reason'')\"\nSee also:\n* {{msg-mw|Unblocklogentry}}\n* {{msg-mw|Reblock-logentry}}",
+       "blocklogentry": "This is the text of an entry in the Block log, and recent changes, after hour (and date, only in the Block log) and sysop name:\n* $1 - the blocked user or IP (with link to contributions and talk)\n* $2 - the duration of the block (hours, days etc.) or the specified expiry date\n* $3 - contains \"(details) (''reason'')\", or empty string\nSee also:\n* {{msg-mw|Unblocklogentry}}\n* {{msg-mw|Reblock-logentry}}",
        "reblock-logentry": "This is the text of an entry in the Block log (and Recent Changes), after hour (and date, only in the Block log) and sysop name.\n\nParameters:\n* $1 - the user being reblocked\n* $2 - the expiry time of the block\n* $3 - extra parameters like \"account creation blocked\" (they are automatically between brackets)",
        "blocklogtext": "Appears on top of [[Special:Log/block]].",
        "unblocklogentry": "This is the text of an entry in the Block log (and Recent Changes), after hour (and date, only in the Block log) and sysop name:\n* $1 is the user being unblocked",
        "interlanguage-link-title": "{{Optional}}\nFormat of a sidebar interwiki link tooltip. Parameters:\n* $1 - page name in the target wiki\n* $2 - target wiki language autonym",
        "interlanguage-link-title-langonly": "{{ignored}}Interlanguage link title. Parameters: $1 replaced with a language name.",
        "common.css": "{{optional}}\nCSS applied to all users.",
-       "cologneblue.css": "{{optional}}",
        "monobook.css": "{{optional}}\nCSS applied to users using Monobook skin.",
-       "modern.css": "{{optional}}",
        "vector.css": "{{optional}}",
        "print.css": "{{optional}}",
        "noscript.css": "{{optional}}",
        "group-sysop.css": "{{doc-group|sysop|css}}",
        "group-bureaucrat.css": "{{doc-group|bureaucrat|css}}",
        "common.js": "{{optional}}\nJS for all users.",
-       "cologneblue.js": "{{optional}}",
        "monobook.js": "{{optional}}\nJS for users using Monobook skin.",
-       "modern.js": "{{optional}}",
        "vector.js": "{{optional}}",
        "group-autoconfirmed.js": "{{doc-group|autoconfirmed|js}}",
        "group-user.js": "{{doc-group|user|js}}",
        "pageinfo-category-pages": "See also:\n* {{msg-mw|Pageinfo-category-subcats}}\n* {{msg-mw|Pageinfo-category-files}}",
        "pageinfo-category-subcats": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-files}}",
        "pageinfo-category-files": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-subcats}}",
-       "skinname-cologneblue": "{{optional}}",
        "skinname-monobook": "{{optional}}",
-       "skinname-modern": "{{optional}}\n{{Identical|Modern}}",
        "skinname-vector": "{{optional}}",
-       "markaspatrolleddiff": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolledtext}}",
+       "markaspatrolleddiff": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolledtext}}\n{{Identical|Mark as patrolled}}",
        "markaspatrolledlink": "{{notranslate}}\nParameters:\n* $1 - link which has text {{msg-mw|Markaspatrolledtext}}",
        "markaspatrolledtext": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolleddiff}}",
        "markedaspatrolled": "Used as title of the message {{msg-mw|Markedaspatrolledtext}}, when marking a change as patrolled.\n{{Related|Markedaspatrolled}}",
        "exif-meteringmode-2": "{{Related|Exif-meteringmode}}",
        "exif-meteringmode-3": "{{Related|Exif-meteringmode}}",
        "exif-meteringmode-4": "{{Related|Exif-meteringmode}}",
-       "exif-meteringmode-5": "{{Related|Exif-meteringmode}}",
+       "exif-meteringmode-5": "{{Related|Exif-meteringmode}}\n{{Identical|Pattern}}",
        "exif-meteringmode-6": "{{Related|Exif-meteringmode}}",
        "exif-meteringmode-255": "{{Identical|Other}}",
        "exif-lightsource-0": "{{Identical|Unknown}}\n{{Related|Exif-lightsource}}",
        "exif-flash-function-1": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Related|Exif-flash}}",
        "exif-flash-redeye-1": "{{Related|Exif-flash}}",
        "exif-focalplaneresolutionunit-2": "See also:\n* {{msg-mw|Exif-focalplaneresolutionunit}}",
-       "exif-sensingmethod-1": "{{Related|Exif-sensingmethod}}",
+       "exif-sensingmethod-1": "{{Related|Exif-sensingmethod}}\n{{Identical|Undefined}}",
        "exif-sensingmethod-2": "{{Related|Exif-sensingmethod}}",
        "exif-sensingmethod-3": "{{Related|Exif-sensingmethod}}",
        "exif-sensingmethod-4": "{{Related|Exif-sensingmethod}}",
        "revdelete-logentry": "{{RevisionDelete}}\nThis is the message for the log entry in [[Special:Log/delete]] when changing visibility restrictions for page revisions.\n\nFollowed by the message {{msg-mw|revdelete-log-message}} in brackets.\n\nPreceded by the name of the user doing this task.\n\nParameters:\n* $1 - the page name\nSee also:\n* {{msg-mw|Logdelete-logentry}}",
        "logdelete-logentry": "{{RevisionDelete}}\nThis is the message for the log entry in [[Special:Log/delete]] when changing visibility restrictions for log events.\n\nFollowed by the message {{msg-mw|logdelete-log-message}} in brackets.\n\nPreceded by the name of the user who did this task.\n\nParameters:\n* $1 - the log name in brackets\nSee also:\n* {{msg-mw|Revdelete-logentry}}",
        "revdelete-content": "This message is used as parameter $1 in {{msg-mw|revdelete-hid}} and {{msg-mw|revdelete-unhid}} when hiding or unhiding the content of a revision or event.\n{{Identical|Content}}",
-       "revdelete-summary": "This message is used as parameter $1 in {{msg-mw|revdelete-hid}} and {{msg-mw|revdelete-unhid}} when hiding or unhiding the edit summary of a revision or event.",
+       "revdelete-summary": "This message is used as parameter $1 in {{msg-mw|revdelete-hid}} and {{msg-mw|revdelete-unhid}} when hiding or unhiding the edit summary of a revision or event.\n{{Identical|Edit summary}}",
        "revdelete-uname": "This message is used as parameter $1 in {{msg-mw|revdelete-hid}} and {{msg-mw|revdelete-unhid}} when hiding or unhiding the username for a revision or event.\n\n{{Identical|Username}}",
        "revdelete-hid": "This message is used as <code>$1</code>:\n* in {{msg-mw|revdelete-log-message}} when hiding revisions\n* in {{msg-mw|logdelete-log-message}} when hiding information in the log entry about hiding revisions\nParameters:\n* $1 - any one of the following:\n** {{msg-mw|Revdelete-content}} (when hiding the page content)\n** {{msg-mw|Revdelete-summary}} (when hiding the edit summary)\n** {{msg-mw|Revdelete-uname}} (when hiding the user name)\n** a combination of these three messages\nSee also:\n* {{msg-mw|Revdelete-unhid}}",
        "revdelete-unhid": "This message is used as <code>$1</code>:\n* in {{msg-mw|Revdelete-log-message}} when unhiding revisions\n* in {{msg-mw|Logdelete-log-message}} when unhiding information in the log entry about unhiding revisions\nParameters:\n* $1 - any one of the following:\n** {{msg-mw|Revdelete-content}} (when unhiding the page content)\n** {{msg-mw|Revdelete-summary}} (when unhiding the edit summary)\n** {{msg-mw|Revdelete-uname}} (when unhiding the user name)\n** a combination of these three messages\nSee also:\n* {{msg-mw|Revdelete-hid}}",
index 4cb40b3..22d6484 100644 (file)
        "vector-view-view": "Ñawiriy",
        "vector-view-viewsource": "Pukyu qillqata qhaway",
        "actions": "Ruraykuna",
+       "vector-more-actions": "Aswan",
        "namespaces": "Suti k'itikuna",
        "variants": "Ñawra rikch'akuykuna",
        "navigation-heading": "Wamp'una last'a",
        "permalink": "Kakuq t'inki",
        "print": "Ch'ipachiy",
        "view": "Qhaway",
+       "view-foreign": "$1 nisqapi qhaway",
        "edit": "qillqay",
+       "edit-local": "Kayllapi t'iktunata llamk'apuy",
        "create": "Kamariy",
+       "create-local": "Kayllapi t'iktunata yapay",
        "editthispage": "Kay p'anqata llamk'apuy",
        "create-this-page": "Kay p'anqata kamariy",
        "delete": "Qulluy",
        "jumptonavigation": "wamp'una",
        "jumptosearch": "maskana",
        "view-pool-error": "Achachaw, sirwiqkunaqa nisyu sasachakuyniyuqmi kachkan.\nNisyu ruraqkunam kay p'anqataqa qhawayta munachkan.\nAma hina kaspa, ratullata suyay kay p'anqata manaraq musuqmanta qhawaykachaspa.\n\n$1",
+       "generic-pool-error": "Achachaw, sirwiqkunaqa nisyu sasachakuyniyuqmi kachkan.\nNisyu ruraqkunam kay kaqtaqa qhawayta munachkan.\nAma hina kaspa, ratullata suyay kay kaqta manaraq musuqmanta qhawaykachaspa.",
        "pool-timeout": "Wichq'aypaq suyaspa mit'a llallisqa",
        "pool-queuefull": "Suyana siq'iqa huntasqañam",
        "pool-errorunknown": "Mana riqsisqa pantasqa",
+       "pool-servererror": "Wayt'ana yupana sirwiyqa manam kanchu ($1).",
        "aboutsite": "{{SITENAME}}manta",
        "aboutpage": "Project:{{SITENAME}}manta",
        "copyright": "Samiqwanqa llamk'ankiman $1 nisqa ruraq hayñikama, mana wakin hina willaptinqa.",
        "invalidtitle-unknownnamespace": "Mana riqsisqa $1 kaq sutisuyu yupay, \"$2\" qillqasqayuq mana allin kaq qillqa suti",
        "exception-nologin": "Manam yaykurqankichu",
        "exception-nologin-text": "Ama hina kaspa [[Special:Userlogin|yaykuy]] kay p'anqaman rinata icha kayta ruranata atinaykipaq.",
+       "exception-nologin-text-manual": "Ama hina kaspa, $1 kay p'anqata icha rurayta atinaykipaq.",
        "virus-badscanner": "Manam allintachu churapusqa: mana riqsisqa añaw maskaq: ''$1''",
        "virus-scanfailed": "manam atinchu añaw maskayta (tuyru: $1)",
        "virus-unknownscanner": "mana riqsisqa añaw qulluna (antivirus):",
        "userlogin-resetlink": "Yaykuna willayniykikunatari qunqarqankichu?",
        "userlogin-resetpassword-link": "Yaykuna rimaykita qunqarqankichu?",
        "userlogin-helplink2": "Yaykuywan yanapay",
+       "userlogin-loggedin": "{{GENDER:$1|$1}} sutiyuq kaspa yaykusqañam kachkanki.\nKay qatiq hunt'ana p'anqata llamk'achiy wakin sutiwan yaykunaykipaq.",
        "userlogin-createanother": "Huk rakiqunata kamariy",
        "createacct-emailrequired": "E-chaski imamayta",
        "createacct-emailoptional": "E-chaski imamayta (munaspayki)",
        "retypenew": "Musuq yaykuna rimaykita takyachiy:",
        "resetpass_submit": "Yaykuna rimata hukchaspa yaykuy",
        "changepassword-success": "Yaykuna rimaykiqa aypalla hukchasqañam.",
+       "changepassword-throttled": "Nisyu kutiñam yaykuykacharqunki.\nAma hina kaspa, $1 suyay manaraq musuqmanta yaykuykachaspayki.",
        "resetpass_forbidden": "Manam saqillanchu yaykuna rimata hukchayta",
        "resetpass-no-info": "Yaykunaykim tiyan kay p'anqata chiqalla aypanaykipaq.",
        "resetpass-submit-loggedin": "Yaykuna rimata hukchay",
        "resetpass-submit-cancel": "Tatiy",
        "resetpass-wrong-oldpass": "Mit'alla icha kunan yaykuna rimaqa manam allinchu.\nYaykuna rimaykitaqa aypalla hukcharqunkiñachá icha huk mit'alla yaykuna rimata mañakurqunkiñachá.",
+       "resetpass-recycled": "Ama hina kaspa, yaykuna rimaykita imamanpas kutichiy, amataq kunan kachkaq yaykuna rimaykimanchu.",
+       "resetpass-temp-emailed": "E-chaskiwan kachamusqa mit'alla yaykuna rimawanmi yaykurqunki. Chay yaykunaykita tukuchinaykipaqqa, kaypi musuq yaykuna rimaykita churay:",
        "resetpass-temp-password": "Mit'alla yaykuna rima:",
        "resetpass-abort-generic": "Yaykuna rima hukchaytaqa yapa wakichim p'itirqan.",
+       "resetpass-expired": "Yaykuna rimaykiqa mawk'ayasqañam. Ama hina kaspa, yaykunaykipaq musuq yaykuna rimaykita churay.",
+       "resetpass-expired-soft": "Yaykuna rimayki mawk'ayasqaña kaspa kutichinam tiyan. Ama hina kaspa, kunallan musuq yaykuna rimaykita akllay icha \"{{int:resetpass-submit-cancel}}\"-ta ñit'iy qhipaqta kutichinaykipaq.",
+       "resetpass-validity-soft": "Yaykuna rimaykiqa manam allinchu: $1.\n\nAma hina kaspa, kunallan musuq yaykuna rimaykita akllay icha \"{{int:resetpass-submit-cancel}}\"-ta ñit'iy qhipaqta kutichinaykipaq.",
        "passwordreset": "Yaykuna rimata kutichiy",
        "passwordreset-text-one": "Kay hunt'ana p'anqata hunt'ay, yaykuna rimaykita kutichinaykipaq.",
        "passwordreset-text-many": "{{PLURAL:$1|Kay k'itichakunamanta hukta hunt'achiy, yaykuna rimaykita kutichinaykipaq.}}",
        "changeemail-password": "{{SITENAME}} yaykuna rimayki:",
        "changeemail-submit": "E-chaskita wakinchay",
        "changeemail-cancel": "Ama niy",
+       "changeemail-throttled": "Nisyu kutiñam yaykuykacharqunki.\nAma hina kaspa, $1 suyay manaraq musuqmanta yaykuykachaspayki.",
        "resettokens": "Llawikunata kutichiy",
        "resettokens-no-tokens": "Manam kanchu kutichina llawikuna.",
        "resettokens-legend": "Llawikunata kutichiy",
        "invalid-content-data": "Samiqmanta willaykunaqa manam allinchu",
        "content-not-allowed-here": "\"$1\" nisqa samiqqa [[$2]] sutiyuq p'anqapi manam saqillasqachu",
        "editwarning-warning": "Kay p'anqata saqispaykiqa lliw rurarqusqayki hukchasqakunatachá chinkachiykiman.\nYaykusqa kaspaykiqa, kay yuyampayta hark'ayta atinki allinkachinaykikunapi \"Llamk'apusqa\" rakipi.",
+       "editpage-notsupportedcontentformat-title": "Samiqpa rikch'ayninqa manam q'imisqachu",
        "content-model-wikitext": "wiki qillqa",
        "content-model-text": "qillqalla",
        "content-model-javascript": "JavaScript",
        "currentrev": "Kunan hukchasqa",
        "currentrev-asof": "Kunan musuqchasqa, $1 pacha",
        "revisionasof": "$1-pa llamk'apusqan",
-       "revision-info": "Kayqa p'anqap mawk'a llamk'apusqa kasqanmi, $1 p'unchawpi $2-pa rurasqan",
+       "revision-info": "Kayqa p'anqap musuqchasqa kasqanmi, $1 p'unchawpi {{GENDER:$6|$2}}$7-pa rurasqan",
        "previousrevision": "← ñawpaq hukchasqa",
        "nextrevision": "Qatiq hukchasqa →",
        "currentrevisionlink": "Kunan hukchasqata qhaway",
        "revdelete-no-file": "Sapaqchasqa willañiqiqa manam kanchu.",
        "revdelete-show-file-confirm": "Allinta yachankichu \"<nowiki>$1</nowiki>\" willañiqimanta qullusqa $2-manta $3-pi musuqchasqata qhawayta munaspayki?",
        "revdelete-show-file-submit": "Arí",
+       "revdelete-selected-text": "{{PLURAL:$1|Akllasqa musuqchasqa|Akllasqa musuqchasqakuna}} [[:$2]]-manta:",
+       "revdelete-selected-file": "{{PLURAL:$1|Akllasqa p'anqa musuqchasqa|Akllasqa p'anqa musuqchasqakuna}} [[:$2]]-manta:",
        "logdelete-selected": "{{PLURAL:$1|Akllasqa tukusqa|Akllasqa tukusqakuna}} hallch'api:",
        "revdelete-confirm": "Ama hina kaspa, takyachiy munayniykita, qatiqninkunata riqsiyniykita, [[{{MediaWiki:Policy-url}}|kawpaykama]] rurayniykitapas.",
        "revdelete-suppress-text": "Pakay ruranata '''kaylla kaptin''' llamk'achiy:\n* K'amiqchá willakuna\n* Runamanta mana allin willakuna\n*: ''wasi tiyay imamaytakuna, karu rimay huchhakuna, mamallaqta sut'inchay huchhakuna, chay hinakunapas.''",
        "searchmenu-exists": "'''Kay wikipiqa «[[$1]]» sutiyuq p'anqam kachkan'''",
        "searchmenu-new": "<strong>Kay wikipi \"[[:$1]]\" sutiyuq p'anqata kamariy!</strong> {{PLURAL:$2|0=|Maskayniykiwan tarisqa p'anqatapas qhaway.|Maskaywan taripasqakunatapas qhaway.}}'",
        "searchprofile-articles": "Samiq p'anqakuna",
-       "searchprofile-project": "Yanapanapaq ruraykamaypaqpas p'anqakuna",
        "searchprofile-images": "Multimidya",
        "searchprofile-everything": "Tukuy",
        "searchprofile-advanced": "Ñawparikusqa",
        "searchprofile-articles-tooltip": "$1 nisqapi maskay",
-       "searchprofile-project-tooltip": "$1 nisqapi maskay",
        "searchprofile-images-tooltip": "Willañiqikunata maskay",
        "searchprofile-everything-tooltip": "Tukuy samiqninpi maskay (rimanakuy p'anqakunapipas)",
        "searchprofile-advanced-tooltip": "Akllasqa suti k'itikunapi maskay",
        "search-result-score": "Chaniyuq kaynin: $1%",
        "search-redirect": "(pusapuna $1)",
        "search-section": "(raki $1)",
+       "search-file-match": "(willañiqip samiqninta taripan)",
        "search-suggest": "Kaytachu niyta munanki? - $1",
        "search-interwiki-caption": "Ñaña ruraykamaykuna",
-       "search-interwiki-default": "$1 taripasqakuna:",
+       "search-interwiki-default": "$1-manta taripasqakuna:",
        "search-interwiki-more": "(aswan)",
        "search-relatedarticle": "Apanakuq",
-       "searcheverything-enable": "Tukuy suti k'itikunapi maskay",
        "searchrelated": "apanakuq",
        "searchall": "tukuy",
        "showingresults": "Qhipanpiqa rikuchkanki {{PLURAL:$1|'''1''' tarisqatam|'''$1'''-kama tarisqakunatam}}, '''$2''' huchhawan qallarispa.",
+       "showingresultsinrange": "Qhipanpiqa rikuchkanki {{PLURAL:$1|<strong>1</strong>-kama tarisqatam|<strong>$1</strong>-kama tarisqakunatam}}, #<strong>$2</strong> huchhamanta #<strong>$3</strong> huchhakama.",
        "showingresultsnum": "Qhipanpiqa rikuchkanki {{PLURAL:$3|'''1''' tarisqatam|'''$3''' tarisqakunatam}}, '''$2''' yupaywan qallarispa.",
        "showingresultsheader": "{{PLURAL:$5|Taripasqa: '''$1''', '''$3'''-manta|Taripasqa: '''$1 - $2''', '''$3'''-manta}}, '''$4'''-paq",
        "search-nonefound": "Maskaypaq kay hina kachun nisqakamaqa manam kanchu taripasqakuna.",
        "allowemail": "Huk ruraqkunamanta e-chaskita saqillay",
        "prefs-searchoptions": "Maskay",
        "prefs-namespaces": "Suti k'itikuna",
-       "defaultns": "Mana hinaptintaq kay suti k'itikunapi maskay:",
        "default": "kikinmanta",
        "prefs-files": "Willañiqikuna",
        "prefs-custom-css": "Munakusqa CSS",
        "right-move": "P'anqakunata astay",
        "right-move-subpages": "P'anqakunata urin p'anqankunatawan astay",
        "right-move-rootuserpages": "Ruraqpa saphi p'anqankunata astay",
+       "right-move-categorypages": "Katiguriya p'anqakunata astay",
        "right-movefile": "Willañiqikunata astay",
        "right-suppressredirect": "Huk p'anqata astaspa pusapuna p'anqata mana kamariy",
        "right-upload": "Willañiqikunata churkuy",
        "action-createpage": "p'anqakunata kamariy",
        "action-createtalk": "rimanakuy p'anqakunata kamariy",
        "action-createaccount": "kay ruraqpa rakiqunanta kamariy",
+       "action-history": "kay p'anqap wiñay kawsayninta qhaway",
        "action-minoredit": "kay llamk'apusqata asllalla nispa sananchay",
        "action-move": "kay p'anqata astay",
        "action-move-subpages": "kay p'anqata urin p'anqankunatapas astay",
        "action-move-rootuserpages": "ruraqpa saphi p'anqankunata astay",
+       "action-move-categorypages": "katiguriya p'anqakunata astay",
        "action-movefile": "kay willañiqita astay",
        "action-upload": "kay willañiqita churkuy",
        "action-reupload": "kay kachkaqña willañiqita huknachay",
        "recentchanges-label-minor": "Kayqa aslla llamk'apuymi",
        "recentchanges-label-bot": "Kayqa rurana antachap llamk'apusqanmi",
        "recentchanges-label-unpatrolled": "Kay llamk'apusqaqa manaraqmi patrullasqachu",
+       "recentchanges-label-plusminus": "P'anqap chhikan, kay byte yupaywan wakinchasqa",
        "recentchanges-legend-heading": "'''Sut'ichana:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|musuq p'anqakunatapas]] qhaway)",
-       "rcnotefrom": "Kay qatiqpiqa '''$2'''-mantapacha ('''$1'''-kama) hukchasqakunatam rikunki.",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|musuq p'anqakunatapas]] qhaway)",
+       "rcnotefrom": "Kay qatiqpiqa <strong>$2</strong>-mantapacha (<strong>$1</strong>-kama) hukchasqakunatam rikunki.",
        "rclistfrom": "$3 $2-manta musuq hukchasqakunata rikuchiy",
        "rcshowhideminor": "$1 uchuylla llamk'apusqakunata",
+       "rcshowhideminor-show": "Rikuchiy",
+       "rcshowhideminor-hide": "Pakay",
        "rcshowhidebots": "$1 rurana antachakunata",
+       "rcshowhidebots-show": "Rikuchiy",
+       "rcshowhidebots-hide": "Pakay",
        "rcshowhideliu": "$1 hallch'asqa ruraqkunata",
+       "rcshowhideliu-show": "Rikuchiy",
+       "rcshowhideliu-hide": "Pakay",
        "rcshowhideanons": "$1 IP-niyuq ruraqkunata",
+       "rcshowhideanons-show": "Rikuchiy",
+       "rcshowhideanons-hide": "Pakay",
        "rcshowhidepatr": "$1 patrullachasqa llamk'apusqakunata",
+       "rcshowhidepatr-show": "Rikuchiy",
+       "rcshowhidepatr-hide": "Pakay",
        "rcshowhidemine": "$1 llamk'apusqaykunata",
+       "rcshowhidemine-show": "Rikuchiy",
+       "rcshowhidemine-hide": "Pakay",
        "rclinks": "Qhipaq $1 hukchasqata qhipaq $2 p'unchawmanta qhaway.<br />$3",
        "diff": "dif",
        "hist": "wñka",
        "fileexists-shared-forbidden": "Kay sutiyuq willañiqiqa kachkañam rakinakusqa willañiqi qullqapi. Ama hina kaspa, churkuyta munaspaykiraq, ñawpaq p'anqaman kutispa willañiqiykita huk sutiwan churkuy. [[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Kay willañiqiqa kay qatiq {{PLURAL:$1|willañiqip|willañiqikunap}} iskaychasqanmi:",
        "file-deleted-duplicate": "Kay hinalla ([[:$1]]) willañiqiña qullusqam karqa. Qhawariy imarayku qullusqa karqa, manaraq musuqmanta churkuykachaspa.",
+       "file-deleted-duplicate-notitle": "Kay willañiqiwan kaqlla kaq willañiqi qullusqañam karqan, sutintaq uraychasqam karqan. Ama hina kaspa, uraychasqa willañiqikunata qhawayta atiq runata tapuy kay sasachakuyta kuskinaykipaq, willañiqita manaraq churkuspa.",
        "uploadwarning": "Willañiqi churkuymanta paqtataq niy",
        "uploadwarning-text": "Ama hina kaspa, kay qatiqpi kaq willañiqimanta willaykunata hukchaspa musuqmanta ruraykachay.",
        "savefile": "Willañiqita waqaychay",
        "uploaddisabledtext": "Willañiqi churkuyqa manam saqillasqachu.",
        "php-uploaddisabledtext": "PHP-wan willañiqi churkuyqa hark'asqam. Ama hina kaspa, willañiqi churkuy allinkachinakunata llanchiy.",
        "uploadscripted": "Kay willañiqiqa wakichi icha HTML qillqayuqmi, llika wamp'unaqa pantalla unanchanmanchá.",
+       "uploadscriptednamespace": "Kay SVG willañiqiqa mana allin \"$1\" sutisuyuyuqmi.",
        "uploadinvalidxml": "Manam atinichu churkusqa willañiqipi XML-ta kuskiyta.",
        "uploadvirus": "Willañiqipiqa añawmi! Yuyay: $1",
        "uploadjava": "Kay ZIP willañiqiqa Java .class willañiqiyuqmi.\nJava churkuyqa manam saqillasqachu, qasikanapaq saywachasqa kanman karunchana tiyanman.",
        "download": "chaqnamuy",
        "unwatchedpages": "Mana watiqasqa p'anqakuna",
        "listredirects": "Tukuy pusapuykuna",
+       "listduplicatedfiles": "Iskaychasqayuq willañiqikuna",
+       "listduplicatedfiles-summary": "Kaypiqa iskaychasqayuq willañiqikunatam rikunki: paypaq lliwmanta aswan musuq musuqchasqaqa huk willañiqipaq lliwmanta aswan musuq musuqchasqamanta iskaychasqam, kay tiyayllapi kaq willañiqipura.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]]-manta [[$3|{{PLURAL:$2|huk iskaychasqam|$2 iskaychasqam}}]] kan.",
        "unusedtemplates": "Mana llamk'achisqa plantillakuna",
        "unusedtemplatestext": "Kay p'anqapi tukuy {{ns:template}} suti k'itipi kaq, manataq huk p'anqapi ch'aqtasqa p'anqakunap sutinkunam. Yuyariy, manaraq qulluspayki chay p'anqakunaman t'inkikunata qhaway.",
        "unusedtemplateswlh": "huk t'inkikuna",
        "pageswithprop-submit": "Riy",
        "doubleredirects": "Iskaylla pusapunakuna",
        "doubleredirectstext": "Kay p'anqapiqa huk pusapuna p'anqaman pusapuq p'anqakunap sutinkunatam rikunki. Sapa sinrupiqa ñawpaq ñiqin, iskay ñiqinpas pusapunaman t'inkikunam, iskay ñiqin pusapunap taripananpa qallariyninpas, sapsilla \"chiqap\" allin taripana qillqam, maymanchus ñawpaq ñiqin pusapuna p'anqa pusachun.\n<del>Chakapusqa</del> taripasqakunaqa paskasqañam.",
-       "double-redirect-fixed-move": "[[$1]] nisqaqa astasqam, kunantaq [[$2]] nisqaman pusapunam",
-       "double-redirect-fixed-maintenance": "[[$1]]-manta [[$2]]-man iskaylla pusapunata allinchaspa.",
+       "double-redirect-fixed-move": "[[$1]] nisqaqa astasqam. Kikinmantataq musuqchasqa kaspa kunan [[$2]] nisqaman pusapunam.",
+       "double-redirect-fixed-maintenance": "Hat'alliy llamk'aykuypi [[$1]]-manta [[$2]]-man iskaylla pusapunata kikinmanta allinchaspa.",
        "double-redirect-fixer": "Pusapuna allinchaq",
        "brokenredirects": "P'akisqa pusapunakuna",
        "brokenredirectstext": "Kay pusapuna p'anqakunaqa mana kachkaq p'anqakunamanmi pusapuchkan:",
        "ninterwikis": "{{PLURAL:$1|huk wikipura|$1 wikipura}}",
        "nlinks": "$1 {{PLURAL:$1|t'inki|t'inkikuna}}",
        "nmembers": "$1 {{PLURAL:$1|qillqa|qillqakuna}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|wankurisqa|wankurisqakuna}}",
        "nrevisions": "$1 {{PLURAL:$1|llamk'apusqa|llamk'apusqakuna}}",
        "nviews": "$1 {{PLURAL:$1|rikuy|rikuykuna}}",
        "nimagelinks": "$1 {{PLURAL:$1|p'anqapi|p'anqakunapi}} llamk'achisqa",
        "wantedtemplates": "Munakusqa plantillakuna",
        "mostlinked": "Lliwmanta aswan t'inkimuqniyuq qillqakuna",
        "mostlinkedcategories": "Lliwmanta aswan t'inkimuqniyuq katiguriyakuna",
-       "mostlinkedtemplates": "Lliwmanta aswan t'inkimuqniyuq plantillakuna",
+       "mostlinkedtemplates": "Lliwmanta aswan t'inkimuqniyuq p'anqakuna",
        "mostcategories": "Lliwmanta aswan katiguriyayuq p'anqakuna",
        "mostimages": "Lliwmanta astawan llamk'achisqa rikchakuna",
        "mostinterwikis": "Lliwmanta aswan wikipurayuq p'anqakuna",
        "listgrouprights-removegroup-self": "{{PLURAL:$2|Huñu|Huñukuna}}tam qichuyta atin kikinpa raqiqunanmanta: $1",
        "listgrouprights-addgroup-self-all": "Tukuy huñukunatam yapayta atin kikinpa raqiqunanman",
        "listgrouprights-removegroup-self-all": "Tukuy huñukunatam qichuyta atin kikinpa raqiqunanmanta",
+       "listgrouprights-namespaceprotection-header": "Suti k'iti saywachanakuna",
+       "listgrouprights-namespaceprotection-namespace": "Suti k'iti",
+       "trackingcategories-name": "Willaypa sutin",
+       "trackingcategories-nodesc": "T'iktuna manam kanchu.",
+       "trackingcategories-disabled": "Katiguriyaman ama nisqa",
        "mailnologin": "Imamaytataqa ama kachaychu",
        "mailnologintext": "[[Special:UserLogin|Yaykunaykim]], [[Special:Preferences|allinkachinaykikunapi]] chaniyuq e-chaski imamaytappas kananmi tiyan huk ruraqkunaman e-chaskita kachanaykipaq.",
        "emailuser": "Kay ruraqman e-chaskita kachay",
        "unwatchthispage": "Amaña watiqaychu",
        "notanarticle": "Manam qillqachu",
        "notvisiblerev": "Musuqchasqaqa qullusqam",
-       "watchlist-details": "Watiqana sutisuyuykipiqa {{PLURAL:$1|huk p'anqam|$1 p'anqakunam}}, rimanakuna p'anqakunata mana yupaspa.",
+       "watchlist-details": "Watiqana sutisuyuykipiqa {{PLURAL:$1|$1 p'anqam|$1 p'anqakunam}}, rimanakuna p'anqakunata mana yupaspa.",
        "wlheader-enotif": "E-chaskimanta musyachinaman arí nisqañam.",
        "wlheader-showupdated": "Qayna watukamusqaykimantapacha hukchasqa p'anqakunataqa '''yanasapa''' nisqapim rikunki.",
        "wlshowlast": "$1 ura, $2 p'unchaw $3-mantapacha hukchasqakunata rikuchiy",
        "protect-locked-blocked": "Hark'asqa kaspayki manam atinkichu amachasqa kachkayninta hukchayta. Kay qatiqpiqa '''$1''' sutiyuq p'anqap kunan allinkachinankunatam rikunki:",
        "protect-locked-dblock": "Willañiqintin hark'asqa kachkaptinmi, manam atinkichu amachaypa kachkayninkunata hukchayta.\nKay qatiqpiqa '''$1''' sutiyuq p'anqap kunan allinkachinankunatam rikunki:",
        "protect-locked-access": "Qampa rakiqunaykiwanqa manam p'anqa amachaypa kachkayninkunata hukchayta atinkichu.\nKay qatiqpiqa '''$1''' sutiyuq p'anqap kunan allinkachinankunatam rikunki:",
-       "protect-cascadeon": "Kay p'anqaqa amachasqam kachkan, kay phaqchalla amachasqa {{PLURAL:$1|p'anqapi|p'anqakunapi}} ch'aqtasqa kaspanmi. Kay p'anqap amachasqa kachkayninta hukchaytam atinki, hinaspapas manam phaqcha nisqa amachasqa kaynintachu hukchanki.",
+       "protect-cascadeon": "Kay p'anqaqa amachasqam kachkan, kay phaqchalla amachasqa {{PLURAL:$1|p'anqapi|p'anqakunapi}} ch'aqtasqa kaspanmi.\nKay p'anqap amachasqa kachkayninta hukchaspaykiqa manam phaqcha nisqa amachasqa kaynintachu hukchanki.",
        "protect-default": "Tukuy ruraqkunapaq",
        "protect-fallback": "\"$1\" saqillanayuq ruraqkunallapaq",
        "protect-level-autoconfirmed": "Kikin rakiqunayuq ruraqkunallapaq",
        "contributions-title": "$1 sutiyuq ruraqpa llamk'apusqankuna",
        "mycontris": "Llamk'apusqaykuna",
        "contribsub2": "{{GENDER:$3|$1}}paq ($2)",
+       "contributions-userdoesnotexist": "\"$1\" sutiyuq rakiqunaqa manam hallch'asqachu.",
        "nocontribs": "Manam kay hina hukchasqakuna kanchu.",
        "uctop": "(qhipaq hukchasqa)",
        "month": "Kay killamanta (ñawpaqmantapas):",
        "sp-contributions-newbies-sub": "Musuqkunapaq",
        "sp-contributions-newbies-title": "Musuq ruraqkunap llamk'apusqankuna",
        "sp-contributions-blocklog": "Hark'ay hallch'asqakuna",
+       "sp-contributions-suppresslog": "uraychasqa ruraqpa hukchasqankuna",
        "sp-contributions-deleted": "qullusqa ruraqpa hukchasqankuna",
        "sp-contributions-uploads": "churkuykuna",
        "sp-contributions-logs": "hallch'akuna",
        "sp-contributions-search": "Llamk'apusqakunata maskay",
        "sp-contributions-username": "IP huchha icha ruraqpa sutin:",
        "sp-contributions-toponly": "Pata musuqchasqakunallata rikuchiy",
+       "sp-contributions-newonly": "P'anqa kamarisqakunallata rikuchiy",
        "sp-contributions-submit": "Maskay",
        "whatlinkshere": "Kayman t'inkimuq",
        "whatlinkshere-title": "$1 sutiyuq p'anqaman t'inkimuqkuna",
        "tooltip-preferences-save": "Akllasqakunata waqaychay",
        "tooltip-summary": "Pisichaychata yaykuchiy",
        "common.css": "/* Churamusqa CSS chantakunaqa tukuy qarakunapim llamk'anqa */",
-       "cologneblue.css": "/* Churamusqa CSS chantakunaqa ''Cologne Blue skin'' nisqa qarata llamk'achiq ruraqkunapaq llamk'anqa */",
        "monobook.css": "/* Kayman churasqa CSS nisqaqa Monobook qaratam hukchanqa tukuy internet tiyanapaq */",
-       "modern.css": "/* Churamusqa CSS chantakunaqa ''Modern skin'' nisqa qarata llamk'achiq ruraqkunapaq llamk'anqa */",
        "print.css": "/* Churamusqa CSS chantakunaqa ch'ipachinap rikch'akuynintam hukchanqa */",
        "common.js": "/* Ima kaypi kaq JavaScript qillqapas tukuy ruraqkunapaq tukuy p'anqakunap tukuy chaqnankunapi chaqnamusqa kanqa. */",
-       "cologneblue.js": "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas ''Cologne Blue skin'' nisqa qarata llamk'achiq ruraqkunapaq chaqnasqa kanqa */",
        "monobook.js": "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas MonoBook nisqata llamk'achiq ruraqkunapaq chaqnasqa kanqa */",
-       "modern.js": "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas ''Modern skin'' nisqa qarata llamk'achiq ruraqkunapaq chaqnasqa kanqa */",
        "anonymous": "{{SITENAME}}pi sutinnaq {{PLURAL:$1|ruraq|ruraqkuna}}",
        "siteuser": "{{SITENAME}}-pa $1 sutiyuq ruraqnin",
        "anonuser": "{{SITENAME}} rakiqunannaq ruraq $1",
        "confirm-watch-top": "Kay p'anqata watiqayta munankichu?",
        "confirm-unwatch-button": "Arí niy",
        "confirm-unwatch-top": "Kay p'anqata manaña watiqayta munankichu?",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← ñawpaq p'anqa",
        "imgmultipagenext": "qatiq p'anqa →",
        "imgmultigo": "Riy!",
        "imgmultigoto": "$1 sutiyuq p'anqaman riy",
        "img-lang-default": "(kikinmanta rimay)",
+       "img-lang-info": "Rikchata kaypi rindirisay: $1. $2",
        "img-lang-go": "Riy",
        "ascending_abbrev": "wich",
        "descending_abbrev": "uray",
        "watchlistedit-raw-done": "Watiqana sutisuyuykiqa musuqchasqañam.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Huk yapasqa p'anqa suti|$1 yapasqa p'anqa sutikuna}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Huk qichusqa p'anqa suti|$1 qichusqa p'anqa sutikuna}}:",
+       "watchlistedit-clear-title": "Ch'usaqchasqa watiqana sutisuyu",
+       "watchlistedit-clear-legend": "Watiqana sutisuyuta ch'usaqchay",
+       "watchlistedit-clear-explain": "Tukuy qillqa sutikunam watiqana sutisuyuykimanta qichusqa kanqa",
+       "watchlistedit-clear-titles": "P'anqakuna:",
+       "watchlistedit-clear-submit": "Watiqana sutisuyuta ch'usaqchay (manapunim kutichisqachu kanqa!)",
+       "watchlistedit-clear-done": "Watiqana sutisuyuykiqa ch'usaqchasqañam.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Huk qichusqa p'anqa suti|$1 qichusqa p'anqa sutikuna}}:",
+       "watchlistedit-too-many": "Kaypiqa nisyu qhawana p'anqakunam.",
+       "watchlisttools-clear": "Watiqana sutisuyuta ch'usaqchay",
        "watchlisttools-view": "Hukchasqakunata qhaway",
        "watchlisttools-edit": "Watiqana sutisuyuta qhawaspa llamk'apuy",
        "watchlisttools-raw": "Chawa watiqana sutisuyuta llamk'apuy",
        "htmlform-no": "Mana",
        "htmlform-yes": "Arí",
        "htmlform-chosen-placeholder": "Akllanata akllay",
+       "htmlform-cloner-create": "Astawan yapay",
+       "htmlform-cloner-delete": "Qichuy",
        "sqlite-has-fts": "$1 hunt'a qillqa maskana yanapawan",
        "sqlite-no-fts": "$1 mana hunt'a qillqa maskana yanapawan",
        "logentry-delete-delete": "{{GENDER:$2|}}$1 sutiyuq ruraqqa $3 nisqa p'anqatam qullun",
index b1b19df..92ecf7f 100644 (file)
        "searchmenu-exists": "'''Igl exista ina pagina cun il num \"[[:$1]] sin questa vichi\"'''",
        "searchmenu-new": "<strong>Crear la pagina «[[:$1]]» sin quest vichi!</strong> {{PLURAL:$2|0=|Vesair er la pagina chattada cun tia tschertga.|Vesair er las resultats da tia tschertga.}}",
        "searchprofile-articles": "Paginas da cuntegn",
-       "searchprofile-project": "Agid e paginas dal project",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tut",
        "searchprofile-advanced": "Avanzà",
        "searchprofile-articles-tooltip": "Tschertgar en $1",
-       "searchprofile-project-tooltip": "Tschertgar en $1",
        "searchprofile-images-tooltip": "Tschertgar datotecas",
        "searchprofile-everything-tooltip": "Tschertgar en tut il cuntegn (inclusivamain paginas da discussiun)",
        "searchprofile-advanced-tooltip": "Tschertgar en ulteriurs tips da pagina",
        "search-interwiki-default": "$1 resultats:",
        "search-interwiki-more": "(dapli)",
        "search-relatedarticle": "Sumegliant",
-       "searcheverything-enable": "Tschertgar en tut ils tips da pagina",
        "searchrelated": "sumegliant",
        "searchall": "tuts",
        "showingresults": "Sutvart èn enfin {{PLURAL:$1|'''in''' resultat|'''$1''' resultats}} cumenzond cun il numer '''$2'''.",
        "allowemail": "Retschaiver e-mails dad auters utilisaders",
        "prefs-searchoptions": "Tschertgar",
        "prefs-namespaces": "Tips da pagina",
-       "defaultns": "Uschiglio tschertgar en quests tips da pagina:",
        "default": "Standard",
        "prefs-files": "Datotecas",
        "prefs-custom-css": "CSS persunalisà",
        "prefs-emailconfirm-label": "Confirmaziun per e-mail:",
        "youremail": "Adressa dad e-mail:",
        "username": "{{GENDER:$1|Num d'utilisader|Num da l'utilisadra}}:",
-       "uid": "ID da l'{{GENDER:$1|utilisader|utilisadra}}:",
        "prefs-memberingroups": "{{GENDER:$2|Commember|Commembra}} da {{PLURAL:$1|la gruppa|las gruppas}}:",
        "prefs-registration": "Temp da registraziun:",
        "yourrealname": "Num real:",
        "recentchanges-label-bot": "Questa modificaziun è vegnida exequida dad in bot",
        "recentchanges-label-unpatrolled": "Questa midada n'è anc betg vegnida controllada",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "(vesair era la [[Special:NewPages|glista da novas paginas]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vesair era la [[Special:NewPages|glista da novas paginas]])",
        "rcnotefrom": "I vegnan mussadas las midadas a partir da las <strong>$4</strong> dals <strong>$3</strong> (maximalmain <strong>$1</strong>).",
        "rclistfrom": "Mussar las novas midadas a partir da las $2 dals $3",
        "rcshowhideminor": "$1 midadas pitschnas",
        "log-title-wildcard": "Tschertgar titels che cumenzan cun quest text",
        "showhideselectedlogentries": "Mussar/zuppentar las endataziuns tschernidas dal protocol",
        "allpages": "Tut ils artitgels",
-       "alphaindexline": "$1 enfin $2",
        "nextpage": "proxima pagina ($1)",
        "prevpage": "ultima pagina ($1)",
        "allpagesfrom": "Mussar paginas davent da:",
index b00ad18..5c9707d 100644 (file)
                        "TTO",
                        "Urhixidur",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "XXN"
                ]
        },
        "tog-underline": "Sublinierea legăturilor:",
        "tog-hideminor": "Ascunde modificările minore în schimbări recente",
-       "tog-hidepatrolled": "Ascunde modificările patrulate în schimbări recente",
+       "tog-hidepatrolled": "Ascunde modificările patrulate în schimbările recente",
        "tog-newpageshidepatrolled": "Ascunde paginile patrulate din lista de pagini noi",
        "tog-extendwatchlist": "Extinde lista de articole urmărite pentru a arăta toate schimbările efectuate, nu doar pe cele mai recente",
        "tog-usenewrc": "Grupează modificările după pagină în cadrul schimbărilor recente și listei paginilor urmărite",
        "vector-view-view": "Lectură",
        "vector-view-viewsource": "Sursă pagină",
        "actions": "Acțiuni",
+       "vector-more-actions": "Mai mult",
        "namespaces": "Spații de nume",
        "variants": "Variante",
        "navigation-heading": "Meniu de navigare",
        "currentrev": "Versiunea curentă",
        "currentrev-asof": "Versiunea curentă din $1",
        "revisionasof": "Versiunea de la data $1",
-       "revision-info": "Versiunea din $1; autor: $2",
+       "revision-info": "Versiunea din $1; autor: {{GENDER:$6|$2}}$7",
        "previousrevision": "←Versiunea anterioară",
        "nextrevision": "Versiunea următoare →",
        "currentrevisionlink": "Versiunea curentă",
        "searchmenu-exists": "'''Există o pagină cu titlul „[[:$1]]'” pe acest site.'''",
        "searchmenu-new": "<strong>'''Creați pagina „[[:$1]]” pe acest wiki!'''</strong> {{PLURAL:$2|0=|Vedeți, de asemenea, pagina găsită în urma căutării dumneavoastră.|Vedeți, de asemenea, rezultatele căutării.}}",
        "searchprofile-articles": "Pagini cu conținut",
-       "searchprofile-project": "Pagini din spațiile Proiect și Ajutor",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Totul",
        "searchprofile-advanced": "Avansat",
        "searchprofile-articles-tooltip": "Caută în $1",
-       "searchprofile-project-tooltip": "Caută în $1",
        "searchprofile-images-tooltip": "Caută fișiere",
        "searchprofile-everything-tooltip": "Caută în tot conținutul (incluzând paginile de discuție)",
        "searchprofile-advanced-tooltip": "Caută în spații de nume personalizate",
        "search-interwiki-default": "Rezultate de la $1:",
        "search-interwiki-more": "(mai mult)",
        "search-relatedarticle": "Relaționat",
-       "searcheverything-enable": "Caută în toate spațiile de nume",
        "searchrelated": "relaționat",
        "searchall": "toate",
        "showingresults": "Mai jos {{PLURAL:$1|apare '''1''' rezultat|apar '''$1''' rezultate|apar '''$1''' de rezultate}} începând cu nr. <b>$2</b>.",
        "powersearch-togglelabel": "Selectare:",
        "powersearch-toggleall": "Tot",
        "powersearch-togglenone": "Nimic",
+       "powersearch-remember": "Reține selecția pentru căutările viitoare",
        "search-external": "Căutare externă",
        "searchdisabled": "<p>Ne pare rău! Căutarea după text a fost dezactivată temporar, din motive de performanță. Între timp puteți folosi căutarea prin Google mai jos, însă aceasta poate să dea rezultate învechite.</p>",
        "search-error": "A apărut o eroare în timpul căutării: $1",
        "allowemail": "Acceptă e-mail de la alți utilizatori",
        "prefs-searchoptions": "Căutare",
        "prefs-namespaces": "Spații de nume",
-       "defaultns": "Altfel, caută în aceste spații de nume:",
        "default": "standard",
        "prefs-files": "Fișiere",
        "prefs-custom-css": "CSS personalizat",
        "recentchanges-label-unpatrolled": "Această modificare nu a fost încă verificată",
        "recentchanges-label-plusminus": "Dimensiunea paginii s-a modificat corespunzător acestui număr de octeți",
        "recentchanges-legend-heading": "'''Legendă:'''",
-       "recentchanges-legend-newpage": "(vedeți și [[Special:NewPages|lista cu pagini noi]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vedeți și [[Special:NewPages|lista cu pagini noi]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Dedesubt sunt modificările începând cu <b>$2</b> (maximum <b>$1</b> afișate).",
        "rclistfrom": "Se afișează modificările începând cu $3, $2",
        "wantedtemplates": "Formate dorite",
        "mostlinked": "Cele mai căutate articole",
        "mostlinkedcategories": "Cele mai căutate categorii",
-       "mostlinkedtemplates": "Cele mai folosite formate",
+       "mostlinkedtemplates": "Cele mai transcluse pagini",
        "mostcategories": "Articole cu cele mai multe categorii",
        "mostimages": "Cele mai căutate imagini",
        "mostinterwikis": "Pagini cu cele mai multe legături interwiki",
        "watchlistanontext": "Vă rugăm să vă $1 pentru a vizualiza sau edita elementele din lista dumneavoastră de pagini urmărite.",
        "watchnologin": "Nu sunteți autentificat",
        "addwatch": "Adăugă la lista de pagini urmărite",
-       "addedwatchtext": "Pagina „[[:$1]]” a fost adăugată la lista dumneavoastră de [[Special:Watchlist|pagini urmărite]].\nModificările viitoare efectuate asupra acestei pagini dar și asupra paginii de discuție asociată vor fi listate acolo.",
+       "addedwatchtext": "Pagina „[[:$1]]” a fost adăugată în lista dumneavoastră de [[Special:Watchlist|pagini urmărite]].\nModificările viitoare efectuate asupra acestei pagini dar și asupra paginii de discuție asociată vor fi listate acolo.",
+       "addedwatchtext-short": "Pagina „$1” a fost adăugată în lista dumneavoastră de pagini urmărite.",
        "removewatch": "Elimină din lista de pagini urmărite",
        "removedwatchtext": "Pagina „[[:$1]]” a fost eliminată din [[Special:Watchlist|lista de pagini urmărite]].",
+       "removedwatchtext-short": "Pagina „$1” a fost eliminată din lista de pagini urmărite.",
        "watch": "Urmărire",
        "watchthispage": "Urmărește pagina",
        "unwatch": "Nu mai urmări",
        "tooltip-summary": "Descrieți pe scurt modificarea",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/** CSS plasate aici vor fi aplicate tuturor aparițiilor */",
-       "cologneblue.css": "/* CSS plasate aici vor afecta utilizatorii stilului Cologne Blue */",
        "monobook.css": "/* modificați acest fișier pentru a adapta înfățișarea monobook-ului pentru tot situl*/",
-       "modern.css": "/* CSS plasate aici vor afecta utilizatorii stilului Modern */",
        "vector.css": "/* CSS plasate aici vor afecta utilizatorii stilului Vector */",
        "print.css": "/* CSS plasate aici vor afecta modul în care paginile vor fi imprimate */",
        "anonymous": "{{PLURAL:$1|Utilizator anonim|Utilizatori anonimi}} ai {{SITENAME}}",
        "pageinfo-category-pages": "Număr de pagini",
        "pageinfo-category-subcats": "Număr de subcategorii",
        "pageinfo-category-files": "Număr de fișiere",
-       "skinname-cologneblue": "Albastru de Cologne",
        "skinname-monobook": "Monobook",
-       "skinname-modern": "Modern",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "Marchează pagina ca verificată",
        "markaspatrolledtext": "Marchează această pagină ca verificată",
index dca8ad2..e6b4805 100644 (file)
        "currentrev": "Versione de osce a die",
        "currentrev-asof": "Revisiona corrende de $1",
        "revisionasof": "Versione de $1",
-       "revision-info": "Versione scritte jndr'à $1 da $2",
+       "revision-info": "Revisione de $1 da {{GENDER:$6|$2}}$7",
        "previousrevision": "← Versione Vecchje",
        "nextrevision": "Versione cchiù nova →",
        "currentrevisionlink": "Versione de mò",
        "searchmenu-exists": "'''Stè 'na pàgene nnumenete \"[[$1]]\" sus 'a sta Uicchipèdie'''",
        "searchmenu-new": "<strong>[[:$1|Ccreje]] 'a pàgene \"[[:$1|$1]]\" sus 'a sta Uicchipèdie!</strong> 'Ndruche pure {{PLURAL:$2|0=|'a pàgene acchiate cu 'a ricerca toje.|le resultate acchiate da 'a ricerche.}}",
        "searchprofile-articles": "Vôsce",
-       "searchprofile-project": "Pàggene de ajiute e de pruggette",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tutte",
        "searchprofile-advanced": "Avanzete",
        "searchprofile-articles-tooltip": "Cirche jndr'à $1",
-       "searchprofile-project-tooltip": "Cirche jndr'à $1",
        "searchprofile-images-tooltip": "Cirche pe le fail",
        "searchprofile-everything-tooltip": "Cirche jndr'à tutte le vosce (combrese le vosce de le 'ngazzaminde)",
        "searchprofile-advanced-tooltip": "Cirche jndr'à le namespace personalizzete",
        "search-interwiki-default": "$1 resultete:",
        "search-interwiki-more": "(de cchiù)",
        "search-relatedarticle": "Colleghete",
-       "searcheverything-enable": "Cirche jndr'à tutte le namespace",
        "searchrelated": "colleghete",
        "searchall": "tutte",
        "showingresults": "Stoche a fazze vedè aqquà sotte {{PLURAL:$1|'''1''' resultete|'''$1''' resultete}} ca accumenzene cu #'''$2'''.",
        "powersearch-togglelabel": "Verifiche:",
        "powersearch-toggleall": "Tutte",
        "powersearch-togglenone": "Ninde",
+       "powersearch-remember": "Arrecuèrde 'a selezione pe le prossime ricerche",
        "search-external": "Ricerche esterne",
        "searchdisabled": "'A ricerche sus a {{SITENAME}} ha state disabbilitete.\nTu puè cercà ausanne Google.\nPerò fa attenzione purcè l'indice lore sus a {{SITENAME}} ponne condenè pàggene ca non ge sonde aggiornate.",
        "search-error": "S'ha verificate 'n'errore mendre ste cercave: $1",
        "allowemail": "Abbilite l'e-mail da l'otre utinde",
        "prefs-searchoptions": "Cirche",
        "prefs-namespaces": "Namespaces",
-       "defaultns": "Cirche jndr'à chiste namespace:",
        "default": "defolt",
        "prefs-files": "Fails",
        "prefs-custom-css": "CSS Personalizzete",
        "prefs-emailconfirm-label": "Conferme de l'e-mail:",
        "youremail": "Poste:",
        "username": "{{GENDER:$1|Nome de l'utende}}:",
-       "uid": "{{GENDER:$1|ID Utende}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|d'u gruppe|de le gruppe}}:",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "Orarie de reggistrazzione:",
        "recentchanges-label-bot": "Stu cangiamende ha state fatte da 'nu bot",
        "recentchanges-label-unpatrolled": "Stu cangiamende non g'à state angore condrollate",
        "recentchanges-legend-heading": "'''Leggende:'''",
-       "recentchanges-legend-newpage": "('ndruche pure [[Special:NewPages|elenghe de le pàggene nuève]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ('ndruche pure [[Special:NewPages|elenghe de le pàggene nuève]])",
        "rcnotefrom": "Sotte stonne le cangiaminde da '''$2''' ('nzigne a '''$1''' fatte vedè).",
        "rclistfrom": "Fà vedè le urteme cangiaminde partenne da $3 $2",
        "rcshowhideminor": "$1 cangiaminde stuèdeche",
        "log-title-wildcard": "Cirche le titele ca accumenzene cu stu teste",
        "showhideselectedlogentries": "Fà vedè/scunne le righe scacchiate de l'archivije",
        "allpages": "Tutte le pàggene",
-       "alphaindexline": "da $1 a $2",
        "nextpage": "Pàgene apprisse ($1)",
        "prevpage": "Pàgene apprime ($1)",
        "allpagesfrom": "Fà vedè le pàggene partenne da:",
        "tooltip-summary": "Mitte 'nu riepileghe piccinne",
        "interlanguage-link-title": "$1 - $2",
        "common.css": "/* 'U CSS ca se iacchie aqquà avène applicate a tutte le masckere */",
-       "cologneblue.css": "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Blu Cologne */",
        "monobook.css": "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Monobook */",
-       "modern.css": "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Moderne */",
        "vector.css": "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Vettore */",
        "print.css": "/* 'U CSS ca se iacchie aqquà avène applicate a 'u resultate d'a stambe */",
        "noscript.css": "/* 'U CSS ca se iacchie aqquà l'ausane le utinde cu 'u Javascript disabbilitate */",
        "group-sysop.css": "/* 'U CSS ca se iacchie aqquà ave effettue seulamende sus a le utinde amministrature */",
        "group-bureaucrat.css": "/* 'U CSS ca se iacchie aqquà ave effettue seulamende sus a le utinde burocrate */",
        "common.js": "/* Ogne JavaScript aqquà avène carecate pe tutte le utinde sus a ogne pàgene carecate. */",
-       "cologneblue.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Blu Cologne */",
        "monobook.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere MonoBook */",
-       "modern.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Moderne */",
        "vector.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Vettore */",
        "group-autoconfirmed.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde autoconfirmatarie */",
        "group-bot.js": "/* Ogne JavaScript aqquà avène carecate pe le bot */",
        "pageinfo-category-pages": "Numere de pàggene",
        "pageinfo-category-subcats": "Numere de sottocategorije",
        "pageinfo-category-files": "Numere de file",
-       "skinname-cologneblue": "Blu Cologne",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderne",
        "skinname-vector": "Vettore",
        "markaspatrolleddiff": "Signe cumme condrollate",
        "markaspatrolledtext": "Signe sta pàgene cumme condrollate",
index 104c5ce..12b14d0 100644 (file)
                        "Умар",
                        "לערי ריינהארט",
                        "Meshkov.a",
-                       "아라"
+                       "아라",
+                       "Eroha",
+                       "Niklem",
+                       "Agilight"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "category-empty": "''Эта категория в данный момент пуста.''",
        "hidden-categories": "{{PLURAL:$1|1=Скрытая категория|Скрытые категории}}",
        "hidden-category-category": "Скрытые категории",
-       "category-subcat-count": "{{PLURAL:$2|Эта категория содержит только следующую подкатегорию.|Эта категория содержит $1 {{PLURAL:$1|подкатегорию|подкатегорий|подкатегории}} из $2 всего.}}",
+       "category-subcat-count": "{{PLURAL:$2|1=Эта категория содержит только следующую подкатегорию.|В этой категории отображается $1 {{PLURAL:$1|подкатегория|подкатегорий|подкатегории}} из имеющихся $2.}}",
        "category-subcat-count-limited": "В этой категории {{PLURAL:$1|$1 подкатегория|$1 подкатегорий|$1 подкатегории}}.",
        "category-article-count": "{{PLURAL:$2|1=Эта категория содержит единственную страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страниц|Показаны $1 страницы}} из $2, {{PLURAL:$2|находящейся|находящихся}} в данной категории.}}",
        "category-article-count-limited": "В этой категории {{PLURAL:$1|$1 страница|$1 страниц|$1 страницы|1=только одна страница}}.",
        "vector-view-view": "Читать",
        "vector-view-viewsource": "Просмотр разметки",
        "actions": "Действия",
+       "vector-more-actions": "Ещё",
        "namespaces": "Пространства имён",
        "variants": "Варианты",
        "navigation-heading": "Навигация",
        "currentrev": "Текущая версия",
        "currentrev-asof": "Текущая версия на $1",
        "revisionasof": "Версия $1",
-       "revision-info": "Версия от $1; $2",
+       "revision-info": "Версия от $1; {{GENDER:$6|$2}}$7",
        "previousrevision": "← Предыдущая",
        "nextrevision": "Следующая →",
        "currentrevisionlink": "Текущая версия",
        "searchmenu-exists": "'''В этой вики есть страница «[[:$1]]»'''",
        "searchmenu-new": "<strong>Создать страницу «[[:$1]]» в этом вики-проекте!</strong>\n{{PLURAL:$2|0=|См. также страницу, найденную по результатами вашего поиска.|См. также найденные результаты поиска.}}",
        "searchprofile-articles": "Основные страницы",
-       "searchprofile-project": "Страницы справки и проекта",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Везде",
        "searchprofile-advanced": "Расширенный",
        "searchprofile-articles-tooltip": "Поиск в $1",
-       "searchprofile-project-tooltip": "Поиск в $1",
        "searchprofile-images-tooltip": "Поиск файлов",
        "searchprofile-everything-tooltip": "Поиск на всех страницах (включая страницы обсуждений)",
        "searchprofile-advanced-tooltip": "Искать в заданных пространствах имён",
        "search-interwiki-default": "Результаты из $1:",
        "search-interwiki-more": "(ещё)",
        "search-relatedarticle": "Связанный",
-       "searcheverything-enable": "Поиск по всем пространствам имён",
        "searchrelated": "связанный",
        "searchall": "все",
        "showingresults": "Ниже {{PLURAL:$1|1=показан результат|показаны  результаты}} с № '''$2''' и вплоть до № '''$1'''.",
        "powersearch-togglelabel": "Отметить:",
        "powersearch-toggleall": "Все",
        "powersearch-togglenone": "Ничего",
+       "powersearch-remember": "Запомнить выбор для будущих поисков",
        "search-external": "Внешний поиск",
        "searchdisabled": "Извините, но встроенный полнотекстовый поиск выключен. Вы можете воспользоваться поиском по сайту через поисковые системы общего назначения, однако имейте в виду, что копия сайта в их кэше может быть несколько устаревшей.",
        "search-error": "Произошла ошибка при поиске: $1",
        "allowemail": "Разрешить получение электронной почты от других участников",
        "prefs-searchoptions": "Поиск",
        "prefs-namespaces": "Пространства имён",
-       "defaultns": "Иначе искать в следующих пространствах имён:",
        "default": "по умолчанию",
        "prefs-files": "Файлы",
        "prefs-custom-css": "Собственный CSS",
        "grouppage-suppress": "{{ns:project}}:Ревизоры",
        "right-read": "просмотр страниц",
        "right-edit": "правка страниц",
-       "right-createpage": "создание страниц (не являющихся обсуждениями)",
+       "right-createpage": "создание страниц, не являющихся обсуждениями",
        "right-createtalk": "создание страниц обсуждений",
        "right-createaccount": "создание новых учётных записей участников",
        "right-minoredit": "простановка отметки «малое изменение»",
        "right-move": "переименование страниц",
        "right-move-subpages": "переименование страниц с их подстраницами",
        "right-move-rootuserpages": "переименование корневых страниц участников",
-       "right-move-categorypages": "Ð\9fереименование страниц категорий",
+       "right-move-categorypages": "переименование страниц категорий",
        "right-movefile": "переименование файлов",
-       "right-suppressredirect": "не Ñ\81оздаваÑ\82Ñ\8c Ð¿ÐµÑ\80енапÑ\80авление Ñ\81о Ñ\81Ñ\82аÑ\80ого Ð¸Ð¼ÐµÐ½Ð¸ Ð¿Ñ\80и Ð¿ÐµÑ\80еименовании Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b",
+       "right-suppressredirect": "пеÑ\80еименование Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð±ÐµÐ· Ñ\81озданиÑ\8f Ð¿ÐµÑ\80енапÑ\80авлениÑ\8f Ñ\81о Ñ\81Ñ\82аÑ\80ого Ð¸Ð¼ÐµÐ½Ð¸",
        "right-upload": "загрузка файлов",
        "right-reupload": "запись файлов поверх существующих",
        "right-reupload-own": "перезапись файлов тем же участником",
        "right-reupload-shared": "подмена файлов из общих хранилищ локальными",
        "right-upload_by_url": "загрузка файлов с адреса URL",
        "right-purge": "очистка кэша страниц без страницы подтверждения",
-       "right-autoconfirmed": "Ð\9dет ограничений по скорости на IP-адрес",
+       "right-autoconfirmed": "нет ограничений по скорости на IP-адрес",
        "right-bot": "считаться автоматическим процессом",
        "right-nominornewtalk": "отсутствие малых правок на страницах обсуждений включает режим новых сообщений",
        "right-apihighlimits": "меньше ограничений на выполнение API-запросов",
        "right-writeapi": "использование API для записи",
        "right-delete": "удаление страниц",
        "right-bigdelete": "удаление страниц с длинными историями изменений",
-       "right-deletelogentry": "удаление и восстановление конкретных записей журнала.",
+       "right-deletelogentry": "удаление и восстановление конкретных записей журнала",
        "right-deleterevision": "удаление и восстановление конкретных версий страниц",
        "right-deletedhistory": "просмотр истории удалённых страниц без доступа к удалённому тексту",
        "right-deletedtext": "просмотр удалённого текста и изменений между удалёнными версиями страниц",
        "right-hideuser": "запрет имени участника и его сокрытие",
        "right-ipblock-exempt": "обход блокировок по IP, автоблокировок и блокировок диапазонов",
        "right-proxyunbannable": "обход автоматической блокировки прокси",
-       "right-unblockself": "Разблокировать себя",
-       "right-protect": "Ð\98зменение уровня защиты страниц и правка каскадно защищённых страниц",
-       "right-editprotected": "Ð\9fравка страниц, защищённых как «{{int:protect-level-sysop}}»",
-       "right-editsemiprotected": "Ð\9fравка страниц, защищённых как «{{int:protect-level-autoconfirmed}}»",
+       "right-unblockself": "разблокировка себя",
+       "right-protect": "изменение уровня защиты страниц и правка каскадно защищённых страниц",
+       "right-editprotected": "правка страниц, защищённых как «{{int:protect-level-sysop}}»",
+       "right-editsemiprotected": "правка страниц, защищённых как «{{int:protect-level-autoconfirmed}}»",
        "right-editinterface": "изменение пользовательского интерфейса",
        "right-editusercssjs": "правка CSS- и JS-файлов других участников",
        "right-editusercss": "правка CSS-файлов других участников",
        "right-edituserjs": "правка JavaScript-файлов других участников",
-       "right-editmyusercss": "Редактирование файлов CSS пользователя",
-       "right-editmyuserjs": "Редактировать свои пользовательские JavaScript-файлы",
-       "right-viewmywatchlist": "Ð\9fоÑ\81моÑ\82Ñ\80еÑ\82Ñ\8c Ñ\81вой Ñ\81пиÑ\81ок наблюдения",
-       "right-editmywatchlist": "Редактировать свой список наблюдения. Обратите внимание, что некоторые действия будут добавлять страницы даже без такого права.",
-       "right-viewmyprivateinfo": "Ð\9fросмотр собственных личных данных (например, адрес электронной почты, настоящее имя)",
-       "right-editmyprivateinfo": "Ð\9fравка собственных личных данных (например, адрес электронной почты, настоящее имя)",
-       "right-editmyoptions": "Редактировать собственные предпочтения",
+       "right-editmyusercss": "редактирование своих пользовательских CSS-файлов",
+       "right-editmyuserjs": "редактирование своих пользовательских JavaScript-файлов",
+       "right-viewmywatchlist": "пÑ\80оÑ\81моÑ\82Ñ\80 Ñ\81воего Ñ\81пиÑ\81ка наблюдения",
+       "right-editmywatchlist": "редактирование своего списка наблюдения; обратите внимание, что некоторые действия будут добавлять страницы даже без такого права",
+       "right-viewmyprivateinfo": "просмотр собственных личных данных (например, адрес электронной почты, настоящее имя)",
+       "right-editmyprivateinfo": "правка собственных личных данных (например, адрес электронной почты, настоящее имя)",
+       "right-editmyoptions": "редактирование собственных предпочтений",
        "right-rollback": "быстрый откат правок последнего участника на определенной странице",
        "right-markbotedits": "отметка откатываемых правок как правок бота",
        "right-noratelimit": "нет ограничений по скорости",
        "right-userrights-interwiki": "изменение прав участников на других вики-сайтах",
        "right-siteadmin": "блокировка и разблокировка базы данных",
        "right-override-export-depth": "экспортирование страниц, включая связанные страницы с глубиной до 5",
-       "right-sendemail": "оÑ\82пÑ\80авлÑ\8fÑ\82Ñ\8c Ñ\8dлекÑ\82Ñ\80оннÑ\83Ñ\8e Ð¿Ð¾Ñ\87Ñ\82Ñ\83 другим участникам",
+       "right-sendemail": "оÑ\82пÑ\80авка Ñ\8dлекÑ\82Ñ\80онной Ð¿Ð¾Ñ\87Ñ\82Ñ\8b другим участникам",
        "right-passwordreset": "просмотр электронных писем с изменением пароля",
        "newuserlogpage": "Журнал регистрации участников",
        "newuserlogpagetext": "Список недавно зарегистрировавшихся участников",
        "recentchanges-label-unpatrolled": "Эта правка ещё никем не патрулировалась",
        "recentchanges-label-plusminus": "Размер страницы изменился на данное количество байт",
        "recentchanges-legend-heading": "'''Легенда:'''",
-       "recentchanges-legend-newpage": "(см. также [[Special:NewPages|список новых страниц]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (см. также [[Special:NewPages|список новых страниц]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Ниже перечислены изменения с <strong>$2</strong> (показано не более <strong>$1</strong>).",
        "rclistfrom": "Показать изменения с $3 $2.",
        "listgrouprights-members": "(список участников)",
        "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 (<code>$2</code>)</span>",
        "listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 (<code>$2</code>)</span>",
-       "listgrouprights-addgroup": "можеÑ\82 Ð´Ð¾Ð±Ð°Ð²Ð»Ñ\8fÑ\82Ñ\8c в {{PLURAL:$2|1=группу|группы}}: $1",
-       "listgrouprights-removegroup": "можеÑ\82 Ð¸Ñ\81клÑ\8eÑ\87аÑ\82Ñ\8c из {{PLURAL:$2|1=группы|групп}}: $1",
-       "listgrouprights-addgroup-all": "можеÑ\82 Ð´Ð¾Ð±Ð°Ð²Ð»Ñ\8fÑ\82Ñ\8c во все группы",
-       "listgrouprights-removegroup-all": "можеÑ\82 Ð¸Ñ\81клÑ\8eÑ\87аÑ\82Ñ\8c из всех групп",
-       "listgrouprights-addgroup-self": "можеÑ\82 Ð´Ð¾Ð±Ð°Ð²Ð»Ñ\8fÑ\82Ñ\8c Ñ\81воÑ\8e Ñ\83Ñ\87Ñ\91Ñ\82нÑ\83Ñ\8e Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c в {{PLURAL:$2|1=группу|группы}}: $1",
-       "listgrouprights-removegroup-self": "можеÑ\82 Ñ\83далÑ\8fÑ\82Ñ\8c Ñ\81воÑ\8e Ñ\83Ñ\87Ñ\91Ñ\82нÑ\83Ñ\8e Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c из {{PLURAL:$2|1=группы|групп}}: $1",
+       "listgrouprights-addgroup": "добавление в {{PLURAL:$2|1=группу|группы}}: $1",
+       "listgrouprights-removegroup": "иÑ\81клÑ\8eÑ\87ение из {{PLURAL:$2|1=группы|групп}}: $1",
+       "listgrouprights-addgroup-all": "добавление во все группы",
+       "listgrouprights-removegroup-all": "иÑ\81клÑ\8eÑ\87ение из всех групп",
+       "listgrouprights-addgroup-self": "добавление Ñ\81воей Ñ\83Ñ\87Ñ\91Ñ\82ной Ð·Ð°Ð¿Ð¸Ñ\81и в {{PLURAL:$2|1=группу|группы}}: $1",
+       "listgrouprights-removegroup-self": "иÑ\81клÑ\8eÑ\87ение Ñ\81воей Ñ\83Ñ\87Ñ\91Ñ\82ной Ð·Ð°Ð¿Ð¸Ñ\81и из {{PLURAL:$2|1=группы|групп}}: $1",
        "listgrouprights-addgroup-self-all": "Может добавлять все группы к своей учётной записи",
        "listgrouprights-removegroup-self-all": "может удалять все группы со своей учётной записи",
        "listgrouprights-namespaceprotection-header": "Ограничения пространства имён",
        "movepagetalktext": "Присоединённая страница обсуждения будет также автоматически переименована, '''кроме случаев, когда:'''\n\n*Не пустая страница обсуждения уже существует под таким же именем или\n*Вы не поставили галочку в поле ниже.\n\nВ этих случаях, вы будете вынуждены переместить или объединить страницы вручную, если это нужно.",
        "movearticle": "Переименовать страницу",
        "moveuserpage-warning": "'''Внимание.''' Вы собираетесь переименовать страницу участника. Пожалуйста, обратите внимание, что переименована будет только страница, участник '''не''' будет переименован.",
-       "movecategorypage-warning": "<strong>Ð\9fÑ\80едÑ\83пÑ\80еждение:</strong> Ð\92Ñ\8b Ñ\81обиÑ\80аеÑ\82еÑ\81Ñ\8c Ð¿ÐµÑ\80еименоваÑ\82Ñ\8c Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 ÐºÐ°Ñ\82егоÑ\80ии. Ð\9fожалÑ\83йÑ\81Ñ\82а, Ð¾Ð±Ñ\80аÑ\82иÑ\82е Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ, Ñ\87Ñ\82о Ð±Ñ\83деÑ\82 Ð¿ÐµÑ\80емеÑ\89ена только эта страница, а все страницы старой категории <em>не</em> будут перекатегоризованы в новую.",
+       "movecategorypage-warning": "<strong>Ð\9fÑ\80едÑ\83пÑ\80еждение:</strong> Ð\92Ñ\8b Ñ\81обиÑ\80аеÑ\82еÑ\81Ñ\8c Ð¿ÐµÑ\80еименоваÑ\82Ñ\8c Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 ÐºÐ°Ñ\82егоÑ\80ии. Ð\9fожалÑ\83йÑ\81Ñ\82а, Ð¾Ð±Ñ\80аÑ\82иÑ\82е Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ, Ñ\87Ñ\82о Ð±Ñ\83деÑ\82 Ð¿ÐµÑ\80еименована только эта страница, а все страницы старой категории <em>не</em> будут перекатегоризованы в новую.",
        "movenologintext": "Вы должны [[Special:UserLogin|представиться системе]],\nчтобы иметь возможность переименовать страницы.",
        "movenotallowed": "У вас нет разрешения переименовывать страницы.",
        "movenotallowedfile": "У вас нет разрешения переименовывать файлы.",
        "cant-move-user-page": "У вас нет разрешения переименовывать основные страницы участников.",
        "cant-move-to-user-page": "У вас нет прав переименовывать страницу в страницу участника (можно переименовать в подстраницу).",
        "cant-move-category-page": "У вас нет разрешения переименовывать страницы категорий.",
-       "cant-move-to-category-page": "У вас нет разрешения переименовывание страницы в страницу категории.",
+       "cant-move-to-category-page": "У вас нет разрешения переименовывать страницы в страницу категории.",
        "newtitle": "Новое название",
        "move-watch": "Включить эту страницу в список наблюдения",
        "movepagebtn": "Переименовать страницу",
        "tooltip-summary": "Введите краткое описание",
        "interlanguage-link-title": "$1 — $2",
        "common.css": "/* Размещённый здесь CSS будет применяться ко всем темам оформления */",
-       "cologneblue.css": "/* Размещённый здесь CSS будет применяться к теме оформления Cologne Blue */",
        "monobook.css": "/* Размещённый здесь CSS будет применяться к теме оформления Monobook */",
-       "modern.css": "/* Размещённый здесь CSS будет применяться к теме оформления Modern */",
        "vector.css": "/* Размещённый здесь CSS будет применяться к векторной теме оформления  */",
        "print.css": "/* Размещённый здесь CSS будет применяться к версии для печати */",
        "noscript.css": "/* Размещённый здесь CSS будет применяться для участников с отключенным JavaScript  */",
        "group-sysop.css": "/* Размещённый здесь CSS будет применяться только для администраторов */",
        "group-bureaucrat.css": "/* Размещённый здесь CSS будет применяться только для бюрократов */",
        "common.js": "/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */",
-       "cologneblue.js": "/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Cologne Blue */",
        "monobook.js": "/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления MonoBook */",
-       "modern.js": "/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Modern */",
        "vector.js": "/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Vector */",
        "group-autoconfirmed.js": "/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус автоподтверждённых (autoconfirmed) */",
        "group-bot.js": "/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус ботов (bots) */",
        "pageinfo-category-pages": "Количество страниц",
        "pageinfo-category-subcats": "Количество подкатегорий",
        "pageinfo-category-files": "Количество файлов",
-       "skinname-cologneblue": "Кёльнская тоска",
-       "skinname-modern": "Современное",
        "skinname-vector": "Векторное",
        "markaspatrolleddiff": "Отметить как проверенную",
        "markaspatrolledtext": "Отметить эту статью как проверенную",
        "watchlistedit-raw-done": "Ваш список наблюдения сохранён.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Была добавлена|Было добавлено|Были добавлены}} $1 {{PLURAL:$1|запись|записей|записи}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Была удалена|Было удалено|Были удалены}} $1 {{PLURAL:$1|запись|записей|записи}}:",
-       "watchlistedit-clear-title": "Ð\9eÑ\87иÑ\89еннÑ\8bй Ñ\81пиÑ\81ок наблюдения",
+       "watchlistedit-clear-title": "Ð\9eÑ\87иÑ\89ение Ñ\81пиÑ\81ка наблюдения",
        "watchlistedit-clear-legend": "Очистить список наблюдения",
        "watchlistedit-clear-explain": "Все записи будут удалены из вашего списка наблюдения",
        "watchlistedit-clear-titles": "Заголовки:",
        "htmlform-float-invalid": "Указанное вами значение не является числом.",
        "htmlform-int-toolow": "Указанное вами значение ниже минимального — $1",
        "htmlform-int-toohigh": "указанное вами значение выше максимального — $1",
-       "htmlform-required": "Это значение необходимо",
+       "htmlform-required": "это значение необходимо",
        "htmlform-submit": "Отправить",
        "htmlform-reset": "Отменить изменения",
        "htmlform-selectorother-other": "Иное",
index c70eccd..9599d23 100644 (file)
        "viewsourcelink": "स्रोतः दृश्यताम्",
        "editsectionhint": "सम्पादनविभागः: $1",
        "toc": "अन्तर्विषयाः",
-       "showtoc": "दरà¥\8dश्यताम्",
+       "showtoc": "दà¥\83श्यताम्",
        "hidetoc": "गोप्यताम्",
        "collapsible-collapse": "सङ्कुच्यताम्",
        "collapsible-expand": "विस्तीर्यताम्",
        "searchmenu-exists": "<strong>अस्मिन् विकि-जालस्थाने \"[[:$1]]\" नामकं पृष्ठं विद्यते ।</strong> {{PLURAL:$2|0=|अन्यपरिणामाः दृश्यन्ताम्}}",
        "searchmenu-new": "<strong> अस्मिन् विकि-जालस्थाने \"[[:$1]]\" इदं पृष्ठं सृज्यताम् ।\n</strong>\n{{PLURAL:$2|0=|तव अन्वेषणस्य परिणामोऽपि दृश्यताम् ।|तव अन्वेषणस्य परिणामाः अपि दृश्यन्ताम्}}",
        "searchprofile-articles": "विषयसहितानि पृष्ठानि",
-       "searchprofile-project": "साहाय्यं, प्रकल्पपृष्ठानि च",
        "searchprofile-images": "माध्यमसमुच्चयः",
        "searchprofile-everything": "सर्वम्",
        "searchprofile-advanced": "प्रगतम्",
        "searchprofile-articles-tooltip": "$1 स्थले अन्विष्यताम्",
-       "searchprofile-project-tooltip": "$1 स्थले अन्विष्यताम्",
        "searchprofile-images-tooltip": "सञ्चिकाः अन्विष्यन्ताम्",
        "searchprofile-everything-tooltip": "सर्वत्र अन्विष्यताम् (चर्चापृष्ठानि अपि)",
        "searchprofile-advanced-tooltip": "नामाकाशेषु अन्विष्यताम्",
        "search-interwiki-default": "$1 तः परिणामाः :",
        "search-interwiki-more": "(अधिकानि)",
        "search-relatedarticle": "सम्बद्धानि",
-       "searcheverything-enable": "सर्वस्मिन् नामाकाशे अन्विष्यताम्",
        "searchrelated": "सम्बद्धानि",
        "searchall": "सर्वाणि",
        "showingresults": "#'''$2''' क्रमाङ्कात् आरभ्य {{PLURAL:$1|'''$1''' परिणामः अधः प्रदर्शितः|'''$1''' परिणामाः अधः प्रदर्शिताः}}।",
        "allowemail": "अन्ययोजकैः प्रेषितानि ई-पत्राणि अनुमतिं ददातु",
        "prefs-searchoptions": "अन्विष्यताम्",
        "prefs-namespaces": "नामाकाशाः",
-       "defaultns": "अन्यथा एतेषु नामाकाशेषु अन्विषतु :",
        "default": "पूर्वनिर्दिष्टम्",
        "prefs-files": "सञ्चिका:",
        "prefs-custom-css": "स्वानुकुलसम्पादितं CSS",
        "group": "समूहः :",
        "group-user": "योजकाः",
        "group-autoconfirmed": "स्वदृढितयोजकाः",
-       "group-bot": "बà¥\8bट्स्",
+       "group-bot": "बà¥\89ट्स्",
        "group-sysop": "प्रबन्धकाः",
        "group-bureaucrat": "अधिकारिणः",
        "group-suppress": "अलक्ष्यम्",
        "group-all": "(सर्वे)",
-       "group-user-member": "{{GENDER:$1|योजक}}",
+       "group-user-member": "{{GENDER:$1|योजक}}",
        "group-autoconfirmed-member": "{{GENDER:$1|स्वदृढितयोजकः}}",
        "group-bot-member": "{{GENDER:$1|बॉट्}}",
        "group-sysop-member": "{{GENDER:$1|प्रबन्धकः}}",
        "grouppage-bot": "{{ns:project}}:बॉट्स्",
        "grouppage-sysop": "{{ns:project}}:प्रबन्धकाः",
        "grouppage-bureaucrat": "{{ns:project}}:अधिकारिणः",
-       "grouppage-suppress": "{{ns:project}}:अक्ष्यम्",
+       "grouppage-suppress": "{{ns:project}}:à¤\85लà¤\95à¥\8dषà¥\8dयमà¥\8d",
        "right-read": "पृष्ठानि पठ्यताम्",
        "right-edit": "पृष्ठानि सम्पाद्यताम्",
        "right-createpage": "पृष्ठानि निर्मियताम् ।(येषां सम्भाषणपृष्ठं न स्यात् ।)",
        "right-move-rootuserpages": "मूलयोजकपुष्ठानि चाल्यताम्",
        "right-move-categorypages": "वर्गपृष्ठानि चाल्यताम्",
        "right-movefile": "सञ्चिकाः चाल्यताम्",
-       "right-suppressredirect": "पृष्ठं यदा चालयति, तदा मूलपृष्ठात् प्रतिप्रषणं मास्तु ।",
+       "right-suppressredirect": "पà¥\83षà¥\8dठà¤\82 à¤¯à¤¦à¤¾ à¤\9aालयति, à¤¤à¤¦à¤¾ à¤®à¥\82लपà¥\83षà¥\8dठातà¥\8d à¤ªà¥\8dरतिपà¥\8dरà¥\87षणà¤\82 à¤®à¤¾à¤¸à¥\8dतà¥\81 à¥¤",
        "right-upload": "उपारोहण(upload)सञ्चिकाः",
        "right-reupload": "वर्तमानसञ्चिकाः नवीनसञ्चिकाभिः परिवर्त्यताम्",
-       "right-reupload-own": "अन्येन उपारोहिताः (upload) सञ्चिकाः नवीनसञ्चिकाभिः परिवर्त्यताम",
-       "right-reupload-shared": "विभà¤\95à¥\8dतमाधà¥\8dयमà¥\87न (shared media) à¤¸à¥\8dथानिय-उपारोहिताः सञ्चिकाः नवीनसञ्चाकाभिः परिवर्त्यताम्",
+       "right-reupload-own": "अन्येन उपारोहिताः (upload) सञ्चिकाः नवीनसञ्चिकाभिः परिवर्त्यताम",
+       "right-reupload-shared": "विभà¤\95à¥\8dतमाधà¥\8dयमà¥\87न (shared media) à¤¸à¥\8dथानà¥\80य-उपारोहिताः सञ्चिकाः नवीनसञ्चाकाभिः परिवर्त्यताम्",
        "right-upload_by_url": "सर्वासङ्केतात् (URL) उपारोहिताः सञ्चिकाः",
        "right-purge": "पृष्ठस्य उपस्मृतिं (cache) रिक्तीक्रियताम्",
-       "right-autoconfirmed": "अल्परक्षितपुटनि सम्पादयतु ।",
-       "right-bot": "एतां स्वसञ्चालितप्रणालित्वेन स्वीकरोतु ।",
-       "right-nominornewtalk": "चर्चापुटानां लघुसम्पादनं न भवतु । नूतनसन्देशान् चोदयतु ।",
-       "right-apihighlimits": "API प्रश्नेषु उन्नतसीमम् उपयोजयतु ।",
-       "right-writeapi": "श्वेतं API उपयोगः ।",
-       "right-delete": "पुटानि परिमार्जयतु ।",
-       "right-bigdelete": "दीर्घेतिहासयुक्तपुटानि परिमार्जयतु ।",
-       "right-deletelogentry": "निर्दिष्टनामाभिलेकप्रवेशं परिमार्जयतु अपरिमार्जयतु च ।",
-       "right-deleterevision": "निर्दिष्टावरतरणस्य पुटानि अपमर्जतु, अनपमर्जतु ।",
-       "right-deletedhistory": " तत्सम्बद्धपाठैः विनाअपमर्जितेतिहासप्रवेशस्य दर्शनम् ।",
-       "right-deletedtext": "अपमर्जितावतरणेषु परिवर्तनं, अपमर्जितपाठान् च अवलोकयतु ।",
-       "right-browsearchive": "अपमर्जितपुटानि अन्विषतु ।",
-       "right-undelete": "पुटम् अनपमर्जतु ।",
-       "right-suppressrevision": "प्रशासकेभ्यः सङ्गुप्तावतरणानि पुनरालोक्य पुनरानयतु ।",
-       "right-suppressionlog": "स्वायत्तनामाबिलेखं पश्यतु ।",
-       "right-block": "अन्ययोजकान् सम्पादनेन अवरोधतु ।",
-       "right-blockemail": "योजकस्य विद्युन्मानसन्देशप्रेषणम् अवरोधतु ।",
-       "right-hideuser": "योजकनाम अवरोधतु । तेन सर्वजनोपयोगात् गोपयतु ।",
-       "right-ipblock-exempt": "IP अवरोधं मार्गयतु, स्वयम् अवरोधः, निर्दिष्टावरोधः ।",
-       "right-proxyunbannable": "अन्येषां स्वयंचालितावरोधं परिहरतु ।",
-       "right-unblockself": "स्वयम् अनवरोधं करोतु ।",
-       "right-protect": "सुरक्षास्तरान् परिवर्तयतु । सुरक्षितपुटानि सम्पादयतु ।",
-       "right-editprotected": "सुरक्षितपुटानि सम्पादयतु ।",
-       "right-editinterface": "योजकमाध्यमं सम्पादयतु ।",
-       "right-editusercssjs": "अन्ययोजकान् सम्पादयतु । सि.एस्.एस्. जावलालिपिसञ्चिकाः च ।",
-       "right-editusercss": "अन्ययोजकान् सम्पादयतु सि.एस्.एस्. सञ्चिकाः ।",
-       "right-edituserjs": "अन्ययोजकान सम्पादयतु जावालिपिसञ्चिकाः ।",
-       "right-rollback": "अन्तिमयोजकस्य सम्पादनं शीघ्रं प्रचालयतु यः निर्दिष्टपुटं सम्पादितवान् ।",
-       "right-markbotedits": "प्रतिचालितसम्पादनानि स्वचालितसम्पदनं इव  अङ्कितानिकरोतु ।",
-       "right-noratelimit": "मूल्यनियत्या प्रभावितं नस्यात् ।",
-       "right-import": "अन्यविकितः पुटानाम् आयातं करोतु ।",
-       "right-importupload": "उत्तारितसञ्चिकातः पुटानि आयातानि करोतु ।",
-       "right-patrol": "अन्येषां सम्पादनम् आरक्षितमिव अङ्कयतु ।",
-       "right-autopatrol": "कस्यचित् स्वस्य सम्पादनानि आरक्षितमिव स्वयम् अङ्कयतु ।",
-       "right-patrolmarks": "आरक्षणाङ्कितानां सद्यः परिवर्तनानि अवलोकयतु ।",
-       "right-unwatchedpages": "अपरीक्षितपुटानाम् आवलीम् अवलोकयतु ।",
-       "right-mergehistory": "पुटेतिहासं विलीनं करोतु ।",
-       "right-userrights": "सर्वयोजकाधिकारं सम्पादयतु ।",
-       "right-userrights-interwiki": "योजकाधिकारान् अन्यविकिषु सम्पादयतु ।",
-       "right-siteadmin": "पाठमूलस्य निशेधनम् अनिशेधनं च ।",
+       "right-autoconfirmed": "सार्वसङ्केत(IP)आधारितेन मूल्यनियन्त्रणेन सह अस्य सम्बन्धः नास्ति",
+       "right-bot": "स्वसञ्चालितप्रणालित्वेन एतां स्वीक्रियताम्",
+       "right-nominornewtalk": "सम्भाषणपृष्ठस्य लघुपरिवर्तनानां विषये मा सूच्यताम्",
+       "right-apihighlimits": "API प्रश्नेषु उन्नतसीमाः उपयोज्यताम्",
+       "right-writeapi": "योग्यस्य API इत्यस्य उपयोगं करोतु",
+       "right-delete": "पृष्ठानि अपाक्रियताम्",
+       "right-bigdelete": "दीर्घेतिहासयुक्तपृष्ठानि अपाक्रियताम्",
+       "right-deletelogentry": "योग्यसंरक्षितावल्याः निवेशान् (entries) अपाक्रियताम्, अनपाक्रियतां च",
+       "right-deleterevision": "योग्यपृष्ठस्य संस्करणानि अपाक्रियताम्",
+       "right-deletedhistory": "अपाकृत-निवेशानाम् इतिहासं पश्यतु (तत्सम्बद्धपाठं विना)",
+       "right-deletedtext": "अपाकृतपाठाः, अपाकृतसंस्करणयोः परिवर्तनानि च पश्यतु",
+       "right-browsearchive": "अपाकृतपृष्ठानि अन्विष्यताम्",
+       "right-undelete": "इदं पृष्ठं न अपाक्रियताम्",
+       "right-suppressrevision": "प्रबन्धकैः निगूढितानि संस्करणानि पुनःपश्यतु, पुनस्थापयतु च",
+       "right-suppressionlog": "वैयक्तिकसंस्करणानि दृश्यताम्",
+       "right-block": "अस्य योजकस्य सम्पादनानि अवरुध्यताम्",
+       "right-blockemail": "ई-पत्रप्रेषयितुम् एनं योजकम् अवरुद्ध्यताम्",
+       "right-hideuser": "प्रयोक्तृनाम अवरुध्यताम्, तत् अन्ययोजकेभ्यः गोप्यतां च",
+       "right-ipblock-exempt": "स्वयम् अवरोधितं, समूहावरोधिम् अन्तर्जालसङ्केतम् (IP) अवगण्य अग्रे गच्छतु",
+       "right-proxyunbannable": "प्रतिनिधीनां (of prxies) स्वयम्-अवरोधान् अवगण्य अग्रे गच्छतु",
+       "right-unblockself": "स्वं अनवरुध्यताम्",
+       "right-protect": "सुरक्षास्तरं परिवर्त्यतां, क्रमबद्धानि सुरक्षितपृष्ठानि सम्पाद्यतां च",
+       "right-editprotected": "\"{{int:protect-level-sysop}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यताम्",
+       "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यताम्",
+       "right-editinterface": "योजकमाध्यमं सम्पाद्यताम्",
+       "right-editusercssjs": "अन्यस्य योजकस्य CSS, JavaScript सञ्चिकाः सम्पाद्यताम्",
+       "right-editusercss": "अन्यस्य योजकस्य CSS सञ्चिकाः सम्पाद्यताम्",
+       "right-edituserjs": "अन्यस्य योजकस्य JavaScript सञ्चिकाः सम्पाद्यताम्",
+       "right-editmyusercss": "स्वस्य CSS सञ्चिकाः सम्पाद्यताम्",
+       "right-editmyuserjs": "स्वस्य JavaScript सञ्चिकाः सम्पाद्यताम्",
+       "right-viewmywatchlist": "स्वस्य अवेक्षणावलिः दृष्यताम्",
+       "right-editmywatchlist": "स्वस्य अवेक्षणावलिः सम्पाद्यताम् । अत्र ध्यातव्यं यत्, अन्यचेष्टाभिः विना अधिकारेण अत्र अन्यपुष्ठानि योजयितुम् अवसरः अस्ति ।",
+       "right-viewmyprivateinfo": "स्वस्य व्यक्तिगतसूचनाः दृश्यताम् (उदा. ई-पत्रसन्देशः, वास्तविकनाम)",
+       "right-editmyprivateinfo": "स्वस्य व्यक्तिगतसूचनाः सम्पाद्यताम् (उदा. ई-पत्रसन्देशः, वास्तविकनाम)",
+       "right-editmyoptions": "स्वस्य इष्टतमानि सम्पाद्यताम्",
+       "right-rollback": "कस्मिंश्चित् पृष्ठे येन अन्तिमयोजकेन परिवर्तनं कृतं, तत् परिवर्तनं शीर्घ्रं पूर्ववत् करोतु",
+       "right-markbotedits": "पूर्ववत् यानि सम्पादनानि कृतानि, तानि बॉट्-सम्पादनत्वेन अङ्कितं करोतु",
+       "right-noratelimit": "वेगस्य सीमायाः कारणेन परिवर्तनं न भवेत्",
+       "right-import": "अन्यस्मात् विकि-जालस्थआनात् पृष्ठानि आयातं करोतु",
+       "right-importupload": "उपारोहिताभ्यः (upload) सञ्चिकाभ्यः पृष्ठानि आयातं करोतु",
+       "right-patrol": "अन्येषां सम्पादनानि निरिक्षितत्वेन अङ्क्यताम्",
+       "right-autopatrol": "स्वस्य सम्पादनानि निरिक्षितत्वेन अङ्क्यताम्",
+       "right-patrolmarks": "नूतनपरिवर्तनेषु निरिक्षित-अङ्कनं दृश्यताम्",
+       "right-unwatchedpages": "अदृष्टपृष्टानाम् आवलिः दृश्यताम्",
+       "right-mergehistory": "पृष्ठानाम् इतिहासम् एकीकरोतु",
+       "right-userrights": "सर्वयोजकाधिकारः सम्पाद्यताम्",
+       "right-userrights-interwiki": "अन्यविकि-जालस्थानानां योजकाधिकारः सम्पाद्यताम्",
+       "right-siteadmin": "दत्तांशनिधिं किलतु, अकिलितं च करोतु",
        "right-override-export-depth": "पञ्चस्तरपर्यन्तं संलग्नपुटानि निर्यातानि करोतु ।",
        "right-sendemail": "अन्ययोजकेभ्यः विद्युन्मानपत्राणि प्रेषयतु ।",
        "right-passwordreset": "निकुञ्चपुनारचितानां विद्युन्मानपत्राणाम् अवलोकनम् ।",
        "rcshowhideminor-hide": "गोप्यताम्",
        "rcshowhidebots": "$1 बोट् इत्येतानि",
        "rcshowhidebots-show": "दृश्यताम्",
+       "rcshowhidebots-hide": "गोप्यताम्",
        "rcshowhideliu": "$1 पञ्जीकृताः योजकाः",
+       "rcshowhideliu-show": "दृश्यताम्",
+       "rcshowhideliu-hide": "गोप्यताम्",
        "rcshowhideanons": "अनामकाः योजकाः $1",
        "rcshowhideanons-show": "दृश्यताम्",
+       "rcshowhideanons-hide": "गोप्यताम्",
        "rcshowhidepatr": "$1 ईक्षितसम्पादनानि",
+       "rcshowhidepatr-show": "दृश्यताम्",
+       "rcshowhidepatr-hide": "गोप्यताम्",
        "rcshowhidemine": "$1 मम सम्पादनानि",
+       "rcshowhidemine-show": "दृश्यताम्",
+       "rcshowhidemine-hide": "गोप्यताम्",
        "rclinks": "अन्तिमेषु $2 दिनेषु जातानि अन्तिमानि $1 परिवर्तनानि दृश्यन्ताम् <br />$3",
        "diff": "भेदः",
        "hist": "इतिहासः",
        "linksearch-line": " $1 इति $2 इत्यस्मात् परिसन्धितमस्ति",
        "linksearch-error": "वन्यपत्राणि आतिथेयस्य नाम्ना समं केवलं प्रभान्ति ।",
        "listusersfrom": "एतस्मात् आरभमाणान् योजकान् दर्शयतु ।",
-       "listusers-submit": "दरà¥\8dश्यताम्",
+       "listusers-submit": "दà¥\83श्यताम्",
        "listusers-noresult": "योजकः न प्राप्तः ।",
        "listusers-blocked": "अवरुद्धम् ।",
        "activeusers": "सक्रिययोजकानाम् आवली ।",
        "listgrouprights-removegroup-self": "स्वस्थाने {{PLURAL:$2|समूहम्}} अपनयतु  $1",
        "listgrouprights-addgroup-self-all": "स्वस्थाने सर्वसमूहान योजयतु ।",
        "listgrouprights-removegroup-self-all": "स्वस्थानात् सर्वसमूहान् अपनयतु ।",
+       "listgrouprights-namespaceprotection-namespace": "नामाकाशः",
        "mailnologin": "सम्प्रेषणस्य सङ्केतः नास्ति ।",
        "mailnologintext": "अस्य योजकेभ्यः विद्युन्मानपत्रप्रेषणार्थम् [[Special:UserLogin|नामाभिलेखनम्]] आवश्यकम् [[Special:Preferences|आद्यता]]यां प्रेषयितुं विद्युन्मानपत्रसङ्केतः आवश्यकः ।",
        "emailuser": "एतस्मै योजकाय ई-पत्रं प्रेष्यताम्",
        "pageinfo-category-pages": "पृष्ठानां सङ्ख्या",
        "pageinfo-category-subcats": "उपवर्गानां सङ्ख्या",
        "pageinfo-category-files": "सञ्चिकानां सङ्ख्या",
-       "skinname-cologneblue": "नील",
        "skinname-monobook": "पुस्तक",
        "markaspatrolleddiff": "आरक्षितमिति अङ्कयतु ।",
        "markaspatrolledtext": "एतपुटम् आरक्षितमिति अङ्कयतु ।",
index 7b89944..5094902 100644 (file)
        "tog-watchlisthidebots": "Кэтээн көрүү тиһигэр робот уларытыытын көрдөрүмэ",
        "tog-watchlisthideminor": "Кыра уларытыылары кэтээмэ",
        "tog-watchlisthideliu": "Бэлиэтэммит кыттааччылар уларытыыларын кэтиир тиһиккэ көрдөрүмэ",
-       "tog-watchlisthideanons": "Ааттарын эппэтэх кыттааччылар уларытыыларын кэтээһин испииһэгэр көрдөрүмэ",
+       "tog-watchlisthideanons": "Ааттарын эппэтэх кыттааччылар уларытыыларын кэтээһин тиһигэр көрдөрүмэ",
        "tog-watchlisthidepatrolled": "Ботурууллааччы көрбүт көннөрүүтүн кэтээһин испииһэгэр көрдөрүмэ",
        "tog-ccmeonemails": "Атын кыттааччыларга суруйбут суруктарбын бэйэбэр эмиэ ыыт",
        "tog-diffonly": "Икки барылы тэҥнииргэ сирэй иһин көрдөрүмэ",
        "tog-showhiddencats": "Кистэммит категориялары көрдөр",
        "tog-norollbackdiff": "Төннөрүү кэнниттэн барыллар уратыларын көрдөрүмэ",
-       "tog-useeditwarning": "ЭÑ\80Ñ\8dдÑ\8dÑ\8dкÑ\81ийÑ\8dлииÑ\80 Ñ\81иÑ\80Ñ\8dйÑ\82Ñ\8dн Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bÑ\8bлаÑ\80бÑ\8bн Ð±Ð¸Ð³Ñ\8dÑ\80гÑ\8dппÑ\8dккÑ\8d тахсаары гыннахпына сэрэтээр",
+       "tog-useeditwarning": "УлаÑ\80Ñ\8bÑ\82Ñ\8bÑ\8bлаÑ\80бÑ\8bн Ð±Ð¸Ð³Ñ\8dÑ\80гÑ\8dппÑ\8dккÑ\8d Ñ\81иÑ\80Ñ\8dйÑ\82Ñ\8dн тахсаары гыннахпына сэрэтээр",
        "tog-prefershttps": "Манна киирэргэ куруук көмүскэллээх холбонууну туттарга",
        "underline-always": "Куруук",
        "underline-never": "Аннынан тардыма",
        "category-file-count-limited": "Бу категорияҕа  {{PLURAL:$1|соҕотох билэ|$1 билэ}} баар.",
        "listingcontinuesabbrev": "(салгыыта)",
        "index-category": "Индекстэммит сирэйдэр",
-       "noindex-category": "Ð\98ндекÑ\81кÑ\82аммÑ\8bÑ\82 Ñ\81иÑ\80Ñ\8dйдÑ\8dÑ\80 Ñ\81Ñ\83оÑ\85Ñ\82ар",
+       "noindex-category": "Ð\9aÓ©Ñ\80дөммөÑ\82 Ñ\81иÑ\80Ñ\8dйдÑ\8dр",
        "broken-file-category": "Билэҕэ сигэлэрэ алҕастаах сирэйдэр",
        "about": "Бу туһунан",
        "article": "Ыстатыйа",
        "namespaces": "Аат даллара",
        "variants": "Барыллар",
        "navigation-heading": "Навигация",
-       "errorpagetitle": "СÑ\8bÑ\8bһа",
+       "errorpagetitle": "Ð\90лÒ\95аÑ\81",
        "returnto": "Төттөрү $1 сирэйгэ.",
        "tagline": "{{SITENAME}} диэн сиртэн ылыллыбыт",
        "help": "Көмө",
        "searchbutton": "Бул",
        "go": "Бар",
        "searcharticle": "Көрдөр",
-       "history": "Ð\98Ñ\81Ñ\82оÑ\80иÑ\8fта",
-       "history_short": "Ð\98Ñ\81Ñ\82оÑ\80иÑ\8f",
+       "history": "УÑ\81Ñ\82Ñ\83оÑ\80Ñ\83йата",
+       "history_short": "УÑ\81Ñ\82Ñ\83оÑ\80Ñ\83йа",
        "updatedmarker": "Кэнники киириим кэнниттэн уларыйыылар",
-       "printableversion": "Ð\91Ñ\8dÑ\87Ñ\8dÑ\8dÑ\82Ñ\82ииÑ\80гÑ\8d Ð°Ð½Ð°Ð°Ð½ ÐºÓ©Ñ\80Ò¯Ò¯",
-       "permalink": "Ð\9aÑ\83Ñ\80Ñ\83Ñ\83к Ð±Ð°Ð°Ñ\80 Ñ\8bйÑ\8bннÑ\8cÑ\8bк",
+       "printableversion": "Ð\91Ñ\8dÑ\87Ñ\8dÑ\8dÑ\82Ñ\82ииÑ\80гÑ\8d Ð°Ð½Ð°Ð»Ð»Ð°Ð°Ñ\85 Ð±Ð°Ñ\80Ñ\8bл",
+       "permalink": "Ð\9aÑ\83Ñ\80Ñ\83Ñ\83к Ð±Ð°Ð°Ñ\80 Ñ\81игÑ\8d",
        "print": "Бэчээттээ",
        "view": "Көрүү",
        "view-foreign": "Манна көрүү: $1",
        "create-this-page": "Бу сирэйи ай",
        "delete": "Соттор",
        "deletethispage": "Бу сирэйи соттор",
-       "undeletethispage": "Бу сирэйи сөргүт (төннөр)",
-       "undelete_short": "Төттөрү аҕал {{PLURAL:$1|биир уларытыыны|$1 уларытыылары}}",
+       "undeletethispage": "Бу сирэйи сөргүт",
+       "undelete_short": "{{PLURAL:$1|Биир уларытыыны|$1 уларытыыны}} сөргүт",
        "viewdeleted_short": "{{PLURAL:$1|Соҕотох сотторуллубут көннөрүүнү|$1 сотторуллубут көннөрүүнү}} көрүү",
        "protect": "Уларыппат гын",
        "protect_change": "уларытыы",
        "protectthispage": "Бу сирэйи уларыппат гын",
-       "unprotect": "УлаÑ\80Ñ\8bÑ\82аÑ\80Ñ\8b ÐºÓ©Ò¥Ò¯Ð»Ð»Ñ\8dÑ\8d",
+       "unprotect": "Ð\9aөмүÑ\81кÑ\8dлин Ñ\83лаÑ\80Ñ\8bÑ\82",
        "unprotectthispage": "Бу сирэй көмүскэлин уларыт",
        "newpage": "Саҥа сирэй",
        "talkpage": "Бу сирэйи ырыт",
        "talkpagelinktext": "Ырытыы",
        "specialpage": "Анал сирэй",
-       "personaltools": "ТÑ\83Ñ\81 Ð±Ñ\8dйÑ\8d Ñ\82Ñ\83Ñ\82Ñ\82аÑ\80 Ñ\82Ñ\83Ñ\80Ñ\83оÑ\80Ñ\83Ñ\83лаÑ\80а",
+       "personaltools": "ТÑ\83Ñ\81 Ð±Ñ\8dйÑ\8d Ñ\82Ñ\83Ñ\82Ñ\82аÑ\80 Ñ\82Ñ\8dÑ\80иллÑ\8dÑ\80Ñ\8d",
        "postcomment": "Саҥа түһүмэх",
        "articlepage": "Ыстатыйаны көр",
        "talk": "Ырытыы",
-       "views": "Көрүүлэр",
+       "views": "Көрүү",
        "toolbox": "Сэп-сэбиргэл",
        "userpage": "Кыттааччы туһунан сирэй",
        "projectpage": "Бырайыак сирэйэ",
        "logdelete-success": "'''Дьайыы көстүүтэ сөпкө уларыйда.'''",
        "logdelete-failure": "'''Сурунаал дөбөҥө быһаарыллыбата:'''\n$1",
        "revdel-restore": "Көстүүтүн уларытыы",
-       "pagehist": "Ð\98Ñ\81Ñ\82оÑ\80иÑ\8fтын сирэйэ",
-       "deletedhist": "Сотуллубут история",
+       "pagehist": "УÑ\81Ñ\82Ñ\83оÑ\80Ñ\83йатын сирэйэ",
+       "deletedhist": "Сотуллубут устуоруйата",
        "revdelete-hide-current": "Баччаҕа оҥоһуллубут $2, $1 сурук кистээһинигэр алҕас таҕыста: бу билиҥҥи барыл.\nОнон кистэнэр кыаҕа суох.",
        "revdelete-show-no-access": "Баччаҕа оҥоһуллубут суругу $2, $1 көстөр гынарга алҕас таҕыста: бу сурук \"хааччахтаах\" курдук бэлиэтэммит.\nОттон эн оннук суруктары көрөр кыаҕыҥ суох эбит.",
        "revdelete-modify-no-access": "Баччаҕа оҥоһуллубут суругу $2, $1 уларытарга алҕас таҕыста: бу сурук \"хааччахтаах\" курдук бэлиэтэммит.\nОттон эн оннук суруктары көрөр кыаҕыҥ суох эбит.",
        "searchmenu-exists": "'''Бу биикигэ бу сирэй маннык ааттаах \"[[$1]]\"'''",
        "searchmenu-new": "<strong>Бу биикигэ \"[[:$1]]\" сирэйи айарга!</strong>{{PLURAL:$2|0=|Эбии көрдөөһүн түмүгэр көстүбүт сирэйи көр.|Эбии көрдөөһүн түмүктэрин көр.}}",
        "searchprofile-articles": "Ыстатыйалар истэрэ",
-       "searchprofile-project": "Көмө уонна Бырайыак сирэйдэрэ",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Барыта",
        "searchprofile-advanced": "Дириҥэтиллибит",
        "searchprofile-articles-tooltip": "Манна $1 көрдөөһүн",
-       "searchprofile-project-tooltip": "Манна $1 көрдөөһүн",
        "searchprofile-images-tooltip": "Билэлэри көрдөөһүн",
        "searchprofile-everything-tooltip": "Сирэйдэргэ барытыгар (ырытыы гиэннэригэр эмиэ) көрдөөһүн",
        "searchprofile-advanced-tooltip": "Этиллибит аат далларыгар көрдөөһүн",
        "search-interwiki-default": "$1 түмүгэ:",
        "search-interwiki-more": "(өссө)",
        "search-relatedarticle": "Сигэнэр",
-       "searcheverything-enable": "Туох баар аат далларыгар көрдөөһүн",
        "searchrelated": "сибээстэммит",
        "searchall": "бары",
        "showingresults": "Манна {{PLURAL:$1|түмүк|түмүктэр}} {{PLURAL:$1|көрдөрүлүннэ|көрдөрүлүннүлэр}} <strong>$1</strong> , мантан саҕалаан №&nbsp;<strong>$2</strong>.",
        "allowemail": "Атын кыттааччылартан сурук тутары көҥүллүүбүн",
        "prefs-searchoptions": "Көрдөөһүн",
        "prefs-namespaces": "Аат дала",
-       "defaultns": "Атын ыйыллыбатаҕына бу аат далларыгар көрдүүргэ:",
        "default": "чопчу ыйыллыбатаҕына маннык",
        "prefs-files": "Билэлэр",
        "prefs-custom-css": "Бэйэ CSS",
        "right-move": "Сирэйдэр ааттарын уларытыы",
        "right-move-subpages": "Сирэйдэр ааттарын иһигэр киирэр сирэйдэри кытта уларытыы",
        "right-move-rootuserpages": "Кыттааччылар сирэйдэрин аатын уларытыы",
+       "right-move-categorypages": "Категория сирэйдэрин аатын уларытыы",
        "right-movefile": "билэлэр ааттарын уларытыы",
        "right-suppressredirect": "Аатын уларытарга урукку ааттан утаарыы сирэй кыайан оҥоһуллубат",
        "right-upload": "Билэлэри киллэр",
        "action-move": "бу сирэй аатын уларытыы",
        "action-move-subpages": "бу сирэй уонна кини аннынааҕы сирэйдэр ааттарын уларытыы",
        "action-move-rootuserpages": "кыттааччылар тус сирэйдэрин аатын уларытыы",
+       "action-move-categorypages": "категория сирэйдэрин аатын уларытыы",
        "action-movefile": "бу билэни аатын уларытарга",
        "action-upload": "бу билэни суруттар",
        "action-reupload": "баар билэни хат суруйуу",
        "recentchanges-label-unpatrolled": "Бу уларытыы өссө ботурууллана илик",
        "recentchanges-label-plusminus": "Сирэй кээмэйэ бачча баайтынан уларыйбыт",
        "recentchanges-legend-heading": "'''Легендата:'''",
-       "recentchanges-legend-newpage": "(өссө көр: [[Special:NewPages|Саҥа сирэйдэр тиһиктэрэ]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (өссө көр: [[Special:NewPages|Саҥа сирэйдэр тиһиктэрэ]])",
        "rcnotefrom": "Улартыылар бу кэмтэн ыла көрдөрүлүннүлэр: <strong>$2</strong> (мантан элбэх көрдөрүллүбэтэ: <strong>$1</strong>).",
        "rclistfrom": "Бу кэм $3 $2 кэнниттэн оҥоһуллубуттары көрдөр",
        "rcshowhideminor": "$1 кыра уларыйыылары",
        "rcshowhidemine-hide": "Кистээ",
        "rclinks": "$2 күҥҥэ бүтэһик $1 уларытыыны көрдөр;<br />$3.",
        "diff": "уратыта",
-       "hist": "история",
+       "hist": "устуоруйата",
        "hide": "Кистээ",
        "show": "Көрдөр",
        "minoreditletter": "к",
        "recentchangeslinked-summary": "Бу анал сирэйгэ сигэнэр сирэйдэр бүтэһик уларыйыылара көһүннүлэр. [[Special:Watchlist|Кэтэнэр сирэйдэр]] '''модьу бичигинэн''' бэлиэтэннилэр.",
        "recentchangeslinked-page": "Сирэй аата:",
        "recentchangeslinked-to": "Төттөрүтүн, ыйыллыбыт сирэйгэ сигэнэр сирэйдэри көрдөр",
-       "upload": "Билэни киллэр",
+       "upload": "Билэни угуу",
        "uploadbtn": "Билэни киллэрии",
        "reuploaddesc": "Тохтот уонна киллэрии форматыгар төнүн",
        "upload-tryagain": "Билэ туһунан сурук уларытыытын ыыт",
        "doubleredirects": "Хос көһөрөөһүн",
        "doubleredirectstext": "Бу сирэйгэ атын сиргэ утаарар хос утаарыылар тиһиктэрэ көстөр.\nХас устуруока аайы бастакы уонна иккис утаарыга сигэ баар, ону таһынан иккис утаарыыга баар сирэй аадырыһа (аата) баар, ол аата бастакы утаарыы дьиҥинэн ханна утаарыахтааҕа көстөр.\n<del>Сотуллубут</del> суруктар көннөрүллүбүттэр.",
        "double-redirect-fixed-move": "[[$1]] сирэй аата уларытыллыбыт.\nАптамаатынан саҥардыллыбыт уонна бу сирэйгэ утаарар [[$2]].",
-       "double-redirect-fixed-maintenance": "[[$1]] сирэйтэн [[$2]] сирэйгэ хос утаарыыны көннөрүү.",
+       "double-redirect-fixed-maintenance": "[[$1]] сирэйтэн [[$2]] сирэйгэ хос утаарыыны көннөрүү оҥоһулла сылдьар.",
        "double-redirect-fixer": "Утаарыылары көннөрөөччү",
        "brokenredirects": "Быстыбыт көһөрүүлэр",
        "brokenredirectstext": "Бу утаарыы сирэйдэрэ суох ыстатыйаларга сигэнэллэр (ыыталлар):",
        "watchnologin": "Бэйэҕин билиһиннэр",
        "addwatch": "Кэтэбил тиһигэр киллэр",
        "addedwatchtext": "«[[:$1]]» сирэй [[Special:Watchlist|кэтэбил тиһигэр]] киирдэ.\nСирэй уларытыылара уонна кинини кытта ситимнээх ырытыы сирэйин уларытыылара бүгүҥҥүттэн онно көстөр буолуохтара.",
+       "addedwatchtext-short": "\"$1\" диэн сирэй кэтэбилиҥ тиһигэр эбилиннэ.",
        "removewatch": "Кэтэбил тиһигиттэн сот",
        "removedwatchtext": "[[:$1]]\" сирэй [[Special:Watchlist|кэтэбилиҥ тиһигиттэн]] сотулунна.",
+       "removedwatchtext-short": "\"$1\" диэн сирэй кэтэбилиҥ тиһигиттэн сотулунна.",
        "watch": "Кэтээ",
        "watchthispage": "Бу сирэйи кэтээ",
        "unwatch": "Кэтээмэ",
        "movepagetalktext": "Холбонуллубут ырытыы (баар буоллаҕына) эмиэ аатын уларытыа. Ол сатаммат түбэлтэлэрэ:\n*Маннык ааттаах кураанах буолбатах ырытыы баар буоллаҕына\n*Манна бэлиэ туруорбатаххына.\n\nИти түгэннэргэ сирэйдэри бэйэҥ көһөрүөхтээххин эбэтэр холбуохтааххын.",
        "movearticle": "Бу аатын уларыт:",
        "moveuserpage-warning": "'''Болҕой:''' Эн кыттааччы тус сирэйин аатын уларытаары гынныҥ. Инньэ гыннаххына сирэй аата эрэ уларыйыа, кыттааччы бэйэтин аата уларыйыа '''суоҕа'''.",
+       "movecategorypage-warning": "<strong>Сэрэтии:</strong> Категория сирэйин көһөрөөрү гынныҥ. Бука диэн, өйдөө, бу эрэ сирэй көһүө, эргэ категория атын сирэйдэрэ саҥа категорияҕа <em>киириэхтэрэ суоҕа</em>.",
        "movenologintext": "Эн аакын [[Special:UserLogin|билиһиннэрдэххинэ]] эрэ сирэй аатын уларытар кыахтаныаҥ.",
        "movenotallowed": "Cирэйдэр ааттарын уларытар кыаҕыҥ суох.",
        "movenotallowedfile": "Билэлэр ааттарын уларытар кыаҕыҥ суох.",
        "cant-move-user-page": "Эн кыттааччылар сүрүн сирэйдэрин аатын уларытар кыаҕыҥ суох.",
        "cant-move-to-user-page": "Эн кыттааччы аатын далыгар сирэйдэри уларытар кыаҕыҥ суох (анныкы сирэйдэриттэн ураты).",
+       "cant-move-category-page": "Категория сирэйин аатын уларытар кыаҕыҥ суох эбит.",
+       "cant-move-to-category-page": "Сирэй аатын уларытан категория сирэйэ гынар кыаҕыҥ суох эбит.",
        "newtitle": "Саҥа аата:",
        "move-watch": "Кэтээн көрөргө",
        "movepagebtn": "Аатын уларыт",
        "pageinfo-category-pages": "Сирэй ахсаана",
        "pageinfo-category-subcats": "Субкатегория ахсаана",
        "pageinfo-category-files": "Билэ ахсаана",
-       "skinname-modern": "Билиҥҥи",
        "markaspatrolleddiff": "Бэрэбиэркэлэммит курдук бэлиэтээ",
        "markaspatrolledtext": "Бу ыстатыйаны бэрэбиэркэлэммит курдук бэлиэтээ",
        "markedaspatrolled": "Бэрэбиэркэлэммит курдук бэлиэтэннэ",
        "newimages-summary": "Бу анал сирэй киллэриллибит билэлэр испииһэктэрин көрдөрөр.",
        "newimages-legend": "Фильтр",
        "newimages-label": "Билэ аата (эбэтэр сорҕото):",
+       "newimages-showbots": "Руобаттар хачайдааһыннарын көрдөр",
        "noimages": "Ойуу суох.",
        "ilsubmit": "Көрдөт",
        "bydate": "айыллыбыт кэминэн",
        "watchlistedit-raw-done": "Саҥа испииһэк бигэргэтилиннэ.",
        "watchlistedit-raw-added": "Тиһиккэ {{PLURAL:$1|1 пуун эбилиннэ|$1 пуун эбии киирдэ}}:",
        "watchlistedit-raw-removed": "Испииһэктэн {{PLURAL:$1|1 пуун|$1 пуун}} көҕүрээтэ:",
+       "watchlistedit-clear-title": "Кэтэбил тиһигэ ыраастанна",
+       "watchlistedit-clear-legend": "Кэтэбил тиһигин сот",
+       "watchlistedit-clear-explain": "Кэтэбилиҥ тиһигиттэн бары суруктар сотуллуохтара",
+       "watchlistedit-clear-titles": "Баһа:",
+       "watchlistedit-clear-submit": "Кэтэбил тиһигин сот (сөргүтүллүбэт!)",
+       "watchlistedit-clear-done": "Кэтэбилиҥ тиһигэ ыраастанна.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|соҕотох сурук|$1 сурук}} сотулунна:",
+       "watchlistedit-too-many": "Манна кыайан көстүбэт элбэх сирэй.",
+       "watchlisttools-clear": "Кэтэбил тиһигин сот",
        "watchlisttools-view": "Атыҥҥа сабыдыаллаах уларытыылар",
        "watchlisttools-edit": "Кэтэбил испииһэгин көрүү/уларытыы",
        "watchlisttools-raw": "\"Сиикэй\" испииһэги уларытыы",
index 485e6a2..99d07b5 100644 (file)
@@ -11,7 +11,8 @@
                        "Salvator",
                        "Samar88",
                        "Srabony90",
-                       "아라"
+                       "아라",
+                       "Shirayuki"
                ]
        },
        "tog-underline": "Joṛaoko latarre dag udugoḱma:",
        "accmailtitle": "Uku nambar do kulena.",
        "accmailtext": "[[User talk:$1 $1]] lạgit́te aćte benaoen uku nambar do $2 kul hoena.\nBhitri bolo kateḱ noa nãwã ekaunṭ lạgit uku nambar \"[[Special:ChangePassword Change password]]\" sakam khonem bodol daṛyakya.",
        "newarticle": "(Nãwa)",
-       "newarticletext": "Am do oka mitṭen joṛaoem pańja akada, onaṭak do bạnuḱa.\nOna sakam tear lạgit́te, latar reaḱ baksore ol ehoṕmẽ (arhõ jạsti baḍae lạgit́te [[{{mediaWiki:Helppage}}help page] pańjaemẽ).\nAm do judi nonḍe vulkatem heć akan khan, tobe amaḱ sendrakore '''back''' baṭon linmẽ.",
+       "newarticletext": "Am do oka mitṭen joṛaoem pańja akada, onaṭak do bạnuḱa.\nOna sakam tear lạgit́te, latar reaḱ baksore ol ehoṕmẽ (arhõ jạsti baḍae lạgit́te [$1 help page] pańjaemẽ).\nAm do judi nonḍe vulkatem heć akan khan, tobe amaḱ sendrakore '''back''' baṭon linmẽ.",
        "noarticletext": "Nitoḱ noa sakamre do ol bạnuḱa.\n\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.",
        "noarticletext-nopermission": "Noa sakamre do nitoḱ o̠l banuḱa.\n\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\nor <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>.",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" ńutuman jahãe beoharićaḱ ekaunṭ do baṅ resṭri hoeakana. Daya kate biḍạo katet́ ńelmẽ noa sakam do benoa/sompadonem menet́ kana se baṅ.",
        "prefs-files": "Rẽtko",
        "youremail": "E-mail:",
        "username": "Beoharićaḱ ńutum:",
-       "uid": "Beoharićaḱ cinhạo nombor",
        "yourrealname": "Sạri ńutum",
        "yourlanguage": "Pạrsi:",
        "gender-male": "Baba hoṛ",
        "booksources-go": "Calaḱme",
        "log": "Cạbiko",
        "allpages": "joto sakam",
-       "alphaindexline": "$1 hạbić $2",
        "allarticles": "Sanam sakam",
        "allpagessubmit": "Calaḱme",
        "categories": "rokom sokom",
index fd8d734..14ae576 100644 (file)
@@ -6,7 +6,8 @@
                        "Marzedu",
                        "Node ue",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Via maxima"
                ]
        },
        "tog-underline": "Sutalìnea is cullegamentos",
        "tog-hidepatrolled": "Cua is acontzos verificados in is ùrtimas mudàntzias",
        "tog-newpageshidepatrolled": "Cua is pàginas verificadas dae sa lista de is pàginas noas",
        "tog-extendwatchlist": "Ammània sa watchlist pro ammustrare totu is mudàntzias, non feti is prus reghentes",
-       "tog-usenewrc": "Imprea is ùrtimas mudàntzias megioradas (esigit JavaScript)",
+       "tog-usenewrc": "Poni a pari is mudàntzias de dònnia pàgina in is ùrtimas mudàntzias e in watchlist",
        "tog-numberheadings": "Auto-numeratzione de is tìtulos",
-       "tog-showtoolbar": "Ammustra s'amusta de is ainas pro is acontzos (esigit JavaScript)",
-       "tog-editondblclick": "Acontza pàginas cun dòpiu click (esigit JavaScript)",
-       "tog-editsectiononrightclick": "Abilita s'acontzu de is setziones cun dòpiu click in is tìtulos de is setziones (esigit JavaScript)",
-       "tog-watchcreations": "Aciungi is pàginas chi apo creadu a sa watchlist mea",
-       "tog-watchdefault": "Aciungi is pàginas chi apo acontzadu a sa watchlist mea",
-       "tog-watchmoves": "Aciungi is pàginas chi apo mòvidu a sa watchlist mea",
-       "tog-watchdeletion": "Aciungi is pàginas chi apo fuliadu a sa watchlist mea",
+       "tog-showtoolbar": "Amosta s'amusta de is ainas pro is acontzos",
+       "tog-editondblclick": "Acontza pàginas cun dòpiu click",
+       "tog-editsectiononrightclick": "Abilita s'acontzu de is setziones cun click a dereta in is tìtulos de is setziones",
+       "tog-watchcreations": "Aciungi is pàginas chi apo creadu e is files chi apo carrigau a sa watchlist mea",
+       "tog-watchdefault": "Aciungi pàginas e files chi apo acontzadu a sa watchlist mea",
+       "tog-watchmoves": "Aciungi pàginas e files chi apo mòvidu a sa watchlist mea",
+       "tog-watchdeletion": "Aciungi pàginas e files chi apo fuliadu a sa watchlist mea",
        "tog-minordefault": "Signa totu is acontzos comente minores pro difetu",
        "tog-previewontop": "Ammustra s'antiprima a subra sa casella de acontzu e no a suta",
        "tog-previewonfirst": "Ammustra s'antiprima pro su primu acontzu",
-       "tog-enotifwatchlistpages": "Spedi·mi una missada eletrònica cando una pàgina de sa watchlist mea est acontzada",
+       "tog-enotifwatchlistpages": "Spedi·mi una missada eletrònica cando una pàgina o file de sa watchlist mea est acontzada",
        "tog-enotifusertalkpages": "Spedi·mi una missada eletrònica cando sa pàgina de is cuntierras mias est acontzada",
-       "tog-enotifminoredits": "Spedi·mi una missada eletrònica fintzas pro is acontzos minores de is pàginas",
+       "tog-enotifminoredits": "Spedi·mi una missada eletrònica fintzas pro is acontzos minores de is pàginas e files",
        "tog-enotifrevealaddr": "Faghe schire s'indiritzu e-mail miu in is notìficas de is e-mails",
        "tog-shownumberswatching": "Ammustra su nùmeru de is usuàrios ca sunt ponende ogru a sa pàgina",
-       "tog-oldsig": "Antiprima de sa firma atuale:",
+       "tog-oldsig": "Firma atuale:",
        "tog-fancysig": "Trata sa firma comente unu testu wiki (chentza cullegamentos automaticos)",
-       "tog-uselivepreview": "Imprea sa funtzione \"live preview\" (esigit JavaScript) (sperimentale)",
+       "tog-uselivepreview": "Imprea sa funtzione \"live preview\" (sperimentale)",
+       "tog-forceeditsummary": "Avertimì si su campu ogetu est buidu",
        "tog-watchlisthideown": "Cua is acontzos meos dae sa watclist",
        "tog-watchlisthidebots": "Cua is acontzos de is bots dae sa watchlist",
        "tog-watchlisthideminor": "Cua is acontzos minores dae sa watchlist",
@@ -42,6 +44,8 @@
        "tog-watchlisthidepatrolled": "Cua acontzos verificados dae sa watchlist",
        "tog-ccmeonemails": "Spedi·mi is còpias de is e-mails ca spedu a is àteros usuàrios",
        "tog-showhiddencats": "Ammustra is categorias cuadas",
+       "tog-useeditwarning": "Amonestamì si lassu una pagina cun mudantzias chena de sarvai.",
+       "tog-prefershttps": "Impera sempiri una linia segura candu fatzu s'intrada.",
        "underline-always": "Semper",
        "underline-never": "Mai",
        "underline-default": "Definiduras dae su browser tuo",
        "oct": "Stg",
        "nov": "Std",
        "dec": "Nad",
+       "january-date": "Gennàrgiu $1",
+       "february-date": "Friàrgiu $1",
+       "march-date": "Martzu $1",
+       "april-date": "Abrili $1",
+       "may-date": "Maju $1",
+       "june-date": "Làmpadas $1",
+       "july-date": "Trìulas $1",
+       "august-date": "Austu $1",
+       "september-date": "Cabudanni $1",
+       "october-date": "Santuaine $1",
+       "november-date": "Onniassantu $1",
+       "december-date": "Mesi de Nadali $1",
        "pagecategories": "{{PLURAL:$1|Categoria|Categorias}}",
        "category_header": "Pàginas in sa categoria \"$1\"",
        "subcategories": "Subcategorias",
        "newwindow": "(aberit in una bentana noa)",
        "cancel": "Burra",
        "moredotdotdot": "Àteru…",
-       "mypage": "Sa pàgina mea",
+       "morenotlisted": "Sa lista no est cumpreta",
+       "mypage": "Pàgina",
        "mytalk": "Cuntierras meas",
        "anontalk": "Cuntierras pro custu IP",
        "navigation": "Navigadura",
        "vector-view-view": "Leghe",
        "vector-view-viewsource": "Càstia mitza",
        "actions": "Atziones",
+       "vector-more-actions": "Prus",
        "namespaces": "Nùmene-logos",
        "variants": "Variantes",
+       "navigation-heading": "Menu po nàvigu",
        "errorpagetitle": "Faddina",
        "returnto": "Torra a $1.",
        "tagline": "Dae {{SITENAME}}",
        "printableversion": "Versione de imprenta",
        "permalink": "Acàpiu fitianu",
        "print": "Imprenta",
+       "view": "Amosta",
+       "view-foreign": "Amosta in $1",
        "edit": "Acontza",
+       "edit-local": "Acontza sa descridura locali",
        "create": "Crea",
+       "create-local": "Aciungi descridura locali",
        "editthispage": "Acontza custa pàgina",
        "create-this-page": "Crea custa pàgina",
        "delete": "Fùlia",
        "deletethispage": "Fùlia custa pàgina",
+       "undeletethispage": "Torrandi custa pàgina",
        "undelete_short": "Restaurare {{PLURAL:$1|un acontzu|$1 acontzos}}",
+       "viewdeleted_short": "Amosta {{PLURAL:$1|unu acontzu burradu|$1 acontzos burrados}}",
        "protect": "Ampara",
        "protect_change": "mudàntzia",
        "protectthispage": "Ampara custa pàgina",
-       "unprotect": "Disampara",
-       "unprotectthispage": "Disampara custa pàgina",
+       "unprotect": "Muda amparu",
+       "unprotectthispage": "Muda amparu de custa pàgina",
        "newpage": "Pàgina noa",
        "talkpage": "Pàgina de cuntierra",
        "talkpagelinktext": "Cuntierra",
        "jumpto": "Bae a:",
        "jumptonavigation": "navigadura",
        "jumptosearch": "chirca",
+       "view-pool-error": "Teni passièntzia, is servers funt càrrigus de traballu.\nIn medas megant de biri custa pàgina.\nPo praxeri, torra a provai tra unu pagu.\n\n$1",
+       "generic-pool-error": "Teni passièntzia, is servers funt càrrigus de traballu.\nIn medas megant de biri custa risorsa.\nPo praxeri, torra a provai tra unu pagu.",
        "pool-errorunknown": "Faddina disconnota",
        "aboutsite": "A propòsitu de {{SITENAME}}",
        "aboutpage": "Project:Informatziones",
        "toc": "Cuntènnidu",
        "showtoc": "ammustra",
        "hidetoc": "cua",
+       "collapsible-collapse": "Serra e stringi",
+       "collapsible-expand": "Aberi",
        "thisisdeleted": "Càstiare o recuperare $1?",
        "viewdeleted": "Bisi $1?",
        "restorelink": "{{PLURAL:$1|unu acontzu burradu|$1 acontzos burrados}}",
        "actionthrottled": "Atzione rimandada",
        "namespaceprotected": "Non tenes su permissu de acontzare is pàginas in su nùmene-lugu '''$1'''.",
        "ns-specialprotected": "Is pàginas ispetziales non podent èssere acontzadas.",
+       "exception-nologin": "Non ses intrau",
        "virus-scanfailed": "scansione faddida (còdixe $1)",
        "virus-unknownscanner": "antivirus disconnotu:",
        "logouttext": "'''As acabadu sa sessione.'''\n\nImmoe podes sighire a impreare {{SITENAME}} in forma anònima, o ti podes <span class='plainlinks'>[$1 identificare torra]</span> comente su de prima o comente usuàriu diferente.\nTene contu ca is pàginas ki sunt giai abertas in àteras bentanas podent sighire a pàrrer comente cando fias identificadu, fintzas a cando non ddas renfriscas.",
        "accountcreatedtext": "S'account usuàriu pro $1 est stadu creadu.",
        "createaccount-title": "Creatzione de unu account pro {{SITENAME}}",
        "loginlanguagelabel": "Limba: $1",
+       "createacct-another-realname-tip": "Su nomini beru pois fai de mancu de ddu ponni.\nSi sceberas de du ponni, at a essi imperau po arreconnosci a tui su traballu tuu.",
+       "pt-login": "Intra",
+       "pt-login-button": "Intra",
+       "pt-createaccount": "Arregistradì",
+       "pt-userlogout": "Bessida",
        "changepassword": "Càmbia password",
        "resetpass_header": "Càmbia sa password de su account",
        "oldpassword": "Password betza:",
        "shown-title": "Ammustra $1 {{PLURAL:$1|resurtadu|resurtados}} pro pàgina",
        "viewprevnext": "Càstia ($1 {{int:pipe-separator}} $2) ($3).",
        "searchprofile-articles": "Pàginas de càbidu",
-       "searchprofile-project": "Pàginas de agiudu e de su progetu",
        "searchprofile-images": "Multimèdia",
        "searchprofile-everything": "Totu",
        "searchprofile-advanced": "Avantzada",
        "searchprofile-articles-tooltip": "Chirca in $1",
-       "searchprofile-project-tooltip": "Chirca in $1",
        "searchprofile-images-tooltip": "Chirca files",
        "search-result-size": "$1 ({{PLURAL:$2|1 faeddu|$2 faeddos}})",
        "search-result-score": "Rilevàntzia: $1%",
        "search-interwiki-caption": "Progetos frades",
        "search-interwiki-default": "$1 resurtados:",
        "search-interwiki-more": "(àteru)",
-       "searcheverything-enable": "Chirca in totu is nùmene-logos:",
        "searchall": "totu",
        "showingresults": "Inoghe sighende {{PLURAL:$1|benit ammustradu '''1''' resurtadu|benint ammustrados '''$1''' resurtados}} incumentzende dae su nùmeru '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultadu '''$1''' de '''$3'''|Resultadus '''$1 - $2''' de '''$3'''}} pro '''$4'''",
        "prefs-files": "Files",
        "youremail": "E-mail:",
        "username": "Nùmene usuàriu:",
-       "uid": "ID usuàriu:",
        "prefs-registration": "Ora de registratzione:",
        "yourrealname": "Nùmene beru:",
        "yourlanguage": "Limba:",
        "rcnotefrom": "Sas chi sighint sunt sas mudàntzias dae '''$2''' (fintzas a '''$1''').",
        "rclistfrom": "Ammustra mudàntzias dae $3 $2",
        "rcshowhideminor": "$1 acontzos minores",
+       "rcshowhideminor-show": "Amosta",
+       "rcshowhideminor-hide": "Cua",
        "rcshowhidebots": "$1 bots",
+       "rcshowhidebots-show": "Amosta",
+       "rcshowhidebots-hide": "Cua",
        "rcshowhideliu": "$1 usuàrios intraus",
+       "rcshowhideliu-show": "Amosta",
+       "rcshowhideliu-hide": "Cua",
        "rcshowhideanons": "$1 usuàrios anònimos",
+       "rcshowhideanons-show": "Amosta",
+       "rcshowhideanons-hide": "Cua",
+       "rcshowhidepatr-show": "Amosta",
+       "rcshowhidepatr-hide": "Cua",
        "rcshowhidemine": "$1 acontzos meos",
+       "rcshowhidemine-show": "Amosta",
+       "rcshowhidemine-hide": "Cua",
        "rclinks": "Ammustra is ùrtimas $1 mudàntzias fatas in is ùrtimas $2 dies<br />$3",
        "diff": "dif",
        "hist": "ist",
        "speciallogtitlelabel": "Tìtulu:",
        "log": "Registros",
        "allpages": "Totu is pàginas",
-       "alphaindexline": "dae $1 a $2",
        "prevpage": "Pàgina in antis ($1)",
        "allpagesfrom": "Ammustra pàginas a partire dae:",
        "allpagesto": "Ammustra pàginas fintzas a:",
        "blockip": "Blocca usuàriu",
        "blockip-legend": "Blocca usuàriu",
        "blockiptext": "Usa il modulo sottostante per bloccare l'accesso con diritto di scrittura da uno specifico indirizzo IP. Questo blocco deve essere operato SOLO per prevenire atti di vandalismo, ed in stretta osservanza dei principi tutti della [[{{MediaWiki:Policy-url}}|policy di {{SITENAME}}]]. Il blocco non può in nessun caso essere applicato per motivi ideologici.\nScrivi un motivo specifico per il quale questo indirizzo IP dovrebbe a tuo avviso essere bloccato (per esempio, cita i titoli di pagine eventualmente già oggetto di vandalismo editoriale).",
-       "ipadressorusername": "Indiritzu IP o nùmene usuàriu:",
+       "ipaddressorusername": "Indiritzu IP o nùmene usuàriu:",
        "ipbexpiry": "Scadèntzia:",
        "ipbreason": "Motivu:",
        "ipbsubmit": "Blocca custu usuàriu",
        "allmessages-filter-all": "Totu",
        "allmessages-language": "Limba:",
        "allmessages-filter-submit": "Bae",
+       "allmessages-filter-translate": "Tradui",
        "thumbnail-more": "Amannia",
        "import-interwiki-namespace": "Nùmene-logu de destinatzione:",
        "import-upload-filename": "Nùmene file:",
index 3cbd84d..2499c49 100644 (file)
        "vector-view-view": "Leggi",
        "vector-view-viewsource": "Talìa la fonti",
        "actions": "Azzioni",
+       "vector-more-actions": "Àutri cosi",
        "namespaces": "Namespace",
        "variants": "Varianti",
        "navigation-heading": "Menù di navigazzioni",
        "permalink": "Liami pirmanenti",
        "print": "Stampa",
        "view": "Talìa",
+       "view-foreign": "Talìa supra $1",
        "edit": "cancia",
+       "edit-local": "Cancia la discrizzioni lucali",
        "create": "Crea",
+       "create-local": "Junci na discrizzioni lucali",
        "editthispage": "Cancia sta pàggina",
        "create-this-page": "Crea sta pàggina",
        "delete": "elìmina",
        "jumptonavigation": "navigazzioni",
        "jumptosearch": "Va' cerca",
        "view-pool-error": "Ci spiaci, li server ni stu mumentu sunu troppu carichi. Troppi utenti stannu circannu di taliari sta pàggina. Aspetta n'anticchia prima di pruvari a ritaliari sta pàggina.\n\n$1",
+       "generic-pool-error": "Ni spiaci, li server ni stu mumentu sunu troppu carrichi. Troppi utenti stannu circannu di taliari sta pàggina. Aspetta n'anticchia prima di pruvari a ritaliari sta pàggina.",
        "pool-timeout": "Tempu scadutu aspittannu lu sbloccu",
        "pool-queuefull": "La cuda dû pool è china",
        "pool-errorunknown": "Erruri scanusciutu",
+       "pool-servererror": "Lu sirivzzu di cuntaturi dâ riserva nun è dispunìbbili ($1)",
        "aboutsite": "Àutri nfurmazzioni supra {{SITENAME}}",
        "aboutpage": "Project:Àutri nformazzioni",
-       "copyright": "Lu cuntinutu è utilizzàbbili secunnu la $1.",
+       "copyright": "Lu cuntinutu è utilizzàbbili secunnu la $1, sarvu minzioni cuntraria.",
        "copyrightpage": "{{ns:project}}:Copyright",
        "currentevents": "Nutizzî",
        "currentevents-url": "Project:Nutizzî",
        "youhavenewmessages": "Ricivìsti $1 ($2).",
        "youhavenewmessagesfromusers": "Hai $1 di {{PLURAL:$3|n'àutru utenti|$3 utenti}} ($2).",
        "youhavenewmessagesmanyusers": "Hai $1 di na pocu di utenti ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|Nu missaggiu novu|missaggi novi}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|ùrtimu canciamenti|ùrtimi canciamenti}}",
+       "newmessageslinkplural": "{{PLURAL:$1|nu missaggiu novu|999=missaggi novi}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|ùrtimu canciamenti|999=ùrtimi canciamenti}}",
        "youhavenewmessagesmulti": "Hai missaggi novi supra $1",
        "editsection": "cancia",
        "editold": "cancia",
        "nospecialpagetext": "<strong>Hai cercatu na pàggina spiciali nun vàlida.</strong>\n\nL'alencu dî pàggini spiciali vàlidi s'attrova 'n [[Special:SpecialPages|Alencu dî pàggini spiciali]].",
        "error": "Erruri",
        "databaseerror": "Erruri dû database",
+       "databaseerror-text": "Si virificau n'erruri nti na dimanna dû databbasi.\nPutissi siri ca c'è nu bacu ntô prugramma.",
+       "databaseerror-textcl": "Si virificau n'erruri ntâ dimanna dû databasi",
+       "databaseerror-query": "Dumannaä $1",
+       "databaseerror-function": "Funzioni: $1",
+       "databaseerror-error": "Erruri: $1",
        "laggedslavemode": "Accura: La pàggina putissi nun ripurtari l'aggiurnamenti cchiù ricenti.",
        "readonly": "Database bluccatu",
        "enterlockreason": "Ìnnica lu mutivu dû bloccu, spicificannu lu mumentu 'n cui è prisumìbbili ca veni rimossu.",
        "userlogin-noaccount": "Nun ci l'hai nu cuntu?",
        "userlogin-joinproject": "Scrìviti a {{SITENAME}}",
        "nologin": "Nun nn'aviti nu cuntu pi ccà? '''$1'''.",
-       "nologinlink": "Criati nu cuntu sùbbitu",
+       "nologinlink": "Arriggistràtivi",
        "createaccount": "Criati un cuntu novu",
        "gotaccount": "Hai già nu cuntu? '''$1'''.",
        "gotaccountlink": "Trasi",
        "userlogin-resetlink": "T'ascurdasti li dittagli pâ trasuta?",
        "userlogin-resetpassword-link": "Reinizzializza la tò password",
+       "userlogin-helplink2": "Aiutu pâ trasuta",
+       "userlogin-loggedin": "Vossia già trasìu comu {{GENDER:$1|$1}}.\nUsassi lu mòdulu ccassutta pi tràsiri comu autru utenti.",
+       "userlogin-createanother": "Crèa n'autru cuntu",
        "createacct-emailrequired": "Nnirizzu e-mail",
        "createacct-emailoptional": "Nnirizzu e-mail (facurtativu)",
        "createacct-email-ph": "Nzirisci lu tò nnirizzu e-mail",
        "createacct-captcha": "Cuntrollu di sicurezza",
        "createacct-imgcaptcha-ph": "Nzirìsci lu testu ca vidi ccassupra",
        "createacct-submit": "Crèa nu cuntu",
-       "createacct-benefit-heading": "{{SITENAME}} è fatta di pirsunu comu a tìa.",
+       "createacct-another-submit": "Crèa n'autru cuntu",
+       "createacct-benefit-heading": "{{SITENAME}} è fatta di pirsuni comu a tìa.",
        "createacct-benefit-body1": "{{PLURAL:$1|cuntribbutu|cuntribbuti}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pàggina|pàggini}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|cuntribbutuori ricenti|cuntribbutura ricenti}}",
        "badretype": "La ''password'' chi mittisti nun è bona.",
        "userexists": "Lu nomu utenti nzeritu è già usatu. Ti prijamu pirciò di vuliri scègghiri nu nomu utenti diversu.",
        "loginerror": "Erruri nta l'accessu",
+       "createacct-error": "Erruri ntâ criazzioni di l'utenza",
        "createaccounterror": "Mpussibbili di criari l'account $1",
        "nocookiesnew": "Lu nomu utenti pi tràsiri fu criatu, ma nun hai effittuatu lu log in. {{SITENAME}} usa li cookies pi gistiri li log in. Lu tò browser havi li cookies disabbilitati. Abbìlita li cookies, appoi effèttua lu login cu li tò username e password novi.",
        "nocookieslogin": "{{SITENAME}} usa li cookies pi gistiri lu log in. Lu tò browser havi li cookies disabbilitati. Abbìlita li cookies, appoi effèttua lu login cu li tò username e password.",
        "login-abort-generic": "La trasuta nun arriniscìu - Annullata",
        "loginlanguagelabel": "Lingua: $1",
        "suspicious-userlogout": "La tò dumanna di discunnissioni fu niàta prichì pari ca veni di nu browser nun funziunanti o nu proxy di caching.",
+       "pt-login": "Trasi",
+       "pt-login-button": "Trasi",
+       "pt-createaccount": "Criati un cuntu novu",
+       "pt-userlogout": "Nesci",
        "changepassword": "Cancia la password",
-       "resetpass_announce": "Hai effittuatu l'accessu cu na password timpurània ca t'hà statu mannata via email. Pi tirminari l'accessu, hai a nziriri na password nova ccà:",
+       "resetpass_announce": "Pi tirminari l'accessu, hai a nziriri na password nova ccà:",
        "resetpass_text": "<!-- Agghiunci lu testu ccà -->",
        "resetpass_header": "Rimposta la password",
        "oldpassword": "Password vecchia:",
        "newpassword": "Password nova:",
        "retypenew": "Scrivi n'àutra vota la password",
        "resetpass_submit": "Mposta la password e accedi",
-       "changepassword-success": "Lu canciu password hà statu effittuatu cu successu! Ora stai effittuannu l'accessu...",
+       "changepassword-success": "Lu canciu password hà statu effittuatu cu successu!",
+       "changepassword-throttled": "Facisti troppi tintativi.\nAspetta $1 prima d'arripruvari n'àutra vota.",
        "resetpass_forbidden": "Li password nun ponnu èssiri canciati sùpira sta wiki",
        "resetpass-no-info": "Pi tràsiri nta sta pàggina hà èssiri riggistratu",
        "resetpass-submit-loggedin": "Cancia la password",
        "searchmenu-exists": "* Pàggina '''[[$1]]'''",
        "searchmenu-new": "'''Crea la pàggina \"[[:$1]]\" supra sta wiki!'''",
        "searchprofile-articles": "Pàggini di cuntinutu",
-       "searchprofile-project": "Pàggini d'ajutu e dô pruggettu",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tuttu",
        "searchprofile-advanced": "Avanzata",
        "searchprofile-articles-tooltip": "Cerca nti $1",
-       "searchprofile-project-tooltip": "Cerca nti $1",
        "searchprofile-images-tooltip": "Cerca file",
        "searchprofile-everything-tooltip": "Cerca unnegghiè (puru ntî pàggini di discussioni)",
        "searchprofile-advanced-tooltip": "Cerca ntê namespace pirsunalizzati",
        "search-interwiki-default": "Risultati da $1:",
        "search-interwiki-more": "(cchiù)",
        "search-relatedarticle": "Risultati currilati",
-       "searcheverything-enable": "Cerca ni tutti li namespace",
        "searchrelated": "currilati",
        "searchall": "tutti",
        "showingresults": "Ammustra nzinu a {{PLURAL:$1|'''1''' risurtatu|'''$1''' risurtati}} a pàrtiri dô nùmmuru '''$2'''.",
        "allowemail": "Cunzenti la ricezzioni di e-mail di àutri utenti",
        "prefs-searchoptions": "Opzioni di circata",
        "prefs-namespaces": "Namespace",
-       "defaultns": "In casu cuntrariu cerca ni sti namespace:",
        "default": "pridifinitu",
        "prefs-files": "Mmàggini",
        "prefs-custom-css": "CSS personalizzatu",
        "prefs-emailconfirm-label": "Conferma dâ e-mail:",
        "youremail": "Lu tò nnirizzu email:",
        "username": "Nomu d'utenti:",
-       "uid": "ID utenti:",
        "prefs-memberingroups": "Cumpunenti {{PLURAL:$1|dû gruppu|dî gruppi}}:",
        "prefs-registration": "Data di riggistrazioni:",
        "yourrealname": "Lu tò nomu veru*",
        "logempty": "Lu log nun cunteni elementi currispunnenti â ricerca.",
        "log-title-wildcard": "Attrova tituli chi ncignanu cu",
        "allpages": "Tutti li paggini",
-       "alphaindexline": "di $1 a $2",
        "nextpage": "Pàggina doppu ($1)",
        "prevpage": "Pàggina pricidenti ($1)",
        "allpagesfrom": "Ammustra li pàggini a pàrtiri di:",
        "spam_reverting": "Ripristinata l'ùrtima virsioni priva di culligamenti a $1",
        "spam_blanking": "Pàggina svacantata, tutti li virsioni cuntinìanu culligamenti a $1",
        "pageinfo-toolboxlink": "Nfurmazzioni ncapu la pàggina",
-       "skinname-cologneblue": "Cologne Blu",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Mudernu",
        "markaspatrolleddiff": "Segna lu canciamentu comu virificatu",
        "markaspatrolledtext": "Segna sta pàggina comu virificata",
        "markedaspatrolled": "Canciamentu virificatu",
index 1fa5fa8..be43c4c 100644 (file)
        "searchmenu-exists": "<strong>Thaur's ae page named \"[[:$1]]\" oan this wiki.</strong> {{PLURAL:$2|0=|See the ither rake ootcomes foond aes weel.}}",
        "searchmenu-new": "<strong>Cræft the page \"[[:$1]]\" oan this wiki!</strong> {{PLURAL:$2|0=|See the page foond wi yer rake ava.|See the rake ootcome foond ava.}}",
        "searchprofile-articles": "Content pages",
-       "searchprofile-project": "Heelp n Waurk pages",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Awthing",
        "searchprofile-advanced": "Advanced",
        "searchprofile-articles-tooltip": "Rake in $1",
-       "searchprofile-project-tooltip": "Rake in $1",
        "searchprofile-images-tooltip": "Rake fer files",
        "searchprofile-everything-tooltip": "Rake aw o content (inclædin tauk pages)",
        "searchprofile-advanced-tooltip": "Rake in custom namespaces",
        "search-interwiki-default": "Ootcomes fae $1:",
        "search-interwiki-more": "(mair)",
        "search-relatedarticle": "Relatit",
-       "searcheverything-enable": "Rake in aw namespaces",
        "searchrelated": "relatit",
        "searchall": "aw",
        "showingresults": "Shawin ablo up tae {{PLURAL:$1|'''1''' ootcome|'''$1''' ootcomes}} stertin wi #'''$2'''.",
        "timezoneregion-pacific": "Paceefic Ocean",
        "allowemail": "Allou email fae ither uisers",
        "prefs-searchoptions": "Rake",
-       "defaultns": "Itherwise rake in thir namespaces:",
        "default": "defaut",
        "prefs-files": "Files",
        "prefs-custom-css": "Custom CSS",
        "recentchanges-label-bot": "This eedit wis performed bi ae bot",
        "recentchanges-label-unpatrolled": "This eedit haes no bin patrolled yet",
        "recentchanges-label-plusminus": "The page size chynged bi this nummer o bytes",
-       "recentchanges-legend-newpage": "(see [[Special:NewPages|leet o new pages]] ava)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (see [[Special:NewPages|leet o new pages]] ava)",
        "rcnotefrom": "Ablo ar the chynges sin <strong>$2</strong> (up til <strong>$1</strong> shawn).",
        "rclistfrom": "Shaw new chynges stertin fae $3 $2",
        "rcshowhideminor": "$1 smaa eedits",
index 118f7cf..f0fabb5 100644 (file)
@@ -79,7 +79,7 @@
        "august": "avgust-коловоз",
        "september": "septembar-рујан",
        "october": "oktobar-листопад",
-       "november": "novembar",
+       "november": "студени-novembar",
        "december": "decembar-просинац",
        "january-gen": "januara-сијечња",
        "february-gen": "februara-вељаче",
@@ -91,7 +91,7 @@
        "august-gen": "augusta-коловоза",
        "september-gen": "septembra-рујна",
        "october-gen": "oktobra-листопада",
-       "november-gen": "novembar",
+       "november-gen": "студенога-novembra",
        "december-gen": "decembra-просинца",
        "jan": "jan-сиј",
        "feb": "feb-вељ",
        "aug": "aug-кол",
        "sep": "sep-руј",
        "oct": "okt-лис",
-       "nov": "nov",
+       "nov": "сту-nov",
        "dec": "dec-про",
        "january-date": "$1. januar",
        "february-date": "$1. februar",
        "mediawikipage": "Pogledaj stranicu s porukom",
        "templatepage": "Pogledajte stranicu sa šablonom",
        "viewhelppage": "Pogledajte stranicu za pomoć",
-       "categorypage": "Pogledajte stranicu kategorije",
+       "categorypage": "Pogledaj stranicu kategorije",
        "viewtalkpage": "Pogledajte raspravu",
        "otherlanguages": "Drugi jezici / Други језици",
        "redirectedfrom": "(Preusmjereno sa $1)",
        "loginprompt": "Morate imati kolačiće ('''cookies''') omogućene da biste se prijavili na {{SITENAME}}.",
        "userlogin": "Prijavi se / Пријави се",
        "userloginnocreate": "Prijavi se",
-       "logout": "Odjavi se - Одјави се",
+       "logout": "Odjavi se / Одјави се",
        "userlogout": "Odjavi se / Одјави се",
        "notloggedin": "Niste prijavljeni",
        "userlogin-noaccount": "Nemate račun?",
        "previousrevision": "← Starija revizija",
        "nextrevision": "Novija izmjena →",
        "currentrevisionlink": "Trenutna verzija",
-       "cur": "tren",
+       "cur": "tren - трен",
        "next": "sljed - след",
        "last": "preth - претх",
        "page_first": "prva",
        "difference-title-multipage": "Razlika između stranica \"$1\" i \"$2\"",
        "difference-multipage": "(Razlika između stranica)",
        "lineno": "Linija $1:",
-       "compareselectedversions": "Uporedite označene verzije",
+       "compareselectedversions": "Uporedi označene verzije",
        "showhideselectedversions": "Pokaži/sakrij odabrane verzije",
        "editundo": "ukloni ovu izmjenu - уклони ову измену",
        "diff-empty": "(nema razlike)",
        "searchmenu-exists": "'''Postoji stranica pod nazivom \"[[:$1]]\" na ovoj wiki'''",
        "searchmenu-new": "<strong>Napravi stranicu \"[[:$1]]\" na ovoj wiki!</strong> {{PLURAL:$2|0=|Pogledajte također straniu pronađenu vašom pretragom.|Pogledajte također i vaše rezultate pretrage.}}",
        "searchprofile-articles": "Stranice sadržaja",
-       "searchprofile-project": "Stranice pomoći i projekta",
        "searchprofile-images": "Multimedija",
        "searchprofile-everything": "Sve",
        "searchprofile-advanced": "Napredno",
        "searchprofile-articles-tooltip": "Pretraga u $1",
-       "searchprofile-project-tooltip": "Pretraga u $1",
        "searchprofile-images-tooltip": "Traži datoteke",
        "searchprofile-everything-tooltip": "Pretraži sve sadržaje (ukljujući i stranice za razgovor)",
        "searchprofile-advanced-tooltip": "Traži u ostalim imenskim prostorima",
        "search-interwiki-default": "Rezultati od $1:",
        "search-interwiki-more": "(više)",
        "search-relatedarticle": "Povezano",
-       "searcheverything-enable": "Pretraga u svim imenskim prostorima",
        "searchrelated": "povezano",
        "searchall": "sve",
        "showingresults": "Dole {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
        "allowemail": "Dozvoli e-mail od ostalih korisnika",
        "prefs-searchoptions": "Pretraga",
        "prefs-namespaces": "Imenski prostori",
-       "defaultns": "Inače tražite u ovim imenskim prostorima:",
        "default": "standardno",
        "prefs-files": "Datoteke",
        "prefs-custom-css": "Prilagođeni CSS",
        "prefs-emailconfirm-label": "E-mail potvrda:",
        "youremail": "Vaša e-pošta / Ваша е-пошта*",
        "username": "Ime {{GENDER:$1|korisnika|korisnice}}:",
-       "uid": "{{GENDER:$1|Korisnički}} ID:",
        "prefs-memberingroups": "{{GENDER:$2|Korisnik|Korisnica}} je član {{PLURAL:$1|grupe|grupâ}}:",
        "prefs-registration": "Vrijeme registracije:",
        "yourrealname": "Vaše ime / Ваше име*",
        "recentchanges-label-unpatrolled": "Ova izmjena još nije patrolirana",
        "recentchanges-label-plusminus": "Veličina stranice promijenila se za ovoliko bajtova",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "(također pogledajte [[Special:NewPages|spisak novih stranica]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (također pogledajte [[Special:NewPages|spisak novih stranica]])",
        "rcnotefrom": "Ispod su izmjene od <strong>$2</strong> (do <strong>$1</strong> prikazano).",
        "rclistfrom": "Prikaži nove poruke od / Прикажи нове поруке од $3 $2",
        "rcshowhideminor": "$1 male izmjene / мале измене",
        "hide": "Sakrij",
        "show": "prikaži / прикажи",
        "minoreditletter": "m/м",
-       "newpageletter": "N",
+       "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|korisnik|korisnika}} koji pregledaju]",
        "rc_categories": "Ograniči na kategorije (razdvojene sa \"|\")",
        "uncategorizedimages": "Slike bez kategorije",
        "uncategorizedtemplates": "Šabloni bez kategorije",
        "unusedcategories": "Neiskorištene kategorije",
-       "unusedimages": "Neupotrebljene datoteke",
+       "unusedimages": "Neiskorišćene slike / Неискоришћене слике",
        "popularpages": "Popularne stranice",
        "wantedcategories": "Tražene kategorije",
        "wantedpages": "Tražene stranice / Тражене странице",
        "log-title-wildcard": "Traži naslove koji počinju s ovim tekstom",
        "showhideselectedlogentries": "Prikaži/sakrij izabrane zapise u evidenciji",
        "allpages": "Sve stranice / Све странице",
-       "alphaindexline": "$1 do $2",
        "nextpage": "Sljedeća strana ($1)",
        "prevpage": "Prethodna stranica ($1)",
        "allpagesfrom": "Prikaži stranice koje počinju od:",
        "deletepage": "Izbrišite stranicu",
        "confirm": "Potvrdi / Потврди",
        "excontent": "sadržaj je bio: '$1'",
-       "excontentauthor": "sadržaj je bio: '$1' (i jedini korisnik koji je mijenjao bio je '[[Special:Contributions/$2|$2]]')",
+       "excontentauthor": "sadržaj je bio: '$1', a jedini urednik '[[Special:Contributions/$2|$2]]'",
        "exbeforeblank": "sadržaj prije brisanja je bio: '$1'",
        "delete-confirm": "Brisanje \"$1\"",
        "delete-legend": "Obriši",
        "rollback-success": "Vraćene su izmjene korisnika $1;\nvraćeno na posljednju verziju koju je snimio $2.",
        "sessionfailure-title": "Greška u sesiji",
        "sessionfailure": "Izgleda da postoji problem sa vašom sesijom; ova akcija je otkazana kao prevencija protiv napadanja sesija. Kliknite \"back\" (''nazad'') i osvježite stranicu sa koje ste došli, i opet pokušajte.",
-       "protectlogpage": "Registar zaštite",
+       "protectlogpage": "Evidencija zaštite",
        "protectlogtext": "Ispod je spisak promjena zaštićenja stranice.\nPogledajte [[Special:ProtectedPages|spisak zaštićenih stranica]] za pregled trenutno operativnih zaštita stranica.",
        "protectedarticle": "\"[[$1]]\" zaštićeno",
        "modifiedarticleprotection": "promijenjen nivo zaštite za \"[[$1]]\"",
        "blocklist-nousertalk": "ne može uređivati vlastitu stranicu za razgovor",
        "ipblocklist-empty": "Spisak blokiranja je prazan.",
        "ipblocklist-no-results": "Tražena IP adresa ili korisničko ime nisu blokirani.",
-       "blocklink": "blokirajte",
+       "blocklink": "blokiraj",
        "unblocklink": "Odblokiraj / Одблокирај",
        "change-blocklink": "promijeni blokadu",
        "contribslink": "doprinosi",
        "blocklogpage": "Evidencija blokiranja",
        "blocklog-showlog": "Ovaj korisnik je ranije blokiran. \nEvidencija blokiranja je prikazana ispod kao referenca:",
        "blocklog-showsuppresslog": "Ovaj korisnik je ranije blokiran i sakriven. \nEvidencija sakrivanja je prikazana ispod kao referenca:",
-       "blocklogentry": "blokiran [[$1]] s rokom: $2 $3",
+       "blocklogentry": "Blokiran \"[[$1]]\" sa vremenom isticanja od $2 $3",
        "reblock-logentry": "promjena postavki blokiranja za [[$1]] sa vremenom isteka u $2 $3",
        "blocklogtext": "Ovo je historija akcija blokiranja i deblokiranja korisnika.\nAutomatski blokirane IP adrese nisu navedene ovdje.\nPogledajte [[Special:BlockList|spisak blokiranja]] za spisak trenutnih zabrana i blokiranja.",
        "unblocklogentry": "Odblokiran / Одблокиран \"$1\"",
        "movepagetalktext": "Odgovarajuća stranica za razgovor, ako postoji, će automatski biti premještena istovremeno '''osim:'''\n*Neprazna stranica za razgovor već postoji pod novim imenom, ili\n*Odznačite donju kutiju.\n\nU tim slučajevima, moraćete ručno da premjestite stranicu ukoliko to želite.",
        "movearticle": "Premjesti stranicu – Премјести страницу",
        "moveuserpage-warning": "'''Upozorenje:''' Premještate korisničku stranicu. Molimo da zapamtite da će se samo stranica premjestiti a korisnik se ''neće'' preimenovati.",
-       "movenologintext": "Morate biti registrovani korisnik i [[Special:UserLogin|prijavljeni]] da biste premjestili stranicu.",
+       "movenologintext": "Morate se registrovati ili [[Special:Userlogin|prijaviti]] kako biste premjestili članak.<br>\nМорате се регистровати или [[Special:Userlogin|пријавити]] како бисте преместили чланак.",
        "movenotallowed": "Nemate dopuštenje za premještanje stranica.",
        "movenotallowedfile": "Nemate dopuštenja da premještate datoteke.",
        "cant-move-user-page": "Nemate dopuštenje da premještate korisničke stranice (osim podstranica).",
        "rcpatroldisabledtext": "Funkcija patroliranja nedavnih izmjena je trenutno isključena.",
        "markedaspatrollederror": "Ne može se označiti kao patrolirano",
        "markedaspatrollederrortext": "Morate naglasiti reviziju koju treba označiti kao patroliranu.",
-       "markedaspatrollederror-noautopatrol": "Nije Vam dopušteno da vlastite izmjene označavate patroliranim.",
+       "markedaspatrollederror-noautopatrol": "Ne možete da označite svoje izmene patroliranim.",
        "markedaspatrollednotify": "Ova izmjena stranice $1 označena je kao patrolirana.",
        "markedaspatrollederrornotify": "Nije uspjelo označavanje ove stranice kao patrolirane.",
        "patrol-log-page": "Evidencija patroliranja",
        "metadata-fields": "Polja metapodataka slika su prikazani ispod slike će biti uključeni u prikaz stranice slike kada je sakrivena tabela metapodataka. U suprotnom će biti sakrivena po postavkama.\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": "Širina",
        "exif-imagelength": "Visina",
-       "exif-bitspersample": "Bita po komponenti",
+       "exif-bitspersample": "Dubina boje",
        "exif-compression": "Šema kompresije",
        "exif-photometricinterpretation": "Sastav piksela",
        "exif-orientation": "Orijentacija",
        "exif-exifversion": "Exif verzija",
        "exif-flashpixversion": "Podržana verzija Flashpix",
        "exif-colorspace": "Prostor boje",
-       "exif-componentsconfiguration": "Značenje svake komponente",
-       "exif-compressedbitsperpixel": "Način kompresije slike",
+       "exif-componentsconfiguration": "Značenje pojedine komponente",
+       "exif-compressedbitsperpixel": "Dubina boje poslije sažimanja",
        "exif-pixelydimension": "Širina slike",
        "exif-pixelxdimension": "Visina slike",
        "exif-usercomment": "Korisnički komentari",
        "exif-isospeedratings": "Rejting ISO brzine",
        "exif-shutterspeedvalue": "Brzina APEX okidača",
        "exif-aperturevalue": "Otvor blende",
-       "exif-brightnessvalue": "APEX osvijetljenost",
+       "exif-brightnessvalue": "Osvjetljenost",
        "exif-exposurebiasvalue": "Kompozicija ekspozicije",
        "exif-maxaperturevalue": "Najveći broj otvora blende",
        "exif-subjectdistance": "Udaljenost objekta",
        "exif-personinimage": "Prikazana osoba",
        "exif-originalimageheight": "Visina slike prije nego što je odrezana",
        "exif-originalimagewidth": "Širina slike prije nego što je odrezana",
-       "exif-compression-1": "Nekompresovano",
+       "exif-compression-1": "Nesažeto",
        "exif-compression-2": "CCITT Grupa 3 1 — Dimenzionalno izmijenjeo Huffmanovo šifriranje po dužini",
        "exif-compression-3": "CCITT Group 3 faks kodiranje",
        "exif-compression-4": "CCITT Group 4 faks kodiranje",
        "monthsall": "sve",
        "confirmemail": "Potvrdite adresu e-pošte",
        "confirmemail_noemail": "Niste unijeli tačnu e-mail adresu u Vaše [[Special:Preferences|korisničke postavke]].",
-       "confirmemail_text": "Ova viki zahtjeva da potvrdite adresu Vaše e-pošte prije nego što koristite mogućnosti e-pošte. ž\nAktivirajte dugme ispod kako bi ste poslali poštu za potvrdu na Vašu adresu.\nPošta uključuje poveznicu koja sadrži kod;\nučitajte poveznicu u Vaš brauzer da bi ste potvrdili da je adresa Vaše e-pošte valjana.",
+       "confirmemail_text": "Ova wiki zahtjeva da potvrdite adresu Vaše e-pošte prije nego što koristite mogućnosti e-pošte. \nAktivirajte dugme ispod kako bi ste poslali poštu za potvrdu na Vašu adresu.\nPošta uključuje poveznicu koja sadrži kod;\nučitajte poveznicu u Vaš brauzer da bi ste potvrdili da je adresa Vaše e-pošte valjana.",
        "confirmemail_pending": "Kod za potvrdu Vam je već poslan putem e-maila;\nako ste nedavno otvorili Vaš račun, trebali bi pričekati par minuta da poslana pošta stigne, prije nego što ponovno zahtijevate novi kod.",
        "confirmemail_send": "Pošaljite kod za potvrdu",
        "confirmemail_sent": "E-pošta za potvrđivanje poslata.",
        "table_pager_limit_label": "Stavke po stranici:",
        "table_pager_limit_submit": "Idi",
        "table_pager_empty": "Bez rezultata",
-       "autosumm-blank": "Uklanjanje sadržaja stranice",
+       "autosumm-blank": "Uklanjanje svog sadržaja stranice",
        "autosumm-replace": "Zamjena stranice sa '$1'",
        "autoredircomment": "Preusmjereno na [[$1]]",
        "autosumm-new": "Napravljena stranica sa '$1'",
        "watchlistedit-raw-done": "Vaš spisak praćenja je ažuriran.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 naslov je dodan|$1 naslova su dodana|$1 naslova je dodano}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova je uklonjeno}}:",
+       "watchlistedit-clear-legend": "Obriši spisak praćenja",
+       "watchlistedit-clear-done": "Vaš spisak praćenja je obrisan. Svi naslovi su uklonjeni.",
        "watchlisttools-view": "Vidi relevantne promjene",
        "watchlisttools-edit": "Vidi i uredi listu praćenja",
        "watchlisttools-raw": "Uredi grubu listu praćenja",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|razgovor]])",
        "unknown_extension_tag": "Nepoznata oznaka ekstenzije \"$1\"",
        "duplicate-defaultsort": "'''Upozorenje''': Postavljeni ključ sortiranja \"$2\" zamjenjuje raniji ključ \"$1\".",
-       "version": "Verzija",
+       "version": "Verzija / Верзија",
        "version-extensions": "Instalirana proširenja (ekstenzije)",
        "version-specialpages": "Posebne stranice",
        "version-parserhooks": "Kuke parsera",
        "specialpages-group-media": "Multimedijalne datoteke \\ fajlovi i njihovo postavljanje / Мултимедијалне датотеке \\ фајлови и њихово постављање",
        "specialpages-group-users": "Korisnici i njihova prava / Корисници и њихова права",
        "specialpages-group-highuse": "Najčešće korištene stranice / Најчешће кориштене странице",
-       "specialpages-group-pages": "Spiskovi stranica",
+       "specialpages-group-pages": "Liste stranica / Листе страна",
        "specialpages-group-pagetools": "Alati za stranice",
-       "specialpages-group-wiki": "Podaci i alati",
+       "specialpages-group-wiki": "Wiki podaci i alati - Вики подаци и алати",
        "specialpages-group-redirects": "Posebne stranice za preusmjeravanje / Посебне стране за преусмеравање",
        "specialpages-group-spam": "Spam alati",
        "blankpage": "Prazna stranica",
index 5ff85ce..8fdddd6 100644 (file)
        "vector-view-view": "කියවන්න",
        "vector-view-viewsource": "මූලාශ්‍රය නරඹන්න",
        "actions": "කාර්යයන්",
+       "vector-more-actions": "තවත්",
        "namespaces": "නාමඅවකාශයන්",
        "variants": "ප්‍රභේද",
        "navigation-heading": "සංචාලන මෙනුව",
        "permalink": "ස්ථාවර සබැඳුම",
        "print": "මුද්‍රණය කරන්න",
        "view": "දසුන",
+       "view-foreign": "$1 බලන්න",
        "edit": "සංස්කරණය",
+       "edit-local": "ස්ථානික විස්තරය සංස්කරනය කරන්න",
        "create": "තනන්න",
+       "create-local": "ස්ථානීය විස්තරයක් එක් කරන්න",
        "editthispage": "මෙම පිටුව සංස්කරණය කරන්න",
        "create-this-page": "මෙම පිටුව තනන්න",
        "delete": "මකන්න",
        "jumptonavigation": "සංචලනය",
        "jumptosearch": "සොයන්න",
        "view-pool-error": "සමාවන්න, ස'වරයන් මෙම අවස්ථාවෙහිදී අධිපූරණය වී ඇත.\nපමණට වඩා පරිශීලක පිරිසක් මෙම පිටුව නැරඹීමට උත්සහ දරති.\nමද වේලාවක් පමාවී නැවත උත්සාහ කරන්න.\n\n$1",
+       "generic-pool-error": "සමාවන්න, මේ මොහොතේ සර්වරයන් උපරිමව භාවිතා කෙරෙමින් පවතී. \nබොහෝ පිරිසක් මෙම පිටුව නැරඹීමට උත්සහ දරති.\nකරුණාකර මද වේලාවක් ප්‍රමාද වී නැවත උත්සාහ කරන්න.",
        "pool-timeout": "අගුල සඳහා බලාපොරොත්තුවෙන් සිටීම කල් ඉකුත්වනලදී",
        "pool-queuefull": "පොරොත්තු ලේඛනය පිරී ඇත",
        "pool-errorunknown": "හඳුනා නොගත් දෝෂය",
        "searchmenu-exists": "'''මෙම විකියෙහි \"[[:$1]]\" ලෙස නම් කර ඇති පිටුවක් ඇත.'''",
        "searchmenu-new": "<strong>පිටුව තනන්න \"[[:$1]]\" මෙම විකියෙහි!</strong> {{PLURAL:$2|0=|ඔබගේ සෙවුමට හසුවූ පිටුව බලන්න.|සෙවූ ප්‍රතිපල බලන්න.}}",
        "searchprofile-articles": "අන්තර්ගත පිටු",
-       "searchprofile-project": "උදවු හා ව්‍යාපෘති පිටු",
        "searchprofile-images": "බහුමාධ්‍ය",
        "searchprofile-everything": "සියල්ල",
        "searchprofile-advanced": "උසස්",
        "searchprofile-articles-tooltip": "$1 හි ගවේෂණය කරන්න",
-       "searchprofile-project-tooltip": "$1 හි ගවේෂණය කරන්න",
        "searchprofile-images-tooltip": "ගොනු සඳහා ගවේෂණය කරන්න",
        "searchprofile-everything-tooltip": "සියළු අන්තර්ගතය ගවේෂණය කරන්න (සාකච්ඡා පිටුද ඇතුළුව)",
        "searchprofile-advanced-tooltip": "අභිරුචි නාමඅවකාශයන්හි ගවේෂණය කරන්න",
        "search-interwiki-default": "$1 වෙතින් ප්‍රතිඵල:",
        "search-interwiki-more": "(තවත්)",
        "search-relatedarticle": "සහසම්බන්ධිත",
-       "searcheverything-enable": "සියළු නාමඅවකාශයන්හි ගවේෂණය කරන්න",
        "searchrelated": "ආශ්‍රිත",
        "searchall": "සියල්ල",
        "showingresults": "#'''$2''' ගෙන් ආරම්භ කොට, {{PLURAL:$1|ප්‍රතිඵල '''1'''  ක් |ප්‍රතිඵල '''$1''' ක්}} දක්වා පහත පෙන්වා ඇත.",
        "allowemail": "අනෙකුත් පරිශීලකයන්ගෙන් විද්‍යුත්-තැපෑල ලැබීම සක්‍රීය කරන්න",
        "prefs-searchoptions": "සොයන්න",
        "prefs-namespaces": "නාමඅවකාශ",
-       "defaultns": "පෙරනිමියෙන් මෙම නාමඅවකාශයන්හි ගවේෂණය කරන්න:",
        "default": "පෙරනිමි",
        "prefs-files": "ගොනු",
        "prefs-custom-css": "අභිරුචි CSS",
        "tooltip-preferences-save": "අභිරුචීන් සුරකින්න",
        "tooltip-summary": "කෙටි සාරාංශයක් ඇතුළත් කරන්න",
        "common.css": "/* මෙහි CSS  බහාලීම සියළු ඡවියයන් භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */",
-       "cologneblue.css": "/* මෙහි CSS  බහාලීම \"Cologne Blue\" ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */",
        "monobook.css": "/* මෙහි CSS  බහාලීම ඒකායන ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */",
-       "modern.css": "/* මෙහි CSS  බහාලීම නූතන ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */",
        "print.css": "/* මෙහි CSS  බහාලීම මුද්‍රණ ප්‍රතිදානයට බලපෑම් සිදු කල හැක */",
        "common.js": "/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් සෑම පිටු ප්‍රවේශනයකදීම සියළු පරිශීලකයන්හට ප්‍රවේශනය කෙරේ. */",
-       "cologneblue.js": "/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් සිහිල්-සුවඳ-පැන් ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */",
        "monobook.js": "/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් ඒකායන ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */",
-       "modern.js": "/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් නූතන ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */",
        "anonymous": "{{SITENAME}} හි නිර්නාමික {{PLURAL:$1|පරිශීලකයා|පරිශීලකයෝ}}",
        "siteuser": "{{SITENAME}} පරිශීලක $1",
        "anonuser": "{{SITENAME}} නිර්නාමික පරිශීලක $1",
index f9e4885..bbb6c02 100644 (file)
        "vector-view-view": "Čítať",
        "vector-view-viewsource": "Zobraziť zdroj",
        "actions": "Operácie",
+       "vector-more-actions": "Viac",
        "namespaces": "Menné priestory",
        "variants": "Varianty",
        "navigation-heading": "Navigačné menu",
        "searchmenu-exists": "*Stránka '''[[$1]]'''",
        "searchmenu-new": "<strong>Vytvoriť na tejto wiki stránku „[[:$1|$1]]“!</strong> {{PLURAL:$2|0=|Pozrite si tiež stránku nájdenú vašim vyhľadávaním.|Pozrite si tiež stránky nájdené vašim vyhľadávaním.}}",
        "searchprofile-articles": "Stránky s obsahom",
-       "searchprofile-project": "Stránky pomocníka a projektu",
        "searchprofile-images": "Multimédiá",
        "searchprofile-everything": "Všetky",
        "searchprofile-advanced": "Pokročilé",
        "searchprofile-articles-tooltip": "Hľadať v $1",
-       "searchprofile-project-tooltip": "Hľadať v $1",
        "searchprofile-images-tooltip": "Hľadať súbory",
        "searchprofile-everything-tooltip": "Hľadať v celom obsahu (vrátane diskusných stránok)",
        "searchprofile-advanced-tooltip": "Hľadať vo vymenovaných menných priestoroch",
        "search-interwiki-default": "$1 výsledkov:",
        "search-interwiki-more": "(viac)",
        "search-relatedarticle": "Súvisiace",
-       "searcheverything-enable": "Vyhľadať vo všetkých menných priestoroch",
        "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>.",
        "allowemail": "Povoliť prijímanie e-mailov od iných používateľov",
        "prefs-searchoptions": "Hľadanie",
        "prefs-namespaces": "Menné priestory",
-       "defaultns": "Inak vyhľadávať v týchto menných priestoroch:",
        "default": "predvolený",
        "prefs-files": "Súbory",
        "prefs-custom-css": "Vlastný CSS",
        "recentchanges-label-unpatrolled": "Táto úprava zatiaľ nebola strážená",
        "recentchanges-label-plusminus": "Veľkosť stránky sa zmenila o toľkoto bajtov",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "(pozri tiež [[Special:NewPages|zoznam nových stránok]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (pozri tiež [[Special:NewPages|zoznam nových stránok]])",
        "rcnotefrom": "Nižšie sú zobrazené úpravy od <strong>$2</strong> (do <strong>$1</strong>).",
        "rclistfrom": "Zobraziť nové úpravy počnúc od $3 $2",
        "rcshowhideminor": "$1 drobné úpravy",
        "tooltip-preferences-save": "Uložiť nastavenia",
        "tooltip-summary": "Zadajte krátke zhrnutie",
        "common.css": "/* Tu umiestnené CSS bude ovplyvňovať všetky štýly */",
-       "cologneblue.css": "/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Kolínska modrá */",
        "monobook.css": "/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Monobook */",
-       "modern.css": "/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Moderný */",
        "vector.css": "/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Vector */",
        "print.css": "/* Tu umiestnené CSS bude ovplyvňovať tlačový výstup */",
        "noscript.css": "/* Tu umiestnené CSS bude ovplyvňovať používateľov s vypnutým JavaScriptom */",
        "group-sysop.css": "/* Tu umiestnené CSS bude ovplyvňovať iba správcov */",
        "group-bureaucrat.css": "/* Tu umiestnené CSS bude ovplyvňovať iba byrokratov */",
        "common.js": "/* Tu uvedený JavaScript sa nahrá všetkým používateľom pri každom nahraní stránky. */",
-       "cologneblue.js": "/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Kolínska modrá */",
        "monobook.js": "/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Monobook */",
-       "modern.js": "/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Moderný */",
        "vector.js": "/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Vector */",
        "group-autoconfirmed.js": "/* Tu sa nachádzajúci JavaScript sa načíta používateľom s potvrdenou emailovou adresou */",
        "group-bot.js": "/* Tu sa nachádzajúci JavaScript sa načíta len robotom */",
        "pageinfo-category-pages": "Počet stránok",
        "pageinfo-category-subcats": "Počet podkategórií",
        "pageinfo-category-files": "Počet súborov",
-       "skinname-cologneblue": "Kolínska modrá",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderný",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "Označiť ako stráženú",
        "markaspatrolledtext": "Označiť túto stránku ako stráženú",
index 173095e..33604f1 100644 (file)
@@ -8,7 +8,8 @@
                        "Smihael",
                        "Vadgt",
                        "Yerpo",
-                       "아라"
+                       "아라",
+                       "MaGa"
                ]
        },
        "tog-underline": "Podčrtavanje povezav:",
        "vector-view-view": "Preberi",
        "vector-view-viewsource": "Izvorno besedilo",
        "actions": "Dejanja",
+       "vector-more-actions": "Več",
        "namespaces": "Imenski prostori",
        "variants": "Različice",
        "navigation-heading": "Navigacijski meni",
        "copyrightwarning": "Vsi prispevki k {{GRAMMAR:dajalnik|{{SITENAME}}}} se obravnavajo kot objave pod pogoji $2 (za podrobnosti glej $1). Če niste pripravljeni na neusmiljeno urejanje in prosto razširjanje vašega gradiva, ga ne prispevajte.<br />\nPoleg tega zagotavljate, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz javno dostopnega ali podobnega prostega vira.\n'''Ne dodajajte avtorsko zaščitenega dela brez dovoljenja!'''",
        "copyrightwarning2": "Vedite, da lahko drugi urejevalci urejajo, spremenijo ali odstranijo kateri koli prispevek k {{GRAMMAR:dajalnik|{{SITENAME}}}}.\nČe niste pripravljeni na neusmiljeno urejanje svojega gradiva, ga ne objavljajte tukaj.<br />\nPoleg tega jamčite, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz vira v javni lasti ali podobnega prostega vira (za podrobnosti glej $1).\n'''Ne objavljajte avtorsko zaščitenega gradiva brez dovoljenja!'''",
        "longpageerror": "'''Napaka: Predloženo besedilo je dolgo $1 {{PLURAL:$1|kilobajt|kilobajta|kilobajte|kilobajtov}}, s čimer presega največjo dovoljeno dolžino $2 {{PLURAL:$2|kilobajta|kilobajtov|kilobajtov|kilobajtov}}.'''\nZato ga ni mogoče shraniti.",
-       "readonlywarning": "'''Opozorilo: Zbirka podatkov je zaradi vzdrževanja začasno zaklenjena, kar pomeni, da sprememb trenutno ne morete shraniti. Prosimo, prenesite besedilo v urejevalnik in ga dodajte pozneje.'''\n\nSistemski skrbnik, ki jo je zaklenil, je podal naslednjo razlago: $1",
+       "readonlywarning": "<strong>Opozorilo: Zbirka podatkov je zaradi vzdrževanja začasno zaklenjena, kar pomeni, da sprememb trenutno ne morete shraniti.</strong>\nProsimo, prenesite besedilo v urejevalnik in ga dodajte pozneje.\n\nSistemski skrbnik, ki jo je zaklenil, je podal naslednjo razlago: $1",
        "protectedpagewarning": "'''Opozorilo: Stran je bila zaklenjena in jo lahko urejajo le uporabniki z administratorskimi pravicami.'''\nZadnji vnos v dnevnik je naveden spodaj:",
        "semiprotectedpagewarning": "'''Opomba:''' Stran je bila zaklenjena in jo lahko urejajo le registrirani uporabniki.\nZadnji vnos v dnevnik je naveden spodaj:",
        "cascadeprotectedwarning": "'''Opozorilo:''' Ta stran je zaklenjena, tako da jo lahko urejajo le administratorji, saj je bila vključena med {{PLURAL:$1|sledečo stran|sledeči strani|sledeče strani}} s kaskadno zaščito:",
        "currentrev": "Trenutna redakcija",
        "currentrev-asof": "Trenutna redakcija s časom $1",
        "revisionasof": "Redakcija: $1",
-       "revision-info": "Redakcija dne $1 od $2",
+       "revision-info": "Redakcija dne $1 od {{GENDER:$6|$2}}$7",
        "previousrevision": "← Starejša redakcija",
        "nextrevision": "Novejša redakcija →",
        "currentrevisionlink": "poglejte trenutno redakcijo",
        "searchmenu-exists": "'''Na tem wikiju obstaja stran »[[:$1]]«'''",
        "searchmenu-new": "<strong>Ustvari stran »[[:$1]]« na tem wikiju!</strong> {{PLURAL:$2|0=|Oglejte si tudi rezultate iskanja.}}",
        "searchprofile-articles": "Članki",
-       "searchprofile-project": "Pomoč in projektne strani",
        "searchprofile-images": "Večpredstavnost",
        "searchprofile-everything": "Vse",
        "searchprofile-advanced": "Napredni pogled",
        "searchprofile-articles-tooltip": "Išči v $1",
-       "searchprofile-project-tooltip": "Išči v $1",
        "searchprofile-images-tooltip": "Išči datoteke",
        "searchprofile-everything-tooltip": "Išči po vsej vsebini (vključno s pogovornimi stranmi)",
        "searchprofile-advanced-tooltip": "Iskanje v imenskih prostorih po meri",
        "search-interwiki-default": "Rezultati s strani $1:",
        "search-interwiki-more": "(več)",
        "search-relatedarticle": "Podobno",
-       "searcheverything-enable": "Iskanje po vseh imenskih prostorih",
        "searchrelated": "povezano",
        "searchall": "vse",
        "showingresults": "Prikazujem do '''$1''' {{PLURAL:$1|zadetek|zadetka|zadetke|zadetkov}}, začenši s št. '''$2'''.",
        "powersearch-togglelabel": "Izberi:",
        "powersearch-toggleall": "Vse",
        "powersearch-togglenone": "Nič",
+       "powersearch-remember": "Zapomni si izbiro za nadaljnja iskanja",
        "search-external": "Zunanji iskalnik",
        "searchdisabled": "Iskanje po {{GRAMMAR:dajalnik|{{SITENAME}}}} je onemogoočeno.\nMedtem lahko iščete preko Googla.\nUpoštevajte, da so njihovi podatki vsebine {{GRAMMAR:rodilnik|{{SITENAME}}}} morda zastareli.",
        "search-error": "Med iskanjem je prišlo do napake: $1",
        "allowemail": "Drugim uporabnikom omogoči pošiljanje e-pošte",
        "prefs-searchoptions": "Iskanje",
        "prefs-namespaces": "Imenski prostori",
-       "defaultns": "Navadno išči v naslednjih imenskih prostorih:",
        "default": "privzeto",
        "prefs-files": "Datoteke",
        "prefs-custom-css": "CSS po meri",
        "recentchanges-label-unpatrolled": "Urejanje še ni bilo pregledano",
        "recentchanges-label-plusminus": "uporabnik je velikost strani spremenil za tolikšno število bajtov",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "(glej tudi [[Special:NewPages|seznam novih strani]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (glej tudi [[Special:NewPages|seznam novih strani]])",
        "rcnotefrom": "Navedene so spremembe od <strong>$2</strong> dalje (prikazujem jih do <strong>$1</strong>).",
        "rclistfrom": "Prikaži spremembe od $3 $2 naprej",
        "rcshowhideminor": "$1 manjša urejanja",
        "largefileserver": "Velikost datoteke presega strežnikove nastavitve.",
        "emptyfile": "Kaže, da je aložena datoteka prazna.\nDo tega bi lahko prišlo zaradi tipkarske napake v imenu.\nAli datoteko resnično želite naložiti?",
        "windows-nonascii-filename": "Ta wiki ne podpira imen datotek s posebnimi znaki.",
-       "fileexists": "Datoteka s tem imenom že obstaja. Preden jo povozite, preverite stran <strong>[[:$1]]</strong>.\n[[$1|thumb]]",
+       "fileexists": "Datoteka s tem imenom že obstaja. Preden jo {{GENDER:|povozite}}, preverite stran <strong>[[:$1]]</strong>.\n[[$1|thumb]]",
        "filepageexists": "Opisna stran za to datoteko je bila že ustvarjena na <strong>[[:$1]]</strong>, vendar datoteka s tem imenom trenutno ne obstaja.\nPovzetek, ki ste ga vnesli, se ne bo prikazal na opisni strani.\nDa tam prikažete povzetek, morate stran urediti ročno.\n[[$1|thumb]]",
        "fileexists-extension": "Datoteka s podobnim imenom že obstaja: [[$2|thumb]]\n* Ime naložene datoteke: <strong>[[:$1]]</strong>\n* Ime obstoječe datoteke: <strong>[[:$2]]</strong>\nProsimo, izberite drugo ime.",
        "fileexists-thumbnail-yes": "Kot izgleda, je ta slika pomanjšana ''(thumbnail)''. [[$1|thumb]]\nProsimo, preverite datoteko <strong>[[:$1]]</strong>.\nČe je preverjena datoteka enaka kot ta, ki jo nalage, ni potrebno nalagati še dodatne sličice.",
        "morelinkstoimage": "Preglejte [[Special:WhatLinksHere/$1|več povezav]] na to datoteko.",
        "linkstoimage-redirect": "$1 (preusmeritev datoteke) $2",
        "duplicatesoffile": "{{PLURAL:$1|Sledeča datoteka je dvojnik|Sledeči datoteki sta dvojnika|Sledeče $1 datoteke so dvojniki|Sledečih $1 datotek so dvojniki}} te datoteke ([[Special:FileDuplicateSearch/$2|več podrobnosti]]):",
-       "sharedupload": "Datoteka je del projekta $1 in se lahko uporabi v drugih projektih.",
-       "sharedupload-desc-there": "Datoteka je iz projekta $1 in se lahko uporablja v drugih projektih.\nProsimo, oglejte si [$2 opisno stran datoteke] za dodatne informacije.",
-       "sharedupload-desc-here": "Datoteka je iz projekta $1 in se lahko uporablja v drugih projektih.\nPovzetek na njeni [$2 opisni strani datoteke] je prikazan spodaj.",
-       "sharedupload-desc-edit": "Datoteka je z $1 in jo morda uporabljajo drugi projekti.\nMorda želite urediti njeno opisno stran na tamkajšnji [$2 opisni strani datoteke].",
-       "sharedupload-desc-create": "Datoteka je z $1 in jo morda uporabljajo drugi projekti.\nMorda želite urediti njeno opisno stran na tamkajšnji [$2 opisni strani datoteke].",
+       "sharedupload": "Datoteka je s projekta $1 in se lahko uporabi v drugih projektih.",
+       "sharedupload-desc-there": "Datoteka je s projekta $1 in se lahko uporablja v drugih projektih.\nProsimo, oglejte si [$2 opisno stran datoteke] za dodatne informacije.",
+       "sharedupload-desc-here": "Datoteka je s projekta $1 in se lahko uporablja v drugih projektih.\nPovzetek na njeni [$2 opisni strani datoteke] je prikazan spodaj.",
+       "sharedupload-desc-edit": "Datoteka je s projekta $1 in jo morda uporabljajo drugi projekti.\nMorda želite urediti njeno opisno stran na tamkajšnji [$2 opisni strani datoteke].",
+       "sharedupload-desc-create": "Datoteka je s projekta $1 in jo morda uporabljajo drugi projekti.\nMorda želite urediti njeno opisno stran na tamkajšnji [$2 opisni strani datoteke].",
        "filepage-nofile": "Datoteka s tem imenom ne obstaja.",
        "filepage-nofile-link": "Datoteka s tem imenom ne obstaja, vendar pa jo lahko [$1 naložite].",
        "uploadnewversion-linktext": "Naložite novo različico datoteke",
        "wantedtemplates": "Želene predloge",
        "mostlinked": "Strani, na katere se največ povezuje",
        "mostlinkedcategories": "Kategorije z največ elementi",
-       "mostlinkedtemplates": "Najbolj uporabljane predloge",
+       "mostlinkedtemplates": "Največkrat vključene strani",
        "mostcategories": "Članki z največ kategorijami",
        "mostimages": "Najbolj uporabljane datoteke",
        "mostinterwikis": "Strani z največ medjezikovnimi povezavami",
index 7d6655c..0dba998 100644 (file)
        "searchmenu-exists": "'''Wikigaan wuu ku jiraa bog la dhoho  \"[[:$1]]\" .'''",
        "searchmenu-new": "'''Ku sameey bogga  \"[[:$1]]\" wikigaan!'''",
        "searchprofile-articles": "Maqaalada kooban",
-       "searchprofile-project": "Caawin iyo Bogga mashruuca",
        "searchprofile-images": "Multimedia-ha",
        "searchprofile-everything": "Wax kasto",
        "searchprofile-advanced": "La talin",
        "searchprofile-articles-tooltip": "Ka raadi $1",
-       "searchprofile-project-tooltip": "Ka raadi $1",
        "searchprofile-images-tooltip": "Raadi faylyada",
        "searchprofile-everything-tooltip": "Raadi wax kasto oo kooban ( xattaa bogga wadahadalka)",
        "searchprofile-advanced-tooltip": "Ka raadi qeybta isticmaalada",
        "powersearch-togglenone": "Waxna",
        "preferences": "Dooqyada",
        "mypreferences": "Dooqyadeyda",
+       "prefs-edits": "Tirada wax bedelka:",
        "prefs-skin": "Jirka",
        "skin-preview": "Horfiirin",
        "datedefault": "Ma'jiro dooq",
        "prefs-rc": "Isbedelada dhow",
        "prefs-watchlist": "liiska-waardiyaha",
        "prefs-watchlist-days": "Tirada maalamaha ay ku jirayaan liiska-waardiyaha:",
+       "prefs-resetpass": "Bedel ereysirta",
        "prefs-email": "E-mail aad dooran kartaa",
        "prefs-rendering": "Muuqaalka",
        "saveprefs": "Kaydi",
        "youremail": "E-mail:",
        "username": "Gudagal:",
        "prefs-memberingroups": "{{GENDER:$2|Xubin}} ka mid ah {{PLURAL:$1|kooxda|kooxaha}}:",
+       "prefs-registration": "Waqtiga diiwaan galinta",
        "yourrealname": "Magacaaga runta ah:",
        "yourlanguage": "luqad:",
        "yournick": "Saxiix cusub:",
+       "prefs-help-signature": "Waan in la saxiixaa wadahdalada ku dhaca bogga wadhadalka adigoo adeegsaanaya \"<nowiki>~~~~</nowiki>\", kaasoo u rogi doona saxiixa iyo waqtiga.",
        "badsiglength": "Naaneysta aad bey u dheertahay.\nWaa in aysan ka badanin $1 {{PLURAL:$1|eray|erayo}}.",
        "yourgender": "Jinsi:",
        "gender-unknown": "Aana la qeexin",
        "gender-male": "Lab",
        "gender-female": "Dhedig",
+       "prefs-help-gender": "Ahaysiinta xulashaan waa mid dooqasha ah.\nBarnaamijkaan adeegsigiisa waxay qiima u yeelaysaa wadahadalkaada iyo kuwa kale iyadoo bedelaysa habka qofka sida lab ama dheddig.\nMacluumadkaan waa mid la wada arkayo.",
        "email": "E-mail",
        "prefs-help-realname": "Optional: if you choose to provide it this will be used for giving you attribution for your work.",
        "prefs-help-email": "E-mail waa wax aad xor u leedahay. laakiin waa loo baahanyahay hadii aad eraysirka badaleesid, hadii aad ilaawdo eraygaaga sirta ah",
        "prefs-help-email-others": "Waxaa kale oo aad u isticmaali kartaa in ee dadka kale kugula soo xiriiraan e-mail ayaga oo isticmaalaayo linki isticmaalahaada ama bogga wadahadalka.\nE-mailkaada mala sheegaayo markii ee dadka kale kula soo xiriirayaan.",
        "prefs-help-email-required": "Waxaa loo baahanyahay e-mail.",
        "prefs-info": "Macluumaadka asaasiga ah",
+       "prefs-i18n": "Caalamiyeen",
+       "prefs-signature": "Saxiixa",
+       "prefs-help-prefershttps": "Waxaa lahagaajin doonaan dooqaan marka xiga ee aad soo gasho",
        "saveusergroups": "Kaydi kooxaha isticmaalayaasha",
        "userrights-groupsmember": "Ka mid ah:",
        "userrights-reason": "Sababta:",
        "recentchanges-label-unpatrolled": "bedelkaan hadda wali lama waardiyeen",
        "recentchanges-label-plusminus": "Qaadka bogga wuxuu ku bedelmay tirada halbeega baytka",
        "recentchanges-legend-heading": "'''Sharaxaad:'''",
-       "recentchanges-legend-newpage": "(sidoo kale eeg [[Special:NewPages|liiska bogagga cusub]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sidoo kale eeg [[Special:NewPages|liiska bogagga cusub]])",
        "rcnotefrom": "Hoostaan waa isbedaladii dhacay  '''$2''' (waxaad arkoosaa ilaa '''$1''' ).",
        "rclistfrom": "Itusi isbedelada cusub oo ka bilaabaneyso $3 $2",
        "rcshowhideminor": "$1 bedelada yar",
        "rcshowhidebots": "$1 botyaalo",
+       "rcshowhidebots-show": "I tus",
        "rcshowhideliu": "$1 isticmaalada-soo galay",
+       "rcshowhideliu-show": "I tus",
        "rcshowhideanons": "$1 isticmaalada la aqoon",
+       "rcshowhideanons-show": "I tus",
        "rcshowhidepatr": "$1 bedelada la waardiyeeyay",
+       "rcshowhidepatr-show": "I tus",
        "rcshowhidemine": "$1 wax badalkeyga",
+       "rcshowhidemine-show": "I tus",
        "rclinks": "Itusi isbadeladii  $1 ee ugu danbeeyay oo dhacay wixii ka danbeeyay $2 maalmood<br />$3",
        "diff": "duwanaan",
        "hist": "taariikh",
        "randompage": "Ku nasiibso bog",
        "brokenredirects-edit": "wax ka bedel",
        "brokenredirects-delete": "tirtir",
+       "withoutinterwiki-submit": "I tus",
        "nbytes": "$1 {{PLURAL:$1|bayt|bayt}}",
        "nmembers": " $1 {{PLURAL:$1|ka mid ah|ka mid ah}}",
        "lonelypages": "Boggaga agoonta ah",
index c0ac8e6..ee7885a 100644 (file)
        },
        "tog-underline": "Подвлачење веза:",
        "tog-hideminor": "Сакриј мање измене у списку скорашњих измена",
-       "tog-hidepatrolled": "Сакриј прегледане измене у списку скорашњих измена",
-       "tog-newpageshidepatrolled": "Сакриј прегледане странице са списка нових страница",
+       "tog-hidepatrolled": "Сакриј патролиране измене у списку скорашњих измена",
+       "tog-newpageshidepatrolled": "Сакриј патролиране странице са списка нових страница",
        "tog-extendwatchlist": "Прошири списак надгледања за приказ свих измена, не само скорашњих",
        "tog-usenewrc": "Промене у групи по страници у списку скорашњих измена и надгледаних страница",
-       "tog-numberheadings": "СамоÑ\81Ñ\82ално нумериши поднаслове",
+       "tog-numberheadings": "Ð\90Ñ\83Ñ\82омаÑ\82Ñ\81ки нумериши поднаслове",
        "tog-showtoolbar": "Прикажи траку с алаткама за уређивање",
        "tog-editondblclick": "Уређивање страница двоструким кликом",
        "tog-editsectiononrightclick": "Уређивање одељака десним кликом на њихове наслове",
        "vector-view-view": "Читај",
        "vector-view-viewsource": "Изворни код",
        "actions": "Радње",
+       "vector-more-actions": "Више",
        "namespaces": "Именски простори",
        "variants": "Варијанте",
        "navigation-heading": "Навигациони мени",
        "resetpass-abort-generic": "Промену лозинке је спречио додатак.",
        "resetpass-expired": "Ваша лозинка је истекла. Поставите нову лозинку да бисте се пријавили.",
        "resetpass-expired-soft": "Ваша лозинка је истекла и морате поставити нову. Поставите нову лозинку или кликните „{{int:resetpass-submit-cancel}}“ да је поставите касније.",
+       "resetpass-validity-soft": "Ваша лозинка није ваљана: $1\n\nМолимо изаберите нову или кликните „{{int:resetpass-submit-cancel}}“ да ресетујете касније.",
        "passwordreset": "Обнављање лозинке",
        "passwordreset-text-one": "Попуните овај образац да бисте ресетовали лозинку.",
        "passwordreset-text-many": "{{PLURAL:$1|Испуните једно од поља како би сте добили привремену лозинку на е-пошту.}}",
        "changeemail-submit": "Промени",
        "changeemail-cancel": "Откажи",
        "changeemail-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
-       "resettokens": "Ресетује токене",
+       "resettokens": "Ресетовање токена",
        "resettokens-no-tokens": "Нема токена за ресетовање.",
-       "resettokens-legend": "Ресетује токене",
+       "resettokens-legend": "Ресетовање токена",
        "resettokens-tokens": "Токени:",
        "resettokens-token-label": "$1 (тренутна вредност: $2)",
        "resettokens-watchlist-token": "Токен за веб довод (Atom/RSS) вашег [[Special:Watchlist|списка надгледања]]",
        "link_sample": "Наслов везе",
        "link_tip": "Унутрашња веза",
        "extlink_sample": "http://www.primer.com наслов везе",
-       "extlink_tip": "Спољна веза (с предметком ''http://'')",
+       "extlink_tip": "Спољна веза (с предметком http://)",
        "headline_sample": "Наслов",
        "headline_tip": "Поднаслов",
        "nowiki_sample": "Убаците необликован текст овде",
        "session_fail_preview": "'''Нисмо могли да обрадимо вашу измену због губитка података сесије.'''\nПокушајте поново.\nАко и даље не ради, покушајте да се [[Special:UserLogout|одјавите]] и поново пријавите.",
        "session_fail_preview_html": "'''Нисмо могли да обрадимо вашу измену због губитка података сесије.'''\n\n''Будући да је на овом викију омогућен унос HTML ознака, преглед је сакривен као мера предострожности против напада преко јаваскрипта.''\n\n'''Ако сте покушали да направите праву измену, покушајте поново.\nАко и даље не ради, покушајте да се [[Special:UserLogout|одјавите]] и поново пријавите.'''",
        "token_suffix_mismatch": "'''Ваша измена је одбачена јер је ваш прегледач убацио знакове интерпункције у новчић уређивања.\nТо се понекад догађа када се користи неисправан посредник.'''",
-       "edit_form_incomplete": "'''Неки делови обрасца за уређивање нису достигли до сервера. Проверите да ли су измене промењене и покушајте поново.'''",
+       "edit_form_incomplete": "<strong>Неки делови обрасца за уређивање нису стигли до сервера. Проверите да ли су ваше измене непромењене и покушајте поново.</strong>",
        "editing": "Уређујете $1",
        "creating": "Прављење странице $1",
        "editingsection": "Уређујете $1 (одељак)",
        "yourtext": "Ваш текст",
        "storedversion": "Ускладиштена измена",
        "nonunicodebrowser": "'''Упозорење: ваш прегледач не подржава уникод.'''\nПромените га пре него што почнете с уређивањем.",
-       "editingold": "<div style=\"background: #FFBDBD; border: 1px solid #BB7979; color: #000000; font-weight: bold; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; clear: both;\">Упозорење: Ви уређујете старију ревизију ове странице.<br />\nАко је сачувате, све промене учињене од ове ревизије биће изгубљене.\n</div>",
+       "editingold": "<strong>Упозорење: уређујете застарелу измену ове странице.</strong>\nАко је сачувате, све новије измене ће бити изгубљене.",
        "yourdiff": "Разлике",
        "copyrightwarning": "Имајте на уму да се сви доприноси на овом викију сматрају као објављени под лиценцом $2 (више на $1).\nАко не желите да се ваши текстови мењају и размењују без ограничења, онда их не шаљите овде.<br />\nИсто тако обећавате да сте ви аутор текста, или да сте га умножили с извора који је у јавном власништву.\n'''Не шаљите радове заштићене ауторским правима без дозволе!'''",
        "copyrightwarning2": "Имајте на уму да се сви доприноси на овом викију могу мењати, враћати или брисати од других корисника.\nАко не желите да се ваши текстови слободно мењају и расподељују, не шаљите их овде.<br />\nИсто тако обећавате да сте ви аутор текста, или да сте га умножили с извора који је у јавном власништву (више на $1).\n'''Не шаљите радове заштићене ауторским правима без дозволе!'''",
        "longpageerror": "'''Грешка: текст који сте унели је величине {{PLURAL:$1|један килобајт|$1 килобајта|$1 килобајта}}, што је веће од {{PLURAL:$2|дозвољеног једног килобајта|дозвољена $2 килобајта|дозвољених $2 килобајта}}.'''\nСтраница не може бити сачувана.",
        "readonlywarning": "'''Упозорење: база података је закључана ради одржавања, тако да тренутно нећете моћи да сачувате измене.'''\nМожда бисте желели сачувати текст за касније у некој текстуалној датотеци.\n\nАдминистратор који је закључао базу дао је следеће објашњење: $1",
-       "protectedpagewarning": "'''Упозорење: ова страница је заштићена, тако да само администратори могу да је мењају.'''\nПоследња ставка у историји је приказана испод:",
+       "protectedpagewarning": "<strong>Упозорење: ова страница је заштићена, тако да само администратори могу да је мењају.</strong>\nПоследњи запис у дневнику је приказан испод:",
        "semiprotectedpagewarning": "'''Напомена:''' ова страница је заштићена, тако да само регистровани корисници могу да је уређују.\nПоследњи запис у дневнику је приказан испод:",
-       "cascadeprotectedwarning": "<div style=\"background: #FFBDBD; border: 1px solid #BB7979; color: #000000; font-weight: bold; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; clear: both;\">'''Упозорење:''' Ова страница је заштићена тако да је могу уређивати само администратори, јер је она укључена у {{PLURAL:$1|следећу страницу која је|следеће странице које су}} заштићене „преносивом“ заштитом:</div>",
+       "cascadeprotectedwarning": "<strong>Упозорење:</strong> ова страница је заштићена тако да је могу уређивати само администратори, јер је она укључена у {{PLURAL:$1|следећу страницу која је|следеће странице које су}} заштићене „преносивом“ заштитом:",
        "titleprotectedwarning": "'''Упозорење: ова страница је заштићена тако да је могу направити само корисници [[Special:ListGroupRights|с одређеним правима]].'''",
        "templatesused": "{{PLURAL:$1|Шаблон|Шаблони}} на овој страници:",
        "templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} у овом прегледу:",
        "parser-unstrip-recursion-limit": "Прекорачено је ограничење рекурзије ($1)",
        "converter-manual-rule-error": "Пронађена је грешка у правилу за ручно претварање језика",
        "undo-success": "Измена се може вратити.\nПроверите разлике испод, па сачувајте измене.",
-       "undo-failure": "Ова измена се не може поништити због конфликта измена.",
+       "undo-failure": "Ова измена се не може поништити због сукоба измена.",
        "undo-norev": "Не могу да вратим измену јер не постоји или је обрисана.",
        "undo-nochange": "Изгледа да је измена већ поништена.",
        "undo-summary": "Поништена измена $1 {{GENDER:$2|корисника|кориснице}} [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]])",
        "currentrev": "Текућа измена",
        "currentrev-asof": "Текућа измена од $2 у $3",
        "revisionasof": "Измена од $2 у $3",
-       "revision-info": "Измена од $1; $2",
+       "revision-info": "Измена од $1; {{GENDER:$6|$2}}$7",
        "previousrevision": "← Старија измена",
        "nextrevision": "Новија измена →",
        "currentrevisionlink": "Текућа измена",
        "last": "разл",
        "page_first": "прва",
        "page_last": "последња",
-       "histlegend": "Избор разлика: изаберите кутијице измена за упоређивање и притисните ентер или дугме на дну.<br />\nОбјашњење: '''({{int:cur}})''' – разлика с тренутном изменом,\n'''({{int:last}})''' – разлика с претходном изменом, '''{{int:minoreditletter}}''' – мала измена",
+       "histlegend": "Избор разлика: изаберите кутијице измена за упоређивање и притисните ентер или дугме на дну.<br />\nОбјашњење: <strong>({{int:cur}})</strong> – разлика с тренутном изменом,\n<strong>({{int:last}})</strong> – разлика с претходном изменом, <strong>{{int:minoreditletter}}</strong> – мала измена",
        "history-fieldset-title": "Преглед историје",
        "history-show-deleted": "Само обрисано",
        "histfirst": "најстарије",
        "showhideselectedversions": "Прикажи/сакриј изабране измене",
        "editundo": "поништи",
        "diff-empty": "(Нема разлике)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Једна међуизмена истог корисника није приказана|$1 међуизмена истог корисника није приказано}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|Једна међуизмена|$1 међуизмена}} од стране {{PLURAL:$2|још једног корисника није приказана|$2 корисника није приказано}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Није приказана међуизмена|Нису приказане $1 међуизмене|Није приказано $1 међуизмена}} од више од $2 корисника)",
        "difference-missing-revision": "Не могу да пронађем {{PLURAL:$2|једну измену|$2 измене|$2 измена}} од ове разлике ($1).\n\nОво се обично дешава када пратите застарелу везу до странице која је обрисана.\nВише информација можете пронаћи у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневнику брисања].",
        "searchresults": "Резултати претраге",
        "searchmenu-exists": "'''Постоји и чланак под називом „[[:$1]]“.'''",
        "searchmenu-new": "<strong>Направите страницу „[[:$1]]“!</strong> {{PLURAL:$2|0=|Види такође разултате претраге.}}",
        "searchprofile-articles": "Чланци",
-       "searchprofile-project": "Странице помоћи и пројеката",
        "searchprofile-images": "Датотеке",
        "searchprofile-everything": "Све",
        "searchprofile-advanced": "Напредно",
        "searchprofile-articles-tooltip": "Претражите: $1",
-       "searchprofile-project-tooltip": "Претражите: $1",
        "searchprofile-images-tooltip": "Претражите датотеке",
        "searchprofile-everything-tooltip": "Претражите сав садржај (укључујући странице за разговор)",
        "searchprofile-advanced-tooltip": "Претражите прилагођене именске просторе",
        "search-interwiki-default": "Резултати са $1:",
        "search-interwiki-more": "(више)",
        "search-relatedarticle": "Повезано",
-       "searcheverything-enable": "сви именски простори",
        "searchrelated": "повезано",
        "searchall": "све",
        "showingresults": "Испод {{PLURAL:$1|је приказан <strong>1</strong> резултат|су приказана <strong>$1</strong> резултата|је приказано <strong>$1</strong> резултата}} почев од броја <strong>$2</strong>.",
        "powersearch-togglelabel": "Изабери:",
        "powersearch-toggleall": "све",
        "powersearch-togglenone": "ништа",
+       "powersearch-remember": "Запамти мој избор за будуће претраге",
        "search-external": "Спољна претрага",
        "searchdisabled": "Претрага је онемогућена.\nУ међувремену можете тражити преко Гугла.\nУпамтите да његови пописи овог викија могу бити застарели.",
        "search-error": "Дошло је до грешке приликом претраге: $1",
        "allowemail": "Омогући примање е-порука од других корисника",
        "prefs-searchoptions": "Претрага",
        "prefs-namespaces": "Именски простори",
-       "defaultns": "Ако није наведено другачије, тражи у овим именским просторима:",
        "default": "подразумевано",
        "prefs-files": "Датотеке",
        "prefs-custom-css": "Прилагођени CSS",
        "right-edituserjs": "уређивање туђих JavaScript датотека",
        "right-editmyusercss": "уређивање сопствених CSS датотека",
        "right-editmyuserjs": "уређивање сопствених JavaScript датотека",
-       "right-viewmywatchlist": "Види списак надгледања",
+       "right-viewmywatchlist": "vidi sopstveni spisak nadgledanja",
        "right-viewmyprivateinfo": "видите своје личне податке (нпр. адресу е-поште, право име)",
        "right-editmyprivateinfo": "уређивање сопствених личних података (нпр. адресу е-поште, право име)",
        "right-editmyoptions": "уредите своја подешавања",
        "action-siteadmin": "закључавање или откључавање базе података",
        "action-sendemail": "слање е-порука",
        "action-editmywatchlist": "измени свој списак надгледања",
-       "action-viewmywatchlist": "види списак надгледања",
+       "action-viewmywatchlist": "пÑ\80еглед Ð²Ð°Ñ\88ег списак надгледања",
        "action-viewmyprivateinfo": "прегледање ваших личних података",
        "action-editmyprivateinfo": "уређивање ваших личних података",
        "nchanges": "$1 {{PLURAL:$1|измена|измене|измена}}",
        "recentchanges-label-unpatrolled": "Ова измена још није патролирана",
        "recentchanges-label-plusminus": "Промена величине странице у бајтовима",
        "recentchanges-legend-heading": "'''Легенда:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|списак нових страница]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|списак нових страница]])",
        "rcnotefrom": "Испод су измене од <strong>$2</strong> (до <strong>$1</strong> измена).",
        "rclistfrom": "Прикажи нове измене почев од $2 $3",
        "rcshowhideminor": "$1 мање измене",
        "download": "преузми",
        "unwatchedpages": "Ненадгледане странице",
        "listredirects": "Списак преусмерења",
-       "listduplicatedfiles": "Списак дупликата датотека",
+       "listduplicatedfiles": "Списак дуплираних датотека",
        "listduplicatedfiles-summary": "Ово је списак датотека које су дупликат неких других датотека. Само локалне датотеке су приказане.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] има [[$3|{{PLURAL:$2|један дупликат|$2 дупликата}}]].",
        "unusedtemplates": "Некоришћени шаблони",
        "mostlinked": "Странице с највише веза",
        "mostlinkedcategories": "Чланци с највише категорија",
        "mostlinkedtemplates": "Шаблони с највише веза",
-       "mostcategories": "ЧланÑ\86и с највише категорија",
+       "mostcategories": "СÑ\82Ñ\80аниÑ\86е с највише категорија",
        "mostimages": "Датотеке с највише веза",
        "mostinterwikis": "Странице са највише међувикија",
        "mostrevisions": "Странице с највише измена",
        "emailuser-title-notarget": "Слање е-поруке кориснику",
        "emailpage": "Слање е-порука",
        "emailpagetext": "Можете да користите доњи образац да пошаљете е-поруку {{GENDER:$1|овом кориснику|овој корисници|овом кориснику|}}.\nЕ-адреса коју сте унели у вашим [[Special:Preferences|подешавањима]] ће се приказати у пољу „Од“, тако да ће прималац моћи да вам одговори директно.",
-       "defemailsubject": "{{SITENAME}} е-адреса {{GENDER:$1|корисника|кориснице|корисника}} $1",
+       "defemailsubject": "{{SITENAME}} — Е-пошта од {{GENDER:$1|корисника|кориснице}} $1",
        "usermaildisabled": "Корисничка е-пошта је онемогућена",
        "usermaildisabledtext": "Не можете да шаљете е-поруке другим корисницима на овом викију",
        "noemailtitle": "Нема е-адресе",
        "watchnologin": "Нисте пријављени",
        "addwatch": "Додај на списак надгледања",
        "addedwatchtext": "Страница „[[:$1]]“ је додата на ваш [[Special:Watchlist|списак надгледања]].\nБудуће измене ове странице и њене странице за разговор биће наведене тамо.",
+       "addedwatchtext-short": "Страница „$1“ је додата на ваш списак надгледања.",
        "removewatch": "Уклони са списка надгледања",
        "removedwatchtext": "Страница „[[:$1]]“ је уклоњена с вашег [[Special:Watchlist|списка надгледања]].",
+       "removedwatchtext-short": "Страница „$1“ је уклоњена с вашег списка надгледања.",
        "watch": "Надгледај",
        "watchthispage": "Надгледај ову страницу",
        "unwatch": "Прекини надгледање",
        "enotif_lastvisited": "Погледајте $1 за све измене од ваше последње посете.",
        "enotif_lastdiff": "Погледајте $1 да видите ову измену.",
        "enotif_anon_editor": "анониман корисник $1",
-       "enotif_body": "Поштовани $WATCHINGUSERNAME,\n\n\nСтраница $PAGETITLE на викију {{SITENAME}} је $CHANGEDORCREATED дана $PAGEEDITDATE од стране {{GENDER:$PAGEEDITOR|корисника|кориснице|корисника}} $PAGEEDITOR. Погледајте $PAGETITLE_URL за текућу измену.\n\n$NEWPAGE\n\nОпис: $PAGESUMMARY $PAGEMINOREDIT\n\nКонтакт:\nе-адреса: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\n\nНеће бити других обавештења у случају даљих измена уколико не посетите ову страницу.\nМожете и да поништите поставке обавештења за све странице у вашем списку надгледања.\n\nСрдачан поздрав, {{SITENAME}}\n\n--\nДа бисте променили поставке у вези са е-обавештењима, посетите\n{{canonicalurl:{{#special:Preferences}}}}\n\nДа бисте променили поставке у вези са списком надгледања, посетите\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nДа бисте уклонили ову страницу са списка надгледања, посетите\n$UNWATCHURL\n\nПодршка и даља помоћ:\n$HELPPAGE",
+       "enotif_body": "Поштовани $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nОпис: $PAGESUMMARY $PAGEMINOREDIT\n\nКонтакт:\nе-пошта: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\n\nНеће бити других обавештења у случају даљих измена уколико не посетите ову страницу када сте пријављени.\nМожете и да поништите поставке обавештења за све странице у вашем списку надгледања.\n\nСрдачан поздрав, {{SITENAME}}\n\n--\nДа бисте променили поставке у вези са е-обавештењима, посетите\n{{canonicalurl:{{#special:Preferences}}}}\n\nДа бисте променили поставке у вези са списком надгледања, посетите\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nДа бисте уклонили ову страницу са списка надгледања, посетите\n$UNWATCHURL\n\nПодршка и даља помоћ:\n$HELPPAGE",
        "created": "направљена",
        "changed": "измењена",
        "deletepage": "Обриши страницу",
        "ipblocklist-localblock": "Локално блокирање",
        "ipblocklist-otherblocks": "{{PLURAL:$1|Друго блокирање|Друга блокирања}}",
        "infiniteblock": "трајно",
-       "expiringblock": "истиче дана $1 у $2",
+       "expiringblock": "истиче $1 у $2",
        "anononlyblock": "само анонимни",
        "noautoblockblock": "аутоматско блокирање је онемогућено",
        "createaccountblock": "отварање налога је блокирано",
        "movepagetalktext": "Одговарајућа страница за разговор, ако постоји, биће аутоматски премештена заједно с њом, осим ако:\n*Већ постоји страница за разговор с новим насловом, или\n*Ако је означено доленаведено поље.\n\nУ овом случају мора ручно да се премести или споји, ако има потребе за тим.",
        "movearticle": "Премести страницу:",
        "moveuserpage-warning": "'''Упозорење:''' на путу сте да преместите корисничку страницу. Имајте у виду да ће само страница бити премештена, а сам корисник ''неће'' бити преименован.",
+       "movecategorypage-warning": "<strong>Упозорење:</strong> премештате страницу категорије. Имајте на уму да ће само страница бити премештена и да све странице у старој категорији <em>неће</em> бити рекатегорисане у нову категорију.",
        "movenologintext": "Морате да будете регистровани и [[Special:UserLogin|пријављени]] да бисте премештали странице.",
        "movenotallowed": "Немате дозволу да премештате странице.",
        "movenotallowedfile": "Немате дозволу да премештате датотеке.",
        "tooltip-preferences-save": "Сачувај поставке",
        "tooltip-summary": "Унесите кратак опис",
        "common.css": "/** CSS постављен овде ће се одразити на све теме */",
-       "cologneblue.css": "/* CSS постављен овде ће утицати на све кориснике теме „Келнско плава“ */",
        "monobook.css": "/* CSS постављен овде ће утицати на све кориснике теме „Монобук“ */",
-       "modern.css": "/* CSS постављен овде ће утицати на све кориснике теме „Савремено“ */",
        "vector.css": "/* CSS постављен овде ће утицати на све кориснике теме „Векторско“ */",
        "print.css": "/* CSS постављен овде ће утицати на издање за штампу */",
        "noscript.css": "/* CSS постављен овде ће утицати на све кориснике којима је онемогућен јаваскрипт */",
        "group-sysop.css": "/* CSS постављен овде ће утицати само на системске операторе */",
        "group-bureaucrat.css": "/* CSS постављен овде ће утицати само на бирократе */",
        "common.js": "/* Јаваскрипт постављен овде ће се користити за све кориснике при отварању сваке странице. */",
-       "cologneblue.js": "/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Келнско плава“ */",
        "monobook.js": "/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Монобук“ */",
-       "modern.js": "/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Савремено“ */",
        "vector.js": "/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Векторско“ */",
        "group-autoconfirmed.js": "/* Јаваскрипт постављен овде ће се учитати за самопотврђене кориснике */",
        "group-bot.js": "/* Јаваскрипт постављен овде ће се учитати само за ботове */",
        "pageinfo-category-pages": "Број страница",
        "pageinfo-category-subcats": "Број поткатегорија",
        "pageinfo-category-files": "Број датотека",
-       "skinname-cologneblue": "Келнско плава",
        "skinname-monobook": "Монобук",
-       "skinname-modern": "Савремено",
        "skinname-vector": "Векторско",
        "markaspatrolleddiff": "Означи као патролирано",
        "markaspatrolledtext": "Означи страницу као патролирану",
        "newimages-summary": "Ова посебна страница приказује последње послате датотеке.",
        "newimages-legend": "Филтер",
        "newimages-label": "Назив датотеке (или њен део):",
+       "newimages-showbots": "Прикажи датотеке које су послали ботови",
        "noimages": "Нема ништа.",
        "ilsubmit": "Претражи",
        "bydate": "по датуму",
        "watchlistedit-normal-submit": "Уклони",
        "watchlistedit-normal-done": "{{PLURAL:$1|Једна страница је уклоњена|$1 странице су уклоњене|$1 страница је уклоњено}} с вашег списка надгледања:",
        "watchlistedit-raw-title": "Измени сиров списак надгледања",
-       "watchlistedit-raw-legend": "Ð\9dапÑ\80едно Ñ\83Ñ\80еÑ\92иваÑ\9aе Ñ\81пиÑ\81ка надгледања",
+       "watchlistedit-raw-legend": "Ð\98змени Ñ\81иÑ\80ов Ñ\81пиÑ\81ак надгледања",
        "watchlistedit-raw-explain": "Наслови са списка надгледања су приказани испод и могу се уређивати додавањем или уклањањем ставки са списка;\nједан наслов по реду.\nКада завршите, кликните на „{{int:Watchlistedit-raw-submit}}“.\nМожете да [[Special:EditWatchlist|користите и обичан уређивач]].",
        "watchlistedit-raw-titles": "Наслови:",
        "watchlistedit-raw-submit": "Ажурирај списак",
        "watchlistedit-raw-done": "Ваш списак надгледања је ажуриран.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Додат је један наслов|Додата су $1 наслова|Додато је $1 наслова}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 наслов је уклоњен|Уклоњена су $1 наслова|Уклоњено је $1 наслова}}:",
+       "watchlistedit-clear-title": "Испразни списак надгледања",
+       "watchlistedit-clear-legend": "Испразни списак надгледања",
+       "watchlistedit-clear-explain": "Сви наслови ће бити уклоњени из вашег списка надгледања.",
+       "watchlistedit-clear-titles": "Наслови:",
+       "watchlistedit-clear-submit": "Испразни списак надгледања (Ово је трајно!)",
+       "watchlistedit-clear-done": "Ваш списак надгледања је испражњен.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 наслов је уклоњен|$1 наслова је уклоњено}}:",
+       "watchlisttools-clear": "испразни списак ндгледања",
        "watchlisttools-view": "прикажи сродне измене",
        "watchlisttools-edit": "прикажи и уреди списак надгледања",
        "watchlisttools-raw": "измени сиров списак надгледања",
        "version-entrypoints": "Адресе улазне тачке",
        "version-entrypoints-header-entrypoint": "Улазна тачка",
        "version-entrypoints-header-url": "Адреса",
+       "redirect": "Преусмерење на датотеку, корисника, страницу или измену",
        "redirect-legend": "Преусмери на датотеку или страницу",
        "redirect-submit": "Иди",
+       "redirect-lookup": "Тип вредности:",
        "redirect-value": "Вредност:",
-       "redirect-user": "Кориснички ID:",
+       "redirect-user": "Кориснички ID",
        "redirect-page": "ID странице",
+       "redirect-revision": "Верзија странице",
        "redirect-file": "Назив датотеке",
        "redirect-not-exists": "Вредност није пронађена",
        "fileduplicatesearch": "Претрага дупликата",
        "duration-decades": "$1 {{PLURAL:$1|деценија|деценије|деценија}}",
        "duration-centuries": "$1 {{PLURAL:$1|век|века|векова}}",
        "duration-millennia": "$1 {{PLURAL:$1|миленијум|миленијума|миленијума}}",
-       "rotate-comment": "Слика је ротирана у смеру казаљке на сату за {{PLURAL:$1|степени}}",
+       "rotate-comment": "Слика је ротирана за $1° у смеру казаљке на сату",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунд|секунди}}",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунди}}",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|бајт|бајта|бајтова}}",
index 7ac235d..138f012 100644 (file)
        },
        "tog-underline": "Podvlačenje veza:",
        "tog-hideminor": "Sakrij manje izmene u spisku skorašnjih izmena",
-       "tog-hidepatrolled": "Sakrij pregledane izmene u spisku skorašnjih izmena",
-       "tog-newpageshidepatrolled": "Sakrij pregledane stranice sa spiska novih stranica",
+       "tog-hidepatrolled": "Sakrij patrolirane izmene u spisku skorašnjih izmena",
+       "tog-newpageshidepatrolled": "Sakrij patrolirane stranice sa spiska novih stranica",
        "tog-extendwatchlist": "Proširi spisak nadgledanja za prikaz svih izmena, ne samo skorašnjih",
        "tog-usenewrc": "Promene u grupi po stranici u spisku skorašnjih izmena i nadgledanih stranica",
-       "tog-numberheadings": "Samostalno numeriši podnaslove",
+       "tog-numberheadings": "Automatski numeriši podnaslove",
        "tog-showtoolbar": "Prikaži traku s alatkama za uređivanje",
        "tog-editondblclick": "Uređivanje stranica dvostrukim klikom",
        "tog-editsectiononrightclick": "Uređivanje odeljaka desnim klikom na njihove naslove",
        "vector-view-view": "Čitaj",
        "vector-view-viewsource": "Izvorni kod",
        "actions": "Radnje",
+       "vector-more-actions": "Više",
        "namespaces": "Imenski prostori",
        "variants": "Varijante",
        "navigation-heading": "Navigacioni meni",
        "jumptonavigation": "navigaciju",
        "jumptosearch": "pretragu",
        "view-pool-error": "Nažalost, serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da pregleda ovu stranicu.\nSačekajte neko vreme pre nego što ponovo pokušate da joj pristupite.\n\n$1",
+       "generic-pool-error": "Nažalost, serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da vidi ovaj resurs.\nSačekajte neko vreme pre nego što ponovo pokušate da mu pristupite.",
        "pool-timeout": "Istek vremena čeka na zaključavanje",
        "pool-queuefull": "Red je pun zahteva",
        "pool-errorunknown": "Nepoznata greška",
        "virus-unknownscanner": "nepoznati antivirus:",
        "logouttext": "'''Odjavljeni ste.'''\n\nImajte na umu da neke stranice mogu nastaviti da se prikazuju kao da ste još prijavljeni, sve dok ne očistite privremenu memoriju svog pregledača.",
        "welcomeuser": "Dobrodošli, $1!",
+       "welcomecreation-msg": "Vaš nalog je otvoren.\nNe zaboravite da promenite svoja [[Special:Preferences|podešavanja]].",
        "yourname": "Korisničko ime:",
        "userlogin-yourname": "Korisničko ime",
        "userlogin-yourname-ph": "Unesite vaše korisničko ime",
        "retypenew": "Potvrda lozinke:",
        "resetpass_submit": "Postavi lozinku i prijavi me",
        "changepassword-success": "Vaša lozinka je uspešno promenjena.",
+       "changepassword-throttled": "Previše puta ste pokušali da se prijavite.\nMolimo vas da sačekate $1 pre nego što pokušate ponovo.",
        "resetpass_forbidden": "Lozinka ne može biti promenjena",
        "resetpass-no-info": "Morate biti prijavljeni da biste pristupili ovoj stranici.",
        "resetpass-submit-loggedin": "Promeni lozinku",
        "resetpass-abort-generic": "Promenu lozinke je sprečio dodatak.",
        "resetpass-expired": "Vaša lozinka je istekla. Postavite novu lozinku da biste se prijavili.",
        "resetpass-expired-soft": "Vaša lozinka je istekla i morate postaviti novu. Postavite novu lozinku ili kliknite „{{int:resetpass-submit-cancel}}“ da je postavite kasnije.",
+       "resetpass-validity-soft": "Vaša lozinka nije valjana: $1\n\nMolimo izaberite novu ili kliknite „{{int:resetpass-submit-cancel}}“ da resetujete kasnije.",
        "passwordreset": "Obnavljanje lozinke",
        "passwordreset-text-one": "Popunite ovaj obrazac da biste resetovali lozinku.",
        "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako bi ste dobili privremenu lozinku na e-poštu.}}",
        "changeemail-oldemail": "Trenutna e-adresa:",
        "changeemail-newemail": "Nova e-adresa:",
        "changeemail-none": "(ništa)",
+       "changeemail-password": "Vaša lozinka:",
        "changeemail-submit": "Promeni",
        "changeemail-cancel": "Otkaži",
+       "changeemail-throttled": "Previše puta ste pokušali da se prijavite.\nMolimo vas da sačekate $1 pre nego što pokušate ponovo.",
+       "resettokens": "Resetovanje tokena",
+       "resettokens-no-tokens": "Nema tokena za resetovanje.",
+       "resettokens-legend": "Resetovanje tokena",
+       "resettokens-tokens": "Tokeni:",
        "resettokens-token-label": "$1 (trenutna vrednost: $2)",
+       "resettokens-watchlist-token": "Token za veb dovod (Atom/RSS) vašeg [[Special:Watchlist|spiska nadgledanja]]",
+       "resettokens-done": "Tokeni su resetovani",
+       "resettokens-resetbutton": "Resetuj izabrane tokene",
        "bold_sample": "Podebljan tekst",
        "bold_tip": "Podebljan tekst",
        "italic_sample": "Iskošeni tekst",
        "link_sample": "Naslov veze",
        "link_tip": "Unutrašnja veza",
        "extlink_sample": "http://www.primer.com naslov veze",
-       "extlink_tip": "Spoljna veza (s predmetkom ''http://'')",
+       "extlink_tip": "Spoljna veza (s predmetkom http://)",
        "headline_sample": "Naslov",
        "headline_tip": "Podnaslov",
        "nowiki_sample": "Ubacite neoblikovan tekst ovde",
        "session_fail_preview": "'''Nismo mogli da obradimo vašu izmenu zbog gubitka podataka sesije.'''\nPokušajte ponovo.\nAko i dalje ne radi, pokušajte da se [[Special:UserLogout|odjavite]] i ponovo prijavite.",
        "session_fail_preview_html": "'''Nismo mogli da obradimo vašu izmenu zbog gubitka podataka sesije.'''\n\n''Budući da je na ovom vikiju omogućen unos HTML oznaka, pregled je sakriven kao mera predostrožnosti protiv napada preko javaskripta.''\n\n'''Ako ste pokušali da napravite pravu izmenu, pokušajte ponovo.\nAko i dalje ne radi, pokušajte da se [[Special:UserLogout|odjavite]] i ponovo prijavite.'''",
        "token_suffix_mismatch": "'''Vaša izmena je odbačena jer je vaš pregledač ubacio znakove interpunkcije u novčić uređivanja.\nTo se ponekad događa kada se koristi neispravan posrednik.'''",
-       "edit_form_incomplete": "'''Neki delovi obrasca za uređivanje nisu dostigli do servera. Proverite da li su izmene promenjene i pokušajte ponovo.'''",
+       "edit_form_incomplete": "<strong>Neki delovi obrasca za uređivanje nisu stigli do servera. Proverite da li su vaše izmene nepromenjene i pokušajte ponovo.</strong>",
        "editing": "Uređujete $1",
        "creating": "Pravljenje stranice $1",
        "editingsection": "Uređujete $1 (odeljak)",
        "yourtext": "Vaš tekst",
        "storedversion": "Uskladištena izmena",
        "nonunicodebrowser": "'''Upozorenje: vaš pregledač ne podržava unikod.'''\nPromenite ga pre nego što počnete s uređivanjem.",
-       "editingold": "<div style=\"background: #FFBDBD; border: 1px solid #BB7979; color: #000000; font-weight: bold; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; clear: both;\">Upozorenje: Vi uređujete stariju reviziju ove stranice.<br />\nAko je sačuvate, sve promene učinjene od ove revizije biće izgubljene.\n</div>",
+       "editingold": "<strong>Upozorenje: uređujete zastarelu izmenu ove stranice.</strong>\nAko je sačuvate, sve novije izmene će biti izgubljene.",
        "yourdiff": "Razlike",
        "copyrightwarning": "Imajte na umu da se svi doprinosi na ovom vikiju smatraju kao objavljeni pod licencom $2 (više na $1).\nAko ne želite da se vaši tekstovi menjaju i razmenjuju bez ograničenja, onda ih ne šaljite ovde.<br />\nIsto tako obećavate da ste vi autor teksta, ili da ste ga umnožili s izvora koji je u javnom vlasništvu.\n'''Ne šaljite radove zaštićene autorskim pravima bez dozvole!'''",
        "copyrightwarning2": "Imajte na umu da se svi doprinosi na ovom vikiju mogu menjati, vraćati ili brisati od drugih korisnika.\nAko ne želite da se vaši tekstovi slobodno menjaju i raspodeljuju, ne šaljite ih ovde.<br />\nIsto tako obećavate da ste vi autor teksta, ili da ste ga umnožili s izvora koji je u javnom vlasništvu (više na $1).\n'''Ne šaljite radove zaštićene autorskim pravima bez dozvole!'''",
        "longpageerror": "'''Greška: tekst koji ste uneli je veličine {{PLURAL:$1|jedan kilobajt|$1 kilobajta|$1 kilobajta}}, što je veće od {{PLURAL:$2|dozvoljenog jednog kilobajta|dozvoljena $2 kilobajta|dozvoljenih $2 kilobajta}}.'''\nStranica ne može biti sačuvana.",
        "readonlywarning": "<strong>Upozorenje: baza podataka je zaključana radi održavanja, tako da trenutno nećete moći da sačuvate izmene.</strong>\nMožda biste želeli sačuvati tekst za kasnije u nekoj tekstualnoj datoteci.\n\nAdministrator koji je zaključao bazu dao je sledeće objašnjenje: $1",
-       "protectedpagewarning": "'''Upozorenje: ova stranica je zaštićena, tako da samo administratori mogu da je menjaju.'''\nPoslednja stavka u istoriji je prikazana ispod:",
+       "protectedpagewarning": "<strong>Upozorenje: ova stranica je zaštićena, tako da samo administratori mogu da je menjaju.</strong>\nPoslednji zapis u dnevniku je prikazan ispod:",
        "semiprotectedpagewarning": "'''Napomena:''' ova stranica je zaštićena, tako da samo registrovani korisnici mogu da je uređuju.\nPoslednji zapis u dnevniku je prikazan ispod:",
-       "cascadeprotectedwarning": "<div style=\"background: #FFBDBD; border: 1px solid #BB7979; color: #000000; font-weight: bold; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; clear: both;\">'''Upozorenje:''' Ova stranica je zaštićena tako da je mogu uređivati samo administratori, jer je ona uključena u {{PLURAL:$1|sledeću stranicu koja je|sledeće stranice koje su}} zaštićene „prenosivom“ zaštitom:</div>",
+       "cascadeprotectedwarning": "<strong>Upozorenje:</strong> ova stranica je zaštićena tako da je mogu uređivati samo administratori, jer je ona uključena u {{PLURAL:$1|sledeću stranicu koja je|sledeće stranice koje su}} zaštićene „prenosivom“ zaštitom:",
        "titleprotectedwarning": "'''Upozorenje: ova stranica je zaštićena tako da je mogu napraviti samo korisnici [[Special:ListGroupRights|s određenim pravima]].'''",
        "templatesused": "{{PLURAL:$1|Šablon|Šabloni}} na ovoj stranici:",
        "templatesusedpreview": "{{PLURAL:$1|Šablon|Šabloni}} u ovom pregledu:",
        "edit-gone-missing": "Ne mogu da ažuriram stranicu.\nIzgleda da je obrisana.",
        "edit-conflict": "Sukob izmena.",
        "edit-no-change": "Vaša izmena je zanemarena jer nije bilo nikakvih izmena u tekstu.",
+       "postedit-confirmation-created": "Stranica je napravljena.",
+       "postedit-confirmation-restored": "Stranica je vraćena.",
        "postedit-confirmation-saved": "Vaša izmena je sačuvana.",
        "edit-already-exists": "Ne mogu da napravim stranicu.\nIzgleda da ona već postoji.",
        "defaultmessagetext": "Podrazumevani tekst poruke",
        "invalid-content-data": "Neispravni podaci sadržaja",
        "content-not-allowed-here": "Sadržaj modela „$1“ nije dozvoljen na stranici [[$2]]",
        "editwarning-warning": "Ako napustite ovu stranicu, izgubićete sve izmene koje ste napravili.\nAko ste prijavljeni, možete onemogućiti ovo upozorenje u svojim podešavanjima, u odeljku „{{int:prefs-editing}}“.",
+       "editpage-notsupportedcontentformat-title": "Format sadržaja nije podržan",
        "content-model-wikitext": "vikitekst",
        "content-model-text": "čist tekst",
        "content-model-javascript": "javaskript",
        "parser-unstrip-recursion-limit": "Prekoračeno je ograničenje rekurzije ($1)",
        "converter-manual-rule-error": "Pronađena je greška u pravilu za ručno pretvaranje jezika",
        "undo-success": "Izmena se može vratiti.\nProverite razlike ispod, pa sačuvajte izmene.",
-       "undo-failure": "Ova izmena se ne može poništiti zbog konflikta izmena.",
+       "undo-failure": "Ova izmena se ne može poništiti zbog sukoba izmena.",
        "undo-norev": "Ne mogu da vratim izmenu jer ne postoji ili je obrisana.",
+       "undo-nochange": "Izgleda da je izmena već poništena.",
        "undo-summary": "Poništena izmena $1 {{GENDER:$2|korisnika|korisnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]])",
        "undo-summary-username-hidden": "Poništi izmenu $1 skrivenog korisnika",
        "cantcreateaccounttitle": "Ne mogu da otvorim nalog",
        "currentrev": "Tekuća izmena",
        "currentrev-asof": "Tekuća izmena od $2 u $3",
        "revisionasof": "Izmena od $2 u $3",
-       "revision-info": "Izmena od $1; $2",
+       "revision-info": "Izmena od $1; {{GENDER:$6|$2}}$7",
        "previousrevision": "← Starija izmena",
        "nextrevision": "Novija izmena →",
        "currentrevisionlink": "Tekuća izmena",
        "last": "razl",
        "page_first": "prva",
        "page_last": "poslednja",
-       "histlegend": "Izbor razlika: izaberite kutijice izmena za upoređivanje i pritisnite enter ili dugme na dnu.<br />\nObjašnjenje: '''({{int:cur}})''' – razlika s trenutnom izmenom,\n'''({{int:last}})''' – razlika s prethodnom izmenom, '''{{int:minoreditletter}}''' – mala izmena",
+       "histlegend": "Izbor razlika: izaberite kutijice izmena za upoređivanje i pritisnite enter ili dugme na dnu.<br />\nObjašnjenje: <strong>({{int:cur}})</strong> – razlika s trenutnom izmenom,\n<strong>({{int:last}})</strong> – razlika s prethodnom izmenom, <strong>{{int:minoreditletter}}</strong> – mala izmena",
        "history-fieldset-title": "Pregled istorije",
        "history-show-deleted": "Samo obrisane",
        "histfirst": "najstarije",
        "showhideselectedversions": "Prikaži/sakrij izabrane izmene",
        "editundo": "poništi",
        "diff-empty": "(Nema razlike)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Jedna međuizmena istog korisnika nije prikazana|$1 međuizmena istog korisnika nije prikazano}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|Jedna međuizmena|$1 međuizmena}} od strane {{PLURAL:$2|još jednog korisnika nije prikazana|$2 korisnika nije prikazano}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Nije prikazana međuizmena|Nisu prikazane $1 međuizmene|Nije prikazano $1 međuizmena}} od više od $2 korisnika)",
        "difference-missing-revision": "Ne mogu da pronađem {{PLURAL:$2|jednu izmenu|$2 izmene|$2 izmena}} od ove razlike ($1).\n\nOvo se obično dešava kada pratite zastarelu vezu do stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
        "searchresults": "Rezultati pretrage",
        "shown-title": "Prikaži $1 {{PLURAL:$1|rezultat|rezultata|rezultata}} po stranici",
        "viewprevnext": "Pogledaj ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Postoji i članak pod nazivom „[[:$1]]“.'''",
-       "searchmenu-new": "'''Napravite stranicu „[[:$1]]“.'''",
+       "searchmenu-new": "<strong>Napravite stranicu „[[:$1]]“!</strong> {{PLURAL:$2|0=|Vidi takođe razultate pretrage.}}",
        "searchprofile-articles": "Članci",
-       "searchprofile-project": "Stranice pomoći i projekata",
        "searchprofile-images": "Datoteke",
        "searchprofile-everything": "Sve",
        "searchprofile-advanced": "Napredno",
        "searchprofile-articles-tooltip": "Pretražite: $1",
-       "searchprofile-project-tooltip": "Pretražite: $1",
        "searchprofile-images-tooltip": "Pretražite datoteke",
        "searchprofile-everything-tooltip": "Pretražite sav sadržaj (uključujući stranice za razgovor)",
        "searchprofile-advanced-tooltip": "Pretražite prilagođene imenske prostore",
        "search-section": "(odeljak $1)",
        "search-suggest": "Da li ste mislili na: $1",
        "search-interwiki-caption": "Bratski projekti",
-       "search-interwiki-default": "$1 rezultati:",
+       "search-interwiki-default": "Rezultati sa $1:",
        "search-interwiki-more": "(više)",
        "search-relatedarticle": "Povezano",
-       "searcheverything-enable": "svi imenski prostori",
        "searchrelated": "povezano",
        "searchall": "sve",
        "showingresults": "Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}} počev od broja <strong>$2</strong>.",
        "powersearch-togglelabel": "Izaberi:",
        "powersearch-toggleall": "sve",
        "powersearch-togglenone": "ništa",
+       "powersearch-remember": "Zapamti moj izbor za buduće pretrage",
        "search-external": "Spoljna pretraga",
        "searchdisabled": "Pretraga je onemogućena.\nU međuvremenu možete tražiti preko Gugla.\nUpamtite da njegovi popisi ovog vikija mogu biti zastareli.",
+       "search-error": "Došlo je do greške prilikom pretrage: $1",
        "preferences": "Podešavanja",
        "mypreferences": "Podešavanja",
        "prefs-edits": "Broj izmena:",
        "allowemail": "Omogući primanje e-poruka od drugih korisnika",
        "prefs-searchoptions": "Pretraga",
        "prefs-namespaces": "Imenski prostori",
-       "defaultns": "Ako nije navedeno drugačije, traži u ovim imenskim prostorima:",
        "default": "podrazumevano",
        "prefs-files": "Datoteke",
        "prefs-custom-css": "Prilagođeni CSS",
        "userrights-changeable-col": "Grupe koje možete da promenite",
        "userrights-unchangeable-col": "Grupe koje ne možete da promenite",
        "userrights-irreversible-marker": "$1*",
+       "userrights-removed-self": "Uspešno ste sebi skinuli prava. Zbog toga nije vam dozvoljen pristup ovoj stranici.",
        "group": "Grupa:",
        "group-user": "Korisnici",
        "group-autoconfirmed": "Automatski potvrđeni korisnici",
        "right-editusercssjs": "uređivanje tuđih CSS i javaskript datoteka",
        "right-editusercss": "uređivanje tuđih CSS datoteka",
        "right-edituserjs": "uređivanje tuđih JavaScript datoteka",
+       "right-editmyusercss": "uređivanje sopstvenih CSS datoteka",
        "right-editmyuserjs": "uređivanje sopstvenih JavaScript datoteka",
+       "right-viewmywatchlist": "vidi sopstveni spisak nadgledanja",
        "right-viewmyprivateinfo": "vidite svoje lične podatke (npr. adresu e-pošte, pravo ime)",
        "right-editmyprivateinfo": "uređivanje sopstvenih ličnih podataka (npr. adresu e-pošte, pravo ime)",
        "right-editmyoptions": "uredite svoja podešavanja",
        "action-createpage": "pravljenje stranica",
        "action-createtalk": "pravljenje stranica za razgovor",
        "action-createaccount": "otvaranje ovog korisničkog naloga",
+       "action-history": "gledanje istorije ove stranice",
        "action-minoredit": "označavanje ove izmene kao manje",
        "action-move": "premesti ovu stranicu",
        "action-move-subpages": "premeštanje ove stranice i njenih podstranica",
        "action-block": "blokiranje daljih izmena ovog korisnika",
        "action-protect": "menjanje stepena zaštite ove stranice",
        "action-rollback": "brzo vraćanje izmena poslednjeg korisnika koji je menjao određenu stranicu",
-       "action-import": "uvoz ove stranice s drugog vikija",
-       "action-importupload": "uvoz ove stranice slanjem datoteke",
+       "action-import": "uvoženje stranica iz drugih vikija",
+       "action-importupload": "uvoženje stranica iz otpremljene datoteke",
        "action-patrol": "označavanje tuđih izmena pregledanim",
        "action-autopatrol": "samooznačavanje izmena pregledanim",
        "action-unwatchedpages": "pregledanje spiska nenadgledanih stranica",
        "action-siteadmin": "zaključavanje ili otključavanje baze podataka",
        "action-sendemail": "slanje e-poruka",
        "action-editmywatchlist": "izmeni svoj spisak nadgledanja",
+       "action-viewmywatchlist": "pregled vašeg spisak nadgledanja",
+       "action-viewmyprivateinfo": "pregledanje vaših ličnih podataka",
+       "action-editmyprivateinfo": "uređivanje vaših ličnih podataka",
        "nchanges": "$1 {{PLURAL:$1|izmena|izmene|izmena}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|izmena od vaše poslednje posete}}",
        "enhancedrc-history": "istorija",
        "recentchanges-label-unpatrolled": "Ova izmena još nije patrolirana",
        "recentchanges-label-plusminus": "Promena veličine stranice u bajtovima",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|spisak novih stranica]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|spisak novih stranica]])",
        "rcnotefrom": "Ispod su izmene od <b>$2</b> (do <b>$1</b> izmena).",
        "rclistfrom": "Prikaži nove izmene počev od $2 $3",
        "rcshowhideminor": "$1 manje izmene",
        "download": "preuzmi",
        "unwatchedpages": "Nenadgledane stranice",
        "listredirects": "Spisak preusmerenja",
+       "listduplicatedfiles": "Spisak dupliranih datoteka",
+       "listduplicatedfiles-summary": "Ovo je spisak datoteka koje su duplikat nekih drugih datoteka. Samo lokalne datoteke su prikazane.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] ima [[$3|{{PLURAL:$2|jedan duplikat|$2 duplikata}}]].",
        "unusedtemplates": "Nekorišćeni šabloni",
        "unusedtemplatestext": "Ova stranica navodi sve stranice u imenskom prostoru {{ns:template}} koje nisu uključene ni na jednoj drugoj stranici.\nPre brisanja proverite da li druge stranice vode do tih šablona.",
        "unusedtemplateswlh": "ostale veze",
        "randompage": "Slučajna stranica",
        "randompage-nopages": "Nema stranica u {{PLURAL:$2|sledećem imenskom prostoru|sledećim imenskim prostorima}}: $1.",
        "randomincategory": "Slučajna stranica u kategoriji",
+       "randomincategory-invalidcategory": "„$1“ nije valjano ime kategorije",
+       "randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
        "randomincategory-selectcategory-submit": "Idi",
        "randomredirect": "Slučajno preusmerenje",
        "randomredirect-nopages": "Nema preusmerenja u imenskom prostoru „$1”.",
        "pageswithprop-submit": "Idi",
        "doubleredirects": "Dvostruka preusmerenja",
        "doubleredirectstext": "Ova stranica prikazuje stranice koje preusmeravaju na druga preusmerenja.\nSvaki red sadrži veze prema prvom i drugom preusmerenju, kao i odredišnu stranicu drugog preusmerenja koja je obično „pravi“ članak na koga prvo preusmerenje treba da upućuje.\n<del>Precrtani</del> unosi su već rešeni.",
-       "double-redirect-fixed-move": "[[$1]] je premešten.\nSada je preusmerenje na [[$2]].",
-       "double-redirect-fixed-maintenance": "Ispravljanje dvostrukih preusmerenja iz [[$1]] u [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] je premešten.\nAutomatski je ažurirano i sada preusmerava na [[$2]].",
+       "double-redirect-fixed-maintenance": "Automatski ispravlja dvostruka preusmerenja iz [[$1]] u [[$2]]. Kao deo održavanja.",
        "double-redirect-fixer": "Ispravljač preusmerenja",
        "brokenredirects": "Pokvarena preusmerenja",
        "brokenredirectstext": "Sledeća preusmerenja upućuju na nepostojeće stranice:",
        "mostlinked": "Stranice s najviše veza",
        "mostlinkedcategories": "Članci s najviše kategorija",
        "mostlinkedtemplates": "Šabloni s najviše veza",
-       "mostcategories": "Članci s najviše kategorija",
+       "mostcategories": "Stranice s najviše kategorija",
        "mostimages": "Datoteke s najviše veza",
        "mostinterwikis": "Stranice sa najviše međuvikija",
        "mostrevisions": "Stranice s najviše izmena",
        "deadendpagestext": "Sledeće stranice nemaju veze do drugih stranica na ovom vikiju.",
        "protectedpages": "Zaštićene stranice",
        "protectedpages-indef": "Samo neograničene zaštite",
+       "protectedpages-summary": "Na ovoj stranici se nalazi spisak trenutno zaštićenih stranica. Za spisak zaštićenih naslova vidi [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Samo prenosive zaštite",
        "protectedpages-noredirect": "Sakrij preusmerenja",
        "protectedpagesempty": "Nema zaštićenih stranica s ovim parametrima.",
        "protectedpages-unknown-timestamp": "nema",
        "protectedpages-unknown-performer": "nema",
        "protectedtitles": "Zaštićeni naslovi",
+       "protectedtitles-summary": "Na ovoj stranici se nalazi spisak trenutno zaštićenih naslova. Za spisak trenutno zaštićenih stranica vidi [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Nema zaštićenih naslova s ovim parametrima.",
        "listusers": "Spisak korisnika",
        "listusers-editsonly": "Prikaži samo korisnike koji su uređivali",
        "listusers-blocked": "({{GENDER:$1|blokiran|blokirana|blokiran}})",
        "activeusers": "Spisak aktivnih korisnika",
        "activeusers-intro": "Ovo je spisak korisnika koji su bili aktivni {{PLURAL:$1|prethodni dan|u poslednja $1 dana|u poslednjih $1 dana}}.",
-       "activeusers-count": "$1 {{PLURAL:$1|izmena|izmene|izmena}} {{PLURAL:$3|prethodni dan|u poslednja $3 dana|u poslednjih $3 dana}}",
+       "activeusers-count": "$1 {{PLURAL:$1|radnja|radnje|radnji}} {{PLURAL:$3|prethodni dan|u poslednja $3 dana|u poslednjih $3 dana}}",
        "activeusers-from": "Prikaži korisnike počev od:",
        "activeusers-hidebots": "Sakrij botove",
        "activeusers-hidesysops": "Sakrij administratore",
        "listgrouprights-removegroup-self": "uklanjanje {{PLURAL:$2|grupe|grupa}} sa svog naloga: $1",
        "listgrouprights-addgroup-self-all": "Dodaj sve grupe na sopstveni nalog",
        "listgrouprights-removegroup-self-all": "Ukloni sve grupe sa sopstvenog naloga",
+       "listgrouprights-namespaceprotection-namespace": "Imenski prostor",
+       "trackingcategories-nodesc": "Opis nije dostupan.",
        "mailnologin": "Nema adrese za slanje",
        "mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu e-adresu u [[Special:Preferences|podešavanjima]] da biste slali e-poruke drugim korisnicima.",
        "emailuser": "Pošalji e-poruku",
        "emailuser-title-notarget": "Slanje e-poruke korisniku",
        "emailpage": "Slanje e-poruka",
        "emailpagetext": "Možete da koristite donji obrazac da pošaljete e-poruku {{GENDER:$1|ovom korisniku|ovoj korisnici|ovom korisniku|}}.\nE-adresa koju ste uneli u vašim [[Special:Preferences|podešavanjima]] će se prikazati u polju „Od“, tako da će primalac moći da vam odgovori direktno.",
-       "defemailsubject": "{{SITENAME}} e-adresa {{GENDER:$1|korisnika|korisnice|korisnika}} $1",
+       "defemailsubject": "{{SITENAME}} — E-pošta od {{GENDER:$1|korisnika|korisnice}} $1",
        "usermaildisabled": "Korisnička e-pošta je onemogućena",
        "usermaildisabledtext": "Ne možete da šaljete e-poruke drugim korisnicima na ovom vikiju",
        "noemailtitle": "Nema e-adrese",
        "watchnologin": "Niste prijavljeni",
        "addwatch": "Dodaj na spisak nadgledanja",
        "addedwatchtext": "Stranica „[[:$1]]“ je dodata na vaš [[Special:Watchlist|spisak nadgledanja]].\nBuduće izmene ove stranice i njene stranice za razgovor biće navedene tamo.",
+       "addedwatchtext-short": "Stranica „$1“ je dodata na vaš spisak nadgledanja.",
        "removewatch": "Ukloni sa spiska nadgledanja",
        "removedwatchtext": "Stranica „[[:$1]]“ je uklonjena s vašeg [[Special:Watchlist|spiska nadgledanja]].",
+       "removedwatchtext-short": "Stranica „$1“ je uklonjena s vašeg spiska nadgledanja.",
        "watch": "Nadgledaj",
        "watchthispage": "Nadgledaj ovu stranicu",
        "unwatch": "Prekini nadgledanje",
        "enotif_lastvisited": "Pogledajte $1 za sve izmene od vaše poslednje posete.",
        "enotif_lastdiff": "Pogledajte $1 da vidite ovu izmenu.",
        "enotif_anon_editor": "anoniman korisnik $1",
-       "enotif_body": "Poštovani $WATCHINGUSERNAME,\n\n\nStranica $PAGETITLE na vikiju {{SITENAME}} je $CHANGEDORCREATED dana $PAGEEDITDATE od strane {{GENDER:$PAGEEDITOR|korisnika|korisnice|korisnika}} $PAGEEDITOR. Pogledajte $PAGETITLE_URL za tekuću izmenu.\n\n$NEWPAGE\n\nOpis: $PAGESUMMARY $PAGEMINOREDIT\n\nKontakt:\ne-adresa: $PAGEEDITOR_EMAIL\nviki: $PAGEEDITOR_WIKI\n\nNeće biti drugih obaveštenja u slučaju daljih izmena ukoliko ne posetite ovu stranicu.\nMožete i da poništite postavke obaveštenja za sve stranice u vašem spisku nadgledanja.\n\nSrdačan pozdrav, {{SITENAME}}\n\n--\nDa biste promenili postavke u vezi sa e-obaveštenjima, posetite\n{{canonicalurl:{{#special:Preferences}}}}\n\nDa biste promenili postavke u vezi sa spiskom nadgledanja, posetite\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nDa biste uklonili ovu stranicu sa spiska nadgledanja, posetite\n$UNWATCHURL\n\nPodrška i dalja pomoć:\n$HELPPAGE",
+       "enotif_body": "Poštovani $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nOpis: $PAGESUMMARY $PAGEMINOREDIT\n\nKontakt:\ne-pošta: $PAGEEDITOR_EMAIL\nviki: $PAGEEDITOR_WIKI\n\nNeće biti drugih obaveštenja u slučaju daljih izmena ukoliko ne posetite ovu stranicu kada ste prijavljeni.\nMožete i da poništite postavke obaveštenja za sve stranice u vašem spisku nadgledanja.\n\nSrdačan pozdrav, {{SITENAME}}\n\n--\nDa biste promenili postavke u vezi sa e-obaveštenjima, posetite\n{{canonicalurl:{{#special:Preferences}}}}\n\nDa biste promenili postavke u vezi sa spiskom nadgledanja, posetite\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nDa biste uklonili ovu stranicu sa spiska nadgledanja, posetite\n$UNWATCHURL\n\nPodrška i dalja pomoć:\n$HELPPAGE",
        "created": "napravljena",
        "changed": "izmenjena",
        "deletepage": "Obriši stranicu",
        "contributions-title": "Doprinosi {{GENDER:$1|korisnika|korisnice}} $1",
        "mycontris": "Doprinosi",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Korisnički nalog „$1“ nije registrovan.",
        "nocontribs": "Nema izmena koje odgovaraju navedenim kriterijumima.",
        "uctop": "(poslednja)",
        "month": "od meseca (i ranije):",
        "ipblocklist-localblock": "Lokalno blokiranje",
        "ipblocklist-otherblocks": "{{PLURAL:$1|Drugo blokiranje|Druga blokiranja}}",
        "infiniteblock": "trajno",
-       "expiringblock": "ističe dana $1 u $2",
+       "expiringblock": "ističe $1 u $2",
        "anononlyblock": "samo anonimni",
        "noautoblockblock": "automatsko blokiranje je onemogućeno",
        "createaccountblock": "otvaranje naloga je blokirano",
        "range_block_disabled": "Administratorska mogućnost za blokiranje raspona IP adresa je onemogućena.",
        "ipb_expiry_invalid": "Vreme isteka je neispravno.",
        "ipb_expiry_temp": "Sakrivene blokade korisnika moraju biti trajne.",
-       "ipb_hide_invalid": "Ne mogu da potisnem ovaj nalog. Možda ima previše izmena.",
+       "ipb_hide_invalid": "Ne mogu da potisnem ovaj nalog; ima više od {{PLURAL:$1|jedne izmene|$1 izmena}}.",
        "ipb_already_blocked": "„$1“ je već blokiran",
        "ipb-needreblock": "$1 je već blokiran. Želite li da promenite podešavanja?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Druga blokada|Druge blokade}}",
        "movepagetalktext": "Odgovarajuća stranica za razgovor, ako postoji, biće automatski premeštena zajedno s njom, osim ako:\n*Već postoji stranica za razgovor s novim naslovom, ili\n*Ako je označeno dolenavedeno polje.\n\nU ovom slučaju mora ručno da se premesti ili spoji, ako ima potrebe za tim.",
        "movearticle": "Premesti stranicu:",
        "moveuserpage-warning": "'''Upozorenje:''' na putu ste da premestite korisničku stranicu. Imajte u vidu da će samo stranica biti premeštena, a sam korisnik ''neće'' biti preimenovan.",
+       "movecategorypage-warning": "<strong>Upozorenje:</strong> premeštate stranicu kategorije. Imajte na umu da će samo stranica biti premeštena i da sve stranice u staroj kategoriji <em>neće</em> biti rekategorisane u novu kategoriju.",
        "movenologintext": "Morate da budete registrovani i [[Special:UserLogin|prijavljeni]] da biste premeštali stranice.",
        "movenotallowed": "Nemate dozvolu da premeštate stranice.",
        "movenotallowedfile": "Nemate dozvolu da premeštate datoteke.",
        "importuploaderrortemp": "Ne mogu da pošaljem datoteku za uvoz.\nNedostaje privremena fascikla.",
        "import-parse-failure": "Pogrešno raščlanjivanje XML-a.",
        "import-noarticle": "Nema stranice za uvoz!",
-       "import-nonewrevisions": "Sve izmene su prethodno uvezene.",
+       "import-nonewrevisions": "Izmene nisu uvezene (sve su već bile ili prisutne ili preskočene zbog greški).",
        "xml-error-string": "$1 u redu $2, kolona $3 (bajt $4): $5",
        "import-upload": "Otpremanje XML podataka",
        "import-token-mismatch": "Gubitak podataka o sesiji.\nPokušajte ponovo.",
        "tooltip-preferences-save": "Sačuvaj postavke",
        "tooltip-summary": "Unesite kratak opis",
        "common.css": "/** CSS postavljen ovde će se odraziti na sve teme */",
-       "cologneblue.css": "/* CSS postavljen ovde će uticati na sve korisnike teme „Kelnsko plava“ */",
        "monobook.css": "/* CSS postavljen ovde će uticati na sve korisnike teme „Monobuk“ */",
-       "modern.css": "/* CSS postavljen ovde će uticati na sve korisnike teme „Savremeno“ */",
        "vector.css": "/* CSS postavljen ovde će uticati na sve korisnike teme „Vektorsko“ */",
        "print.css": "/* CSS postavljen ovde će uticati na izdanje za štampu */",
        "noscript.css": "/* CSS postavljen ovde će uticati na sve korisnike kojima je onemogućen javaskript */",
        "group-sysop.css": "/* CSS postavljen ovde će uticati samo na sistemske operatore */",
        "group-bureaucrat.css": "/* CSS postavljen ovde će uticati samo na birokrate */",
        "common.js": "/* Javaskript postavljen ovde će se koristiti za sve korisnike pri otvaranju svake stranice. */",
-       "cologneblue.js": "/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Kelnsko plava“ */",
        "monobook.js": "/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Monobuk“ */",
-       "modern.js": "/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Savremeno“ */",
        "vector.js": "/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Vektorsko“ */",
        "group-autoconfirmed.js": "/* Javaskript postavljen ovde će se učitati za samopotvrđene korisnike */",
        "group-bot.js": "/* Javaskript postavljen ovde će se učitati samo za botove */",
        "pageinfo-category-pages": "Broj stranica",
        "pageinfo-category-subcats": "Broj potkategorija",
        "pageinfo-category-files": "Broj datoteka",
-       "skinname-cologneblue": "Kelnsko plava",
        "skinname-monobook": "Monobuk",
-       "skinname-modern": "Savremeno",
        "skinname-vector": "Vektorsko",
        "markaspatrolleddiff": "Označi kao patrolirano",
        "markaspatrolledtext": "Označi stranicu kao patroliranu",
        "newimages-summary": "Ova posebna stranica prikazuje poslednje poslate datoteke.",
        "newimages-legend": "Filter",
        "newimages-label": "Naziv datoteke (ili njen deo):",
+       "newimages-showbots": "Prikaži datoteke koje su poslali botovi",
        "noimages": "Nema ništa.",
        "ilsubmit": "Pretraži",
        "bydate": "po datumu",
        "just-now": "upravo sad",
        "hours-ago": "Pre $1 {{PLURAL:$1|sat|sata|sati}}",
        "minutes-ago": "Pre $1 {{PLURAL:$1|minut|minuta}}",
+       "seconds-ago": "Pre $1 {{PLURAL:$1|sekunda|sekundi}}",
+       "monday-at": "Ponedeljak u $1",
+       "tuesday-at": "Utorak u $1",
+       "wednesday-at": "Sreda u $1",
+       "thursday-at": "Četvrtak u $1",
+       "friday-at": "Petak u $1",
+       "saturday-at": "Subota u $1",
+       "sunday-at": "Nedelja u $1",
+       "yesterday-at": "Juče u $1",
        "bad_image_list": "Format je sledeći:\n\nRazmatraju se samo nabrajanja (redovi koji počinju sa zvezdicom).\nPrva veza u redu mora da bude veza do neispravne datoteke.\nSve daljnje veze u istom redu smatraju se izuzecima.",
        "variantname-zh-hans": "hans",
        "variantname-zh-hant": "hant",
        "imgmultipagenext": "sledeća stranica →",
        "imgmultigo": "Idi!",
        "imgmultigoto": "Idi na stranicu $1",
+       "img-lang-default": "(podrazumevani jezik)",
        "img-lang-go": "Idi",
        "ascending_abbrev": "rast.",
        "descending_abbrev": "opad.",
        "watchlistedit-normal-submit": "Ukloni",
        "watchlistedit-normal-done": "{{PLURAL:$1|Jedna stranica je uklonjena|$1 stranice su uklonjene|$1 stranica je uklonjeno}} s vašeg spiska nadgledanja:",
        "watchlistedit-raw-title": "Izmeni sirov spisak nadgledanja",
-       "watchlistedit-raw-legend": "Napredno uređivanje spiska nadgledanja",
+       "watchlistedit-raw-legend": "Izmeni sirov spisak nadgledanja",
        "watchlistedit-raw-explain": "Naslovi sa spiska nadgledanja su prikazani ispod i mogu se uređivati dodavanjem ili uklanjanjem stavki sa spiska;\njedan naslov po redu.\nKada završite, kliknite na „{{int:Watchlistedit-raw-submit}}“.\nMožete da [[Special:EditWatchlist|koristite i običan uređivač]].",
        "watchlistedit-raw-titles": "Naslovi:",
        "watchlistedit-raw-submit": "Ažuriraj spisak",
        "watchlistedit-raw-done": "Vaš spisak nadgledanja je ažuriran.",
        "watchlistedit-raw-added": "{{PLURAL:$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": "Isprazni 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:",
+       "watchlistedit-clear-submit": "Isprazni spisak nadgledanja (Ovo je trajno!)",
+       "watchlistedit-clear-done": "Vaš spisak nadgledanja je ispražnjen.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova je uklonjeno}}:",
+       "watchlisttools-clear": "isprazni spisak nadgledanja",
        "watchlisttools-view": "prikaži srodne izmene",
        "watchlisttools-edit": "prikaži i uredi spisak nadgledanja",
        "watchlisttools-raw": "izmeni sirov spisak nadgledanja",
        "version-hook-subscribedby": "Prijavljeno od",
        "version-version": "(izdanje $1)",
        "version-svn-revision": "(izm. $2)",
-       "version-license": "Licenca",
+       "version-license": "Medijaviki licenca",
        "version-ext-license": "Licenca",
+       "version-ext-colheader-name": "Ekstenzija",
        "version-ext-colheader-version": "Verzija",
        "version-ext-colheader-license": "Licenca",
        "version-ext-colheader-description": "Opis",
        "version-ext-colheader-credits": "Autori",
+       "version-license-title": "Licenca za $1",
        "version-poweredby-credits": "Ovaj viki pokreće '''[https://www.mediawiki.org/ Medijaviki]''', autorska prava © 2001-$1 $2.",
        "version-poweredby-others": "ostali",
+       "version-poweredby-translators": "translatewiki.net prevodioci",
        "version-credits-summary": "Želeli bismo da zahvalimo sledećim ljudima na njihovom doprinosu [[Special:Version|Medijavikiji]].",
        "version-license-info": "Medijaviki je slobodan softver možete ga redistribuirati i/ili modifikovati pod uslovima GNU-ove opšte javne licence verzija 2 ili svake sledeće koju objavi Zadužbina za slobodan softver.\n\nMedijaviki se redistribuirati u nadi da će biti od koristi, ali BEZ IKAKVE GARANCIJE čak i bez PODRAZUMEVANE GARANCIJE FUNKCIONALNOSTI ili PRIKLADNOSTI ZA ODREĐENEU NAMENU. Pogledajte GNU-ovu opštu javnu licencu za više informacija.\n\nTrebalo bi da ste primili [{{SERVER}}{{SCRIPTPATH}}/COPYING primerak GNU-ove opšte javne licence] zajedno s ovim programom. Ako niste, pišite na Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA ili [//www.gnu.org/licenses/old-licenses/gpl-2.0.html pročitajte ovde].",
        "version-software": "Instalirani softver",
        "version-entrypoints": "Adrese ulazne tačke",
        "version-entrypoints-header-entrypoint": "Ulazna tačka",
        "version-entrypoints-header-url": "Adresa",
+       "redirect": "Preusmerenje na datoteku, korisnika, stranicu ili izmenu",
        "redirect-legend": "Preusmeri na datoteku ili stranicu",
        "redirect-submit": "Idi",
+       "redirect-lookup": "Tip vrednosti:",
        "redirect-value": "Vrednost:",
+       "redirect-user": "Korisnički ID",
+       "redirect-page": "ID stranice",
+       "redirect-revision": "Verzija stranice",
        "redirect-file": "Naziv datoteke",
        "redirect-not-exists": "Vrednost nije pronađen",
        "fileduplicatesearch": "Pretraga duplikata",
        "logentry-newusers-create2": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog $3",
        "logentry-newusers-byemail": "Korisnički nalog $3 je {{GENDER:$2|napravljen}} od strane $1 i lozinka je poslata na e-poštu",
        "logentry-newusers-autocreate": "Korisnički nalog $1 je automatski {{GENDER:$2|otvoren}}",
-       "logentry-rights-rights": "$1 je {{GENDER:$1|promenio|promenila}} članstvo grupe za $3 iz $4 u $5",
+       "logentry-rights-rights": "$1 je {{GENDER:$2|promenio|promenila}} članstvo grupe za $3 iz $4 u $5",
        "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promenio|promenila}} čalnstvo grupe za $3",
        "logentry-rights-autopromote": "$1 je automatski {{GENDER:$1|unapređen|unapređena}} iz $4 u $5",
        "rightsnone": "(nema)",
        "api-error-ok-but-empty": "Unutrašnja greška: server ne odgovara.",
        "api-error-overwrite": "Zamenjivanje postojeće datoteke je zabranjeno.",
        "api-error-stashfailed": "Unutrašnja greška: server ne može da sačuva privremenu datoteku.",
+       "api-error-publishfailed": "Unutrašnja greška: server nije uspeo da objavi privremenu datoteku.",
        "api-error-timeout": "Server nije odgovorio u očekivano vreme.",
        "api-error-unclassified": "Došlo je do nepoznate greške",
        "api-error-unknown-code": "Nepoznata greška: „$1“",
        "duration-centuries": "$1 {{PLURAL:$1|vek|veka|vekova}}",
        "duration-millennia": "$1 {{PLURAL:$1|milenijum|milenijuma|milenijuma}}",
        "rotate-comment": "Slika je rotirana za $1° u smeru kazaljke na satu",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|sekunda|sekund|sekundi}}",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|sekund|sekunde|sekundi}}",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}",
        "expandtemplates": "Zamena šablona",
        "expand_templates_intro": "Ova posebna stranica uzima tekst i menja sve šablone u njemu rekurzivno.\nTakođe menja funkcije parsera kao što je <code><nowiki>{{</nowiki>#language:…}}</code> i promenljive kao što je <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nZapravo praktično sve što se nalazi između vitičastih zagrada.",
        "expand_templates_title": "Naziv konteksta; za {{STRANICA}} itd.:",
index 16ae384..0ebfb8b 100644 (file)
        "vector-view-view": "Visa",
        "vector-view-viewsource": "Visa källa",
        "actions": "Åtgärder",
+       "vector-more-actions": "Mer",
        "namespaces": "Namnrymder",
        "variants": "Varianter",
        "navigation-heading": "Navigeringsmeny",
        "parser-template-recursion-depth-warning": "Gräns för mallrekursionsdjup överskriden ($1)",
        "language-converter-depth-warning": "Gräns för språkkonverteringsdjup överskriden ($1)",
        "node-count-exceeded-category": "Sidor där antalet noder har överskridits",
+       "node-count-exceeded-category-desc": "En kategori för sidor där nod-räkningen överskrids.",
        "node-count-exceeded-warning": "Sidan har överskridit antalet nodar",
        "expansion-depth-exceeded-category": "Sidor där expansionsdjupet överskrids",
+       "expansion-depth-exceeded-category-desc": "Detta är en kategori för sidor där expansionsdjupet överskrids.",
        "expansion-depth-exceeded-warning": "Sidan överskrider expansionsdjupet",
        "parser-unstrip-loop-warning": "Tagavskalningsloop upptäcktes",
        "parser-unstrip-recursion-limit": "Tagavskalningsloop överskred rekursionsgränsen ($1)",
        "currentrev": "Nuvarande version",
        "currentrev-asof": "Nuvarande version från $1",
        "revisionasof": "Versionen från $1",
-       "revision-info": "Version från den $1 av $2",
+       "revision-info": "Version från den $1 av {{GENDER:$6|$2}}$7",
        "previousrevision": "← Äldre version",
        "nextrevision": "Nyare version →",
        "currentrevisionlink": "Nuvarande version",
        "searchmenu-exists": "<strong>Det finns en sida med namnet \"[[:$1]]\" på denna wiki.</strong> {{PLURAL:$2|0=|Se även de andra sökresultaten som hittades.}}",
        "searchmenu-new": "<strong>Skapa sidan \"[[:$1]]\" på denna wiki!</strong> {{PLURAL:$2|0=|Se även sidan som hittades med din sökning.|Se även sidorna som hittades med din sökning.}}",
        "searchprofile-articles": "Innehållssidor",
-       "searchprofile-project": "Hjälp- och projektsidor",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Allt",
        "searchprofile-advanced": "Avancerad",
        "searchprofile-articles-tooltip": "Sök i $1",
-       "searchprofile-project-tooltip": "Sök i $1",
        "searchprofile-images-tooltip": "Sök efter filer",
        "searchprofile-everything-tooltip": "Sök allt innehåll (inklusive diskussionssidor)",
        "searchprofile-advanced-tooltip": "Sök i vissa namnrymder",
        "search-interwiki-default": "Resultat från $1:",
        "search-interwiki-more": "(mer)",
        "search-relatedarticle": "Relaterad",
-       "searcheverything-enable": "Sök i alla namnrymder",
        "searchrelated": "relaterad",
        "searchall": "alla",
        "showingresults": "Nedan visas upp till {{PLURAL:$1|'''1''' post|'''$1''' poster}} från och med nummer '''$2'''.",
        "powersearch-togglelabel": "Kryssa:",
        "powersearch-toggleall": "Alla",
        "powersearch-togglenone": "Ingen",
+       "powersearch-remember": "Kom ihåg val för framtida sökningar",
        "search-external": "Extern sökning",
        "searchdisabled": "Sökfunktionen på {{SITENAME}} är avstängd.\nDu kan istället göra sökningar med hjälp av Google.\nNotera dock att deras indexering av {{SITENAME}} kan vara något föråldrad.",
        "search-error": "Ett fel uppstod under sökningen: $1",
        "allowemail": "Tillåt e-post från andra användare",
        "prefs-searchoptions": "Sök",
        "prefs-namespaces": "Namnrymder",
-       "defaultns": "Sök annars i dessa namnrymder:",
        "default": "ursprungsinställning",
        "prefs-files": "Filer",
        "prefs-custom-css": "personlig CSS",
        "recentchanges-label-unpatrolled": "Denna redigering har inte blivit patrullerad ännu",
        "recentchanges-label-plusminus": "Sidans storlek ändrades med detta antal byte",
        "recentchanges-legend-heading": "'''Teckenförklaring:'''",
-       "recentchanges-legend-newpage": "(se även [[Special:NewPages|listan över nya sidor]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se även [[Special:NewPages|listan över nya sidor]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Nedan visas ändringar sedan <strong>$2</strong> (upp till <strong>$1</strong> ändringar visas).",
        "rclistfrom": "Visa ändringar från och med $3 $2",
        "largefileserver": "Denna fil är större än vad servern ställts in att tillåta.",
        "emptyfile": "Filen du laddade upp verkar vara tom; felet kan bero på ett stavfel i filnamnet. Kontrollera om du verkligen vill ladda upp denna fil.",
        "windows-nonascii-filename": "Denna wiki stödjer inte filnamn med specialtecken.",
-       "fileexists": "Det finns redan en fil med detta namn.\nTitta på <strong>[[:$1]]</strong>, såvida du inte är säker på att du vill ändra den.\n[[$1|thumb]]",
+       "fileexists": "Det finns redan en fil med detta namn. Titta på <strong>[[:$1]]</strong>, om {{GENDER:|du}} inte är säker på att {{GENDER:|du}} vill ändra den.\n[[$1|thumb]]",
        "filepageexists": "Beskrivningssidan för denna fil har redan skapats på <strong>[[:$1]]</strong>, men just nu finns ingen fil med detta namn.\nDen sammanfattning du skriver här kommer inte visas på beskrivningssidan.\nFör att din sammanfattning ska visas där, så måste du redigera beskrivningssidan manuellt.\n[[$1|thumb]]",
        "fileexists-extension": "En fil med ett liknande namn finns redan: [[$2|thumb]]\n* Namn på den fil du försöker ladda upp: <strong>[[:$1]]</strong>\n* Namn på filen som redan finns: <strong>[[:$2]]</strong>\nVar vänlig välj ett annat namn.",
        "fileexists-thumbnail-yes": "Filen verkar vara en bild med förminskad storlek ''(miniatyrbild)''. [[$1|thumb]]\nVar vänlig kontrollera filen <strong>[[:$1]]</strong>.\nOm det är samma fil i originalstorlek så är det inte nödvändigt att ladda upp en extra miniatyrbild.",
        "ntransclusions": "använd på $1 {{PLURAL:$1|sida|sidor}}",
        "specialpage-empty": "Den här sidan är tom.",
        "lonelypages": "Föräldralösa sidor",
-       "lonelypagestext": "Följande sidor länkas inte till från någon annan sida på {{SITENAME}}.",
+       "lonelypagestext": "Följande sidor länkas inte till eller inkluderas på någon annan sida på {{SITENAME}}.",
        "uncategorizedpages": "Ej kategoriserade sidor",
        "uncategorizedcategories": "Ej kategoriserade kategorier",
        "uncategorizedimages": "Ej kategoriserade filer",
        "wantedtemplates": "Önskade mallar",
        "mostlinked": "Sidor med flest länkar till sig",
        "mostlinkedcategories": "Kategorier med flest länkar till sig",
-       "mostlinkedtemplates": "Mallar med flest länkar till sig",
+       "mostlinkedtemplates": "Mest inkluderade sidor",
        "mostcategories": "Sidor med flest kategorier",
        "mostimages": "Filer med flest länkar till sig",
        "mostinterwikis": "Sidor med flest interwikis",
        "watchnologin": "Inte inloggad",
        "addwatch": "Lägg till i bevakningslistan",
        "addedwatchtext": "Sidan \"[[:$1]]\" har lagts till på din [[Special:Watchlist|bevakningslista]].\nFramtida ändringar av den här sidan och dess diskussionssida kommer att listas där.",
+       "addedwatchtext-short": "Sidan \"$1\" har lagts till i din bevakningslista.",
        "removewatch": "Ta bort från bevakningslistan",
        "removedwatchtext": "Sidan \"[[:$1]]\" har tagits bort från [[Special:Watchlist|din bevakningslista]].",
+       "removedwatchtext-short": "Sidan \"$1\" har tagits bort från din bevakningslista.",
        "watch": "Bevaka",
        "watchthispage": "Bevaka denna sida",
        "unwatch": "Avbevaka",
        "whatlinkshere-next": "{{PLURAL:$1|nästa|nästa $1}}",
        "whatlinkshere-links": "← länkar",
        "whatlinkshere-hideredirs": "$1 omdirigeringar",
-       "whatlinkshere-hidetrans": "$1 mallinkluderingar",
+       "whatlinkshere-hidetrans": "$1 inkluderingar",
        "whatlinkshere-hidelinks": "$1 länkar",
        "whatlinkshere-hideimages": "$1 fillänkar",
        "whatlinkshere-filters": "Filter",
        "tooltip-summary": "Skriv en kort sammanfattning",
        "interlanguage-link-title": "$1 - $2",
        "common.css": "/* CSS som skrivs här påverkar alla skal */",
-       "cologneblue.css": "/* CSS som skrivs här kommer att påverka alla användare av skalet Cologne blå */",
        "monobook.css": "/* CSS som skrivs här kommer att påverka alla användare av skalet Monobook */",
-       "modern.css": "/* CSS som skrivs här kommer att påverka alla användare av skalet Modern */",
        "vector.css": "/* CSS som skrivs här kommer att påverka alla användare av skalet Vector */",
        "print.css": "/* CSS som skrivs här kommer att påverka utskriftsversionen */",
        "noscript.css": "/* CSS som placeras här kommer att påverka användare med JavaScript inaktiverat */",
        "group-sysop.css": "/* CSS som placeras här kommer bara att påverka administratörer */",
        "group-bureaucrat.css": "/* CSS som placeras här kommer bara att påverka byråkrater */",
        "common.js": "/* JavaScript som skrivs här körs varje gång en användare laddar en sida. */",
-       "cologneblue.js": "/* JavaScript här kommer att laddas för dem som använder skalet Cologne blå */",
        "monobook.js": "/* JavaScript här kommer att laddas för dem som använder skalet Monobook */",
-       "modern.js": "/* JavaScript här kommer att laddas för dem som använder skalet Modern */",
        "vector.js": "/* JavaScript här kommer att laddas för dem som använder skalet Vector */",
        "group-autoconfirmed.js": "/* JavaScript här kommer att laddas för bekräftade användare */",
        "group-user.js": "/* JavaScript här kommer att laddas för registrerade användare */",
        "pageinfo-magic-words": "{{PLURAL:$1|Magiskt|Magiska}} ord ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Dold kategori|Dolda kategorier}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|Inkluderad mall|Inkluderade mallar}} ($1)",
-       "pageinfo-transclusions": "{{PLURAL:$1|Sida|Sidor}} mallinkluderas på ($1)",
+       "pageinfo-transclusions": "{{PLURAL:$1|Sida|Sidor}} inkluderas på ($1)",
        "pageinfo-toolboxlink": "Sidinformation",
        "pageinfo-redirectsto": "Omdirigerar till",
        "pageinfo-redirectsto-info": "info",
        "pageinfo-category-pages": "Antal sidor",
        "pageinfo-category-subcats": "Antal underkategorier",
        "pageinfo-category-files": "Antal filer",
-       "skinname-cologneblue": "Cologne blå",
        "skinname-monobook": "Monobook",
-       "skinname-modern": "Modern",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "Märk som patrullerad",
        "markaspatrolledtext": "Märk den här sidan som patrullerad",
        "version-hooks": "Hakar",
        "version-parser-extensiontags": "Tilläggstaggar",
        "version-parser-function-hooks": "Parserfunktioner",
-       "version-hook-name": "Namn",
+       "version-hook-name": "Namn på hook",
        "version-hook-subscribedby": "Används av",
        "version-version": "(Version $1)",
        "version-license": "MediaWiki-licens",
index 7117def..d297c7b 100644 (file)
@@ -33,7 +33,8 @@
                        "மதனாஹரன்",
                        "බිඟුවා",
                        "Thamiziniyan",
-                       "아라"
+                       "아라",
+                       "Kalyanasundar"
                ]
        },
        "tog-underline": "இணைப்புகளுக்கு அடிக்கோடிடு",
        "searchmenu-exists": "'''\"[[:$1]]\" என்னும் பெயருடைய பக்கம் இந்த விக்கியில் உள்ளது'''",
        "searchmenu-new": "'''\"[[:$1]]\" பக்கத்தை இந்த விக்கியில் உருவாக்கவும்!'''",
        "searchprofile-articles": "உள்ளடக்கப் பக்கங்களின் பட்டியல்",
-       "searchprofile-project": "உதவி மற்றும் திட்டப் பக்கங்கள்",
        "searchprofile-images": "பல்லூடகம்",
        "searchprofile-everything": "எல்லாம்\n\nஅத்தனையும்",
        "searchprofile-advanced": "மேம்பட்ட",
        "searchprofile-articles-tooltip": "$1-ல் தேடவும்",
-       "searchprofile-project-tooltip": "$1-ல் தேடவும்",
        "searchprofile-images-tooltip": "கோப்புகளைத் தேடுக",
        "searchprofile-everything-tooltip": "எல்லா உள்ளடக்கங்களிலும் தேடுக (பேச்சுப் பக்கங்கள் உட்பட)",
        "searchprofile-advanced-tooltip": "தனிப்பட்ட பெயர்வெளிகளில் தேடவும்",
        "search-interwiki-default": "$1 தளத்தின் முடிவுகள்:",
        "search-interwiki-more": "(மேலும்)",
        "search-relatedarticle": "தொடர்புடையவை",
-       "searcheverything-enable": "அனைத்துப் பெயர்வெளிகளிலும் தேடவும்",
        "searchrelated": "தொடர்புடையவை",
        "searchall": "அனைத்தும்",
        "showingresults": "'''$2''' இலிருந்து தொடங்கும்  {{PLURAL:$1|'''1''' முடிவு கீழே காட்டப்பட்டுள்ளது|'''$1''' முடிவுகள் கீழே காட்டப்பட்டுள்ளன}}.",
        "powersearch-togglelabel": "சரிபார்க்கவும்:",
        "powersearch-toggleall": "அனைத்தும்",
        "powersearch-togglenone": "ஏதுமில்லை",
+       "powersearch-remember": "எதிர்கால தேடுதல்களுக்காக தேர்வை நினைவில் கொள்ளவும்",
        "search-external": "வெளித்தேடல்",
        "searchdisabled": "{{SITENAME}} தளத்தின் தேடல் வசதிகள் தற்காலிகமாக முடக்கப்பட்டுள்ளது. அதுவரை நீங்கள் கீழேயுள்ள கூகிள் தேடலைப் பயன்படுத்தலாம். இது சில சமயம் இற்றைப்படுத்தப்படாததாய் இருக்கக்கூடும்.",
        "search-error": "தேடுகையில் ஒரு பிழை ஏற்பட்டுள்ளது:$1",
        "allowemail": "ஏனைய பயனர்களிடம் இருந்தான மின்னஞ்சல்களை அனுமதி",
        "prefs-searchoptions": "தேடல்",
        "prefs-namespaces": "பெயர்வெளிகள்",
-       "defaultns": "அப்படியில்லையென்றால் இந்த பொயர்வெளிகளில் தேடவும்:",
        "default": "பொதுவானது",
        "prefs-files": "கோப்புகள்",
        "prefs-custom-css": "தனிப்பட்ட சி.எசு.எசு (CSS)",
        "prefs-emailconfirm-label": "மின்னஞ்சலை உறுதிசெய்தல்:",
        "youremail": "மின்னஞ்சல்:",
        "username": "{{GENDER:$1|பயனர் பெயர்}}:",
-       "uid": "{{GENDER:$1|User}} ID:",
        "prefs-memberingroups": "பின்வரும் {{PLURAL:$1|குழு|குழுக்களில்}} உறுப்பினர்:",
        "prefs-registration": "பதிவு செய்யும் நேரம்:",
        "yourrealname": "உண்மைப் பெயர்:",
        "log-title-wildcard": "இவ்வுரையுடன் தொடங்கும் தலைப்புகளைத் தேடு",
        "showhideselectedlogentries": "தேர்ந்தெடுத்த குறிப்பேடு உள்ளீடுகள் காண்பி/மறை",
        "allpages": "அனைத்துப் பக்கங்கள்",
-       "alphaindexline": "$1 தொடக்கம் $2 வரை",
        "nextpage": "அடுத்த பக்கம் ($1)",
        "prevpage": "முந்திய பக்கம் ($1)",
        "allpagesfrom": "அடுத்து காணப்படும் எழுத்தில் தொடங்கும் பக்கங்களை காட்டு:",
        "pageinfo-category-info": "பகுப்புகளின் எண்ணிக்கை",
        "pageinfo-category-pages": "பக்கங்களின் எண்ணிக்கை",
        "pageinfo-category-files": "கோப்புகளின் எண்ணிக்கை",
-       "skinname-cologneblue": "கொலோன் (Cologne) நீலம் Blue",
        "markaspatrolleddiff": "ரோந்திட்டதாக குறி",
        "markaspatrolledtext": "இப்பக்கத்தை ரோந்திட்டதாகக் குறி",
        "markedaspatrolled": "ரோந்திட்டதாக குறிக்கப்பட்டது",
index 777299d..a255932 100644 (file)
        "vector-view-view": "చదువు",
        "vector-view-viewsource": "మూలాన్ని చూపించు",
        "actions": "పనులు",
+       "vector-more-actions": "మరిన్ని",
        "namespaces": "పేరుబరులు",
        "variants": "వివిధ రూపాలు",
        "navigation-heading": "మార్గదర్శకపు మెనూ",
        "view": "చూచుట",
        "view-foreign": "$1 లో చూడండి",
        "edit": "సవరించు",
+       "edit-local": "ప్రాంతీయ వివరణని మార్చు",
        "create": "సృష్టించు",
+       "create-local": "ప్రాంతీయ వివరణని చేర్చు",
        "editthispage": "ఈ పేజీని సవరించండి",
        "create-this-page": "ఈ పేజీని సృష్టించండి",
        "delete": "తొలగించు",
        "jumptonavigation": "మార్గసూచీ",
        "jumptosearch": "వెతుకు",
        "view-pool-error": "క్షమించండి, ప్రస్తుతం సర్వర్లన్నీ ఓవర్‌లోడ్ అయిఉన్నాయి.\nచాలామంది వాడుకరులు ఈ పేజీని చూస్తున్నారు.\nఈ పేజీని వీక్షించడానికి కొద్దిసేపు నిరీక్షించండి.\n\n$1",
+       "generic-pool-error": "క్షమించండి, ప్రస్తుతం సర్వర్లన్నీ ఓవర్‌లోడ్ అయిఉన్నాయి.\nచాలామంది వాడుకరులు దీనిని చూస్తున్నారు.\nదీనిని వీక్షించడానికి కొద్దిసేపు నిరీక్షించండి.",
        "pool-timeout": "తాళం కొరకు వేచివుండడానికి కాలపరిమితి అయిపోయింది",
        "pool-queuefull": "సమూహపు వరుస నిండుగా ఉంది",
        "pool-errorunknown": "తెలియని లోపం",
        "edit-gone-missing": "పేజీని తాజాకరించలేకపోయాం.\nదాన్ని తొలగించినట్టున్నారు.",
        "edit-conflict": "దిద్దుబాటు ఘర్షణ.",
        "edit-no-change": "పాఠ్యంలో మార్పులేమీ చెయ్యలేదు కాబట్టి, మీ మార్పును పట్టించుకోవట్లేదు.",
+       "postedit-confirmation-created": "పేజీ సృష్టించబడినది.",
+       "postedit-confirmation-restored": "పేజీ పునసృష్టించబడినది.",
        "postedit-confirmation-saved": "మీ మార్పు భద్రమయ్యింది.",
        "edit-already-exists": "కొత్త పేజీని సృష్టించలేకపోయాం.\nఅది ఇప్పటికే ఉంది.",
        "defaultmessagetext": "అప్రమేయ సందేశపు పాఠ్యం",
        "parser-template-recursion-depth-warning": "మూస రికర్షను లోతు అధిగమించబడింది ($1)",
        "language-converter-depth-warning": "భాషా మార్పిడి లోతు పరిమితిని అధిగమించారు ($1)",
        "node-count-exceeded-category": "నోడ్-కౌంటును మించిన పేజీలు",
+       "node-count-exceeded-category-desc": "నోడు-సంఖ్య ఎక్కువ అయిన ప్రతులకు వర్గము",
        "node-count-exceeded-warning": "పేజీ నోడ్-కౌంటును మించింది",
        "expansion-depth-exceeded-category": "విస్తరణ లోతును మించిన పేజీలు",
+       "expansion-depth-exceeded-category-desc": "విస్తరణ లోతును మించిన పేజీలకు వర్గము",
        "expansion-depth-exceeded-warning": "పేజీ విస్తరణ లోతును మించింది",
        "parser-unstrip-loop-warning": "Unstrip లూపును కనుక్కున్నాం",
        "parser-unstrip-recursion-limit": "Unstrip రికర్షన్ పరిమితిని దాటింది ($1)",
        "currentrev": "ప్రస్తుతపు సంచిక",
        "currentrev-asof": "$1 నాటి చిట్టచివరి కూర్పు",
        "revisionasof": "$1 నాటి కూర్పు",
-       "revision-info": "$1 నాటి కూర్పు. రచయిత: $2",
+       "revision-info": "{{GENDER:$6|$2}}$7 ద్వారా $1 నాటి కూర్పు",
        "previousrevision": "← పాత కూర్పు",
        "nextrevision": "తరువాతి కూర్పు →",
        "currentrevisionlink": "ప్రస్తుత కూర్పు",
        "searchmenu-exists": "<strong>ఈ వికీలో \"[[:$1]]\" అనే పేజీ ఉంది.</strong> {{PLURAL:$2|0=|ఇతర ఫలితాలను కూడా చూడండి.}}",
        "searchmenu-new": "<strong>ఈ వికీలో \"[[:$1]]\" అనే పేరుతో పేజీని సృష్టించండి!</strong> {{PLURAL:$2|0=|మీ వెతుకులాటలో దొరికిన పేజీని కూడా చూడండి.|వెతుకులాట ఫలితాలను కూడా చూడండి.}}",
        "searchprofile-articles": "విషయపు పేజీలు",
-       "searchprofile-project": "సహాయం మరియు ప్రాజెక్టు పేజీలు",
        "searchprofile-images": "బహుళమాధ్యమాలు",
        "searchprofile-everything": "ప్రతీ ఒక్కటీ",
        "searchprofile-advanced": "ఉన్నత",
        "searchprofile-articles-tooltip": "$1 లలో వెతకండి",
-       "searchprofile-project-tooltip": "$1 లలో వెతకండి",
        "searchprofile-images-tooltip": "పైళ్ళ కోసం వెతకండి",
        "searchprofile-everything-tooltip": "అన్ని చోట్లా (చర్చా పేజీలతో సహా) వెతకండి",
        "searchprofile-advanced-tooltip": "కస్టం నేంస్పేసులలో వెదుకు",
        "search-interwiki-default": "$1 నుండి ఫలితాలు:",
        "search-interwiki-more": "(మరిన్ని)",
        "search-relatedarticle": "సంబంధించినవి",
-       "searcheverything-enable": "అన్ని పేరుబరుల్లో వెతుకు",
        "searchrelated": "సంబంధించినవి",
        "searchall": "అన్నీ",
        "showingresults": "#<strong>$2</strong> నుండి మొదలుకొని {{PLURAL:$1|</strong>ఒక్క</strong> ఫలితాన్ని|<strong>$1</strong> ఫలితాలను}} కింద చూపించాం.",
        "powersearch-togglelabel": "ఎంచుకోండి:",
        "powersearch-toggleall": "అన్నీ",
        "powersearch-togglenone": "ఏదీకాదు",
+       "powersearch-remember": "భవిష్యత్తులో వెతుకుటకు అభిరుచులను గుర్తు పెట్టుకో",
        "search-external": "బయటి అన్వేషణ",
        "searchdisabled": "{{SITENAME}} అన్వేషణ తాత్కాలికంగా పని చెయ్యడం లేదు. ఈలోగా మీరు గూగుల్‌ ఉపయోగించి అన్వేషించవచ్చు. గమనిక: గూగుల్‌ వారి {{SITENAME}} ఫలితాలు కాలదోషం పట్టి ఉండే అవకాశం ఉంది.",
        "search-error": "$1 కోసం వెతికేటపుడు లోపమేదో దొర్లింది.",
        "allowemail": "ఇతర వాడుకరుల నుండి ఈ-మెయిళ్ళను రానివ్వు",
        "prefs-searchoptions": "వెతుకులాట",
        "prefs-namespaces": "పేరుబరులు",
-       "defaultns": "లేకపోతే ఈ నేంస్పేసులలో అన్వేషించు:",
        "default": "అప్రమేయం",
        "prefs-files": "ఫైళ్ళు",
        "prefs-custom-css": "ప్రత్యేక CSS",
        "right-move": "పేజీలను తరలించడం",
        "right-move-subpages": "పేజీలను వాటి ఉపపేజీలతో బాటుగా తరలించడం",
        "right-move-rootuserpages": "వాడుకరుల ప్రధాన పేజీలను తరలించగలగడం",
+       "right-move-categorypages": "వర్గ పేజీలను తరలించు",
        "right-movefile": "ఫైళ్ళను తరలించడం",
        "right-suppressredirect": "పేజీని తరలించేటపుడు పాత పేరు నుండి దారిమార్పును సృష్టించకుండా ఉండటం",
        "right-upload": "దస్త్రాలను ఎక్కించడం",
        "action-move": "ఈ పేజీని తరలించే",
        "action-move-subpages": "ఈ పేజీని, దీని ఉపపేజీలనూ తరలించే",
        "action-move-rootuserpages": "ప్రధాన వాడుకరి పేజీలని తరలించే",
+       "action-move-categorypages": "వర్గ పేజీలను తరలించు",
        "action-movefile": "ఈ ఫైలుని తరలించే",
        "action-upload": "ఈ దస్త్రాన్ని ఎక్కించే",
        "action-reupload": "ఈ ఫైలుని తిరగవ్రాసే",
        "recentchanges-label-unpatrolled": "ఈ దిద్దుబాటు మీద నిఘా లేదు",
        "recentchanges-label-plusminus": "ఈ పేజి పరిమాణంలో  జరిగిన మార్పుల  బైట్ల సంఖ్య",
        "recentchanges-legend-heading": "'''సూచిక :'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|కొత్త పేజీల జాబితా]]ను కూడా చూడండి)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|కొత్త పేజీల జాబితా]]ను కూడా చూడండి)",
        "rcnotefrom": "<strong>$2</strong> నుండి జరిగిన మార్పులు (<strong>$1</strong> వరకు) కింద చూపబడ్డాయి.",
        "rclistfrom": "$3, $2 నుండి జరిగిన మార్పులను చూపించు",
        "rcshowhideminor": "చిన్న మార్పులను $1",
        "doubleredirects": "జంట దారిమార్పులు",
        "doubleredirectstext": "ఇతర దారిమార్పు పుటలకి తీసుకెళ్ళే దారిమార్పులని ఈ పుట చూపిస్తుంది.\nప్రతీ వరుసలో మొదటి మరియు రెండవ దారిమార్పులకు లంకెలు, ఆలానే రెండవ దారిమార్పు పుట యొక్క లక్ష్యం ఉన్నాయి. సాధారణంగా ఈ రెండవ దారిమార్పు యొక్క లక్ష్యమే \"అసలైనది\", అదే మొదటి దారిమార్పు యొక్క లక్ష్యంగా ఉండాలి.\n<del>కొట్టివేయబడిన</del> పద్దులు పరిష్కరించబడ్డవి.",
        "double-redirect-fixed-move": "[[$1]]ని తరలించారు, అది ప్రస్తుతం [[$2]]కి దారిమార్పు.",
-       "double-redirect-fixed-maintenance": "[[$1]] కు జమిలి దారిమార్పును [[$2]] కు సరిచేస్తున్నాం.",
+       "double-redirect-fixed-maintenance": "[[$1]] à°\95à±\81 à°\9cమిలి à°¦à°¾à°°à°¿à°®à°¾à°°à±\8dà°ªà±\81à°¨à±\81 [[$2]] à°\95à±\81 à°\85à°ªà±\8dà°°à°®à±\87à°¯à°\82à°\97à°¾ à°¸à°°à°¿à°\9aà±\87à°¸à±\8dà°¤à±\81à°¨à±\8dనాà°\82.",
        "double-redirect-fixer": "దారిమార్పు సరిద్దువారు",
        "brokenredirects": "తెగిపోయిన దారిమార్పులు",
        "brokenredirectstext": "కింది దారిమార్పులు ఉనికిలోనే లేని పేజీలకు వెళ్తున్నాయి:",
        "listgrouprights-removegroup-self-all": "స్వంత ఖాతా నుండి అన్ని సమూహాలనూ తొలగించుకోగలగడం",
        "listgrouprights-namespaceprotection-header": "పేరుబరి నిబంధనలు",
        "listgrouprights-namespaceprotection-namespace": "పేరుబరి",
+       "listgrouprights-namespaceprotection-restrictedto": "వాడుకరి మార్పు చేయుటకు హక్కు(లు)",
+       "trackingcategories": "పహారా కాయు వర్గాలు",
+       "trackingcategories-msg": "పహారా కార్యు వర్గము",
        "trackingcategories-name": "సందేశం పేరు",
        "trackingcategories-nodesc": "వివరణ లేదు.",
        "trackingcategories-disabled": "వర్గం అచేతనమై ఉంది",
        "watchnologin": "లాగిన్‌ అయిలేరు",
        "addwatch": "వీక్షణ జాబితాలో చేర్చు",
        "addedwatchtext": "\"[[:$1]]\" అనే పుట మీ [[Special:Watchlist|వీక్షణ జాబితా]]లో చేరింది.\nభవిష్యత్తులో ఈ పుటకి మరియు సంబంధిత చర్చాపుటకి జరిగే మార్పులు అక్కడ కనిపిస్తాయి.",
+       "addedwatchtext-short": "\"$1\" పేజీ మీ వీక్షణజాబితాకు చేర్చబడినది.",
        "removewatch": "వీక్షణ జాబితా నుండి తొలగించు",
        "removedwatchtext": "\"[[:$1]]\" అనే పేజీ [[Special:Watchlist|మీ వీక్షణ జాబితా]] నుండి తొలగించబడినది.",
+       "removedwatchtext-short": "\"$1\" పేజీ మీ వీక్షణ జాబితానుండి తొలగించబడినది.",
        "watch": "వీక్షించు",
        "watchthispage": "ఈ పుట మీద కన్నేసి ఉంచు",
        "unwatch": "వీక్షించవద్దు",
        "pageinfo-contentpage-yes": "అవును",
        "pageinfo-protect-cascading": "సంరక్షణ ఇక్కడినుంచి వ్యాపిస్తుంది",
        "pageinfo-protect-cascading-yes": "అవును",
+       "pageinfo-protect-cascading-from": "సంరక్షణ ఇక్కడినుంచి వ్యాపిస్తుంది",
        "pageinfo-category-info": "వర్గపు సమాచారం",
        "pageinfo-category-pages": "పేజీల సంఖ్య",
        "pageinfo-category-subcats": "ఉపవర్గాల సంఖ్య",
        "pageinfo-category-files": "దస్త్రాల సంఖ్య",
-       "skinname-cologneblue": "కలోన్ నీలం",
        "skinname-monobook": "మోనోబుక్",
-       "skinname-modern": "ఆధునిక",
        "skinname-vector": "వెక్టర్",
        "markaspatrolleddiff": "పరీక్షించినట్లుగా గుర్తు పెట్టు",
        "markaspatrolledtext": "ఈ వ్యాసాన్ని పరీక్షించినట్లుగా గుర్తు పెట్టు",
        "file-info-size-pages": "$1 × $2 పిక్సెళ్ళు, దస్త్రపు పరిమాణం: $3, MIME రకం: $4, $5 {{PLURAL:$5|పేజీ|పేజీలు}}",
        "file-nohires": "మరింత స్పష్టమైన బొమ్మ లేదు.",
        "svg-long-desc": "SVG ఫైలు, నామమాత్రంగా $1 × $2 పిక్సెళ్ళు, ఫైలు పరిమాణం: $3",
+       "svg-long-desc-animated": "ఏనిమేటడ్ SVG ఫైలు, నామమాత్రంగా $1 × $2 పిక్సెళ్ళు, ఫైలు పరిమాణం: $3",
        "svg-long-error": "చెల్లని SVG దస్త్రం: $1",
        "show-big-image": "అసలు దస్త్రం",
        "show-big-image-preview": "ఈ మునుజూపు పరిమాణం: $1.",
        "newimages-summary": "ఇటీవలే ఎగుమతైన ఫైళ్ళను ఈ ప్రత్యేక పేజీ చూపిస్తుంది.",
        "newimages-legend": "పడపోత",
        "newimages-label": "ఫైలుపేరు (లేదా దానిలోని భాగం):",
+       "newimages-showbots": "బాట్లు చేసిన అప్లోడ్లు చూపించు",
        "noimages": "చూసేందుకు ఏమీ లేదు.",
        "ilsubmit": "వెతుకు",
        "bydate": "తేదీ వారీగ",
        "watchlistedit-raw-done": "మీ వీక్షణ జాబితాను తాజాకరించాం.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 శీర్షికను|$1 శీర్షికలను}} చేర్చాం:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 శీర్షికను|$1 శీర్షికలను}} తీసివేశాం:",
+       "watchlistedit-clear-title": "వీక్షణజాబితా చెరిపివేయబడింది",
+       "watchlistedit-clear-legend": "వీక్షణజాబితా చెరిపివేయి",
+       "watchlistedit-clear-titles": "శీర్షికలు:",
+       "watchlistedit-clear-submit": "వీక్షణ జాబితా శుభ్రం చేయి (ఇది శాశ్వతం!)",
+       "watchlistedit-clear-done": "మీ వీక్షణ జాబితాను శుభ్రం చేశాం.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 శీర్షికను|$1 శీర్షికలను}} తీసివేశాం:",
+       "watchlisttools-clear": "వీక్షణజాబితాను శుభ్రం చేయి",
        "watchlisttools-view": "సంబంధిత మార్పులను చూడండి",
        "watchlisttools-edit": "వీక్షణ జాబితాను చూడండి లేదా మార్చండి",
        "watchlisttools-raw": "ముడి వీక్షణ జాబితాలో మార్పులు చెయ్యి",
        "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|తొలగించారు}}",
index 79c6d4c..965baac 100644 (file)
@@ -38,7 +38,7 @@
        "tog-watchmoves": "เพิ่มและไฟล์ที่ฉันเปลี่ยนชื่อเข้ารายการเฝ้าดู",
        "tog-watchdeletion": "เพิ่มหน้าและไฟล์ที่ฉันลบเข้ารายการเฝ้าดู",
        "tog-minordefault": "กำหนดให้การแก้ไขทุกครั้งเป็นการแก้ไขเล็กน้อยโดยปริยาย",
-       "tog-previewontop": "à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\9aนกล่องแก้ไข",
+       "tog-previewontop": "à¹\83หà¹\89à¸\95ัวอยà¹\88าà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\81สà¸\94à¸\87à¸\81à¹\88อนกล่องแก้ไข",
        "tog-previewonfirst": "แสดงตัวอย่างการแก้ไขสำหรับการแก้ไขครั้งแรก",
        "tog-enotifwatchlistpages": "อีเมลหาเมื่อหน้าหรือไฟล์ในรายการเฝ้าดูมีการเปลี่ยนแปลง",
        "tog-enotifusertalkpages": "อีเมลหาเมื่อหน้าคุยกับผู้ใช้ของฉันมีการเปลี่ยนแปลง",
        "vector-view-view": "อ่าน",
        "vector-view-viewsource": "ดูโค้ด",
        "actions": "ปฏิบัติการ",
+       "vector-more-actions": "เพิ่มเติม",
        "namespaces": "เนมสเปซ",
        "variants": "สิ่งที่แตกต่าง",
        "navigation-heading": "รายการเลือกป้ายบอกทาง",
        "currentrev": "รุ่นปัจจุบัน",
        "currentrev-asof": "รุ่นปัจจุบัน เมื่อ $1",
        "revisionasof": "รุ่นเมื่อ $1",
-       "revision-info": "รุ่นเมื่อ $1 โดย $2",
+       "revision-info": "รุ่นเมื่อ $1 โดย {{GENDER:$6|$2}}$7",
        "previousrevision": "←รุ่นก่อนหน้า",
        "nextrevision": "รุ่นถัดไป→",
        "currentrevisionlink": "รุ่นล่าสุด",
        "searchmenu-exists": "<strong>มีหน้าชื่อ \"[[:$1]]\" บนวิกินี้</strong>\n{{PLURAL:$2|0=|ดูผลการค้นหาอื่นที่พบเพิ่มเติม}}",
        "searchmenu-new": "<strong>สร้างหน้า \"[[:$1]]\" บนวิกินี้!</strong> {{PLURAL:$2|0=|ดูหน้าที่พบด้วยการค้นหาของคุณ|ดูผลการค้นหาที่พบเพิ่มเติม}}",
        "searchprofile-articles": "หน้าเนื้อหา",
-       "searchprofile-project": "คำอธิบายและหน้าโครงการ",
        "searchprofile-images": "มัลติมีเดีย",
        "searchprofile-everything": "ทุกอย่าง",
        "searchprofile-advanced": "ชั้นสูง",
        "searchprofile-articles-tooltip": "ค้นหาใน $1",
-       "searchprofile-project-tooltip": "ค้นหาใน $1",
        "searchprofile-images-tooltip": "ค้นหาไฟล์",
        "searchprofile-everything-tooltip": "ค้นเนื้อหาทั้งหมด (รวมหน้าอภิปราย)",
        "searchprofile-advanced-tooltip": "ค้นหาในเนมสเปซที่เลือกเอง",
        "search-interwiki-default": "ผลลัพธ์จาก $1 :",
        "search-interwiki-more": "(เพิ่มเติม)",
        "search-relatedarticle": "สัมพันธ์",
-       "searcheverything-enable": "ค้นหาในทุกเนมสเปซ",
        "searchrelated": "สัมพันธ์",
        "searchall": "ทั้งหมด",
        "showingresults": "ด้านล่างแสดง <strong>1</strong> ผลลัพธ์ เริ่มตั้งแต่รายการที่ <strong>$2</strong>",
        "powersearch-togglelabel": "เลือก:",
        "powersearch-toggleall": "ทั้งหมด",
        "powersearch-togglenone": "ไม่เลือก",
+       "powersearch-remember": "จำการเลือกสำหรับการค้นหาในอนาคต",
        "search-external": "ค้นหาภายนอก",
        "searchdisabled": "การค้นหา {{SITENAME}} ปิดใช้งาน คุณสามารถค้นหาผ่านกูเกิลหรือเซิร์ชเอนจินอื่นในเวลาไม่นาน โปรดทราบว่าดัชนีเนื้อหาของ {{SITENAME}} บนเซิร์ชเอนจินอาจเป็นข้อมูลเก่า",
        "search-error": "เกิดข้อผิดพลาดขณะกำลังค้นหา: $1",
        "allowemail": "เปิดรับอีเมลจากผู้ใช้อื่น",
        "prefs-searchoptions": "ค้นหา",
        "prefs-namespaces": "เนมสเปซ",
-       "defaultns": "หรือค้นหาในเนมสเปซต่อไปนี้:",
        "default": "ค่าโดยปริยาย",
        "prefs-files": "ไฟล์",
        "prefs-custom-css": "สไตล์ชีตปรับแต่งเอง",
        "recentchanges-label-unpatrolled": "การแก้ไขนี้ยังไม่ได้ตรวจสอบ",
        "recentchanges-label-plusminus": "ขนาดของหน้าเปลี่ยนไปด้วยจำนวนไบต์เท่านี้",
        "recentchanges-legend-heading": "'''คำอธิบายสัญลักษณ์:'''",
-       "recentchanges-legend-newpage": "(ดูเพิ่มที่[[Special:NewPages|รายชื่อหน้าใหม่]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ดูเพิ่มที่[[Special:NewPages|รายชื่อหน้าใหม่]])",
        "rcnotefrom": "ด้านล่างเป็นการเปลี่ยนแปลงตั้งแต่ <strong>$2</strong> (มากสุด <strong>$1</strong> รายการ)",
        "rclistfrom": "แสดงการเปลี่ยนแปลงใหม่เริ่มตั้งแต่ $3 $2",
        "rcshowhideminor": "$1การแก้ไขเล็กน้อย",
        "watchnologin": "ยังไม่ได้ล็อกอิน",
        "addwatch": "เพิ่มเข้ารายการเฝ้าดู",
        "addedwatchtext": "หน้า \"[[:$1]]\" ได้เพิ่มลงใน[[Special:Watchlist|รายการเฝ้าดู]]ของคุณแล้ว การเปลี่ยนแปลงในหน้านี้หรือหน้าพูดคุยที่เกี่ยวข้องจะแสดงในรายการดังกล่าว",
+       "addedwatchtext-short": "หน้า \"$1\" ถูกเพิ่มเข้ารายการเฝ้าดูของคุณ",
        "removewatch": "นำออกจากรายการเฝ้าดู",
        "removedwatchtext": "หน้า \"[[:$1]]\" ถูกนำออกจาก[[Special:Watchlist|รายการเฝ้าดูของคุณ]]",
+       "removedwatchtext-short": "หน้า \"$1\" ถูกนำออกจากรายการเฝ้าดูของคุณ",
        "watch": "เฝ้าดู",
        "watchthispage": "เฝ้าดูหน้านี้",
        "unwatch": "เลิกเฝ้าดู",
        "movereason": "เหตุผล:",
        "revertmove": "ย้อน",
        "delete_and_move": "ลบและย้าย",
-       "delete_and_move_text": "== ต้องการลบ ==\n\nมีหน้าปลายทาง \"[[:$1]]\" แล้ว คุณต้องการลบหน้านั้นหรือไม่เพื่อดำเนินการต่อ",
+       "delete_and_move_text": "== ต้องการลบ ==\nมีหน้าปลายทาง \"[[:$1]]\" แล้ว คุณต้องการลบหน้าดังกล่าวเพื่อสร้างหนทางที่จะย้ายหรือไม่?",
        "delete_and_move_confirm": "ใช่ ต้องการจะลบและย้าย",
        "delete_and_move_reason": "ลบเพื่อสร้างหนทางที่จะย้ายจาก \"[[$1]]\"",
        "selfmove": "ชื่อหน้าต้นทางและปลายทางเป็นชื่อเดียวกัน ไม่สามารถเปลี่ยนชื่อได้มาใช้ชื่อเดิมได้",
        "tooltip-preferences-save": "บันทึกการตั้งค่า",
        "tooltip-summary": "ใส่คำอธิบายอย่างย่อสั้น ๆ",
        "common.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ทุกสกิน */",
-       "cologneblue.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินโคโลญจ์บลู */",
        "monobook.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินโมโนบุ๊ก */",
-       "modern.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินโมเดิร์น */",
        "vector.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินเวกเตอร์ */",
        "print.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ข้อมูลส่งออกเป็นสิ่งพิมพ์ */",
        "noscript.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ปิดการใช้งานจาวาสคริปต์ */",
        "group-sysop.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ดูแลเท่านั้น */",
        "group-bureaucrat.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ดูแลสิทธิแต่งตั้งเท่านั้น */",
        "common.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ทุกคนในทุกหน้า */",
-       "cologneblue.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินโคโลญจ์บลู */",
        "monobook.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินโมโนบุ๊ก */",
-       "modern.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินโมเดิร์น */",
        "vector.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินเวกเตอร์ */",
        "group-autoconfirmed.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ทั่วไปเท่านั้น */",
        "group-bot.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่บอตเท่านั้น */",
        "pageinfo-category-pages": "จำนวนหน้า",
        "pageinfo-category-subcats": "จำนวนหมวดหมู่ย่อย",
        "pageinfo-category-files": "จำนวนไฟล์",
-       "skinname-cologneblue": "โคโลญจ์บลู",
        "skinname-monobook": "โมโนบุ๊ก",
-       "skinname-modern": "โมเดิร์น",
        "skinname-vector": "เวกเตอร์",
        "markaspatrolleddiff": "ทำเครื่องหมายว่าตรวจสอบแล้ว",
        "markaspatrolledtext": "ทำเครื่องหมายว่าหน้านี้ถูกตรวจสอบแล้ว",
index 0c39b04..c90035d 100644 (file)
        "loginprompt": "Dapat na pinapahintulutan mo ang mga kuki (''cookie'') upang makalagda sa {{SITENAME}}.",
        "userlogin": "Lumagda / lumikha ng account",
        "userloginnocreate": "Lumagda",
-       "logout": "Umalis sa pagkakalagda",
-       "userlogout": "Umalis sa pagkakalagda",
+       "logout": "Umalis sa pagkaka-login",
+       "userlogout": "Umalis sa pagkaka-login",
        "notloggedin": "Hindi nakalagda",
        "userlogin-noaccount": "Wala ka pa bang account?",
        "userlogin-joinproject": "Sumali sa {{SITENAME}}",
        "passwordremindertext": "Mayroong (na maaaring ikaw, mula sa adres ng IP na $1) humiling ng isang bagong\npassword para sa {{SITENAME}} ($4). Isang pansamantalang password ang nilikha\npara sa tagagamit na \"$2\" at itinakda sa \"$3\".  Kung ito ang iyong pakay,\nkailangan mo na ngayong mag-login at pumili ng isang bagong password.\nMawawala/magtatapos ang bisa ang pansamantala mong password sa loob ng {{PLURAL:$5|isang araw|$5 araw}}.\n\nKung ibang tao ang humiling nito, o kung naalala mo na ang iyong password,\nat hindi mo na ibig pang baguhin ito, maaari mong huwag pansinin ang mensaheng ito at\nmagpatuloy sa paggamit ng iyong lumang password.",
        "noemail": "Walang nakatalang adres ng e-liham para sa tagagamit na \"$1\".",
        "noemailcreate": "Kailangan mong magbigay ng may-bisang direksiyong e-liham",
-       "passwordsent": "Isang bagong hudyat ang ipinadala sa adres ng e-liham na nakatala para kay \"$1\".\nLumagda/Tumala lang po muli pagkaraan mong matanggap ito.",
+       "passwordsent": "Isang bagong password ang ipinadala sa email address na nakatala para kay \"$1\".\nPaki login muli pagkaraan mong matanggap ito.",
        "blocked-mailpassword": "Hinarangan sa paggawa ng mga pagbabago ang iyong adres ng IP, at kaya hindi rin pinapahintulutang gumamit ng tungkuling makabawi ng hudyat para maiwasan ang pangaabuso.",
        "eauthentsent": "Nagpadala ng isang email na pangkompirmasyon doon sa tinukoy na email address.\nBago magpadala ng iba email sa account, kailangan mong sundin ang mga tagubiling nasa loob ng email, para mapatunayang iyo talaga ang account.",
        "throttled-mailpassword": "Nagpadala na ng isang paalalang pang-password, nitong huling {{PLURAL:$1|oras|$1 oras}}.\nPara maiwasin ang pangaabuso, isang paalalang pang-password lamang ang ipapadala bawat {{PLURAL:$1|oras|$1 oras}}.",
        "continue-editing": "Pumunta sa pook ng pamamatnugot",
        "previewconflict": "Ipinamamalas ng paunang tinging ito ang teksto sa loob ng pangitaas na pook-patnugutan ng teksto ayon sa lilitaw na anyo nito kapag pinili mo ang pagsagip.",
        "session_fail_preview": "'''Paumanhin! Hindi namin maproseso ang iyong pagbabago hinggil sa pagkawala ng datos ng sesyon.'''\nPakiulit muli.\nKung hindi ito gumana, subukang [[Special:UserLogout|umalis sa pagkalagda]] at bumalik muli.",
-       "session_fail_preview_html": "'''Paumanhin! Hindi namin maproseso ang iyong pagbabago hinggil sa pagkawala ng datos ng sesyon.'''\n\n''Dahil naka-andar ang hilaw na HTML sa {{SITENAME}}, nakatago ang paunang tingin bilang pag-iingat sa mga paglusob ng JavaScript.''\n\n'''Kung lehitimong pagbabago ito, paki-ulit muli.'''\nKung hindi pa rin ito gumagana, subukang [[Special:UserLogout|umalis sa pagkakalagda]] at lumagda muli.",
+       "session_fail_preview_html": "'''Paumanhin! Hindi namin maproseso ang iyong pagbabago hinggil sa pagkawala ng datos ng sesyon.'''\n\n''Dahil naka-andar ang hilaw na HTML sa {{SITENAME}}, nakatago ang paunang tingin bilang pag-iingat sa mga paglusob ng JavaScript.''\n\n'''Kung lehitimong pagbabago ito, paki-ulit muli.'''\nKung hindi pa rin ito gumagana, subukang [[Special:UserLogout|mag-logout]] at mag-login muli.",
        "token_suffix_mismatch": "'''Hindi tinanggap ang iyong pagbabago dahil sinira ng kliyente ang mga karakter na bantas sa ''token'' ng mamatnugot.\nTinanggihan ang pagbabago upang maiwasan ang korapsyon ng teksto ng artikulo.\nKadalasang nangyayari ito kapag gumagamit ka ng masurot na serbisyo ng hindi-nakikilalang apoderadong (''anonymous proxy'') nasa web.",
        "edit_form_incomplete": "'''Ilan sa mga bahagi ng pormularyong pampatnugot ay hindi nakarating sa tagapaghain; suriing muli na ang iyong mga pagbabago ay buo at subukang muli.'''",
        "editing": "Binabago ang $1",
        "searchmenu-exists": "'''Mayroong pahinang may pangalang \"[[:$1]]\" dito sa wiking ito'''",
        "searchmenu-new": "'''Likhain ang pahinang \"[[:$1]]\" sa wiking ito!'''",
        "searchprofile-articles": "Mga pahina ng nilalaman",
-       "searchprofile-project": "Mga pahina ng Tulong at Proyekto",
        "searchprofile-images": "Multimidya",
        "searchprofile-everything": "Lahat ng bagay",
        "searchprofile-advanced": "Mas mataas na antas",
        "searchprofile-articles-tooltip": "Hanapin sa $1",
-       "searchprofile-project-tooltip": "Hanapin sa $1",
        "searchprofile-images-tooltip": "Maghanap ng mga talaksan",
        "searchprofile-everything-tooltip": "Hanapin ang lahat ng nilalaman (kabilang ang mga pahina ng usapan)",
        "searchprofile-advanced-tooltip": "Hanapin sa pinasadyang mga espasyo ng pangalan",
        "search-interwiki-default": "$1 mga resulta:",
        "search-interwiki-more": "(mas marami pa)",
        "search-relatedarticle": "Kaugnay",
-       "searcheverything-enable": "Maghanap sa lahat ng ngalan-espasyo:",
        "searchrelated": "kaugnay",
        "searchall": "lahat",
        "showingresults": "Ipinapakita sa ibaba ang magpahanggang sa {{PLURAL:$1|'''1''' resultang|'''$1''' mga resultang}} nagsisimula sa #'''$2'''.",
        "powersearch-togglelabel": "Suriin:",
        "powersearch-toggleall": "Lahat",
        "powersearch-togglenone": "Wala",
+       "powersearch-remember": "Tandaan ang piniling ito para sa mga paghahanap sa hinaharap",
        "search-external": "Panlabas na paghahanap",
        "searchdisabled": "Nakapatay ang paghahanap sa {{SITENAME}}. Maaari kang pansamantalang maghanap sa pamamagitan ng Google. Tandaan na maaaring luma na ang kanilang mga indeks sa nilalaman ng {{SITENAME}}.",
        "preferences": "Mga kagustuhan",
        "allowemail": "Pahintulutan ang e-liham mula sa ibang mga tagagamit",
        "prefs-searchoptions": "Paghahanap",
        "prefs-namespaces": "Mga espasyo ng pangalan",
-       "defaultns": "O kaya maghanap sa mga pangalan ng espasyong ito:",
        "default": "Likas na pagtatakda",
        "prefs-files": "Mga talaksan",
        "prefs-custom-css": "Pasadyang CSS",
        "recentchanges-legend-newpage": "$1 - bagong pahina",
        "rcnotefrom": "Nasa ibaba ang mga pagbabago mula pa noong '''$2''' (ipinapakita ang magpahanggang sa '''$1''').",
        "rclistfrom": "Ipakita ang bagong mga pagbabago simula sa $3 $2",
-       "rcshowhideminor": "$1 maliliit na mga pagbabago",
+       "rcshowhideminor": "$1 ang mga maliliit na pagbabago",
        "rcshowhideminor-show": "Ipakita",
        "rcshowhideminor-hide": "Itago",
-       "rcshowhidebots": "$1 mga ''bot''",
+       "rcshowhidebots": "$1 ang mga bot",
        "rcshowhidebots-show": "Ipakita",
        "rcshowhidebots-hide": "Itago",
-       "rcshowhideliu": "$1 nakatalang mga tagagamit",
+       "rcshowhideliu": "$1 ang mga nakatalang tagagamit",
        "rcshowhideliu-show": "Ipakita",
        "rcshowhideliu-hide": "Itago",
-       "rcshowhideanons": "$1 hindi kilalang mga tagagamit",
+       "rcshowhideanons": "$1 ang mga 'di-kilalang tagagamit",
        "rcshowhideanons-show": "Ipakita",
        "rcshowhideanons-hide": "Itago",
-       "rcshowhidepatr": "$1 napatrolyang mga pagbabago",
+       "rcshowhidepatr": "$1 ang mga pagbabagong nakapatrolya",
        "rcshowhidepatr-show": "Ipakita",
        "rcshowhidepatr-hide": "Itago",
-       "rcshowhidemine": "$1 mga pagbabago ko",
+       "rcshowhidemine": "$1 ang mga pagbabago ko",
        "rcshowhidemine-show": "Ipakita",
        "rcshowhidemine-hide": "Itago",
        "rclinks": "Ipakita ang huling $1 mga pagbabago sa loob ng huling $2 mga araw<br />$3",
        "listgrouprights-addgroup-self-all": "Idagdag ang lahat ng mga pangkat sa sariling account",
        "listgrouprights-removegroup-self-all": "Alisin ang lahat ng mga pangkat mula sa sariling account",
        "mailnologin": "Walang adres na mapagpapadalahan",
-       "mailnologintext": "Kailangan mong [[Special:UserLogin|lumagda]] at magkaroon ng tanggap na e-liham sa iyong [[Special:Preferences|mga kagustuhan]] para makapagpadala ng e-liham sa ibang mga tagagamit.",
+       "mailnologintext": "Kailangan mong [[Special:UserLogin|maglogin]] at magkaroon ng balidong email address sa iyong [[Special:Preferences|mga kagustuhan]] para makapagpadala ng e-mail sa ibang mga tagagamit.",
        "emailuser": "Padalhan ng e-liham ang tagagamit",
        "emailuser-title-target": "Padalhan ng elektronikong liham ang {{GENDER:$1|tagagamit}} na ito",
        "emailuser-title-notarget": "Padalhan ng e-liham ang tagagamit",
        "revertpage-nouser": "Ibinalik ang mga pagbabago ni (tinanggal ang bansag) patungo sa huling rebisyon ni [[User:$1|$1]]",
        "rollback-success": "Ibinalik ang mga pagbabago ni $1; ibinalik sa huling bersyon ni $2.",
        "sessionfailure-title": "Nabigong pulong",
-       "sessionfailure": "Tila mayroong suliraning may kaugnayan sa iyong sesyon/panahon ng pagkakalagda;\nKinansela ang galaw/gawaing ito bilang pagiingat laban sa pagnanakaw (panghahaydyak) ng sesyon/panahon.\nPakipindot ang pindutang \"ibalik\" (''back'') at ikarga uli ang pinanggalingan mong pahina, sumubok uli pagkaraan.",
+       "sessionfailure": "Tila mayroong suliraning may kaugnayan sa iyong sesyon ng login;\nKinansela ang gawaing ito bilang pag-iingat laban sa pagnanakaw ng sesyon.\nPakipindot ang pindutang \"ibalik\" Bumalik muli sa nakaraang pahina at ikarga uli (''reload'') ito at pagkatapos subukan muli.",
        "protectlogpage": "Talaan ng pagsasanggalang",
        "protectlogtext": "Nasa ibaba ang isang talaan ng mga pagbabago sa mga pruteksiyon ng pahina.\nTingnan ang [[Special:ProtectedPages|talaan ng pinuprutektahang mga pahina]] para sa talaan ng kasalukuyang gumaganang mga pagprutekta ng pahina.",
        "protectedarticle": "ipinagsanggalang ang \"[[$1]]\"",
        "tooltip-pt-watchlist": "Ang talaan ng mga pagbabago sa mga pahinang binabantayan mo",
        "tooltip-pt-mycontris": "Talaan ng mga ambag mo",
        "tooltip-pt-login": "Hinihimok kang lumagda, bagaman hindi ito kinakailangan.",
-       "tooltip-pt-logout": "Umalis sa pagkakalagda",
+       "tooltip-pt-logout": "Umalis sa pagkaka-login",
        "tooltip-ca-talk": "Usapan tungkol sa nilalaman ng pahinang ito",
        "tooltip-ca-edit": "Maaaring baguhin ang pahinang ito. Paki gamit ang buton ng paunang tingin bago itala.",
        "tooltip-ca-addsection": "Magsimula ng isang bagong seksiyon",
        "tooltip-preferences-save": "Sagipin ang mga nais",
        "tooltip-summary": "Magbigay ng maikling buod",
        "common.css": "/* Ang inilagay na CSS dito ay gagamitin para sa lahat ng mga pabalat */",
-       "cologneblue.css": "/* Ang Cascading Style Sheets na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Cologne Blue */",
        "monobook.css": "/* Ang CSS na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Monobook */",
-       "modern.css": "/* Ang CSS na iniligay dito ay makakaapekto sa tagagamit ng Makabagong (''Modern'') pabalat */",
        "vector.css": "/* Ang inilagay na CSS dito ay makakaapekto sa mga tagagamit ng pabalat na Vector */",
        "print.css": "/* Ang CSS na inilagay dito ay makakaapekto sa kalalabasan o resulta ng paglilimbag */",
        "noscript.css": "/* Ang inilagay na Cascading Style Sheets dito ay makakaapekto sa mga tagagamit na hindi nagpapagana ng JavaScript */",
        "group-sysop.css": "/* Ang inilagay na Mga Pilas ng Estilong Lumalagaslas (Cascading Style Sheets) dito ay makakaapekto lamang sa mga tagapagpaandar ng sistema */",
        "group-bureaucrat.css": "/* Ang inilagay na Mga Pilas ng Estilong Lumalagaslas (Cascading Style Sheets o CSS) dito ay makakaapekto lamang sa mga burokrata */",
        "common.js": "/* Ang anumang JavaScript dito ay ikakarga para sa lahat ng mga tagagamit ng bawat pahinang ikinarga. */",
-       "cologneblue.js": "/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit ng pabalat na Cologne Blue */",
        "monobook.js": "/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na MonoBook */",
-       "modern.js": "/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng Modernong pabalat */",
        "vector.js": "/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na Vector */",
        "group-autoconfirmed.js": "/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na kusang natiyak lamang */",
        "group-bot.js": "/* Ang anumang JavaScript dito ay ikakarga para sa mga bot lamang */",
        "pageinfo-magic-words": "{{PLURAL:$1|Salita|Mga salita}}ng mahiwaga ($1)",
        "pageinfo-hidden-categories": "Nakatagong {{PLURAL:$1|kategorya|mga kategorya}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|Suleras|Mga suleras}} ($1) na nasa transklusyon (kasama sa maraming mga lugar)",
-       "skinname-cologneblue": "Cologne Blue",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Makabago (Moderno)",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "Tatakan bilang napatrolya na",
        "markaspatrolledtext": "Tatakan ang pahinang ito bilang napatrolya na",
        "confirmemail_sendfailed": "Hindi maipadala ng {{SITENAME}} ang iyong liham ng pagpapatotoo (kumpirmasyon).\nPakisuri ang iyong adres ng e-liham kung may mga hindi tanggap na mga panitik/karakter.\n\nIbinalik ng tagapagpadala ang: $1",
        "confirmemail_invalid": "Hindi tamang kodigo ng kumpirmasyon.  Maaaring lumagpas na sa taning ang kodigo.",
        "confirmemail_needlogin": "Kailangan mong $1 upang kumpirmahin/mapatotohanan ang iyong adres ng e-liham.",
-       "confirmemail_success": "Nakumpirma/napatotohanan na ang adres ng e-liham mo. Maaari ka ng [[Special:UserLogin|lumagda]] at maglibang sa wiki.",
+       "confirmemail_success": "Napatotohanan na ang email address mo. Maaari ka ng [[Special:UserLogin|mag-login]] at ikalugod ang wiki.",
        "confirmemail_loggedin": "Natiyak na ngayon ang tirahan ng e-liham mo.",
        "confirmemail_subject": "Kumpirmasyon/pagpapatotoong pang-adres ng e-liham ng {{SITENAME}}",
        "confirmemail_body": "May isang tao, malamang ikaw, na mula sa IP address na $1,\nang nagtala ng isang account na \"$2\" na mayroong ganitong email address sa {{SITENAME}}.\n\nPara patotohanang ikaw nga ang may-ari ng account ito at para buhayin ang mga tampok (features) sa email sa {{SITENAME}}, buksan ang link na ito sa iyong browser:\n\n$3\n\nKung *hindi* mo itinala ang account, sundan mo ang link na ito\npara kanselahin o huwag nang ituloy ang pagpapatotoo ng email address:\n\n$5\n\nMagwawalang-saysay ang kodigo ng pagpapatotoong ito sa $4.",
index 8df60af..50c3a95 100644 (file)
@@ -58,7 +58,9 @@
                        "Vito Genovese",
                        "Vugar 1981",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Arystanbek",
+                       "Sayginer"
                ]
        },
        "tog-underline": "Bağlantıların altını çiz:",
        "vector-view-view": "Oku",
        "vector-view-viewsource": "Kaynağı gör",
        "actions": "Eylemler",
+       "vector-more-actions": "Diğer",
        "namespaces": "Ad alanları",
        "variants": "Türevler",
        "navigation-heading": "Gezinti menüsü",
        "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",
        "pool-timeout": "Kilit için zaman bitimi bekleniyor",
        "pool-queuefull": "Havuz sırası dolu",
        "pool-errorunknown": "Bilinmeyen hata",
        "searchmenu-exists": "'''Bu vikide \"[[:$1]]\" adında bir sayfa mevcut'''",
        "searchmenu-new": "<strong>Bu vikide \"[[:$1]]\" sayfasını oluştur!</strong> {{PLURAL:$2|0=|Ayrıca aramınızda bulunan sayfayı görün.|Ayrıca bulunan arama sonuçlarını görün.}}",
        "searchprofile-articles": "İçerik sayfaları",
-       "searchprofile-project": "Yardım ve proje sayfaları",
        "searchprofile-images": "Çokluortam",
        "searchprofile-everything": "Her şey",
        "searchprofile-advanced": "Gelişmiş",
        "searchprofile-articles-tooltip": "$1 içinde ara",
-       "searchprofile-project-tooltip": "$1 içinde ara",
        "searchprofile-images-tooltip": "Dosya ara",
        "searchprofile-everything-tooltip": "Tüm içerikte ara (tartışma sayfaları dahil)",
        "searchprofile-advanced-tooltip": "Özel ad alanlarında ara",
        "search-interwiki-default": "$1 sonuçlar:",
        "search-interwiki-more": "(daha çok)",
        "search-relatedarticle": "ilgili",
-       "searcheverything-enable": "Tüm ad alanlarında ara",
        "searchrelated": "ilgili",
        "searchall": "hepsi",
        "showingresults": "$2. sonuçtan başlayarak {{PLURAL:$1|'''1''' sonuç |'''$1''' sonuç }} aşağıdadır:",
        "powersearch-togglelabel": "Seç:",
        "powersearch-toggleall": "Hepsi",
        "powersearch-togglenone": "Hiçbiri",
+       "powersearch-remember": "Gelecek aramalarda seçimi hatırla",
        "search-external": "Dış arama",
        "searchdisabled": "{{SITENAME}} sitesinde arama yapma geçici olarak durdurulmuştur. Bu arada Google kullanarak {{SITENAME}} içinde arama yapabilirsiniz. Arama sitelerinde dizinlerin biraz eski kalmış olabileceğini göz önünde bulundurunuz.",
        "search-error": "Arama yapılırken bir hata oluştu: $1",
        "allowemail": "Diğer kullanıcılar bana e-posta atabilsin",
        "prefs-searchoptions": "Arama",
        "prefs-namespaces": "İsim alanları",
-       "defaultns": "Aksi halde bu ad alanlarında ara:",
        "default": "varsayılan",
        "prefs-files": "Dosyalar",
        "prefs-custom-css": "Özel CSS",
        "right-move": "Sayfaları taşı",
        "right-move-subpages": "Sayfaları altsayfalarıyla beraber taşı",
        "right-move-rootuserpages": "Kök kullanıcı sayfalarını taşı",
+       "right-move-categorypages": "Kategori sayfaları taşı",
        "right-movefile": "Dosyaları taşı",
        "right-suppressredirect": "Bir sayfayı taşırken eski isimden yönlendirme oluşturma",
        "right-upload": "Dosyaları yükle",
        "action-createpage": "sayfa oluşturmaya",
        "action-createtalk": "tartışma sayfası oluşturmaya",
        "action-createaccount": "bu kullanıcı hesabını oluşturmaya",
+       "action-history": "sayfa geçmişini görüntüle",
        "action-minoredit": "bu değişikliği küçük olarak işaretlemeye",
        "action-move": "bu sayfayı taşımaya",
        "action-move-subpages": "bu sayfayı ve altsayfalarını taşımaya",
        "action-move-rootuserpages": "kök kullanıcı sayfalarını taşımaya",
+       "action-move-categorypages": "kategori sayfalarını taşı",
        "action-movefile": "bu dosyayı taşımaya",
        "action-upload": "bu dosyayı yüklemeye",
        "action-reupload": "bu mevcut dosyanın üzerine yazmaya",
        "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": "(ayrıca bakınız [[Special:NewPages|yeni sayfalar listesi]])",
-       "rcnotefrom": "'''$2''' tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla <b>$1</b> tanesi gösterilmektedir).",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ayrıca bakınız [[Special:NewPages|yeni sayfalar listesi]])",
+       "rcnotefrom": "<strong>$2</strong> tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla <strong>$1</strong> tanesi gösterilmektedir).",
        "rclistfrom": "$3 $2 tarihinden itibaren yeni değişiklikleri göster",
        "rcshowhideminor": "Küçük değişiklikleri $1",
        "rcshowhideminor-show": "Göster",
-       "rcshowhideminor-hide": "Gizle",
+       "rcshowhideminor-hide": "gizle",
        "rcshowhidebots": "botları $1",
-       "rcshowhidebots-show": "Göster",
-       "rcshowhidebots-hide": "Gizle",
+       "rcshowhidebots-show": "göster",
+       "rcshowhidebots-hide": "gizle",
        "rcshowhideliu": "Kayıtlı kullanıcıları $1",
        "rcshowhideliu-show": "göster",
        "rcshowhideliu-hide": "gizle",
        "rcshowhideanons": "Anonim kullanıcıları $1",
        "rcshowhideanons-show": "Göster",
-       "rcshowhideanons-hide": "Gizle",
+       "rcshowhideanons-hide": "gizle",
        "rcshowhidepatr": "İzlenmiş değişiklikleri $1",
        "rcshowhidepatr-show": "Göster",
        "rcshowhidepatr-hide": "Gizle",
        "rcshowhidemine": "Değişikliklerimi $1",
        "rcshowhidemine-show": "Göster",
-       "rcshowhidemine-hide": "Gizle",
+       "rcshowhidemine-hide": "gizle",
        "rclinks": "Son $2 günde yapılan son $1 değişikliği göster;<br /> $3",
        "diff": "fark",
        "hist": "geçmiş",
        "largefileserver": "Bu dosyanın uzunluğu sunucuda izin verilenden daha büyüktür.",
        "emptyfile": "Yüklediğiniz dosya boş görünüyor. Bunun sebebi dosya adındaki bir yazım hatası olabilir. Lütfen dosyayı gerçekten yüklemek isteyip istemediğinizden emin olun.",
        "windows-nonascii-filename": "Bu viki dosya isimlerinde özel karakter kullanımını desteklemiyor",
-       "fileexists": "Bu isimde bir dosya mevcut.\nEğer değiştirmekten emin değilseniz ilk önce <strong>[[:$1]]</strong> dosyasına bir gözatın.\n[[$1|thumb]]",
+       "fileexists": "Bu isimde bir dosya mevcut; eğer değiştirmekten emin değilseniz ilk önce <strong>[[:$1]]</strong> dosyasına bir göz atın.\n[[$1|thumb]]",
        "filepageexists": "Bu dosya için açıklama sayfası <strong>[[:$1]]</strong> adresinde zaten oluşturulmuş, fakat bu isimde bir dosya şu anda mevcut değil.\nGireceğiniz özet açıklama sayfasında görünmeyecektir.\nÖzetinizin orada görünmesi için, bunu elle değiştirmelisiniz.\n[[$1|küçük resim]]",
        "fileexists-extension": "Benzer isimle başka bir dosya mevcut: [[$2|thumb]]\n* Yüklenilen dosyanın adı: <strong>[[:$1]]</strong>\n* Varolan dosyanın adı: <strong>[[:$2]]</strong>\nLütfen başka bir isim seçin",
        "fileexists-thumbnail-yes": "Bu dosya, bir resmi küçültülmüş sürümü gibi görünüyor ''(thumbnail)''. [[$1|thumb]]\nLütfen <strong>[[:$1]]</strong> dosyasını kontrol edin .\nEğer kontrol edilen dosya ile özgün boyutundaki aynı dosyaysa fazladan küçük resim yüklemeye gerek yoktur.",
        "watchnologin": "Oturum açık değil.",
        "addwatch": "İzleme listesine ekle",
        "addedwatchtext": "\"[[:$1]]\" sayfası [[Special:Watchlist|izleme listenize]] eklenmiştir.\nBundan sonra, bu sayfaya ve ilgili tartışma sayfasına yapılacak değişiklikler burada listelenecek.",
+       "addedwatchtext-short": "\"$1\" sayfası izleme listenize eklendi.",
        "removewatch": "İzleme listesinden kaldır",
        "removedwatchtext": "\"[[:$1]]\" sayfası [[Special:Watchlist|izleme listenizden]] silinmiştir.",
+       "removedwatchtext-short": "\"$1\" sayfası izleme listenizden çıkarıldı.",
        "watch": "izle",
        "watchthispage": "Sayfayı izle",
        "unwatch": "İzleme",
        "delete-edit-reasonlist": "Silme nedenlerini değiştir",
        "delete-toobig": "Bu sayfa, $1 {{PLURAL:$1|tane değişiklik|tane değişiklik}} ile çok uzun bir geçmişe sahiptir.\nBöyle sayfaların silinmesi, {{SITENAME}} sitesini bozmamak için sınırlanmaktadır.",
        "delete-warning-toobig": "Bu sayfanın büyük bir değişiklik geçmişi var, $1 {{PLURAL:$1|revizyonun|revizyonun}} üzerinde.\nBunu silmek {{SITENAME}} işlemlerini aksatabilir;\ndikkatle devam edin.",
-       "deleting-backlinks-warning": "'''Uyarı:''' Silmek üzere olduğunuz sayfaya başka sayfalardan bağlantıları var veya sayfanın bazı bölümleri başka sayfalar tarafından alıntı olarak kullanılıyor.",
+       "deleting-backlinks-warning": "'''Uyarı:''' Silmek üzere olduğunuz sayfaya [[Özel:SayfayaBağlantılar/{{FULLPAGENAME}}|başka sayfalardan]] bağlantılar var veya sayfanın bazı bölümleri başka sayfalar tarafından alıntı olarak kullanılıyor.",
        "rollback": "değişiklikleri geri al",
        "rollback_short": "geri al",
        "rollbacklink": "geri döndür",
        "contributions-title": "$1 için kullanıcı katkıları",
        "mycontris": "Katkılar",
        "contribsub2": "{{GENDER:$3|$1}} ($2) tarafından",
+       "contributions-userdoesnotexist": "\"$1\" kullanıcı hesabı kayıtlı değil.",
        "nocontribs": "Bu kriterlere uyan değişiklik bulunamadı",
        "uctop": "(son)",
        "month": "Ay:",
        "movenotallowedfile": "Sayfaları taşımaya izniniz yok.",
        "cant-move-user-page": "Kullanıcı sayfalarını taşımaya izniniz yok (altsayfalardan başka).",
        "cant-move-to-user-page": "Bir sayfayı, bir kullanıcı sayfasına taşımaya izniniz yok (bir kullanıcı altsayfası dışında).",
+       "cant-move-to-category-page": "Bir sayfayı, bir kategoriye taşımaya izniniz yok.",
        "newtitle": "Yeni isim",
        "move-watch": "Bu sayfayı izle",
        "movepagebtn": "İsmi değiştir",
        "pageinfo-category-pages": "Sayfa sayısı",
        "pageinfo-category-subcats": "Alt kategori sayısı",
        "pageinfo-category-files": "Dosya sayısı",
-       "skinname-modern": "Modern",
        "markaspatrolleddiff": "Kontrol edilmiş olarak işaretle",
        "markaspatrolledtext": "Kontrol edilmiş olarak işaretle",
        "markedaspatrolled": "Kontrol edildi",
        "newimages-summary": "Bu özel sayfa, en son yüklenen dosyaları göstermektedir.",
        "newimages-legend": "Filtre",
        "newimages-label": "Dosya adı (ya da bir parçası):",
+       "newimages-showbots": "Bot yüklemelerini göster",
        "noimages": "Görecek bir şey yok.",
        "ilsubmit": "Ara",
        "bydate": "kronolojik sırayla",
        "watchlistedit-raw-done": "İzleme listeniz güncellendi.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 başlık|$1 başlık}} eklendi:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 başlık|$1 başlık}} silindi:",
+       "watchlistedit-clear-legend": "İzleme listesini temizle",
+       "watchlistedit-clear-explain": "İzleme listenizdeki tüm başlıklar silinecek",
+       "watchlistedit-clear-titles": "Başlıklar:",
+       "watchlistedit-clear-submit": "İzleme listesini temizle (Geri alınamaz!)",
+       "watchlistedit-clear-done": "İzleme listeniz temizlendi.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 başlık|$1 başlık}} silindi:",
+       "watchlisttools-clear": "İzleme listesini temizle",
        "watchlisttools-view": "İlgili değişiklikleri göster",
        "watchlisttools-edit": "İzleme listesini gör ve düzenle",
        "watchlisttools-raw": "Ham izleme listesini düzenle",
        "htmlform-no": "Hayır",
        "htmlform-yes": "Evet",
        "htmlform-chosen-placeholder": "Bir seçenek seçin",
+       "htmlform-cloner-delete": "Sil",
+       "htmlform-cloner-required": "En az bir değer gereklidir.",
        "sqlite-has-fts": "$1 tam-metin arama desteği ile",
        "sqlite-no-fts": "$1 tam-metin arama desteği olmaksızın",
        "logentry-delete-delete": "$1 $3 sayfasını {{GENDER:$2|sildi}}",
index 3812afb..7f173ef 100644 (file)
        "searchmenu-exists": "'''Бу вики-проекта «[[:$1]]» исемле бит бар инде'''",
        "searchmenu-new": "'''«[[:$1]]»  исемле яңа бит ясау'''",
        "searchprofile-articles": "Төп битләр",
-       "searchprofile-project": "Ярдәм һәм проектлар бите",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Һәркайда",
        "searchprofile-advanced": "Киңәйтелгән",
        "searchprofile-articles-tooltip": "$1 дә эзләү",
-       "searchprofile-project-tooltip": "$1 дә эзләү",
        "searchprofile-images-tooltip": "Файллар эзләү",
        "searchprofile-everything-tooltip": "Барлык битләрдә дә эзләү",
        "searchprofile-advanced-tooltip": "Бирелгән исемнәр мәйданында эзләү",
        "search-interwiki-default": "$1 нәтиҗә:",
        "search-interwiki-more": "(тагын)",
        "search-relatedarticle": "Бәйләнгән",
-       "searcheverything-enable": "Барлык исемнәр мәйданында эзләү",
        "searchrelated": "бәйләнгән",
        "searchall": "барлык",
        "showingresults": "Аста № '''$2''' {{PLURAL:$1|башлап}} '''$1''' {{PLURAL:$1|результат}} күрсәтелгән.",
        "allowemail": "Башка кулланучылардан хатлар алырга рөхсәт ителсен",
        "prefs-searchoptions": "Эзләү көйләнмәләре",
        "prefs-namespaces": "Исемнәр мәйданы",
-       "defaultns": "Алайса менә бу исемнәр мәйданында эзләү",
        "default": "килешү буенча",
        "prefs-files": "Файллар",
        "prefs-custom-css": "Үземнең CSS",
        "prefs-emailconfirm-label": "E-mail раслау",
        "youremail": "Электрон почта:",
        "username": "Кулланучы исеме:",
-       "uid": "Кулланучының идентификаторы:",
        "prefs-memberingroups": "Төркем {{PLURAL:$1|әгъзасы}}:",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "Теркәлү вакыты:",
        "recentchanges-label-bot": "Бу үзгәртү бот белән эшләнгән",
        "recentchanges-label-unpatrolled": "Үзгәртүне әлегә тикшермәгәннәр",
        "recentchanges-label-plusminus": "Битнең зурлыгы шуның кадәрле байтка үзгәрде",
-       "recentchanges-legend-newpage": "([[Special:NewPages|яңа бит]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|яңа бит]])",
        "rcnotefrom": "Астарак '''$2''' башлап ('''$1''' кадәр) үзгәртүләр күрсәтелгән.",
        "rclistfrom": "$3 $2 башлап яңа үзгәртүләрне күрсәт",
        "rcshowhideminor": "кече үзгәртүләрне $1",
        "alllogstext": "{{SITENAME}} сәхифәсенең гомуми көндәлекләре исемлеге.\nСез нәтиҗәләрне көндәлек төре, кулланучы исеме (хәреф зурлыгын истә тотыгыз) яки куззаллаган бит (шулай ук хәреф зурлыгын истә тотыгыз) буенча тәртипкә салырга мөмкин.",
        "logempty": "Кирәкле язмалар көндәлектә юк.",
        "allpages": "Барлык битләр",
-       "alphaindexline": "$1 битеннән $2 битенә кадәр",
        "nextpage": "Алдагы бит ($1)",
        "prevpage": "Алдагы бит ($1)",
        "allpagesfrom": "Моңа башланучы битләрне чыгару:",
        "creditspage": "Рәхмәтләр",
        "spamprotectiontitle": "Спам фильтры",
        "pageinfo-toolboxlink": "Бит турында мәгълүмат",
-       "skinname-cologneblue": "Зәңгәр сагыш",
        "skinname-monobook": "Китап",
-       "skinname-modern": "Замана",
        "skinname-vector": "Сызымлы",
        "markaspatrolledtext": "Бу мәкаләне тикшерелгән дип тамгалау",
        "markedaspatrolled": "Тикшерелгән дип тамгаланды",
index 332c006..598df5f 100644 (file)
        "databaseerror": "Медээ шыгжамыры алдаг",
        "laggedslavemode": "'''Оваарымчалыг:''' Бо арында чаартыышкыннар чок болуп болур.",
        "readonly": "шоочалаарынга медээ шыгжамыры",
-       "missing-article": "Ð\94аннÑ\8bйлаÑ\80 Ð±Ð°Ð·Ð°Ð·Ñ\8bнда Ñ\82Ñ\8bваÑ\80 Ñ\83жÑ\83Ñ\80лÑ\83г Â«$1» $2 Ð´ÐµÐ¿ Ð°Ñ\80Ñ\8bннÑ\8bÒ£ Ð½ÐµÐ³ÐµÑ\82Ñ\82инип Ñ\82Ñ\83Ñ\80аÑ\80 Ñ\81өзүглели Ñ\82Ñ\8bвÑ\8bлбаан.\n\nÐ\9dÑ\83Ñ\80гÑ\83лайÑ\8bнда Ñ\8bндÑ\8bг Ð±Ð°Ð¹Ð´Ð°Ð» Ñ\8dÑ\80ги Ñ\88өлүлге-биле казыттынган арынның өскерилге төөгүзүнче дамчып оралдажырга тыптыр.\n\nА шынында ындыг эвес болза, Силер программа хандырылгазының алдаанга душканыңар хөңнү.\n\nОоң дугайында кайы-бир [[Special:ListUsers/sysop|удуртукчуларга]], мүн URL-ин айытпышаан, дамчыдыңарам.",
+       "missing-article": "Ð\94аннÑ\8bйлаÑ\80 Ð±Ð°Ð·Ð°Ð·Ñ\8bнда Ñ\82Ñ\8bваÑ\80 Ñ\83жÑ\83Ñ\80лÑ\83г Â«$1» $2 Ð´ÐµÐ¿ Ð°Ñ\80Ñ\8bннÑ\8bÒ£ Ð½ÐµÐ³ÐµÑ\82Ñ\82инип Ñ\82Ñ\83Ñ\80аÑ\80 Ñ\81өзүглели Ñ\82Ñ\8bвÑ\8bлбаан.\n\nÐ\9dÑ\83Ñ\80гÑ\83лайÑ\8bнда Ñ\8bндÑ\8bг Ð±Ð°Ð¹Ð´Ð°Ð» Ñ\8dÑ\80ги Ñ\88өлүг-биле казыттынган арынның өскерилге төөгүзүнче дамчып оралдажырга тыптыр.\n\nА шынында ындыг эвес болза, Силер программа хандырылгазының алдаанга душканыңар хөңнү.\n\nОоң дугайында кайы-бир [[Special:ListUsers/sysop|удуртукчуларга]], мүн URL-ин айытпышаан, дамчыдыңарам.",
        "missingarticle-rev": "(үндүрериниң саны: $1)",
        "missingarticle-diff": "(Ылгал: $1, $2)",
        "internalerror": "Иштики алдаг",
        "viewsource": "Дөзүн көөрү",
        "actionthrottled": "Шеглээн дүрген",
        "exception-nologin": "Кирбес",
+       "welcomeuser": "Кирип моорлаңар, %s!",
        "yourname": "Aжыглакчының ады",
        "yourpassword": "Чажыт сөс",
        "yourpasswordagain": "Чажыт сөзүңерни катап бижиңер:",
        "searchmenu-exists": "'''Бо викиде \"[[:$1]]\" деп арын бар.'''",
        "searchmenu-new": "'''Бо викиде «[[:$1]]» арынны чогаадыры'''",
        "searchprofile-articles": "үндезин арыннар",
-       "searchprofile-project": "Төлевилел биле дуза арыннары",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Бүгүде",
        "searchprofile-advanced": "Калбайтыр",
        "searchprofile-articles-tooltip": "$1 иштинден дилээри",
-       "searchprofile-project-tooltip": "$1 иштинде дилээри",
        "searchprofile-images-tooltip": "Файлдар дилээри",
        "searchprofile-everything-tooltip": "Шупту арыннардан дилээри (сумележиишкиннерден база)",
        "searchprofile-advanced-tooltip": "Айыткан аттар делгемнеринден дилээри",
        "search-section": "(«$1» деп салбыр)",
        "search-suggest": "Силер «$1» деп бодадыңар чадавас",
        "search-interwiki-more": "(артык)",
-       "searcheverything-enable": "Шупту аттар делгемнеринден дилээри",
        "searchrelated": "холбаалыг",
        "searchall": "шупту",
        "showingresultsheader": "«'''$4'''» дилээниниң {{PLURAL:$5|1='''$3''' одуругдан '''$1''' түңнели|'''$3''' одуругдан '''$1—$2''' түңнелдери}}",
        "timezoneregion-asia": "Азия",
        "timezoneregion-australia": "Австралия",
        "timezoneregion-europe": "Европа",
+       "prefs-searchoptions": "Дилээшкин",
        "prefs-namespaces": "Аттар делгемнери",
        "default": "ниити",
        "prefs-files": "файлдар",
        "prefs-custom-js": "Бодуңар JavaScript",
        "youremail": "Э-чагааңар:",
        "username": "Aжыглакчының ады:",
-       "uid": "Ажыглакчынын саны (ID):",
        "prefs-memberingroups": "Силерниң {{PLURAL:$1|1=бөлүү|бөлүктери}}:",
        "prefs-registration": "Кажан даңзылатканыл:",
        "yourrealname": "Шын адыңар:",
        "speciallogtitlelabel": "Target (aтка азы ажыглакчыга):",
        "log": "Журналдар",
        "allpages": "Шупту арыннар",
-       "alphaindexline": "«$1» деп арындан «$2» деп арында",
        "nextpage": "Дараазында арын ($1)",
        "prevpage": "Эрткен арын ($1)",
        "allarticles": "Шупту арыннар",
        "block": "Ажыглакчыны кызыгаарлаары",
        "blockip": "Ажыглакчыны кызыгаарлаары",
        "blockip-legend": "Ажыглакчыны кызыгаарлаары",
-       "ipadressorusername": "ИП-адрес азы aжыглaкчының aды",
+       "ipaddressorusername": "ИП-адрес азы aжыглaкчының aды",
        "ipbreason": "Чылдагаан:",
        "ipbsubmit": "Бо ажыглакчыны кызыгаарлаары",
        "ipbother": "Өске шак:",
        "tooltip-undo": "Киирген эдигни казааш, ойталалдың чылдагаанын айтыр аргалыг мурнай көргүзүүн көргүзер.",
        "tooltip-summary": "Кысказы-биле бижиңер",
        "anonymous": "{{grammar:genitive|{{SITENAME}}}} адыжок {{PLURAL:$1|киржикчизи}}",
-       "skinname-cologneblue": "Cologne Blue",
+       "pageinfo-toolboxlink": "Арын дугайында медээлел",
        "skinname-monobook": "МоноБук",
-       "skinname-modern": "Модерн",
        "skinname-vector": "Вектор",
        "filedelete-missing": "«$1» деп файл чок, ынчангаш ол ап калдынмас.",
        "previousdiff": "← Артык эрги үндүрери",
        "show-big-image": "Улуг чурумал",
        "show-big-image-size": "$1 × $2 пиксел",
        "newimages-legend": "Шүүрү",
-       "showhidebots": "(роботтарны $1)",
        "noimages": "Nothing to see.",
        "ilsubmit": "Дилээр",
        "seconds": "{{PLURAL:$1|$1 секунда|$1 секунда}}",
        "feedback-subject": "Кол сөс:",
        "feedback-message": "Чагаа:",
        "feedback-cancel": "Соксаары",
+       "searchsuggest-search": "Дилээшкин",
        "duration-seconds": "$1 {{PLURAL:$1|секунда|секунда}}",
        "duration-minutes": "$1 {{PLURAL:$1|минут|минут}}",
        "duration-hours": "$1 {{PLURAL:$1|шак|шак}}",
index 2e329dc..22a8abb 100644 (file)
        "searchmenu-exists": "'''بۇ wiki دا  \"[[:$1]]\" ئاتلىق بەت بار '''",
        "searchmenu-new": "'''بۇ wiki دا  \"[[:$1]]\" ئاتلىق بەت قۇر!'''",
        "searchprofile-articles": "مەزمۇن بېتى",
-       "searchprofile-project": "ياردەم ۋە قۇرۇلۇش بەتلەر",
        "searchprofile-images": "كۆپ ۋاسىتە",
        "searchprofile-everything": "ھەممە بەت",
        "searchprofile-advanced": "ئالىي",
        "searchprofile-articles-tooltip": "$1 دىن ئىزدە",
-       "searchprofile-project-tooltip": "$1 دىن ئىزدە",
        "searchprofile-images-tooltip": "ھۆججەت ئىزدە",
        "searchprofile-everything-tooltip": "ھەممە مەزمۇننى ئىزدە (مۇنازىرە بەتمۇ ئىچىدە)",
        "searchprofile-advanced-tooltip": "ئادەتلەنگەن ئات بوشلۇقىدىن ئىزدە",
        "search-interwiki-default": "$1 نەتىجە:",
        "search-interwiki-more": "(تېخىمۇ كۆپ)",
        "search-relatedarticle": "ئالاقىدار",
-       "searcheverything-enable": "ھەممە ئات بوشلۇقىدىن ئىزدە",
        "searchrelated": "ئالاقىدار",
        "searchall": "ھەممىسى",
        "showingresults": "تۆۋەندە '''$2''' - نەتىجىدىن باشلانغان {{PLURAL:$1|'''1''' نەتىجە|'''$1''' نەتىجە}} كۆرسىتىدۇ:",
        "allowemail": "باشقا ئىشلەتكۈچىلەر ئېلخەت ئەۋەتىشنى قوزغات",
        "prefs-searchoptions": "ئىزدەش",
        "prefs-namespaces": "ئات بوشلۇقى",
-       "defaultns": "بولمىسا بۇ ئات بوشلۇقلىرىدىن ئىزدە:",
        "default": "كۆڭۈلدىكى",
        "prefs-files": "ھۆججەتلەر",
        "prefs-custom-css": "ئىختىيارى CSS",
        "prefs-emailconfirm-label": "ئېلخەت جەزملەش:",
        "youremail": "ئېلخەت:",
        "username": "{{GENDER:$1|ئىشلەتكۇچى ئىسمى}}:",
-       "uid": "{{GENDER:$1|ئىشلەتكۇچى}} كىملىك:",
        "prefs-memberingroups": "{{PLURAL:$1|گۇرۇپپا}} دىكى{{GENDER:$2| ئەزا}}:",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "خەتلەتكەن ۋاقىت:",
        "recentchanges-label-minor": "بۇ ئازراقلا تەھرىرلەش",
        "recentchanges-label-bot": "بۇ تەھرىرنى ماشىنا ئادەم ئېلىپ بارغان",
        "recentchanges-label-unpatrolled": "بۇ تەھرىر تېخى كۆزىتىلمىگەن",
-       "recentchanges-legend-newpage": "(بۇنىڭغىمۇ قاراڭ [[Special:NewPages|يېڭى بەتلەر تىزىملىگى]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بۇنىڭغىمۇ قاراڭ [[Special:NewPages|يېڭى بەتلەر تىزىملىگى]])",
        "rcnotefrom": "تۆۋەندىكىسى '''$2''' نىڭ ئۆزگەرتىشى (ئەڭ كۆپ بولغاندا '''$1''' كۆرسىتىدۇ )",
        "rclistfrom": "$3 $2 دىن باشلانغان يېڭى ئۆزگەرتىشنى كۆرسەت",
        "rcshowhideminor": "$1 ئازراقلا تەھرىر",
        "log-title-wildcard": "بۇ تېكست بىلەن باشلانغان ماۋزۇنى ئىزدە",
        "showhideselectedlogentries": "تالغان خاتىرىسى كۈرسەت / يوشۇر",
        "allpages": "ھەممە بەت",
-       "alphaindexline": "$1 دىن $2",
        "nextpage": "كەينى بەت ($1)",
        "prevpage": "ئالدىنقى بەت ($1)",
        "allpagesfrom": "باشلانغان بەتنى كۆرسەت:",
        "tooltip-preferences-save": "مايىللىق ساقلا",
        "tooltip-summary": "قىسقىچە ئۈزۈندە كىرگۈزۈڭ",
        "common.css": "/* CSS placed here will be applied to all skins */",
-       "cologneblue.css": "/* CSS placed here will affect users of the Cologne Blue skin */",
        "monobook.css": "/* CSS placed here will affect users of the Monobook skin */",
-       "modern.css": "/* CSS placed here will affect users of the Modern skin */",
        "vector.css": "/* CSS placed here will affect users of the Vector skin */",
        "print.css": "/* CSS placed here will affect the print output */",
        "noscript.css": "/* CSS placed here will affect users with JavaScript disabled */",
        "group-sysop.css": "/* CSS placed here will affect sysops only */",
        "group-bureaucrat.css": "/* CSS placed here will affect bureaucrats only */",
        "common.js": "/* Any JavaScript here will be loaded for all users on every page load. */",
-       "cologneblue.js": "/* Any JavaScript here will be loaded for users using the Cologne Blue skin */",
        "monobook.js": "/* Any JavaScript here will be loaded for users using the MonoBook skin */",
-       "modern.js": "/* Any JavaScript here will be loaded for users using the Modern skin */",
        "vector.js": "/* Any JavaScript here will be loaded for users using the Vector skin */",
        "group-autoconfirmed.js": "/* Any JavaScript here will be loaded for autoconfirmed users only */",
        "group-bot.js": "/* Any JavaScript here will be loaded for bots only */",
        "pageinfo-category-pages": "بەت سانى",
        "pageinfo-category-subcats": "تارماق تۈر سانى",
        "pageinfo-category-files": "ھۆججەت سانى",
-       "skinname-cologneblue": "Cologne Blue",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "Modern",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "چارلاش بەلگىسى قوي",
        "markaspatrolledtext": "بۇ بەتكە چارلاش بەلگىسى قوي",
index ff1c604..2c89568 100644 (file)
@@ -46,7 +46,8 @@
                        "Дар'я Козлова",
                        "Максим Підліснюк",
                        "Тест",
-                       "아라"
+                       "아라",
+                       "Calak"
                ]
        },
        "tog-underline": "Підкреслювати посилання:\nПідкреслювання посилань:",
        "category-empty": "''Ця категорія зараз порожня.''",
        "hidden-categories": "{{PLURAL:$1|1=Прихована категорія|Приховані категорії|Прихованих категорій}}",
        "hidden-category-category": "Приховані категорії",
-       "category-subcat-count": "Показано $1 {{PLURAL:$1|підкатегорію з|підкатегорії з|підкатегорій із}} $2.",
+       "category-subcat-count": "{{PLURAL:$2|Ця категорія має тільки таку підкатегорію.|Ця категорія має $1 {{PLURAL:$1|таку підкатегорію з|такі підкатегорії з|таких підкатегорій із}} $2.}}",
        "category-subcat-count-limited": "У цій категорії {{PLURAL:$1|$1 підкатегорія|$1 підкатегорії|$1 підкатегорій}}.",
        "category-article-count": "Показано $1 {{PLURAL:$1|сторінку|сторінки|сторінок}} цієї категорії (із $2).",
        "category-article-count-limited": "У цій категорії {{PLURAL:$1|$1 сторінка|$1 сторінки|$1 сторінок}}.",
        "vector-view-view": "Читати",
        "vector-view-viewsource": "Переглянути код",
        "actions": "Дії",
+       "vector-more-actions": "Більше",
        "namespaces": "Простори назв",
        "variants": "Варіанти",
        "navigation-heading": "Навігаційне меню",
        "searchmenu-exists": "'''У цій вікі є сторінка з назвою «[[:$1]]»'''",
        "searchmenu-new": "<strong>Створити сторінку «[[:$1]]» у цьому вікі-проекті!</strong>\n{{PLURAL:$2|0=|Див. також сторінку, знайдену по результатами вашого пошуку.|Див. також знайдені результати пошуку.}}",
        "searchprofile-articles": "Статті",
-       "searchprofile-project": "Сторінки довідки і проекту",
        "searchprofile-images": "Мультимедіа",
        "searchprofile-everything": "Усюди",
        "searchprofile-advanced": "Вибірково",
        "searchprofile-articles-tooltip": "Пошук у $1",
-       "searchprofile-project-tooltip": "Пошук у $1",
        "searchprofile-images-tooltip": "Пошук файлів",
        "searchprofile-everything-tooltip": "Пошук на всіх сторінках (включаючи сторінки обговорення)",
        "searchprofile-advanced-tooltip": "Шукати в заданих просторах назв",
        "search-interwiki-default": "Результати із $1:",
        "search-interwiki-more": "(більше)",
        "search-relatedarticle": "Пов'язаний",
-       "searcheverything-enable": "Пошук у всіх просторах назв",
        "searchrelated": "пов'язаний",
        "searchall": "усі",
        "showingresults": "Нижче {{PLURAL:$1|показане|показані|показані}} '''$1''' {{PLURAL:$1|результат|результати|результатів}}, починаючи з №&nbsp;'''$2'''",
        "powersearch-togglelabel": "Позначити:",
        "powersearch-toggleall": "Усі",
        "powersearch-togglenone": "Жодний",
+       "powersearch-remember": "Запам'ятати вибір для майбутніх пошуків",
        "search-external": "Зовнішній пошук",
        "searchdisabled": "<p>Вибачте, повнотекстовий пошук тимчасово недоступний через перевантаження сервера; передбачається, що ця функція буде знову включена після установки нового обладнання. Поки що ми пропонуємо вам скористатися Google чи Yahoo!:</p>",
        "search-error": "Сталася помилка під час пошуку:$1",
        "allowemail": "Дозволити електронну пошту від інших користувачів",
        "prefs-searchoptions": "Пошук",
        "prefs-namespaces": "Простори назв",
-       "defaultns": "Інакше шукати в таких просторах назв:",
        "default": "за умовчанням",
        "prefs-files": "Файли",
        "prefs-custom-css": "Власний CSS",
        "recentchanges-label-unpatrolled": "Це редагування ще не було відпатрульоване",
        "recentchanges-label-plusminus": "Розмір сторінки змінився на таке число байтів",
        "recentchanges-legend-heading": "'''Легенда:'''",
-       "recentchanges-legend-newpage": "(див. також [[Special:NewPages|список нових сторінок]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (див. також [[Special:NewPages|список нових сторінок]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Нижче відображені редагування з <strong>$2</strong> (до <strong>$1</strong>).",
        "rclistfrom": "Показати редагування починаючи з $3 $2.",
        "movepagetalktext": "Приєднана сторінка обговорення також буде автоматично перейменована, '''окрім таких випадків:'''\n* Непорожня сторінка обговорення з такою назвою вже існує або\n* Ви не поставили галочку в полі нижче.\n\nУ цих випадках ви будете змушені перейменувати чи об'єднати сторінки вручну в разі необхідності",
        "movearticle": "Перейменувати сторінку",
        "moveuserpage-warning": "'''Увага:''' Ви збираєтеся перейменувати сторінку користувача. Будь ласка, зверніть увагу, що  буде перейменовано тільки сторінку, але користувача '''не''' буде перейменовано.",
+       "movecategorypage-warning": "<strong>Увага:</strong> Ви збираєтесь перейменувати сторінку категорії. Будь ласка, зауважте, що це перейменує лише цю сторінку, <em>не</em> перемістивши сторінки, що входять до категорії до категорії з новою назвою.",
        "movenologintext": "Ви повинні [[Special:UserLogin|ввійти до системи]], щоб перейменувати сторінку.",
        "movenotallowed": "У вас нема дозволу перейменовувати сторінки.",
        "movenotallowedfile": "У вас немає прав перейменовувати файли.",
        "cant-move-user-page": "У вас нема дозволу перейменовувати сторінки користувачів.",
        "cant-move-to-user-page": "У вас нема дозволу перейменовувати сторінки на сторінки простору «Користувач» (окрім підсторінок)",
+       "cant-move-category-page": "У вас немає прав перейменовувати сторінки категорій.",
+       "cant-move-to-category-page": "У вас немає дозволу перейменовувати сторінку на сторінку категорії.",
        "newtitle": "Нова назва:",
        "move-watch": "Спостерігати за цією сторінкою",
        "movepagebtn": "Перейменувати сторінку",
        "tooltip-summary": "Введіть короткий опис",
        "interlanguage-link-title": "$1 — $2",
        "common.css": "/** Розміщений тут CSS буде застосовуватися до всіх тем оформлення */",
-       "cologneblue.css": "/* Розміщений тут CSS-код буде використаний для користувачів з налаштованою темою оформлення Кельнське блакитне */",
        "monobook.css": "/* Розміщений тут CSS буде застосовуватися до всіх тем оформлення Monobook */",
-       "modern.css": "/* Розміщений тут CSS-код буде використаний в темі оформлення Сучасне */",
        "vector.css": "/* Розміщений тут CSS-код буде використаний в темі оформлення Векторне */",
        "print.css": "/* Розміщений тут CSS-код буде використаний для друкованої версії */",
        "noscript.css": "/* Розміщений тут CSS-код буде використаний для користувачів у яких вимкнено JavaScript */",
        "group-sysop.css": "/* Розміщений тут CSS-код буде використаний тільки для адміністраторів */",
        "group-bureaucrat.css": "/* Розміщений тут CSS-код буде використаний тільки для бюрократів */",
        "common.js": "/* Розміщений тут код JavaScript буде завантажений всім користувачам при зверненні до будь-якої сторінки */",
-       "cologneblue.js": "/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують тему оформлення Кельнське синє */",
        "monobook.js": "/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують тему оформлення Моно-книга */",
-       "modern.js": "/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують тему оформлення Сучасне */",
        "vector.js": "/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують векторну тему оформлення */",
        "group-autoconfirmed.js": "/* Розміщений тут код JavaScript буде завантажений тільки для автопідтверджених користувачів */",
        "group-bot.js": "/* Розміщений тут код JavaScript буде завантажений тільки для ботів */",
        "pageinfo-category-pages": "Кількість сторінок",
        "pageinfo-category-subcats": "Кількість підкатегорій",
        "pageinfo-category-files": "Кількість файлів",
-       "skinname-cologneblue": "Кельнське синє",
        "skinname-monobook": "Моно-книга",
-       "skinname-modern": "Сучасне",
        "skinname-vector": "Векторне",
        "markaspatrolleddiff": "Позначити як перевірену",
        "markaspatrolledtext": "Позначити цю сторінку як перевірену",
        "newimages-summary": "Ця спеціальна сторінка показує останні завантажені файли.",
        "newimages-legend": "Фільтр",
        "newimages-label": "Назва файлу (або її частина):",
+       "newimages-showbots": "Показати завантаження ботами",
        "noimages": "Файли відсутні.",
        "ilsubmit": "Шукати",
        "bydate": "за датою",
        "watchlistedit-raw-done": "Ваш список спостереження збережений.",
        "watchlistedit-raw-added": "{{PLURAL:$1|$1 заголовок був доданий|$1 заголовки були додані|$1 заголовків були додані}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|$1 заголовок був вилучений|$1 заголовки були вилучені|$1 заголовків були вилучені}}:",
+       "watchlistedit-clear-title": "Список спостереження очищено",
+       "watchlistedit-clear-legend": "Очистити список спостереження",
+       "watchlistedit-clear-explain": "Усі сторінки буде вилучено з Вашого списку спостереження",
+       "watchlistedit-clear-titles": "Сторінки:",
+       "watchlistedit-clear-submit": "Очистити список спостереження (це безповоротньо!)",
+       "watchlistedit-clear-done": "Ваш список спостереження було очищено.",
+       "watchlistedit-too-many": "Забагато сторінок для відображення тут.",
+       "watchlisttools-clear": "Очистити список спостереження",
        "watchlisttools-view": "Зміни на сторінках зі списку",
        "watchlisttools-edit": "Переглянути/редагувати список",
        "watchlisttools-raw": "Редагувати як текст",
        "htmlform-no": "Ні",
        "htmlform-yes": "Так",
        "htmlform-chosen-placeholder": "Виберіть параметр",
+       "htmlform-cloner-create": "Додати більше",
+       "htmlform-cloner-delete": "Вилучити",
+       "htmlform-cloner-required": "Необхідно принаймні одне значення.",
        "sqlite-has-fts": "$1 з підтримкою повнотекстового пошуку",
        "sqlite-no-fts": "$1 без підтримки повнотекстового пошуку",
        "logentry-delete-delete": "$1 {{GENDER:$2|вилучив|вилучила}} сторінку $3",
index 1128468..22d26c3 100644 (file)
@@ -18,7 +18,8 @@
                        "سمرقندی",
                        "محبوب عالم",
                        "පසිඳු කාවින්ද",
-                       "아라"
+                       "아라",
+                       "Calak"
                ]
        },
        "tog-underline": "ربط کی خط کشیدگی:",
        "vector-view-view": "مطالعہ",
        "vector-view-viewsource": "مسودہ",
        "actions": "ایکشنز",
+       "vector-more-actions": "زیادہ",
        "namespaces": "جائے نام",
        "variants": "متغیرات",
        "errorpagetitle": "خطاء",
        "edit-gone-missing": "صفحہ تجدید نہیں کیا جاسکتا.\nلگتا ہے یہ حذف ہوچکا ہے.",
        "edit-conflict": "تنازعۂ تدوین.",
        "edit-no-change": "آپ کی تدوین کو نظرانداز کردیا گیا، کیونکہ متن میں کوئی تبدیلی نہیں ہوئی تھی.",
-       "postedit-confirmation": "آپ کی ترمیم محفوظ ہوگئی۔",
+       "postedit-confirmation-saved": "آپ کی ترمیم محفوظ ہوگئی۔",
        "edit-already-exists": "نیا صفحہ تخلیق نہیں کیا جاسکتا.\nیہ پہلے سے موجود ہے.",
        "content-model-text": "سادہ متن",
        "content-model-javascript": "جاوا اسکرپٹ",
        "searchmenu-exists": "'''اِس ویکی پر \"[[:$1]]\" نامی ایک صفحہ موجود ہے'''",
        "searchmenu-new": "'''اِس ویکی پر صفحہ \"[[:$1]]\" تخلیق کیجئے!'''",
        "searchprofile-articles": "مشمولاتی صفحات",
-       "searchprofile-project": "صفحاتِ مدد و منصوبہ",
        "searchprofile-images": "کثیرالوسیط",
        "searchprofile-everything": "سب کچھ",
        "searchprofile-advanced": "پیشرفتہ",
        "searchprofile-articles-tooltip": "$1 میں تلاش",
-       "searchprofile-project-tooltip": "$1 میں تلاش",
        "searchprofile-images-tooltip": "تلاش برائے ملفات",
        "searchprofile-everything-tooltip": " تلاش تمام مشمولات (بشمول تبادلۂ خیال صفحات) میں",
        "searchprofile-advanced-tooltip": "اپنی پسند کے جائے نام میں تلاش",
        "prefs-emailconfirm-label": "برقی پتہ کی تصدیق:",
        "youremail": "٭ برقی خط",
        "username": "اسم صارف",
-       "uid": "صارف نمبر:",
        "prefs-memberingroups": "{{PLURAL:$1|گروہ|گروہوں}} کا رُکن:",
        "prefs-registration": "وقتِ اندراج:",
        "yourrealname": "* اصلی نام",
        "speciallogtitlelabel": "عنوان:",
        "log": "نوشتہ جات",
        "allpages": "تمام صفحات",
-       "alphaindexline": "$1 تا $2",
        "nextpage": "اگلا صفحہ ($1)",
        "prevpage": "پچھلا صفحہ ($1)",
        "allpagesfrom": "مطلوبہ حرف شروع ہونے والے صفحات کی نمائش:",
        "file-nohires": "اس سے بڑی تصمیم دستیاب نہیں۔",
        "show-big-image": "مکمل تصمیم",
        "newimages": "نئی فائلوں کی گیلری",
-       "showhidebots": "($1 بوٹ)",
        "ilsubmit": "تلاش",
        "bydate": "بالحاظ تاریخ",
        "weeks": "{{PLURAL:$1|$1ہفتہ| $1  ہفتے}}",
index 6ae2b30..27aa74a 100644 (file)
@@ -8,7 +8,8 @@
                        "Lyncos",
                        "Nataev",
                        "Sociologist",
-                       "Xexdof"
+                       "Xexdof",
+                       "Arystanbek"
                ]
        },
        "tog-underline": "Havolalarning tagiga chizish:",
        "vector-view-view": "Mutolaa",
        "vector-view-viewsource": "Manbasini koʻrish",
        "actions": "Amallar",
+       "vector-more-actions": "Yana",
        "namespaces": "Nomfazolar",
        "variants": "Variantlar",
        "navigation-heading": "Navigatsiya",
        "searchmenu-exists": "'''Ushbu vikida \"[[:$1]]\" nomli sahifa mavjud.'''",
        "searchmenu-new": "<strong>'''Ushbu vikida \"[[:$1]]\" sahifasini yarating!</strong> {{PLURAL:$2|0=|Shuningdek qidiruvingiz orqali topilgan sahifani qarang.|Shuningdek topilgan qidiruv natijalarini qarang.}}",
        "searchprofile-articles": "Maqolalar",
-       "searchprofile-project": "Yordam va loyiha sahifalari",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Hamma joyda",
        "searchprofile-advanced": "Tanlangan joyda",
        "searchprofile-articles-tooltip": "$1da qidirish",
-       "searchprofile-project-tooltip": "$1da qidirish",
        "searchprofile-images-tooltip": "Fayllarni qidirish",
        "searchprofile-everything-tooltip": "Barcha sahifalardan qidirish (munozara sahifalarinidan ham)",
        "searchprofile-advanced-tooltip": "Belgilangan nomfazolardan qidirish",
        "search-interwiki-default": "$1 natijalar:",
        "search-interwiki-more": "(yana)",
        "search-relatedarticle": "Bog'liq",
-       "searcheverything-enable": "Barcha nomfazolardan qidirish",
        "searchrelated": "bogʻlangan",
        "searchall": "barchasi",
        "showingresults": "Quyida №'''$2'''dan boshlab {{PLURAL:$1|'''bitta''' natija|'''$1''' ta natija}} koʻrsatilgan.",
        "allowemail": "Boshqa foydalanuvchilardan elektron xat olishga ruxsat berish",
        "prefs-searchoptions": "Qidiruv",
        "prefs-namespaces": "Nomfazolar",
-       "defaultns": "Aks holda quyidagi nomfazolardan qidirish:",
        "default": "Sukut boʻyicha",
        "prefs-files": "Fayllar",
        "prefs-custom-css": "Shaxsiy CSS",
        "prefs-emailconfirm-label": "Elektron pochta manzilini tasdiqlash:",
        "youremail": "E-mail:",
        "username": "Foydalanuvchi nomi",
-       "uid": "Identifikator:",
        "prefs-memberingroups": "Qaysi {{PLURAL:$1|guruh|guruhlar}} aʼzosi:",
        "prefs-registration": "Hisob yaratilgan vaqt:",
        "yourrealname": "Haqiqiy ism *:",
        "recentchanges-label-unpatrolled": "Bu tahrir hali tekshirilmagan",
        "recentchanges-label-plusminus": "Sahifa vazni qanchaga oʻzgargani (bayt)",
        "recentchanges-legend-heading": "'''Izoh:'''",
-       "recentchanges-legend-newpage": "([[Special:NewPages|alohida roʻyxat]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|alohida roʻyxat]])",
        "rcnotefrom": "Quyida <strong>$2</strong> dan keyin amalga oshirilgan oʻzgarishlar keltirilgan (oxirgi <strong>$1</strong> tasi)",
        "rclistfrom": "$3, $2 dan keyingi oʻzgarishlarni koʻrsat",
        "rcshowhideminor": "Kichik tahrirlarni $1",
        "logempty": "Talabga mos yozuvlar mavjud emas.",
        "log-title-wildcard": "Shu matndan boshlanuvchi sarlavhalarni izlash",
        "allpages": "Barcha sahifalar",
-       "alphaindexline": "$1 dan $2 ga",
        "nextpage": "Keyingi sahifa ($1)",
        "prevpage": "Avvalgi sahifa ($1)",
        "allpagesfrom": "Quyidagidan boshlanuvchi sahifalarni koʻrsatish:",
        "pageinfo-edits": "Jami tahrirlar soni",
        "pageinfo-toolboxlink": "Sahifa haqida maʼlumot",
        "pageinfo-redirectsto": "Qayta yoʻnaltirish",
-       "skinname-cologneblue": "Kyolncha sogʻinch",
-       "skinname-modern": "Zamonaviy",
        "skinname-vector": "Vektor",
        "patrol-log-page": "Patrullash qaydlari",
        "previousdiff": "← Avvalgi tahrir",
index 23d8abd..e3fcd21 100644 (file)
        "searchmenu-exists": "Su sto sito ghe xe na pagina che se ciama \"[[:$1]]\"",
        "searchmenu-new": "'''Crèa la pagina \"[[:$1]]\" su sta wiki!'''",
        "searchprofile-articles": "Pagine de contenuti",
-       "searchprofile-project": "Pagine de progeto e de ajuto",
        "searchprofile-images": "File",
        "searchprofile-everything": "Tuto quanto",
        "searchprofile-advanced": "Avansada",
        "searchprofile-articles-tooltip": "Serca in $1",
-       "searchprofile-project-tooltip": "Serca in $1",
        "searchprofile-images-tooltip": "Serca file",
        "searchprofile-everything-tooltip": "Serca dapartuto (anca su le pagine de discussion)",
        "searchprofile-advanced-tooltip": "Serca nei namespace personalixài",
        "search-interwiki-default": "Risultati da $1:",
        "search-interwiki-more": "(altro)",
        "search-relatedarticle": "Ligà",
-       "searcheverything-enable": "Serca in tuti quanti i namespace",
        "searchrelated": "ligà",
        "searchall": "tuti",
        "showingresults": "Qua de soto vien mostrà al massimo {{PLURAL:$1|'''1''' risultato|'''$1''' risultati}} a partir dal nùmaro '''$2'''.",
        "allowemail": "Consenti la ricezion de e-mail da altri utenti<sup>1</sup>",
        "prefs-searchoptions": "Riserca",
        "prefs-namespaces": "Namespace",
-       "defaultns": "Serca in sti namespace se no diversamente specificà:",
        "default": "predefinìo",
        "prefs-files": "File",
        "prefs-custom-css": "CSS personalixà",
        "prefs-emailconfirm-label": "Conferma de l'e-mail:",
        "youremail": "La to e-mail",
        "username": "{{GENDER:$1|Nome utente}}:",
-       "uid": "{{GENDER:$1|ID utente}}:",
        "prefs-memberingroups": "{{GENDER:$2|Menbro}} {{PLURAL:$1|del grupo|de i grupi}}:",
        "prefs-registration": "Data de registrassion:",
        "yourrealname": "El to vero nome:",
        "recentchanges-label-bot": "Sta modifica el la ga fata un bot",
        "recentchanges-label-unpatrolled": "Sta modifica no la xe stà gnancora verificà",
        "recentchanges-label-plusminus": "La dimension de la pagina la xe canbià de sto nùmaro de byte",
-       "recentchanges-legend-newpage": "(varda anca [[Special:NewPages|l'elenco de le pagine nove]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (varda anca [[Special:NewPages|l'elenco de le pagine nove]])",
        "rcnotefrom": "Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').",
        "rclistfrom": "Fà védar i canbiamenti fati dal $3 $2",
        "rcshowhideminor": "$1 i canbiamenti picenini",
        "log-title-wildcard": "Riçerca dei titoli che scuminsia con",
        "showhideselectedlogentries": "Mostra/scondi łe voxe de registro sełesionae",
        "allpages": "Tute le pagine",
-       "alphaindexline": "da $1 a $2",
        "nextpage": "Pagina dopo ($1)",
        "prevpage": "La pagina prima ($1)",
        "allpagesfrom": "Mostra le pagine tacando da:",
index 5f868d7..b94b77b 100644 (file)
        "vector-view-view": "Đọc",
        "vector-view-viewsource": "Xem mã nguồn",
        "actions": "Tác vụ",
+       "vector-more-actions": "Khác",
        "namespaces": "Không gian tên",
        "variants": "Biến thể",
        "navigation-heading": "Trình đơn chuyển hướng",
        "parser-template-loop-warning": "Phát hiện bản mẫu lặp vòng: [[$1]]",
        "parser-template-recursion-depth-warning": "Bản mẫu đã vượt quá giới hạn về độ sâu đệ quy ($1)",
        "language-converter-depth-warning": "Đã vượt quá giới hạn độ sâu của bộ chuyển đổi ngôn ngữ ($1)",
-       "node-count-exceeded-category": "Những trang có số nốt vượt quá giới hạn cho phép",
+       "node-count-exceeded-category": "Trang có số nốt vượt quá giới hạn cho phép",
+       "node-count-exceeded-category-desc": "Thể loại chứa các trang có số nốt vượt quá giới hạn cho phép.",
        "node-count-exceeded-warning": "Trang có nhiều nốt quá",
-       "expansion-depth-exceeded-category": "Những trang có độ sâu bung bản mẫu vượt quá giới hạn cho phép",
+       "expansion-depth-exceeded-category": "Trang có độ sâu bung bản mẫu vượt quá giới hạn cho phép",
+       "expansion-depth-exceeded-category-desc": "Thể loại này chứa các trang có độ sâu bung bản mẫu vượt quá giới hạn cho phép.",
        "expansion-depth-exceeded-warning": "Trang bung bản mẫu sâu quá",
        "parser-unstrip-loop-warning": "Vòng lặp unstrip",
        "parser-unstrip-recursion-limit": "Đã vượt quá giới hạn về độ sâu đệ quy unstrip ($1)",
        "currentrev": "Bản hiện tại",
        "currentrev-asof": "Bản hiện tại lúc $1",
        "revisionasof": "Phiên bản lúc $1",
-       "revision-info": "Phiên bản vào lúc $1 do $2 sửa đổi",
+       "revision-info": "Phiên bản vào lúc $1 của {{GENDER:$6}}$2$7",
        "previousrevision": "← Phiên bản cũ",
        "nextrevision": "Phiên bản mới →",
        "currentrevisionlink": "xem phiên bản hiện hành",
        "searchmenu-exists": "* Trang '''[[$1]]'''",
        "searchmenu-new": "'''Tạo trang “[[:$1]]” trên wiki này!''' {{PLURAL:$2|0=|Hãy xem {{PLURAL:$2|kết quả|các kết quả}} tìm kiếm:}}",
        "searchprofile-articles": "Trang nội dung",
-       "searchprofile-project": "Trang trợ giúp và trang dự án",
        "searchprofile-images": "Đa phương tiện",
        "searchprofile-everything": "Tất cả",
        "searchprofile-advanced": "Nâng cao",
        "searchprofile-articles-tooltip": "Tìm trong $1",
-       "searchprofile-project-tooltip": "Tìm trong $1",
        "searchprofile-images-tooltip": "Tìm tập tin",
        "searchprofile-everything-tooltip": "Tìm tất cả nội dung (gồm cả các trang thảo luận)",
        "searchprofile-advanced-tooltip": "Tìm trong không gian tên tùy chọn",
        "search-interwiki-default": "Kết quả từ $1:",
        "search-interwiki-more": "(thêm)",
        "search-relatedarticle": "Liên quan",
-       "searcheverything-enable": "Tìm trong tất cả không gian tên",
        "searchrelated": "có liên quan",
        "searchall": "tất cả",
        "showingresults": "Dưới đây là {{PLURAL:$1|'''1'''|'''$1'''}} kết quả bắt đầu từ #'''$2'''.",
        "powersearch-togglelabel": "Chọn:",
        "powersearch-toggleall": "Tất cả",
        "powersearch-togglenone": "Không",
+       "powersearch-remember": "Nhớ lựa chọn khi lần sau tìm kiếm",
        "search-external": "Tìm kiếm từ bên ngoài",
        "searchdisabled": "Chức năng tìm kiếm tại {{SITENAME}} đã bị tắt. Bạn có tìm kiếm bằng Google trong thời gian này. Chú ý rằng các chỉ mục từ {{SITENAME}} của chúng có thể đã lỗi thời.",
        "search-error": "Đã xuất hiện lỗi khi tìm kiếm: $1",
        "allowemail": "Nhận thư điện tử từ các thành viên khác",
        "prefs-searchoptions": "Tìm kiếm",
        "prefs-namespaces": "Không gian tên",
-       "defaultns": "Nếu không thì tìm trong không gian sau:",
        "default": "mặc định",
        "prefs-files": "Tập tin",
        "prefs-custom-css": "sửa CSS",
        "right-move": "Di chuyển trang",
        "right-move-subpages": "Di chuyển trang cùng với các trang con của nó",
        "right-move-rootuserpages": "Di chuyển các trang cá nhân chính",
+       "right-move-categorypages": "Di chuyển trang thể loại",
        "right-movefile": "Di chuyển tập tin",
        "right-suppressredirect": "Không tạo đổi hướng từ tên cũ khi di chuyển trang",
        "right-upload": "Tải tập tin lên",
        "action-move": "di chuyển trang này",
        "action-move-subpages": "di chuyển trang này và các trang con",
        "action-move-rootuserpages": "di chuyển trang cá nhân chính",
+       "action-move-categorypages": "di chuyển trang thể loại",
        "action-movefile": "di chuyển tập tin này",
        "action-upload": "tải tập tin này lên",
        "action-reupload": "ghi đè lên tập tin có sẵn này",
        "recentchanges-label-unpatrolled": "Sửa đổi này chưa được tuần tra",
        "recentchanges-label-plusminus": "Kích cỡ trang đã thay đổi bằng số byte này",
        "recentchanges-legend-heading": "'''Chú giải:'''",
-       "recentchanges-legend-newpage": "(xem thêm [[Special:NewPages|danh sách các trang mới]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (xem thêm [[Special:NewPages|danh sách các trang mới]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Các thay đổi từ <strong>$2</strong> (hiển thị tối đa <strong>$1</strong> thay đổi).",
        "rclistfrom": "Xem các thay đổi từ $2 $3 trở về sau",
        "wantedtemplates": "Bản mẫu cần viết nhất",
        "mostlinked": "Trang được liên kết đến nhiều nhất",
        "mostlinkedcategories": "Thể loại có nhiều trang nhất",
-       "mostlinkedtemplates": "Bản mẫu được liên kết đến nhiều nhất",
+       "mostlinkedtemplates": "Trang được nhúng nhiều nhất",
        "mostcategories": "Trang có nhiều thể loại nhất",
        "mostimages": "Tập tin được liên kết đến nhiều nhất",
        "mostinterwikis": "Trang có nhiều liên kết liên wiki nhất",
        "mostrevisions": "Trang được sửa đổi nhiều lần nhất",
        "prefixindex": "Tất cả các trang trùng với tiền tố",
-       "prefixindex-namespace": "Tất cả các trang trùng với tiền tố (không gian $1)",
+       "prefixindex-namespace": "Tất cả các trang trùng với tiền tố (không gian tên $1)",
        "prefixindex-strip": "Ẩn tiền tố trong danh sách",
        "shortpages": "Trang ngắn nhất",
        "longpages": "Trang dài nhất",
        "watchnologin": "Chưa đăng nhập",
        "addwatch": "Thêm vào danh sách theo dõi",
        "addedwatchtext": "Trang “[[:$1]]” đã vào [[Special:Watchlist|danh sách theo dõi]] của bạn.\nNhững sửa đổi đối với trang này và trang thảo luận của nó sẽ được liệt kê ở đấy.",
+       "addedwatchtext-short": "Trang “$1” đã được thêm vào danh sách theo dõi của bạn.",
        "removewatch": "Gỡ khỏi danh sách theo dõi",
        "removedwatchtext": "Trang “[[:$1]]” đã được đưa ra khỏi [[Special:Watchlist|danh sách theo dõi]] của bạn.",
+       "removedwatchtext-short": "Trang “$1” đã được xóa khỏi danh sách theo dõi của bạn.",
        "watch": "Theo dõi",
        "watchthispage": "Theo dõi trang này",
        "unwatch": "Ngừng theo dõi",
        "movepagetalktext": "Trang thảo luận đi kèm sẽ được tự động di chuyển theo '''trừ khi''':\n*Đã tồn tại một trang thảo luận không trống tại tên mới, hoặc\n*Bạn không đánh vào ô bên dưới.\n\nTrong những trường hợp đó, bạn phải di chuyển hoặc hợp nhất trang theo kiểu thủ công nếu muốn.",
        "movearticle": "Di chuyển trang:",
        "moveuserpage-warning": "'''Cảnh báo:''' Bạn sắp di chuyển trang cá nhân của người dùng. Xin lưu ý rằng chỉ có trang này sẽ được di chuyển, còn người dùng sẽ ''không'' đổi tên.",
+       "movecategorypage-warning": "<strong>Cảnh báo:</strong> Bạn sắp sửa di chuyển một trang thể loại. Lưu ý rằng chỉ trang này sẽ được di chuyển, còn trang nào được xếp vào thể loại cũ sẽ <em>không</em> được xếp vào thể loại mới.",
        "movenologintext": "Bạn phải là thành viên đã mở tài khoản và [[Special:UserLogin|đăng nhập]] mới di chuyển trang được.",
        "movenotallowed": "Bạn không có quyền di chuyển trang.",
        "movenotallowedfile": "Bạn không có đủ quyền để di chuyển tập tin.",
        "cant-move-user-page": "Bạn không có quyền di chuyển trang cá nhân (ngoại trừ trang con).",
        "cant-move-to-user-page": "Bạn không có quyền di chuyển một trang đến trang cá nhân (ngoại trừ đến trang con của trang cá nhân).",
+       "cant-move-category-page": "Bạn không có quyền di chuyển trang thể loại.",
+       "cant-move-to-category-page": "Bạn không có quyền di chuyển một trang vào không gian tên Thể loại.",
        "newtitle": "Tên mới",
        "move-watch": "Theo dõi trang này",
        "movepagebtn": "Di chuyển trang",
        "tooltip-summary": "Hãy nhập câu tóm lược",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* Mã CSS đặt ở đây sẽ áp dụng cho mọi hình dạng */",
-       "cologneblue.css": "/* Mã CSS tại đây sẽ ảnh hưởng đến những người dùng sử dụng hình dạng Xanh Cologne */",
        "monobook.css": "/* Mã CSS đặt ở đây sẽ ảnh hưởng đến thành viên sử dụng hình dạng MonoBook */",
-       "modern.css": "/* Mã CSS tại đây sẽ ảnh hưởng đến những người dùng sử dụng hình dạng Hiện đại */",
        "vector.css": "/* Mã CSS đặt ở đây sẽ ảnh hưởng đến thành viên sử dụng hình dạng Vectơ */",
        "print.css": "/* Mã CSS tại đây sẽ ảnh hưởng đến bản để in */",
        "noscript.css": "/* Mã CSS tại đây sẽ ảnh hưởng đến những người dùng tắt JavaScript */",
        "group-sysop.css": "/* Mã CSS tại đây sẽ chỉ ảnh hưởng đến các bảo quản viên */",
        "group-bureaucrat.css": "/* Mã CSS tại đây sẽ chỉ ảnh hưởng đến các hành chính viên */",
        "common.js": "/* Bất kỳ mã JavaScript ở đây sẽ được tải cho tất cả các thành viên khi tải một trang nào đó lên. */",
-       "cologneblue.js": "/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng hình dạng Xanh Cologne */",
        "monobook.js": "/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài MonoBook */",
-       "modern.js": "/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài Hiện đại */",
        "vector.js": "/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài Vectơ */",
        "group-autoconfirmed.js": "/* Mã JavaScript tại đây sẽ chỉ được tải cho các thành viên tự động xác nhận */",
        "group-user.js": "/* Mã JavaScript tại đây sẽ chỉ được tải cho các thành viên có tài khoản */",
        "pageinfo-category-pages": "Số trang",
        "pageinfo-category-subcats": "Số thể loại con",
        "pageinfo-category-files": "Số tập tin",
-       "skinname-cologneblue": "Xanh Cologne",
-       "skinname-modern": "Hiện đại",
        "skinname-vector": "Vectơ",
        "markaspatrolleddiff": "Đánh dấu tuần tra",
        "markaspatrolledtext": "Đánh dấu tuần tra trang này",
        "newimages-summary": "Trang đặc biệt này hiển thị các tập tin được tải lên gần đây nhất.",
        "newimages-legend": "Bộ lọc",
        "newimages-label": "Tên tập tin (hoặc một phần tên):",
+       "newimages-showbots": "Xem các tập tin do bot tải lên",
        "noimages": "Chưa có hình.",
        "ilsubmit": "Tìm kiếm",
        "bydate": "theo ngày",
        "watchlistedit-raw-done": "Danh sách các trang bạn theo dõi đã được cập nhật.",
        "watchlistedit-raw-added": "$1 {{PLURAL:$1|tựa đề|tựa đề}} đã được thêm vào:",
        "watchlistedit-raw-removed": "$1 {{PLURAL:$1|tựa đề|tựa đề}} đã được xóa khỏi danh sách:",
+       "watchlistedit-clear-title": "Đã xóa sạch danh sách theo dõi",
+       "watchlistedit-clear-legend": "Xóa sạch danh sách theo dõi",
+       "watchlistedit-clear-explain": "Tất cả các tiêu đề sẽ được xóa khỏi danh sách theo dõi của bạn.",
+       "watchlistedit-clear-titles": "Các tiêu đề:",
+       "watchlistedit-clear-submit": "Xóa sạch danh sách theo dõi (không thể lùi lại!)",
+       "watchlistedit-clear-done": "Đã xóa sạch danh sách theo dõi của bạn.",
+       "watchlistedit-clear-removed": "$1 tựa đề đã được xóa khỏi danh sách:",
+       "watchlistedit-too-many": "Danh sách có quá nhiều trang để hiển thị.",
+       "watchlisttools-clear": "Xóa sạch danh sách theo dõi",
        "watchlisttools-view": "Xem thay đổi trên các trang theo dõi",
        "watchlisttools-edit": "Xem và sửa danh sách theo dõi",
        "watchlisttools-raw": "Sửa danh sách theo dõi dạng thô",
index b8df457..d9a83f7 100644 (file)
        "vector-view-view": "Basaha",
        "vector-view-viewsource": "Kitaa an ginkuhaan",
        "actions": "Mga buhat",
+       "vector-more-actions": "Damo pa",
        "namespaces": "Mga ngaran-lat'ang",
        "variants": "Mga pagkadirudilain",
        "navigation-heading": "Menu hit nabigasyon",
        "permalink": "Sumpay nga unob",
        "print": "Igpatik",
        "view": "Kitaa",
+       "view-foreign": "Pagkita ha $1",
        "edit": "Igliwat",
+       "edit-local": "Igliwat an lokal nga pagpahayag",
        "create": "Himo-a",
+       "create-local": "Igdugang an lokal nga pagpahayag",
        "editthispage": "Igliwat ini nga pakli",
        "create-this-page": "Himo-a ini nga pakli",
        "delete": "Para-a",
        "jumptonavigation": "paglayag",
        "jumptosearch": "bilnga",
        "view-pool-error": "Pasayloa, an mga server diri na kaya yana nga takna.\nDamo nga nagamit in gusto sinmulod hini nga pakli.\nAlayon paghulat makadali san-o ka inmutro pagsulod hin nga pakli utro.\n\n$1",
+       "generic-pool-error": "Pasayloa, an mga server nasobrahan ha yanâ nga takna.\nDamo nga mga nágámit in karúyag sumulod hini nga kiritaon.\nAlayon paghulat magakadli san-o ka bumalik pagsulod hini nga kiritaon.",
        "pool-timeout": "An pagpaundang-hin-oras in naghuhulat hin trangka",
        "pool-queuefull": "Puno an katitirok nga pila",
        "pool-errorunknown": "Waray kasabti nga kasaypanan",
+       "pool-servererror": "An pool nga pag-ihap nga serbisyo diri yanâ magagamit ($)",
        "aboutsite": "Mahitungod han {{SITENAME}}",
        "aboutpage": "Project:Mahitungod han",
        "copyright": "An sulod mabiblingan ha ilarom han $1 antes may-ada pasabot.",
        "gotaccountlink": "Sakob",
        "userlogin-resetlink": "Nangalimot han imo detalye han pagsakob?",
        "userlogin-resetpassword-link": "¿Nangalimot ka han imo tigaman-pansulod?",
+       "userlogin-helplink2": "Búlig hin pagsakob",
        "userlogin-loggedin": "Nakalog-in kana komo hi {{GENDER:$1|$1}}.\nGamiti an porma ha ubos para makalog-in komo iba nga gumaramit.",
        "userlogin-createanother": "Paghimo hin iba nga akawnt",
        "createacct-emailrequired": "Email address",
        "loginlanguagelabel": "Pinulongan: $1",
        "suspicious-userlogout": "Waray ka tugoti pag-logout tungod nga baga ini ginpadangat hin usa nga broken browser o caching proxy.",
        "createacct-another-realname-tip": "Ada la ha imo kun karuyag mo igbutang an imo tinuod nga ngaran.\nKun pinili mo ito ighatag, gagamiton ini paghatag hin atribusyon ha gumaramit para hit ira buhat.",
+       "pt-login": "Sakob",
+       "pt-login-button": "Sakob",
+       "pt-createaccount": "Himo-a an akawnt",
+       "pt-userlogout": "Gawas",
        "php-mail-error-unknown": "Waray kasabti ha kanan PHP mail() function.",
        "user-mail-no-addy": "Nagsend hin email bisan waray email address.",
        "user-mail-no-body": "Nagsend hin email bisan waray o diri resonably kahalipot kaduro nga sulod.",
        "changepassword": "Igliwan an tigaman-pagsulod",
-       "resetpass_announce": "Nakalog-in ka hit temporaryo nga ginemail nga kodigo.\nPara mahuman paglalog-on, kinahanglan mo magbutang hin bag-o nga tigaman-panakob dinhi:",
+       "resetpass_announce": "Basi mahumán an pagsakob, ángay ka magpílì hin bag-o nga tigaman-panakob.",
        "resetpass_header": "Igliwan an akawnt nga tigaman-pagsulod",
        "oldpassword": "Daan nga tigaman-pagsulod:",
        "newpassword": "Bag-o nga tigaman-pagsulod:",
        "resetpass-submit-loggedin": "Igbal-iw an tigaman-pagsulod",
        "resetpass-submit-cancel": "Pasagdi",
        "resetpass-wrong-oldpass": "Diri balido an temporaryo o yana nga tigaman-panakob.\nImo malinamposon nga ginsalyuan an imo tigaman-panakob o umaro ka na hin bag-o nga temporaryo nga tigman-panakob.",
+       "resetpass-recycled": "Alayon pagreset han imo tigaman-pansakob hin lain tikang han imo yanâ nga tigaman-pansakob",
+       "resetpass-temp-emailed": "Nagsakob ka pinaagi hin temporary nga gin-email nga kodigo.\nBasi matapos an imo pagsakob, kinahanglan ka maghimo hin bag-o nga tigaman-pansakob dinhi:",
        "resetpass-temp-password": "Temporaryo nga tigaman-pagsakob:",
        "resetpass-abort-generic": "Ginpugong an pagbal-iw hin tigaman-panakob hin uska ekstensyon.",
+       "resetpass-expired": "Naubosan na hin panahon an im tigaman-pansakob.  Alayon paghimo hin bag-o nga tigaman-pansakob basi ka makasakob.",
        "passwordreset": "igreset an tigaman-hit-pagsulod",
        "passwordreset-text-one": "Kompletoha ini nga porma paramakareset hin imo tigaman-panakob.",
        "passwordreset-text-many": "{{PLURAL:$1|Butanga it usa nga mga surodlan basi makakarawat ko hin temporaryo nga tigaman-pansulod pinaagi ha email.}}",
        "log-fulllog": "Kitaa an bug-os nga taramdan",
        "edit-conflict": "Diri pagkakauroyon han pagliwat.",
        "edit-no-change": "Ginpabay-an an im pagliwat, mahitungod nga waray pagbalyo nga nabuhat ha nakasurat.",
-       "postedit-confirmation": "Natipig an imo ginliwat.",
+       "postedit-confirmation-saved": "Natipig an imo ginliwat.",
        "edit-already-exists": "Diri nakakahimo hin bag-o nga pakli.\nAada na ito.",
        "defaultmessagetext": "Aada-nga-daan nga teksto han mensahe",
        "invalid-content-data": "Sayop nga sulod nga datos",
        "currentrev": "Giurhii nga pagliwat",
        "currentrev-asof": "Giuurhii nga pagliwat han $1",
        "revisionasof": "Pagbabag-o han $1",
-       "revision-info": "Pagbag-o han $1 ni $",
+       "revision-info": "Pagbag-o tikang han $1 ni {{GENDER:$6|$2}}$7",
        "previousrevision": "← Durudaan nga pagliwat",
        "nextrevision": "Burubag-o nga pagliwat →",
        "currentrevisionlink": "Giurhii nga pagliwat",
        "searchmenu-exists": "'''May-ada pakli nga nakangaran hin \"[[:$1]]\" hini nga wiki.'''",
        "searchmenu-new": "<strong>Himoa an pakli nga \"[[:$1]]\" dinhi nga wiki!</strong> {{PLURAL:$2|0=|Kitaa gihapon an pakli nga nabilngan han imo pagbiling.|Kitaa gihapon an mga nabilngan nga ginmawas han pagbiling.}}",
        "searchprofile-articles": "Mga unod nga pakli",
-       "searchprofile-project": "Mga Bulig ngan Proyekto nga pakli",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Ngatanan",
        "searchprofile-advanced": "Abansado",
        "searchprofile-articles-tooltip": "Pamiling ha $1",
-       "searchprofile-project-tooltip": "Pamiling ha $1",
        "searchprofile-images-tooltip": "Pamiling hin mga fayl",
        "searchprofile-everything-tooltip": "Pamiling ha ngatanan nga sulod (lakip an mga hiruhimangraw nga pakli)",
        "searchprofile-advanced-tooltip": "Pamilnga ha mga nabatasan nga ngaran-lat'ang",
        "search-section": "(bahin $1)",
        "search-suggest": "Buot sidngon mo ba: $1",
        "search-interwiki-caption": "Mga bugto nga proyekto",
-       "search-interwiki-default": "$1 nga resulta:",
+       "search-interwiki-default": "Mga resulta tikang han $1:",
        "search-interwiki-more": "(damo pa)",
        "search-relatedarticle": "kasumapy",
-       "searcheverything-enable": "Pamilnga ha ngatanan nga ngaran-lat'ang",
        "searchrelated": "kadugtong",
        "searchall": "ngatanan",
        "showingresultsheader": "{{PLURAL:$5|Resulta '''$1''' han '''$3'''|Mga resulta '''$1 - $2''' han '''$3'''}} para ha '''$4'''",
        "allowemail": "Igpaandar an email nga tikang ha iba nga mga gumaramit",
        "prefs-searchoptions": "Pamilnga",
        "prefs-namespaces": "Ngaran-lat'ang",
-       "defaultns": "Kun diri, pamilnga hini nga mga ngaran-lat'ang:",
        "default": "aada-nga-daan",
        "prefs-files": "Mga paypay",
        "prefs-custom-css": "Custom CSS",
        "prefs-emailconfirm-label": "Kompirmasyon han email:",
        "youremail": "E-mail:",
        "username": "{{HENERO:$1|Agnay hit gumaramit}}:",
-       "uid": "ID hit {{HENERO:$1|Gumaramit}}:",
        "prefs-memberingroups": "{{GENDER:$2|Api}} han {{PLURAL:$1|grupo|mga grupo}}:",
        "prefs-registration": "Oras han pagrehistro:",
        "yourrealname": "Tinuod nga ngaran:",
        "recentchanges-label-minor": "Gutiay ini nga pagliwat",
        "recentchanges-label-bot": "Ini nga pagliwat in ginbuhat han bot",
        "recentchanges-label-unpatrolled": "Ini nga pagliwat in diri pa nakapatrol",
-       "rcnotefrom": "An ha ubos in mga pagbabag-o tikanng '''$''' (kutob ngadto ha '''$1''' nga ginpakita).",
+       "rcnotefrom": "An ha ubos in mga pagbabag-o tikang han <strong>$2</strong> (kutob ngadto ha <strong>$1</strong> nga ginpakita).",
        "rclistfrom": "Pakit-a an mga ginbag-ohan tikang han $3 $2",
        "rcshowhideminor": "$1 gudti nga mga pagliwat",
        "rcshowhidebots": "$1 mga bot",
        "log": "Mga talaan",
        "all-logs-page": "Ngatanan nga mga talaan panpubliko",
        "allpages": "Ngatanan nga mga pakli",
-       "alphaindexline": "$1 tubtob ha $2",
        "nextpage": "Sunod nga pakli ($1)",
        "prevpage": "Nahiuna nga pakli ($1)",
        "allpagesfrom": "Igpakita an mga pakli nga nagtitikang ha:",
        "unwatchthispage": "Undangi pagbantay",
        "notanarticle": "Diri uska unod nga pakli",
        "notvisiblerev": "An urhi nga pagliwat han iba nga gumaramit in ginpara",
-       "watchlist-details": "{{PLURAL:$1|$1 nga pakli|$1 nga mga pakli}} nga aada ha imo talaan nga binabantayan, diri lakip an mga hiruhimangraw-nga-pakli.",
+       "watchlist-details": "{{PLURAL:$1|$1 nga pakli|$1 nga mga pakli}} nga aada ha imo talaan nga binabantayan, diri bulag nga paglakip han mga hiruhimangraw-nga-pakli.",
        "wlshowlast": "Igpakita an katapusan nga $1 nga mga oras $2 nga mga adlaw $3",
        "watchlist-options": "Mga pirilian han talaan han binabantayan",
        "watching": "Ginbabantay...",
        "rollback_short": "Libot-pabalik",
        "rollbacklink": "libot-pabalik",
        "rollbackfailed": "Diri malinamposon an paglibot-pabalik",
-       "revertpage": "Ginpabalik an ginliwat ni [[Special:Contributions/|$2]] ([[User talk:$2|hiruhimangraw]]) ngadto ha urhi nga rebisyon ni [[User:$1|$1]] ngan",
+       "revertpage": "Ginpabalik an ginliwat ni [[Special:Contributions/$2|$2]] ([[User talk:$2|hiruhimangraw]]) ngadto ha urhi nga pagliwat ni [[User:$1|$1]]",
        "sessionfailure-title": "Pakyas an sesyon",
        "protectlogpage": "Talaan han pinasaliporan",
        "protectedarticle": "pinasaliporan \"[[$1]]\"",
        "block": "Pugngi an gumaramit",
        "blockip": "Pugngi an gumaramit",
        "blockip-legend": "Pugngi an gumaramit",
-       "ipadressorusername": "IP address o agnay-hit-gumaramit:",
+       "ipaddressorusername": "IP address o agnay-hit-gumaramit:",
        "ipbexpiry": "Matitima an dulot:",
        "ipbreason": "Katadungan:",
        "ipbreason-dropdown": "*Agsob nga mga rason hit pagpugong\n** Pagsusuksok hin sayop nga pananabutan\n** Pagtatangtang hin sulod tikang ha mga pakli\n** Bisan la ano nga pansusumpay ngadto ha gawas nga mga dapit\n** Pansusuksok hin inamasang/buro-buro ngadto ha mga pakli\n** Panhahadlok nga pamatasan/makakalilisang nga pansamok\n** Pan-abusar hin dirudilain nga mga akawnt\n** Diri makakarawat nga agnay-hit-gumaramit",
        "newimages": "Galeryia hin mga paypay nga bag-o",
        "newimages-legend": "Panara",
        "newimages-label": "Ngaran han paypay (o uska bahin hini):",
-       "showhidebots": "($1 ka mga bot)",
        "noimages": "Waray makikit-an.",
        "ilsubmit": "Bilnga",
        "bydate": "pinaagi han petsa",
index e0b3a91..7763688 100644 (file)
@@ -10,7 +10,8 @@
                        "Yfdyh000",
                        "乌拉跨氪",
                        "十弌",
-                       "아라"
+                       "아라",
+                       "Mywood"
                ]
        },
        "tog-underline": "鏈接下橫線:",
        "namespaces": "名字空间",
        "variants": "变量",
        "errorpagetitle": "錯誤",
-       "returnto": "转å\88°$1。",
+       "returnto": "è¿\94å\9b\9e$1。",
        "tagline": "从{{SITENAME}}来",
        "help": "幫忙",
        "search": "寻",
        "enterlockreason": "请输入锁定个原因,包括预计解锁个辰光",
        "readonlytext": "数据库目前禁止输入新内容及更改,\n箇蛮有可能是因为数据库拉许维修,完成仔即可恢复。\n\n管理员有如下解释:$1",
        "missing-article": "数据库寻弗着想寻个页面文本:名字“$1”$2。\n\n箇一般是由于点击了链向旧有差异或历史个链接,而原有修订已拨删除导致个。\n\n如果弗是箇种情况,你侬作兴寻着软件里一个错误。畀URL地址记落来,搭[[Special:ListUsers/sysop|管理员]]报告。",
-       "missingarticle-rev": "(修订#:$1)",
+       "missingarticle-rev": "(版本#:$1)",
        "missingarticle-diff": "(两样:$1、$2)",
        "readonly_lag": "从数据库服务器垃拉从主服务器上更新,数据库已经拨自动锁定",
        "internalerror": "内部错误",
        "editconflict": "编辑冲突: $1",
        "explainconflict": "有人垃拉侬开始编辑之后更改仔页面。\n上头个文字框内显示个是箇歇本页个内容。\n侬个修改显示垃拉下底只文字框里向。\n侬应当拿侬个修改加入到现有个内容里向。\n<b>只有</b>上头文字框里向个内容会得垃侬点击\"保存页面\"之后畀保存。",
        "yourtext": "侬个文字",
-       "storedversion": "已保存修订版本",
+       "storedversion": "已保存版本",
        "nonunicodebrowser": "'''警告:侬个浏览器弗兼容Unicode编码。'''箇搭有一只工作区将使侬可以安全编辑页面:非ASCII字符将以十六进制编码方式出现垃拉编辑框里向。",
        "editingold": "''' 注意:倷勒里改动一只已经过期个页面修改。 如果倷保存俚个说话,勒拉该个修改之后个亨白浪当个修改侪会呒拨个。'''",
        "yourdiff": "两样",
        "language-converter-depth-warning": "字词转换器深度超限($1)",
        "undo-success": "箇只编辑可以撤销。\n请检查下头个比较,确定侬确实想撤销,然后保存下底个更改完成撤销编辑。",
        "undo-failure": "由于相互冲突个中途编辑,箇只编辑弗好撤销。",
-       "undo-norev": "由于其修订版本弗存在或已删除,此编辑弗好撤销。",
-       "undo-summary": "撤销由[[Special:Contributions/$2|$2]]([[User talk:$2|对话]])作出个修订$1",
+       "undo-norev": "由于其版本弗存在或已删除,此编辑弗好撤销。",
+       "undo-summary": "撤销由[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])作出个版本$1",
        "cantcreateaccounttitle": "呒处建立帐户",
        "cantcreateaccount-text": "从箇只IP地址 (<b>$1</b>) 创建账户已经畀[[User:$3|$3]]禁止。\n\n$3封禁个原因是''$2''",
        "viewpagelogs": "望箇页日志",
        "nohistory": "该只页面呒拨编辑历史。",
-       "currentrev": "最新修订版本",
+       "currentrev": "最版本",
        "currentrev-asof": "于$1个最新修订版",
        "revisionasof": "垃拉$1所作出个修订版",
-       "revision-info": "垃拉$1由$2所作修订版本",
+       "revision-info": "垃拉$1由$2所作版本",
        "previousrevision": "←还旧版",
        "nextrevision": "新点个版本→",
-       "currentrevisionlink": "最新修订",
+       "currentrevisionlink": "最后版本",
        "cur": "当前",
        "next": "后头",
        "last": "上个",
        "rev-deleted-user": "(用户名已删除)",
        "rev-deleted-event": "(日志动作已删除)",
        "rev-deleted-user-contribs": "[用户名或IP地址已删除 - 垃贡献里向囥脱编辑]",
-       "rev-deleted-text-permission": "箇只页面修订已畀'''删除'''。\n垃拉[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 删除日志]里向可以寻着详细信息。",
+       "rev-deleted-text-permission": "箇只页面版本已畀'''删除'''。\n垃拉[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 删除日志]里向可以寻着详细信息。",
        "rev-deleted-text-unhide": "箇只页面修订已经畀'''删除'''。\n垃拉[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 删除日志]里向可以寻着详细信息。\n作为管理员,如果侬想继续个闲话,侬可以仍旧[$1 查看箇趟修订]。",
        "rev-suppressed-text-unhide": "箇只页面修订已经畀'''废止'''。\n垃拉[{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} 废止日志]里向可以寻着详细信息。\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-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": "侬还弗曾指定一个目标修订去进行箇只功能、\n所指定个修订弗存在,或者侬尝试去隐藏现时个修订。",
+       "revisiondelete": "删除 / 反删除版本",
+       "revdelete-nooldid-title": "无效个目标版本",
+       "revdelete-nooldid-text": "侬还弗曾指定一个目标版本去进行箇只功能、\n所指定个版本弗存在,或者侬尝试去隐藏现时个版本。",
        "revdelete-no-file": "指定文件弗存在。",
-       "revdelete-show-file-confirm": "侬阿是真个要查看文件“<nowiki>$1</nowiki>”垃拉$2 $3已经删除个修订?",
+       "revdelete-show-file-confirm": "侬阿是真个要查看文件“<nowiki>$1</nowiki>”垃拉$2 $3已经删除个版本?",
        "revdelete-show-file-submit": "是",
        "logdelete-selected": "选取$1个日志事件:",
        "revdelete-confirm": "假使侬想箇能介做个闲话,请确认侬已经清爽箇能介做个后果,外加箇个程序符合[[{{MediaWiki:Policy-url}}|政策]]。",
        "revdelete-log": "理由:",
        "revdelete-submit": "应用于拣中个{{PLURAL:$1|修订}}",
        "revdelete-success": "'''修订个可见性已经成功更新。'''",
-       "revdelete-failure": "'''修订个可见性无法更新:'''\n$1",
+       "revdelete-failure": "<strong>版本个可见性无法更新:</strong>$1",
        "logdelete-success": "'''事件个可见性已经成功设置。'''",
        "logdelete-failure": "'''事件个可见性无法设置:'''\n$1",
        "revdel-restore": "改变可见性",
        "pagehist": "页面历史",
        "deletedhist": "已删除之历史",
-       "revdelete-hide-current": "隐藏于$1 $2之项目错误:箇个是当前个修订,弗可以隐藏。",
+       "revdelete-hide-current": "隐藏于$1 $2之项目错误:箇个是当前个版本,弗可以隐藏。",
        "revdelete-show-no-access": "显示于$1 $2之项目错误:箇只项目已经标示为\"已限制\",侬对渠并无通行权。",
        "revdelete-modify-no-access": "更改于$1 $2之项目错误:箇个项目已经标示为\"已限制\",侬对渠并无通行权。",
        "revdelete-modify-missing": "更改项目ID $1错误:数据库里寻弗着!",
        "revdelete-otherreason": "别个/附加理由:",
        "revdelete-reasonotherlist": "别个理由",
        "revdelete-edit-reasonlist": "编辑删除理由",
-       "revdelete-offender": "修订作者:",
+       "revdelete-offender": "版本作者:",
        "suppressionlog": "阻止日志",
        "suppressionlogtext": "下头是只删除搭仔封锁列表,包括对管理员隐藏个内容。\n参看[[Special:IPBlockList|IP封锁名单]]来了解目前有效个禁止搭仔封锁之名单。",
        "mergehistory": "合并页面历史",
        "mergehistory-from": "来源页面:",
        "mergehistory-into": "目的页面:",
        "mergehistory-list": "可合并个编辑历史",
-       "mergehistory-merge": "下头对[[:$1]]个修订可以合并到[[:$2]]。用该选项揿钮列去合并只有垃拉指定辰光前头创建个修订。要当心个是使用导航链接就会重设箇栏。",
+       "mergehistory-merge": "下头对[[:$1]]个版本可以合并到[[:$2]]。用该选项揿钮列去合并只有垃拉指定辰光前头创建个版本。要当心个是使用导航链接就会重设箇栏。",
        "mergehistory-go": "显示可合并个编辑",
-       "mergehistory-submit": "合并修订",
+       "mergehistory-submit": "合并版本",
        "mergehistory-empty": "呒没修订可以合并",
        "mergehistory-success": "[[:$1]]个$3趟修订已成功合并到[[:$2]]。",
        "mergehistory-fail": "弗可以进行历史合并,请重新检查页面以及辰光参数。",
        "pagemerge-logentry": "已拿[[$1]]合并到[[$2]] (修订截至$3)",
        "revertmerge": "反合并",
        "mergelogpagetext": "下底是只最近发生个页面历史合并个记录列表。",
-       "history-title": "“$1”个修订史",
+       "history-title": "“$1”的版本历史",
        "lineno": "第$1排:",
        "compareselectedversions": "比较选中个版本",
        "showhideselectedversions": "显示/囥脱选定修订版本",
        "searchmenu-exists": "'''箇wiki里有一页名字“[[:$1]]”哉'''",
        "searchmenu-new": "'''徕箇wiki里建“[[:$1]]”页!'''",
        "searchprofile-articles": "内容页",
-       "searchprofile-project": "帮助搭项目页",
        "searchprofile-images": "多媒体",
        "searchprofile-everything": "全部",
        "searchprofile-advanced": "高级",
        "searchprofile-articles-tooltip": "徕$1里搜寻",
-       "searchprofile-project-tooltip": "徕$1里搜寻",
        "searchprofile-images-tooltip": "搜寻文件",
        "searchprofile-everything-tooltip": "搜寻全部内容(包括讨论页)",
        "searchprofile-advanced-tooltip": "垃拉自定义名字空间里向搜索",
        "search-interwiki-default": "$1项结果:",
        "search-interwiki-more": "(更多)",
        "search-relatedarticle": "相关",
-       "searcheverything-enable": "垃拉所有名字空间里向搜索",
        "searchrelated": "相关",
        "searchall": "全部",
        "showingresults": "下头显示从第<b>$2</b>条开始个<b>$1</b>条结果:",
        "prefs-files": "文件",
        "youremail": "电子信箱:",
        "username": "用户名:",
-       "uid": "用户号:",
        "yourrealname": "真名字:",
        "yourlanguage": "语言:",
        "yournick": "绰号:",
        "speciallogtitlelabel": "目標(標題要弗用戶):",
        "log": "记录",
        "allpages": "全部页面",
-       "alphaindexline": "$1到$2",
        "nextpage": "下页 ($1)",
        "prevpage": "上一页($1)",
        "allpagesfrom": "显示个页面开始于:",
        "whatlinkshere-hidelinks": "$1链接",
        "whatlinkshere-filters": "过滤器",
        "blockip": "查封用户",
-       "ipadressorusername": "IP地址或用户名:",
+       "ipaddressorusername": "IP地址或用户名:",
        "ipbreason": "理由:",
        "ipbsubmit": "封杀该个用户",
        "ipbother": "其它时间:",
        "tooltip-t-upload": "上传文件",
        "tooltip-t-specialpages": "全部特殊页列表",
        "tooltip-t-print": "箇页个打印版",
-       "tooltip-t-permalink": "箇页当前修订版个老世链接",
+       "tooltip-t-permalink": "箇页当前版本个老世链接",
        "tooltip-ca-nstab-main": "望内容页",
        "tooltip-ca-nstab-user": "查看用户页",
        "tooltip-ca-nstab-media": "查看媒体页",
        "svg-long-desc": "SVG文件,名义大小:$1×$2像素,文件大小:$3",
        "show-big-image": "完整分辨率",
        "newimages": "新文件陈列室",
-       "showhidebots": "($1机器人)",
        "ilsubmit": "搜寻",
        "bad_image_list": "格式如下:\n\n只列出项目(线开始* )的审议。\n第一个环节上线必须是一个链接到一个坏文件。\n其后的任何链接在同一行被认为是例外情况,即网页的文件,则可能会发生内部。",
        "variantname-zh-tw": "台湾",
index e35ecc3..54268ab 100644 (file)
        "vector-view-view": "לייענען",
        "vector-view-viewsource": "ווײַזן מקור",
        "actions": "אַקציעס",
+       "vector-more-actions": "נאך",
        "namespaces": "נאָמענטיילן",
        "variants": "װאַריאַנטן",
        "navigation-heading": "נאוויגאציע מעניו",
        "jumptonavigation": "נאַוויגאַציע",
        "jumptosearch": "זוכן",
        "view-pool-error": "אנטשולדיגט, די סערווערס זענען איבערגעפילט איצט.\nצופיל באניצער פרובירן צו ליינען דעם בלאט.\nביטע ווארטן א ביסל צייט בעפאר איר פרובירט ווידער אריינגיין אינעם בלאט.\n\n$1",
+       "generic-pool-error": "אנטשולדיגט, די סערווערס זענען איבערגעפילט איצט.\nצופיל באניצער פרובירן צו באקוקן דעם רעסורס.\nביטע ווארטן א ביסל צייט בעפאר איר פרובירט ווידער אריינטרעטן אין דעם רעסורס.",
        "pool-timeout": "אַריבער דער צײַט וואַרטן פֿאר דער שליסונג",
        "pool-queuefull": "ריי איז פֿול",
        "pool-errorunknown": "אומבאַקאַנטער פֿעלער",
        "resetpass-abort-generic": "פאסווארט ענדערונג איז מבוטל געווארן דורך א פארברייטערונג.",
        "resetpass-expired": "אירע פאסווארט איז אויסגעגאנגען. זײַט אזוי גוט שטעלט א נײַ פאסווארט כדי ארײַנלאגירן.",
        "resetpass-expired-soft": "אײַער פאסווארט איז אויסגעגאנגען און דארף ווערן צוריקגעשטעלט. זײַט אזוי גוט קלויבט א נײַ פאסווארט אצינד, אדער קליקט \"{{int:resetpass-submit-cancel}}\" כדי עס צוריקשטעלן שפעטער.",
+       "resetpass-validity-soft": "אײַער פאסווארט איז נישט גילטיק: $1\n\nזײַט אזוי גוט קלויבט א נײַ פאסווארט אצינד, אדער קליקט \"{{int:resetpass-submit-cancel}}\" כדי עס צוריקשטעלן שפעטער.",
        "passwordreset": "צוריקשטעלן פאַסווארט",
        "passwordreset-text-one": "דערגאַנצט די פאָרעם צוריקצושטעלן אײַער פאַסווארט.",
        "passwordreset-text-many": "{{PLURAL:$1|דערגאַנצט איינע פֿון די פֿעלדער כדי צו באקומען א פראוויזאריש פאַסווארט דור כן פאסט.}}",
        "parser-template-recursion-depth-warning": "מוסטער רעקורסיע טיף מאקסימום איבערגעשטיגן ($1)",
        "language-converter-depth-warning": "אַריבער דעם שפּראַך קאַנווערטער טיף לימיט ($1)",
        "node-count-exceeded-category": "בלעטער וואו קנופצאל איז צו פיל",
+       "node-count-exceeded-category-desc": "א קאטעגאריע פאר בלעטער וואו די קנופצאל איז צו פיל.",
        "node-count-exceeded-warning": "קנופנצאל אויפן בלאט צו הויך",
        "expansion-depth-exceeded-category": "בלעטער וואו מ'האט אריבערגעשטיגן די פארברייטערונג טיף",
+       "expansion-depth-exceeded-category-desc": "דאס איז א קאטעגאריע פאר בלעטער וואס שטיגן איבער דער פארברייטערן־טיף.",
        "expansion-depth-exceeded-warning": "בלאט גייט אריבער דער פארברייטערונג טיף",
        "parser-unstrip-loop-warning": "פעטליע געטראפֿן",
        "converter-manual-rule-error": "געטראפן א גרײַז אין האנטלעכן שפראך־קאנווערטירן כלל",
        "currentrev": "איצטיגע ווערסיע",
        "currentrev-asof": "לויפיקע רעוויזיע פון $1",
        "revisionasof": "רעוויזיע ביי $1",
-       "revision-info": "רע×\95×\95×\99×\96×\99×¢ ×\91×\99×\99 $1 ×¤×\95×\9f $2",
+       "revision-info": "×\95×\95ערס×\99×¢ ×¤×\95×\9f $1 ×\93×\95ר×\9a {{GENDER:$6|$2}}$7",
        "previousrevision": "→ עלטערע  ווערסיע",
        "nextrevision": "נײַערע ווערסיע ←",
        "currentrevisionlink": "איצטיגע ווערסיע",
        "revdelete-selected-text": "'''{{PLURAL:$2|אויסדערוויילטע רעוויזיע| אויסדערוויילטע רעוויזיעס}} פון [[:$1]]:'''",
        "revdelete-selected-file": "'''{{PLURAL:$1|אויסדערוויילטע טעקע ווערסיע| אויסדערוויילטע טעקע ווערסיעס}} פון [[:$2]]:'''",
        "logdelete-selected": "{{PLURAL:$1| אויסדערוויילטע לאג אקציע|אויסדערוויילטע לאג אקציעס}}:",
+       "revdelete-text-text": "אויסגעמעקטע ווערסיעס וועלן נאך דערשיינען אין דער בלאט־היסטאריע, אבער טייל פון זייער אינהאלט וועט נישט זײַן צוגאנגבאר צום עולם.",
+       "revdelete-text-file": "אויסגעמעקטע טעקע ווערסיעס וועלן נאך דערשיינען אין דער בלאט־היסטאריע, אבער טייל פון זייער אינהאלט וועט נישט זײַן צוגאנגבאר צום עולם.",
+       "logdelete-text": "אויסגעמעקטע לאגביכער־געשעענישן וועלן נאך דערשיינען אינעם לאגבוך, אבער טייל פון זייער אינהאלט וועט נישט זײַן צוגאנגבאר צום עולם.",
        "revdelete-confirm": "זייט אזוי גוט און באשטעטיקט אז דאס איז טאקע אייער כוונה, אז איר פארשטייט די קאנסעקווענצן, און אז איר טוט דאס לויט  [[{{MediaWiki:Policy-url}}|דער פאליסי]].",
        "revdelete-suppress-text": "אונטערדרוקן זאל בלויז גענוצט ווערן '''נאר''' אין די פאלגנדע פעלער:\n* אינפארמאציע וואס קען זיין מוציא שם רע\n* אויפדעקונג פון פריוואטקייט אינפארמאציע\n*: ''היים אדרעסן, טעלעפאן נומערן, נאציאנאלע אידענטיפיקאציע נומערן, א.א.וו.''",
        "revdelete-legend": "שטעלט ווייזונג באגרענעצונגען",
        "searchmenu-exists": "'''ס'איז פֿאַראַן א בלאַט מיטן נאמען \"[[:$1]]\" אין דער וויקי'''",
        "searchmenu-new": "<strong>באַשאַפֿן דעם בלאַט \"[[:$1]]\" אויף דער וויקי!</strong> {{PLURAL:$2|0=|זעט אויך דעם בלאט געפֿונען מיט אײַער זוך.|זעט אויך די זוך רעזולטאטן געפֿונען.}}",
        "searchprofile-articles": "אינהאלט בלעטער",
-       "searchprofile-project": "הילף און פראיעקט בלעטער",
        "searchprofile-images": "מולטימעדיע",
        "searchprofile-everything": "אלץ",
        "searchprofile-advanced": "פֿארגעשריטן",
        "searchprofile-articles-tooltip": "זוכן אין $1",
-       "searchprofile-project-tooltip": "זוכן אין $1",
        "searchprofile-images-tooltip": "זוכן טעקעס",
        "searchprofile-everything-tooltip": "זוך אינעם גאנצען אינהאלט (אריינגערעכנט רעדן בלעטער)",
        "searchprofile-advanced-tooltip": "זוכן אין צוגעשטעלטע ָנאָמענטיילן",
        "search-interwiki-default": "רעזולטאטן פון $1:",
        "search-interwiki-more": "(נאך)",
        "search-relatedarticle": "פארבינדן",
-       "searcheverything-enable": "זוכן אין אלע נאמענטיילן",
        "searchrelated": "פארבינדן",
        "searchall": "אלץ",
        "showingresults": "ווייזן ביז {{PLURAL:$1|רעזולטאט '''איינס'''|'''$1''' רעזולטאטן}} אנגעפאנגן פון נומער #'''$2''':",
        "powersearch-togglelabel": "קאנטראלירן:",
        "powersearch-toggleall": "אלע",
        "powersearch-togglenone": "קיין",
+       "powersearch-remember": "געדנעקען אויסקלייב פאר צוקונפטדיקע זוכן",
        "search-external": "דרויסנדיק זוכן",
        "searchdisabled": "{{SITENAME}} זוך איז אָפאַקטיווירט.\nצווישנצײַט קענט איר זוכן מיט גוגל.\nגעב אכט אז ס'איז מעגלעך אַז זייער אינדעקס פֿון {{SITENAME}} אינהאַלט איז אפשר פֿאַרעלטערט.",
        "search-error": "ס'האט פאסירט א פֿעלער ביים זוכן: $1",
        "allowemail": "ערלויבן אנדערע צו שיקן אײַך ע־פאסט",
        "prefs-searchoptions": "זוכן",
        "prefs-namespaces": "נאָמענטיילן",
-       "defaultns": "אנדערשט זוך אין די נאמענטיילן:",
        "default": "גרונטלעך",
        "prefs-files": "טעקעס",
        "prefs-custom-css": "באַניצער דעפֿינירט CSS",
        "right-move": "באוועג בלעטער",
        "right-move-subpages": "באַוועגן בלעטער מיט זייערע אונטערבלעטער",
        "right-move-rootuserpages": "באַוועגן באַניצער הויפטבלעטער",
+       "right-move-categorypages": "באוועגן קאטעגאריע בלעטער",
        "right-movefile": "באַוועגן טעקעס",
        "right-suppressredirect": "נישט שאַפֿן א ווײַטערפֿירונג פֿונעם אַלטן בלאַט בײַם באַוועגן אַ בלאַט",
        "right-upload": "ארויפלאדן טעקעס",
        "action-move": "באַוועגן דעם בלאַט",
        "action-move-subpages": "באַוועגן דעם בלאַט מיט זײַנע אונטערבלעטער",
        "action-move-rootuserpages": "באַוועגן באַניצער הויפטבלעטער",
+       "action-move-categorypages": "באוועגן קאטעגאריע בלעטער",
        "action-movefile": "באַוועגן די טעקע",
        "action-upload": "אַרויפֿלאָדן די טעקע",
        "action-reupload": "איבערשרײַבן די עקזיסטירנדע טעקע",
        "recentchanges-label-unpatrolled": "די רעדאקטירונג איז נאך נישט נאכגעקוקט",
        "recentchanges-label-plusminus": "בלאט גרייס געענדערט מיט דער צאל בייטן",
        "recentchanges-legend-heading": "'''לעגענדע:'''",
-       "recentchanges-legend-newpage": "(זעט אויך [[Special:NewPages|די רשימה פון נייע בלעטער]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (זעט אויך [[Special:NewPages|די רשימה פון נייע בלעטער]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "פֿאלגנד זענען די ענדערונגען זײַט <strong>$2</strong> (ביז <strong>$1</strong>).",
        "rclistfrom": "װײַזן נײַע ענדערונגען פֿון $3 $2",
        "largefileserver": "די טעקע איז גרעסער פונעם מאקסימום פאר דעם סערווער.",
        "emptyfile": "די טעקע וואס איר האט ארויפֿלגעלאָדן איז ליידיג.\nעס קען זיין אז די סיבה איז פשוט א טייפא אינעם טעקע־נאמען.\nביטע קוקט איבער צי איר ווילט ארויפֿלאדן  די דאזיקע טעקע.",
        "windows-nonascii-filename": "די וויקי שטיצט נישט טעקע־נעמען מיט ספעציעלע צייכענען.",
-       "fileexists": "א טעקע מיט דעם נאָמען עקזיסטירט שוין, ביטע זײַט בודק <strong>[[:$1]]</strong> ווען איר זענט נישט זיכער אַז איר ווילט זי ענדערן.\n[[$1|thumb]]",
+       "fileexists": "א טעקע מיט דעם נאָמען עקזיסטירט שוין, ביטע זײַט בודק <strong>[[:$1]]</strong> ווען {{GENDER:|איר}} זענט נישט זיכער אַז איר ווילט אים ענדערן.\n[[$1|thumb]]",
        "filepageexists": "דער באשרייבונג בלאט פאר דער דאזיקער טעקע האט מען שוין געשאפן ביי <strong>[[:$1]]</strong>, אבער ס'עקזיסטירט נישט קיין טעקע מיט דעם נאמען.\nדי רעזומע וואס איר קלאפט אריין וועט זיך נישט באווייזן אויפן באשרייבונג בלאט.\nכדי צו שאפן אז אייער רעזומע וועט זיך טאקע באווייזן דארט, דארפט איר רעדאקטירן זי האנטווייז.\n[[$1|thumb]]",
        "fileexists-extension": "א טעקע מיט אן ענלעכן נאמען עקזיסטירט שוין: [[$2|thumb]]\n* נאמען פון דער טעקע וואס ווערט ארויפגעלאָדן: <strong>[[:$1]]</strong>\n* נאמען פון דער פֿאראנענער טעקע: <strong>[[:$2]]</strong>\nזײַט אזוי גוט און קלויבט אן אנדער נאמען.",
        "fileexists-thumbnail-yes": "די טעקע זעט אויס צו זײַן א פארקלענערט בילד  ''(קליין)''.\n[[$1|thumb]]\nזײַט אזוי גוט קאנטראלירט די טעקע <strong>[[:$1]]</strong>.\nווען די קאנטראלירטע טעקע איז דאס זעלבע בילד אין דער אריגינעלער גרייס ברויכט מען נישט ארויפלאדן נאך א פארקלענערט בילד.",
        "php-uploaddisabledtext": "אַרויפֿלאָדן טעקעס נישט דערמעגלעכט אין PHP.\nזייט אזוי גוט בודק זיין די file_uploads שטעלונג.",
        "uploadscripted": "די טעקע האט א סקריפט אדער HTML קאד וואס קען ווערן פֿאלש אויסגעטייטשט דורך א בלעטערער",
        "uploadscriptednamespace": "די SVG טעקע אנטהאלט אן אומלעגאלן נאמענטייל  \"$1\"",
+       "uploadinvalidxml": "דאס XML אין דער ארויפגעלאדענער טעקע קען מען נישט פארזירן.",
        "uploadvirus": "די טעקע האָט אַ ווירוס! פרטים: <div dir=\"rtl\">$1</div>",
        "upload-source": "מקור טעקע",
        "sourcefilename": "מקור טעקע נאמען:",
        "upload-misc-error-text": "אן אומבאקאנטער גרייז האט פאסירט בשעת דעם ארויפלאד.\nביטע באשטעטיקט אז דער  URL איז גילטיק און דערגרייכבאר און פרובירט נאכאמאל.\nווען דער פראבלעם בלייבט ווייטער, קאנטאקטירט  א [[Special:ListUsers/sysop|סיסאפ]].",
        "upload-too-many-redirects": "דער URL אַנטהאַלט צופֿיל ווײַטערפֿירונגען.",
        "upload-http-error": "א HTTP גרײַז האט פאַסירט: $1",
+       "upload-copy-upload-invalid-domain": "ארויפלאדן טעקעס פון דעם דאמיין נישט מעגלעך.",
        "backend-fail-stream": "קען נישט מאכן שטראמען טעקע $1.",
        "backend-fail-notexists": "נישט פֿאראן די טעקע $1.",
        "backend-fail-notsame": "א נישט־אידענטישע טעקע עקזיסטירט שוין ביי \"$1\".",
        "unwatchedpages": "בלעטער וואס זענען נישט אויפגעפאסט",
        "listredirects": "ליסטע פון ווײַטערפֿירונגען",
        "listduplicatedfiles": "ליסטע פון טעקעס מיט דופליקאטן",
+       "listduplicatedfiles-entry": "[[:טעקע:$1|$1]] האט [[$3|{{PLURAL:$2|א דופליקאט|$2 דופליקאטן}}]].",
        "unusedtemplates": "נישט באניצטע מוסטערן",
        "unusedtemplatestext": "דער בלאט ווײַזט אלע בלעטער אינעם {{ns:template}} נאמענטייל וואס זענען נישט אײַנגעשלאסן אין אן אנדער בלאט. געדענקט צו באקוקן אנדערע בלעטער פאר לינקען צו די מוסטערן איידער איר מעקט זיי אויס.",
        "unusedtemplateswlh": "אנדערע פֿאַרבינדונגען",
        "wantedtemplates": "געזוכטע מוסטערן",
        "mostlinked": "מערסט פֿארבינדענע בלעטער",
        "mostlinkedcategories": "מערסט פֿארבינדענע קאטעגאריעס",
-       "mostlinkedtemplates": "×\9eערס×\98 ×¤Ö¿×\90ר×\91×\99× ×\93×¢× ×¢ ×\9e×\95ס×\98ער×\9f",
+       "mostlinkedtemplates": "×\9eערס×\98 ×\90ר×\99×\91ער×\92×\9cעשעסענע ×\91×\9c×¢×\98ער",
        "mostcategories": "אַרטיקלען מיט די מערסטע קאַטעגאָריעס",
        "mostimages": "מערסט פֿארבונדענע טעקעס",
        "mostinterwikis": "בלעטער מיט די מערסטע אינטערוויקיס",
        "protectedpages-timestamp": "צײַטשטעמפל",
        "protectedpages-page": "בלאַט",
        "protectedpages-expiry": "גייט אויס",
+       "protectedpages-performer": "געשטיצט דורך",
+       "protectedpages-params": "שוץ־פאראמעטערס",
        "protectedpages-reason": "אורזאַך",
        "protectedpages-unknown-timestamp": "אומבאַוואוסט",
        "protectedpages-unknown-performer": "אומבאוואוסטער באניצער",
        "listgrouprights-removegroup-self": "א§ראָפנעמען {{PLURAL:$2|גרופּע |גרופּעס}} פון אייגענער קאנטע: $1",
        "listgrouprights-addgroup-self-all": "צולייגן אַלע גרופעס צו אייגענער קאנטע",
        "listgrouprights-removegroup-self-all": "אראָפנעמען אַלע גרופעס פֿון אייגענער קאנטע",
+       "listgrouprights-namespaceprotection-header": "נאמענטייל באשרענקונגען",
        "listgrouprights-namespaceprotection-namespace": "נאָמענטייל",
+       "listgrouprights-namespaceprotection-restrictedto": "רעכט(ן) וואס דערלויבט באניצער צו רעדאקטירן",
+       "trackingcategories": "אויפפאסן־קאטעגאריעס",
+       "trackingcategories-msg": "אויפפאסן־קאטעגאריע",
+       "trackingcategories-name": "מעלדונג נאמען",
+       "trackingcategories-desc": "קאטעגאריע אײַנשליסן קריטעריע",
+       "trackingcategories-nodesc": "נישט פאראן קיין באשרײַבונג.",
+       "trackingcategories-disabled": "קאטעגאריע איז אומאקטיווירט",
        "mailnologin": "נישטא קיין אדרעס צו שיקן",
        "mailnologintext": "איר ברויכט זײַן [[Special:UserLogin|אַרײַנלאגירט]] און האָבן א גילטיגן ע־פאסט אַדרעס אין אײַער [[Special:Preferences|פרעפֿערענצן]] צו שיקן ע־פאסט צו אַנדערע באַניצער.",
        "emailuser": "שיקן ע-פאסט צו דעם באַניצער",
        "watchnologin": "איר זענט נישט אַרײַנלאגירט",
        "addwatch": "צולייגן צו דער אויפֿפאַסונג ליסטע",
        "addedwatchtext": "דער בלאט \"[[:$1]]\" איז צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].\n\nווײַטערע ענדערונגען צו דעם בלאַט און צו זײַן פארבינדענעם רעדן בלאַט וועלן זײַן אויסגערעכנט דארט.",
+       "addedwatchtext-short": "מ'האט צוגעלייגט בלאט \"$1\" צו אײַער אויפפאסן ליסטע.",
        "removewatch": "אַראָפּנעמען פון דער אויפֿפאַסונג ליסטע",
        "removedwatchtext": "דער בלאַט \"[[:$1]]\" איז אָפּגעראַמט געוואָרן פון [[Special:Watchlist|אייער אױפֿפּאַסונג ליסטע]].",
+       "removedwatchtext-short": "מ'האט אראפגענומען בלאט \"$1\" פון אײַער אויפפאסן ליסטע.",
        "watch": "אױפֿפּאַסן",
        "watchthispage": "טוט אױפֿפּאַסן דעם בלאט",
        "unwatch": "אויפֿהערן אויפֿפּאַסן",
        "watchlist-details": "{{PLURAL:$1|$1 בלאט|$1 בלעטער}} אין אייער אויפֿפאסן ליסטע, נישט רעכענען  רעדן בלעטער.",
        "wlheader-enotif": "ע-פאסט מעלדונג ערמעגליכט.",
        "wlheader-showupdated": "בלעטער געענדערט זײַט אײַער לעצטן וויזיט זען געוויזן '''דיק'''.",
+       "wlnote2": "אונטן זענען די ענדערונגען אין די לעצטע  {{PLURAL:$1|שעה|<strong>$1</strong> שעה'ן}}, ביז $2, $3.",
        "wlshowlast": "(ווײַזן די לעצטע $1 שעה'ן | $2 טעג | $3)",
        "watchlist-options": "אויפֿפאַסן ליסטע ברירות",
        "watching": "אויפפאסענדונג…",
        "prot_1movedto2": "[[$1]] אריבערגעפירט צו [[$2]]",
        "protect-badnamespace-title": "אומשיצבארער נאמענטייל",
        "protect-badnamespace-text": "בלעטער אין דעם נאמענטייל קען מען נישט שיצן.",
+       "protect-norestrictiontypes-text": "מען קען נישט שיצן דעם בלאט ווײַל עס זענען נישט פאראן קיין באשרענקונג־טיפן.",
        "protect-norestrictiontypes-title": "נישט־שיצבארער בלאט",
        "protect-legend": "באַשטעטיגן שיץ",
        "protectcomment": "אורזאַך:",
        "contributions-title": "בײַשטײַערונגען פֿון באַניצער $1",
        "mycontris": "בײַשטײַערונגען",
        "contribsub2": "פֿאַר {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "באניצער קאנטע \"$1\" איז נישט איינגעשריבן.",
        "nocontribs": "נישט געטראפן קיין ענדערונגען צוזאמעגעפאסט מיט די קריטעריעס.",
        "uctop": "(לויפֿיק)",
        "month": "ביז חודש:",
        "sp-contributions-newbies-sub": "פאר נייע קאנטעס",
        "sp-contributions-newbies-title": "בײַשטײַערונגען פֿון נײַע באַניצערס",
        "sp-contributions-blocklog": "בלאקירן לאג",
+       "sp-contributions-suppresslog": "אונטערדריקטע באַניצער בײַשטײַערונגען",
        "sp-contributions-deleted": "אויסגעמעקטע באַניצער בײַשטײַערונגען",
        "sp-contributions-uploads": "אַרויפֿלאָדונגען",
        "sp-contributions-logs": "לאגביכער",
        "ipboptions": "2 שעהן:2 hours,\n1 טאָג:1 day,\n3 טעג:3 days,\n1 װאָך:1 week,\n2 װאָכן:2 weeks,\n1 מאָנאַט:1 month,\n3 מאָנאַטן:3 months,\n6 מאָנאַטן:6 months,\n1 יאָר:1 year,\nאויף אייביק:infinite",
        "ipbhidename": "באַהאַלטן באַניצער נאָמען פֿון רעדאַקטירונגען און רשימות",
        "ipbwatchuser": "אויפֿפאַסן דעם באַניצערס באַניצער און רעדן בלעטער",
+       "ipb-disableusertalk": "פארמײַדן דעם באניצער פון רעדאקטירן זײַן אייגענעם רעדן בלאט בשעת ער איז בלאקירט",
+       "ipb-change-block": "ווידער-בלאקירן דעם באניצער מיט די דאזיקע אײַנשטעלונגען",
        "ipb-confirm": "באַשטעטיקן בלאָק",
        "badipaddress": "נישט קיין גוטער IP אַדרעס.",
        "blockipsuccesssub": "בלאק איז דורכגפירט מיט דערפֿאלג",
        "ipb_expiry_temp": "בלאקירן מיט פאַרבאָרגן באַניצער נאָמען מוז זייַן אויף אייביק.",
        "ipb_hide_invalid": "נישט געקענט פֿאַרשטיקן די קאנטע; זי האט {{PLURAL:$1|איין רעדאקטירונג|$1 רעדאַקטירונגען}}.",
        "ipb_already_blocked": "\"$1\" איז שוין בלאקירט",
-       "ipb-needreblock": "$1 ×\90×\99×\96 ×©×\95×\99×\9f ×\91×\9c×\90ק×\99ר×\98. ×¦×\99 ×\95×\95×\99×\9c×\98 ×\90×\99ר ×\98×\95×\99ש×\9f ×\93×\99 ×\91×\90ַצ×\99×\99×\9b× ונגען?",
+       "ipb-needreblock": "$1 ×\90×\99×\96 ×©×\95×\99×\9f ×\91×\9c×\90ק×\99ר×\98. ×¦×\99 ×\95×\95×\99×\9c×\98 ×\90×\99ר ×\98×\95×\99ש×\9f ×\93×\99 ×\90ײַנש×\98×¢×\9cונגען?",
        "ipb-otherblocks-header": "{{PLURAL:$1|אנדער בלאקירונג|אנדערע בלאקירונגען}}",
        "unblock-hideuser": "איר קענט נישט אומבלאקירן דעם באניצער, ווײַל זײַן באַניצער נאָמען איז פֿאַרבארגן.",
        "ipb_cant_unblock": "גרײַז: בלאק ID $1 נישט געפֿונען.\nס'מעגליך שוין געווארן באַפֿרייט.",
        "movenotallowedfile": "איר האט נישט קיין רשות צו באוועגן טעקעס.",
        "cant-move-user-page": "איר זענט נישט דערלויבט צו באַוועגן באַניצער בלעטער (אחוץ אונטערבלעטער).",
        "cant-move-to-user-page": "איר זענט נישט דערלויבט צו באַוועגן א בלאַט צו א באַניצער בלאַט (אַחוץ צו א באַניצער אונטערבלאַט).",
+       "cant-move-category-page": "איר זענט נישט דערלויבט צו באוועגן קאטעגאריע בלעטער.",
+       "cant-move-to-category-page": "איר זענט נישט ערלויבט צו באוועגן א בלאט צו קאטעגאריע־בלאט.",
        "newtitle": "צו נייעם קעפל:",
        "move-watch": "אויפֿפאַסן אויף דעם בלאַט",
        "movepagebtn": "באַוועגן בלאַט",
        "tooltip-preferences-save": "היטן פרעפֿערענצן",
        "tooltip-summary": "אײַנגעבן א קורצע רעזומע",
        "common.css": "/* CSS געשריבן דא וועט אפילירן און באיינפלוסן אלע סקינס */",
-       "cologneblue.css": "/* CSS געשטעלט דא ווירקט נאר אויפן קעלנישן־בלוי סקין */",
        "monobook.css": "/* סטייל דא געלייגט וועט באאיינפלוסן דעם Monobook סקין */",
-       "modern.css": "/* CSS געשטעלט דא ווירקט אויפן מאדערנעם סקין */",
        "vector.css": "/* CSS געשטעלט דא ווירקט נאר אויפן וועקטאר סקין */",
        "common.js": "/* אלע סקריפטן פון JavaScript דא געשריבן וועט לויפן פאר אלע באנוצער ווען זיי וועלן לאדירן דעם בלאט */",
        "anonymous": "{{PLURAL:$1|אַנאנימער באַניצער| אַנאנימע באַניצערס}} פֿון {{SITENAME}}",
        "pageinfo-category-pages": "צאָל בלעטער",
        "pageinfo-category-subcats": "צאָל אונטערקאטעגאריעס",
        "pageinfo-category-files": "צאָל טעקעס",
-       "skinname-cologneblue": "קעלניש בלוי",
        "skinname-monobook": "מאנאבוק",
-       "skinname-modern": "מאדערן",
        "skinname-vector": "וועקטאר",
        "markaspatrolleddiff": "באצייכענען אלס פאטראלירט",
        "markaspatrolledtext": "באצייכענען בלאט אלס פאטראלירט",
        "newimages-summary": "דער באַזונדערער בלאַט ווײַזט די לעצטע ארויפֿגעלאָדענע טעקעס.",
        "newimages-legend": "פֿילטער",
        "newimages-label": "טעקע נאָמען (אדער אַ טײל דערפֿון):",
+       "newimages-showbots": "ווײַזן ארויפלאדן פון באטן",
        "noimages": "נישטא קיין בילדער.",
        "ilsubmit": "זוכן",
        "bydate": "לויטן דאטום",
        "confirm-watch-top": "צולייגן דעם בלאט צו אייער אויפֿפאסונג ליסטע?",
        "confirm-unwatch-button": "יאָ",
        "confirm-unwatch-top": "אראפנעמען דעם בלאט פון אייער אויפפאסונג ליסטע?",
+       "quotation-marks": "„$1“",
        "imgmultipageprev": "→ פֿריערדיגער בלאַט",
        "imgmultipagenext": "צום קומענדיגן בלאט ←",
        "imgmultigo": "גייט!",
        "imgmultigoto": "אריבער צו בלאט $1",
+       "img-lang-default": "(גרונטשפראך)",
+       "img-lang-go": "גיין",
        "ascending_abbrev": "ארויף",
        "descending_abbrev": "נידערן",
        "table_pager_next": "נעקסטער בלאט",
        "watchlistedit-raw-done": "אייער אויפֿפאַסונג ליסטע איז געווארן דערהײַנטיקט",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 טיטל איז|$1 טיטלען זענען}} געווען צוגעלייגט:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 טיטל איז|$1 טיטלען זענען}} געווען אַראָפגענומען:",
+       "watchlistedit-clear-legend": "ליידיקן די אויפפאסן ליסטע",
+       "watchlistedit-clear-titles": "טיטלען:",
+       "watchlisttools-clear": "ליידיקן די אויפפאסן ליסטע",
        "watchlisttools-view": "ווייזן שייכדיגע ענדערונגען",
        "watchlisttools-edit": "זען און רעדאקטירן די אויפֿפאסונג ליסטע",
        "watchlisttools-raw": "רעדאקטירן די רויע אויפֿפאסונג ליסטע",
        "version-hook-name": "נאמען פון hook",
        "version-version": "(ווערסיע $1)",
        "version-license": "מעדיעוויקי ליצענץ",
+       "version-ext-license": "ליצענץ",
+       "version-ext-colheader-name": "פארברייטערונג",
+       "version-ext-colheader-version": "ווערסיע",
+       "version-ext-colheader-license": "ליצענץ",
+       "version-ext-colheader-description": "באַשרײַבונג",
+       "version-ext-colheader-credits": "שרייבער",
        "version-poweredby-others": "אַנדערע",
        "version-poweredby-translators": "translatewiki.net איבערזעצער",
        "version-credits-summary": "מיר ווילן אנערקענען די פֿאלגנדע מענטשן פֿאר זייער בײַשטײַערוג צו [[Special:Version|מעדיעוויקי]].",
        "redirect-lookup": "זוכן:",
        "redirect-value": "ווערט:",
        "redirect-user": "באַניצער־נומער:",
+       "redirect-page": "בלאט נומער",
        "redirect-revision": "בלאט ווערסיע",
        "redirect-file": "טעקע נאמען",
        "redirect-not-exists": "ווערט נישט געטראפן",
        "fileduplicatesearch-info": "$1 × $2 פיקסעל<br />טעקע גרייס: $3<br /> טיפ MIME: $4",
        "fileduplicatesearch-noresults": "קיין טעקע מיטן נאמען \"$1\" נישט געטראפֿן.",
        "specialpages": "ספּעציעלע זײַטן",
+       "specialpages-note-top": "לעגענדע",
        "specialpages-note": "* נארמאַלע באַזונדערע בלעטער.\n* <span class=\"mw-specialpagerestricted\">באַגרענעצטע באַזונדערע בלעטער.</span>",
        "specialpages-group-maintenance": "אויפֿהאַלטונג באַריכטן",
        "specialpages-group-other": "אַנדערע ספעציעלע בלעטער",
        "expand_templates_output": "רעזולטאט",
        "expand_templates_xml_output": "XML אויסגאָב",
        "expand_templates_ok": "אויספֿירן",
+       "expand_templates_remove_comments": "אראפנעמען הערות",
        "expand_templates_preview": "פֿאראויסשטעלונג"
 }
index 5be55de..61c4a08 100644 (file)
        "login-abort-generic": "Ìwọlé yín kò yọrísírere - ó ti jẹ́ kíkáwọ́dà",
        "loginlanguagelabel": "Èdè: $1",
        "suspicious-userlogout": "Ìtọrọ tí ẹ ṣe láti bọ́sóde jẹ̀ kíkọ̀ nítorípé ó dà bí pé ó jẹ́ fífiránṣẹ́ látọ̀dọ̀ awòtakùn (browser) àìdára tàbí ẹ̀rọ-ìwọ̀fà ìmúpamọ́ onígbàdíẹ̀.",
+       "pt-login": "Ìjáwọlé",
+       "pt-login-button": "Ìjáwọlé",
+       "pt-createaccount": "Ìdásílẹ̀ àpamọ́",
+       "pt-userlogout": "Ìjáde",
        "php-mail-error-unknown": "Àsìṣe àìmọ̀ nínú ìgbéṣe mail() ti PHP",
        "user-mail-no-addy": "Ó fẹ́ fi e-mail ránṣẹ́ láìsí àdírẹ́sì e-mail.",
        "user-mail-no-body": "Ò fẹ́ fi email tí kò ní ọ̀rọ̀ kankan nínú ránsẹ́.",
        "changepassword": "Ìyípadà ọ̀rọ̀ìpamọ́",
-       "resetpass_announce": "Ẹ ti wọlé pẹ̀lú àmìọ̀rọ̀ e-mail ìgbàdíẹ̀.\nLáti parí ìmúwọlẹ́, ẹ gbọ́dọ̀ ṣètò ọ̀rọ̀ìpamọ́ tuntun níbí:",
+       "resetpass_announce": "Láti parí ìjáwọlẹ́, ẹ gbọ́dọ̀ ṣètò ọ̀rọ̀ìpamọ́ tuntun.",
        "resetpass_header": "Ẹ ṣ'àyípadà ọ̀rọ̀ìpamọ́",
        "oldpassword": "Ọ̀rọ̀ìpamọ́ titẹ́lẹ̀:",
        "newpassword": "Ọ̀rọ̀ìpamọ́ tuntun:",
        "retypenew": "Àtúntẹ̀ ọ̀rọ̀ìpamọ́ tuntun:",
        "resetpass_submit": "Ẹ ṣe àtúntò ọ̀rọ̀ìpamọ́ kí ẹ tó wọlé",
        "changepassword-success": "Ìyípadà ọ̀rọ̀ìpamọ́ yín ti já sí rere!",
+       "changepassword-throttled": "Ẹ ti gbìyànjú lọ́pọ̀ bó ṣe yẹ lọ láti jáwọlé.\nẸ jọ̀wọ́ ẹ dúró fún $1 ná kí ẹ tó tún gbìyànjú lẹ́ẹ̀kan síi.",
        "resetpass_forbidden": "Àwọn ọ̀rọ̀ìpamọ́ kò ṣe é yípadà",
        "resetpass-no-info": "Ẹ gbọ́dọ̀ wọlẹ́ láti le lọ sí ojúewé yìí tààrà.",
        "resetpass-submit-loggedin": "Ìyípadà ọ̀rọ̀ìpamọ́",
        "searchmenu-exists": "'''Ojúewé tó ún jẹ́ \"[[:$1]]\" wà lórí wiki yìí'''",
        "searchmenu-new": "'''Dá ojúewé \"[[:$1]]\" sí orí wiki yìí!'''",
        "searchprofile-articles": "Àwọn ojúewé Àkóónú",
-       "searchprofile-project": "Àwọn ojúewé Ìrànwọ́ àti Iṣẹ́-ọwọ́",
        "searchprofile-images": "Amóhùnmáwòrán",
        "searchprofile-everything": "Èyíkéyìí",
        "searchprofile-advanced": "Onígíga",
        "searchprofile-articles-tooltip": "Ṣàwáàrí nínú $1",
-       "searchprofile-project-tooltip": "Ṣàwáàrí nínú $1",
        "searchprofile-images-tooltip": "Ṣàwáàrí fún faili",
        "searchprofile-everything-tooltip": "Ṣàwáàrí nínú gbogbo àkóónú (pẹ̀lú àwọn ojúewé ọ̀rọ̀)",
        "searchprofile-advanced-tooltip": "Ṣàwáàrí nínú àwọn orúkọàyè pàtó",
        "search-interwiki-default": "èsì $1",
        "search-interwiki-more": "(tókù)",
        "search-relatedarticle": "Tóbáramu",
-       "searcheverything-enable": "Àwárí nínú gbogbo orúkọàyè:",
        "searchrelated": "tóbáramu",
        "searchall": "gbogbo",
        "showingresults": "Ìfihàn nísàlẹ̀ títí dé {{PLURAL:$1|èsì '''1'''|àwọn èsì '''$1'''}} láti ìbẹ̀rẹ̀ ní #'''$2'''.",
        "allowemail": "Ìgbàláyè e-mail látọ̀dọ̀ àwọn oníṣe mìíràn",
        "prefs-searchoptions": "Ṣàwárí",
        "prefs-namespaces": "Àwọn orúkọàyè",
-       "defaultns": "Bíbẹ́ẹ̀kọ́ ṣe àwárí nínú àwọn orúkọàyè yìí:",
        "default": "níbẹ̀rẹ̀",
        "prefs-files": "Àwọn faili",
        "prefs-custom-css": "CSS àkànṣe",
        "prefs-emailconfirm-label": "E-mail ìmúdájú:",
        "youremail": "E-mail:",
        "username": "{{GENDER:$1|Orúkọ oníṣe}}:",
-       "uid": "Nọmba ìdámọ̀ {{GENDER:$1|oníṣe}}:",
        "prefs-memberingroups": "{{GENDER:$2|Ọ̀kan}} nínú {{PLURAL:$1|ẹgbẹ́|àwọn ẹgbẹ́}}:",
        "prefs-registration": "Àsìkò ìforúkọsílẹ́:",
        "yourrealname": "Orúkọ ganangan:",
        "recentchanges-label-unpatrolled": "Àtúnṣe yìí kò tí ì jẹ́ onísíṣọ́",
        "recentchanges-label-plusminus": "Iye bytes àtúnṣe sí ìtóbi ojúewé",
        "recentchanges-legend-heading": "'''Ìtumọ̀:'''",
-       "recentchanges-legend-newpage": "(ẹ tún wo [[Special:NewPages|àtòjọ àwọn ojúewé tuntun]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ẹ tún wo [[Special:NewPages|àtòjọ àwọn ojúewé tuntun]])",
        "rcnotefrom": "Àwọn àtúnṣe láti ''''$2''' (títí dé '''$1''' hàn) lábẹ́.",
        "rclistfrom": "Àfihàn àwọn àtúnṣe tuntun nípa bíbẹ̀rẹ̀ láti $3 $2",
        "rcshowhideminor": "$1 àwọn àtúnṣe kékéèké",
        "log-title-wildcard": "Wá àkọlé tó bẹ̀rẹ̀ pẹ̀lú ìkọ yìí",
        "showhideselectedlogentries": "Ìfihàn/ìbòmọ́lẹ̀ àwọn ohun inú àkọọ́lẹ̀ àṣàyàn",
        "allpages": "Gbogbo ojúewé",
-       "alphaindexline": "$1 dé $2",
        "nextpage": "Ojúewé tókàn ($1)",
        "prevpage": "Ojúewé tókọjá ($1)",
        "allpagesfrom": "Ìfihàn àwọn ojúewé nípa bíbẹ̀rẹ̀ láti:",
index 4c37bd6..2ffb91e 100644 (file)
@@ -17,7 +17,9 @@
                        "Yfdyh000",
                        "Cwek",
                        "아라",
-                       "Ktchankt"
+                       "Ktchankt",
+                       "Kc kennylau",
+                       "Mywood"
                ]
        },
        "tog-underline": "連結加底線:",
        "history_short": "歷史",
        "updatedmarker": "我上次來之後嘅修改",
        "printableversion": "可打印版本",
-       "permalink": "永久連結",
+       "permalink": "固定連結",
        "print": "印",
        "view": "去睇",
        "edit": "改",
        "searchmenu-exists": "'''響呢個wiki度有一版叫做\"[[:$1]]\"。'''",
        "searchmenu-new": "'''響呢個wiki度開呢版\"[[:$1]]\"!'''",
        "searchprofile-articles": "內容頁",
-       "searchprofile-project": "幫手同計劃頁",
        "searchprofile-images": "多媒體",
        "searchprofile-everything": "全部嘢",
        "searchprofile-advanced": "進階",
        "searchprofile-articles-tooltip": "響$1度搵",
-       "searchprofile-project-tooltip": "響$1度搵",
        "searchprofile-images-tooltip": "搵檔案",
        "searchprofile-everything-tooltip": "搵全部嘢(包埋討論版)",
        "searchprofile-advanced-tooltip": "響自定空間名度搵",
        "search-interwiki-default": "$1項結果:",
        "search-interwiki-more": "(更多)",
        "search-relatedarticle": "有關",
-       "searcheverything-enable": "搵全部空間名",
        "searchrelated": "有關",
        "searchall": "全部",
        "showingresults": "'自#'''$2'''起顯示最多'''$1'''個結果。",
        "allowemail": "由其它用戶啟用電子郵件",
        "prefs-searchoptions": "搵嘢選項",
        "prefs-namespaces": "空間名",
-       "defaultns": "否則喺呢啲空間名搵嘢:",
        "default": "預設",
        "prefs-files": "檔案",
        "prefs-custom-css": "自定 CSS",
        "prefs-emailconfirm-label": "電郵確認:",
        "youremail": "電郵:",
        "username": "用戶名:",
-       "uid": "{{GENDER:$1|用戶}}ID:",
        "prefs-memberingroups": "{{PLURAL:$1|一|多}}組嘅成員:",
        "prefs-registration": "註冊時間:",
        "yourrealname": "真名:",
        "action-userrights-interwiki": "編輯響其它wiki用戶嘅權限",
        "action-siteadmin": "鎖同解鎖資料庫",
        "nchanges": "$1次更改",
-       "recentchanges": "æ\9c\80è¿\91æ\9b´æ\94¹",
+       "recentchanges": "æ\9c\80è¿\91æ\94¹é\81\8eå\98\85å\98¢",
        "recentchanges-legend": "最近更改選項",
        "recentchanges-summary": "追蹤對哩一個 wiki 嘅最後更改。",
        "recentchanges-feed-description": "追蹤對哩一個 wiki 度呢個集合嘅最後更改。",
        "logempty": "日誌中冇符合嘅項目。",
        "log-title-wildcard": "搵以呢個文字開始嘅標題",
        "allpages": "所有頁面",
-       "alphaindexline": "$1到$2",
        "nextpage": "下一頁 ($1)",
        "prevpage": "上一頁 ($1)",
        "allpagesfrom": "顯示以下位置開始嘅頁面:",
        "tooltip-preferences-save": "保存設定",
        "tooltip-summary": "輸入一個簡短嘅摘要",
        "common.css": "/* 響呢度放 CSS 碼來改成個網站嘅畫面 */",
-       "cologneblue.css": "/* 響呢度放 CSS 碼去改用戶用嘅科隆藍畫面 */",
        "monobook.css": "/* 響呢度放 CSS 碼去改用戶用嘅 Monobook 畫面 */",
-       "modern.css": "/* 響呢度放 CSS 碼去改用戶用嘅摩登畫面 */",
        "vector.css": "/* 響呢度放 CSS 碼去改用戶用嘅域達畫面 */",
        "print.css": "/* 響呢度放 CSS 碼去改打印輸出 */",
        "common.js": "/* 響每一次個頁面載入時,所有用戶都會載入呢度任何嘅JavaScript。 */",
-       "cologneblue.js": "/* 響每一次個頁面載入時,用科隆藍畫面嘅用戶都會載入呢度任何嘅JavaScript */",
        "monobook.js": "/* 響每一次個頁面載入時,用 Monobook 畫面嘅用戶都會載入呢度任何嘅JavaScript */",
-       "modern.js": "/* 響每一次個頁面載入時,用摩登畫面嘅用戶都會載入呢度任何嘅JavaScript */",
        "vector.js": "/* 響每一次個頁面載入時,用域達畫面嘅用戶都會載入呢度任何嘅JavaScript */",
        "anonymous": "{{SITENAME}}嘅匿名{{PLURAL:$1|用戶|用戶}}",
        "siteuser": "{{SITENAME}}嘅用戶$1",
        "spam_reverting": "恢復返去最後一個唔包含指去$1嘅連結嘅嗰個修訂。",
        "spam_blanking": "全部版本都含有指去$1嘅連結,留空",
        "simpleantispam-label": "反垃圾檢查。\n'''唔好'''加入呢個!",
-       "skinname-cologneblue": "科隆藍",
        "skinname-monobook": "MonoBook",
-       "skinname-modern": "摩登",
        "skinname-vector": "Vector",
        "markaspatrolleddiff": "標示為已巡查嘅",
        "markaspatrolledtext": "標示呢版做查咗嘅",
        "sqlite-no-fts": "$1 冇全文搜尋支援",
        "revdelete-restricted": "已經應用限制到操作員",
        "revdelete-unrestricted": "已經拎走對於操作員嘅限制",
-       "rightsnone": "()",
+       "rightsnone": "()",
        "searchsuggest-search": "搵嘢",
        "searchsuggest-containing": "名單傳送緊...",
        "duration-hours": "$1{{PLURAL:$1|個鐘}}",
index cbaec05..25293cb 100644 (file)
@@ -74,7 +74,8 @@
                        "范",
                        "阿pp",
                        "Hudafu",
-                       "아라"
+                       "아라",
+                       "Mywood"
                ]
        },
        "tog-underline": "链接下划线:",
        "category_header": "分类“$1”中的页面",
        "subcategories": "子分类",
        "category-media-header": "分类“$1”中的媒体文件",
-       "category-empty": "''本分类目前未包含页面或媒体文件。''",
+       "category-empty": "<em>本分类目前没有包含页面或媒体文件。</em>",
        "hidden-categories": "{{PLURAL:$1|隐藏分类}}",
        "hidden-category-category": "隐藏分类",
        "category-subcat-count": "{{PLURAL:$2|本分类只有以下子分类。|本分类有以下$1个子分类,共有$2个子分类。}}",
        "vector-view-view": "阅读",
        "vector-view-viewsource": "查看源代码",
        "actions": "操作",
+       "vector-more-actions": "更多",
        "namespaces": "名字空间",
        "variants": "变种",
        "navigation-heading": "导航菜单",
        "history_short": "历史",
        "updatedmarker": "更新于我上次访问后",
        "printableversion": "打印版本",
-       "permalink": "永久链接",
+       "permalink": "固定链接",
        "print": "打印",
        "view": "查看",
        "view-foreign": "在$1查看",
        "resetpass-temp-emailed": "您通过一个暂时电子邮件发送的代码登录。要完成登录,您必须在此设置一个新密码:",
        "resetpass-temp-password": "临时密码:",
        "resetpass-abort-generic": "密码更改已经被扩展程序中止。",
-       "resetpass-expired": "您的密码已经过期。请设置一个新的密码登录。",
-       "resetpass-expired-soft": "您的密码已过期并且需要重置。请现在选择一个新密码,或单击“{{int:resetpass-submit-cancel}}”以便稍后重置。",
+       "resetpass-expired": "你的密码已经到期。请设置新登录密码。",
+       "resetpass-expired-soft": "你的密码已经到期,需要重置。请现在更换新密码,或单击“{{int:resetpass-submit-cancel}}”以稍后重置。",
        "resetpass-validity-soft": "您的密码无效:$1\n请选择一个新密码,或单击“{{int:resetpass-submit-cancel}}”以稍后重置。",
        "passwordreset": "重置密码",
        "passwordreset-text-one": "请输入你要重置的用户名。",
        "parser-template-loop-warning": "检查到模板循环:[[$1]]",
        "parser-template-recursion-depth-warning": "模板递归深度越限($1)",
        "language-converter-depth-warning": "字词转换器深度越限($1)",
-       "node-count-exceeded-category": "页面的节点数超出限制",
+       "node-count-exceeded-category": "节点数超限的页面",
        "node-count-exceeded-category-desc": "节点数溢出页面的分类。",
        "node-count-exceeded-warning": "页面超出了节点数",
-       "expansion-depth-exceeded-category": "扩展深度超出限制的页面",
+       "expansion-depth-exceeded-category": "展开深度超限的页面",
        "expansion-depth-exceeded-category-desc": "这是超出拓展深度页面的分类。",
        "expansion-depth-exceeded-warning": "页面超过了扩展深度",
        "parser-unstrip-loop-warning": "检测到回圈",
        "parser-unstrip-recursion-limit": "递归超过限制 ($1)",
-       "converter-manual-rule-error": "手动语言转换规则中检测到错误",
+       "converter-manual-rule-error": "手动语言转换规则中检测到错误",
        "undo-success": "该编辑可以被撤销。请检查下面的对比以核实你想要撤销的内容,然后保存下面的更改以完成撤销。",
        "undo-failure": "因存在冲突的中间编辑,本编辑不能撤销。",
        "undo-norev": "该编辑无法撤消,因为它不存在或已被删除。",
        "undo-nochange": "这次编辑似乎已被撤销。",
        "undo-summary": "撤销[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的版本$1",
-       "undo-summary-username-hidden": "取消由一匿名用户所作的修订$1",
+       "undo-summary-username-hidden": "取消由一匿名用户所作的版本$1",
        "cantcreateaccounttitle": "无法创建账户",
        "cantcreateaccount-text": "从该IP地址('''$1''')创建账户已被[[User:$3|$3]]禁止。\n\n$3的理由是''$2''",
        "cantcreateaccount-range-text": "从该IP地址段'''$1'''的账户创建已被[[User:$3|$3]]禁止,而这也包括了您的IP地址('''$4''')。\n$3给出的原因是“$2”。",
-       "viewpagelogs": "查看页面的日志",
+       "viewpagelogs": "查看页面的日志",
        "nohistory": "本页面没有编辑历史记录。",
        "currentrev": "最后版本",
        "currentrev-asof": "$1的最后版本",
        "revisionasof": "$1的版本",
-       "revision-info": "$1$2的版本",
+       "revision-info": "{{GENDER:$6|$2}}$1的版本$7",
        "previousrevision": "←上一版本",
        "nextrevision": "下一版本→",
        "currentrevisionlink": "最后版本",
-       "cur": "当前",
+       "cur": "",
        "next": "后继",
-       "last": "å\85\88å\89\8d",
+       "last": "前",
        "page_first": "首页",
        "page_last": "末页",
-       "histlegend": "差异选择:选出需要对比的版本,按“回车键”或下方的按钮进行对比。<br />\n说明:'''({{int:cur}})'''=与最后版本之间的差异,'''({{int:last}})'''=与上一版本之间的差异,'''{{int:minoreditletter}}'''=小编辑。",
+       "histlegend": "差异选择:选中要对比的版本的单选按钮,按Enter键或下方的按钮。<br />\n说明:<strong>({{int:cur}})</strong>=与最后版本之间的差异,<strong>({{int:last}})</strong>=与上一版本之间的差异,<strong>{{int:minoreditletter}}</strong>=小编辑。",
        "history-fieldset-title": "浏览历史",
        "history-show-deleted": "仅已被删除",
        "histfirst": "最旧",
        "rev-deleted-user-contribs": "[用户名或IP地址被删除 - 编辑在贡献中隐藏]",
        "rev-deleted-text-permission": "本页面版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
        "rev-deleted-text-unhide": "本页面版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。如果你想继续操作,你仍然可以[$1 查看本版本]。",
-       "rev-suppressed-text-unhide": "该页面修订已经被'''监督隐藏'''。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。如果您想继续的话,您可以仍然[$1 去查看这次修订]。",
+       "rev-suppressed-text-unhide": "该页面版本已经被'''监督隐藏'''。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。如果您想继续的话,您可以仍然[$1 去查看这次版本]。",
        "rev-deleted-text-view": "本页面版本已被'''删除'''。你可以查看它,详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
        "rev-suppressed-text-view": "该页面修订已经被'''监督隐藏'''。您可以查看它。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。",
        "rev-deleted-no-diff": "你不能查看该差异,因为其中一个版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
        "rev-suppressed-no-diff": "你不能查看该差异,因为其中一个版本已被'''删除'''。",
-       "rev-deleted-unhide-diff": "该差异对比其中的一个修订版本已经被'''删除'''。在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中可以找到更多的信息。如果您想继续的话,您仍然可以[$1 查看这次修订]。",
-       "rev-suppressed-unhide-diff": "该页面的其中一次修订已经被'''监督隐藏'''。\n在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到更多的资料。如果您想继续的话,您可以仍然[$1 去查看这次修订]。",
-       "rev-deleted-diff-view": "差异对比中的一次修订已被'''删除'''。您可以对比此差异。详细信息可在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。",
+       "rev-deleted-unhide-diff": "该差异对比其中的一个版本已经被'''删除'''。在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中可以找到更多的信息。如果您想继续的话,您仍然可以[$1 查看这版本]。",
+       "rev-suppressed-unhide-diff": "该页面的其中一次版本已经被'''监督隐藏'''。\n在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到更多的资料。如果您想继续的话,您可以仍然[$1 去查看这版本]。",
+       "rev-deleted-diff-view": "差异对比中的一次版本已被'''删除'''。您可以对比此差异。详细信息可在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。",
        "rev-suppressed-diff-view": "差异对比中的一次修订已被'''监督隐藏'''。您可以对比此差异。详细信息可在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中找到。",
        "rev-delundel": "显示/隐藏",
        "rev-showdeleted": "显示",
        "revdelete-confirm": "请确认该操作,明白其后果,并确保该操作符合[[{{MediaWiki:Policy-url}}|方针]]。",
        "revdelete-suppress-text": "阻止应'''仅'''用于以下情况:\n* 潜在的诽谤信息\n* 不合适的个人信息\n*: ''家庭地址、电话号码和社保号码等。''",
        "revdelete-legend": "设置可见性之限制",
-       "revdelete-hide-text": "修订文字",
+       "revdelete-hide-text": "版本文字",
        "revdelete-hide-image": "隐藏文件内容",
        "revdelete-hide-name": "隐藏动作和目标",
        "revdelete-hide-comment": "编辑摘要",
        "revdelete-unsuppress": "在已恢复的修订中移除限制",
        "revdelete-log": "原因:",
        "revdelete-submit": "应用于选中的{{PLURAL:$1|版本}}",
-       "revdelete-success": "<strong>修订版本可见性更新成功。</strong>",
-       "revdelete-failure": "<strong>修订版本可见性无法更新:</strong>\n$1",
+       "revdelete-success": "<strong>版本可见性更新成功。</strong>",
+       "revdelete-failure": "<strong>版本可见性无法更新:</strong>$1",
        "logdelete-success": "'''事件的可见性已经成功设置。'''",
        "logdelete-failure": "'''事件的可见性无法设置:'''\n$1",
        "revdel-restore": "更改可见性",
        "pagehist": "页面历史",
        "deletedhist": "已删除历史",
-       "revdelete-hide-current": "正在隐藏于$1 $2之项目错误:这个是现时的修订,不可以隐藏。",
+       "revdelete-hide-current": "隐藏$1 $2的项出错:这个是当前的版本,不可以隐藏。",
        "revdelete-show-no-access": "正在显示于$1 $2之项目错误:这个项目已经标示为\"已限制\",您对它并无通行权。",
        "revdelete-modify-no-access": "正在更改于$1 $2之项目错误:这个项目已经标示为\"已限制\",您对它并无通行权。",
        "revdelete-modify-missing": "正在更改项目ID $1错误:它在资料库中遗失!",
        "diff-multi-sameuser": "(未显示同一用户的$1个中间版本)",
        "diff-multi-otherusers": "(未显示{{PLURAL:$1|另一用户|$2个用户}}的{{PLURAL:$1|$1个中间版本}})",
        "diff-multi-manyusers": "(未显示超过$2个用户的$1个中间版本)",
-       "difference-missing-revision": "此差异对比的{{PLURAL:$2|一个修订|$2个修订}}($1){{PLURAL:$2|没有}}找到。\n\n这通常是因为进入了一个已被删除的页面的修订差异对比链接。\n详细信息可以在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。",
+       "difference-missing-revision": "此差异对比的{{PLURAL:$2|$2个版本}}($1){{PLURAL:$2|没有}}找到。\n\n这通常是因为进入了一个已被删除的页面的版本差异对比链接。\n详细信息可以在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。",
        "searchresults": "搜索结果",
        "searchresults-title": "“$1”的搜索结果",
        "toomanymatches": "找到的匹配结果过多,请尝试不同的查询词",
        "searchmenu-exists": "'''本wiki上有名为“[[:$1]]”的页面。'''",
        "searchmenu-new": "<strong>在本Wiki上新建名为“[[:$1]]”的页面!</strong>{{PLURAL:$2|0=|另请查看您的搜索找的结果。|另请查看搜索结果。}}",
        "searchprofile-articles": "内容页面",
-       "searchprofile-project": "帮助和项目页面",
        "searchprofile-images": "多媒体",
        "searchprofile-everything": "全部",
        "searchprofile-advanced": "高级",
        "searchprofile-articles-tooltip": "在$1中搜索",
-       "searchprofile-project-tooltip": "在$1中搜索",
        "searchprofile-images-tooltip": "搜索文件",
        "searchprofile-everything-tooltip": "搜索所有内容(包括讨论页面)",
        "searchprofile-advanced-tooltip": "在自定义名字空间中搜索",
-       "search-result-size": "$1($2字)",
+       "search-result-size": "$1($2字)",
        "search-result-category-size": "$1个成员($2个子分类,$3个文件)",
        "search-result-score": "相关度:$1%",
        "search-redirect": "(重定向自“$1”)",
        "search-interwiki-default": "来自$1的结果:",
        "search-interwiki-more": "(更多)",
        "search-relatedarticle": "相关",
-       "searcheverything-enable": "在所有名字空间中搜索",
        "searchrelated": "相关",
        "searchall": "所有",
        "showingresults": "下面显示从第'''$2'''条结果开始的'''$1'''条结果。",
        "showingresultsinrange": "下面显示区间#<strong>$2</strong>至#<strong>$3</strong>的<strong>$1</strong>条结果。",
        "showingresultsnum": "下面显示从第'''$2'''条结果开始的'''$3'''条结果。",
-       "showingresultsheader": "关于'''$4'''的{{PLURAL:$5|第'''$1'''条结果,共'''$3'''条结果|第'''$1~$2'''条结果,共'''$3'''条结果}}",
+       "showingresultsheader": "关于<strong>$4</strong>的{{PLURAL:$5|第<strong>$1</strong>条结果,共<strong>$3</strong>条结果|第<strong>$1 - $2</strong>条结果,共<strong>$3</strong>条结果}}",
        "search-nonefound": "找不到和查询相匹配的结果。",
        "powersearch-legend": "高级搜索",
        "powersearch-ns": "搜索名字空间:",
        "powersearch-togglelabel": "选择:",
        "powersearch-toggleall": "全选",
        "powersearch-togglenone": "全不选",
+       "powersearch-remember": "记住选择用于以后搜索",
        "search-external": "外部搜索",
        "searchdisabled": "{{SITENAME}}的搜索已被禁用。您可以暂时使用搜索引擎进行搜索,须注意他们索引的{{SITENAME}}内容可能不是最新的。",
        "search-error": "搜索时发生错误:$1",
        "recentchangesdays-max": "最多$1天",
        "recentchangescount": "默认显示的编辑数:",
        "prefs-help-recentchangescount": "这包括最近更改、页面历史和日志。",
-       "prefs-help-watchlist-token2": "这是您的监视列表的网络feed密钥。\n任何拥有者均可以浏览您的监视列表,因此不要公开该密钥。\n如果有需要,[[Special:ResetTokens|您可以重置密钥]]。",
+       "prefs-help-watchlist-token2": "这是你的监视列表的网络feed的密钥。任何知道它的人均可以阅读你的监视列表,因此请不要分享它。如果需要,[[Special:ResetTokens|你可以重置它]]。",
        "savedprefs": "您的系统设置已保存。",
        "timezonelegend": "时区:",
        "localtime": "当地时间:",
        "allowemail": "启用来自其他用户的电子邮件",
        "prefs-searchoptions": "搜索",
        "prefs-namespaces": "名字空间",
-       "defaultns": "否则在这些名字空间中搜索:",
        "default": "默认",
        "prefs-files": "文件",
        "prefs-custom-css": "自定义CSS",
        "yourvariant": "内容语言变种:",
        "prefs-help-variant": "您希望用于显示该本站内容的语言变体。",
        "yournick": "新签名:",
-       "prefs-help-signature": "讨论页上留言应该使用“<nowiki>~~~~</nowiki>”签名,它会自动转换为您的签名及时间戳。",
+       "prefs-help-signature": "讨论页面上的评论应该使用“<nowiki>~~~~</nowiki>”签名,它会自动转换为您的签名及时间戳。",
        "badsig": "错误的原始签名。请检查HTML标签。",
        "badsiglength": "签名过长。请不超过$1个字符。",
        "yourgender": "您希望使用什么性别称呼?",
        "prefs-help-gender": "该设置为可选项。软件根据该值在称呼您及对他人提及您时使用适当的语法性别。该信息会被公开。",
        "email": "电子邮件",
        "prefs-help-realname": "真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。",
-       "prefs-help-email": "电子邮件是可选项,但是在您忘记密码时很有用。",
-       "prefs-help-email-others": "您也可以选择让其他用户通过您的用户页或讨论页上的链接用电子邮件联系您。其他用户联系您时您的电子邮件地址不会显示。",
+       "prefs-help-email": "电子邮件地址是选填项,但是当你忘记你的密码要重置密码时,需要该信息。",
+       "prefs-help-email-others": "你也可以选择让其他用户通过你的用户或讨论页面上的链接用电子邮件联系你。其他用户联系你时你的电子邮件地址不会显示。",
        "prefs-help-email-required": "电子邮件地址是必填项目。",
        "prefs-info": "基本信息",
        "prefs-i18n": "语言",
        "recentchanges-label-unpatrolled": "该编辑尚未巡查",
        "recentchanges-label-plusminus": "该页面字节数的前后变化",
        "recentchanges-legend-heading": "'''说明:'''",
-       "recentchanges-legend-newpage": "(见[[Special:NewPages|新页面列表]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}(见[[Special:NewPages|新页面列表]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "下面是<strong>$2</strong>之后的更改(最多显示<strong>$1</strong>个)。",
        "rclistfrom": "显示$3 $2之后的新更改",
        "rcshowhidemine-show": "显示",
        "rcshowhidemine-hide": "隐藏",
        "rclinks": "显示过去$2天的最后$1个更改<br />$3",
-       "diff": "å·®å¼\82",
-       "hist": "å\8e\86å\8f²",
+       "diff": "异",
+       "hist": "史",
        "hide": "隐藏",
        "show": "显示",
        "minoreditletter": "小",
        "upload-curl-error6": "无法访问URL",
        "upload-curl-error6-text": "无法访问提供的URL。请检查该URL是否正确,及其网站是否在线。",
        "upload-curl-error28": "上传超时",
-       "upload-curl-error28-text": "ç«\99ç\82¹å\93\8dåº\94æ\97¶é\97´è¿\87é\95¿ã\80\82请æ£\80æ\9f¥æ­¤ç½\91ç«\99ç\9a\84访é\97®æ\98¯å\90¦æ­£å¸¸ï¼\8cè¿\87ä¸\80ä¼\9aå\86\8dè¿\9bè¡\8cå°\9dè¯\95ã\80\82æ\82¨å\8f¯è\83½é\9c\80è¦\81å\9c¨ç½\91ç»\9c访é\97®ç©ºé\97²æ\97¶é\97´å\86\8d次è¿\9bè¡\8c尝试。",
+       "upload-curl-error28-text": "ç½\91ç«\99å\93\8dåº\94æ\97¶é\97´è¿\87é\95¿ã\80\82请æ£\80æ\9f¥ç½\91ç«\99æ\98¯å\90¦æ­£å¸¸ï¼\8c并ç¨\8då\90\8eé\87\8dè¯\95ã\80\82ä½ å\8f¯è\83½æ\83³è¦\81å\9c¨ç½\91ç»\9c空é\97²æ\97尝试。",
        "license": "授权协议:",
        "license-header": "授权协议",
        "nolicense": "未选定",
        "brokenredirectstext": "以下重定向链接至不存在的页面:",
        "brokenredirects-edit": "编辑",
        "brokenredirects-delete": "删除",
-       "withoutinterwiki": "无语言链接页面",
+       "withoutinterwiki": "无语言链接页面",
        "withoutinterwiki-summary": "以下页面没有链接至其它语言版本。",
        "withoutinterwiki-legend": "前缀",
        "withoutinterwiki-submit": "显示",
        "uncategorizedtemplates": "未归类模板",
        "unusedcategories": "未使用分类",
        "unusedimages": "未使用文件",
-       "popularpages": "热页面",
+       "popularpages": "热页面",
        "wantedcategories": "需要的分类",
        "wantedpages": "需要的页面",
        "wantedpages-badtitle": "在结果组上的无效标题:$1",
        "wantedtemplates": "需要的模板",
        "mostlinked": "最多链接页面",
        "mostlinkedcategories": "最多链接分类",
-       "mostlinkedtemplates": "最多链接模板",
+       "mostlinkedtemplates": "最多嵌入页面",
        "mostcategories": "有最多分类的页面",
        "mostimages": "最多链接文件",
        "mostinterwikis": "有最多跨wiki的页面",
        "protectedpagesempty": "在这些参数下没有页面正在保护。",
        "protectedpages-timestamp": "时间戳",
        "protectedpages-page": "页面",
-       "protectedpages-expiry": "到期",
+       "protectedpages-expiry": "终止时间",
        "protectedpages-performer": "保护用户",
        "protectedpages-params": "保护参数",
        "protectedpages-reason": "原因",
        "listusers-editsonly": "只显示有编辑的用户",
        "listusers-creationsort": "按创建日期排序",
        "listusers-desc": "降序排序",
-       "usereditcount": "$1次编辑",
+       "usereditcount": "$1个{{PLURAL:$1|编辑}}",
        "usercreated": "{{GENDER:$3|创建}}于$1 $2",
        "newpages": "新页面",
        "newpages-username": "用户名:",
        "allarticles": "所有页面",
        "allinnamespace": "所有页面($1名字空间)",
        "allpagessubmit": "提交",
-       "allpagesprefix": "显示有该前缀的页面:",
+       "allpagesprefix": "显示页面的前缀:",
        "allpagesbadtitle": "给定的页面标题是非法的,或者具有一个内部语言或内部 wiki 的前缀。它可能包含一个或更多的不能用于标题的字符。",
        "allpages-bad-ns": "在{{SITENAME}}中没有一个叫做\"$1\"的名字空间。",
        "allpages-hide-redirects": "隐藏重定向",
        "cachedspecial-viewing-cached-ts": "您正浏览此页的缓存版本,不一定是最新的完整版本。",
        "cachedspecial-refresh-now": "查看最新的。",
        "categories": "分类",
-       "categoriespagetext": "以下{{PLURAL:$1|分类包含}}页面或媒体文件。[[Special:UnusedCategories|未使用分类]]不显示在这里。另请见[[Special:WantedCategories|需要的分类]]。",
+       "categoriespagetext": "以下{{PLURAL:$1|分类包含}}页面或媒体文件。[[Special:UnusedCategories|未使用分类]]不在这里显示。另请见[[Special:WantedCategories|需要的分类]]。",
        "categoriesfrom": "显示分类开始于:",
        "special-categories-sort-count": "按数量排列",
        "special-categories-sort-abc": "按字母排列",
-       "deletedcontributions": "被删除的用户贡献",
-       "deletedcontributions-title": "被删除的用户贡献",
+       "deletedcontributions": "被删除的用户贡献",
+       "deletedcontributions-title": "被删除的用户贡献",
        "sp-deletedcontributions-contribs": "贡献",
        "linksearch": "外部链接搜索",
        "linksearch-pat": "搜索网址:",
        "watchlistanontext": "请$1以查看或编辑您的监视列表。",
        "watchnologin": "未登录",
        "addwatch": "添加至监视列表",
-       "addedwatchtext": "已将页面“[[:$1]]”加入您的[[Special:Watchlist|监视列表]]。此后本页面及其讨论页的若有更改将在监视列表中显示。",
+       "addedwatchtext": "页面“[[:$1]]”已经添加至你的[[Special:Watchlist|监视列表]]。本页面及其讨论页面的未来更改将会在监视列表列出。",
+       "addedwatchtext-short": "页面“$1”已加入您的监视列表。",
        "removewatch": "从监视列表中删除",
        "removedwatchtext": "页面“[[:$1]]”已从[[Special:Watchlist|你的监视列表]]中删除。",
+       "removedwatchtext-short": "页面“$1”已从您的监视列表移除。",
        "watch": "监视",
        "watchthispage": "监视本页",
        "unwatch": "取消监视",
        "unwatchthispage": "停止监视",
        "notanarticle": "非内容页面",
-       "notvisiblerev": "上次由不同用户所作的修订版本已经删除",
-       "watchlist-details": "不计讨论页,您的监视列表中共有$1个页面。",
+       "notvisiblerev": "上次由不同用户所作的版本已经删除",
+       "watchlist-details": "不计讨论页面,您的监视列表中有$1个页面。",
        "wlheader-enotif": "已启用电子邮件通知。",
        "wlheader-showupdated": "您上次访问后发生更改的页面'''加粗'''显示",
-       "wlnote2": "下面是最近{{PLURAL:$1|<strong>$1</strong>小时}}的更改,截至$2 $3。",
+       "wlnote2": "下面是过去{{PLURAL:$1|<strong>$1</strong>小时}}的更改,截至$2 $3。",
        "wlshowlast": "显示过去$1小时$2天$3",
        "watchlist-options": "监视列表选项",
        "watching": "正在监视...",
        "enotif_subject_created": "{{SITENAME}}页面$1已被$2创建",
        "enotif_subject_moved": "{{SITENAME}}页面$1已被$2移动",
        "enotif_subject_restored": "{{SITENAME}}页面$1已经被$2{{GENDER:$2|还原}}",
-       "enotif_subject_changed": "{{SITENAME}}页面$1被$2更改",
+       "enotif_subject_changed": "{{SITENAME}}页面$1被$2更改",
        "enotif_body_intro_deleted": "{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|删除}},请见$3。",
        "enotif_body_intro_created": "{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|创建}},请浏览<$3>查看当前版本。",
        "enotif_body_intro_moved": "{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|移动}},请浏览<$3>查看当前版本。",
        "exbeforeblank": "被清空前的内容为:“$1”",
        "delete-confirm": "删除“$1”",
        "delete-legend": "删除",
-       "historywarning": "警告:您将要删除的页面有约$1个{{PLURAL:$1|修订}}版本的历史:",
+       "historywarning": "警告:您将要删除的页面有约$1个{{PLURAL:$1|版本}}的历史:",
        "confirmdeletetext": "您即将删除一个页面或图像以及其历史。\n请确定您要进行此项操作,并且了解其后果,同时您的行为符合[[{{MediaWiki:Policy-url}}]]。",
        "actioncomplete": "操作完成",
        "actionfailed": "操作失败",
        "protect-norestrictiontypes-title": "不可保护页面",
        "protect-legend": "确认保护",
        "protectcomment": "原因:",
-       "protectexpiry": "到期:",
+       "protectexpiry": "终止时间:",
        "protect_expiry_invalid": "输入的终止时间无效。",
        "protect_expiry_old": "终止时间已过去。",
        "protect-unchain-permissions": "解锁更多保护选项",
        "protect-summary-desc": "[$1=$2]($3)",
        "protect-summary-cascade": "联锁",
        "protect-expiring": "终止于$1(UTC)",
-       "protect-expiring-local": "$1到期",
+       "protect-expiring-local": "终止于$1",
        "protect-expiry-indefinite": "无限期",
        "protect-cascade": "保护本页中包含的页面(连锁保护)",
        "protect-cantedit": "您无法更改这个页面的保护等级,因为您没有权限去编辑它。",
        "protect-othertime": "其它时间:",
        "protect-othertime-op": "其它时间",
-       "protect-existing-expiry": "ç\8e°æ\97¶å\88°æ\9c\9fä¹\8b时间:$2 $3",
+       "protect-existing-expiry": "ç\8e°æ\9c\89ç\9a\84ç»\88æ­¢时间:$2 $3",
        "protect-otherreason": "其他/附加原因:",
        "protect-otherreason-op": "其他原因",
        "protect-dropdown": "*常见保护原因\n** 过度破坏\n** 过多垃圾信息\n** 负面的编辑战\n** 高流量页面",
        "protect-edit-reasonlist": "编辑保护原因",
-       "protect-expiry-options": "1小时:1 hour,1天:1 day,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,限期:infinite",
+       "protect-expiry-options": "1小时:1 hour,1天:1 day,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,限期:infinite",
        "restriction-type": "权限:",
        "restriction-level": "限制级别:",
        "minimum-size": "最小尺寸",
        "restriction-level-all": "任何级别",
        "undelete": "查看被删除页面",
        "undeletepage": "查看和还原被删除的页面",
-       "undeletepagetitle": "'''以下包含[[:$1]]的已删除之修订版本'''。",
+       "undeletepagetitle": "'''以下包含[[:$1]]的已删除之版本'''。",
        "viewdeletedpage": "查看被删页面",
        "undeletepagetext": "以下{{PLURAL:$1|页面|$1个页面}}已被删除,但依然在归档中并可以被恢复。归档可能会被定时清理。",
        "undelete-fieldset-title": "还原版本",
        "undeleteextrahelp": "要恢复该页面的整个历史记录时,不选中任何复选框直接点击'''''{{int:undeletebtn}}'''''。要选择性地恢复部分版本时,请选中相应版本前的复选框再点击'''''{{int:undeletebtn}}'''''。",
        "undeleterevisions": "$1版本存档",
        "undeletehistory": "如果您恢复了该页面,所有版本都会被恢复到修订历史中。\n如果本页删除后有一个同名的新页面建立,被恢复的版本将会出现在先前的历史中。",
-       "undeleterevdel": "如果把最新修订部分删除,反删除将会无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的修订。",
+       "undeleterevdel": "如果把最新版本部分删除,反删除将会无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的版本。",
        "undeletehistorynoadmin": "这个页面已被删除。删除原因显示在下方编辑摘要中,被删除前的所有修订文本连同删除前贡献用户的细节信息只对管理员可见。",
-       "undelete-revision": "$1由$3(在$4 $5)所编写的已删除修订版本:",
-       "undeleterevision-missing": "无效或丢失的修订版本。您可能使用了错误的链接,或者此修订版本已经被从存档中恢复或移除。",
-       "undelete-nodiff": "找不到先前的修订版本。",
+       "undelete-revision": "$1由$3(在$4 $5)所编写的已删除版本:",
+       "undeleterevision-missing": "无效或丢失的版本。您可能使用了错误的链接,或者此版本已经被从存档中恢复或移除。",
+       "undelete-nodiff": "找不到先前的版本。",
        "undeletebtn": "还原",
        "undeletelink": "查看/还原",
        "undeleteviewlink": "查看",
        "undelete-search-prefix": "显示页面自:",
        "undelete-search-submit": "搜索",
        "undelete-no-results": "删除日志中没有匹配的结果。",
-       "undelete-filename-mismatch": "不能删除带有时间戳的文件修订$1:文件不匹配",
-       "undelete-bad-store-key": "不能删除带有时间戳的文件修订$1:文件在删除前遗失。",
+       "undelete-filename-mismatch": "不能删除带有时间戳的文件版本$1:文件不匹配",
+       "undelete-bad-store-key": "不能删除带有时间戳的文件版本$1:文件在删除前遗失。",
        "undelete-cleanup-error": "删除无用的存档文件“$1”时发生错误。",
        "undelete-missing-filearchive": "由于文件存档 ID $1 不在数据库中,不能在文件存档中恢复。它可能已经被恢复了。",
        "undelete-error": "还原页面出错",
        "mycontris": "贡献",
        "contribsub2": "{{GENDER:$3|$1}}的贡献($2)",
        "contributions-userdoesnotexist": "用户“$1”尚未注册。",
-       "nocontribs": "没有找到符合特征的更改。",
+       "nocontribs": "没有找到匹配这些规则的更改。",
        "uctop": "(当前)",
        "month": "截止月份:",
        "year": "截止年份:",
        "sp-contributions-newbies-sub": "新账户的贡献",
        "sp-contributions-newbies-title": "新账户的用户贡献",
        "sp-contributions-blocklog": "封禁日志",
-       "sp-contributions-suppresslog": "已被删除的用户贡献",
-       "sp-contributions-deleted": "被删除的用户贡献",
+       "sp-contributions-suppresslog": "被压制的用户贡献",
+       "sp-contributions-deleted": "被删除的用户贡献",
        "sp-contributions-uploads": "上传",
        "sp-contributions-logs": "日志",
        "sp-contributions-talk": "讨论",
        "nolinkshere": "没有页面链接至'''[[:$1]]'''。",
        "nolinkshere-ns": "在所选的名字空间内没有页面链接到'''[[:$1]]'''。",
        "isredirect": "重定向页面",
-       "istemplate": "å\8c\85å\90«",
+       "istemplate": "åµ\8cå\85¥",
        "isimage": "文件链接",
        "whatlinkshere-prev": "{{PLURAL:$1|前|前$1个}}",
        "whatlinkshere-next": "{{PLURAL:$1|后|后$1个}}",
        "blockip-legend": "封禁用户",
        "blockiptext": "使用下方的表单来禁止来自特定IP地址或用户名的写访问。\n只有在为了防止破坏,并符合[[{{MediaWiki:Policy-url}}|方针]]的情况下才可采取此行动。\n请在下面输入一个具体的理由(例如引述一个被破坏的页面)。",
        "ipaddressorusername": "IP地址或用户名:",
-       "ipbexpiry": "期限:",
+       "ipbexpiry": "终止时间:",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*常见封禁原因\n** 插入虚假信息\n** 删除页面内容\n** 添加垃圾外部链接\n** 插入无意义文字\n** 恐吓行为/骚扰\n** 滥用多个账户\n** 不能接受的用户名",
        "ipb-hardblock": "阻止登录用户使用该IP地址编辑",
        "ipbenableautoblock": "自动封禁该用户最后使用的IP地址,以及他们随后试图用于编辑的所有IP地址",
        "ipbsubmit": "封禁该用户",
        "ipbother": "其它时间:",
-       "ipboptions": "2小时:2 hours,1天:1 day,3天:3 days,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,限期:infinite",
+       "ipboptions": "2小时:2 hours,1天:1 day,3天:3 days,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,限期:infinite",
        "ipbhidename": "在编辑及列表中隐藏用户名",
        "ipbwatchuser": "监视该用户的用户页和讨论页",
        "ipb-disableusertalk": "阻止用户在封禁期间编辑自己的讨论页",
        "blocklist-rangeblocks": "隐藏IP段封禁",
        "blocklist-timestamp": "时间",
        "blocklist-target": "目标",
-       "blocklist-expiry": "到期",
+       "blocklist-expiry": "终止时间",
        "blocklist-by": "封禁管理员",
        "blocklist-params": "封禁范围",
        "blocklist-reason": "原因",
        "ipblocklist-localblock": "本地封禁",
        "ipblocklist-otherblocks": "其他{{PLURAL:$1|封禁}}",
        "infiniteblock": "无限期",
-       "expiringblock": "$1 $2到期",
+       "expiringblock": "终止于$1 $2",
        "anononlyblock": "仅匿名用户",
        "noautoblockblock": "自动封禁停用",
        "createaccountblock": "账户创建停用",
        "export-addnstext": "从名字空间添加页面:",
        "export-addns": "添加",
        "export-download": "另存为文件",
-       "export-templates": "包模板",
+       "export-templates": "包模板",
        "export-pagelinks": "包含链接页面的搜索深度:",
        "allmessages": "系统消息",
        "allmessagesname": "名称",
        "importinterwiki": "跨wiki导入",
        "import-interwiki-text": "选择要导入的wiki和页面标题,导入修订的日期和编辑者名称会被保存。所有的跨wiki导入操作都将记录到[[Special:Log/import|导入日志]]。",
        "import-interwiki-source": "来源wiki/页面:",
-       "import-interwiki-history": "复制此页的所有历史修订版本",
+       "import-interwiki-history": "复制此页的所有历史版本",
        "import-interwiki-templates": "包含所有模板",
        "import-interwiki-submit": "导入",
        "import-interwiki-namespace": "目标名字空间:",
        "importuploaderrortemp": "上传导入文件失败。临时文件夹已遗失。",
        "import-parse-failure": "XML导入语法失败",
        "import-noarticle": "没有页面作导入!",
-       "import-nonewrevisions": "没有导入修订(所有都已存在或因错误跳过)。",
+       "import-nonewrevisions": "没有导入版本(所有都已存在或因错误跳过)。",
        "xml-error-string": "$1于行$2,列$3($4字节):$5",
        "import-upload": "上传XML数据",
        "import-token-mismatch": "会话数据遗失。请重试。",
        "tooltip-pt-watchlist": "你正在监视更改的页面的列表",
        "tooltip-pt-mycontris": "你的贡献的列表",
        "tooltip-pt-login": "我们鼓励您登录,不过这不是强制的",
-       "tooltip-pt-logout": "退出",
+       "tooltip-pt-logout": "退出登录",
        "tooltip-ca-talk": "关于内容页面的讨论",
        "tooltip-ca-edit": "你可以编辑本页面。请在保存前使用预览按钮",
        "tooltip-ca-addsection": "开始新段落",
        "tooltip-t-upload": "上传文件",
        "tooltip-t-specialpages": "所有特殊页面的列表",
        "tooltip-t-print": "本页面的可打印版本",
-       "tooltip-t-permalink": "本页面该版本的永久链接",
+       "tooltip-t-permalink": "本页面该版本的固定链接",
        "tooltip-ca-nstab-main": "查看内容页面",
        "tooltip-ca-nstab-user": "查看用户页面",
        "tooltip-ca-nstab-media": "查看媒体文件页面",
        "tooltip-summary": "请输入简短的摘要",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* 放置于这里的CSS将应用于所有皮肤 */",
-       "cologneblue.css": "/* 放置于这里的CSS将影响使用科隆香水蓝皮肤的用户 */",
        "monobook.css": "/* 放置于这里的CSS将影响使用MonoBook皮肤的用户 */",
-       "modern.css": "/* 放置于这里的CSS将影响使用现代皮肤的用户 */",
        "vector.css": "/* 放置于这里的CSS将影响使用Vector皮肤的用户 */",
        "print.css": "/* 放置于这里的CSS将影响打印输出 */",
        "noscript.css": "/* 放置于这里的CSS将影响停用JavaScript的用户 */",
        "group-sysop.css": "/* 放置于这里的CSS将只影响管理员 */",
        "group-bureaucrat.css": "/* 放置于这里的CSS将只影响机行政员 */",
        "common.js": "/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */",
-       "cologneblue.js": "/* 这里的任何JavaScript将为使用科隆香水蓝皮肤的用户加载 */",
        "monobook.js": "/* 这里的任何JavaScript将为使用MonoBook皮肤的用户加载 */",
-       "modern.js": "/* 这里的任何JavaScript将为使用现代皮肤的用户加载 */",
        "vector.js": "/* 这里的任何JavaScript将为使用Vector皮肤的用户加载 */",
        "group-autoconfirmed.js": "/* 这里的任何JavaScript将只为自动确认用户加载 */",
        "group-bot.js": "/* 这里的任何JavaScript将只为机器人加载 */",
        "creditspage": "页面编辑名单",
        "nocredits": "本页面没有编辑名单信息。",
        "spamprotectiontitle": "垃圾链接过滤器",
-       "spamprotectiontext": "您要保存的文本被垃圾过滤器阻止。\n这可能是由于一个链往匹配黑名单的外部站点的链接引起的。",
+       "spamprotectiontext": "您要保存的文字被垃圾信息过滤器拦截。这可能是由黑名单内外部网站链接引发的。",
        "spamprotectionmatch": "以下文本触发了我们的垃圾链接过滤器:$1",
        "spambot_username": "MediaWiki垃圾链接清理器",
        "spam_reverting": "恢复至不包含$1的链接的最后版本",
-       "spam_blanking": "消隐所有包含链接至$1的修订",
+       "spam_blanking": "消隐所有包含链接至$1的版本",
        "spam_deleting": "正在删除所有包含至$1的版本",
        "simpleantispam-label": "反垃圾检查。\n'''不要'''加入这个!",
        "pageinfo-title": "“$1”的信息",
        "pageinfo-category-pages": "页面数",
        "pageinfo-category-subcats": "子分类数",
        "pageinfo-category-files": "文件数",
-       "skinname-cologneblue": "科隆香水蓝",
-       "skinname-modern": "现代",
        "markaspatrolleddiff": "标记为已巡查",
        "markaspatrolledtext": "标记此页面为已巡查",
        "markedaspatrolled": "标记为已检查",
        "exif-meteringmode-2": "中心加权平均测量",
        "exif-meteringmode-3": "点测",
        "exif-meteringmode-4": "多点测",
-       "exif-meteringmode-5": "模式测量",
+       "exif-meteringmode-5": "模式",
        "exif-meteringmode-6": "局部测量",
        "exif-meteringmode-255": "其他",
        "exif-lightsource-0": "未知",
        "confirmemail_sent": "确认邮件已发送。",
        "confirmemail_oncreate": "一个确认代码已被发送到您的邮箱。登录时无需使用该代码,但若要启用在此wiki上的电子邮件相关功能,则必须先提交此代码。",
        "confirmemail_sendfailed": "{{SITENAME}}不能发送确认邮件,请检查您的邮箱地址是否包含无效字符。\n\n邮件发送器的返回信息:$1",
-       "confirmemail_invalid": "无效的确认码,该代码可能已经过期。",
+       "confirmemail_invalid": "无效的确认码。该确认码可能已经到期。",
        "confirmemail_needlogin": "请$1以确认您的电子邮件地址。",
        "confirmemail_success": "您的邮箱已经被确认。您现在可以[[Special:UserLogin|登录]]并使用此网站了。",
        "confirmemail_loggedin": "你的电子邮件地址现在已经确认。",
        "imgmultipageprev": "← 上一页",
        "imgmultipagenext": "下一页 →",
        "imgmultigo": "提交!",
-       "imgmultigoto": "å\88°第$1页",
+       "imgmultigoto": "å\89\8då¾\80第$1页",
        "img-lang-default": "(默认语言)",
-       "img-lang-info": "在$1找到此图像。$2",
-       "img-lang-go": "",
+       "img-lang-info": "以$1生成本图像。$2",
+       "img-lang-go": "提交",
        "ascending_abbrev": "升",
        "descending_abbrev": "降",
        "table_pager_next": "下一页",
        "version-ext-colheader-credits": "作者",
        "version-license-title": "$1的许可协议",
        "version-license-not-found": "没有找到与此拓展相关的授权信息。",
-       "version-credits-title": "用于$1的信用",
+       "version-credits-title": "$1贡献者名单",
        "version-credits-not-found": "没有找到与此拓展相关的信用信息。",
        "version-poweredby-credits": "本Wiki由'''[https://www.mediawiki.org/ MediaWiki]'''驱动,版权所有 © 2001-$1 $2。",
        "version-poweredby-others": "其他",
index 108e214..a92aee2 100644 (file)
                        "Yuyu",
                        "乌拉跨氪",
                        "아라",
-                       "Vincent Liu"
+                       "Vincent Liu",
+                       "Mywood"
                ]
        },
        "tog-underline": "連結底線:",
        "tog-hideminor": "隱藏最近變更中的小修訂",
        "tog-hidepatrolled": "隱藏最近更改中巡查過的編輯",
        "tog-newpageshidepatrolled": "隱藏新頁面清單中巡查過的頁面",
-       "tog-extendwatchlist": "展開監視列表以顯示所有變更,不只是最近的",
-       "tog-usenewrc": "依頁面分類最近變更和監視列表中的修改",
+       "tog-extendwatchlist": "展開監視清單顯示包含最近以外的所有變更",
+       "tog-usenewrc": "依最近變更與監視清單頁面分類顯示變更",
        "tog-numberheadings": "標題自動編號",
        "tog-showtoolbar": "顯示編輯工具列",
        "tog-editondblclick": "啟用滑鼠雙擊編輯頁面",
        "tog-editsectiononrightclick": "啟用滑鼠右鍵點選章節標題編輯",
-       "tog-watchcreations": "將我建立的頁面和上傳的檔案加入監視列表",
-       "tog-watchdefault": "將我更改的頁面和檔案加入監視列表",
-       "tog-watchmoves": "將我移動的頁面和檔案加入監視列表",
-       "tog-watchdeletion": "將我刪除的頁面和檔案加入監視列表",
+       "tog-watchcreations": "將我建立的頁面和上傳的檔案加入監視清單",
+       "tog-watchdefault": "將我編輯的頁面和檔案新增至監視清單",
+       "tog-watchmoves": "將我移動的頁面和檔案加入監視清單",
+       "tog-watchdeletion": "將我刪除的頁面和檔案新增至監視清單",
        "tog-minordefault": "預設標記所有的編輯為小修訂",
        "tog-previewontop": "顯示預覽於編輯框上方",
        "tog-previewonfirst": "第一次編輯時顯示預覽",
-       "tog-enotifwatchlistpages": "當我的監視列表中的頁面或檔案有變更時,發送電子郵件通知我",
+       "tog-enotifwatchlistpages": "當我的監視清單中的頁面或檔案有變更時,發送電子郵件通知我",
        "tog-enotifusertalkpages": "當我的對話頁面有變更時,發送電子郵件通知我",
        "tog-enotifminoredits": "當頁面與檔案有小修訂時,發送電子郵件通知我",
        "tog-enotifrevealaddr": "在通知信件中顯示我的電子郵件位址",
        "tog-fancysig": "將簽名視為 Wikitext 語言 (不自動產生連結)",
        "tog-uselivepreview": "使用即時預覽 (測試中)",
        "tog-forceeditsummary": "未填寫編輯摘要時提示我",
-       "tog-watchlisthideown": "隱藏監視列表中我的編輯",
-       "tog-watchlisthidebots": "隱藏監視列表中機器人的編輯",
-       "tog-watchlisthideminor": "隱藏監視列表中的小修訂",
-       "tog-watchlisthideliu": "隱藏監視列表中已登入使用者的編輯",
-       "tog-watchlisthideanons": "隱藏監視列表中匿名使用者的編輯",
-       "tog-watchlisthidepatrolled": "隱藏監視列表中已巡查的編輯",
+       "tog-watchlisthideown": "隱藏監視清單中我自己的編輯",
+       "tog-watchlisthidebots": "隱藏監視清單中機器人的編輯",
+       "tog-watchlisthideminor": "隱藏監視清單中的小修訂",
+       "tog-watchlisthideliu": "隱藏監視清單中已登入使用者的編輯",
+       "tog-watchlisthideanons": "隱藏監視清單中匿名使用者的編輯",
+       "tog-watchlisthidepatrolled": "隱藏監視清單中已巡查的編輯",
        "tog-ccmeonemails": "發送郵件給他人時,也送一份副本到我的電子郵件信箱",
        "tog-diffonly": "比對版本差異時下面不顯示頁面內容",
        "tog-showhiddencats": "顯示隱藏分類",
        "category-empty": "<em>此分類目前未包含頁面或媒體。</em>",
        "hidden-categories": "{{PLURAL:$1|隱藏分類}}",
        "hidden-category-category": "隱藏分類",
-       "category-subcat-count": "{{PLURAL:$2|此分類僅有以下 1 個子分類。|此分類有以下 $1 個字分類,共 $2 個。}}",
-       "category-subcat-count-limited": "此分類以下 $1 個子分類。",
-       "category-article-count": "{{PLURAL:$2|此分類有以下一個頁面。|此分類有 $2 個頁面,以下列出了 $1 個。}}",
-       "category-article-count-limited": "此分類以下 $1 個頁面。",
-       "category-file-count": "{{PLURAL:$2|此分類有以下一個檔案。|此分類有 $2 個檔案,以下列出了 $1 個。}}",
-       "category-file-count-limited": "此分類 $1 個檔案。",
+       "category-subcat-count": "{{PLURAL:$2|此分類僅包含以下 1 個子分類。|此分類包含以下 $1 個子分類,共 $2 個。}}",
+       "category-subcat-count-limited": "此分類包含以下 $1 個子分類。",
+       "category-article-count": "{{PLURAL:$2|此分類包含以下一個頁面。|此分類包含以下 $1 個頁面,共 $2 個。}}",
+       "category-article-count-limited": "此分類包含以下 $1 個頁面。",
+       "category-file-count": "{{PLURAL:$2|此分類僅包含以下一個檔案。|此分類包含以下 $1 個檔案,共 $2 個。}}",
+       "category-file-count-limited": "此分類包含 $1 個檔案。",
        "listingcontinuesabbrev": "續",
        "index-category": "已列索引的頁面",
        "noindex-category": "未列索引的頁面",
        "newwindow": "(以新視窗開啟)",
        "cancel": "取消",
        "moredotdotdot": "更多...",
-       "morenotlisted": "此列表不完整。",
+       "morenotlisted": "此清單尚未讀取完畢。",
        "mypage": "頁面",
        "mytalk": "對話",
        "anontalk": "此 IP 位址的對話頁面",
        "navigation": "導覽",
-       "and": "",
+       "and": "&#32;及&#32;",
        "qbfind": "尋找",
        "qbbrowse": "瀏覽",
        "qbedit": "編輯",
        "vector-view-view": "閱讀",
        "vector-view-viewsource": "檢視原始碼",
        "actions": "動作",
+       "vector-more-actions": "更多",
        "namespaces": "命名空間",
        "variants": "變體",
        "navigation-heading": "導覽選單",
        "help": "說明",
        "search": "搜尋",
        "searchbutton": "搜尋",
-       "go": "進入",
-       "searcharticle": "進入",
+       "go": "前往",
+       "searcharticle": "執行",
        "history": "頁面歷史",
        "history_short": "歷史",
        "updatedmarker": "自我最後一次訪問以後的更新",
        "printableversion": "可列印版",
-       "permalink": "永久連結",
+       "permalink": "固定連結",
        "print": "列印",
        "view": "檢視",
        "view-foreign": "用 $1 檢視",
        "unprotect": "變更保護",
        "unprotectthispage": "變更此頁的保護",
        "newpage": "新頁面",
-       "talkpage": "討論此頁",
+       "talkpage": "討論此頁",
        "talkpagelinktext": "對話",
        "specialpage": "特殊頁面",
        "personaltools": "個人工具",
        "userpage": "檢視使用者頁面",
        "projectpage": "檢視專案頁面",
        "imagepage": "檢視檔案頁面",
-       "mediawikipage": "檢視使用者介面訊息",
+       "mediawikipage": "檢視訊息頁面",
        "templatepage": "檢視樣版頁面",
        "viewhelppage": "檢視說明頁面",
        "categorypage": "檢視分類頁面",
        "viewtalkpage": "檢視討論頁面",
        "otherlanguages": "其他語言",
        "redirectedfrom": "(重定向自$1)",
-       "redirectpagesub": "重新導向頁面",
+       "redirectpagesub": "重向頁面",
        "lastmodifiedat": "此頁面最後修訂於 $1 $2。",
        "viewcount": "此頁面已被檢視過 $1 次。",
        "protectedpage": "受保護頁面",
        "copyright": "除非額外說明,否則本站內容均使用 $1 授權條款。",
        "copyrightpage": "{{ns:project}}:Copyrights",
        "currentevents": "新聞動態",
-       "currentevents-url": "Project:Current events",
+       "currentevents-url": "Project:新聞動態",
        "disclaimers": "免責聲明",
        "disclaimerpage": "Project:General disclaimer",
        "edithelp": "編輯説明",
        "mainpage": "首頁",
        "mainpage-description": "首頁",
-       "policy-url": "Project:Policy",
+       "policy-url": "Project:方針",
        "portal": "社群主頁",
-       "portal-url": "Project:Community portal",
+       "portal-url": "Project:社區專頁",
        "privacy": "隱私政策",
        "privacypage": "Project:Privacy policy",
        "badaccess": "權限錯誤",
        "toc": "目錄",
        "showtoc": "顯示",
        "hidetoc": "隱藏",
-       "collapsible-collapse": "摺疊",
+       "collapsible-collapse": "合併",
        "collapsible-expand": "展開",
        "thisisdeleted": "檢視或還原 $1 ?",
        "viewdeleted": "檢視 $1?",
        "feed-unavailable": "目前未提供 RSS 或 Atom",
        "site-rss-feed": "$1 的 RSS feed",
        "site-atom-feed": "$1 的 Atom feed",
-       "page-rss-feed": "訂閱 \"$1\" 的 RSS feed",
-       "page-atom-feed": "訂閱 \"$1\" 的 Atom feed",
+       "page-rss-feed": "訂閱 \"$1\" 的 RSS feed",
+       "page-atom-feed": "訂閱 \"$1\" 的 Atom feed",
        "red-link-title": "$1 (頁面不存在)",
        "sort-descending": "降冪排序",
        "sort-ascending": "昇冪排序",
        "nstab-project": "專案頁面",
        "nstab-image": "檔案",
        "nstab-mediawiki": "訊息",
-       "nstab-template": "樣ç\89\88",
+       "nstab-template": "模æ\9d¿",
        "nstab-help": "說明頁面",
        "nstab-category": "分類",
        "nosuchaction": "無此動作",
        "enterlockreason": "請輸入鎖定的原因,包括估計重新開放的時間",
        "readonlytext": "資料庫目前已鎖定無法新增或修改資料,\n可能正在進行例行的資料庫維修作業,完成之後即可恢復正常。\n\n鎖定資料庫的管理員說明:$1",
        "missing-article": "資料庫查無預期的頁面文字,頁面 \"$1\" $2。\n\n通常是因您連結到了已過期(已被刪除)的差異或歷史頁面。\n\n若這不是您所遇到的情況,您可能找到了一個系統的問題。\n請記錄 URL 位址,並向 [[Special:ListUsers/sysop|管理員]] 報告此問題。",
-       "missingarticle-rev": "(修訂#$1)",
+       "missingarticle-rev": "(修訂#$1)",
        "missingarticle-diff": "(差異:$1, $2)",
        "readonly_lag": "資料庫已自動鎖定,正在等候次要資料庫同步資料到主要資料庫",
        "internalerror": "內部錯誤",
        "filedeleteerror": "無法刪除檔案 \"$1\"。",
        "directorycreateerror": "無法建立目錄 \"$1\"。",
        "filenotfound": "找不到檔案 \"$1\"。",
-       "unexpected": "未預期的資料:\"$1\"=\"$2\"。",
-       "formerror": "錯誤:無法送表單。",
+       "unexpected": "預期之外的資料:\"$1\"=\"$2\"。",
+       "formerror": "錯誤:無法送表單。",
        "badarticleerror": "無法在此頁進行該操作。",
        "cannotdelete": "無法刪除頁面或檔案 \"$1\"。\n它可能已經被其他人刪除。",
        "cannotdelete-title": "無法刪除頁面 \"$1\"",
        "viewsource": "檢視原始碼",
        "viewsource-title": "檢視 $1 的原始碼",
        "actionthrottled": "已限制動作",
-       "actionthrottledtext": "您在短時間內執行此動作太多次,已超出系統上限,基於反垃圾訊息的考量,將限制您的動作。\n請稍後數分鐘後再試。",
+       "actionthrottledtext": "您在短時間內執行此動作太多次,已超出系統上限,基於反濫用的考量,將限制您的動作。\n請稍後數分鐘後再試。",
        "protectedpagetext": "此頁面已設為保護防止編輯或其他操作。",
        "viewsourcetext": "您可以檢視並複製此頁面的原始碼。",
        "viewyourtext": "您可以檢視並複製此頁面中<strong>您編輯</strong>的原始碼:",
-       "protectedinterface": "本頁用來提供此 Wiki 軟體介面上的文字,並且已被保護以防止惡意修改。\n如欲增加或修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net] 上的MediaWiki 本地化專案。",
-       "editinginterface": "<strong>警告:</strong>您正在編輯的頁面是用來提供軟體介面上的文字。\n更改此頁將影響其他在此 Wiki 上的使用者介面外觀。\n如欲修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net]上的MediaWiki 本地化專案。",
+       "protectedinterface": "本頁用來提供此 Wiki 軟體介面上的文字,並且已被設為保護以防止惡意修改。\n如欲增加或修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net] 上的 MediaWiki 在地化專案。",
+       "editinginterface": "<strong>警告:</strong>您正在編輯的頁面是用來提供軟體介面上的文字。\n更改此頁將影響其他在此 Wiki 上的使用者介面外觀。\n如欲修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net]上的 MediaWiki 在地化專案。",
        "cascadeprotected": "此頁面被保護無法編輯,因為此頁面被以下開啟 \"連鎖保護\" 選項的{{PLURAL:$1|一頁|數頁}}保護頁面引用:\n$2",
        "namespaceprotected": "您沒有權限編輯 <strong>$1</strong> 命名空間的頁面。",
        "customcssprotected": "您並沒有權限編輯此 CSS 頁面,因為此頁面包含了其他使用者的個人設定。",
        "virus-scanfailed": "掃瞄失敗 (代碼 $1)",
        "virus-unknownscanner": "不明的防毒程式:",
        "logouttext": "<strong>您現在已登出。</strong>\n\n請注意,某些頁面會以登入的狀態持續顯示,直到您清除瀏覽器快取為止。",
-       "welcomeuser": "歡迎,$1!",
-       "welcomecreation-msg": "您的帳號已建立。\n不要忘記變更您的 {{SITENAME}} [[Special:Preferences|偏好設定]]。",
+       "welcomeuser": "歡迎光臨,$1!",
+       "welcomecreation-msg": "您的帳號已建立。\n可至 [[Special:Preferences|偏好設定]] 更新您在 {{SITENAME}} 的個人化設定。",
        "yourname": "使用者名稱:",
        "userlogin-yourname": "使用者名稱",
        "userlogin-yourname-ph": "輸入您的使用者名稱",
-       "createacct-another-username-ph": "輸入帳號名稱",
+       "createacct-another-username-ph": "輸入使用者名稱",
        "yourpassword": "您的密碼:",
        "userlogin-yourpassword": "密碼",
        "userlogin-yourpassword-ph": "輸入您的密碼",
        "yourpasswordagain": "再次輸入密碼:",
        "createacct-yourpasswordagain": "確認密碼",
        "createacct-yourpasswordagain-ph": "再次輸入密碼",
-       "remembermypassword": "在瀏覽器上記住我的登入資訊 (最多 $1 {{PLURAL:$1|天}})",
+       "remembermypassword": "在瀏覽器上記住我的登入資訊 (上限 $1 {{PLURAL:$1|天}})",
        "userlogin-remembermypassword": "記住我的登入狀態",
        "userlogin-signwithsecure": "使用安全連線",
        "yourdomainname": "您的網域:",
        "createacct-imgcaptcha-ph": "輸入您在上方看到的文字",
        "createacct-submit": "建立您的帳號",
        "createacct-another-submit": "建立另一帳號",
-       "createacct-benefit-heading": "{{SITENAME}} 是由像您一樣的人建立。",
+       "createacct-benefit-heading": "{{SITENAME}} 是由像您一樣貢獻的人所建立的。",
        "createacct-benefit-body1": " {{PLURAL:$1|次編輯}}",
        "createacct-benefit-body2": " $1 頁",
        "createacct-benefit-body3": " 位最近的{{PLURAL:$1|貢獻者}}",
        "passwordremindertitle": "{{SITENAME}} 的新臨時密碼",
        "passwordremindertext": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼。\n給使用者 \"$2\" 的臨時密碼設為 \"$3\"。\n如果這個動作是您做的,您需要立即登入並設定一個新的密碼,\n您的臨時密碼將於{{PLURAL:$5|一|$5}}天內過期。\n\n如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
        "noemail": "使用者 \"$1\" 未登記電子郵件地址。",
-       "noemailcreate": "您需要提供一個有效的電子郵件地址",
+       "noemailcreate": "您需要提供一個有效的電子郵件地址",
        "passwordsent": "使用者 \"$1\" 的新密碼已寄出至當出登記的電子郵件地址,\n請稍後收到信件後再登入。",
        "blocked-mailpassword": "您的 IP 位址已被封鎖不允許編輯,密碼復原的功能也同樣被禁止使用以防止被濫用。",
        "eauthentsent": "以發送一封確認信到您所設定的電子郵件地址。\n在未收到其它電子郵件前,您必須先依照信件中的指示,確認這個帳號確實是您本人。",
        "createacct-another-realname-tip": "真實姓名為選填欄位。\n若您提供真實姓名,它會用於使用者貢獻署名。",
        "pt-login": "登入",
        "pt-login-button": "登入",
-       "pt-createaccount": "建立帳",
+       "pt-createaccount": "建立帳",
        "pt-userlogout": "登出",
        "php-mail-error-unknown": "PHP 的 mail() 函數發生不明錯誤。",
        "user-mail-no-addy": "試圖發送沒有電子郵件地址的電子郵件。",
        "resetpass_header": "變更帳號密碼",
        "oldpassword": "舊密碼:",
        "newpassword": "新密碼:",
-       "retypenew": "確認密碼:",
+       "retypenew": "重新輸入新密碼:",
        "resetpass_submit": "設定密碼並登入",
        "changepassword-success": "您的密碼已變更成功!",
        "changepassword-throttled": "您最近嘗試了太多次登入。\n請等待 $1 後再試。",
        "passwordreset-capture-help": "若您勾選此核選方塊,電子郵件 (包含臨時密碼) 將直接顯示,並發送給使用者。",
        "passwordreset-email": "電子郵件位址:",
        "passwordreset-emailtitle": "於 {{SITENAME}} 的帳號詳細資訊",
-       "passwordreset-emailtext-ip": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}}($4)的密碼,下列是與此電子郵件地址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
-       "passwordreset-emailtext-user": "使用者 $1 要求重設在 {{SITENAME}}($4)的密碼,下列是與此電子郵件地址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
+       "passwordreset-emailtext-ip": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件地址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
+       "passwordreset-emailtext-user": "使用者 $1 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件地址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
        "passwordreset-emailelement": "使用者名稱:$1\n臨時密碼:$2",
        "passwordreset-emailsent": "已發送重設密碼的電子郵件。",
        "passwordreset-emailsent-capture": "已發送重設密碼的電子郵件,並在下面顯示。",
        "changeemail-cancel": "取消",
        "changeemail-throttled": "您最近嘗試了太多次登入。\n請等待 $1 後再試。",
        "resettokens": "重設密鑰",
-       "resettokens-text": "你可以在這裡重設與您的帳戶私隱有關連的密鑰。\n\n如果您意外地與任何一個人分享這些密鑰,或者您的帳戶被入侵、受到破壞,您應該重設密鑰。",
+       "resettokens-text": "您可以在此重設用來存取您帳號相關隱私資料的密鑰。\n\n若您不小心將您的密鑰分享給其他人或您的帳號已遭到入侵、破壞,應該要重設此密鑰。",
        "resettokens-no-tokens": "沒有可重設的密鑰。",
-       "resettokens-legend": "重設密鑰",
+       "resettokens-legend": "重設密鑰",
        "resettokens-tokens": "密鑰:",
        "resettokens-token-label": "$1 (目前為 $2)",
-       "resettokens-watchlist-token": "用於訂閱 [[Special:Watchlist|監視列表]] 的 Atom/RSS 的密鑰",
+       "resettokens-watchlist-token": "用來訂閱 [[Special:Watchlist|監視清單]] Atom/RSS 的密鑰",
        "resettokens-done": "已重設密鑰。",
        "resettokens-resetbutton": "重設已選擇的密鑰",
        "bold_sample": "粗體文字",
        "link_tip": "內部連結",
        "extlink_sample": "http://www.example.com 連結標題",
        "extlink_tip": "外部連結 (記得以 http:// 開頭)",
-       "headline_sample": "1 級標題文字",
-       "headline_tip": "2 級標題文字",
+       "headline_sample": "第 1 層標題文字",
+       "headline_tip": "第 2 層標題文字",
        "nowiki_sample": "插入非格式化文字",
        "nowiki_tip": "忽略 Wiki 格式化語法",
        "image_tip": "附加檔案",
        "media_tip": "檔案連結",
        "sig_tip": "您的簽名與日期時間",
-       "hr_tip": "水平線 (用)",
+       "hr_tip": "水平線 (用)",
        "summary": "摘要:",
        "subject": "主題/標題:",
        "minoredit": "這是一個小修訂",
        "savearticle": "儲存頁面",
        "preview": "預覽",
        "showpreview": "顯示預覽",
-       "showdiff": "顯示差異",
+       "showdiff": "顯示變更",
        "anoneditwarning": "<strong>警告:</strong>您尚未登入。\n您的 IP 位址將記錄在此頁的編輯歷史中。",
        "anonpreviewwarning": "<em>您尚未登入。儲存頁面會將您的 IP 位址記錄在此頁面的編輯歷史中。</em>",
        "missingsummary": "<strong>提醒:</strong>您未填寫編輯摘要。\n若您再點選 \"{{int:savearticle}}\" 一次,將略過摘要直接儲存您的編輯。",
        "missingcommenttext": "請在下方輸入評論。",
        "missingcommentheader": "<strong>提醒:</strong>您未填寫此評論的主旨/標題。\n若您再點選 \"{{int:savearticle}}\" 一次,將略過主旨/標題直接儲存您的評論。",
-       "summary-preview": "摘要預覽:",
+       "summary-preview": "摘要預覽",
        "subject-preview": "主旨/標題預覽:",
        "blockedtitle": "使用者已被封鎖",
        "blockedtext": "<strong>您的使用者名稱或 IP 位址以被封鎖。</strong>\n\n您被 $1 封鎖,\n原因爲 <em>$2</em>。\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯繫 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件地址,且尚未被封鎖郵件功能,則您可透過 \"發送電子郵件給這位使用者\" 的功能來聯絡相關管理員。\n您目刖的 IP 位址是 $3,此次封鎖的 ID 爲 #$5。\n請您在詢問時附註以上詳細訊息。",
        "accmailtitle": "密碼已寄出",
        "accmailtext": "[[User talk:$1|$1]] 的隨機密碼已經寄送至 $2,可登入後至 <em>[[Special:ChangePassword|變更密碼]] 頁面更改</em>。",
        "newarticle": "(新)",
-       "newarticletext": "您正連結至一頁不存在頁面。\n要建立該頁面,請在下方的編輯框中輸入內容(詳情請參考 [$1 説明頁面])。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
+       "newarticletext": "您正連結至一頁不存在頁面。\n要建立該頁面,請在下方的編輯框中輸入內容 (詳情請參考 [$1 説明頁面])。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
        "anontalkpagetext": "----\n<em>此討論頁面是給尚未建立帳號的匿名使用者使用</em>\n因此我們必須使用 IP 位址來辨識身份,但相同的 IP 位置可能由許多不同的使用者所共用。\n如果您是匿名使用者並且覺得評論的內容與您無關,請 [[Special:UserLogin/signup|建立新帳號]] 或 [[Special:UserLogin|登入]] 避免與其他匿名使用者混淆。",
        "noarticletext": "此頁面目前沒有內容,\n您可以在其它頁面中 [[Special:Search/{{PAGENAME}}|搜尋此頁面標題]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌],\n或 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯此頁]</span>。",
        "noarticletext-nopermission": "此頁面目前沒有內容,\n您可以在其它頁面中 [[Special:Search/{{PAGENAME}}|搜尋此頁面標題]],或 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]</span>,但您沒有權限建立此頁面。",
        "note": "</strong>注意:</strong>",
        "previewnote": "<strong>您目前正在預覽,您的變更還尚未儲存!</strong>",
        "continue-editing": "前往編輯框",
-       "previewconflict": "這個預覽顯示了上面文字編輯區中的內容。它將在{{GENDER:|你|妳|你}}選擇保存後出現。",
-       "session_fail_preview": "'''很抱歉!由於部份資料遺失,我們無法處理您的編輯。'''\n請再試一次。\n如果仍然失敗,請[[Special:UserLogout|登出]]後重新登入。",
-       "session_fail_preview_html": "'''抱歉!部份資料已遺失,我們無法處理您的編輯。'''\n\n''由於{{SITENAME}}已經開放原始 HTML 碼,預覽已經隱藏以預防 JavaScript 的攻擊。''\n\n'''如果這個編輯過程沒有問題,請再試一次。如果仍然有問題,請[[Special:UserLogout|登出]]後再重新登入一次。'''",
-       "token_suffix_mismatch": "<strong>由於您使用的客戶端軟體損壞了編輯標記中的符號,您的編輯已被拒絕接受。</strong>\n為了避免破壞頁面文字,已拒絕此編輯,\n這通常是因為您使用了有問題的網頁匿名代理伺服器。",
-       "edit_form_incomplete": "編輯表單的某些部分沒有到達伺服器 ;請檢查您的編輯內容是否完整並再試一次。",
+       "previewconflict": "此預覽顯示了您於上方文字編輯框中的內容儲存之後將會顯示的結果。",
+       "session_fail_preview": "<strong>很抱歉!由於連線階段的資料遺失,我們無法處理您的編輯動作。</strong>\n請再試一次。\n如果仍然失敗,請 [[Special:UserLogout|登出]] 後重新登入。",
+       "session_fail_preview_html": "<strong>很抱歉!由於連線階段的資料遺失,我們無法處理您的編輯動作。</strong>\n\n<em>由於 {{SITENAME}} 開啟了原始 HTML 模式,將不會顯示預覽畫面以避免 JavaScript 攻擊。</em>\n\n<strong>若這是符合規範的編輯動作,請再試一次。</strong>\n如果仍然有問題,請 [[Special:UserLogout|登出]] 後再重新登入一次。",
+       "token_suffix_mismatch": "<strong>您使用的瀏覽器刪除了編輯資訊中的特殊符號,已拒絕此編輯動作。</strong>\n為了避免破壞頁面內容,已拒絕此編輯動作,\n這通常是因為您使用了有問題的匿名網頁代理伺服器。",
+       "edit_form_incomplete": "<strong>部份編輯的內容未傳送至伺服器,請檢查您的編輯內容是否完整並再試一次。</strong>",
        "editing": "正在編輯 $1",
        "creating": "正在建立 $1",
        "editingsection": "正在編輯 $1 (章節)",
        "editingcomment": "正在編輯 $1 (新章節)",
        "editconflict": "編輯衝突:$1",
-       "explainconflict": "有人在{{GENDER:|你|妳|你}}開始編輯後更改了頁面。\n上面的文字框內顯示的是目前本頁的內容。\n{{GENDER:|你|妳|你}}所做的修改顯示在下面的文字框中。\n{{GENDER:|你|妳|你}}應當將{{GENDER:|你|妳|你}}所做的修改加入現有的內容中。\n'''只有'''在上面文字框中的內容會在{{GENDER:|你|妳|你}}點擊「{{int:savearticle}}」後被保存。",
+       "explainconflict": "在您開始編輯之後已有其他人儲存了此頁面。\n上方的文字框內顯示了目前頁面中的文字內容,\n您所變更的文字內容顯示在下方文字框中。\n您須要將您所變更的文字內容合併到已儲存的文字內容當中。\n若您直接點選 \"{{int:savearticle}}\" <strong>只有</strong> 上方文字框中的內容會被儲存。",
        "yourtext": "您的文字",
-       "storedversion": "已儲存修訂版本",
-       "nonunicodebrowser": "'''警告: 您的瀏覽器不兼容Unicode編碼。'''這裡有一個工作區將使您能安全地編輯頁面: 非ASCII字元將以十六進製編碼模式出現在編輯框中。",
-       "editingold": "'''警告:{{GENDER:|你|妳|你}}正在編輯的是本頁的舊版本。'''\n如果{{GENDER:|你|妳|你}}保存它的話,在本版本之後的任何修改都會遺失。",
+       "storedversion": "已儲存修訂",
+       "nonunicodebrowser": "<strong>警告:您的瀏覽器不相容 Unicode。</strong>\n暫時解決的方式是先在您可安全編輯頁面的地方編輯:非 ASCII 字元在編輯框中會以 16 進位編碼顯示。",
+       "editingold": "<strong>警告:您目前正編輯頁面的舊修訂版本。</strong>\n若您儲存,在此修訂之後變更的任何內容將會遺失。",
        "yourdiff": "差異",
-       "copyrightwarning": "請注意您對{{SITENAME}}的所有貢獻都被認為是在$2下發佈,請檢視在$1的細節。\n如果您不希望您的文字被任意修改和再散佈,請不要提交。<br />\n您同時也要向我們保證您所提交的內容是您自己所作,或得自一個不受版權保護或相似自由的來源。\n'''不要在未獲授權的情況下發表!'''<br />",
-       "copyrightwarning2": "請注意您對{{SITENAME}}的所有貢獻\n都可能被其他貢獻者編輯,修改或刪除。\n如果您不希望您的文字被任意修改和再散佈,請不要提交。<br />\n您同時也要向我們保證您所提交的內容是您自己所作,或得自一個不受版權保護或相似自由的來源(參閱$1的細節)。\n'''不要在未獲授權的情況下發表!'''",
-       "longpageerror": "'''錯誤:您所提交的文本長度有{{PLURAL:$1|1|$1}}KB,這大於{{PLURAL:$2|1|$2}}KB的最大值。 '''\n因此,該文本無法保存。",
-       "readonlywarning": "'''警告: 資料庫被鎖定以進行維護,所以您目前將無法保存您的修改。'''\n您可先複製您的文字並保存到文字檔案,然後等一會兒再修改。\n\n鎖定資料庫的管理員有如下解釋:$1",
+       "copyrightwarning": "請注意,所有於 {{SITENAME}} 所做的貢獻會依據 $2 授權條款發佈 (詳情請見 $1)。\n若您不希望您的著作被任意修改與散佈,請勿在此發表文章。<br />\n您同時向我們保証在此的著作內容是您自行撰寫,或是取自不受版權保護的公開領域或自由資源。\n<strong>請勿在未經授權的情況下發表文章!</strong>",
+       "copyrightwarning2": "請注意,所有於 {{SITENAME}} 所做的貢獻可能會被其他貢獻者編輯,修改或刪除。\n若您不希望您的著作被任意修改與散佈,請勿在此發表文章。<br />\n您同時向我們保証在此的著作內容是您自行撰寫,或是取自不受版權保護的公開領域或自由資源 (詳情請見 $1)。\n<strong>請勿在未經授權的情況下發表文章!</strong>",
+       "longpageerror": "<strong>錯誤:您所送出的文字內容共有 {{PLURAL:$1|1 KB|$1 KB}},已超出系統上限 {{PLURAL:$2|1 KB|$2 KB}}。</strong>\n\n無法儲存。",
+       "readonlywarning": "<strong>警告:資料庫已被鎖定以進行維護,因此無法儲存您目前所做的編輯動作。</strong>\n您可先複製您的文字並貼上到文字檔案中儲存,稍後再儲存您編輯。\n\n鎖定資料庫的管理員有以下說明:$1",
        "protectedpagewarning": "<strong>警告:本頁已經被保護,只有擁有管理員權限的使用者才可編輯。</strong>\n以下提供最近的日誌以便參考:",
        "semiprotectedpagewarning": "<strong>注意:</strong>本頁已經被保護,只有已註冊的使用者才可編輯。\n以下提供最近的日誌以便參考:",
        "cascadeprotectedwarning": "<strong>警告:</strong>本頁已經被保護,只有擁有管理員權限的使用者才可編輯,此頁面被下列頁面引用因此連鎖保護:",
        "permissionserrors": "權限錯誤",
        "permissionserrorstext": "由於下列{{PLURAL:$1|原因}},您沒有權限進行目前的動作:",
        "permissionserrorstext-withaction": "由於下列{{PLURAL:$1|原因}},您沒有權限進行 $2 的動作:",
-       "recreate-moveddeleted-warn": "'''警告: {{GENDER:|你|妳|你}}現在重新建立一個先前曾經刪除過的頁面。'''\n\n{{GENDER:|你|妳|你}}應該要考慮一下繼續編輯這一個頁面是否合適。\n為方便起見,這一個頁面的刪除記錄已經在下面提供:",
+       "recreate-moveddeleted-warn": "<strong>警告:您正重新建立先前已刪除的頁面。</strong>\n\n您應考慮是否繼續編輯此頁。\n在此提供刪除與移動日誌方便作為參考:",
        "moveddeleted-notice": "此頁面已刪除。\n下方提供此頁面的刪除和移動日誌以便參考。",
        "log-fulllog": "檢視完整日誌",
        "edit-hook-aborted": "編輯已被 Hook 中止。\n且未回應無任何說明。",
        "editwarning-warning": "離開此頁面可能會令您遺失之前所作的所有更改。\n若您已經登入,您可在偏好設定的 \"{{int:prefs-editing}}\" 項目關閉此警告。",
        "editpage-notsupportedcontentformat-title": "不支援此內容格式",
        "editpage-notsupportedcontentformat-text": "內容語法 $2 不支援使用 $1 格式的內容。",
-       "content-model-wikitext": "維基文字",
+       "content-model-wikitext": "Wikitext",
        "content-model-text": "純文字",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "post-expand-template-argument-category": "樣版參數有部份被忽略的頁面",
        "parser-template-loop-warning": "偵測到樣版遞迴:[[$1]]",
        "parser-template-recursion-depth-warning": "超出樣版遞迴深度限制 ($1)",
-       "language-converter-depth-warning": "已超過語言轉換器深度限制($1)",
+       "language-converter-depth-warning": "已超出語言轉換器深度限制 ($1)",
        "node-count-exceeded-category": "節點數量超出限制的頁面",
        "node-count-exceeded-category-desc": "用來顯示超過節點數量頁面的分類。",
        "node-count-exceeded-warning": "頁面超出節點數量限制",
        "expansion-depth-exceeded-warning": "頁面超出展開深度限制",
        "parser-unstrip-loop-warning": "偵測到 Unstrip 迴圈",
        "parser-unstrip-recursion-limit": "Unstrip 遞迴超出限制 ($1)",
-       "converter-manual-rule-error": "æ\96¼æ\89\8bå\8b\95èª\9eè¨\80è½\89æ\8f\9bè¦\8få\89\87æ\99\82å\81µæ¸¬å\88°é\8c¯èª¤",
+       "converter-manual-rule-error": "手動語言轉換規則時偵測到錯誤",
        "undo-success": "此編輯可以被還原。\n請檢查以下比較表,確認您是否要還原,然後儲存以下變更以完成編輯還原。",
        "undo-failure": "由於編輯的修訂間有衝突,此編輯不能還原。",
        "undo-norev": "此編輯不存在或已被刪除,無法還原。",
        "currentrev": "最新修訂",
        "currentrev-asof": "於 $1 的最新修訂",
        "revisionasof": "於 $1 的修訂",
-       "revision-info": "於 $1 由 $2 所做的修訂",
+       "revision-info": "於 $1 由 {{GENDER:$6|$2}} 所做的修訂 $7",
        "previousrevision": "←上個修訂",
        "nextrevision": "下個修訂→",
        "currentrevisionlink": "最新修訂",
-       "cur": "ç\9b®å\89\8d",
+       "cur": "ç\8f¾",
        "next": "後筆",
-       "last": "前",
+       "last": "前",
        "page_first": "第一頁",
        "page_last": "最後頁",
        "histlegend": "比較選擇的版本差異:選要比較修訂版本的單選方塊並點選網頁底部的按鈕進行比較。<br />\n符號說明:<strong>({{int:cur}})</strong> = 與最新的修訂版本比較,<strong>({{int:last}})</strong> = 與前一筆修訂版本比較,<strong>{{int:minoreditletter}}</strong> = 小修訂。",
        "rev-suppressed-unhide-diff": "檢視差異的其中一個修訂已被 <strong>禁止顯示</strong>。\n可至 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 禁止顯示日誌] 取得詳細資訊。\n若您要繼續,您仍可以 [$1 檢視此差異]。",
        "rev-deleted-diff-view": "檢視差異的其中一個修訂已被 <strong>刪除</strong>。\n您可繼續檢視差異,可至 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌] 取得詳細資訊。",
        "rev-suppressed-diff-view": "檢視差異的其中一個修訂已被 <strong>禁止顯示</strong>。\n您可繼續檢視差異,可至 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 禁止顯示日誌] 取得詳細資訊。",
-       "rev-delundel": "顯示/隱藏",
+       "rev-delundel": "更改顯示設定",
        "rev-showdeleted": "顯示",
        "revisiondelete": "刪除/取消刪除修訂",
        "revdelete-nooldid-title": "無效的目標修訂",
-       "revdelete-nooldid-text": "您尚未指定一個目標修訂去進行這個功能、\n所指定的修訂不存在,或者您嘗試去隱藏現時的修訂。",
+       "revdelete-nooldid-text": "您尚未指定目標修訂執行此動作、指定的修訂不存在,或您嘗試隱藏目前的修訂。",
        "revdelete-no-file": "指定的檔案不存在。",
-       "revdelete-show-file-confirm": "{{GENDER:|你|妳|你}}是否真的是想去檢視於$2 $3刪除「<nowiki>$1</nowiki>」的檔案修訂?",
+       "revdelete-show-file-confirm": "您是否要檢視檔案 \"<nowiki>$1</nowiki>\" 已刪除的修訂於 $2 $3?",
        "revdelete-show-file-submit": "是",
-       "revdelete-selected-text": "已選定[[:$2]]之$1個版本:",
-       "revdelete-selected-file": "已選定檔案[[:$2]]之$1個版本:",
-       "logdelete-selected": "{{PLURAL:$1|選取的日誌項目}}:",
-       "revdelete-text-text": "已刪除修訂版本仍將出現於頁面歷史中,唯將不公開內容訪問。",
-       "revdelete-text-file": "已刪除檔案版本仍將出現於檔案歷史中,唯將不公開內容訪問。",
-       "logdelete-text": "已刪除日誌活動仍將出現於日誌中,唯將不公開內容訪問。",
-       "revdelete-text-others": "æ\96¼{{SITENAME}}ä¹\8bå\85¶ä»\96管ç\90\86å\93¡ä»\8dæ\9c\89æ¬\8aé\99\90訪å\95\8fé\9a±è\97\8få\85§å®¹ï¼\8c亦å\8f¯æ\96¼å\90\8cä¸\80ç\95\8cé\9d¢æ\81¢å¾©å\88ªé\99¤ï¼\8cé\99¤é\9d\9e設å®\9aé¡\8då¤\96æ¢\9d件ã\80\82",
-       "revdelete-confirm": "請確認您肯定去做的話,您就要明白到後果,以及這個程序符合[[{{MediaWiki:Policy-url}}|政策]]。",
+       "revdelete-selected-text": "已選擇 [[:$2]] 中的{{PLURAL:$1|一筆|多筆}}修訂:",
+       "revdelete-selected-file": "已選擇 [[:$2]] 中的{{PLURAL:$1|一個|多個}}檔案版本:",
+       "logdelete-selected": "已選擇{{PLURAL:$1|一筆|多筆}}日誌活動:",
+       "revdelete-text-text": "已刪除的修訂仍會出現於頁面歷史中,但內容將不開放存取。",
+       "revdelete-text-file": "已刪除的檔案版本仍會出現於檔案歷史中,但內容將不開放存取。",
+       "logdelete-text": "已刪除的日誌活動仍會出現於日誌中,但內容將不開放存取。",
+       "revdelete-text-others": "å\9c¨ {{SITENAME}} ä¸\8aç\9a\84å\85¶ä»\96管ç\90\86å\93¡ä»\8dæ\9c\89æ¬\8aé\99\90å\8f¯ä»¥å­\98å\8f\96é\9a±è\97\8fç\9a\84å\85§å®¹ï¼\8cä¸\94è\83½å¤ å\8f\96æ¶\88å\88ªé\99¤ï¼\8cé\99¤é\9d\9eæ\9c\89é¡\8då¤\96ç\9a\84設å®\9aé\99\90å\88¶ã\80\82",
+       "revdelete-confirm": "請確認您是否明白此動作會造成的後果,\n以及您所做的動作是否符合 [[{{MediaWiki:Policy-url}}|政策]] 規範。",
        "revdelete-suppress-text": "禁制顯示應<strong>只有</strong>在下述情形時使用:\n* 潛在誹謗的資訊\n* 不合適個人資料\n*: <em>住家地址、電話號碼、身分證字號等。</em>",
-       "revdelete-legend": "設定可見性之限制",
+       "revdelete-legend": "設定顯示限制",
        "revdelete-hide-text": "修訂文字",
        "revdelete-hide-image": "隱藏檔案內容",
        "revdelete-hide-name": "隱藏動作和目標",
        "revdelete-hide-restricted": "禁止顯示資料給管理者及其他使用者",
        "revdelete-radio-same": "(請勿更改)",
        "revdelete-radio-set": "隱藏",
-       "revdelete-radio-unset": "可見",
+       "revdelete-radio-unset": "顯示",
        "revdelete-suppress": "禁止顯示資料給管理者及其他使用者",
-       "revdelete-unsuppress": "在已恢復的修訂中移除限制",
+       "revdelete-unsuppress": "移除已還原修訂上的顯示限制",
        "revdelete-log": "原因:",
-       "revdelete-submit": "應用於選取的{{PLURAL:$1|修訂}}",
-       "revdelete-success": "'''修訂的可見性已經成功更新。'''",
-       "revdelete-failure": "'''修訂的可見性無法更新:'''\n$1",
-       "logdelete-success": "'''事件的可見性已經成功設定。'''",
-       "logdelete-failure": "'''事件的可見性無法設定:'''\n$1",
-       "revdel-restore": "變更可見性",
+       "revdelete-submit": "套用至已選取的{{PLURAL:$1|一筆|多筆}}修訂",
+       "revdelete-success": "<strong>已成功更新修訂的顯示設定。</strong>",
+       "revdelete-failure": "<strong>無法更新修訂的顯示設定:</strong>\n$1",
+       "logdelete-success": "<strong>已成功更新日誌的顯示設定。</strong>",
+       "logdelete-failure": "<strong>無法更新日誌的顯示設定:</strong>\n$1",
+       "revdel-restore": "更改顯示設定",
        "pagehist": "頁面歷史",
-       "deletedhist": "已刪除歷史",
-       "revdelete-hide-current": "正在隱藏於$1 $2之項目錯誤:這個是現時的修訂,不可以隱藏。",
-       "revdelete-show-no-access": "æ­£å\9c¨é¡¯ç¤ºæ\96¼$1 $2ä¹\8bé \85ç\9b®é\8c¯èª¤ï¼\9aé\80\99å\80\8bé \85ç\9b®å·²ç¶\93æ¨\99示ç\82º\"å·²é\99\90å\88¶\"ï¼\8cæ\82¨å°\8då®\83並ç\84¡é\80\9aè¡\8cæ¬\8a。",
-       "revdelete-modify-no-access": "正在更改於$1 $2之項目錯誤:這個項目已經標示為\"已限制\",您對它並無通行權。",
-       "revdelete-modify-missing": "正在更改項目ID $1錯誤:它在資料庫中遺失!",
-       "revdelete-no-change": "警告:於$1 $2之項目已經請求了可見性的設定。",
-       "revdelete-concurrent-change": "正在更改於$1 $2之項目錯誤:當我們嘗試更改它的設定時,已經被另一些人更改過。請檢查紀錄。",
-       "revdelete-only-restricted": "在隱藏於 $1 $2 的項目時發生錯誤:您無法在未選擇任何能見性選項下禁止顯示項目。",
+       "deletedhist": "已刪除歷史",
+       "revdelete-hide-current": "隱藏於 $1 $2 的項目錯誤:此為目前的修訂,不可隱藏。",
+       "revdelete-show-no-access": "檢è¦\96æ\96¼ $1 $2 ç\9a\84é \85ç\9b®é\8c¯èª¤ï¼\9aæ­¤é \85ç\9b®å·²è¨­ç\82º \"å·²é\99\90å\88¶\"ã\80\82\næ\82¨æ²\92æ\9c\89æ¬\8aé\99\90å­\98å\8f\96。",
+       "revdelete-modify-no-access": "修改於 $1 $2 的項目錯誤:此項目已設為 \"已限制\"。\n您沒有權限存取。",
+       "revdelete-modify-missing": "修改項目 ID $1 錯誤:資料庫中無該資料!",
+       "revdelete-no-change": "<strong>警告:</strong>於 $1 $2 的項目已請求修改顯示設定。",
+       "revdelete-concurrent-change": "修改於 $1 $2 的項目錯誤:在您嘗試修改之前,狀態已被修改。\n請檢查日誌。",
+       "revdelete-only-restricted": "在隱藏於 $1 $2 的項目時發生錯誤:您不可在未選擇顯示設定的情況下禁止管理員檢視項目。",
        "revdelete-reason-dropdown": "*常見的刪除原因\n** 侵犯版權\n** 不合適的評論或個人資訊\n** 不當的使用者名稱\n** 隱含誹謗的資訊",
        "revdelete-otherreason": "其它/額外的原因:",
        "revdelete-reasonotherlist": "其它原因",
        "mergehistory-reason": "原因:",
        "mergelog": "合併日誌",
        "pagemerge-logentry": "已合併 [[$1]] 至 [[$2]] (修訂更新至 $3)",
-       "revertmerge": "解除合併",
+       "revertmerge": "取消合併",
        "mergelogpagetext": "以下是最近合併頁面歷史的清單。",
        "history-title": "\"$1\" 的修訂歷史",
        "difference-title": "$1:修訂間的差異",
        "difference-multipage": "(頁面間的差異)",
        "lineno": "行 $1:",
        "compareselectedversions": "比較已選擇的修訂",
-       "showhideselectedversions": "顯示/隱藏已選擇的修訂",
+       "showhideselectedversions": "更改已選擇修訂的顯示設定",
        "editundo": "還原",
        "diff-empty": "(無差異)",
        "diff-multi-sameuser": "(未顯示相同使用者於中間所作的 $1 次修訂)",
        "diff-multi-manyusers": "(未顯示由超過 $2 位使用者於中間所作的 $1 次修訂)",
        "difference-missing-revision": "{{PLURAL:$2|1次修訂|$2 次修訂}}差異($1)不存在。\n\n這通常是因為過時的頁面修訂差異鏈接被刪除。\n詳情請閱[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。",
        "searchresults": "搜尋結果",
-       "searchresults-title": "對「$1」的搜尋結果",
-       "toomanymatches": "過多的匹配已回應,請嘗試一個不同的查詢",
-       "titlematches": "é \81é\9d¢æ¨\99é¡\8cç\9b¸ç¬¦",
-       "textmatches": "é \81é\9d¢å\85§å®¹ç\9b¸ç¬¦",
-       "notextmatches": "沒有頁面內容匹配",
+       "searchresults-title": "\"$1\" 的搜尋結果",
+       "toomanymatches": "太多符合條件的結果,請嘗試使用較複雜的查詢",
+       "titlematches": "é \81é\9d¢æ¨\99é¡\8c符å\90\88",
+       "textmatches": "é \81é\9d¢å\85§å®¹ç¬¦å\90\88",
+       "notextmatches": "沒有符合的頁面內容",
        "prevn": "前 $1 筆",
        "nextn": "後 {{PLURAL:$1|$1}} 筆",
        "prevn-title": "前 $1 筆結果",
        "nextn-title": "後 $1 筆結果",
-       "shown-title": "每頁顯示 $1 結果",
+       "shown-title": "每頁顯示 $1 結果",
        "viewprevnext": "檢視 ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-exists": "'''在這個 wiki 上已有一頁面叫做「[[:$1]]」。'''",
-       "searchmenu-new": "<strong>於此 Wiki 建立頁面 \"[[:$1]]\"!</strong>請參考您輸入的條件找到的搜尋結果。",
+       "searchmenu-exists": "<strong>此 Wiki 已有名稱為 \"[[:$1]]\" 的頁面。</strong> {{PLURAL:$2|0=|或請參考其他搜尋結果。}}",
+       "searchmenu-new": "<strong>於此 Wiki 建立頁面 \"[[:$1]]\"!</strong>{{PLURAL:$2|0=|或請參考您輸入的條件找到的搜尋結果。|或請參考其他搜尋結果。}}",
        "searchprofile-articles": "內容頁面",
-       "searchprofile-project": "說明與專案頁面",
        "searchprofile-images": "多媒體",
        "searchprofile-everything": "全部",
        "searchprofile-advanced": "進階",
        "searchprofile-articles-tooltip": "在 $1 中搜尋",
-       "searchprofile-project-tooltip": "在 $1 中搜尋",
        "searchprofile-images-tooltip": "搜尋檔案",
        "searchprofile-everything-tooltip": "搜尋所有內容 (包含對話頁面)",
        "searchprofile-advanced-tooltip": "搜尋自訂命名空間",
        "search-result-size": "$1 ($2 個字)",
        "search-result-category-size": "$1 位成員 ($2 個子分類,$3 個檔案)",
-       "search-result-score": "相關度$1%",
-       "search-redirect": "(重新導向至 $1)",
+       "search-result-score": "相關度$1%",
+       "search-redirect": "(重定向自 $1)",
        "search-section": "(章節 $1)",
        "search-file-match": "(符合檔案內容)",
-       "search-suggest": "{{GENDER:|你|妳|你}}是不是要找:$1",
-       "search-interwiki-caption": "å§\8a妹專案",
+       "search-suggest": "您指的是不是:$1",
+       "search-interwiki-caption": "å§\90妹專案",
        "search-interwiki-default": "來自 $1 的結果:",
        "search-interwiki-more": "(更多)",
        "search-relatedarticle": "相關",
-       "searcheverything-enable": "搜尋所有命名空間",
        "searchrelated": "相關",
        "searchall": "全部",
-       "showingresults": "ä¸\8bé\9d¢é¡¯ç¤ºå¾\9e第 <b>$2</b> æ¢\9dé\96\8bå§\8bç\9a\84 <b>$1</b> æ¢\9dçµ\90æ\9e\9c:",
-       "showingresultsinrange": "以下顯示第 <strong>$2</strong> 筆至第 <strong>$3</strong> 筆,共 <strong>$1</strong> 筆搜尋結果。",
-       "showingresultsnum": "ä¸\8bé\9d¢é¡¯ç¤ºå¾\9e第 '''$2''' æ¢\9dé\96\8bå§\8bç\9a\84 '''{{PLURAL:$3|1|$3}}''' æ¢\9dçµ\90æ\9e\9cã\80\82",
-       "showingresultsheader": "對'''$4'''的{{PLURAL:$5|第 '''$1''' 至第 '''$3''' 項結果|第 '''$1 - $2''' 項,共 '''$3''' 項結果}}",
-       "search-nonefound": "在查詢中無結果相符。",
+       "showingresults": "以ä¸\8b顯示å¾\9e第 <strong>$2</strong> ç­\86é\96\8bå§\8bï¼\8cå\85± {{PLURAL:$1|<strong>1</strong> ç­\86çµ\90æ\9e\9c|<strong>$1</strong> ç­\86çµ\90æ\9e\9c}}:",
+       "showingresultsinrange": "以下顯示從第 <strong>$2</strong> 筆至第 <strong>$3</strong> 筆中的 {{PLURAL:$1|<strong>1</strong> 筆結果|<strong>$1</strong> 筆結果}}:",
+       "showingresultsnum": "以ä¸\8b顯示å¾\9e第 <strong>$2</strong> ç­\86é\96\8bå§\8bï¼\8cå\85± {{PLURAL:$3|<strong>1</strong> ç­\86çµ\90æ\9e\9c|<strong>$3</strong> ç­\86çµ\90æ\9e\9c}}ï¼\9a",
+       "showingresultsheader": "<strong>$4</strong> 的 {{PLURAL:$5|第 <strong>$1</strong> 筆結果,共 <strong>$3</strong> 筆|第 <strong>$1 - $2</strong>,共 <strong>$3</strong> 筆}}",
+       "search-nonefound": "無符合查詢條件的結果。",
        "powersearch-legend": "進階搜尋",
        "powersearch-ns": "搜尋以下命名空間:",
-       "powersearch-togglelabel": "勾選:",
+       "powersearch-togglelabel": "請選擇:",
        "powersearch-toggleall": "全部",
        "powersearch-togglenone": "無",
+       "powersearch-remember": "記住選項用於以後搜索",
        "search-external": "外部搜尋",
-       "searchdisabled": "{{SITENAME}}由於性能方面的原因,全文搜索已被暫時停用。您可以暫時透過Google搜索。請留意他們的索引可能會過時。",
+       "searchdisabled": "{{SITENAME}} 已停用搜尋功能。\n您可以改透過 Google 搜尋。\n請注意,在 Google 中搜尋到的 {{SITENAME}} 頁面內容可能不是最新的。",
        "search-error": "搜尋時發生錯誤:$1",
        "preferences": "偏好設定",
        "mypreferences": "偏好設定",
        "prefs-user-pages": "使用者頁面",
        "prefs-personal": "使用者基本資料",
        "prefs-rc": "最近變更",
-       "prefs-watchlist": "監視列表",
-       "prefs-watchlist-days": "監視列表中顯示的天數:",
+       "prefs-watchlist": "監視清單",
+       "prefs-watchlist-days": "監視清單中顯示的天數:",
        "prefs-watchlist-days-max": "最多 $1 {{PLURAL:$1|天}}",
-       "prefs-watchlist-edits": "å±\95é\96\8bç\9a\84ç\9b£è¦\96å\88\97表中顯示è®\8aæ\9b´æ¬¡æ\95¸上限:",
-       "prefs-watchlist-edits-max": "æ\9c\80大æ\95¸é\87\8f:1000",
-       "prefs-watchlist-token": "監視列表密鑰:",
-       "prefs-misc": "雜項",
+       "prefs-watchlist-edits": "å±\95é\96\8bç\9b£è¦\96æ¸\85å\96®ä¸­é¡¯ç¤ºç\9a\84è®\8aæ\9b´æ\95¸é\87\8f上限:",
+       "prefs-watchlist-edits-max": "æ\95¸é\87\8fä¸\8aé\99\90:1000",
+       "prefs-watchlist-token": "監視清單密鑰:",
+       "prefs-misc": "其他",
        "prefs-resetpass": "變更密碼",
        "prefs-changeemail": "變更電子郵件",
        "prefs-setemail": "設定電子郵件位址",
        "saveprefs": "儲存",
        "restoreprefs": "還原所有預設設定 (所有項目)",
        "prefs-editing": "編輯",
-       "rows": "數:",
-       "columns": "數:",
+       "rows": "數:",
+       "columns": "數:",
        "searchresultshead": "搜尋",
        "stub-threshold": "<a href=\"#\" class=\"stub\">短頁面連結</a>格式門檻值 (位元組):",
        "stub-threshold-disabled": "已停用",
        "recentchangesdays-max": "最多 $1 {{PLURAL:$1|天}}",
        "recentchangescount": "預設顯示的編輯數:",
        "prefs-help-recentchangescount": "這包含最近變更、頁面歷史以及日誌。",
-       "prefs-help-watchlist-token2": "這是一個秘密的密鑰,用於訂源您的監視列表。\n知道它的人將能夠讀取您的監視列表,所以您不應該分享它。[[Special:ResetTokens|如有需要重設此密鑰,請點擊這裡]]。",
+       "prefs-help-watchlist-token2": "訂閱您的監視清單所需的密鑰。\n任何人只要知道密鑰就能夠讀取您的監視列表,所以請勿任意與它人共享。\n若有需要 [[Special:ResetTokens|您可重設密鑰]]。",
        "savedprefs": "您的偏好設定已儲存。",
        "timezonelegend": "時區:",
        "localtime": "當地時間:",
        "allowemail": "啟用來自其他使用者的郵件通知功能",
        "prefs-searchoptions": "搜尋",
        "prefs-namespaces": "命名空間",
-       "defaultns": "或搜尋命名空間:",
        "default": "預設",
        "prefs-files": "檔案",
        "prefs-custom-css": "自訂 CSS",
        "userrights-groups-help": "您可以更改此使用者所屬的群組:\n* 已勾選的核選方塊代表該使用者屬於該群組。\n* 未勾選的核選方塊代表該使用者不屬於該群組。\n* 有 * 號標示代表一旦加入該群組後便不能移除,反之亦然。",
        "userrights-reason": "原因:",
        "userrights-no-interwiki": "您沒有權限去編輯其它使用者在 Wiki 上的權限。",
-       "userrights-nodatabase": "資料庫$1不存在或並非為本地的。",
+       "userrights-nodatabase": "資料庫 $1 不存在或不在本地主機的。",
        "userrights-nologin": "您必須 [[Special:UserLogin|登入]] 管理員帳號以指定使用者權限。",
        "userrights-notallowed": "你無權加入或刪除使用者權限。",
        "userrights-changeable-col": "您可變更的群組",
        "right-move-rootuserpages": "移動根使用者頁面",
        "right-move-categorypages": "移動分類頁面",
        "right-movefile": "移動檔案",
-       "right-suppressredirect": "移å\8b\95é \81é\9d¢æ\99\82ä¸\8d建ç«\8bä¾\86æº\90ç\9a\84é\87\8dæ\96°å°\8eå\90\91é \81é\9d¢",
+       "right-suppressredirect": "移å\8b\95é \81é\9d¢æ\99\82ä¸\8då\9c¨å\8e\9fé \81é\9d¢å»ºç«\8bé\87\8då®\9aå\90\91",
        "right-upload": "上傳檔案",
        "right-reupload": "覆蓋現有的檔案",
-       "right-reupload-own": "覆蓋由同一位上載的檔案",
-       "right-reupload-shared": "於本地無視共用媒體檔案庫上的檔案",
-       "right-upload_by_url": "由一個URL上載檔案",
-       "right-purge": "不確認清除網站快取",
-       "right-autoconfirmed": "不受以 IP 為基礎的註冊頻率限制",
-       "right-bot": "視為一個自動程序",
-       "right-nominornewtalk": "若討論頁面為小修訂,則不顯示新訊息提示",
-       "right-apihighlimits": "API 查詢中可使用較高上限值",
+       "right-reupload-own": "覆蓋自己上傳的檔案",
+       "right-reupload-shared": "覆蓋共用媒體檔案庫於本地的檔案",
+       "right-upload_by_url": "使用 URL 上傳檔案",
+       "right-purge": "不須確認即清除網站的頁面快取",
+       "right-autoconfirmed": "不受 IP-based 的註冊頻率限制",
+       "right-bot": "將其視為自動程序",
+       "right-nominornewtalk": "不顯示討論頁面中小修訂的新訊息提示",
+       "right-apihighlimits": "使用 API 查詢的最高上限值",
        "right-writeapi": "使用寫入 API",
        "right-delete": "刪除頁面",
-       "right-bigdelete": "刪除大量歷史之頁面",
-       "right-deletelogentry": "刪除及恢復特定的日誌項目",
-       "right-deleterevision": "å\88ªé\99¤å\8f\8aå\90\8cæ\81¢å¾©é \81é\9d¢ä¸­ç\9a\84æ\8c\87å®\9a修訂",
-       "right-deletedhistory": "檢視已刪除之歷史項目,不含關聯的文本",
-       "right-deletedtext": "檢視已刪除修訂中之已刪除的字以及更改",
-       "right-browsearchive": "搜尋已刪除頁面",
-       "right-undelete": "å\8f\8d刪除頁面",
-       "right-suppressrevision": "檢視及恢復由操作員隱藏之修訂",
-       "right-suppressionlog": "檢視非公開日誌",
+       "right-bigdelete": "刪除有大量歷史記錄的頁面",
+       "right-deletelogentry": "刪除及取消刪除指定的日誌項目",
+       "right-deleterevision": "å\88ªé\99¤å\8f\8aå\8f\96æ¶\88å\88ªé\99¤æ\8c\87å®\9aç\9a\84é \81é\9d¢修訂",
+       "right-deletedhistory": "檢視已刪除的歷史項目,不含關聯的文字",
+       "right-deletedtext": "檢視已刪除修訂中已刪除的文字及變更",
+       "right-browsearchive": "搜尋已刪除頁面",
+       "right-undelete": "å\8f\96æ¶\88刪除頁面",
+       "right-suppressrevision": "複查與還原由管理員隱藏的修訂",
+       "right-suppressionlog": "檢視非公開日誌",
        "right-block": "封鎖其他使用者的編輯權限",
        "right-blockemail": "封鎖使用者發送電子郵件的權限",
        "right-hideuser": "封鎖使用者名稱,避免公開顯示",
-       "right-ipblock-exempt": "略過 IP 封鎖、自動封鎖以及範圍封鎖",
-       "right-proxyunbannable": "略過 Proxy 自動封鎖",
+       "right-ipblock-exempt": "略過 IP 封鎖、自動封鎖及範圍封鎖檢查",
+       "right-proxyunbannable": "略過 Proxy 自動封鎖檢查",
        "right-unblockself": "解除封鎖自己",
-       "right-protect": "更改保護等級以及編輯被連鎖保護的頁面",
-       "right-editprotected": "編輯保護層級為「{{int:protect-level-sysop}}」的頁面",
-       "right-editsemiprotected": "編輯保護層級為「{{int:protect-level-autoconfirmed}}」的頁面",
+       "right-protect": "更改保護層級及編輯被連鎖保護的頁面",
+       "right-editprotected": "編輯保護層級為 \"{{int:protect-level-sysop}}\" 的頁面",
+       "right-editsemiprotected": "編輯保護層級為 \"{{int:protect-level-autoconfirmed}}\" 的頁面",
        "right-editinterface": "編輯使用者介面",
        "right-editusercssjs": "編輯其他使用者的 CSS 和 JavaScript 檔案",
        "right-editusercss": "編輯其他使用者的 CSS 檔案",
        "right-edituserjs": "編輯其他使用者的 JavaScript 檔案",
-       "right-editmyusercss": "編輯自己的使用者 CSS 檔",
-       "right-editmyuserjs": "編輯自己的使用者 JavaScript 檔",
-       "right-viewmywatchlist": "檢視您的監視列表",
-       "right-editmywatchlist": "編輯您的監視列表。請注意即使沒有這種權利,某些操作仍將添加頁面。",
-       "right-viewmyprivateinfo": "檢視自己的私隱資料(如電郵地址及真實姓名)",
-       "right-editmyprivateinfo": "編輯自己的私隱資料(如電郵地址及真實姓名)",
-       "right-editmyoptions": "編輯的偏好設定",
+       "right-editmyusercss": "編輯自己的使用者 CSS 檔",
+       "right-editmyuserjs": "編輯自己的使用者 JavaScript 檔",
+       "right-viewmywatchlist": "檢視自己的監視清單",
+       "right-editmywatchlist": "編輯自己的監視清單。注意,即使無此權限,某些操作仍會新增頁面至監視清單。",
+       "right-viewmyprivateinfo": "檢視自己的私隱資料 (如:電子郵件地址及真實姓名)",
+       "right-editmyprivateinfo": "編輯自己的私隱資料 (如:電子郵件地址及真實姓名)",
+       "right-editmyoptions": "編輯自己的偏好設定",
        "right-rollback": "快速還原最後一位使用者對某一頁面的編輯",
-       "right-markbotedits": "標示復原編輯作機械人編輯",
-       "right-noratelimit": "沒有使用頻率限制",
-       "right-import": "由其它wiki中匯入頁面",
-       "right-importupload": "由檔案上載中匯入頁面",
-       "right-patrol": "標示他人的編輯爲已巡查",
+       "right-markbotedits": "標示還原編輯為機械人編輯",
+       "right-noratelimit": "不受使用頻率限制",
+       "right-import": "由其他 Wiki 匯入頁面",
+       "right-importupload": "由檔案上匯入頁面",
+       "right-patrol": "標示他人的編輯爲已巡查",
        "right-autopatrol": "將自己的編輯自動標示為已巡查的",
        "right-patrolmarks": "檢視最近變更的巡查標記",
-       "right-unwatchedpages": "檢視未監視頁面",
+       "right-unwatchedpages": "檢視未監視頁面",
        "right-mergehistory": "合併頁面歷史",
        "right-userrights": "編輯所有使用者的權限",
-       "right-userrights-interwiki": "編輯在其它 Wiki 上的使用者權限",
+       "right-userrights-interwiki": "編輯使用者在其它 Wiki 上的權限",
        "right-siteadmin": "鎖定和解除鎖定資料庫",
-       "right-override-export-depth": "匯出含有五層深度連結頁面之頁面",
+       "right-override-export-depth": "匯出頁面包含連結內容,深度上限為 5 層",
        "right-sendemail": "發送電子郵件給其他使用者",
-       "right-passwordreset": "æ\9f¥ç\9c\8bé\87\8dç½®å¯\86碼郵件",
+       "right-passwordreset": "檢è¦\96é\87\8d設å¯\86碼é\9b»å­\90郵件",
        "newuserlogpage": "建立使用者日誌",
        "newuserlogpagetext": "此為建立使用者的日誌。",
        "rightslog": "使用者權限日誌",
        "rightslogtext": "此為更改使用者權限的日誌。",
-       "action-read": "閱讀這個頁面",
-       "action-edit": "編輯這個頁面",
-       "action-createpage": "建ç«\8bé\80\99å\80\8bé \81é\9d¢",
+       "action-read": "閱讀頁面",
+       "action-edit": "編輯頁面",
+       "action-createpage": "建立頁面",
        "action-createtalk": "建立討論頁面",
-       "action-createaccount": "建立這個使用者帳號",
-       "action-history": "æ\9f¥é\96±此頁面歷史",
+       "action-createaccount": "建立使用者帳號",
+       "action-history": "檢è¦\96此頁面歷史",
        "action-minoredit": "標示此編輯為小修訂",
-       "action-move": "移動這個頁面",
-       "action-move-subpages": "移動這個頁面跟它的子頁面",
+       "action-move": "移動頁面",
+       "action-move-subpages": "移動此頁面與它的子頁面",
        "action-move-rootuserpages": "移動使用者根頁面",
        "action-move-categorypages": "移動分類頁面",
-       "action-movefile": "移動這個檔案",
-       "action-upload": "上載這個檔案",
-       "action-reupload": "覆蓋這個現有的檔案",
-       "action-reupload-shared": "覆蓋共用檔案庫上的檔案",
-       "action-upload_by_url": "由一個URL中上載檔案",
-       "action-writeapi": "用來寫API",
-       "action-delete": "刪除這個頁面",
-       "action-deleterevision": "刪除這次修訂",
-       "action-deletedhistory": "檢視這個頁面的刪除歷史",
-       "action-browsearchive": "搜尋已刪除頁面",
-       "action-undelete": "å\8f\8då\88ªé\99¤é\80\99å\80\8b頁面",
-       "action-suppressrevision": "翻查和恢復這次隱藏修訂",
-       "action-suppressionlog": "檢視這個私有日誌",
+       "action-movefile": "移動檔案",
+       "action-upload": "上傳此檔案",
+       "action-reupload": "覆蓋現有的檔案",
+       "action-reupload-shared": "覆蓋共用檔案庫上的檔案",
+       "action-upload_by_url": "使用 URL 上傳此檔案",
+       "action-writeapi": "使用寫入 API",
+       "action-delete": "刪除頁面",
+       "action-deleterevision": "刪除修訂",
+       "action-deletedhistory": "檢視頁面的刪除歷史",
+       "action-browsearchive": "搜尋已刪除頁面",
+       "action-undelete": "å\8f\96æ¶\88å\88ªé\99¤æ­¤頁面",
+       "action-suppressrevision": "複查與還原此隱藏修訂",
+       "action-suppressionlog": "檢視此非公開日誌",
        "action-block": "封鎖此使用者的編輯權限",
-       "action-protect": "更改這個頁面的保護等級",
+       "action-protect": "變更此頁面的保護層級",
        "action-rollback": "快速還原最後一位使用者對某一頁面的編輯",
        "action-import": "由其他 Wiki 匯入頁面",
        "action-importupload": "由檔案上傳匯入頁面",
-       "action-patrol": "標示其它的編輯為已巡查的",
-       "action-autopatrol": "將您的編輯標示為已巡查的",
-       "action-unwatchedpages": "檢視未被監視的頁面",
-       "action-mergehistory": "合併這個頁面的歷史",
+       "action-patrol": "標示其它人的編輯為已巡查",
+       "action-autopatrol": "標示您的編輯為已巡查",
+       "action-unwatchedpages": "檢視未監視的頁面列表",
+       "action-mergehistory": "合併頁面的歷史",
        "action-userrights": "編輯所有使用者的權限",
        "action-userrights-interwiki": "編輯在其它 Wiki 上的使用者權限",
        "action-siteadmin": "鎖定和解除鎖定資料庫",
        "action-sendemail": "發送電子郵件",
-       "action-editmywatchlist": "編輯您的監視列表�",
-       "action-viewmywatchlist": "查看您的監視列表",
+       "action-editmywatchlist": "編輯您的監視清單",
+       "action-viewmywatchlist": "查看您的監視清單",
        "action-viewmyprivateinfo": "查看您的個人資料",
        "action-editmyprivateinfo": "編輯您的個人資料",
-       "nchanges": "$1次更改",
-       "enhancedrc-since-last-visit": "自上次訪問已有$1",
+       "nchanges": "$1 次變更",
+       "enhancedrc-since-last-visit": "自上次訪問已有 $1",
        "enhancedrc-history": "歷史",
        "recentchanges": "最近變更",
        "recentchanges-legend": "最近變更選項",
        "recentchanges-summary": "追蹤 Wiki 中此頁面的最近變更。",
-       "recentchanges-noresult": "在所選擇的時間裡沒有任何更改與所給條件吻合。",
-       "recentchanges-feed-description": "追蹤該 Wiki 在此頁面的最近變更。",
-       "recentchanges-label-newpage": "該次編輯建立了新頁面",
-       "recentchanges-label-minor": "該編輯是一個小修訂",
-       "recentchanges-label-bot": "該次編輯為機器人所執行",
-       "recentchanges-label-unpatrolled": "這次編輯尚未巡查過",
-       "recentchanges-label-plusminus": "頁面更改的位元組大小",
+       "recentchanges-noresult": "於指定時間內沒有符合條件的變更。",
+       "recentchanges-feed-description": "追蹤此訂閱中該 Wiki 的最近變更。",
+       "recentchanges-label-newpage": "該編輯建立新頁面",
+       "recentchanges-label-minor": "該編輯是一個小修訂",
+       "recentchanges-label-bot": "該編輯由機器人執行",
+       "recentchanges-label-unpatrolled": "該編輯尚未巡查",
+       "recentchanges-label-plusminus": "該頁面變更的大小 (位元組)",
        "recentchanges-legend-heading": "'''說明:'''",
-       "recentchanges-legend-newpage": "(請參考 [[Special:NewPages|最新頁面]])",
-       "recentchanges-legend-plusminus": "(''±123'')",
-       "rcnotefrom": "以下為自 <strong>$2</strong> 起的更改 (最多顯示<strong>$1</strong> 筆)。",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (請參考 [[Special:NewPages|最新頁面]])",
+       "recentchanges-legend-plusminus": "(<em>±123</em>)",
+       "rcnotefrom": "以下為自 <strong>$2</strong> 以來的變更 (最多顯示 <strong>$1</strong> 筆)。",
        "rclistfrom": "顯示自 $3 $2 以來的最近變更",
        "rcshowhideminor": "$1 小修訂",
        "rcshowhideminor-show": "顯示",
        "rcshowhideminor-hide": "隱藏",
-       "rcshowhidebots": "$1 機器人的編輯",
+       "rcshowhidebots": "$1 機器人",
        "rcshowhidebots-show": "顯示",
        "rcshowhidebots-hide": "隱藏",
        "rcshowhideliu": "$1 已註冊的使用者",
        "minoreditletter": "小",
        "newpageletter": "新",
        "boteditletter": "機",
-       "number_of_watching_users_pageview": "[$1 位在監視的使用者]",
-       "rc_categories": "分類界限(以\"|\"分割)",
+       "number_of_watching_users_pageview": "[$1 位在監視的使用者]",
+       "rc_categories": "分類限制 (以 \"|\" 分隔)",
        "rc_categories_any": "任意",
-       "rc-change-size-new": "更改後$1字節",
+       "rc-change-size-new": "變更後為 $1 位元組",
        "newsectionsummary": "/* $1 */ 新章節",
-       "rc-enhanced-expand": "顯示細節",
-       "rc-enhanced-hide": "隱藏細節",
-       "rc-old-title": "最初建立為 \"$1\"",
+       "rc-enhanced-expand": "顯示詳細資訊",
+       "rc-enhanced-hide": "隱藏詳細資訊",
+       "rc-old-title": "æ\9c\80å\88\9d建ç«\8bç\9a\84å\90\8d稱ç\82º \"$1\"",
        "recentchangeslinked": "相關變更",
        "recentchangeslinked-feed": "相關變更",
        "recentchangeslinked-toolbox": "相關變更",
-       "recentchangeslinked-title": "與「$1」有關的變更",
-       "recentchangeslinked-summary": "這一個特殊頁面列示''由''所給出的一個頁面之連結到頁面的最近更改(或者是對於指定分類的成員)。\n在[[Special:Watchlist|您的監視列表]]中的頁面會以'''粗體'''顯示。",
-       "recentchangeslinked-page": "頁面名稱:",
-       "recentchangeslinked-to": "顯示連到所給出的頁面",
+       "recentchangeslinked-title": "與 \"$1\" 相關的變更",
+       "recentchangeslinked-summary": "此頁面列出指定頁面連結到的所有頁面中 (或指定分類中的所有成員) 有做變更的頁面清單。\n有在 [[Special:Watchlist|您的監視清單]] 中的頁面會以 <strong>粗體</strong> 標示。",
+       "recentchangeslinked-page": "頁面名稱",
+       "recentchangeslinked-to": "改顯示連結至指定頁面的變更",
        "upload": "上傳檔案",
        "uploadbtn": "上傳檔案",
-       "reuploaddesc": "取消上載並返回上載表單",
-       "upload-tryagain": "提交修改後的檔案描述",
+       "reuploaddesc": "取消上傳並返回上傳表單",
+       "upload-tryagain": "送出修改後的檔案描述",
        "uploadnologin": "未登入",
-       "uploadnologintext": "您必須先$1才能上載檔案。",
-       "upload_directory_missing": "遺失上傳目錄($1)且網頁伺服器無權限建立。",
-       "upload_directory_read_only": "上傳目錄($1)不存在或無寫權限。",
+       "uploadnologintext": "您必須先 $1 才能上傳檔案。",
+       "upload_directory_missing": "缺少上傳目錄 ($1) 且網頁伺服器沒有權限建立。",
+       "upload_directory_read_only": "網頁伺服器沒有上傳目錄 ($1) 的寫入權限。",
        "uploaderror": "上傳錯誤",
-       "upload-recreate-warning": "'''警告:一個相同名字的檔案曾經被刪除或者移動至別處。'''\n\n這個頁面的刪除和移動日誌在這裏提供以便參考:",
-       "uploadtext": "使ç\94¨ä¸\8bé\9d¢ç\9a\84表å\96®ä¾\86ä¸\8aå\82³æª\94æ¡\88ã\80\82\nè¦\81檢è¦\96æ\88\96æ\90\9cå°\8b以å\89\8dä¸\8aå\82³ç\9a\84æª\94æ¡\88ï¼\8cå\8f¯è\87³ [[Special:FileList|æª\94æ¡\88ä¸\8aå\82³æ¸\85å\96®]]ï¼\8c\87\8dæ\96°)ä¸\8aå\82³æ\9c\83å\9c¨ [[Special:Log/upload|ä¸\8aå\82³æ\97¥èª\8c]] ä¸­è¨\98é\8c\84ï¼\8cè\80\8cå\88ªé\99¤å\89\87æ\9c\83å\9c¨ [[Special:Log/delete|å\88ªé\99¤æ\97¥èª\8c]] ä¸­è¨\98é\8c\84ã\80\82\n\nè¦\81å\9c¨é \81é\9d¢ä¸­å¼\95ç\94¨æª\94æ¡\88ï¼\8cå\8f¯ä½¿ç\94¨ä»¥ä¸\8bå\85¶ä¸­ä¸\80種æ\96¹å¼\8fé\80£çµ\90ï¼\9a\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> é¡¯ç¤ºå®\8cæ\95´å°ºå\90\8b的圖片\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> 會在左方放置一張 200 像素寬的圖片於框中,並顯示 \"alt text\" 作為描述\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> 直接連結到圖片而不顯示預覽",
+       "upload-recreate-warning": "<strong>警告:曾有檔案使用此名稱已被刪除或者移動至它處。</strong>\n\n在此提供刪除與移動日誌方便作為參考:",
+       "uploadtext": "使ç\94¨ä¸\8bé\9d¢ç\9a\84表å\96®ä¾\86ä¸\8aå\82³æª\94æ¡\88ã\80\82\nè¦\81檢è¦\96æ\88\96æ\90\9cå°\8b以å\89\8dä¸\8aå\82³ç\9a\84æª\94æ¡\88ï¼\8cå\8f¯è\87³ [[Special:FileList|æª\94æ¡\88ä¸\8aå\82³æ¸\85å\96®]]ï¼\8c\87\8dæ\96°)ä¸\8aå\82³æ\9c\83å\9c¨ [[Special:Log/upload|ä¸\8aå\82³æ\97¥èª\8c]] ä¸­è¨\98é\8c\84ï¼\8cè\80\8cå\88ªé\99¤å\89\87æ\9c\83å\9c¨ [[Special:Log/delete|å\88ªé\99¤æ\97¥èª\8c]] ä¸­è¨\98é\8c\84ã\80\82\n\nè¦\81å\9c¨é \81é\9d¢ä¸­å¼\95ç\94¨æª\94æ¡\88ï¼\8cå\8f¯ä½¿ç\94¨ä»¥ä¸\8bå\85¶ä¸­ä¸\80種æ\96¹å¼\8fé\80£çµ\90ï¼\9a\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> é¡¯ç¤ºå®\8cæ\95´å°ºå¯¸的圖片\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> 會在左方放置一張 200 像素寬的圖片於框中,並顯示 \"alt text\" 作為描述\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> 直接連結到圖片而不顯示預覽",
        "upload-permitted": "允許的檔案類型:$1。",
        "upload-preferred": "建議的檔案類型:$1。",
        "upload-prohibited": "禁止的檔案類型:$1。",
        "filesource": "來源:",
        "ignorewarning": "忽略警告並儲存檔案",
        "ignorewarnings": "忽略所有警告",
-       "minlength1": "檔案名字必須至少有一個字母。",
-       "illegalfilename": "檔案名「$1」包含有頁面標題所禁止的字符。請改名後重新上傳。",
-       "filename-toolong": "æ\96\87件å\90\8dä¸\8dè\83½è¶\85é\81\8e240å­\97ç¯\80。",
-       "badfilename": "檔案名已被改為「$1」。",
-       "filetype-mime-mismatch": "檔案擴展名 \".$1\" 不配所偵測檔案的MIME類型 ($2)。",
-       "filetype-badmime": "MIME類別「$1」不是容許的檔案格式。",
-       "filetype-bad-ie-mime": "不可以上傳這個檔案,因為 Internet Explorer 會將它偵測為「$1」,它是一種不容許以及有潛在危險性之檔案類型。",
-       "filetype-unwanted-type": "'''\".$1\"'''是一種不需要的檔案類型。\n建議的{{PLURAL:$3|一種|多種}}檔案類型有$2。",
-       "filetype-banned-type": "'''「.$1」'''{{PLURAL:$4|不是允許的檔案類型|是不允許的檔案類型}}。 \n允許的{{PLURAL:$3|檔案類型|檔案類型}} $2。",
-       "filetype-missing": "該檔案名稱並沒有副檔名 (像 \".jpg\")。",
-       "empty-file": "您所提交的檔案為空檔案。",
-       "file-too-large": "您所提交的檔案過大。",
-       "filename-tooshort": "檔案名過短。",
-       "filetype-banned": "此類檔案被禁止。",
-       "verification-error": "檔案未通過驗證。",
-       "hookaborted": "您所嘗試的修改被擴展鈎捨棄。",
-       "illegal-filename": "檔案名非法。",
+       "minlength1": "檔案名稱必須至少一個字元。",
+       "illegalfilename": "檔案名稱 \"$1\" 包含頁面標題所禁止使用的字元。\n請重新命名後再上傳。",
+       "filename-toolong": "æª\94æ¡\88å\90\8d稱ä¸\8då\8f¯è¶\85é\81\8e 240 å\80\8bä½\8då\85\83çµ\84。",
+       "badfilename": "已變更檔案名稱為 \"$1\"。",
+       "filetype-mime-mismatch": "檔案副檔名 \".$1\" 不符合偵測到的檔案 MIME 類型 ($2)。",
+       "filetype-badmime": "不允許上傳 MIME 類型為 \"$1\" 的檔案。",
+       "filetype-bad-ie-mime": "Internet Explorer 會將此檔案類型誤判為 \"$1\",可能造成潛在問題,不允許上傳此類型檔案。",
+       "filetype-unwanted-type": "不建議使用檔案類型 <strong>\".$1\"</strong>。\n建議的檔案類型有 $2。",
+       "filetype-banned-type": "不允許使用檔案類型 <strong>\".$1\"</strong>。\n允許的{{PLURAL:$3|檔案類型|檔案類型}}為 $2。",
+       "filetype-missing": "該檔案沒有副檔名 (如 \".jpg\")。",
+       "empty-file": "您所送出的檔案為空的。",
+       "file-too-large": "您所送出的檔案過大。",
+       "filename-tooshort": "檔案名過短。",
+       "filetype-banned": "此類型檔案已禁止使用。",
+       "verification-error": "æ­¤æª\94æ¡\88æ\9cªé\80\9aé\81\8eé©\97è­\89ã\80\82",
+       "hookaborted": "您所嘗試的修改被擴展套件中止。",
+       "illegal-filename": "不允許使用的檔案名稱。",
        "overwrite": "不允許覆蓋現有檔案。",
-       "unknown-error": "發生未知錯誤。",
+       "unknown-error": "發生不明錯誤。",
        "tmp-create-error": "無法建立臨時檔案。",
-       "tmp-write-error": "臨時檔案寫入發生錯誤。",
-       "large-file": "建議檔案大小不能超過 $1;本檔案大小為 $2。",
-       "largefileserver": "這個檔案的大小比伺服器配置允許的大小還要大。",
-       "emptyfile": "您所上傳的檔案不存在。這可能是由於檔案名鍵入錯誤。請檢查您是否真的要上傳此檔案。",
-       "windows-nonascii-filename": "本維基不支持帶特殊字符的檔案名。",
-       "fileexists": "已存在相同名稱的檔案,如果您無法確定您是否要改變它,請檢查<strong>[[:$1]]</strong>。 [[$1|thumb]]",
-       "filepageexists": "æª\94æ¡\88ç\9a\84æ\8f\8fè¿°é \81é\9d¢  <strong>[[:$1]]</strong> æ\97©å·²å»ºç«\8bï¼\8cä½\86ç\9b®å\89\8d並ç\84¡è\88\87æ­¤ç\9b¸å\90\8cå\90\8d稱ç\9a\84æª\94æ¡\88ã\80\82\næ\82¨è¼¸å\85¥ç\9a\84æ\91\98è¦\81å°\87ä¸\8dæ\9c\83æ\96°å¢\9eè\87³è©²æ\8f\8fè¿°é \81é\9d¢ä¸­ï¼\8c\næ\82¨å¿\85é \88æ\89\8bå\8b\95編輯æ\96°å¢\9eæ\91\98è¦\81è\87³å·²å­\98å\9c¨æ\8f\8fè¿°é \81é\9d¢ä¸­。\n[[$1|thumb]]",
-       "fileexists-extension": "一個相似檔名的檔案已經存在: [[$2|thumb]]\n* 上載檔案的檔名: <strong>[[:$1]]</strong>\n* 現有檔案的檔名: <strong>[[:$2]]</strong>\n請選擇一個不同的名字。",
-       "fileexists-thumbnail-yes": "這個檔案好像是一幅圖片的縮圖版本''(縮圖)''。 [[$1|thumb]]\n請檢查清楚該檔案<strong>[[:$1]]</strong>。\n如果檢查後的檔案是同原本圖片的大小是一樣的話,就不用再上載多一幅縮圖。",
-       "file-thumbnail-no": "æ­¤å\9c\96ç\89\87ç\9a\84æª\94æ¡\88å\90\8d稱以<strong>$1</strong>é\96\8bå§\8bã\80\82å®\83好å\83\8fæ\9f\90å¹\85å\9c\96ç\89\87ç\9a\84縮å°\8fç\89\88æ\9c¬''ï¼\88縮å\9c\96ï¼\89''ã\80\82\nå¦\82æ\9e\9c{{GENDER:|ä½ |妳|ä½ }}æ\9c\89該å\9c\96ç\89\87ç\9a\84å®\8cæ\95´å¤§å°\8fç\89\88æ\9c¬ï¼\8cè«\8bä¸\8aè¼\89å®\83ï¼\9bå\90¦å\89\87è«\8bä¿®æ\94¹æª\94å\90\8d。",
-       "fileexists-forbidden": "已存在相同名稱的檔案,且不能覆蓋;請返回並用一個新的名稱來上傳此檔案。[[File:$1|thumb|center|$1]]",
-       "fileexists-shared-forbidden": "å\9c¨å\85±äº«æª\94æ¡\88庫中已å­\98å\9c¨æ­¤å\90\8d稱ç\9a\84æª\94æ¡\88ã\80\82\nå¦\82æ\9e\9c{{GENDER:|ä½ |妳|ä½ }}ä»\8dç\84¶æ\83³å\8e»ä¸\8aè¼\89å®\83ç\9a\84話ï¼\8cè«\8bè¿\94å\9b\9e並ç\94¨ä¸\80å\80\8bæ\96°ç\9a\84å\90\8d稱ä¾\86ä¸\8aå\82³æ­¤æª\94æ¡\88ã\80\82[[File:$1|thumb|center|$1]]",
-       "file-exists-duplicate": "這個檔案是跟以下的{{PLURAL:$1|一|多}}個檔案重覆:",
-       "file-deleted-duplicate": "一個相同名稱的檔案 ([[:$1]]) 在先前刪除過。您應該在重新上傳之前檢查一下該檔案之刪除紀錄。",
-       "file-deleted-duplicate-notitle": "在此之前已有與此相同的檔案已被刪除,並且禁止顯示標題。\n您在重新上傳前,應請求有權力檢視隱藏檔案的使用者重新審查。",
-       "uploadwarning": "上警告",
+       "tmp-write-error": "寫入臨時檔案發生錯誤。",
+       "large-file": "建議的檔案大小上限為 $1;\n此檔案為 $2。",
+       "largefileserver": "此檔案大小超出伺服器設定的允許範圍。",
+       "emptyfile": "您上傳的檔案為空的。\n可能是檔案名輸入錯誤。\n請檢查您是否真的要上傳空檔案。",
+       "windows-nonascii-filename": "本 Wiki 不支援使用特殊符號的檔案名稱。",
+       "fileexists": "已存在相同名稱的檔案,若{{GENDER:|您}}不確定是否要變更它,請檢查 <strong>[[:$1]]</strong>。\n[[$1|thumb]]",
+       "filepageexists": "æ­¤æª\94æ¡\88ç\9a\84æ\8f\8fè¿°é \81é\9d¢ <strong>[[:$1]]</strong> å·²å­\98å\9c¨ï¼\8cä½\86ç\9b®å\89\8dæ²\92æ\9c\89使ç\94¨æ­¤å\90\8d稱ç\9a\84æª\94æ¡\88ã\80\82\næ\82¨å\9c¨æ­¤è¼¸å\85¥ç\9a\84æ\91\98è¦\81ä¸\8dæ\9c\83å\84²å­\98å\88°è©²æ\8f\8fè¿°é \81é\9d¢ï¼\8c\næ\82¨å¿\85é \88æ\89\8bå\8b\95編輯該æ\8f\8fè¿°é \81é\9d¢。\n[[$1|thumb]]",
+       "fileexists-extension": "類似的檔案名稱已存在:[[$2|thumb]]\n* 上傳中的檔案名稱:<strong>[[:$1]]</strong>\n* 已存在的檔案名稱:<strong>[[:$2]]</strong>\n請選擇使用其他名稱。",
+       "fileexists-thumbnail-yes": "此檔案似乎已為縮小的圖片 <em>(縮圖)</em>。\n[[$1|thumb]]\n請檢查檔案 <strong>[[:$1]]</strong>。\n若原始圖片確實為此尺寸,則無須另外上傳縮圖。",
+       "file-thumbnail-no": "æª\94æ¡\88å\90\8d稱以 <strong>$1</strong> ç\82ºé\96\8bé ­ã\80\82\nä¼¼ä¹\8eå·²ç\82ºç¸®å°\8fç\9a\84å\9c\96ç\89\87 <em>(縮å\9c\96)</em>ã\80\82\nè\8b¥æ\82¨æ\9c\89å\8e\9få§\8b大å°\8fç\9a\84å\9c\96ç\89\87ï¼\8cæ\87\89ä¸\8aå\82³å\8e\9få§\8bå\9c\96ç\89\87ï¼\8cå\90¦å\89\87è«\8bè®\8aæ\9b´æª\94å\90\8d稱。",
+       "fileexists-forbidden": "已存在相同名稱的檔案,且無法覆蓋。\n若您仍要上傳此檔案,請返回上一頁並使用其他名稱。\n[[File:$1|thumb|center|$1]]",
+       "fileexists-shared-forbidden": "å\85±ç\94¨æª\94æ¡\88庫中已å­\98å\9c¨æ­¤å\90\8d稱ç\9a\84æª\94æ¡\88ã\80\82\nè\8b¥æ\82¨ä»\8dè¦\81ä¸\8aå\82³æ­¤æª\94æ¡\88ï¼\8cè«\8bè¿\94å\9b\9eä¸\8aä¸\80é \81並使ç\94¨å\85¶ä»\96å\90\8d稱ã\80\82\n[[File:$1|thumb|center|$1]]",
+       "file-exists-duplicate": "此檔案與下列{{PLURAL:$1|一|多}}個檔案重複:",
+       "file-deleted-duplicate": "與此檔案完全相同的檔案 ([[:$1]]) 在先前已被刪除。\n您應在重新上傳之前確認該檔案的刪除日誌。",
+       "file-deleted-duplicate-notitle": "與此檔案完全相同的檔案在先前已被刪除,且禁止顯示該標題。\n您在重新上傳前,應請求有權力檢視隱藏檔案的使用者重新審查。",
+       "uploadwarning": "上警告",
        "uploadwarning-text": "請修改以下的檔案描述並重試。",
        "savefile": "儲存檔案",
-       "uploadedimage": "已上載「[[$1]]」",
-       "overwroteimage": "已經上傳「[[$1]]」的新版本",
-       "uploaddisabled": "上傳己停用。",
-       "copyuploaddisabled": "通過網址上傳功能未開通。",
-       "uploaddisabledtext": "檔案上傳不可用。",
-       "php-uploaddisabledtext": "PHP 檔案上載已經停用。請檢查 file_uploads 設定。",
-       "uploadscripted": "該檔案包含可能被網路瀏覽器錯誤解釋的 HTML 或腳本代碼。",
-       "uploadscriptednamespace": "此 SVG 檔案使用了非法的命名空間 \"$1\"",
-       "uploadinvalidxml": "上載檔案中的XML無法解析。",
-       "uploadvirus": "該æª\94æ¡\88å\8c\85å\90«æ\9c\89ç\97\85æ¯\92ï¼\81\n詳æ\83\85:$1",
-       "uploadjava": "該檔案是 ZIP 檔案,其中包含 Java 的.class 檔案。\n不允許上傳 Java 檔案,是因為他們可能會跳過安全限制。",
+       "uploadedimage": "已上傳 \"[[$1]]\"",
+       "overwroteimage": "已上傳新版本的 \"[[$1]]\"",
+       "uploaddisabled": "己停用上傳。",
+       "copyuploaddisabled": "己停用使用 URL 上傳。",
+       "uploaddisabledtext": "已停用檔案上傳。",
+       "php-uploaddisabledtext": "PHP 已停用檔案上傳。\n請檢查 file_uploads 設定。",
+       "uploadscripted": "此檔案包含可能會被網頁瀏覽器錯誤執行的 HTML 或 Script。",
+       "uploadscriptednamespace": "此 SVG 檔案使用了非法的命名空間 \"$1\"",
+       "uploadinvalidxml": "無法解析已上傳檔案中的 XML。",
+       "uploadvirus": "該æª\94æ¡\88å\90«æ\9c\89ç\97\85æ¯\92ï¼\81\n詳細è³\87è¨\8a:$1",
+       "uploadjava": "該檔案為包含 Java .class 檔案的 ZIP 檔案。\n因 Java 檔案可能跳過安全檢查造成安全性問題,不允許上傳 Java 檔案。",
        "upload-source": "來源檔案",
        "sourcefilename": "來源檔案名稱:",
-       "sourceurl": "來源網址:",
+       "sourceurl": "來源 URL:",
        "destfilename": "目標檔案名稱:",
        "upload-maxfilesize": "檔案大小限制:$1",
        "upload-description": "檔案描述",
        "upload-options": "上傳選項",
-       "watchthisupload": "監視這個檔案",
-       "filewasdeleted": "之前已經有一個同名檔案被上傳後又被刪除了。在上傳此檔案之前您需要檢查$1。",
-       "filename-bad-prefix": "您上傳的檔案名稱是以'''「$1」'''作為開頭,通常這種沒有含意的檔案名稱是由數碼相機中自動編排。請在您的檔案中重新選擇一個更加有意義的檔案名稱。",
+       "watchthisupload": "監視檔案",
+       "filewasdeleted": "先前已有同樣名稱的檔案上傳,後來被刪除。\n您應在上傳此檔案前檢查 $1。",
+       "filename-bad-prefix": "您上傳的檔案名稱以 <strong>\"$1\"</strong> 開頭,是不具任何描述意義的名稱,通常由數位相機自動產生。\n請替您的檔案使用一個更具描述意義的名稱。",
        "upload-success-subj": "上傳成功",
-       "upload-success-msg": "æ\82¨å\9c¨[$2]ç\9a\84ä¸\8aä¼ å·²ç»\8fæ\88\90å\8a\9fï¼\8cå\8f¯ä»¥å\9c¨è¿\99é\87\8cæ\89¾å\88°:[[:{{ns:file}}:$1]]",
+       "upload-success-msg": "æ\82¨å·²æ\88\90å\8a\9f使ç\94¨ [$2] ä¸\8aå\82³æª\94æ¡\88ï¼\8cå\8f¯æ\96¼æ­¤è\99\95å\8f\96å¾\97æª\94æ¡\88:[[:{{ns:file}}:$1]]",
        "upload-failure-subj": "上傳問題",
-       "upload-failure-msg": "您在[$2]的上傳出現了問題:\n\n$1",
+       "upload-failure-msg": "您使用 [$2] 上傳的檔案發生問題:\n\n$1",
        "upload-warning-subj": "上傳警告",
-       "upload-warning-msg": "您自[$2]的上傳出錯。您可以返回[[Special:Upload/stash/$1|上傳表單]]並更正問題。",
-       "upload-proto-error": "協議錯誤",
-       "upload-proto-error-text": "é\81 ç¨\8bä¸\8aå\82³è¦\81æ±\82 URL ä»¥ <code>http://</code> æ\88\96 <code>ftp://</code> é\96\8bé ­。",
+       "upload-warning-msg": "您使用 [$2] 上傳的檔案發生問題。 您可以返回 [[Special:Upload/stash/$1|上傳表單]] 更正此問題。",
+       "upload-proto-error": "通訊協定不正確",
+       "upload-proto-error-text": "é\81 ç«¯ä¸\8aå\82³æª\94æ¡\88é\9c\80è¦\81使ç\94¨ä»¥ <code>http://</code> æ\88\96 <code>ftp://</code> é\96\8bé ­ç\9a\84 URL。",
        "upload-file-error": "內部錯誤",
        "upload-file-error-text": "嘗試在伺服器上建立臨時檔案時發生內部錯誤。\n請連絡 [[Special:ListUsers/sysop|管理員]]。",
-       "upload-misc-error": "未知的上傳錯誤",
-       "upload-misc-error-text": "上傳時發生不明錯誤。\n請檢查您的 URL 位置是否有效且可存取,然後再重試一次。\n如果仍有問題,請聯絡 [[Special:ListUsers/sysop|管理員]]。",
-       "upload-too-many-redirects": "URL 中包含太多重新導向資訊",
+       "upload-misc-error": "不明的上傳錯誤",
+       "upload-misc-error-text": "上傳時發生不明錯誤。\n請檢查您的 URL 是否有效且可存取,然後再重試一次。\n如果仍有問題,請聯絡 [[Special:ListUsers/sysop|管理員]]。",
+       "upload-too-many-redirects": "URL 中包含太多重定向",
        "upload-http-error": "發生 HTTP 錯誤:$1",
-       "upload-copy-upload-invalid-domain": "不允許此網域複製上傳的檔案。",
+       "upload-copy-upload-invalid-domain": "此網域不允許複製上傳的檔案。",
        "backend-fail-stream": "無法傳輸檔案 \"$1\"。",
        "backend-fail-backup": "無法備份檔案 \"$1\"。",
        "backend-fail-notexists": "檔案 $1 不存在。",
        "backend-fail-connect": "無法連結至儲存庫後端 \"$1\"。",
        "backend-fail-internal": "儲存庫後端 \"$1\" 發生了不明的錯誤。",
        "backend-fail-contenttype": "無法辨識儲存於 \"$1\" 的檔案內容類型。",
-       "backend-fail-batchsize": "å­\98å\84²å¾\8c端被給äº\88äº\86ã\80\8c$1ã\80\8d次æª\94æ¡\88 {{PLURAL:$1|æ\93\8dä½\9c}} ï¼\9bé\99\90å\88¶æ\98¯$2次{{PLURAL:$2|操作}}。",
+       "backend-fail-batchsize": "å\84²å­\98庫å¾\8c端使ç\94¨äº\86 $1 å\80\8bæ\89¹æ¬¡æª\94{{PLURAL:$2|æ\93\8dä½\9c}}ï¼\9b系統é\99\90å\88¶ç\82º $2 å\80\8b{{PLURAL:$2|操作}}。",
        "backend-fail-usable": "由於權限不足或目錄/容器遺失,無法讀取或寫入檔案 \"$1\"。",
        "filejournal-fail-dbconnect": "無法連接到儲存庫後端 \"$1\" 的日誌資料庫。",
        "filejournal-fail-dbquery": "無法更新儲存庫後端 \"$1\" 的日誌資料庫。",
        "lockmanager-fail-acquirelock": "無法取得 \"$1\" 的鎖定狀態。",
        "lockmanager-fail-openlock": "無法開啟 \"$1\" 的鎖定檔案。",
        "lockmanager-fail-releaselock": "無法釋放 \"$1\" 的鎖定狀態。",
-       "lockmanager-fail-db-bucket": "不能在$1池中聯繫到足夠鎖數據庫。",
+       "lockmanager-fail-db-bucket": "無法聯繫於清單 $1 中足夠要鎖定資料庫。",
        "lockmanager-fail-db-release": "無法釋放資料庫 $1 的鎖定狀態。",
        "lockmanager-fail-svr-acquire": "無法取得伺服器 $1 的鎖定狀態。",
        "lockmanager-fail-svr-release": "無法釋放伺服器 $1 的鎖定狀態。",
        "uploadstash": "上傳儲藏庫",
        "uploadstash-summary": "此頁面可存取已上傳或還在上傳程序但尚未在 Wiki 公開的檔案,這些檔案除了上傳的使用者本身外,其他人尚無法查看。",
        "uploadstash-clear": "清除儲藏庫檔案",
-       "uploadstash-nofiles": "{{GENDER:|你|妳|你}}沒有儲藏的檔案。",
-       "uploadstash-badtoken": "執行動作失敗,{{GENDER:|你|妳|你}}的編輯資訊可能已經過期,請重新再試。",
+       "uploadstash-nofiles": "沒有儲藏的檔案。",
+       "uploadstash-badtoken": "執行動作失敗,的編輯資訊可能已經過期,請重新再試。",
        "uploadstash-errclear": "清除檔案失敗。",
        "uploadstash-refresh": "更新檔案清單",
-       "invalid-chunk-offset": "無效區塊偏移量",
+       "invalid-chunk-offset": "無效區塊位置",
        "img-auth-accessdenied": "拒絕存取",
-       "img-auth-nopathinfo": "缺少 PATH_INFO。\n您的伺服器環境未傳遞此資訊,\n可能為以 CGI 為基礎並不支持 img_auth。\n詳情請參考 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
-       "img-auth-notindir": "所指定的路徑不在已設定的上傳目錄清單。",
-       "img-auth-badtitle": "無法 \"$1\" 建立有效的標題。",
+       "img-auth-nopathinfo": "缺少 PATH_INFO 參少。\n您的伺服器環境未傳遞此資訊,\n您可能使用 CGI-based 的伺服器,不支援 img_auth。\n請參考 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
+       "img-auth-notindir": "已設定的上傳目錄清單中不存在您指定的路徑。",
+       "img-auth-badtitle": "無法使用 \"$1\" 建立有效的標題。",
        "img-auth-nologinnWL": "您尚未登入,且 \"$1\" 並未在允許清單上。",
        "img-auth-nofile": "檔案 \"$1\" 不存在。",
        "img-auth-isdir": "您正嘗試存取目錄 \"$1\",\n僅允許存取檔案。",
        "filehist-current": "目前",
        "filehist-datetime": "日期/時間",
        "filehist-thumb": "縮圖",
-       "filehist-thumbtext": "於$1的縮圖版本",
+       "filehist-thumbtext": "於 $1 版本的縮圖",
        "filehist-nothumb": "沒有縮圖",
        "filehist-user": "使用者",
        "filehist-dimensions": "尺寸",
        "linkstoimage-more": "超過$1個頁面連接到這個檔案。\n此處只列出首$1個連接到此檔案的頁面。\n您也可以查看[[Special:WhatLinksHere/$2|完整的清單]]。",
        "nolinkstoimage": "沒有頁面連接到本檔案。",
        "morelinkstoimage": "檢視連接到這個檔案的[[Special:WhatLinksHere/$1|更多連結]]。",
-       "linkstoimage-redirect": "$1 (檔案重新導向至) $2",
+       "linkstoimage-redirect": "$1(檔案重定向)$2",
        "duplicatesoffile": "以下 $1 個檔案與此檔案重覆 ([[Special:FileDuplicateSearch/$2|了解詳細資訊]]):",
        "sharedupload": "此檔案來自 $1 且可能被其他專案所使用。",
        "sharedupload-desc-there": "此檔案來自 $1 且可能被其他專案所使用。\n請參考 [$2 檔案描述頁面] 了解進一步資訊。",
        "filepage-nofile-link": "不存在此名稱的檔案,您可以 [$1 上傳]。",
        "uploadnewversion-linktext": "上傳此檔案的新版本",
        "shared-repo-from": "來自 $1",
-       "shared-repo": "一個共用檔案庫",
+       "shared-repo": "共用檔案庫",
        "shared-repo-name-wikimediacommons": "維基共享資源",
-       "upload-disallowed-here": "您不可以覆蓋此檔案。",
+       "upload-disallowed-here": "您無法覆蓋此檔案。",
        "filerevert": "還原 $1",
        "filerevert-legend": "還原檔案",
        "filerevert-intro": "您現正在還原檔案 <strong>[[Media:$1|$1]]</strong> 至 [$4 於 $2 $3 的版本]。",
        "mimesearch-summary": "本頁面可搜尋檔案的 MIME 類型。\n輸入格式:內容類型/子類型,如 <code>image/jpeg</code>。",
        "mimetype": "MIME 類型:",
        "download": "下載",
-       "unwatchedpages": "未監視的頁面",
-       "listredirects": "重新導向頁面清單",
+       "unwatchedpages": "未監視的頁面",
+       "listredirects": "重向頁面清單",
        "listduplicatedfiles": "重複檔案列表",
        "listduplicatedfiles-summary": "以下列表中某檔案之最新版本與其他檔案之最新版本重複。進包含本地檔案",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] 有[[$3|其他 $2 個重複檔案]]。",
        "randomincategory-invalidcategory": "\"$1\" 不是一個有效的分類名稱。",
        "randomincategory-nopages": "[[:Category:$1]]中沒有頁面。",
        "randomincategory-selectcategory": "從分類中獲取隨機頁面:$1 $2",
-       "randomincategory-selectcategory-submit": "å\89\8då¾\80",
-       "randomredirect": "隨機重新導向",
-       "randomredirect-nopages": "在命名空間 \"$1\" 中沒有重新導向頁面。",
+       "randomincategory-selectcategory-submit": "å\9f·è¡\8c",
+       "randomredirect": "隨機重向",
+       "randomredirect-nopages": "在命名空間\"$1\"中沒有任何重定向頁面。",
        "statistics": "統計",
        "statistics-header-pages": "頁面統計",
        "statistics-header-edits": "編輯統計",
        "statistics-header-hooks": "其它統計",
        "statistics-articles": "內容頁面",
        "statistics-pages": "頁面",
-       "statistics-pages-desc": "在 Wiki 上所有的頁面,包含對話頁面、重新導向頁面...等。",
+       "statistics-pages-desc": "在 wiki 上所有的頁面,包括對話頁面、重定向頁面等。",
        "statistics-files": "已經上傳的檔案",
-       "statistics-edits": "自從{{SITENAME}}設定的頁面編輯數",
-       "statistics-edits-average": "每一頁面的平均編輯數",
+       "statistics-edits": "自 {{SITENAME}} 成立以來的頁面編輯數",
+       "statistics-edits-average": "每平均編輯數",
        "statistics-views-total": "檢視總數",
        "statistics-views-total-desc": "不存在頁面和特殊頁面的查看數未計入",
        "statistics-views-peredit": "每次編輯檢視數",
        "statistics-mostpopular": "被查閱次數最多的頁面",
        "pageswithprop": "擁有屬性的頁面",
        "pageswithprop-legend": "有頁面屬性的頁面",
-       "pageswithprop-text": "此頁列出所有頁面使用了特定的頁面屬性。",
+       "pageswithprop-text": "此頁面用來查詢使用了指定屬性的頁面。",
        "pageswithprop-prop": "屬性名稱:",
-       "pageswithprop-submit": "進入",
-       "pageswithprop-prophidden-long": "長文本屬性值已被隱藏($1)",
-       "pageswithprop-prophidden-binary": "已隱藏二進位屬性值($1)",
-       "doubleredirects": "雙重的重新導向頁面",
+       "pageswithprop-submit": "執行",
+       "pageswithprop-prophidden-long": "已隱藏過長的屬性值 ($1)",
+       "pageswithprop-prophidden-binary": "已隱藏二進位屬性值 ($1)",
+       "doubleredirects": "雙重重定向",
        "doubleredirectstext": "這一頁列出所有重定向頁面重定向到另一個重定向頁的頁面。每一行都包含到第一和第二個重定向頁面的連結,以及第二個重定向頁面的目標,通常顯示的都會是\"真正\"的目標頁面,也就是第一個重定向頁面應該指向的頁面。\n<del>已劃去</del>的為已經解決之項目。",
-       "double-redirect-fixed-move": "[[$1]] 已完成移動。\n此頁面已自動更新並重新導向至 [[$2]]。",
+       "double-redirect-fixed-move": "[[$1]] 已完成移動。\n此頁面已自動更新並重向至 [[$2]]。",
        "double-redirect-fixed-maintenance": "作為維護工作自動修復於[[$1]]至[[$2]]之雙重重定向。",
-       "double-redirect-fixer": "重新導向修正器",
-       "brokenredirects": "損壞的重新導向頁面",
-       "brokenredirectstext": "以下的重新導向頁面連結到不存在的頁面:",
+       "double-redirect-fixer": "重定向修正者",
+       "brokenredirects": "損壞的重向頁面",
+       "brokenredirectstext": "以下的重定向頁面均指向不存在的頁面:",
        "brokenredirects-edit": "編輯",
        "brokenredirects-delete": "刪除",
        "withoutinterwiki": "未有語言連結的頁面",
        "fewestrevisions": "最少修訂的頁面",
        "nbytes": "$1 個位元組",
        "ncategories": "$1 個分類",
-       "ninterwikis": "$1 個跨維基",
+       "ninterwikis": "$1 個 Interwiki 連結",
        "nlinks": "$1 個連結",
-       "nmembers": "$1個成員",
-       "nmemberschanged": "$1 → $2個成員",
-       "nrevisions": "$1修訂",
-       "nviews": "$1次瀏覽",
-       "nimagelinks": "用於$1個頁面中",
-       "ntransclusions": "用於$1個頁面中",
-       "specialpage-empty": "這個報告的結果為空。",
+       "nmembers": "$1 個成員",
+       "nmemberschanged": "$1 → $2 個成員",
+       "nrevisions": "$1 次修訂",
+       "nviews": "$1 次檢視",
+       "nimagelinks": "被 $1 個頁面使用",
+       "ntransclusions": "被 $1 個頁面使用",
+       "specialpage-empty": "此報表無查無任何結果。",
        "lonelypages": "孤立頁面",
        "lonelypagestext": "下列頁面尚未被 {{SITENAME}} 中的其它頁面連結或引用。",
        "uncategorizedpages": "待分類頁面",
        "wantedtemplates": "需要的樣版",
        "mostlinked": "最多連結頁面",
        "mostlinkedcategories": "最多連結分類",
-       "mostlinkedtemplates": "最多連結的樣版",
+       "mostlinkedtemplates": "最多被嵌入包含的頁面",
        "mostcategories": "最多分類頁面",
        "mostimages": "最多連結檔案",
-       "mostinterwikis": "最多跨維基頁面",
+       "mostinterwikis": "最多 Interwiki 連結的頁面",
        "mostrevisions": "最多修訂頁面",
        "prefixindex": "所有頁面與字首",
        "prefixindex-namespace": "所有含字首的頁面 ($1 命名空間)",
        "protectedpages-indef": "只顯示無限期的保護頁面",
        "protectedpages-summary": "此頁面列出目前受保護的頁面。 欲查詢受保護標題清單,請參考 [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]。",
        "protectedpages-cascade": "只顯示連鎖的保護頁面",
-       "protectedpages-noredirect": "隱藏重新導向頁面",
+       "protectedpages-noredirect": "隱藏重向頁面",
        "protectedpagesempty": "在這些參數下沒有頁面正在保護。",
        "protectedpages-timestamp": "日期時間",
        "protectedpages-page": "頁面",
        "booksources": "圖書資源",
        "booksources-search-legend": "尋找圖書資源",
        "booksources-isbn": "國際標準書號:",
-       "booksources-go": "送出",
+       "booksources-go": "執行",
        "booksources-text": "以下是一份銷售新書或二手書的列表,並可能有{{GENDER:|你|妳|你}}正尋找的書的進一步訊息:",
        "booksources-invalid-isbn": "提供的ISBN號碼並不正確,請檢查原始複製來源號碼是否有誤。",
        "specialloguserlabel": "操作者:",
        "speciallogtitlelabel": "目標 (標題或使用者):",
        "log": "日誌",
        "all-logs-page": "所有公開日誌",
-       "alllogstext": "綜合顯示 {{SITENAME}} 的上傳、刪除、保護、查封以及站務日誌。",
-       "logempty": "在日誌中不存在匹配項。",
-       "log-title-wildcard": "搜尋以這個文字開始的標題",
-       "showhideselectedlogentries": "顯示/隱藏所選的日誌項目",
+       "alllogstext": "合併顯示所有 {{SITENAME}} 中所有類型的日誌。\n您可以點選下拉式選單選擇日誌的類型,指定使用者名稱 (區分大小寫) 或影響的頁面 (區分大小寫)。",
+       "logempty": "無符合條件的日誌。",
+       "log-title-wildcard": "搜尋以此欄位文字為字首的標題",
+       "showhideselectedlogentries": "顯示/隱藏已選擇的日誌項目",
        "allpages": "所有頁面",
        "nextpage": "下一頁 ($1)",
        "prevpage": "上一頁 ($1)",
        "allpagesto": "顯示從此處結束的頁面:",
        "allarticles": "所有頁面",
        "allinnamespace": "所有頁面 ($1 命名空間)",
-       "allpagessubmit": "提交",
+       "allpagessubmit": "執行",
        "allpagesprefix": "顯示以此為字首頁面:",
        "allpagesbadtitle": "指定的頁面標題無效、包含內部語言或內部 Wiki 的字首。\n它可能包含一個或多個的不能用於標題的字元。",
        "allpages-bad-ns": "{{SITENAME}} 沒有 \"$1\" 命名空間。",
-       "allpages-hide-redirects": "隱藏重新導向頁面",
+       "allpages-hide-redirects": "隱藏重向頁面",
        "cachedspecial-viewing-cached-ttl": "你正在瀏覽本頁的緩存版本,至多可能存在$1的延遲。",
        "cachedspecial-viewing-cached-ts": "您正在閱讀此頁的緩存版本,這可能不是完整的版本。",
        "cachedspecial-refresh-now": "查看最新。",
        "emailnotarget": "收件人不存在或無效的使用者名稱。",
        "emailtarget": "輸入收件人使用者名稱",
        "emailusername": "使用者名稱:",
-       "emailusernamesubmit": "提交",
+       "emailusernamesubmit": "送出",
        "email-legend": "發送電子郵件給另一位 {{SITENAME}} 使用者",
        "emailfrom": "寄件人:",
        "emailto": "收件人:",
        "emailsent": "電子郵件已發送",
        "emailsenttext": "您的電子郵件訊息已經送出。",
        "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"發送信件給使用者\" 功能寄給 $2。",
-       "usermessage-summary": "給系統消息。",
-       "usermessage-editor": "系統界面",
-       "watchlist": "監視列表",
-       "mywatchlist": "監視列表",
-       "watchlistfor2": "$1的監視列表 $2",
-       "nowatchlist": "您的監視列表為空。",
-       "watchlistanontext": "請$1以檢視或編輯您的監視列表。",
-       "watchnologin": "未登入",
-       "addwatch": "加至監視列表",
-       "addedwatchtext": "已將頁面 \"[[:$1]]\" 加入您的 [[Special:Watchlist|監視列表]]。若此頁面及其對話頁面有任何更動都會在監視列表中列出。",
-       "removewatch": "停止監視",
-       "removedwatchtext": "[[:$1]]已經從[[Special:Watchlist|您的監視頁面]]中移除。",
+       "usermessage-summary": "留給系統訊息。",
+       "usermessage-editor": "系統訊息",
+       "watchlist": "監視清單",
+       "mywatchlist": "監視清單",
+       "watchlistfor2": "$1 的監視清單 $2",
+       "nowatchlist": "您的監視清單沒有任何項目。",
+       "watchlistanontext": "請 $1 以檢視或編輯您的監視清單。",
+       "watchnologin": "尚未登入",
+       "addwatch": "新增至監視清單",
+       "addedwatchtext": "已於[[Special:Watchlist|您的監視清單]]新增頁面 \"[[:$1]]\"。\n未來對此頁面及其關聯的對話頁面的變更將會在此清單中列出。",
+       "addedwatchtext-short": "已於您的監視清單新增頁面 \"$1\"。",
+       "removewatch": "從監視清單中移除",
+       "removedwatchtext": "已於[[Special:Watchlist|您的監視清單]]移除頁面 \"[[:$1]]\"。",
+       "removedwatchtext-short": "已於您的監視清單移除頁面 \"$1\"。",
        "watch": "監視",
-       "watchthispage": "ç\9b£è¦\96æ\9c¬é \81",
+       "watchthispage": "ç\9b£è¦\96æ­¤é \81é\9d¢",
        "unwatch": "取消監視",
        "unwatchthispage": "停止監視",
-       "notanarticle": "不是頁面",
+       "notanarticle": "非內容的頁面",
        "notvisiblerev": "最後一次由其他使用者所作的修訂已經被刪除",
-       "watchlist-details": "您的監視列表上共有 $1 個頁面 (不包含對話頁面)。",
-       "wlheader-enotif": "已經啟動電子郵件通知功能。",
-       "wlheader-showupdated": "在{{GENDER:|你|妳|你}}上次檢視後有被修改過的頁面會顯示為'''粗體'''。",
-       "wlnote2": "以下是新近<strong>$1</strong>小時的更改,截至$2 $3。",
-       "wlshowlast": "顯示最近$1小時;$2天;$3的修改。",
-       "watchlist-options": "監視列表選項",
+       "watchlist-details": "您的監視清單上共有 $1 個頁面 (不包含對話頁面)。",
+       "wlheader-enotif": "已開啟電子郵件通知功能。",
+       "wlheader-showupdated": "在您最後一次檢視過後修改的頁面會以 <strong>粗體</strong> 顯示。",
+       "wlnote2": "以下為截至 $2 $3 最近 <strong>$1</strong> 小時的變更。",
+       "wlshowlast": "顯示最近 $1 小時,$2 天,$3 的修改",
+       "watchlist-options": "監視清單選項",
        "watching": "正在監視...",
        "unwatching": "正在停止監視...",
-       "watcherrortext": "更改「$1」的監視列表設定時發生錯誤。",
-       "enotif_reset": "將所有頁面標為已閱讀",
+       "watcherrortext": "變更 \"$1\" 的監視清單設定時發生錯誤。",
+       "enotif_reset": "標記所有頁面為已檢視",
        "enotif_impersonal_salutation": "{{SITENAME}} 使用者",
-       "enotif_subject_deleted": "{{SITENAME}}的「$1」頁面被$2刪除",
-       "enotif_subject_created": "{{SITENAME}}  $2 已建立頁面 $1",
-       "enotif_subject_moved": "{{SITENAME}}的「$1」頁面被$2移動",
-       "enotif_subject_restored": "{{SITENAME}}的「$1」頁面被$2恢復",
-       "enotif_subject_changed": "{{SITENAME}}的「$1」頁面被$2修改",
-       "enotif_body_intro_deleted": "{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2刪除,請見$3。",
-       "enotif_body_intro_created": "{{SITENAME}}  $2 已建立頁面 $1 於 $PAGEEDITDATE,請參考目前的版本 $3。",
-       "enotif_body_intro_moved": "{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2移動,請見$3瀏覽當前版本。",
-       "enotif_body_intro_restored": "{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2恢復,請見$3瀏覽當前版本。",
-       "enotif_body_intro_changed": "{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2修改,請見 $3 瀏覽當前版本。",
-       "enotif_lastvisited": "請參閱 $1 檢視你上次訪問後的所有更改。",
-       "enotif_lastdiff": "請參閱 $1 檢視該更改。",
+       "enotif_subject_deleted": "{{SITENAME}} $2 已刪除頁面 $1",
+       "enotif_subject_created": "{{SITENAME}} $2 已建立頁面 $1",
+       "enotif_subject_moved": "{{SITENAME}} $2 已移動頁面 $1",
+       "enotif_subject_restored": "{{SITENAME}} $2 已還原頁面 $1",
+       "enotif_subject_changed": "{{SITENAME}} $2 已修改頁面 $1",
+       "enotif_body_intro_deleted": "{{SITENAME}} $2 已刪除頁面 $1 於 $PAGEEDITDATE,詳見 $3。",
+       "enotif_body_intro_created": "{{SITENAME}} $2 已建立頁面 $1 於 $PAGEEDITDATE,詳見目前的修訂 $3。",
+       "enotif_body_intro_moved": "{{SITENAME}} $2 已移動頁面 $1 於 $PAGEEDITDATE,詳見目前的修訂 $3。",
+       "enotif_body_intro_restored": "{{SITENAME}} $2 已還原頁面 $1 於 $PAGEEDITDATE,詳見目前的修訂 $3。",
+       "enotif_body_intro_changed": "{{SITENAME}} $2 已修改頁面 $1 於 $PAGEEDITDATE,詳見目前的修訂 $3。",
+       "enotif_lastvisited": "請參考 $1 檢視自您上次檢視後所有的變更。",
+       "enotif_lastdiff": "請參考 $1 檢視此變更。",
        "enotif_anon_editor": "匿名使用者 $1",
-       "enotif_body": "$WATCHINGUSERNAME 您好,\n\n$PAGEINTRO $NEWPAGE\n\n編輯摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n聯絡此編輯者:\n\n信箱:$PAGEEDITOR_EMAIL\n本站:$PAGEEDITOR_WIKI\n\n在您檢視該頁面之前,接下來的變更系統不會再向您發出通知。您也可以在監視列表中重設您所有監視頁面的通知狀態。\n\n{{SITENAME}} 通知系統啟\n\n--\n更改您的電子郵件通知設定,請至:\n{{canonicalurl:{{#special:Preferences}}}}\n\n更改您的監視列表設定,請至:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\n從監視列表中刪除此頁面,請至:\n$UNWATCHURL\n\n回函並取得更多協助:\n$HELPPAGE",
+       "enotif_body": "$WATCHINGUSERNAME 您好,\n\n$PAGEINTRO $NEWPAGE\n\n編輯摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n編輯者聯絡方式:\n信箱:$PAGEEDITOR_EMAIL\n本站:$PAGEEDITOR_WIKI\n\n在您檢視該頁面之前,接下來的變更系統不會再向您發出通知。您也可以在監視清單中重設您所有監視頁面的通知狀態。\n\n{{SITENAME}} 通知系統啟\n\n--\n更改您的電子郵件通知設定,請至:\n{{canonicalurl:{{#special:Preferences}}}}\n\n更改您的監視清單設定,請至:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\n從監視清單中刪除此頁面,請至:\n$UNWATCHURL\n\n回函並取得進一步協助:\n$HELPPAGE",
        "created": "建立了",
        "changed": "更改",
        "deletepage": "刪除頁面",
        "confirm": "確認",
-       "excontent": "內容為: 「$1」",
-       "excontentauthor": "內容為:「$1」(而且唯一貢獻者為「[[Special:Contributions/$2|$2]]」)",
-       "exbeforeblank": "被清空前的內容為:「$1」",
-       "delete-confirm": "刪除「$1」",
+       "excontent": "內容為:\"$1\"",
+       "excontentauthor": "內容為:\"$1\" (且僅有一位貢獻者 \"[[Special:Contributions/$2|$2]]\")",
+       "exbeforeblank": "被清空前的內容為:\"$1\"",
+       "delete-confirm": "刪除 \"$1\"",
        "delete-legend": "刪除",
-       "historywarning": "'''警告: '''您將要刪除的頁內含有約$1次{{PLURAL:$1|修訂}}的歷史:",
-       "confirmdeletetext": "您即將刪除一個頁面或圖片以及其歷史。\n請確定您要進行此項操作,並且了解其後果,同時您的行為符合[[{{MediaWiki:Policy-url}}]]。",
+       "historywarning": "<strong>警告:</strong>您正要刪除的頁面內含有約 $1 次{{PLURAL:$1|的修訂}}歷史:",
+       "confirmdeletetext": "您正要刪除一個頁面或圖片以及其所有歷史。\n請確定您了解要進行此項操作所造成的後果,同時確認您的行為符合[[{{MediaWiki:Policy-url}}]] 規範。",
        "actioncomplete": "操作完成",
        "actionfailed": "操作失敗",
-       "deletedtext": "「$1」已經被刪除。最近刪除的記錄請參見$2。",
-       "dellogpage": "刪除紀錄",
-       "dellogpagetext": "以下是最近的刪除的列表。",
-       "deletionlog": "刪除紀錄",
+       "deletedtext": "已刪除 \"$1\"。\n請參考 $2 檢視最近的刪除記錄。",
+       "dellogpage": "刪除日誌",
+       "dellogpagetext": "以下為最近刪除記錄的列表。",
+       "deletionlog": "刪除日誌",
        "reverted": "還原到較早的版本",
-       "deletecomment": "理由:",
-       "deleteotherreason": "其它/附加的理由:",
+       "deletecomment": "原因:",
+       "deleteotherreason": "其它/額外的原因:",
        "deletereasonotherlist": "其它理由",
-       "deletereason-dropdown": "*常見的刪除原因\n** 濫發廣告訊息\n** 破壞資料\n** 侵犯版權\n** 作者請求\n** 損壞的重新導向頁面",
+       "deletereason-dropdown": "* 常見的刪除原因\n** 濫發廣告訊息\n** 破壞\n** 侵犯版權\n** 作者請求\n** 損壞的重定向",
        "delete-edit-reasonlist": "編輯刪除理由",
        "delete-toobig": "這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除此類頁面的動作已經被限制,以防止在{{SITENAME}}上的意外擾亂。",
        "delete-warning-toobig": "這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除它可能會擾亂{{SITENAME}}的資料庫操作;在繼續此動作前請小心。",
-       "deleting-backlinks-warning": "'''警告:'''您要刪除的頁面有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他頁面]]連接至此或包含此頁面。",
+       "deleting-backlinks-warning": "<strong>警告:</strong>您正要刪除的頁面有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他頁面]]連結或引用。",
        "rollback": "還原編輯",
        "rollback_short": "還原",
        "rollbacklink": "還原",
        "sessionfailure-title": "登入資訊失敗",
        "sessionfailure": "似乎您的登錄會話有問題;\n為了防止會話劫持,這個操作已經被取消。\n請返回先前的頁面,重新載入該頁面,然後重試。",
        "protectlogpage": "保護日誌",
-       "protectlogtext": "ä¸\8bé\9d¢æ\98¯é \81é\9d¢ä¿\9dè­·ä¿®æ\94¹å\88\97表ã\80\82\nè«\8bå\8f\83è\80\83[[Special:ProtectedPages|ä¿\9dè­·é \81é\9d¢æ¸\85å\96®]]以檢è¦\96ç\9b®å\89\8dé\80²è¡\8cç\9a\84é \81é\9d¢ä¿\9dè­·。",
-       "protectedarticle": "已保護「[[$1]]」",
-       "modifiedarticleprotection": "已變更「[[$1]]」的保護等級",
-       "unprotectedarticle": "已解除「[[$1]]」的保護",
-       "movedarticleprotection": "已將「[[$2]]」的保護設定移動至「[[$1]]」",
-       "protect-title": "變更「$1」的保護等級",
-       "protect-title-notallowed": "檢視「$1」的保護等級",
-       "prot_1movedto2": "[[$1]]移動到[[$2]]",
+       "protectlogtext": "以ä¸\8bç\82ºè®\8aæ\9b´é \81é\9d¢ä¿\9dè­·ç\9a\84å\88\97表ã\80\82\nè«\8bå\8f\83è\80\83 [[Special:ProtectedPages|å\8f\97ä¿\9dè­·é \81é\9d¢å\88\97表]] æª¢è¦\96ç\9b®å\89\8då\8f\97ä¿\9dè­·é \81é\9d¢。",
+       "protectedarticle": "已保護 \"[[$1]]\"",
+       "modifiedarticleprotection": "已變更 \"[[$1]]\" 的保護層級",
+       "unprotectedarticle": "已解除 \"[[$1]]\" 的保護",
+       "movedarticleprotection": "已移動 \"[[$2]]\" 的保護設定至 \"[[$1]]\"",
+       "protect-title": "變更 \"$1\" 的保護層級",
+       "protect-title-notallowed": "檢視 \"$1\" 的保護層級",
+       "prot_1movedto2": "已移動 [[$1]] 至 [[$2]]",
        "protect-badnamespace-title": "不可保護的命名空間",
-       "protect-badnamespace-text": "這個命名空間內的頁面無法設為保護。",
-       "protect-norestrictiontypes-text": "此頁不可被保護因沒有任何限制可用。",
+       "protect-badnamespace-text": "命名空間內的頁面無法設為保護。",
+       "protect-norestrictiontypes-text": "無法保護此頁面,無可限制的項目。",
        "protect-norestrictiontypes-title": "不可保護的頁面",
        "protect-legend": "確認保護",
-       "protectcomment": "理由:",
-       "protectexpiry": "到期:",
-       "protect_expiry_invalid": "輸入的終止時間無效。",
-       "protect_expiry_old": "終止時間已過去。",
+       "protectcomment": "原因:",
+       "protectexpiry": "期限:",
+       "protect_expiry_invalid": "無效的期限。",
+       "protect_expiry_old": "期限已結束。",
        "protect-unchain-permissions": "解除鎖定更多的保護選項",
-       "protect-text": "{{GENDER:|你|妳|你}}可以在這裡瀏覽和修改對頁面'''$1'''的保護級別。",
-       "protect-locked-blocked": "您不能在被封鎖期間更改保護級別。\n以下為 <strong>$1</strong> 頁面目前的設定:",
-       "protect-locked-dblock": "在資料庫鎖定時無法更改保護級別。\n以下是'''$1'''現時的保護級別:",
-       "protect-locked-access": "您的賬戶權限不能修改保護級別。\n以下是'''$1'''現時的保護級別:",
-       "protect-cascadeon": "以下$1個頁面包含着本頁面的同時,啟動了連鎖保護,因此本頁面目前也被保護。您可以設定本頁面的保護級別,但這並不會對連鎖保護有所影響。",
+       "protect-text": "您可以在此檢視與修改頁面 <strong>$1</strong> 的保護層級。",
+       "protect-locked-blocked": "頁面被封鎖,無法更改保護層級。\n以下為頁面 <strong>$1</strong> 目前的設定:",
+       "protect-locked-dblock": "資料庫被鎖定,無法更改保護層級。\n以下為頁面 <strong>$1</strong> 目前的設定:",
+       "protect-locked-access": "您的帳號沒有權限更改保護層級。\n以下為頁面 <strong>$1</strong> 目前的設定:",
+       "protect-cascadeon": "此頁面目前受保護,因頁面被下列啟動連鎖保護的 $1 個頁面引用。\n更改此頁面的保護層級不會影響連鎖保護的作用。",
        "protect-default": "允許所有使用者",
        "protect-fallback": "僅允許有 \"$1\" 權限的使用者",
        "protect-level-autoconfirmed": "僅允許已自動確認的使用者",
        "protect-level-sysop": "僅允許管理員",
-       "protect-summary-desc": "[$1=$2]($3)",
+       "protect-summary-desc": "[$1=$2] ($3)",
        "protect-summary-cascade": "連鎖",
-       "protect-expiring": "期限至 $1 (UTC)",
-       "protect-expiring-local": "$1到期",
+       "protect-expiring": "期限至 $1 (UTC)",
+       "protect-expiring-local": "期限至 $1",
        "protect-expiry-indefinite": "無限期",
        "protect-cascade": "保護本頁中包含的頁面 (連鎖保護)",
-       "protect-cantedit": "您無法更改這個頁面的保護等級,因為您沒有權限去編輯它。",
+       "protect-cantedit": "您沒有編輯權限,無法更改此頁面的保護層級。",
        "protect-othertime": "其它時間:",
        "protect-othertime-op": "其它時間",
-       "protect-existing-expiry": "現時到期之時間: $2 $3",
-       "protect-otherreason": "其它/附加的理由:",
+       "protect-existing-expiry": "已設定期限:$2 $3",
+       "protect-otherreason": "其它/額外的原因:",
        "protect-otherreason-op": "其它理由",
-       "protect-dropdown": "*通用保護理由\n** 過量的破壞\n** 過量的灌水\n** 反生產性編輯戰\n** 高流量頁面",
-       "protect-edit-reasonlist": "編輯保護理由",
+       "protect-dropdown": "*常見的保護原因\n** 過度的破壞\n** 過多垃圾訊息\n** 反生產性的編輯戰\n** 高流量頁面",
+       "protect-edit-reasonlist": "編輯保護原因",
        "protect-expiry-options": "1 小時:1 hour,1 天:1 day,1 週:1 week,2 週:2 weeks,1 個月:1 month,3 個月:3 months,6 個月:6 months,1 年:1 year,不限期:infinite",
        "restriction-type": "權限:",
-       "restriction-level": "限制級別:",
+       "restriction-level": "限制層級:",
        "minimum-size": "大小下限",
        "maximum-size": "大小上限:",
        "pagesize": "(位元組)",
        "viewdeletedpage": "檢視已刪除的頁面",
        "undeletepagetext": "以下的$1個頁面已經被刪除,但依然在檔案中並可以被恢復。\n檔案庫可能被定時清理。",
        "undelete-fieldset-title": "還原修訂",
-       "undeleteextrahelp": "恢復整個頁面時,請清除所有複選框後按 '''''{{int:undeletebtn}}''''' 。\n恢復特定版本時,請選擇相應版本前的複選框後按'''''{{int:undeletebtn}}''''' 。\n按 '''''{{int:undeletereset}}''''' 將清除評論內容及所有複選框。",
-       "undeleterevisions": "$1版本存檔",
+       "undeleteextrahelp": "若要還原所有的頁面歷史,請取消勾選所有核選方塊並點選 <strong><em>{{int:undeletebtn}}</em></strong>。\n若要還原指定的頁面歷史,請勾選要還原的修訂核選方塊並點選 <strong><em>{{int:undeletebtn}}</em></strong>。",
+       "undeleterevisions": "已封存 $1 個修訂",
        "undeletehistory": "若您還原該頁面,所有的修訂歷史也會一併還原。\n若刪除之後已有使用相同名稱建立的新頁面,還原的修訂歷史會出現在此頁面之前的歷史中。",
-       "undeleterevdel": "如果把最新修訂部份刪除,反刪除便無法進行。如果遇到這種情況,您必須反選或反隱藏最新已刪除的修訂。",
-       "undeletehistorynoadmin": "此頁面已經被刪除。\n以下為刪除原因的摘要並包含刪除之前有那些使用者曾編輯此頁面。\n只有管理者可以檢視實際被刪除的修訂內容。",
+       "undeleterevdel": "若最新頁面或檔案修訂被部份刪除,將無法執行取消刪除的動作。\n這種情況您必須取選勾選或取消隱藏已刪除的最新修訂。",
+       "undeletehistorynoadmin": "已刪除此頁面。\n以下摘要顯示刪除原因與刪除前所有編輯過此頁面的使用者詳細資料。\n只有管理員可檢視實際被刪除的文字內容。",
        "undelete-revision": "由 $3 刪除的 $1 (於 $4 $5) 修訂:",
-       "undeleterevision-missing": "此版本的內容不正確或已經遺失。可能連結錯誤、被移除或已經被恢復。",
-       "undelete-nodiff": "æ\89¾ä¸\8då\88°å\85\88å\89\8dç\9a\84ä¿®è¨\82ç\89\88æ\9c¬。",
+       "undeleterevision-missing": "無效或遺失的修訂。\n您可能使用了錯誤的連結,或該修訂已從封存中還原或刪除。",
+       "undelete-nodiff": "æ\9f¥ç\84¡å\85\88å\89\8dç\9a\84ä¿®è¨\82。",
        "undeletebtn": "還原",
-       "undeletelink": "檢視還原",
+       "undeletelink": "檢視/還原",
        "undeleteviewlink": "檢視",
        "undeleteinvert": "反向選擇",
-       "undeletecomment": "理由:",
-       "undeletedrevisions": "$1個修訂版本已經恢復",
-       "undeletedrevisions-files": "$1 個版本和 $2 個檔案被恢復",
-       "undeletedfiles": "$1 個檔案被恢復",
-       "cannotundelete": "恢復失敗:$1",
-       "undeletedpage": "'''$1已經被恢復''' 請參考[[Special:Log/delete|刪除日誌]]來查詢刪除及恢復記錄。",
-       "undelete-header": "如要查詢最近的記錄請參閱[[Special:Log/delete|刪除日誌]]。",
-       "undelete-search-title": "搜已刪除頁面",
+       "undeletecomment": "原因:",
+       "undeletedrevisions": "已還原 $1 個修訂",
+       "undeletedrevisions-files": "已還原 $1 個修訂和 $2 個檔案",
+       "undeletedfiles": "已還原 $1 個檔案",
+       "cannotundelete": "取消刪除失敗:\n$1",
+       "undeletedpage": "<strong>已還原 $1</strong>\n\n請參考 [[Special:Log/delete|刪除日誌]] 以查詢最近刪除及還原的記錄。",
+       "undelete-header": "請參考 [[Special:Log/delete|刪除日誌]] 查詢最近刪除的頁面。",
+       "undelete-search-title": "搜已刪除頁面",
        "undelete-search-box": "搜尋已刪除頁面",
-       "undelete-search-prefix": "顯示頁面自:",
+       "undelete-search-prefix": "顯示頁面開始自:",
        "undelete-search-submit": "搜尋",
-       "undelete-no-results": "刪除記錄裡沒有符合的結果。",
-       "undelete-filename-mismatch": "不能刪除帶有時間截記的檔案修訂 $1: 檔案不匹配",
-       "undelete-bad-store-key": "不能刪除帶有時間截記的檔案修訂 $1: 檔案於刪除前遺失。",
-       "undelete-cleanup-error": "刪除無用的存檔檔案「$1」時發生錯誤。",
-       "undelete-missing-filearchive": "由於檔案存檔 ID $1 不在資料庫中,不能在檔案存檔中恢復。它可能已經反刪除了。",
-       "undelete-error": "恢復已刪除頁面時出錯",
-       "undelete-error-short": "å\8f\8då\88ªé\99¤æª\94æ¡\88æ\99\82ç\99¼ç\94\9fé\8c¯èª¤: $1",
-       "undelete-error-long": "當進行反刪除檔案時遇到錯誤:\n\n$1",
-       "undelete-show-file-confirm": "確定要檢視在 $2 $3 ,\"<nowiki>$1</nowiki>\"的已刪除修訂版本嗎?",
+       "undelete-no-results": "刪除記錄裡沒有符合的頁面。",
+       "undelete-filename-mismatch": "無法取消刪除時間為 $1 的檔案修訂:檔案名稱不符。",
+       "undelete-bad-store-key": "無法取消刪除時間為 $1 的檔案修訂:在刪除前檔案已遺失。",
+       "undelete-cleanup-error": "刪除未使用的封存檔案 \"$1\" 時發生錯誤。",
+       "undelete-missing-filearchive": "資料庫不存在檔案封存 ID $1,無法還原檔案。\n該檔案可能已經取消刪除。",
+       "undelete-error": "取消刪除頁面錯誤",
+       "undelete-error-short": "å\8f\96æ¶\88å\88ªé\99¤æª\94æ¡\88é\8c¯èª¤ï¼\9a$1",
+       "undelete-error-long": "取消刪除檔案時發生錯誤:\n\n$1",
+       "undelete-show-file-confirm": "您確定要檢視檔案 \"<nowiki>$1</nowiki>\" 於 $2 $3 已刪除的修訂?",
        "undelete-show-file-submit": "是",
        "namespace": "命名空間:",
        "invert": "反向選擇",
-       "tooltip-invert": "勾選此核選方塊以隱藏在已選擇命名空間中的頁面變更 (若有勾擇相關命名空間)",
+       "tooltip-invert": "勾選此核選方塊以隱藏選擇命名空間中的頁面變更 (若勾選相關命名空間,則會同時隱藏相關命名空間)",
        "namespace_association": "相關命名空間",
-       "tooltip-namespace_association": "勾選此核選方塊以包含選擇命名空間相關的對話或主題命名空間",
+       "tooltip-namespace_association": "勾選此核選方塊以包含選擇命名空間相關的對話或主題命名空間",
        "blanknamespace": "(主要)",
        "contributions": "{{GENDER:$1|使用者}}貢獻",
        "contributions-title": "$1 的使用者貢獻",
        "sp-contributions-newonly": "僅顯示建立頁面之編輯",
        "sp-contributions-submit": "搜尋",
        "whatlinkshere": "連入頁面",
-       "whatlinkshere-title": "連結到「$1」的頁面",
+       "whatlinkshere-title": "連結到 \"$1\" 的頁面",
        "whatlinkshere-page": "頁面:",
        "linkshere": "以下頁面連結到[[:$1]]:",
        "nolinkshere": "沒有頁面連結到[[:$1]]。",
        "nolinkshere-ns": "已選擇的命名空間中沒有頁面連結到 [[:$1]]。",
-       "isredirect": "重新導向頁面",
-       "istemplate": "å\8c\85å\90«",
+       "isredirect": "重向頁面",
+       "istemplate": "å¼\95ç\94¨",
        "isimage": "檔案連結",
        "whatlinkshere-prev": "前 $1 筆",
        "whatlinkshere-next": "後 $1 筆",
        "whatlinkshere-links": "← 連入",
-       "whatlinkshere-hideredirs": "$1 重新導向頁面",
-       "whatlinkshere-hidetrans": "$1嵌入",
-       "whatlinkshere-hidelinks": "$1連結",
-       "whatlinkshere-hideimages": "$1檔案連結",
+       "whatlinkshere-hideredirs": "$1 重向頁面",
+       "whatlinkshere-hidetrans": "$1 引用",
+       "whatlinkshere-hidelinks": "$1 連結",
+       "whatlinkshere-hideimages": "$1 檔案連結",
        "whatlinkshere-filters": "搜尋",
        "autoblockid": "自動查封 #$1",
        "block": "封鎖使用者",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*常見的封鎖原因\n** 填寫不實資訊\n** 刪除頁面內容\n** 散佈外部廣告連結\n** 在頁面填寫無意義文字\n** 無禮的行為、攻擊/騷擾別人\n** 濫用多個帳號\n** 使用不受歡迎的使用者名稱",
        "ipb-hardblock": "避免使用此 IP 位址登入的使用者編輯",
-       "ipbcreateaccount": "阻止創建新賬號",
-       "ipbemailban": "避免使用者發送電子郵件",
+       "ipbcreateaccount": "禁止建立帳號",
+       "ipbemailban": "禁止使用者發送電子郵件",
        "ipbenableautoblock": "自動封鎖此使用者最後使用的 IP 位置,以及所有之後嘗試編輯使用的 IP 位址",
        "ipbsubmit": "查封該地址",
        "ipbother": "其它時間:",
        "ipb-disableusertalk": "避免在封鎖此使用者的期間編輯自己的對話頁面",
        "ipb-change-block": "使用現有設定重新封鎖使用者",
        "ipb-confirm": "確認封鎖",
-       "badipaddress": "無效IP地址",
+       "badipaddress": "無效的 IP 位址",
        "blockipsuccesssub": "封鎖成功",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] 已經被封鎖。<br />\n請參考 [[Special:BlockList|封鎖清單]] 以檢查目前的封鎖。",
        "ipb-blockingself": "您要封鎖自己!您確定要這樣做嗎?",
        "ipb-confirmhideuser": "您要封鎖一位使用者並且 \"隱藏\" 該使用者,這會禁止顯示所有出現在清單及記錄中的使用者名稱。\n你確定要這樣做?",
-       "ipb-confirmaction": "如果您確信這樣做,請檢查底部的「{{int:ipb-confirm}}」部分。",
+       "ipb-confirmaction": "若您確定要這樣做,請檢查下方的 \"{{int:ipb-confirm}}\" 欄位。",
        "ipb-edit-dropdown": "編輯封鎖原因",
        "ipb-unblock-addr": "解除封鎖 $1",
        "ipb-unblock": "解除封鎖使用者名稱或 IP 位址",
        "unblock-hideuser": "由於此使用者名稱已被設為隱藏,您無法解除封鎖這個使用者。",
        "ipb_cant_unblock": "錯誤:查無封鎖 ID $1,可能已被解除封鎖。",
        "ipb_blocked_as_range": "錯誤:IP 位址 $1 並不是直接被封鎖,因此無法直接解除封鎖。\n此 IP 位址在 $2 的封鎖範圍之中,您可以解決此範圍的封鎖。",
-       "ip_range_invalid": "無效的IP範圍。",
+       "ip_range_invalid": "無效的 IP 範圍。",
        "ip_range_toolarge": "不允許封鎖範圍大於 /$1。",
        "proxyblocker": "代理封鎖器",
        "proxyblockreason": "因您的 IP 位址是開放代理伺服器,已被封鎖。\n請聯繫您的網路服務供應商或您所在組織的技術支援,告知他們此嚴重的安全性問題。",
        "cant-see-hidden-user": "您欲封鎖的使用者已經被封鎖並且隱藏。\n您沒有隱藏使用者的權限,您無法檢視或編輯該使用者的封鎖狀態。",
        "ipbblocked": "因您已被封鎖,故無法封鎖或解除封鎖其他使用者。",
        "ipbnounblockself": "不允許解除封鎖自己。",
-       "lockdb": "禁止更改資料庫",
-       "unlockdb": "開放更改資料庫",
+       "lockdb": "鎖定資料庫",
+       "unlockdb": "解除鎖定資料庫",
        "lockdbtext": "鎖定資料庫將會中止所有使用者編輯頁面、更改偏好設定、編輯監視清單與其他需要更動到資料庫的操作。\n請確認您是否要這樣做,並在維護作業結束時解除資料庫的鎖定。",
-       "unlockdbtext": "取消鎖定資料庫會恢復所有使用者編輯頁面、更改偏好設定、編輯監視清單與其他需要更動到資料庫的操作。\n請確認您是否要這樣做。",
-       "lockconfirm": "是的,我確實想要封鎖資料庫。",
-       "unlockconfirm": "是的,我確實想要開放資料庫。",
-       "lockbtn": "資料庫上鎖",
-       "unlockbtn": "開放資料庫",
-       "locknoconfirm": "您並沒有勾選確認按鈕。",
-       "lockdbsuccesssub": "資料庫成功上鎖",
-       "unlockdbsuccesssub": "資料庫開放",
-       "lockdbsuccesstext": "{{SITENAME}}資料庫已經上鎖。\n<br />請記住在維護完成後重新開放資料庫。",
-       "unlockdbsuccesstext": "{{SITENAME}}資料庫重新開放。",
-       "lockfilenotwritable": "資料庫鎖定檔案不可寫入。要鎖定和解鎖資料庫,該檔案必須對網路伺服器可寫入。",
-       "databasenotlocked": "資料庫沒有鎖定。",
-       "lockedbyandtime": "在$2的$3由$1",
-       "move-page": "移動$1",
+       "unlockdbtext": "解除鎖定資料庫會恢復所有使用者編輯頁面、更改偏好設定、編輯監視清單與其他需要更動到資料庫的操作。\n請確認您是否要這樣做。",
+       "lockconfirm": "是的,我想要鎖定資料庫。",
+       "unlockconfirm": "是的,我想要解除鎖定資料庫。",
+       "lockbtn": "鎖定資料庫",
+       "unlockbtn": "解除鎖定資料庫",
+       "locknoconfirm": "您未勾選確認核選方塊。",
+       "lockdbsuccesssub": "已成功鎖定資料庫",
+       "unlockdbsuccesssub": "已移除資料庫鎖定",
+       "lockdbsuccesstext": "已鎖定資料庫。<br />\n請記得在維護完成後 [[Special:UnlockDB|解除鎖定]] 資料庫。",
+       "unlockdbsuccesstext": "已解除鎖定資料庫。",
+       "lockfilenotwritable": "沒有權限寫入資料庫鎖定檔案。\n網頁伺服器需要該檔案的寫入權限以鎖定和解除鎖定資料庫。",
+       "databasenotlocked": "資料庫尚未鎖定。",
+       "lockedbyandtime": "(由 {{GENDER:$1|$1}} 於 $2 的 $3)",
+       "move-page": "移動 $1",
        "move-page-legend": "移動頁面",
-       "movepagetext": "使ç\94¨ä»¥ä¸\8b表å\96®ä¾\86é\87\8dæ\96°å\91½å\90\8dä¸\80å\80\8bé \81é\9d¢ç\9a\84å\90\8d稱ï¼\8c並å°\87æ\89\80æ\9c\89é \81é\9d¢ç\9a\84æ­·å\8f²è¨\98é\8c\84ä¸\80併移è\87³æ\96°ç\9a\84é \81é\9d¢ï¼\8c\nè\88\8aæ¨\99é¡\8cç\9a\84é \81é\9d¢å°\87æ\9c\83è®\8aæ\88\90é\87\8dæ\96°å°\8eå\90\91é \81é\9d¢ï¼\8cå°\8eå\90\91è\87³ä½¿ç\94¨æ\96°æ¨\99é¡\8cç\9a\84é \81é\9d¢ã\80\82\næ\82¨å\8f¯ä»¥é\81¸æ\93\87è\87ªå\8b\95æ\9b´æ\96°å°\87æ\89\80æ\9c\89å°\8eå\90\91è\87³è\88\8aé \81é\9d¢ç\9a\84é\87\8dæ\96°å°\8eå\90\91é \81é\9d¢æ\94¹å°\8eå\90\91å\88°æ\96°ç\9a\84é \81é\9d¢ï¼\8c\nè\8b¥æ\82¨é\81¸æ\93\87ä¸\8d使ç\94¨è\87ªå\8b\95æ\9b´æ\96°ï¼\8cè«\8bè¨\98å¾\97檢æ\9f¥ [[Special:DoubleRedirects|é\9b\99é\87\8dç\9a\84é\87\8dæ\96°å°\8eå\90\91é \81é\9d¢]] æ\88\96 [[Special:BrokenRedirects|æ\90\8då£\9eç\9a\84é\87\8dæ\96°å°\8eå\90\91é \81é\9d¢]]ï¼\8c\næ\82¨æ\9c\89責任è®\93é\80£çµ\90維æ\8c\81æ\9c\89æ\95\88並ä¸\94è\83½å¤ ç¹¼çº\8cé\80£çµ\90å\88°æ­£ç¢ºç\9a\84æ\96°é \81é\9d¢ã\80\82\n\nè«\8b注æ\84\8fï¼\8cè\8b¥æ\96°ç\9a\84é \81é\9d¢å\90\8d稱已ç¶\93被使ç\94¨ï¼\8cå\89\87æ­¤é \81é\9d¢å°\87<strong>ä¸\8dæ\9c\83</strong>被移å\8b\95ï¼\8cé\99¤é\9d\9eæ\96°å\90\8d稱å­\98å\9c¨ç\9a\84æ\98¯é\87\8dæ\96°å°\8eå\90\91é \81é\9d¢ä¸\94æ²\92æ\9c\89ä»»ä½\95ç\9a\84編修è¨\98é\8c\84ã\80\82\né\80\99å\80\8bæ\84\8fæ\80\9dæ\8c\87ç\9a\84æ\98¯ï¼\8cæ\82¨å\8f¯å°\87å\9b å¤±èª¤è\80\8c移å\8b\95è\87³å\85¶ä»\96å\90\8d稱ç\9a\84é \81é\9d¢å¾©å\8e\9fç\82ºè\88\8aç\9a\84å\90\8d稱ï¼\8c並ä¸\94æ\82¨ä¸\8då\8f¯ä»¥è¦\86è\93\8bä»»ä½\95å·²å­\98å\9c¨ç\9a\84é \81é\9d¢ã\80\82\n\n<strong>è­¦å\91\8aï¼\81</strong>\né\80\99å\80\8bå\8b\95ä½\9cå°\8då\8f\97æ­¡è¿\8eç\9a\84é \81é\9d¢å\8f¯è\83½æ\98¯ä¸\80å\80\8bé\87\8d大è\88\87å\94\90çª\81ç\9a\84æ\9b´æ\94¹ï¼\9b\nè«\8bå\9c¨è¡\8cå\8b\95å\89\8d確èª\8dæ\82¨å·²äº\86解å\8f¯è\83½å¸¶ä¾\86後果。",
-       "movepagetext-noredirectfixer": "使ç\94¨ä»¥ä¸\8b表å\96®ä¾\86é\87\8dæ\96°å\91½å\90\8dä¸\80å\80\8bé \81é\9d¢ç\9a\84å\90\8d稱ï¼\8c並å°\87æ\89\80æ\9c\89é \81é\9d¢ç\9a\84æ­·å\8f²è¨\98é\8c\84ä¸\80併移è\87³æ\96°ç\9a\84é \81é\9d¢ï¼\8c\nè\88\8aæ¨\99é¡\8cç\9a\84é \81é\9d¢å°\87æ\9c\83è®\8aæ\88\90é\87\8dæ\96°å°\8eå\90\91é \81é\9d¢ï¼\8cå°\8eå\90\91è\87³ä½¿ç\94¨æ\96°æ¨\99é¡\8cç\9a\84é \81é\9d¢ã\80\82\nè«\8bè¨\98å¾\97檢æ\9f¥ [[Special:DoubleRedirects|é\9b\99é\87\8då°\8eå\90\91é \81é\9d¢]] æ\88\96 [[Special:BrokenRedirects|中æ\96·ç\9a\84å°\8eå\90\91é \81é\9d¢]]ï¼\8c\næ\82¨æ\9c\89責任è®\93é\80£çµ\90維æ\8c\81æ\9c\89æ\95\88並ä¸\94è\83½å¤ ç¹¼çº\8cé\80£çµ\90å\88°æ­£ç¢ºç\9a\84æ\96°é \81é\9d¢ã\80\82\n\nè«\8b注æ\84\8fï¼\8cè\8b¥æ\96°ç\9a\84é \81é\9d¢å\90\8d稱已ç¶\93被使ç\94¨ï¼\8cå\89\87æ­¤é \81é\9d¢å°\87<strong>ä¸\8dæ\9c\83</strong>被移å\8b\95ï¼\8cé\99¤é\9d\9eæ\96°å\90\8d稱å­\98å\9c¨ç\9a\84æ\98¯é\87\8dæ\96°å°\8eå\90\91é \81é\9d¢ä¸\94æ²\92æ\9c\89ä»»ä½\95ç\9a\84編修è¨\98é\8c\84ã\80\82\né\80\99å\80\8bæ\84\8fæ\80\9dæ\8c\87ç\9a\84æ\98¯ï¼\8cæ\82¨å\8f¯å°\87å\9b å¤±èª¤è\80\8c移å\8b\95è\87³å\85¶ä»\96å\90\8d稱ç\9a\84é \81é\9d¢å¾©å\8e\9fç\82ºè\88\8aç\9a\84å\90\8d稱ï¼\8c並ä¸\94æ\82¨ä¸\8då\8f¯ä»¥è¦\86è\93\8bä»»ä½\95å·²å­\98å\9c¨ç\9a\84é \81é\9d¢ã\80\82\n\n<strong>è­¦å\91\8aï¼\81</strong>\né\80\99å\80\8bå\8b\95ä½\9cå°\8då\8f\97æ­¡è¿\8eç\9a\84é \81é\9d¢å\8f¯è\83½æ\98¯ä¸\80å\80\8bé\87\8d大è\88\87å\94\90çª\81ç\9a\84æ\9b´æ\94¹ï¼\9b\nè«\8bå\9c¨è¡\8cå\8b\95å\89\8d確èª\8dæ\82¨å·²äº\86解å\8f¯è\83½å¸¶ä¾\86後果。",
+       "movepagetext": "以ä¸\8b表格å\8f¯ä»¥ç\94¨ä¾\86é\87\8dæ\96°å\91½å\90\8dé \81é\9d¢ï¼\8c並å°\87該é \81é\9d¢ç\9a\84æ\89\80æ\9c\89æ­·å\8f²è¨\98é\8c\84ä¸\80併移è\87³æ\93\81æ\9c\89æ\96°å\90\8d稱ç\9a\84é \81é\9d¢ã\80\82\nè\88\8aæ¨\99é¡\8cç\9a\84é \81é\9d¢å°\87æ\9c\83è®\8aæ\88\90é\87\8då®\9aå\90\91é \81é\9d¢ï¼\8cæ\8c\87å\90\91使ç\94¨æ\96°æ¨\99é¡\8cç\9a\84é \81é\9d¢ã\80\82\næ\82¨å\8f¯ä»¥é\81¸æ\93\87è\87ªå\8b\95æ\9b´æ\96°æ\89\80æ\9c\89æ\8c\87å\90\91è\88\8aé \81é\9d¢ç\9a\84é\87\8då®\9aå\90\91ï¼\8cè®\93å®\83å\80\91æ\94¹ç\82ºæ\8c\87å\90\91æ\96°é \81é\9d¢ã\80\82\nè\8b¥æ\82¨é\81¸æ\93\87ä¸\8dè\87ªå\8b\95æ\9b´æ\96°ï¼\8cè«\8b檢æ\9f¥æ\9c\89æ²\92æ\9c\89[[Special:DoubleRedirects|é\9b\99é\87\8dé\87\8då®\9aå\90\91]]æ\88\96[[Special:BrokenRedirects|æ\90\8då£\9eç\9a\84é\87\8då®\9aå\90\91]]é\9c\80è¦\81修正ã\80\82\næ\82¨æ\9c\89責任è®\93é\80£çµ\90ç¹¼çº\8cæ\8c\87å\90\91正確ç\9a\84å\9c°æ\96¹ã\80\82\n\nè«\8b注æ\84\8fï¼\8cè\8b¥æ\96°ç\9a\84é \81é\9d¢å\90\8d稱已ç¶\93被使ç\94¨ï¼\8cå\89\87æ­¤é \81é\9d¢å°\87<strong>ä¸\8dæ\9c\83</strong>移å\8b\95è\87³è©²è\99\95ï¼\8cé\99¤é\9d\9eæ\96°å\90\8d稱ä¸\8bæ\98¯å\80\8bé\87\8då®\9aå\90\91é \81é\9d¢è\80\8cä¸\94æ²\92æ\9c\89ä»»ä½\95編輯è¨\98é\8c\84ã\80\82\nå\8d³æ\98¯èªªï¼\8cæ\82¨å\8f¯ä»¥å°\87é\8c¯èª¤ç§»å\8b\95è\87³å\85¶ä»\96å\90\8d稱ç\9a\84é \81é\9d¢é\82\84å\8e\9få\88°å\8e\9fæ\9c\89å\90\8d稱ï¼\8cä½\86ä¸\8dè\83½è¦\86è\93\8bä»»ä½\95ç\8f¾æ\9c\89ç\9a\84é \81é\9d¢ã\80\82\n\n<strong>è­¦å\91\8aï¼\81</strong>\né\80\99å\80\8bå\8b\95ä½\9cå°\8då\8f\97æ­¡è¿\8eç\9a\84é \81é\9d¢ä¾\86說å\8f¯è\83½æ\98¯é\87\8d大è\80\8cå\94\90çª\81ç\9a\84æ\9b´æ\94¹ï¼\9b\nå\9c¨è¡\8cå\8b\95å\89\8dè«\8bå\85\88確èª\8dæ\82¨äº\86解移å\8b\95å\8f¯è\83½å¸¶ä¾\86ç\9a\84後果。",
+       "movepagetext-noredirectfixer": "以ä¸\8b表格å\8f¯ä»¥ç\94¨ä¾\86é\87\8dæ\96°å\91½å\90\8dé \81é\9d¢ï¼\8c並å°\87該é \81é\9d¢ç\9a\84æ\89\80æ\9c\89æ­·å\8f²è¨\98é\8c\84ä¸\80併移è\87³æ\93\81æ\9c\89æ\96°å\90\8d稱ç\9a\84é \81é\9d¢ã\80\82\nè\88\8aæ¨\99é¡\8cç\9a\84é \81é\9d¢å°\87æ\9c\83è®\8aæ\88\90é\87\8då®\9aå\90\91é \81é\9d¢ï¼\8cæ\8c\87å\90\91使ç\94¨æ\96°æ¨\99é¡\8cç\9a\84é \81é\9d¢ã\80\82\nè«\8b檢æ\9f¥æ\9c\89æ²\92æ\9c\89[[Special:DoubleRedirects|é\9b\99é\87\8dé\87\8då®\9aå\90\91]]æ\88\96[[Special:BrokenRedirects|æ\90\8då£\9eç\9a\84é\87\8då®\9aå\90\91]]é\9c\80è¦\81修正ã\80\82\næ\82¨æ\9c\89責任è®\93é\80£çµ\90ç¹¼çº\8cæ\8c\87å\90\91正確ç\9a\84å\9c°æ\96¹ã\80\82\n\nè«\8b注æ\84\8fï¼\8cè\8b¥æ\96°ç\9a\84é \81é\9d¢å\90\8d稱已ç¶\93被使ç\94¨ï¼\8cå\89\87æ­¤é \81é\9d¢å°\87<strong>ä¸\8dæ\9c\83</strong>移å\8b\95è\87³è©²è\99\95ï¼\8cé\99¤é\9d\9eæ\96°å\90\8d稱ä¸\8bæ\98¯å\80\8bé\87\8då®\9aå\90\91é \81é\9d¢è\80\8cä¸\94æ²\92æ\9c\89ä»»ä½\95編輯è¨\98é\8c\84ã\80\82\nå\8d³æ\98¯èªªï¼\8cæ\82¨å\8f¯ä»¥å°\87é\8c¯èª¤ç§»å\8b\95è\87³å\85¶ä»\96å\90\8d稱ç\9a\84é \81é\9d¢é\82\84å\8e\9få\88°å\8e\9fæ\9c\89å\90\8d稱ï¼\8cä½\86ä¸\8dè\83½è¦\86è\93\8bä»»ä½\95ç\8f¾æ\9c\89ç\9a\84é \81é\9d¢ã\80\82\n\n<strong>è­¦å\91\8aï¼\81</strong>\né\80\99å\80\8bå\8b\95ä½\9cå°\8då\8f\97æ­¡è¿\8eç\9a\84é \81é\9d¢ä¾\86說å\8f¯è\83½æ\98¯é\87\8d大è\80\8cå\94\90çª\81ç\9a\84æ\9b´æ\94¹ï¼\9b\nå\9c¨è¡\8cå\8b\95å\89\8dè«\8bå\85\88確èª\8dæ\82¨äº\86解移å\8b\95å\8f¯è\83½å¸¶ä¾\86ç\9a\84後果。",
        "movepagetalktext": "相關的的對話頁面 (如果有的話) 會自動與該頁面一起移動,<strong>除非:</strong>\n*新的名稱已有一個存在的對話頁面,或\n*您未勾選此核選方塊。\n\n在上述情況下,若有必要您必須手動移動或合併已存在的頁面。",
-       "movearticle": "移動頁面:",
-       "moveuserpage-warning": "<strong>警告:</strong> 您正要移動使用者頁面,請注意只有使用者頁面會變更名稱,並<em>不會</em>重新命名使用者。",
-       "movecategorypage-warning": "<strong>警告:</strong>您將要移動分類頁面。請注意此操作只頁面,舊分類中的頁面將<em>不會</em>移動到新的分類。",
+       "movearticle": "移動頁面",
+       "moveuserpage-warning": "<strong>警告:</strong>您正要移動使用者頁面,請注意只有使用者頁面會變更名稱,並<em>不會</em>重新命名使用者。",
+       "movecategorypage-warning": "<strong>警告:</strong>您正要移動分類頁面。請注意此操作只會移動頁面,在舊分類中的頁面將<em>不會</em>移動到新的分類。",
        "movenologintext": "您必須是已註冊的使用者並且 [[Special:UserLogin|登入]] 才可移動頁面。",
-       "movenotallowed": "您並沒有許可權去移動頁面。",
-       "movenotallowedfile": "您並沒有許可權去移動檔案。",
-       "cant-move-user-page": "您沒有權限去移動使用者頁面 (除了它的子頁面)。",
-       "cant-move-to-user-page": "您沒有權限去移動頁面至使用者頁面 (除了使用者子頁面)。",
-       "cant-move-category-page": "您沒有移動分類頁面的權限。",
-       "cant-move-to-category-page": "您沒有權限移動頁面分類頁面。",
-       "newtitle": "新標題:",
-       "move-watch": "監視來源以及目標頁",
+       "movenotallowed": "您沒有權限移動頁面。",
+       "movenotallowedfile": "您沒有權限移動檔案。",
+       "cant-move-user-page": "您沒有權限移動使用者頁面 (除使用者子頁面外)。",
+       "cant-move-to-user-page": "您沒有權限移動頁面至使用者頁面 (除使用者子頁面外)。",
+       "cant-move-category-page": "您沒有權限移動分類頁面。",
+       "cant-move-to-category-page": "您沒有權限移動頁面分類頁面。",
+       "newtitle": "新標題",
+       "move-watch": "監視來源以及目標頁",
        "movepagebtn": "移動頁面",
        "pagemovedsub": "移動成功",
-       "movepage-moved": "'''「$1」已經移動到「$2」'''",
-       "movepage-moved-redirect": "已建立重新導向頁面。",
-       "movepage-moved-noredirect": "建ç«\8bé\87\8dæ\96°å°\8eå\90\91é \81é\9d¢å\8a\9fè\83½å·²è¢«ç¦\81æ­¢ã\80\82",
-       "articleexists": "該名字的頁面已經存在,或者您選擇的名字無效。請再選一個名字。",
-       "cantmove-titleprotected": "您不可以移動這個頁面到這個位置,因為該新標題已經被保護以防止建立。",
+       "movepage-moved": "<strong>已移動 \"$1\" 至 \"$2\"</strong>",
+       "movepage-moved-redirect": "已建立重向頁面。",
+       "movepage-moved-noredirect": "å·²ç¦\81止建ç«\8bé\87\8då®\9aå\90\91é \81é\9d¢ã\80\82",
+       "articleexists": "該頁面名稱已存在,或您選擇的名稱無效。\n請改選擇其他名稱。",
+       "cantmove-titleprotected": "您選擇的新標題已被禁止使用,您不可移動頁面到該位置。",
        "movetalk": "移動相關的對話頁面",
-       "move-subpages": "移動子頁面(上至$1頁)",
+       "move-subpages": "移動子頁面 (共 $1 頁)",
        "move-talk-subpages": "移動對話頁面的子頁面 (共 $1 頁)",
-       "movepage-page-exists": "頁面 $1 已經存在,不可以自動地覆寫。",
-       "movepage-page-moved": "頁面 $1 已經移動到 $2。",
-       "movepage-page-unmoved": "頁面 $1 不可以移動到 $2。",
-       "movepage-max-pages": "最多有$1個頁面已經移動同時不可以自動地再移動更多。",
+       "movepage-page-exists": "頁面 $1 已存在,無法自動覆蓋。",
+       "movepage-page-moved": "已移動頁面 $1 到 $2。",
+       "movepage-page-unmoved": "無法移動頁面 $1 到 $2。",
+       "movepage-max-pages": "移動頁面的上限為 $1 頁,超出限制的頁面將不會自動移動。",
        "movelogpage": "移動日誌",
-       "movelogpagetext": "以下是所有移動的頁面清單:",
+       "movelogpagetext": "以下是所有移動頁面的動作記錄清單。",
        "movesubpage": "{{PLURAL:$1|子頁面}}",
-       "movesubpagetext": "這個頁面有$1個子頁面列示如下。",
-       "movenosubpage": "這個頁面沒有子頁面。",
+       "movesubpagetext": "此頁面有 $1 個子頁面如下所示。",
+       "movenosubpage": "此頁面沒有任何子頁面。",
        "movereason": "原因",
        "revertmove": "還原",
        "delete_and_move": "刪除並移動",
-       "delete_and_move_text": "==需要刪除==\n\n目標頁面\"[[:$1]]\"已經存在。{{GENDER:|你|妳|你}}確認需要刪除原頁面並以進行移動嗎?",
-       "delete_and_move_confirm": "是的,刪除頁面",
-       "delete_and_move_reason": "å\88ªé\99¤ä»¥ä¾¿ç§»å\8b\95[[$1]]",
-       "selfmove": "原始標題與目標標題相同,您不能移動一頁覆蓋本身。",
+       "delete_and_move_text": "== 需要刪除 ==\n目標頁面 \"[[:$1]]\" 已存在。\n您是否要刪除該頁面以完成移動?",
+       "delete_and_move_confirm": "是的,刪除頁面",
+       "delete_and_move_reason": "å·²å\88ªé\99¤è®\93ä¾\86è\87ª [[$1]] é \81é\9d¢å\8f¯ç§»å\8b\95",
+       "selfmove": "原始標題與目標標題相同,\n無法移動頁面至自己。",
        "immobile-source-namespace": "無法移動在命名空間 \"$1\" 中的頁面",
-       "immobile-target-namespace": "不可以將頁面移動到「$1」空間名中",
-       "immobile-target-namespace-iw": "垮維基連結在移動頁面中是無效的目標。",
-       "immobile-source-page": "這個頁面不能移動。",
-       "immobile-target-page": "無法移動至目標標題。",
-       "bad-target-model": "æ\89\80é\9c\80ç\9a\84ç\9b®ç\9a\84å\9c°ä½¿ç\94¨ä¸\8då\90\8cç\9a\84å\85§å®¹æ¨¡å¼\8fã\80\82ä¸\8då\8f¯ä»¥å¾\9e$1è½\89æ\8f\9bå\88° $2 。",
+       "immobile-target-namespace": "無法移動頁面至命名空間 \"$1\"",
+       "immobile-target-namespace-iw": "移動頁面不可使用 Interwiki 連結做為目標。",
+       "immobile-source-page": "此頁面無法移動。",
+       "immobile-target-page": "無法移動至目標標題。",
+       "bad-target-model": "æ\8c\87å®\9aç\9a\84ç\9b®æ¨\99å\9c°ä½¿ç\94¨ä¸\8då\90\8cç\9a\84å\85§å®¹æ¨¡å\9e\8bã\80\82ç\84¡æ³\95è½\89æ\8f\9b $1 ç\82º $2。",
        "imagenocrossnamespace": "不可以移動檔案到非檔案命名空間",
        "nonfile-cannot-move-to-file": "不可以移動非檔案到檔案命名空間",
-       "imagetypemismatch": "該新副檔名不匹配它的類型",
-       "imageinvalidfilename": "目標檔案名稱是無效的",
-       "fix-double-redirects": "更新導向到原標題的任何重新導向頁面",
-       "move-leave-redirect": "留下重新定向",
+       "imagetypemismatch": "新的檔案副檔名不符合該檔案的類型",
+       "imageinvalidfilename": "目標檔案名稱無效",
+       "fix-double-redirects": "更新所有指向原標題的重定向",
+       "move-leave-redirect": "留下重定向頁面",
        "protectedpagemovewarning": "<strong>警告:</strong>本頁已經被保護,只有擁有管理員權限的使用者才可移動。\n以下提供最近的日誌以便參考:",
        "semiprotectedpagemovewarning": "<strong>注意:</strong>本頁已經被保護,只有已註冊的使用者才可移動。\n以下提供最近的日誌以便參考:",
-       "move-over-sharedrepo": "== 檔案已存在 ==\n[[:$1]]已於共享資源存在,將檔案移動到此標題會覆蓋共享資源中的檔案。",
-       "file-exists-sharedrepo": "同名檔案已於共享資源存在。\n請選擇另一個檔案名。",
+       "move-over-sharedrepo": "== 檔案已存在 ==\n[[:$1]] 已存在於共用檔案庫,將檔案移動到此標題會覆蓋該共用檔案。",
+       "file-exists-sharedrepo": "選擇的檔案名稱於共用檔案庫已有其他檔案使用。\n請改選擇其他名稱。",
        "export": "匯出頁面",
-       "exporttext": "æ\82¨å\8f¯ä»¥å°\87ç\89¹å®\9aé \81é\9d¢æ\88\96ä¸\80çµ\84é \81é\9d¢ç\9a\84æ\96\87å­\97以å\8f\8a編輯歷å\8f²ä»¥XMLæ ¼å¼\8få\8c¯å\87ºï¼\9bé\80\99樣å\8f¯ä»¥å°\87æ\9c\89é\97\9cé \81é\9d¢é\80\8fé\81\8eã\80\8c[[Special:Import|å\8c¯å\85¥é \81é\9d¢]]ã\80\8dé \81é\9d¢å\8c¯å\85¥å\88°å\8f¦ä¸\80å\80\8bå\9f·è¡\8cMediaWikiç\9a\84網ç«\99ã\80\82\n\nè¦\81å\8c¯å\87ºé \81é\9d¢ï¼\8cè«\8bå\9c¨ä¸\8bé\9d¢ç\9a\84æ\96\87å­\97æ¡\86中輸å\85¥é \81é\9d¢æ¨\99é¡\8cï¼\8cæ¯\8fè¡\8cä¸\80å\80\8bæ¨\99é¡\8cï¼\8c並é\81¸æ\93\87{{GENDER:|ä½ |妳|ä½ }}æ\98¯å\90¦é\9c\80è¦\81å\8c¯å\87ºå¸¶æ\9c\89é \81é\9d¢æ­·å\8f²ç\9a\84以å\89\8dç\9a\84ä¿®è¨\82ç\89\88æ\9c¬ï¼\8cæ\88\96æ\98¯å\8fªé\81¸æ\93\87å\8c¯å\87ºå¸¶æ\9c\89æ\9c\80å¾\8cä¸\80次編輯è¨\8aæ\81¯ç\9a\84ç\9b®å\89\8dä¿®è¨\82ç\89\88æ\9c¬ã\80\82\n\næ­¤å¤\96{{GENDER:|ä½ |妳|ä½ }}é\82\84å\8f¯ä»¥å\88©ç\94¨é\80£çµ\90å\8c¯å\87ºæª\94æ¡\88ï¼\8cä¾\8bå¦\82{{GENDER:|ä½ |妳|ä½ }}å\8f¯ä»¥ä½¿ç\94¨[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]å\8c¯å\87ºã\80\8c[[{{MediaWiki:Mainpage}}]]ã\80\8dé \81é\9d¢。",
-       "exportall": "å°\8e出所有頁面",
-       "exportcuronly": "å\8fªå°\8eå\87ºç\95¶å\89\8dç\89\88æ\9c¬ï¼\8cä¸\8då\90«å®\8cæ\95´æ­·å\8f²ç\89\88æ\9c¬",
-       "exportnohistory": "----\n'''注意:''' 由於性能原因,從此表單匯出頁面的全部歷史已被停用。",
-       "exportlistauthors": "為每個頁面包含貢獻者的完整列表",
+       "exporttext": "æ\82¨å\8f¯ä»¥å\8c¯å\87ºæ\8c\87å®\9aé \81é\9d¢æ\88\96å¤\9aé \81ç\9a\84æ\96\87å­\97è\88\87編輯歷å\8f²ï¼\8c使ç\94¨ XML æ ¼å¼\8få\8c\85è£\9dã\80\82\né\80\99äº\9bæª\94æ¡\88å\8f¯ä»¥å\8c¯å\85¥è\87³å\85¶ä»\96使ç\94¨ MediaWiki ç\9a\84 Wikiï¼\8cé\80\8fé\81\8e [[Special:Import|å\8c¯å\85¥é \81é\9d¢]]ã\80\82\n\nè¦\81å\8c¯å\87ºé \81é\9d¢ï¼\8cè«\8bå\9c¨ä¸\8bæ\96¹æ\96\87å­\97æ\96¹å¡\8a中輸å\85¥é \81é\9d¢æ¨\99é¡\8cï¼\8cä¸\80å\80\8bæ¨\99é¡\8c使ç\94¨ä¸\80è¡\8cï¼\8c並é\81¸æ\93\87æ\98¯å\90¦è¦\81å\8c¯å\87ºç\9b®å\89\8dç\9a\84ä¿®è¨\82å\90«æ\89\80æ\9c\89ç\9a\84æ­·å\8f²ä¿®è¨\82è¨\98é\8c\84ï¼\8cæ\88\96è\80\85å\8fªå\8c¯å\87ºç\9b®å\89\8dç\9a\84ä¿®è¨\82è\88\87æ\9c\80å¾\8c編輯ç\9a\84è³\87è¨\8aã\80\82\n\nå\9c¨æ\96\87å­\97æ\96¹å¡\8a中æ\82¨ä¹\9få\8f¯ä½¿ç\94¨é\80£çµ\90ï¼\8cå¦\82ï¼\9a[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] ä»£è¡¨å\8c¯å\87ºé \81é\9d¢ \"[[{{MediaWiki:Mainpage}}]]\"。",
+       "exportall": "å\8c¯出所有頁面",
+       "exportcuronly": "å\8fªå\8c\85å\90«ç\9b®å\89\8dä¿®è¨\82ï¼\8cä¸\8då\8c\85å\90«å®\8cæ\95´ç\9a\84ä¿®è¨\82æ­·å\8f²",
+       "exportnohistory": "----\n<strong>注意:</strong>因避免伺服器效能問題,已停用匯出頁面的所有歷史記錄。",
+       "exportlistauthors": "包含每個頁面完整的貢獻人員清單",
        "export-submit": "匯出",
-       "export-addcattext": "由分類中加入頁面:",
+       "export-addcattext": "使用分類新增頁面:",
        "export-addcat": "新增",
-       "export-addnstext": "由命名空間加入頁面:",
+       "export-addnstext": "使用命名空間新增頁面:",
        "export-addns": "新增",
-       "export-download": "å\8f¦存為檔案",
+       "export-download": "å\84²存為檔案",
        "export-templates": "包含樣版",
-       "export-pagelinks": "包含到這個深度連結之頁面:",
-       "allmessages": "系統界面",
+       "export-pagelinks": "包含連結的頁面深度:",
+       "allmessages": "系統訊息",
        "allmessagesname": "名稱",
        "allmessagesdefault": "預設的訊息文字",
-       "allmessagescurrent": "ç\8f¾æ\99\82的訊息文字",
+       "allmessagescurrent": "ç\9b®å\89\8d的訊息文字",
        "allmessagestext": "此處列出所有在 MediaWiki 命名空間中系統訊息。\n若您想參與官方的 MediaWiki 在地化,請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki 在地化] 與 [//translatewiki.net translatewiki.net]。",
-       "allmessagesnotsupportedDB": "這個頁面無法使用,因為'''$wgUseDatabaseMessages'''已被設定關閉。",
+       "allmessagesnotsupportedDB": "已停用 <strong>$wgUseDatabaseMessages</strong> 設定,無法使用此頁面。",
        "allmessages-filter-legend": "搜尋",
-       "allmessages-filter": "以è\87ªå®\9aç\8b\80æ³\81é\81\8e濾:",
+       "allmessages-filter": "ä¾\9dä¿®æ\94¹ç\8b\80æ³\81æ\90\9cå°\8b:",
        "allmessages-filter-unmodified": "未修改",
        "allmessages-filter-all": "全部",
-       "allmessages-filter-modified": "修改",
-       "allmessages-prefix": "以字首搜尋:",
+       "allmessages-filter-modified": "修改",
+       "allmessages-prefix": "ä¾\9d字首搜尋:",
        "allmessages-language": "語言:",
-       "allmessages-filter-submit": "å¾\80",
+       "allmessages-filter-submit": "å\9f·è¡\8c",
        "allmessages-filter-translate": "翻譯",
        "thumbnail-more": "放大",
-       "filemissing": "無法找到檔案",
-       "thumbnail_error": "建立縮圖錯誤$1",
-       "thumbnail_error_remote": "$1發出的電子郵件:\n$2",
-       "djvu_page_error": "DjVu頁面超出範圍",
-       "djvu_no_xml": "無法在DjVu檔案中擷取XML",
+       "filemissing": "檔案遺失",
+       "thumbnail_error": "建立縮圖錯誤$1",
+       "thumbnail_error_remote": "來自 $1 錯誤訊息:\n$2",
+       "djvu_page_error": "DjVu 頁面超出範圍",
+       "djvu_no_xml": "無法在 DjVu 檔案中擷取 XML",
        "thumbnail-temp-create": "無法建立臨時縮圖檔案",
-       "thumbnail-dest-create": "ç\84¡æ³\95å°\87縮ç\95¥å\9c\96ä¿\9då­\98å\88°ç\9b®æ¨\99å\9c°é»\9e",
-       "thumbnail_invalid_params": "不正確的縮圖參數",
+       "thumbnail-dest-create": "ç\84¡æ³\95å\84²å­\98縮å\9c\96è\87³ç\9b®æ¨\99",
+       "thumbnail_invalid_params": "無效的縮圖參數",
        "thumbnail_dest_directory": "無法建立目標目錄",
-       "thumbnail_image-type": "圖片類型不支援",
-       "thumbnail_gd-library": "未完成的GD設定: 功能遺失 $1",
-       "thumbnail_image-missing": "檔案似乎遺失: $1",
-       "thumbnail_image-failure-limit": "æ\96°è¿\91å\98\97試ç\94\9fæ\88\90此縮ç\95¥å\9c\96失æ\95\97太å¤\9aï¼\88$1次æ\88\96以ä¸\8aï¼\89ã\80\82請稍後再試。",
+       "thumbnail_image-type": "不支援的圖片類型",
+       "thumbnail_gd-library": "未完成 GD 設定:缺少函數 $1",
+       "thumbnail_image-missing": "檔案遺失:$1",
+       "thumbnail_image-failure-limit": "æ\9c\80è¿\91顯示此縮å\9c\96å·²ç\99¼ç\94\9f太å¤\9a次失æ\95\97 ($1 æ¬¡æ\88\96æ\9b´å¤\9a)ï¼\8c請稍後再試。",
        "import": "匯入頁面",
-       "importinterwiki": "跨 wiki 匯入",
-       "import-interwiki-text": "選擇一個 wiki 和頁面標題以進行匯入。\n修訂日期和編輯者名字將同時被儲存。\n所有的跨 wiki 匯入操作被記錄在[[Special:Log/import|匯入日誌]]。",
-       "import-interwiki-source": "來源維基/頁面:",
-       "import-interwiki-history": "複製此頁的所有歷史修訂版本",
+       "importinterwiki": "Transwiki 匯入",
+       "import-interwiki-text": "請選擇一個 Wiki 與頁面標題以進行匯入。\n會同時記錄修訂日期和編輯者的名稱。\n所有的 Transwiki 匯入操作會被記錄在 [[Special:Log/import|匯入日誌]]。",
+       "import-interwiki-source": "來源 Wiki/頁面:",
+       "import-interwiki-history": "複製此頁的所有歷史修訂",
        "import-interwiki-templates": "包含所有樣版",
        "import-interwiki-submit": "匯入",
        "import-interwiki-namespace": "目標命名空間:",
-       "import-interwiki-rootpage": "目標根頁(可選):",
+       "import-interwiki-rootpage": "目標根頁面 (選填):",
        "import-upload-filename": "檔案名稱:",
-       "import-comment": "註解:",
-       "importtext": "請使用[[Special:Export|匯出功能]]從來源維基匯出檔案,\n儲存到您的電腦中並上傳到這裡。",
+       "import-comment": "è©\95è«\96ï¼\9a",
+       "importtext": "請使用 [[Special:Export|匯出工具]] 從來源 Wiki 匯出檔案,\n儲存至您的電腦後再上傳到這裡。",
        "importstart": "正在匯入頁面...",
-       "import-revision-count": "$1個修訂",
+       "import-revision-count": "$1 個修訂",
        "importnopages": "沒有匯入的頁面。",
-       "imported-log-entries": "å\8c¯å\85¥äº\86$1é \85æ\97¥èª\8cè¨\98é\8c\84。",
-       "importfailed": "匯入失敗<nowiki>$1</nowiki>",
-       "importunknownsource": "未知的源匯入類型",
-       "importcantopen": "無法打開匯入檔案",
-       "importbadinterwiki": "損壞的內部 wiki 連結",
+       "imported-log-entries": "å·²å\8c¯å\85¥ $1 ç­\86æ\97¥èª\8cé \85ç\9b®。",
+       "importfailed": "匯入失敗<nowiki>$1</nowiki>",
+       "importunknownsource": "不明的來源匯入類型",
+       "importcantopen": "無法開啟匯入檔案",
+       "importbadinterwiki": "無效的 Interwiki 連結",
        "importsuccess": "匯入完成!",
-       "importnosources": "跨Wiki匯入源沒有定義,同時不允許直接的歷史上傳。",
-       "importnofile": "æ²\92æ\9c\89上傳匯入檔案。",
-       "importuploaderrorsize": "上載匯入檔案失敗。檔案大於可以允許的上傳大小。",
-       "importuploaderrorpartial": "上載匯入檔案失敗。檔案只有部份已經上傳。",
-       "importuploaderrortemp": "上載匯入檔案失敗。臨時資料夾已遺失。",
-       "import-parse-failure": "XML匯入語法失敗",
-       "import-noarticle": "沒有頁面作匯入!",
-       "import-nonewrevisions": "並無修訂導入(全數已存在,或出錯而跳過)。",
+       "importnosources": "未定義任何 Transwiki 匯入來源且已關閉使用歷史記錄上傳功能。",
+       "importnofile": "æ\9cª上傳匯入檔案。",
+       "importuploaderrorsize": "上載匯入檔案失敗。\n檔案大小超過允許上傳大小。",
+       "importuploaderrorpartial": "上載匯入檔案失敗。\n僅上傳部份檔案。",
+       "importuploaderrortemp": "上載匯入檔案失敗。\n遺失臨時資料夾。",
+       "import-parse-failure": "XML 匯入分析失敗",
+       "import-noarticle": "沒有任何可匯入的頁面!",
+       "import-nonewrevisions": "未匯入任何修訂 (修訂已存在,或因錯誤跳過)。",
        "xml-error-string": "$1 於行 $2,欄 $3 ($4 位元組):$5",
-       "import-upload": "上傳XML資料",
-       "import-token-mismatch": "小節資料遺失。請再嘗試。",
-       "import-invalid-interwiki": "ä¸\8dè\83½å\9c¨æ\8c\87å®\9aç\9a\84wiki匯入。",
-       "import-error-edit": "「$1」無法導入,因為您不准編輯它。",
-       "import-error-create": "您沒有建立頁面的權限,無法匯入頁面 \"$1\"。",
-       "import-error-interwiki": "頁面\"$1\"未能導入,這是因為他的頁面名稱預留了供跨維基連結使用。",
-       "import-error-special": "無法匯入頁面 \"$1\",匯入的頁面屬於不允許頁面的特殊命名空間。",
-       "import-error-invalid": "「$1」不能導入,因為名字無效。",
-       "import-error-unserialize": "頁面「$1」的修訂版本「$2」不能反序列。該修訂版本是以$3內容模式序列為$4。",
-       "import-error-bad-location": "æ\96¼æ­¤wiki使ç\94¨ç\9a\84å\85§å®¹æ¨¡å¼\8f$3ç\9a\84ä¿®è¨\82ç\89\88æ\9c¬$2並ç\84¡å\8f¯è\83½å­\98å\84²ç\82ºã\80\8c$1ã\80\8dï¼\8cé\80\99æ\98¯å\9b ç\82ºæ­¤ç¨®æ¨¡å¼\8fæ\96¼è©²é \81é\9d¢ç\84¡æ³\95æ\94¯æ\8f´。",
-       "import-options-wrong": "{{PLURAL:$2|選項}}出錯:<nowiki>$1</nowiki>",
-       "import-rootpage-invalid": "指定的根頁標題無效。",
+       "import-upload": "上傳 XML 資料",
+       "import-token-mismatch": "連線階段資料遺失。\n請再試一次。",
+       "import-invalid-interwiki": "ä¸\8dè\83½å¾\9eæ\8c\87å®\9aç\9a\84 Wiki 匯入。",
+       "import-error-edit": "您沒有權限編輯頁面 \"$1\",無法匯入。",
+       "import-error-create": "您沒有權限建立頁面 \"$1\",無法匯入。",
+       "import-error-interwiki": "頁面 \"$1\" 的名稱已保留作為外部連結 (Interwiki) 使用,無法匯入。",
+       "import-error-special": "頁面 \"$1\" 屬於不允許頁面的特殊命名空間,無法匯入。",
+       "import-error-invalid": "頁面 \"$1\" 名稱無效,無法匯入。",
+       "import-error-unserialize": "頁面 \"$1\" 的修訂 $2 無法反序列反。 此修訂使用 $3 內容模型以 $4 的方式序列化。",
+       "import-error-bad-location": "æ­¤ Wiki ç\9a\84é \81é\9d¢ \"$1\" ä¸\8dæ\94¯æ\8f´ä½¿ç\94¨å\85§å®¹æ¨¡å\9e\8b $3ï¼\8cä¿®è¨\82 $2 ç\84¡æ³\95å\84²å­\98è\87³è©²é \81é\9d¢ 。",
+       "import-options-wrong": "{{PLURAL:$2|選項}}錯誤:<nowiki>$1</nowiki>",
+       "import-rootpage-invalid": "指定的根頁標題無效。",
        "import-rootpage-nosubpage": "命名空間 \"$1\" 的根頁面不允許子頁面。",
        "importlogpage": "匯入日誌",
-       "importlogpagetext": "來自其它 wiki 的行政性的帶編輯歷史匯入頁面。",
-       "import-logentry-upload": "透過檔案上傳匯入的$1",
-       "import-logentry-upload-detail": "$1個修訂",
-       "import-logentry-interwiki": "跨wiki$1",
-       "import-logentry-interwiki-detail": "來自$2的$1個修訂",
-       "javascripttest": "JavaScript測試",
-       "javascripttest-title": "運行$1測試。",
-       "javascripttest-pagetext-noframework": "這個頁面預留了作JavaScript測試。",
-       "javascripttest-pagetext-unknownframework": "未知的測試框架「$1」。",
-       "javascripttest-pagetext-frameworks": "è«\8bé\81¸æ\93\87以ä¸\8bå\85¶ä¸­ä¸\80å\80\8b測試æ¡\86æ\9e:$1",
-       "javascripttest-pagetext-skins": "選擇行測試的外觀:",
-       "javascripttest-qunit-intro": "請看mediawiki.org的[$1 測試說明]",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit æ¸¬è©¦å¥\97件",
+       "importlogpagetext": "管理性匯入其他 Wiki 的頁面及編輯歷史記錄。",
+       "import-logentry-upload": "使用檔案上傳匯入 [[$1]]",
+       "import-logentry-upload-detail": "$1 個修訂",
+       "import-logentry-interwiki": "Transwiki 頁面 $1",
+       "import-logentry-interwiki-detail": "來自 $2 的 $1 個修訂",
+       "javascripttest": "JavaScript 測試",
+       "javascripttest-title": "執行 $1 測試。",
+       "javascripttest-pagetext-noframework": "此頁面保留用來作為 JavaScript 測試使用。",
+       "javascripttest-pagetext-unknownframework": "不明的測試 Framework \"$1\"。",
+       "javascripttest-pagetext-frameworks": "è«\8bé\81¸æ\93\87ä¸\8bå\88\97ä¸\80種測試 Framework:$1",
+       "javascripttest-pagetext-skins": "選擇行測試的外觀:",
+       "javascripttest-qunit-intro": "請參考 mediawiki.org 的 [$1 測試說明文件]。",
+       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit æ¸¬è©¦å·¥å\85·",
        "tooltip-pt-userpage": "您的使用者頁面",
        "tooltip-pt-anonuserpage": "您編輯使用的 IP 位址所對應的使用者頁面",
        "tooltip-pt-mytalk": "您的對話頁面",
        "tooltip-pt-anontalk": "對於來自此IP地址編輯的對話",
        "tooltip-pt-preferences": "您的偏好設定",
-       "tooltip-pt-watchlist": "您所監視頁面的變更列表",
-       "tooltip-pt-mycontris": "您的貢獻列表",
-       "tooltip-pt-login": "建議æ\82¨ç\99»å\85¥ï¼\8cå\84\98管並é\9d\9eå¿\85é \88。",
+       "tooltip-pt-watchlist": "您監視變更頁面清單",
+       "tooltip-pt-mycontris": "您的貢獻清單",
+       "tooltip-pt-login": "å\84\98管é\9d\9eå¿\85è¦\81ï¼\8cä»\8d建議æ\82¨ç\99»å\85¥。",
        "tooltip-pt-logout": "登出",
-       "tooltip-ca-talk": "關於頁面正文的討論",
-       "tooltip-ca-edit": "您可以編輯此頁,請在儲存之前先預覽一下。",
+       "tooltip-ca-talk": "有關頁面內容的討論",
+       "tooltip-ca-edit": "您可以編輯此頁,請在儲存之前先預覽。",
        "tooltip-ca-addsection": "開始一個新章節",
-       "tooltip-ca-viewsource": "該頁面已被保護。您可以檢視該頁原始碼",
-       "tooltip-ca-history": "æ\9c¬é \81é\9d¢ç\9a\84æ\97©å\89\8dä¿®è¨\82ç\89\88æ\9c¬",
-       "tooltip-ca-protect": "保護這個頁面",
-       "tooltip-ca-unprotect": "更改此頁保護",
-       "tooltip-ca-delete": "å\88ªé\99¤æ\9c¬é \81",
-       "tooltip-ca-undelete": "將這個頁面恢復到被刪除以前的狀態",
-       "tooltip-ca-move": "移å\8b\95æ\9c¬é \81",
-       "tooltip-ca-watch": "將此頁面加入監視列表",
-       "tooltip-ca-unwatch": "將此頁面從監視列表中移除",
-       "tooltip-search": "搜尋{{SITENAME}}",
-       "tooltip-search-go": "如果相同的標題存在的話便直接前往該頁面",
-       "tooltip-search-fulltext": "搜尋文字的頁面",
-       "tooltip-p-logo": "訪問首頁",
-       "tooltip-n-mainpage": "訪問首頁",
-       "tooltip-n-mainpage-description": "訪問首頁",
+       "tooltip-ca-viewsource": "此頁面已被保護。\n您可檢視此頁面原始碼",
+       "tooltip-ca-history": "æ­¤é \81é\9d¢å\85\88å\89\8dç\9a\84ä¿®è¨\82",
+       "tooltip-ca-protect": "保護頁面",
+       "tooltip-ca-unprotect": "變更此頁面保護",
+       "tooltip-ca-delete": "å\88ªé\99¤æ­¤é \81é\9d¢",
+       "tooltip-ca-undelete": "還原此頁面至刪除以前的狀態",
+       "tooltip-ca-move": "移å\8b\95æ­¤é \81é\9d¢",
+       "tooltip-ca-watch": "將此頁面加入您的監視清單",
+       "tooltip-ca-unwatch": "將此頁面從監視清單中移除",
+       "tooltip-search": "搜尋 {{SITENAME}}",
+       "tooltip-search-go": "若與此名稱相符的頁面存在,前往該頁面",
+       "tooltip-search-fulltext": "搜尋使用此文字的頁面",
+       "tooltip-p-logo": "參觀主頁面",
+       "tooltip-n-mainpage": "參觀主頁面",
+       "tooltip-n-mainpage-description": "參觀主頁面",
        "tooltip-n-portal": "關於本專案、您可以做什麼、哪裡可以找到事情",
        "tooltip-n-currentevents": "提供目前新聞事件的背景資料",
        "tooltip-n-recentchanges": "列出此 Wiki 中的最近變更清單",
-       "tooltip-n-randompage": "隨機入一個頁面",
-       "tooltip-n-help": "尋求協助",
-       "tooltip-t-whatlinkshere": "列出所有與本頁相連的頁面",
+       "tooltip-n-randompage": "隨機入一個頁面",
+       "tooltip-n-help": "尋求協助的地方",
+       "tooltip-t-whatlinkshere": "列出所有連結此頁面的頁面",
        "tooltip-t-recentchangeslinked": "此頁面連結到其他頁面的最近變更",
-       "tooltip-feed-rss": "è¨\82é\96±æ\9c¬é \81é\9d¢æ­·å\8f²ç\9a\84RSSè³\87è¨\8a",
-       "tooltip-feed-atom": "è¨\82é\96±æ\9c¬é \81é\9d¢æ­·å\8f²ç\9a\84 Atom Feed",
-       "tooltip-t-contributions": "檢è¦\96該使ç\94¨è\80\85ç\9a\84è²¢ç\8d»å\88\97表",
+       "tooltip-feed-rss": "è¨\82é\96±æ­¤é \81é\9d¢ç\9a\84 RSS feed",
+       "tooltip-feed-atom": "è¨\82é\96±æ­¤é \81é\9d¢ç\9a\84 Atom feed",
+       "tooltip-t-contributions": "此使ç\94¨è\80\85ç\9a\84è²¢ç\8d»æ¸\85å\96®",
        "tooltip-t-emailuser": "發送電子郵件給這個使用者",
        "tooltip-t-upload": "上傳檔案",
        "tooltip-t-specialpages": "全部特殊頁面的列表",
-       "tooltip-t-print": "頁面的可列印版本",
-       "tooltip-t-permalink": "這個頁面修訂版本的永久連結",
+       "tooltip-t-print": "頁面的可列印版本",
+       "tooltip-t-permalink": "此頁面修訂的固定連結",
        "tooltip-ca-nstab-main": "檢視頁面內容",
        "tooltip-ca-nstab-user": "檢視使用者頁面",
        "tooltip-ca-nstab-media": "檢視媒體頁面",
-       "tooltip-ca-nstab-special": "æ\9c¬é \81é\9d¢æ\9c\83é\9a¨è\91\97è³\87æ\96\99庫ç\9a\84æ\95¸æ\93\9aå\8d³æ\99\82æ\9b´æ\96°ï¼\8cä»»ä½\95人å\9d\87ä¸\8dè\83½ç\9b´æ\8e¥編輯",
+       "tooltip-ca-nstab-special": "æ­¤é \81é\9d¢ç\82ºç\89¹æ®\8aé \81é\9d¢ï¼\8cç\84¡æ³\95編輯",
        "tooltip-ca-nstab-project": "檢視專案頁面",
        "tooltip-ca-nstab-image": "檢視檔案頁面",
        "tooltip-ca-nstab-mediawiki": "檢視系統資訊",
        "tooltip-ca-nstab-help": "檢視說明頁面",
        "tooltip-ca-nstab-category": "檢視分類頁面",
        "tooltip-minoredit": "標記為小修訂",
-       "tooltip-save": "保存您的修改",
-       "tooltip-preview": "預覽您的編輯,請先使用本功能再保存!",
-       "tooltip-diff": "顯示您對頁面的貢獻",
-       "tooltip-compareselectedversions": "檢è¦\96æ\9c¬é \81被é»\9eé\81¸ç\9a\84å\85©å\80\8bä¿®è¨\82ç\89\88æ\9c¬間的差異",
-       "tooltip-watch": "將此頁加入您的監視列表",
+       "tooltip-save": "儲存您的變更",
+       "tooltip-preview": "請在儲存前預覽您的變更!",
+       "tooltip-diff": "顯示您對內容所做的變更",
+       "tooltip-compareselectedversions": "檢è¦\96æ­¤é \81å\85©å\80\8bå·²é\81¸æ\93\87ç\9a\84ä¿®è¨\82間的差異",
+       "tooltip-watch": "將此頁加入您的監視清單",
        "tooltip-watchlistedit-normal-submit": "移除標題",
-       "tooltip-watchlistedit-raw-submit": "更新監視列表",
-       "tooltip-recreate": "重建該頁面,無論是否被刪除。",
+       "tooltip-watchlistedit-raw-submit": "更新監視清單",
+       "tooltip-recreate": "無論是否被刪除,重新建立該頁面。",
        "tooltip-upload": "開始上傳",
        "tooltip-rollback": "點選 \"還原\" 還原至上位貢獻者對此頁面的編輯",
        "tooltip-undo": "\"還原\" 可還原此編輯並以預覽模式開啟編輯表單,讓您可在摘要中加入原因。",
        "tooltip-preferences-save": "儲存偏好設定",
-       "tooltip-summary": "輸å\85¥ä¸\80å\80\8bç°¡ç\9f­ç\9a\84摘要",
+       "tooltip-summary": "è«\8b輸å\85¥ç°¡ç\9f­摘要",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* 此 CSS 會套用至所有的介面外觀 */",
-       "cologneblue.css": "/* 此 CSS 會影響使用 Cologne Blue 介面外觀的使用者 */",
        "monobook.css": "/* 此 CSS 會影響使用 Monobook 介面外觀的使用者 */",
-       "modern.css": "/* 此 CSS 會影響使用 Modern 介面外觀的使用者 */",
        "vector.css": "/* 此 CSS 會影響使用 Vector 介面外觀的使用者 */",
        "print.css": "/* 此 CSS 會影響列印版輸出 */",
        "noscript.css": "/* 此 CSS 會影響沒有啓用 JavaScript 的使用者 */",
        "group-sysop.css": "/* 此 CSS 會影響管理員 */",
        "group-bureaucrat.css": "/* 此 CSS 會影響行政員 */",
        "common.js": "/* 此 JavaScript 會用於使用者載入的每一個頁面。 */",
-       "cologneblue.js": "/* 此 JavaScript 會用於使用 Cologne Blue 介面外觀使用者 */",
        "monobook.js": "/* 此 JavaScript 會用於使用 Monobook 介面外觀使用者 */",
-       "modern.js": "/* 此 JavaScript 會用於使用 Modern 介面外觀使用者 */",
        "vector.js": "/* 此 JavaScript 會用於使用 Vector 介面外觀使用者 */",
        "anonymous": "{{SITENAME}} 的匿名{{PLURAL:$1|使用者}}",
        "siteuser": "{{SITENAME}} 使用者 $1",
-       "anonuser": "{{SITENAME}}匿名使用者 $1",
+       "anonuser": "{{SITENAME}} 匿名使用者 $1",
        "lastmodifiedatby": "此頁由 $3 於 $1 $2 的最後更改。",
-       "othercontribs": "在$1的工作基礎上。",
+       "othercontribs": "此頁面由 $1 所貢獻。",
        "others": "其他",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|使用者}}$1",
-       "anonusers": "{{SITENAME}} 匿名{{PLURAL:$2|使用者}}$1",
-       "creditspage": "é \81é\9d¢è\87´è¬\9d",
-       "nocredits": "該頁沒有致謝名單訊息。",
-       "spamprotectiontitle": "垃圾過濾器",
-       "spamprotectiontext": "您欲儲存的文字內容已被垃圾過濾器封鎖,\n可能因您的內容包含了已封鎖的外部連結。",
-       "spamprotectionmatch": "觸發了我們的垃圾過濾器的文本如下:$1",
-       "spambot_username": "MediaWiki å»£å\91\8aæ¸\85é\99¤",
-       "spam_reverting": "還原到未包含連結至 $1 的最新修訂",
-       "spam_blanking": "所有包含連結至$1的修訂,清空",
-       "spam_deleting": "所有包含連結至$1的修訂,刪除中",
-       "simpleantispam-label": "反濫發電郵檢查。\n'''不要'''加入這個!",
-       "pageinfo-title": "「$1」的信息",
-       "pageinfo-not-current": "抱歉,無法提供之前修訂版本的資訊。",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|使用者}} $1",
+       "anonusers": "{{SITENAME}} 匿名{{PLURAL:$2|使用者}} $1",
+       "creditspage": "é \81é\9d¢è£½ä½\9c群",
+       "nocredits": "此頁面沒有製作群資訊。",
+       "spamprotectiontitle": "垃圾訊息過濾程式",
+       "spamprotectiontext": "您輸入文字內容已被垃圾訊息過濾程式禁止儲存,\n可能因您的內容包含了已封鎖的外部連結。",
+       "spamprotectionmatch": "以下文字內容觸發垃圾訊息過濾程式:$1",
+       "spambot_username": "MediaWiki å\9e\83å\9c¾è¨\8aæ\81¯æ¸\85ç\90\86",
+       "spam_reverting": "還原至未包含 $1 連結的最新修訂",
+       "spam_blanking": "所有修訂均包含 $1 連結,清空中",
+       "spam_deleting": "所有修訂均包含 $1 連結,刪除中",
+       "simpleantispam-label": "防垃圾訊息檢查用。\n請 <strong>勿</strong> 填寫此欄位!",
+       "pageinfo-title": "\"$1\" 的資訊",
+       "pageinfo-not-current": "抱歉,無法提供先前修訂的資訊。",
        "pageinfo-header-basic": "基本資訊",
        "pageinfo-header-edits": "編輯歷史",
-       "pageinfo-header-restrictions": "保護頁面",
+       "pageinfo-header-restrictions": "頁面保護",
        "pageinfo-header-properties": "頁面屬性",
        "pageinfo-display-title": "顯示標題",
        "pageinfo-default-sort": "預設排序字:",
        "pageinfo-article-id": "頁面編號",
        "pageinfo-language": "頁面內容語言",
        "pageinfo-content-model": "頁面內容模型",
-       "pageinfo-robot-policy": "機械人索引",
-       "pageinfo-robot-index": "容許",
-       "pageinfo-robot-noindex": "阻止",
-       "pageinfo-views": "觀看次數",
-       "pageinfo-watchers": "頁面監視者數",
-       "pageinfo-few-watchers": "少於$1名監視者",
-       "pageinfo-redirects-name": "重新導向至此頁面的數量",
+       "pageinfo-robot-policy": "由機器人建立索引",
+       "pageinfo-robot-index": "å\85\81許",
+       "pageinfo-robot-noindex": "不允許",
+       "pageinfo-views": "檢視次數",
+       "pageinfo-watchers": "頁面監視者數",
+       "pageinfo-few-watchers": "少於 $1 名監視者",
+       "pageinfo-redirects-name": "指向此頁面的重定向數量",
        "pageinfo-subpages-name": "此頁面的子頁面",
-       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|筆重新導向頁面}}; $3 {{PLURAL:$3|筆非重新導向頁面}})",
+       "pageinfo-subpages-value": "$1($2 個重定向頁面; $3 個非重定向頁面)",
        "pageinfo-firstuser": "頁面的建立者",
        "pageinfo-firsttime": "頁面創建日期",
        "pageinfo-lastuser": "最近編輯者",
        "pageinfo-authors": "作者總數",
        "pageinfo-recent-edits": "最近編輯次數 (過去$1內)",
        "pageinfo-recent-authors": "最近作者數目",
-       "pageinfo-magic-words": "魔術{{PLURAL:$1|字}}($1)",
-       "pageinfo-hidden-categories": "隱藏{{PLURAL:$1|分類}}($1)",
-       "pageinfo-templates": "引用的樣版($1)",
-       "pageinfo-transclusions": "使用的頁面($1)",
+       "pageinfo-magic-words": "魔術{{PLURAL:$1|字}} ($1)",
+       "pageinfo-hidden-categories": "隱藏{{PLURAL:$1|分類}} ($1)",
+       "pageinfo-templates": "引用的樣版 ($1)",
+       "pageinfo-transclusions": "頁面被引用於 ($1)",
        "pageinfo-toolboxlink": "頁面資訊",
-       "pageinfo-redirectsto": "重新導向至",
+       "pageinfo-redirectsto": "重向至",
        "pageinfo-redirectsto-info": "資訊",
-       "pageinfo-contentpage": "計算為內容頁",
+       "pageinfo-contentpage": "作為內容頁面計算",
        "pageinfo-contentpage-yes": "是",
-       "pageinfo-protect-cascading": "從此開始連鎖保護",
+       "pageinfo-protect-cascading": "從此開始連鎖保護",
        "pageinfo-protect-cascading-yes": "是",
-       "pageinfo-protect-cascading-from": "從此連鎖保護",
+       "pageinfo-protect-cascading-from": "連鎖保護來自",
        "pageinfo-category-info": "分類資訊",
        "pageinfo-category-pages": "頁面數量",
        "pageinfo-category-subcats": "子分類數量",
        "pageinfo-category-files": "編輯數量",
-       "skinname-cologneblue": "科隆香水藍",
-       "skinname-modern": "現代",
        "markaspatrolleddiff": "標記為已巡查",
        "markaspatrolledtext": "標記此頁面為已巡查",
-       "markedaspatrolled": "標記為已檢查",
-       "markedaspatrolledtext": "[[:$1]]的已選定修訂版本已被標識為已巡查。",
-       "rcpatroldisabled": "已停用最近變更檢查",
-       "rcpatroldisabledtext": "最新更改檢查的功能目前已關閉。",
-       "markedaspatrollederror": "不能標誌為已檢查",
-       "markedaspatrollederrortext": "{{GENDER:|你|妳|你}}需要指定某個版本才能標誌為已檢查。",
-       "markedaspatrollederror-noautopatrol": "您無法將{{GENDER:|你|妳|你}}自己所作的更改標記為已檢查。",
-       "markedaspatrollednotify": "$1的更改已標記為已巡查。",
-       "markedaspatrollederrornotify": "標記為巡查失敗。",
+       "markedaspatrolled": "己標記為已巡查",
+       "markedaspatrolledtext": "已標記選擇的修訂 [[:$1]] 為已巡查。",
+       "rcpatroldisabled": "最近變更巡查已停用",
+       "rcpatroldisabledtext": "最新變更巡查的功能目前已停用。",
+       "markedaspatrollederror": "無法標記為已巡查",
+       "markedaspatrollederrortext": "您需指定要標記為已巡查的修訂。",
+       "markedaspatrollederror-noautopatrol": "您無法將自己所作的變更標記為已巡查。",
+       "markedaspatrollednotify": "頁面 $1 的變更已標記為已巡查。",
+       "markedaspatrollederrornotify": "æ¨\99è¨\98ç\82ºå·²å·¡æ\9f¥å¤±æ\95\97ã\80\82",
        "patrol-log-page": "巡查日誌",
        "patrol-log-header": "這是已巡查的修訂版本的日誌。",
-       "log-show-hide-patrol": "$1巡查記錄",
-       "deletedrevision": "已刪除舊版本$1",
-       "filedeleteerror-short": "刪除檔案發生錯誤$1",
-       "filedeleteerror-long": "當刪除檔案時遇到錯誤:\n\n$1",
-       "filedelete-missing": "因為檔案「$1」不存在,所以它不可以刪除。",
-       "filedelete-old-unregistered": "所指定的檔案修訂「$1」在資料庫中不存在。",
-       "filedelete-current-unregistered": "所指定的檔案「$1」在資料庫中不存在。",
-       "filedelete-archive-read-only": "存檔目錄「$1」在網頁伺服器中不可寫。",
+       "log-show-hide-patrol": "$1 巡查日誌",
+       "deletedrevision": "已刪除舊修訂 $1",
+       "filedeleteerror-short": "刪除檔案發生錯誤$1",
+       "filedeleteerror-long": "刪除檔案時發生錯誤:\n\n$1",
+       "filedelete-missing": "檔案 \"$1\" 不存在,無法刪除。",
+       "filedelete-old-unregistered": "資料庫中不存在指定的檔案修訂 \"$1\"。",
+       "filedelete-current-unregistered": "資料庫中不存在指定的檔案 \"$1\"。",
+       "filedelete-archive-read-only": "網頁伺服器無封存目錄 \"$1\" 的寫入權限。",
        "previousdiff": "← 較舊編輯",
        "nextdiff": "較新編輯 →",
        "mediawarning": "<strong>警告</strong>:此檔案類型可能包含惡意代碼。\n若執行可能對您的系統造成損害。",
        "file-no-thumb-animation": "<strong>注意:由於技術限制,此檔案縮圖無動畫效果。</strong>",
        "file-no-thumb-animation-gif": "<strong>注意:由於技術限制,此類型高解析度 GIF 圖片無動畫效果。</strong>",
        "newimages": "最新檔案圖庫",
-       "imagelisttext": "以下是按$2排列的'''$1'''個檔案列表。",
+       "imagelisttext": "以下為 <strong>$1</strong> 清單,$2 排序。",
        "newimages-summary": "此特殊頁面中顯示最新上傳的檔案。",
        "newimages-legend": "搜尋",
-       "newimages-label": "檔案名稱 (或部份):",
-       "newimages-showbots": "顯示機械人上載",
-       "noimages": "無可檢視圖片。",
+       "newimages-label": "檔案名稱 (或部份檔名):",
+       "newimages-showbots": "顯示由機器人上傳的檔案",
+       "noimages": "無任何圖片。",
        "ilsubmit": "搜尋",
-       "bydate": "日期",
-       "sp-newimages-showfrom": "從$1 $2開始顯示新檔案",
+       "bydate": "日期",
+       "sp-newimages-showfrom": "顯示自 $1 $2 以來的新檔案",
        "seconds": "$1 秒",
        "minutes": "$1 分鍾",
        "hours": "$1 小時",
        "just-now": "剛才",
        "hours-ago": "$1 小時前",
        "minutes-ago": "$1 分鐘前",
-       "seconds-ago": "$1 秒前",
-       "monday-at": "æ\96¼æ\98\9fæ\9c\9fä¸\80 $1",
-       "tuesday-at": "æ\96¼æ\98\9fæ\9c\9fäº\8c $1",
-       "wednesday-at": "æ\96¼æ\98\9fæ\9c\9fä¸\89 $1",
-       "thursday-at": "æ\96¼æ\98\9fæ\9c\9få\9b\9b $1",
-       "friday-at": "æ\96¼æ\98\9fæ\9c\9fäº\94 $1",
-       "saturday-at": "æ\96¼æ\98\9fæ\9c\9få\85­ $1",
-       "sunday-at": "æ\96¼æ\98\9fæ\9c\9fæ\97¥ $1",
-       "yesterday-at": "昨天 $1",
-       "bad_image_list": "請按照下列格式編寫:\n\n只有(以 * 開頭)列出的項目會被考慮。\n每一行的第一個連結必須是損毀檔案的連結。\n然後同一行後方的連結會被視為例外,即是該檔案可以在哪些頁面內被顯示。",
+       "seconds-ago": "$1 秒前",
+       "monday-at": "æ\98\9fæ\9c\9fä¸\80æ\96¼ $1",
+       "tuesday-at": "æ\98\9fæ\9c\9fäº\8cæ\96¼ $1",
+       "wednesday-at": "æ\98\9fæ\9c\9fä¸\89æ\96¼ $1",
+       "thursday-at": "æ\98\9fæ\9c\9få\9b\9bæ\96¼ $1",
+       "friday-at": "æ\98\9fæ\9c\9fäº\94æ\96¼ $1",
+       "saturday-at": "æ\98\9fæ\9c\9få\85­æ\96¼ $1",
+       "sunday-at": "æ\98\9fæ\9c\9fæ\97¥æ\96¼ $1",
+       "yesterday-at": "昨天 $1",
+       "bad_image_list": "請依照下列格式:\n\n僅清單項目有效 (以 * 開頭)。\n每一行的第一個連結必須是不良檔案的連結。\n同一行除第一個以外的連結會被作為例外清單,例如:檔案所在的頁面。",
        "variantname-zh-hans": "‪中文(简体)",
        "variantname-zh-hant": "‪繁體中文",
        "variantname-zh-cn": "大陸簡體",
        "metadata-fields": "在本訊息中所列出的 EXIF 元數據域將包含在圖片顯示頁面,當元數據表損壞時只顯示以下訊息。\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": "每象素比特數",
-       "exif-compression": "壓縮方",
-       "exif-photometricinterpretation": "素合成",
+       "exif-bitspersample": "每像素位元",
+       "exif-compression": "壓縮方",
+       "exif-photometricinterpretation": "素合成",
        "exif-orientation": "方位",
-       "exif-samplesperpixel": "象素數",
-       "exif-planarconfiguration": "數據排列",
-       "exif-ycbcrsubsampling": "黃色洋紅二次抽樣比率",
+       "exif-samplesperpixel": "像素數量",
+       "exif-planarconfiguration": "資料排列",
+       "exif-ycbcrsubsampling": "黃色洋紅二次抽樣比率",
        "exif-ycbcrpositioning": "黃色和洋紅配置",
-       "exif-xresolution": "水準分辨率",
-       "exif-yresolution": "垂直分辨率",
-       "exif-stripoffsets": "å\9c\96ç\89\87æ\95¸æ\93\9aå\8d\80",
+       "exif-xresolution": "水平解析度",
+       "exif-yresolution": "垂直解析度",
+       "exif-stripoffsets": "å½±å\83\8fè³\87æ\96\99ä½\8dç½®",
        "exif-rowsperstrip": "每帶行數",
        "exif-stripbytecounts": "每壓縮帶位元組數",
        "exif-jpeginterchangeformat": "JPEG SOI 偏移",
-       "exif-jpeginterchangeformatlength": "JPEG 數據位元組",
+       "exif-jpeginterchangeformatlength": "JPEG 資料位元組",
        "exif-whitepoint": "白點色度",
        "exif-primarychromaticities": "主要色度",
-       "exif-ycbcrcoefficients": "顏色空間轉換矩陣系數",
-       "exif-referenceblackwhite": "黑白參照值對",
-       "exif-datetime": "檔案更改日期和時間",
-       "exif-imagedescription": "å\9c\96ç\89\87標題",
-       "exif-make": "ç\85§ç\9b¸æ©\9f製é\80 å\95\86",
-       "exif-model": "ç\85§ç\9b¸æ©\9få\9e\8bè\99\9f",
-       "exif-software": "用軟體",
+       "exif-ycbcrcoefficients": "色彩空間轉置矩陣系數",
+       "exif-referenceblackwhite": "黑白參考值",
+       "exif-datetime": "檔案修改日期時間",
+       "exif-imagedescription": "å½±å\83\8f標題",
+       "exif-make": "相機製造商",
+       "exif-model": "相機型號",
+       "exif-software": "使用軟體",
        "exif-artist": "作者",
-       "exif-copyright": "版權所有",
+       "exif-copyright": "版權所有",
        "exif-exifversion": "Exif 版本",
        "exif-flashpixversion": "支援的 Flashpix 版本",
-       "exif-colorspace": "顏色空間",
-       "exif-componentsconfiguration": "æ¯\8få\88\86é\87\8få\90«ç¾©",
-       "exif-compressedbitsperpixel": "å\9c\96ç\89\87壓縮模式",
+       "exif-colorspace": "色彩空間",
+       "exif-componentsconfiguration": "æ¯\8få\83\8fç´ å\85§å\90«",
+       "exif-compressedbitsperpixel": "å½±å\83\8f壓縮模式",
        "exif-pixelydimension": "圖片寬度",
        "exif-pixelxdimension": "圖片高度",
        "exif-usercomment": "使用者評論",
-       "exif-relatedsoundfile": "相關的音檔案",
-       "exif-datetimeoriginal": "æ\95¸æ\93\9aç\94¢ç\94\9fæ\99\82é\96\93",
-       "exif-datetimedigitized": "數字化處理時間",
-       "exif-subsectime": "日期時間秒",
-       "exif-subsectimeoriginal": "原始日期時間秒",
-       "exif-subsectimedigitized": "數字化日期時間秒",
+       "exif-relatedsoundfile": "相關的音檔案",
+       "exif-datetimeoriginal": "è³\87æ\96\99ç\94¢ç\94\9fç\9a\84æ\97¥æ\9c\9fæ\99\82é\96\93",
+       "exif-datetimedigitized": "數位化的日期時間",
+       "exif-subsectime": "DateTime 次秒",
+       "exif-subsectimeoriginal": "DateTimeOriginal 次秒",
+       "exif-subsectimedigitized": "DateTimeDigitized 次秒",
        "exif-exposuretime": "曝光時間",
        "exif-exposuretime-format": "$1 秒 ($2)",
-       "exif-fnumber": "光圈(F值)",
+       "exif-fnumber": "光圈",
        "exif-exposureprogram": "曝光模式",
-       "exif-spectralsensitivity": "感光",
+       "exif-spectralsensitivity": "光譜靈敏度",
        "exif-isospeedratings": "ISO 速率",
-       "exif-shutterspeedvalue": "APEX快門速度",
-       "exif-aperturevalue": "APEX光圈",
-       "exif-brightnessvalue": "APEX亮度",
-       "exif-exposurebiasvalue": "曝光補償",
+       "exif-shutterspeedvalue": "APEX 快門速度",
+       "exif-aperturevalue": "APEX 光圈",
+       "exif-brightnessvalue": "APEX 亮度",
+       "exif-exposurebiasvalue": "APEX 曝光補償",
        "exif-maxaperturevalue": "最大陸地光圈",
-       "exif-subjectdistance": "物距",
-       "exif-meteringmode": "測模式",
+       "exif-subjectdistance": "主體距離",
+       "exif-meteringmode": "測模式",
        "exif-lightsource": "光源",
        "exif-flash": "閃光燈",
        "exif-focallength": "焦距",
        "exif-subjectarea": "主體區域",
        "exif-flashenergy": "閃光燈強度",
-       "exif-focalplanexresolution": "X軸焦平面分辨率",
-       "exif-focalplaneyresolution": "Y軸焦平面分辨率",
-       "exif-focalplaneresolutionunit": "焦平面分辨率單位",
-       "exif-subjectlocation": "主é¡\8c位置",
+       "exif-focalplanexresolution": "X 軸焦平面解析度",
+       "exif-focalplaneyresolution": "Y 軸焦平面解析度",
+       "exif-focalplaneresolutionunit": "焦平面解析度單位",
+       "exif-subjectlocation": "主é«\94位置",
        "exif-exposureindex": "曝光指數",
        "exif-sensingmethod": "感光模式",
-       "exif-filesource": "檔案源",
+       "exif-filesource": "檔案源",
        "exif-scenetype": "場景類型",
-       "exif-customrendered": "è\87ªè¨\82å\9c\96ç\89\87處理",
+       "exif-customrendered": "è\87ªè¨\82å½±å\83\8f處理",
        "exif-exposuremode": "曝光模式",
        "exif-whitebalance": "白平衡",
-       "exif-digitalzoomratio": "數變焦比率",
-       "exif-focallengthin35mmfilm": "35毫米膠片焦距",
-       "exif-scenecapturetype": "景拍攝類型",
+       "exif-digitalzoomratio": "數變焦比率",
+       "exif-focallengthin35mmfilm": "35 毫米膠片焦距",
+       "exif-scenecapturetype": "景拍攝類型",
        "exif-gaincontrol": "場景控制",
        "exif-contrast": "對比度",
        "exif-saturation": "飽和度",
-       "exif-sharpness": "é\8a³å\8c\96",
+       "exif-sharpness": "é\8a³å\88©åº¦",
        "exif-devicesettingdescription": "設備設定描述",
        "exif-subjectdistancerange": "主體距離範圍",
-       "exif-imageuniqueid": "å\94¯ä¸\80å\9c\96ç\89\87ID",
-       "exif-gpsversionid": "GPS 標籤(tag)版本",
+       "exif-imageuniqueid": "å\94¯ä¸\80å½±å\83\8fè­\98å\88¥ç¢¼",
+       "exif-gpsversionid": "GPS 標籤版本",
        "exif-gpslatituderef": "北緯或南緯",
        "exif-gpslatitude": "緯度",
        "exif-gpslongituderef": "東經或西經",
        "exif-gpslongitude": "經度",
-       "exif-gpsaltituderef": "海拔正負參照",
+       "exif-gpsaltituderef": "海拔參考值",
        "exif-gpsaltitude": "海拔",
-       "exif-gpstimestamp": "GPS 時間(原子時鐘)",
+       "exif-gpstimestamp": "GPS 時間 (原子鐘)",
        "exif-gpssatellites": "測量使用的衛星",
        "exif-gpsstatus": "接收器狀態",
        "exif-gpsmeasuremode": "測量模式",
        "exif-gpsdop": "測量精度",
        "exif-gpsspeedref": "速度單位",
        "exif-gpsspeed": "GPS 接收器速度",
-       "exif-gpstrackref": "運動方位參照",
-       "exif-gpstrack": "運動方位",
-       "exif-gpsimgdirectionref": "å\9c\96ç\89\87æ\96¹ä½\8då\8f\83ç\85§",
-       "exif-gpsimgdirection": "å\9c\96ç\89\87æ\96¹ä½\8d",
-       "exif-gpsmapdatum": "使ç\94¨å\9c°ç\90\86測繪æ\95¸æ\93\9a",
-       "exif-gpsdestlatituderef": "目標緯度參",
+       "exif-gpstrackref": "移動方向參考值",
+       "exif-gpstrack": "移動方向",
+       "exif-gpsimgdirectionref": "å½±å\83\8fæ\96¹å\90\91å\8f\83è\80\83å\80¼",
+       "exif-gpsimgdirection": "å½±å\83\8fæ\96¹å\90\91",
+       "exif-gpsmapdatum": "使ç\94¨å¤§å\9c°æ¸¬é\87\8fè³\87æ\96\99",
+       "exif-gpsdestlatituderef": "目標緯度參考值",
        "exif-gpsdestlatitude": "目標緯度",
-       "exif-gpsdestlongituderef": "目標經度的參照",
+       "exif-gpsdestlongituderef": "目標經度參考值",
        "exif-gpsdestlongitude": "目標經度",
-       "exif-gpsdestbearingref": "目標方位參",
+       "exif-gpsdestbearingref": "目標方位參考值",
        "exif-gpsdestbearing": "目標方位",
-       "exif-gpsdestdistanceref": "目標距離參",
+       "exif-gpsdestdistanceref": "目標距離參考值",
        "exif-gpsdestdistance": "目標距離",
-       "exif-gpsprocessingmethod": "GPS 處理方名稱",
+       "exif-gpsprocessingmethod": "GPS 處理方名稱",
        "exif-gpsareainformation": "GPS 區域名稱",
        "exif-gpsdatestamp": "GPS 日期",
-       "exif-gpsdifferential": "GPS å·®å\8b\95修正",
+       "exif-gpsdifferential": "GPS å·®å\88\86修正",
        "exif-jpegfilecomment": "JPEG 檔案備註",
        "exif-keywords": "關鍵字",
        "exif-worldregioncreated": "圖片拍攝地",
        "exif-countrycreated": "圖片拍攝國家",
-       "exif-countrycodecreated": "拍攝的國家代碼",
-       "exif-provinceorstatecreated": "省市",
-       "exif-citycreated": "照片中的城市",
-       "exif-sublocationcreated": "該城市的子地點",
-       "exif-worldregiondest": "世界區域顯示",
-       "exif-countrydest": "顯示國家",
-       "exif-countrycodedest": "顯示國家代碼",
-       "exif-provinceorstatedest": "省或狀態顯示",
+       "exif-countrycodecreated": "圖片拍攝國家代碼",
+       "exif-provinceorstatecreated": "圖片拍攝省市",
+       "exif-citycreated": "圖片拍攝城市",
+       "exif-sublocationcreated": "圖片拍攝城市詳細地點",
+       "exif-worldregiondest": "顯示世界區域",
+       "exif-countrydest": "顯示國家",
+       "exif-countrycodedest": "顯示國家代碼",
+       "exif-provinceorstatedest": "顯示省或州",
        "exif-citydest": "顯示城市",
-       "exif-sublocationdest": "城市的子地點",
+       "exif-sublocationdest": "顯示城市詳細地點",
        "exif-objectname": "簡稱",
        "exif-specialinstructions": "特別說明",
        "exif-headline": "標題",
-       "exif-credit": "署名/提供者",
+       "exif-credit": "製作/提供者",
        "exif-source": "來源",
        "exif-editstatus": "圖片編輯狀態",
        "exif-urgency": "緊急性",
        "exif-fixtureidentifier": "夾具名稱",
        "exif-locationdest": "位置描述",
-       "exif-locationdestcode": "位置所示的代碼",
+       "exif-locationdestcode": "位置代碼描述",
        "exif-objectcycle": "媒體的時間",
-       "exif-contact": "è\81¯ç¹«ä¿¡æ\81¯",
+       "exif-contact": "è\81¯çµ¡è³\87è¨\8a",
        "exif-writer": "作家",
        "exif-languagecode": "語言",
-       "exif-iimversion": "IIM版本",
-       "exif-iimcategory": "類別",
+       "exif-iimversion": "IIM 版本",
+       "exif-iimcategory": "分類",
        "exif-iimsupplementalcategory": "補充分類",
-       "exif-datetimeexpires": "這個日期後不要使用",
-       "exif-datetimereleased": "發表日",
-       "exif-originaltransmissionref": "å\82³è¼¸ä½\8dç½®å\8e\9f代碼",
-       "exif-identifier": "標識符號",
-       "exif-lens": "使用鏡頭",
-       "exif-serialnumber": "相機序號",
+       "exif-datetimeexpires": "於此日期後請勿使用",
+       "exif-datetimereleased": "發佈於",
+       "exif-originaltransmissionref": "å\8e\9få§\8bå\82³è¼¸ä½\8dç½®代碼",
+       "exif-identifier": "識別碼",
+       "exif-lens": "使用鏡頭",
+       "exif-serialnumber": "相機序號",
        "exif-cameraownername": "相機持有人",
        "exif-label": "標籤",
        "exif-datetimemetadata": "資料定義最後修改日期",
-       "exif-nickname": "非正式圖片名",
-       "exif-rating": "評分(最高5分)",
-       "exif-rightscertificate": "權利管理證書",
+       "exif-nickname": "非正式的影像名稱",
+       "exif-rating": "評分 (共 5 分)",
+       "exif-rightscertificate": "版權管理證書",
        "exif-copyrighted": "版權狀態",
        "exif-copyrightowner": "版權持有人",
        "exif-usageterms": "使用條款",
-       "exif-webstatement": "網ä¸\8aç\89\88æ¬\8a說明",
-       "exif-originaldocumentid": "文件的唯一ID",
-       "exif-licenseurl": "版權許可的連結",
-       "exif-morepermissionsurl": "替代的許可信息",
-       "exif-attributionurl": "當重時,請連結至",
-       "exif-preferredattributionname": "當重時,請署名",
+       "exif-webstatement": "ç·\9aä¸\8aç\89\88æ¬\8aè\81²明",
+       "exif-originaldocumentid": "原始文件唯一識別碼",
+       "exif-licenseurl": "版權授權連結",
+       "exif-morepermissionsurl": "替代授權資訊",
+       "exif-attributionurl": "當重複使用此作品時,請連結至",
+       "exif-preferredattributionname": "當重複使用此作品時,請署名",
        "exif-pngfilecomment": "PNG 檔案備註",
        "exif-disclaimer": "免責聲明",
        "exif-contentwarning": "內容警告",
        "exif-copyrighted-false": "版權所屬者不明",
        "exif-unknowndate": "未知的日期",
        "exif-orientation-1": "標準",
-       "exif-orientation-2": "水翻轉",
-       "exif-orientation-3": "旋轉180°",
+       "exif-orientation-2": "水翻轉",
+       "exif-orientation-3": "旋轉 180°",
        "exif-orientation-4": "垂直翻轉",
-       "exif-orientation-5": "旋轉90° 逆時針並垂直翻轉",
-       "exif-orientation-6": "逆時針旋轉90°",
-       "exif-orientation-7": "旋轉90° 順時針並垂直翻轉",
-       "exif-orientation-8": "順時針旋轉90°",
+       "exif-orientation-5": "逆時針旋轉 90° 並垂直翻轉",
+       "exif-orientation-6": "逆時針旋轉 90°",
+       "exif-orientation-7": "順時針旋轉 90° 並垂直翻轉",
+       "exif-orientation-8": "順時針旋轉 90°",
        "exif-planarconfiguration-1": "矮胖格式",
        "exif-planarconfiguration-2": "平面格式",
        "exif-colorspace-65535": "顏色未校準",
        "exif-componentsconfiguration-0": "不存在",
        "exif-exposureprogram-0": "未定義",
        "exif-exposureprogram-1": "手動",
-       "exif-exposureprogram-2": "標準式",
-       "exif-exposureprogram-3": "光圈優先模式",
-       "exif-exposureprogram-4": "快門優先模式",
-       "exif-exposureprogram-5": "藝術程式(景深優先)",
-       "exif-exposureprogram-6": "運動程式(快速快門速度優先)",
-       "exif-exposureprogram-7": "肖像模式(適用於背景在焦距以外的近距攝影)",
-       "exif-exposureprogram-8": "風景模式(適用於背景在焦距上的風景照片)",
-       "exif-subjectdistance-value": "$1",
+       "exif-exposureprogram-2": "標準式",
+       "exif-exposureprogram-3": "光圈優先",
+       "exif-exposureprogram-4": "快門優先",
+       "exif-exposureprogram-5": "藝術程式 (景深優先)",
+       "exif-exposureprogram-6": "運動模式 (快速快門優先)",
+       "exif-exposureprogram-7": "人像模式 (用於近距離照片,對焦不在背景)",
+       "exif-exposureprogram-8": "風景模式 (用於風景照片,對焦在背景)",
+       "exif-subjectdistance-value": "$1 尺",
        "exif-meteringmode-0": "未知",
-       "exif-meteringmode-1": "平均水準",
-       "exif-meteringmode-2": "中心加權平均測量",
+       "exif-meteringmode-1": "平均",
+       "exif-meteringmode-2": "中心加權平均",
        "exif-meteringmode-3": "點測",
        "exif-meteringmode-4": "多點測",
-       "exif-meteringmode-5": "模式測量",
-       "exif-meteringmode-6": "局部測量",
+       "exif-meteringmode-5": "模式",
+       "exif-meteringmode-6": "部分",
        "exif-meteringmode-255": "其他",
        "exif-lightsource-0": "未知",
-       "exif-lightsource-1": "日光",
-       "exif-lightsource-2": "光燈",
-       "exif-lightsource-3": "鎢絲燈(白熾燈)",
+       "exif-lightsource-1": "日光",
+       "exif-lightsource-2": "光燈",
+       "exif-lightsource-3": "鎢絲燈 (白熾燈)",
        "exif-lightsource-4": "閃光燈",
        "exif-lightsource-9": "晴天",
        "exif-lightsource-10": "多雲",
-       "exif-lightsource-11": "深色調陰影",
-       "exif-lightsource-12": "日光熒光燈(色溫 D 5700    7100K)",
-       "exif-lightsource-13": "日溫白色熒光燈(N 4600    5400K)",
-       "exif-lightsource-14": "å\86·ç\99½è\89²ç\86\92å\85\89ç\87\88ï¼\88W 3900    4500Kï¼\89",
-       "exif-lightsource-15": "白色熒光 (WW 3200 – 3700K)",
-       "exif-lightsource-17": "標準燈光A",
-       "exif-lightsource-18": "標準燈光B",
-       "exif-lightsource-19": "標準燈光C",
-       "exif-lightsource-24": "ISO攝影棚鎢燈",
+       "exif-lightsource-11": "陰暗處",
+       "exif-lightsource-12": "日光螢光燈 (D 5700 - 7100K)",
+       "exif-lightsource-13": "白天螢光燈 (N 4600 - 5400K)",
+       "exif-lightsource-14": "å\86·ç\99½è\9e¢å\85\89ç\87\88 (W 3900 - 4500K)",
+       "exif-lightsource-15": "白色螢光燈 (WW 3200 - 3700K)",
+       "exif-lightsource-17": "標準燈光 A",
+       "exif-lightsource-18": "標準燈光 B",
+       "exif-lightsource-19": "標準燈光 C",
+       "exif-lightsource-24": "ISO 攝影室鎢絲燈",
        "exif-lightsource-255": "其他光源",
-       "exif-flash-fired-0": "閃光燈無開火",
-       "exif-flash-fired-1": "閃光燈開火",
-       "exif-flash-return-0": "無頻閃測器功能",
-       "exif-flash-return-2": "頻閃測器未偵測到光",
-       "exif-flash-return-3": "頻閃測器偵測到光",
-       "exif-flash-mode-1": "強制閃光燈開",
-       "exif-flash-mode-2": "強制閃光抑制",
+       "exif-flash-fired-0": "閃光燈未開啟",
+       "exif-flash-fired-1": "閃光燈已開啟",
+       "exif-flash-return-0": "無頻閃測器功能",
+       "exif-flash-return-2": "頻閃測器未偵測到光",
+       "exif-flash-return-3": "頻閃測器偵測到光",
+       "exif-flash-mode-1": "強制閃光燈開",
+       "exif-flash-mode-2": "強制閃光燈關閉",
        "exif-flash-mode-3": "自動模式",
        "exif-flash-function-1": "無閃光燈功能",
-       "exif-flash-redeye-1": "紅眼減退模式",
+       "exif-flash-redeye-1": "防紅眼模式",
        "exif-focalplaneresolutionunit-2": "英寸",
        "exif-sensingmethod-1": "未定義",
        "exif-sensingmethod-2": "一塊彩色區域傳感器",
        "exif-whitebalance-1": "手動白平衡",
        "exif-scenecapturetype-0": "標準",
        "exif-scenecapturetype-1": "風景",
-       "exif-scenecapturetype-2": "像",
+       "exif-scenecapturetype-2": "像",
        "exif-scenecapturetype-3": "夜景",
        "exif-gaincontrol-0": "無",
        "exif-gaincontrol-1": "低增益",
        "exif-gpslatitude-s": "南緯",
        "exif-gpslongitude-e": "東經",
        "exif-gpslongitude-w": "西經",
-       "exif-gpsaltitude-above-sealevel": "海拔$1 {{PLURAL:$1|米}}",
-       "exif-gpsaltitude-below-sealevel": "海拔負$1{{PLURAL:$1|米}}",
+       "exif-gpsaltitude-above-sealevel": "海拔 $1 {{PLURAL:$1|公尺}}",
+       "exif-gpsaltitude-below-sealevel": "海拔負 $1 {{PLURAL:$1|公尺}}",
        "exif-gpsstatus-a": "測量過程",
        "exif-gpsstatus-v": "互動測量",
        "exif-gpsmeasuremode-2": "二維測量",
        "exif-gpsmeasuremode-3": "三維測量",
-       "exif-gpsspeed-k": "公里每小時",
-       "exif-gpsspeed-m": "英里每小時",
-       "exif-gpsspeed-n": "海里每小時(節)",
+       "exif-gpsspeed-k": "每小時公里",
+       "exif-gpsspeed-m": "每小時英里",
+       "exif-gpsspeed-n": "節 (海浬/小時)",
        "exif-gpsdestdistance-k": "公里",
        "exif-gpsdestdistance-m": "英里",
        "exif-gpsdestdistance-n": "海里",
-       "exif-gpsdop-excellent": "好 ($1)",
-       "exif-gpsdop-good": "良( $1 )",
-       "exif-gpsdop-moderate": "中等( $1 )",
-       "exif-gpsdop-fair": "一般($1)",
-       "exif-gpsdop-poor": "不佳( $1 )",
-       "exif-objectcycle-a": "限於上午",
-       "exif-objectcycle-p": "限於下午",
+       "exif-gpsdop-excellent": "非常好 ($1)",
+       "exif-gpsdop-good": "良好 ($1)",
+       "exif-gpsdop-moderate": "普通 ($1)",
+       "exif-gpsdop-fair": "差 ($1)",
+       "exif-gpsdop-poor": "非常差 ($1)",
+       "exif-objectcycle-a": "上午",
+       "exif-objectcycle-p": "下午",
        "exif-objectcycle-b": "上午與下午",
-       "exif-gpsdirection-t": "真方位",
-       "exif-gpsdirection-m": "地磁方",
+       "exif-gpsdirection-t": "真實方向",
+       "exif-gpsdirection-m": "地磁方",
        "exif-ycbcrpositioning-1": "置中",
        "exif-ycbcrpositioning-2": "聯合選址",
        "exif-dc-contributor": "貢獻者",
        "exif-dc-type": "介質類型",
        "exif-rating-rejected": "拒絕",
        "exif-isospeedratings-overflow": "大於 65535",
-       "exif-iimcategory-ace": "藝術,文化和娛樂",
+       "exif-iimcategory-ace": "藝術、文化與娛樂",
        "exif-iimcategory-clj": "犯罪與法律",
-       "exif-iimcategory-dis": "災​​害事故",
+       "exif-iimcategory-dis": "災​​害事故",
        "exif-iimcategory-fin": "經濟與商業",
        "exif-iimcategory-edu": "教育",
        "exif-iimcategory-evn": "環境",
        "exif-iimcategory-hth": "健康",
-       "exif-iimcategory-hum": "人類利益",
-       "exif-iimcategory-lab": "å\8b\9eå·¥",
-       "exif-iimcategory-lif": "生活休閒",
+       "exif-iimcategory-hum": "人情世故",
+       "exif-iimcategory-lab": "å\8b\9eå\8b\95",
+       "exif-iimcategory-lif": "生活休閒",
        "exif-iimcategory-pol": "政治",
-       "exif-iimcategory-rel": "宗教信仰",
-       "exif-iimcategory-sci": "科技",
+       "exif-iimcategory-rel": "宗教信仰",
+       "exif-iimcategory-sci": "科學與科技",
        "exif-iimcategory-soi": "社會問題",
        "exif-iimcategory-spo": "體育",
-       "exif-iimcategory-war": "戰爭,衝突和動盪",
+       "exif-iimcategory-war": "戰爭、衝突與動亂",
        "exif-iimcategory-wea": "天氣",
        "exif-urgency-normal": "正常 ($1)",
-       "exif-urgency-low": "低( $1 )",
+       "exif-urgency-low": "低 ($1)",
        "exif-urgency-high": "高 ($1)",
        "exif-urgency-other": "使用者自訂優先權 ($1)",
        "watchlistall2": "全部",
        "confirmemail_body_set": "不明人士 (可能是您自己,來自 IP 位址 $1)  已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件地址設定至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以啟用在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
        "confirmemail_invalidated": "電郵地址確認已取消",
        "invalidateemail": "取消電郵確認",
-       "scarytranscludedisabled": "[跨wiki轉換代碼不可用]",
+       "scarytranscludedisabled": "[Interwiki 轉換代碼不可用]",
        "scarytranscludefailed": "[樣版 $1 讀取失敗]",
        "scarytranscludefailed-httpstatus": "[樣版 $1 讀取失敗:HTTP $2]",
        "scarytranscludetoolong": "[URL 地址太長]",
-       "deletedwhileediting": "'''警告:'''此頁在您開始編輯之後已經被刪除﹗",
+       "deletedwhileediting": "<strong>警告:</strong>此頁在您開始編輯之後已經被刪除﹗",
        "confirmrecreate": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,原因為:\n: <em>$2</em>\n請確認您是否真的要重新建立此頁面。",
        "confirmrecreate-noreason": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,請確認您是否真的要重新建立此頁面。",
        "recreate": "重建",
        "confirm-purge-top": "要清除此頁面的快取嗎?",
        "confirm-purge-bottom": "清理一頁將會清除快取以及強迫顯示最現時之修訂版本。",
        "confirm-watch-button": "確定",
-       "confirm-watch-top": "監視此頁?",
+       "confirm-watch-top": "新增此頁面至您的監視清單?",
        "confirm-unwatch-button": "確定",
-       "confirm-unwatch-top": "å\81\9cæ­¢ç\9b£è¦\96æ­¤é \81?",
+       "confirm-unwatch-top": "å¾\9eæ\82¨ç\9a\84ç\9b£è¦\96æ¸\85å\96®ä¸­ç§»é\99¤æ­¤é \81é\9d¢?",
        "comma-separator": "、",
        "colon-separator": ":",
        "word-separator": "",
        "parentheses": " ($1)",
-       "quotation-marks": "「$1」",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← 上一頁",
        "imgmultipagenext": "下一頁 →",
        "imgmultigo": "確定!",
-       "imgmultigoto": "å\88°ç¬¬$1頁",
+       "imgmultigoto": "å\89\8då¾\80第 $1 頁",
        "img-lang-default": "(預設語言)",
-       "img-lang-info": "於$1呈現此圖像。$2",
-       "img-lang-go": "",
-       "ascending_abbrev": "升",
-       "descending_abbrev": "é\81\9eæ¸\9b",
+       "img-lang-info": "顯示此圖片於 $1。$2",
+       "img-lang-go": "前往",
+       "ascending_abbrev": "升",
+       "descending_abbrev": "é\99\8då\86ª",
        "table_pager_next": "下一頁",
        "table_pager_prev": "上一頁",
        "table_pager_first": "第一頁",
        "table_pager_limit_submit": "送出",
        "table_pager_empty": "沒有結果",
        "autosumm-blank": "清空頁面",
-       "autosumm-replace": "以ã\80\8c$1ã\80\8dæ\9b¿æ\8f\9b內容",
-       "autoredircomment": "é\87\8dæ\96°å°\8eå\90\91é \81é\9d¢至 [[$1]]",
+       "autosumm-replace": "使ç\94¨ \"$1\" å\8f\96代內容",
+       "autoredircomment": "é \81é\9d¢å·²é\87\8då®\9aå\90\91至 [[$1]]",
        "autosumm-new": "已建立頁面,內容為 \"$1\"",
        "size-bytes": "$1 位元組",
-       "lag-warn-normal": "過去$1秒內的更改未必會在這個清單中顯示。",
-       "lag-warn-high": "由於資料庫的過度延遲,過去$1秒內的更改未必會在這個清單中顯示。",
-       "watchlistedit-normal-title": "編輯監視列表",
-       "watchlistedit-normal-legend": "從監視列表中移除標題",
-       "watchlistedit-normal-explain": "在您的監視列表中的標題在下面顯示。要移除一個標題,在它前面剔一下,接著點擊「{{int:Watchlistedit-normal-submit}}」。您亦可以[[Special:EditWatchlist/raw|編輯原始監視列表]]。",
+       "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": "$1個標題已經從您的監視列表中移除:",
-       "watchlistedit-raw-title": "編輯原始監視列表",
-       "watchlistedit-raw-legend": "編輯原始監視列表",
-       "watchlistedit-raw-explain": "您的監視列表中的標題在下面顯示,同時亦都可以透過編輯這個表去加入以及移除標題;一行一個標題。當完成以後,點擊{{int:Watchlistedit-raw-submit}}。{{GENDER:|你|妳|你}}亦都可以去用[[Special:EditWatchlist|標準編輯器]]。",
+       "watchlistedit-normal-done": "已於您的監視清單中移除 $1 個標題:",
+       "watchlistedit-raw-title": "編輯原始監視清單",
+       "watchlistedit-raw-legend": "編輯原始監視清單",
+       "watchlistedit-raw-explain": "下方顯示在您監視清單中的標題,您可透過編輯來新增與移除清單項目,一個標題一行。\n完成編輯後,請點選 \"{{int:Watchlistedit-raw-submit}}\"。\n您也可 [[Special:EditWatchlist|使用標準編輯器]]。",
        "watchlistedit-raw-titles": "標題:",
-       "watchlistedit-raw-submit": "更新監視列表",
-       "watchlistedit-raw-done": "您的監視列表已經更新。",
-       "watchlistedit-raw-added": "已經加入了$1個標題:",
-       "watchlistedit-raw-removed": "å·²ç\93移é\99¤äº\86$1å\80\8bæ¨\99é¡\8c:",
-       "watchlistedit-clear-title": "已清除監視列表",
-       "watchlistedit-clear-legend": "清除監視列表",
-       "watchlistedit-clear-explain": "所有標題將會從你的監視列表中刪除",
+       "watchlistedit-raw-submit": "更新監視清單",
+       "watchlistedit-raw-done": "已更新您的監視清單。",
+       "watchlistedit-raw-added": "已新增 $1 個標題:",
+       "watchlistedit-raw-removed": "已移é\99¤ $1 å\80\8bæ¨\99é¡\8cï¼\9a",
+       "watchlistedit-clear-title": "已清空監視清單",
+       "watchlistedit-clear-legend": "清空監視清單",
+       "watchlistedit-clear-explain": "將會移除您的監視清單中所有的標題",
        "watchlistedit-clear-titles": "標題:",
-       "watchlistedit-clear-submit": "清除監視列表(這是永久!)",
-       "watchlistedit-clear-done": "您的監視列表已經清除。",
-       "watchlistedit-clear-removed": "å·²ç\93移é\99¤äº\86$1個標題:",
-       "watchlistedit-too-many": "有太多的頁面要在此處顯示。",
-       "watchlisttools-clear": "清除監視列表",
-       "watchlisttools-view": "檢視相關更改",
-       "watchlisttools-edit": "檢視並編輯監視列表",
-       "watchlisttools-raw": "編輯原始監視列表",
-       "signature": "[[{{ns:user}}:$1|$2]]([[{{ns:user_talk}}:$1|對話]])",
-       "unknown_extension_tag": "ä¸\8dæ\98\8eç\9a\84æ\93´å±\95æ¨\99籤ã\80\8c$1ã\80\8d",
-       "duplicate-defaultsort": "警告: 預設的排序鍵「$2」覆蓋先前的預設排序鍵「$1」。",
+       "watchlistedit-clear-submit": "清空監視清單(無法還原)",
+       "watchlistedit-clear-done": "已清空您的監視清單。",
+       "watchlistedit-clear-removed": "已移é\99¤ $1 個標題:",
+       "watchlistedit-too-many": "太多要在此處顯示的頁面。",
+       "watchlisttools-clear": "清空監視清單",
+       "watchlisttools-view": "檢視相關變更",
+       "watchlisttools-edit": "檢視並編輯監視清單",
+       "watchlisttools-raw": "編輯原始監視清單",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|對話]])",
+       "unknown_extension_tag": "ä¸\8dæ\98\8eç\9a\84æ\93´å\85\85æ¨\99籤 \"$1\"",
+       "duplicate-defaultsort": "<strong>警告:</strong>預設的排序鍵 \"$2\" 會覆蓋先前預設的排序鍵 \"$1\"。",
        "version": "版本",
        "version-extensions": "已安裝的擴充套件",
        "version-specialpages": "特殊頁面",
        "version-parser-function-hooks": "語法函數連結",
        "version-hook-name": "連結名稱",
        "version-hook-subscribedby": "署名",
-       "version-version": "(版本 $1)",
+       "version-version": "($1)",
        "version-license": "MediaWiki 授權條款",
        "version-ext-license": "授權條款",
        "version-ext-colheader-name": "擴充套件",
        "version-entrypoints-header-entrypoint": "入口",
        "version-entrypoints-header-url": "URL",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath 條目路徑]",
-       "redirect": "依檔案、使用者、頁面或修訂 ID 重新導向",
-       "redirect-legend": "重新導向至檔案或頁面",
-       "redirect-summary": "此特殊頁面可用來重新導向至檔案 (指定檔案名稱)、頁面 (指定修訂 ID 或頁面 ID) 或使用者頁面 (指定使用者 ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]] 或 [[{{#Special:Redirect}}/user/101]]。",
-       "redirect-submit": "提交",
+       "redirect": "指向檔案、使用者、頁面或修訂 ID 的重定向",
+       "redirect-legend": "重向至檔案或頁面",
+       "redirect-summary": "此特殊頁面可用來建立重定向,指向任何檔案(指定檔案名)、頁面(指定修訂 ID 或頁面 ID)或使用者頁面(指定使用者 ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]] 或 [[{{#Special:Redirect}}/user/101]]。",
+       "redirect-submit": "執行",
        "redirect-lookup": "尋找:",
        "redirect-value": "值:",
        "redirect-user": "使用者 ID",
        "specialpages-group-pages": "頁面清單",
        "specialpages-group-pagetools": "頁面工具",
        "specialpages-group-wiki": "資料和工具",
-       "specialpages-group-redirects": "重新導向相關特殊頁面",
+       "specialpages-group-redirects": "重定向到別處的特殊頁面",
        "specialpages-group-spam": "反垃圾訊息工具",
        "blankpage": "空白頁面",
        "intentionallyblankpage": "此頁面被故意設為空白。",
        "revdelete-restricted": "已套用對管理員的限制",
        "revdelete-unrestricted": "已移除對管理員的限制",
        "logentry-move-move": "$1 {{GENDER:$2|已移動}}頁面 $3 至 $4",
-       "logentry-move-move-noredirect": "$1 {{GENDER:$2|已移動}}頁面 $3 至 $4,未留重新導向頁面",
-       "logentry-move-move_redir": "$1 {{GENDER:$2|已移動}}頁面 $3 覆蓋重新導向頁面至 $4",
-       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|已移動}}頁面 $3 覆蓋重新導向頁面至 $4,未留重新導向頁面",
+       "logentry-move-move-noredirect": "$1 已移動頁面 $3 至 $4,不留重定向",
+       "logentry-move-move_redir": "$1 已移動頁面 $3 至 $4 並覆蓋原有重定向",
+       "logentry-move-move_redir-noredirect": "$1 已移動頁面 $3 至 $4 並覆蓋原有重定向,不留重定向",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|已標記}}頁面 $3 的修訂 $4 為已巡查",
        "logentry-patrol-patrol-auto": "$1 已自動{{GENDER:$2|標記}}頁面 $3 的修訂 $4 為已巡查",
        "logentry-newusers-newusers": "已{{GENDER:$2|建立}}使用者帳號 $1",
        "feedback-bugnew": "我已經檢查過。報告一個新的bug",
        "searchsuggest-search": "搜尋",
        "searchsuggest-containing": "包含...",
-       "api-error-badaccess-groups": "您沒有權限在此維基項目上傳文件。",
+       "api-error-badaccess-groups": "您沒有權限在此 Wiki 上傳檔案。",
        "api-error-badtoken": "內部錯誤:標記無效。",
        "api-error-copyuploaddisabled": "通過URL上傳的功能已被此伺服器禁用。",
        "api-error-duplicate": "在網站上已經具有相同內容的{{PLURAL:$1|[$2 另一個文件]|[$2 另一些文件]}}。",
        "api-error-hookaborted": "你試圖進行的修改被一個擴展鉤子終止。",
        "api-error-http": "內部錯誤:無法連接到伺服器。",
        "api-error-illegal-filename": "檔案名不允許。",
-       "api-error-internal-error": "內部錯誤:此維基項目在處理你的上傳數據時出現了錯誤。",
-       "api-error-invalid-file-key": "內部錯誤:臨時存儲中找不到文件。",
+       "api-error-internal-error": "內部錯誤:此 Wiki 在處理你的上傳時發生錯誤。",
+       "api-error-invalid-file-key": "內部錯誤:於臨時儲存庫中查無檔案。",
        "api-error-missingparam": "內部錯誤:請求中缺少參數。",
        "api-error-missingresult": "內部錯誤:無法確定複製是否成功。",
        "api-error-mustbeloggedin": "您必須登錄後再上傳文件。",
index dfa1dba..a8eb197 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Abkhazian (Аҧсшәа)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 4686447..755a249 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Achinese (Acèh)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index f0c4336..797bfda 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tunisian Spoken Arabic (   زَوُن)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7e5d1e2..a8190b3 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Afrikaans (Afrikaans)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d6d72e8..f205526 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Akan (Akan)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7fce53f..588cf34 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Gheg Albanian (Gegë)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7ac1667..64b938e 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Amharic (አማርኛ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 2325100..7ec924e 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Aragonese (aragonés)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 4a132ba..aa1d9d1 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Old English (Ænglisc)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
@@ -24,11 +23,16 @@ $namespaceNames = array(
 
 $namespaceAliases = array(
        'Gesprec'       => NS_TALK,
+       'Motung'        => NS_TALK,
        'Brucend'       => NS_USER,
        'Brucendmotung' => NS_USER_TALK,
        'Biliþgesprec'  => NS_FILE_TALK,
+       'Biliþmotung'   => NS_FILE_TALK,
        'Bysengesprec'  => NS_TEMPLATE_TALK,
+       'Bysenmotung'   => NS_TEMPLATE_TALK,
        'Helpgesprec'   => NS_HELP_TALK,
+       'Helpmotung'    => NS_HELP_TALK,
        'Floccgesprec'  => NS_CATEGORY_TALK,
+       'Floccmotung'   => NS_CATEGORY_TALK,
 );
 
index 3577b12..fb6adc7 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Angika (अङ्गिका)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6109535..dd9b06f 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Arabic (العربية)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
@@ -30,6 +29,7 @@ $datePreferences = array(
        'ymd',
        'hijri',
        'ISO 8601',
+       'jMY',
 );
 
 /**
@@ -79,6 +79,10 @@ $dateFormats = array(
        'ISO 8601 time' => 'xnH:xni:xns',
        'ISO 8601 date' => 'xnY-xnm-xnd',
        'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+
+       'jMY time' => 'H:i',
+       'jMY date' => 'j M Y',
+       'jMY both' => 'H:i، j M Y', # Arabic comma
 );
 
 $digitTransformTable = array(
index 3f8f7c8..cd514d3 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Aramaic (ܐܪܡܝܐ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d52a134..723bd7b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Mapuche (mapudungun)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 518c907..0fcf660 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Algerian Spoken Arabic (جزائري)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index c059840..8e2b71f 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Egyptian Spoken Arabic (مصرى)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 4d99a71..3d6e1f2 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Assamese (অসমীয়া)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 20a5ba9..824242b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Asturian (asturianu)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 4ddc8ff..d3e5134 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Avaric (авар)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d98d431..076d402 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kotava (Kotava)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d9ff9cd..e065664 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Aymara (Aymar aru)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index e04efb5..b218e3c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Azerbaijani (azərbaycanca)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 8fbb201..63c88a8 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** South Azerbaijani (تورکجه)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5faaca0..aaf6c2b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Bashkir (башҡортса)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 68c824d..af37630 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Bavarian (Boarisch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index e5072e9..5b978e7 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Batak Toba (Batak Toba)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 4fbe2bd..8449512 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Batak Toba (Batak Toba)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index e9ac286..f5ade22 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Southern Balochi (بلوچی مکرانی)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 43a51f8..6f22ac5 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Bikol Central (Bikol Central)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7a9ffa8..d97cc9c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Belarusian (беларуская)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
@@ -64,7 +63,7 @@ $dateFormats = array(
        'dmy both' => 'H:i, j xg Y',
 );
 
-# Per discussion on http://translatewiki.net/wiki/Thread:Support/Customization_of number format
+# Per discussion on https://translatewiki.net/wiki/Thread:Support/Customization_of number format
 $separatorTransformTable = array(
        ',' => "\xc2\xa0", # nbsp
        '.' => ','
index 4d77137..6ff8220 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Belarusian (Taraškievica orthography) (беларуская (тарашкевіца)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 805e9de..3fb3606 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Bulgarian (български)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 1ec602b..4453bd1 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Bihari (भोजपुरी)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 81ab875..e90797a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Bhojpuri (भोजपुरी)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7151244..88d8d6e 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Banjar (Bahasa Banjar)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 9dea18a..9c2ec69 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Bambara (bamanankan)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d06ccac..154115a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Bengali (বাংলা)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5bcffa9..7fa2477 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tibetan (བོད་ཡིག)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index a912748..c2867b2 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Bishnupria Manipuri (বিষ্ণুপ্রিয়া মণিপুরী)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b6ffd71..e8a3ee0 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Bakhtiari (بختياري)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3451ee2..7824ba4 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Breton (brezhoneg)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 557db7e..57413ac 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Bosnian (bosanski)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b85dadd..fd135c9 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Buginese (ᨅᨔ ᨕᨘᨁᨗ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3529d74..2259641 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** буряад (буряад)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 48a86fc..6cfb988 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Catalan (català)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7ae7cde..c60d0b3 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Chavacano de Zamboanga (Chavacano de Zamboanga)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 074e145..c9b8a86 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Min Dong Chinese (Mìng-dĕ̤ng-ngṳ̄)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 77c8c22..d8e07ae 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Chechen (нохчийн)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 772e646..7c81c41 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Cebuano (Cebuano)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d6b7c70..ba89284 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Chamorro (Chamoru)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index a3f42ae..dd19174 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Sorani Kurdish (کوردی)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 0f5667e..6f24cbf 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Corsican (corsu)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 067dd1e..f85461f 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Crimean Turkish (Qırımtatarca)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 8870f94..3729a78 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Crimean Turkish (Cyrillic script) (къырымтатарджа (Кирилл)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 2a82925..7fb5df0 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Crimean Turkish (Latin script) (qırımtatarca (Latin)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6632f7b..2718a48 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Czech (čeština)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7bc1221..34dbf77 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kashubian (kaszëbsczi)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 8e13d04..08494b0 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Church Slavic (словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 2eec986..0fff4d0 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Chuvash (Чӑвашла)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 55ed354..35cf273 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Welsh (Cymraeg)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3449685..075369e 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Danish (dansk)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 88803e6..1d97c23 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** German (Deutsch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
@@ -202,7 +201,7 @@ $magicWords = array(
        'subjectpagenamee'          => array( '1', 'HAUPTSEITENNAME_URL', 'VORDERSEITE_URL', 'HAUPTSEITE_URL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
        'subst'                     => array( '0', 'ERS:', 'SUBST:' ),
        'safesubst'                 => array( '0', 'SICHER_ERS:', 'SICHERERS:', 'SAFESUBST:' ),
-       'img_thumbnail'             => array( '1', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
+       'img_thumbnail'             => array( '1', 'mini', 'miniatur', 'thumbnail', 'thumb' ),
        'img_manualthumb'           => array( '1', 'miniatur=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
        'img_right'                 => array( '1', 'rechts', 'right' ),
        'img_left'                  => array( '1', 'links', 'left' ),
index e073b97..0d64e7c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Austrian German (Österreichisches Deutsch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index eb2858d..4c3f1db 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Swiss High German (Schweizer Hochdeutsch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index f5e213d..bda548a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** German (formal address) (Deutsch (Sie-Form)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 89713dc..12d3b96 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Zazaki (Zazaki)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index c34af25..4cffd2b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Lower Sorbian (dolnoserbski)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 66f2b3d..ea00e95 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Central Dusun (Dusun Bundu-liwan)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6856800..1f49212 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Divehi (ދިވެހިބަސް)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b900f4a..df1f3fa 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Dzongkha (ཇོང་ཁ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5351a29..c56bee6 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Emiliàn (Emiliàn)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b2627ff..c6bcc46 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Greek (Ελληνικά)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index c73acfd..fa4b65a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Emiliano-Romagnolo (emiliàn e rumagnòl)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 39036d7..07a0467 100644 (file)
@@ -1,15 +1,10 @@
 <?php
 /**
- * This is the default English localisation file
+ * This is the default English localisation file containing language specific
+ * information excluding interface strings, which are stored in JSON files.
  *
- * END USERS: DO NOT EDIT THIS FILE DIRECTLY!
- *
- * Changes in this file will be lost during software upgrades.
- * You can make your customizations on the wiki.
- * While logged in as administrator, go to [[Special:Allmessages]]
- * and edit the MediaWiki:* pages listed there.
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
+ * Please see https://www.mediawiki.org/wiki/Localisation for more information.
+ * To improve a translation please visit https://translatewiki.net
  */
 
 /**
@@ -435,7 +430,7 @@ $specialPageAliases = array(
        'Mostinterwikis'            => array( 'MostInterwikis' ),
        'Mostlinked'                => array( 'MostLinkedPages', 'MostLinked' ),
        'Mostlinkedcategories'      => array( 'MostLinkedCategories', 'MostUsedCategories' ),
-       'Mostlinkedtemplates'       => array( 'MostLinkedTemplates', 'MostUsedTemplates' ),
+       'Mostlinkedtemplates'       => array( 'MostTranscludedPages', 'MostLinkedTemplates', 'MostUsedTemplates' ),
        'Mostrevisions'             => array( 'MostRevisions' ),
        'Movepage'                  => array( 'MovePage' ),
        'Mycontributions'           => array( 'MyContributions' ),
index da9897e..025c2ca 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** British English (British English)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index bf408d1..6935d00 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /**
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index c905c2c..49f3ae9 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Esperanto (Esperanto)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5291c6c..2b4b8b9 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Spanish (español)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 49c2cbc..e30b242 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Estonian (eesti)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b775300..64316d8 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Basque (euskara)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index e94c79a..1af959b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Extremaduran (estremeñu)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3ae6b75..88afbe7 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Persian (فارسی)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 04ee745..02dd6d2 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Fulah (Fulfulde)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index ccaa055..50558ee 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Finnish (suomi)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5f9fa64..85e5e0f 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** meänkieli (meänkieli)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 400b1ad..d138eb4 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Faroese (føroyskt)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 98ef56e..cd5359b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** French (français)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b9f7e22..c6e497b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Cajun French (français cadien)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b466bdd..ac16028 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Franco-Provençal (arpetan)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6872d96..7ad9d50 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Northern Frisian (Nordfriisk)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index dc6a088..52fdee8 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Friulian (furlan)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index a0cd663..e02baf0 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Western Frisian (Frysk)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d9d37a2..6238b48 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Irish (Gaeilge)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 0eb6451..390e658 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Gagauz (Gagauz)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b4aede9..0cf0883 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Gan (贛語)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 949222d..d852ddf 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Simplified Gan script (赣语(简体)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index dff9b73..cafba75 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Traditional Gan script (贛語(繁體)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5e75d06..f7bc2ff 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Scottish Gaelic (Gàidhlig)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6000a5c..e30f724 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Galician (galego)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6a03f6b..c2e5433 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Gilaki (گیلکی)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index f02a573..b746212 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Guarani (Avañe'ẽ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 0f13f5a..6e8ff0b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Gothic (Gothic)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5a604ae..7e66a00 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Ancient Greek (Ἀρχαία ἑλληνικὴ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index ffa3b36..7cbe696 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Swiss German (Alemannisch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index bfb0cc3..3fc9f6b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Gujarati (ગુજરાતી)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3853f31..d849d45 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Manx (Gaelg)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 9835d9f..df1d1fe 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Hakka (客家語/Hak-kâ-ngî)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 4dd4907..723eac8 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Hawaiian (Hawai`i)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index bb87f04..60f9bf8 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Hebrew (עברית)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d876250..9abd595 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Hindi (हिन्दी)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3d572f2..87e7ede 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Fiji Hindi (Fiji Hindi/फ़ीजी हिन्दी)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 30b97f7..daa741a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Fiji Hindi (Latin script) (Fiji Hindi)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 808c0dd..53cbf54 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Croatian (hrvatski)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 562f357..8108c6b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Hunsrik (Hunsrik)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index ef4906a..947e6b1 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Upper Sorbian (hornjoserbsce)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3cbe369..5e4b1e4 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Haitian (Kreyòl ayisyen)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index a7e1213..eca285e 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Hungarian (magyar)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 69f1ca9..ea23ef0 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Armenian (Հայերեն)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index a758d7e..744ac9d 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Interlingua (interlingua)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 48507d4..4ea207d 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Indonesian (Bahasa Indonesia)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index ea35693..748f82b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Interlingue (Interlingue)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5652bea..1756106 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Igbo (Igbo)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5638d12..6f4f23a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Sichuan Yi (ꆇꉙ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 99a30a5..c09a241 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Iloko (Ilokano)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index f99d009..c7f1c83 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Ingush (ГӀалгӀай)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index a6b26ed..f7e5221 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Ido (Ido)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index edf97fb..effce71 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Icelandic (íslenska)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index ca49c72..b3f301b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Italian (italiano)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 43914e3..6a0e6ee 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Inuktitut (ᐃᓄᒃᑎᑐᑦ/inuktitut)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d134ca3..ebb52ce 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Japanese (日本語)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index fdcfeee..029b050 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Jutish (jysk)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b3067d6..4c6bff4 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Javanese (Basa Jawa)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index dd98bc6..1006422 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Georgian (ქართული)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 9817721..44b7224 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kara-Kalpak (Qaraqalpaqsha)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 29d1bc6..f2e8676 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kabyle (Taqbaylit)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index bf4cdef..4617b3b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kabardian
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 40de17e..9800eb5 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Адыгэбзэ (Адыгэбзэ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 2fd8ace..5893175 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kongo (Kongo)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d936acc..4cd2495 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Khowar (کھوار)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 0945738..9ae9438 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kirmanjki (Kırmancki)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 36d5f9b..ce30e55 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kazakh (қазақша)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5315e57..3fcc4cc 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kazakh (Arabic script) (قازاقشا (تٴوتە)‏)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index eeafab8..56c43dd 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kazakh (China) (‫قازاقشا (جۇنگو)‬)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6445379..3e1b7ab 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kazakh (Cyrillic script) (қазақша (кирил)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 231259a..448d25c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kazakh (Kazakhstan) (‪Қазақша (Қазақстан)‬)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index f59d215..76aff5b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kazakh (Latin script) (qazaqşa (latın)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 05627f9..82eb920 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kazakh (Turkey) (‪Qazaqşa (Türkïya)‬)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index eccc6bc..b379252 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kalaallisut (kalaallisut)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 8209826..faceb17 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Khmer (ភាសាខ្មែរ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 463dd5e..cede41c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kannada (ಕನ್ನಡ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index fb28c6a..ec0e973 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Korean (한국어)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3ac6f08..4ef098d 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Korean (한국어(조선))
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 60ff28e..0296bf7 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Komi-Permyak (Перем Коми)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6c90370..d7826be 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Karachay-Balkar (къарачай-малкъар)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index bbb26a8..e7010f4 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kashmiri (कॉशुर / کٲشُر)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index dae8ab6..89f877f 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kashmiri (Arabic script) (کٲشُر)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index e8f907d..020d412 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kashmiri (Devanagari script) (कॉशुर)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6602ec7..23cf2ba 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Colognian (Ripoarisch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 0c71b1b..5da5f28 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kurdish (Kurdî / كوردی)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index ef3322f..471bfaf 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** كوردي (عەرەبی)‏ (كوردي (عەرەبی)‏)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7b9ba96..f42a893 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kurdish (Latin script) (Kurdî (latînî)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 97da660..d6df404 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Komi (коми)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index da83c01..1b7c78c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Cornish (kernowek)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6211e86..5400778 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kyrgyz (Кыргызча)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index ff84a0a..9f3d904 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Latin (Latina)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index bafaa10..cbeb69e 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Ladino (Ladino)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 1f1431b..4ae749a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Luxembourgish (Lëtzebuergesch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index ea2eb11..c3b0ae4 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** лакку (лакку)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 1a0612d..27b6e86 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Lezghian (лезги)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3123a65..8edc487 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Lingua Franca Nova (Lingua Franca Nova)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 8bf7659..4efd38c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Limburgish (Limburgs)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 8719a96..8cc1a21 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Ligure (Ligure)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3e82513..b76f6d6 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Līvõ kēļ (Līvõ kēļ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 754fd27..12dc58c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** lumbaart (lumbaart)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7cd53c6..4838e0f 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Lingala (lingála)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 9eb57f0..1bcf6a3 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Lao (ລາວ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 82b279b..1a23b3f 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** لوری (لوری)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5e7ebcb..a2ce260 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Lithuanian (lietuvių)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 256c331..1dd60f8 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Latgalian (latgaļu)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 4332ab6..7205e6c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Latvian (latviešu)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3b55e9a..d5437da 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Literary Chinese (文言)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5d0bca7..4ef414f 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Lazuri (Lazuri)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index dd62842..09ae5a6 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Maithili (मैथिली)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 9224068..f76bcaa 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Basa Banyumasan (Basa Banyumasan)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7d68635..274b724 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Moksha (мокшень)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d90a408..1153500 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Malagasy (Malagasy)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index e962ec0..9ab687a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Eastern Mari (олык марий)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 2e6dde9..5ab67ae 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Minangkabau (Baso Minangkabau)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index af941e2..063b8d9 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Macedonian (македонски)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b4c5cc3..718ab28 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Malayalam (മലയാളം)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 091051b..667108a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Mongolian (монгол)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 4e89969..3690a27 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Moldavian (молдовеняскэ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 1027ead..0bbbf8c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Marathi (मराठी)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 4ddc73c..a1203e9 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Hill Mari (кырык мары)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d2b91f6..b6da373 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Malay (Bahasa Melayu)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index f0f4132..e5dd967 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Maltese (Malti)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 19cb50e..e651123 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Mirandese (Mirandés)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 1e27039..8d39899 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Burmese (မြန်မာဘာသာ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 848ca7c..f6b688e 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Erzya (эрзянь)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index df793f3..ad73dc1 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Mazanderani (مازِرونی)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 78fc7ce..444d74a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Nāhuatl (Nāhuatl)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index e6f9613..8d0d14c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Min Nan Chinese (Bân-lâm-gú)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 43e7f5e..59e24fa 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Neapolitan (Napulitano)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 9452c94..83e736f 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Norwegian Bokmål (norsk bokmål)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index bae8d3d..3397894 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Low German (Plattdüütsch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 908f74b..fdb33e4 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Low Saxon (Netherlands) (Nedersaksies)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d786f09..7184f6c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Nepali (नेपाली)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 96af2fa..5e2e9bc 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Newari (नेपाल भाषा)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d8c5d57..c90908f 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Dutch (Nederlands)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 9cc9f57..695d5cc 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Nederlands (informeel)‎ (Nederlands (informeel)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 91b30fe..9d99964 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Norwegian Nynorsk (norsk nynorsk)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b041b38..ebe42f4 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Northern Sotho (Sesotho sa Leboa)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 05b91ca..74b5ca1 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Navajo (Diné bizaad)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3057f1a..925513c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Occitan (occitan)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 8b0b7b1..db25e5a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Oriya (ଓଡ଼ିଆ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 8473eac..5eaccf6 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Ossetic (Ирон)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b8d0849..3c512d7 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Punjabi (ਪੰਜਾਬੀ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 176df1b..9d592e9 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Picard (Picard)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 44c39c7..5c835dc 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Deitsch (Deitsch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 943eb40..472b7bf 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Plautdietsch (Plautdietsch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 390bbf4..c0832fd 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Pälzisch (Pälzisch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 661d7be..fd599a1 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Pali (पालि)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index aba939d..c591faa 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Polish (polski)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 8fdccf0..1945b96 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Piedmontese (Piemontèis)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index a89124c..e7f45f1 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Western Punjabi (پنجابی)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7be93a6..0ca2a49 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Pontic (Ποντιακά)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 808767c..fbc9419 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Pashto (پښتو)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index dcc0742..5dd94ab 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Portuguese (português)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index e202ce3..b981b37 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Brazilian Portuguese (português do Brasil)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 8017778..63d6513 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Quechua (Runa Simi)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index e9e257c..458d60a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Runa shimi (Runa shimi)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 356f50c..8d3c300 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Romagnol (Rumagnôl)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index c82e472..b31dd5c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Romansh (rumantsch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index f825428..d61c007 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Romani (Romani)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 17e201a..a3c15c6 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Romanian (română)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 0a17a16..0924ab1 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** tarandíne (tarandíne)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 9820e92..9098d85 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Russian (русский)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 52eb06f..bdfcd8e 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Rusyn (русиньскый)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index ce2d0ce..4f4bde0 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Megleno-Romanian (Vlăheşte)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 5a3b29d..29b1d94 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Megleno-Romanian (Cyrillic script) (Влахесте)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 37e01a8..5995152 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Megleno-Romanian (Latin script) (Vlăheşte)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index cbb6430..6b15283 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Sanskrit (संस्कृतम्)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7b72066..4897268 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Sakha (саха тыла)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 9227ee0..b8b8f64 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Sardinian (sardu)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index aed48d1..d06e726 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Sicilian (sicilianu)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 814e184..adfc05e 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Sindhi (سنڌي)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d4c01f4..4ab9c11 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Sassaresu (Sassaresu)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 2192a56..1917f32 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Northern Sami (sámegiella)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6a44a4c..c6081f3 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Sango (Sängö)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3e8dee8..06b8cfb 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Samogitian (žemaitėška)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 62b4582..c5dbf12 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Serbo-Croatian (srpskohrvatski / српскохрватски)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index f068931..1ac48a0 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Sinhala (සිංහල)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index bb017b0..83155da 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Slovak (slovenčina)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index afb9508..ea6b569 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Slovenian (slovenščina)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index a0f5e38..6754233 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Lower Silesian (Schläsch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index ad4bf5b..3c27597 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Albanian (shqip)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3994de8..2bf0156 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Serbian (српски / srpski)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 28a0faa..017b4d0 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Serbian (Cyrillic script) (српски (ћирилица)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index c793793..6a5817c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Serbian (Latin script) (srpski (latinica)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 9b8a43b..5ec55fa 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Sranan Tongo (Sranantongo)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 565fa10..c8d9c30 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Seeltersk (Seeltersk)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 247f698..87c6921 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Sundanese (Basa Sunda)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 915704f..b359c26 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Swedish (svenska)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index f48b676..c653de3 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Swahili (Kiswahili)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 43a5dab..282373c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Silesian (ślůnski)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index e8d9758..22f0b33 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tamil (தமிழ்)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 347aa9c..4ff8d2d 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tulu (ತುಳು)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index bccce7e..b5f131a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Telugu (తెలుగు)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 509ef2e..c48704a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tetum (tetun)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 2a0e7fd..b77ffc8 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tajik (Тоҷикӣ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3b00372..85ccad7 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tajik (Cyrillic script) (тоҷикӣ)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6c55ed0..7825ae9 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Thai (ไทย)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index c358df8..a6dedaa 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Turkmen (Türkmençe)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 97ec2f3..799dc34 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tagalog (Tagalog)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 6ba0e41..5a9b68c 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** толышә зывон (толышә зывон)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 0fb89d5..fe4e5d4 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tok Pisin (Tok Pisin)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 904dca6..e08c9fc 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Turkish (Türkçe)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 32cee15..0228801 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tatar (татарча/tatarça)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index daa5d57..bc26d31 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tatar (Cyrillic script) (татарча)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b09789b..09b5590 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tatar (Latin script) (tatarça)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index a5aa042..5e994a3 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tahitian (Reo Mā`ohi)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index de694e4..41f21e5 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Tuvinian (тыва дыл)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 98bea8a..62bf716 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Udmurt (удмурт)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 0e92975..f2668f4 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Uighur (Uyghurche‎ / ئۇيغۇرچە)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 0869bed..2cd2208 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Uyghur (Arabic script) (ئۇيغۇرچە)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 9c56aec..e18fc46 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Ukrainian (українська)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index f1afd03..7ee1fe8 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Urdu (اردو)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 223cc5f..1c474cc 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Uzbek (oʻzbekcha)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7e7afb2..9242d83 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** vèneto (vèneto)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 75a419e..b9af298 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Veps (vepsän kel’)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index eb727ce..1712c05 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Vietnamese (Tiếng Việt)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index ed67a39..380fcc2 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** West-Vlams (West-Vlams)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 0615786..2ec847b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Upper Franconian (Mainfränkisch)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 8023663..eb2f4aa 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Volapük (Volapük)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 4e3a2f4..75e1ced 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Votic (Vaďďa)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 0d4d901..a8113b8 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Võro (Võro)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index f7ae9af..b22ba06 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Walloon (walon)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index dcde51e..92bde37 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Waray (Winaray)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 87c8d4b..0a96d07 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Wolof (Wolof)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 60d2677..477f76a 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Wu (吴语)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 577e0aa..dd38d54 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Kalmyk (хальмг)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 9f987f2..bd587bc 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Mingrelian (მარგალური)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7d0b0d2..9b6dad4 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Yiddish (ייִדיש)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 761ae07..4c56649 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Yoruba (Yorùbá)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 96f640c..12711d1 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Cantonese (粵語)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index da4620a..f46ecc2 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Zhuang (Vahcuengh)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 2b36283..33a53a9 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Zeeuws (Zeêuws)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 7b62257..9d0573d 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Chinese (中文)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 3e1455d..b887a00 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Chinese (China) (‪中文(中国大陆)‬)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index b6606f6..fa72339 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Simplified Chinese (中文(简体)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 10075a7..be18e0b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Traditional Chinese (中文(繁體)‎)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index d4d5a05..d7675d1 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Chinese (Hong Kong) (‪中文(香港)‬)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 37be152..b63c84b 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** ‪Chinese (Macau) (‪中文(澳門)‬)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 01b5524..efe358e 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** ‪Chinese (Malaysia)‬ (‪中文(马来西亚)‬)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index c0c1911..48e79cf 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Chinese (Singapore) (‪中文(新加坡)‬)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
index 13474a6..067f7dd 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /** Chinese (Taiwan) (‪中文(台灣)‬)
  *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
+ * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
diff --git a/maintenance/archives/patch-watchlist-user-notificationtimestamp-index.sql b/maintenance/archives/patch-watchlist-user-notificationtimestamp-index.sql
new file mode 100644 (file)
index 0000000..22ae44f
--- /dev/null
@@ -0,0 +1,4 @@
+--
+-- Creates the wl_user_notificationtimestamp index for the watchlist table
+--
+CREATE INDEX /*i*/wl_user_notificationtimestamp ON /*_*/watchlist (wl_user, wl_notificationtimestamp);
index bf57244..1542a8c 100644 (file)
@@ -26,8 +26,6 @@ require_once __DIR__ . '/Maintenance.php';
 /**
  * Maintenance script to convert user options to the new `user_properties` table.
  *
- * Do each user sequentially, since accounts can't be deleted
- *
  * @ingroup Maintenance
  */
 class ConvertUserOptions extends Maintenance {
@@ -37,6 +35,7 @@ class ConvertUserOptions extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Convert user options from old to new system";
+               $this->setBatchSize( 50 );
        }
 
        public function execute() {
@@ -50,14 +49,19 @@ class ConvertUserOptions extends Maintenance {
                        return;
                }
                while ( $id !== null ) {
-                       $idCond = 'user_id > ' . $dbw->addQuotes( $id );
-                       $optCond = "user_options != " . $dbw->addQuotes( '' ); // For compatibility
-                       $res = $dbw->select( 'user', '*',
-                               array( $optCond, $idCond ), __METHOD__,
-                               array( 'LIMIT' => 50, 'FOR UPDATE' )
+                       $res = $dbw->select( 'user',
+                               array( 'user_id', 'user_options' ),
+                               array(
+                                       'user_id > ' . $dbw->addQuotes( $id ),
+                                       "user_options != " . $dbw->addQuotes( '' ),
+                               ),
+                               __METHOD__,
+                               array(
+                                       'ORDER BY' => 'user_id',
+                                       'LIMIT' => $this->mBatchSize,
+                               )
                        );
                        $id = $this->convertOptionBatch( $res, $dbw );
-                       $dbw->commit( __METHOD__ );
 
                        wfWaitForSlaves();
 
@@ -77,12 +81,29 @@ class ConvertUserOptions extends Maintenance {
                $id = null;
                foreach ( $res as $row ) {
                        $this->mConversionCount++;
+                       $insertRows = array();
+                       foreach ( explode( "\n", $row->user_options ) as $s ) {
+                               $m = array();
+                               if ( !preg_match( "/^(.[^=]*)=(.*)$/", $s, $m ) ) {
+                                       continue;
+                               }
 
-                       $u = User::newFromRow( $row );
+                               // MW < 1.16 would save even default values. Filter them out
+                               // here (as in User) to avoid adding many unnecessary rows.
+                               $defaultOption = User::getDefaultOption( $m[1] );
+                               if ( is_null( $defaultOption ) || $m[2] != $defaultOption ) {
+                                       $insertRows[] = array(
+                                               'up_user' => $row->user_id,
+                                               'up_property' => $m[1],
+                                               'up_value' => $m[2],
+                                       );
+                               }
+                       }
 
-                       $u->saveSettings();
+                       if ( count( $insertRows ) ) {
+                               $dbw->insert( 'user_properties', $insertRows, __METHOD__, array( 'IGNORE' ) );
+                       }
 
-                       // Do this here as saveSettings() doesn't set user_options to '' anymore!
                        $dbw->update(
                                'user',
                                array( 'user_options' => '' ),
index a751396..93507b3 100644 (file)
@@ -99,7 +99,7 @@ class DeleteBatch extends Maintenance {
                        $this->output( $title->getPrefixedText() );
                        $dbw->begin( __METHOD__ );
                        if ( $title->getNamespace() == NS_FILE ) {
-                               $img = wfFindFile( $title );
+                               $img = wfFindFile( $title, array( 'ignoreRedirect' => true ) );
                                if ( $img && $img->isLocal() && !$img->delete( $reason ) ) {
                                        $this->output( " FAILED to delete associated file... " );
                                }
index c30a86e..a07cbc2 100644 (file)
@@ -59,7 +59,7 @@ class DeleteEqualMessages extends Maintenance {
                // Normalise message names for NS_MEDIAWIKI page_title
                $messageNames = array_map( array( $wgContLang, 'ucfirst' ), $messageNames );
 
-               $statuses = AllmessagesTablePager::getCustomisedStatuses( $messageNames, $langCode, $nonContLang );
+               $statuses = AllMessagesTablePager::getCustomisedStatuses( $messageNames, $langCode, $nonContLang );
                // getCustomisedStatuses is stripping the sub page from the page titles, add it back
                $titleSuffix = $nonContLang ? "/$langCode" : '';
 
@@ -172,7 +172,6 @@ class DeleteEqualMessages extends Maintenance {
                foreach ( $messageInfo['results'] as $result ) {
                        wfWaitForSlaves();
                        $dbw->ping();
-                       $dbw->begin( __METHOD__ );
                        $title = Title::makeTitle( NS_MEDIAWIKI, $result['title'] );
                        $this->output( "\n* [[$title]]" );
                        $page = WikiPage::factory( $title );
@@ -185,7 +184,6 @@ class DeleteEqualMessages extends Maintenance {
                                $error = ''; // Passed by ref
                                $page->doDeleteArticle( 'Orphaned talk page of no longer required message', false, 0, false, $error, $user );
                        }
-                       $dbw->commit( __METHOD__ );
                }
                $this->output( "\n\ndone!\n" );
        }
index 7ce8794..3c5bef0 100644 (file)
@@ -4,7 +4,7 @@
 # and previous home directory location
 # The binary path is returned in $PHP if any
 
-for binary in $PHP `which php || true` "$DEV/php/bin/php" "$HOME/.mediawiki/php/bin/php" "$HOME/.mwphp/bin/php" ]; do
+for binary in $PHP $(which php || true) "$DEV/php/bin/php" "$HOME/.mediawiki/php/bin/php" "$HOME/.mwphp/bin/php" ]; do
        if [ -x "$binary" ]; then
                if "$binary" -r 'exit((int)!version_compare(PHP_VERSION, "5.4", ">="));'; then
                        PHP="$binary"
index bf13c38..f555113 100644 (file)
@@ -939,7 +939,6 @@ collapsable
 collectionsaveascommunitypage
 collectionsaveasuserpage
 colname
-cologneblue
 colonseparator
 colorer
 colspan
index dfd1959..888c2dc 100644 (file)
@@ -59,7 +59,7 @@ class DumpLinks extends Maintenance {
                $lastPage = null;
                foreach ( $result as $row ) {
                        if ( $lastPage != $row->page_id ) {
-                               if ( isset( $lastPage ) ) {
+                               if ( $lastPage !== null ) {
                                        $this->output( "\n" );
                                }
                                $page = Title::makeTitle( $row->page_namespace, $row->page_title );
@@ -69,7 +69,7 @@ class DumpLinks extends Maintenance {
                        $link = Title::makeTitle( $row->pl_namespace, $row->pl_title );
                        $this->output( " " . $link->getPrefixedURL() );
                }
-               if ( isset( $lastPage ) ) {
+               if ( $lastPage !== null ) {
                        $this->output( "\n" );
                }
        }
index 0b3cdba..a678a92 100644 (file)
@@ -44,13 +44,14 @@ class FixDoubleRedirects extends Maintenance {
        public function execute() {
                $async = $this->getOption( 'async', false );
                $dryrun = $this->getOption( 'dry-run', false );
-               $title = $this->getOption( 'title' );
 
-               if ( isset( $title ) ) {
-                       $title = Title::newFromText( $title );
+               if ( $this->hasOption( 'title' ) ) {
+                       $title = Title::newFromText( $this->getOption( 'title' ) );
                        if ( !$title || !$title->isRedirect() ) {
                                $this->error( $title->getPrefixedText() . " is not a redirect!\n", true );
                        }
+               } else {
+                       $title = null;
                }
 
                $dbr = wfGetDB( DB_SLAVE );
@@ -75,7 +76,7 @@ class FixDoubleRedirects extends Maintenance {
                        'pb.page_is_redirect' => 1,
                );
 
-               if ( isset( $title ) ) {
+               if ( $title != null ) {
                        $conds['pb.page_namespace'] = $title->getNamespace();
                        $conds['pb.page_title'] = $title->getDBkey();
                }
index c43851e..1930a22 100644 (file)
@@ -244,9 +244,6 @@ class GenerateSitemap extends Maintenance {
         * @return null|string
         */
        private static function init_path( $fspath ) {
-               if ( !isset( $fspath ) ) {
-                       return null;
-               }
                # Create directory if needed
                if ( $fspath && !is_dir( $fspath ) ) {
                        wfMkdirParents( $fspath, null, __METHOD__ ) or die( "Can not create directory $fspath.\n" );
diff --git a/maintenance/language/countMessages.php b/maintenance/language/countMessages.php
deleted file mode 100644 (file)
index 1cb24ab..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-/**
- * Count how many messages we have defined for each language.
- *
- * 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 MaintenanceLanguage
- */
-
-require_once __DIR__ . '/../Maintenance.php';
-
-/**
- * Maintenance script that counts how many messages we have defined
- * for each language.
- *
- * @ingroup MaintenanceLanguage
- */
-class CountMessages extends Maintenance {
-       public function __construct() {
-               parent::__construct();
-               $this->mDescription = "Count how many messages we have defined for each language";
-       }
-
-       public function execute() {
-               global $IP;
-               $dir = $this->getArg( 0, "$IP/languages/messages" );
-               $total = 0;
-               $nonZero = 0;
-               foreach ( glob( "$dir/*.php" ) as $file ) {
-                       $baseName = basename( $file );
-                       if ( !preg_match( '/Messages([A-Z][a-z_]+)\.php$/', $baseName, $m ) ) {
-                               continue;
-                       }
-
-                       $numMessages = $this->getNumMessages( $file );
-                       // print "$code: $numMessages\n";
-                       $total += $numMessages;
-                       if ( $numMessages > 0 ) {
-                               $nonZero++;
-                       }
-               }
-               $this->output( "\nTotal: $total\n" );
-               $this->output( "Languages: $nonZero\n" );
-       }
-
-       private function getNumMessages( $file ) {
-               // Separate function to limit scope
-               require $file;
-               if ( isset( $messages ) ) {
-                       return count( $messages );
-               } else {
-                       return 0;
-               }
-       }
-}
-
-$maintClass = "CountMessages";
-require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/language/listVariants.php b/maintenance/language/listVariants.php
new file mode 100644 (file)
index 0000000..4bff891
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Lists all language variants
+ *
+ * Copyright © 2014 MediaWiki developers
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+require_once dirname( __DIR__ ) . '/Maintenance.php';
+
+/**
+ * @since 1.24
+ */
+class ListVariants extends Maintenance {
+
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = 'Outputs a list of language variants';
+               $this->addOption( 'flat', 'Output variants in a flat list' );
+               $this->addOption( 'json', 'Output variants as JSON' );
+       }
+
+       public function execute() {
+               $variantLangs = array();
+               $variants = array();
+               foreach ( LanguageConverter::$languagesWithVariants as $langCode ) {
+                       $lang = Language::factory( $langCode );
+                       if ( count( $lang->getVariants() ) > 1 ) {
+                               $variants += array_flip( $lang->getVariants() );
+                               $variantLangs[$langCode] = $lang->getVariants();
+                       }
+               }
+               $variants = array_keys( $variants );
+               sort( $variants );
+               $result = $this->hasOption( 'flat' ) ? $variants : $variantLangs;
+
+               // Not using $this->output() because muting makes no sense here
+               if ( $this->hasOption( 'json' ) ) {
+                       echo FormatJson::encode( $result, true ) . "\n";
+               } else {
+                       foreach ( $result as $key => $value ) {
+                               if ( is_array( $value ) ) {
+                                       echo "$key\n";
+                                       foreach ( $value as $variant ) {
+                                               echo "   $variant\n";
+                                       }
+                               } else {
+                                       echo "$value\n";
+                               }
+                       }
+               }
+       }
+}
+
+$maintClass = 'ListVariants';
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/language/validate.php b/maintenance/language/validate.php
deleted file mode 100644 (file)
index f1b4079..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-/**
- * Check language files for unrecognised variables.
- *
- * 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 MaintenanceLanguage
- */
-
-if ( PHP_SAPI != 'cli' ) {
-       die( "Run me from the command line please.\n" );
-}
-
-if ( !isset( $argv[1] ) ) {
-       print "Usage: php {$argv[0]} <filename>\n";
-       exit( 1 );
-}
-array_shift( $argv );
-
-define( 'MEDIAWIKI', 1 );
-define( 'NOT_REALLY_MEDIAWIKI', 1 );
-
-$IP = __DIR__ . '/../..';
-
-require_once "$IP/includes/Defines.php";
-require_once "$IP/languages/Language.php";
-
-$files = array();
-foreach ( $argv as $arg ) {
-       $files = array_merge( $files, glob( $arg ) );
-}
-
-foreach ( $files as $filename ) {
-       print "$filename...";
-       $vars = getVars( $filename );
-       $keys = array_keys( $vars );
-       $diff = array_diff( $keys, Language::$mLocalisationKeys );
-       if ( $diff ) {
-               print "\nWarning: unrecognised variable(s): " . implode( ', ', $diff ) . "\n";
-       } else {
-               print " ok\n";
-       }
-}
-
-function getVars( $filename ) {
-       require $filename;
-       $vars = get_defined_vars();
-       unset( $vars['filename'] );
-
-       return $vars;
-}
index a152091..ea86e88 100644 (file)
@@ -208,35 +208,29 @@ class NamespaceConflictChecker extends Maintenance {
         * @return array
         */
        private function getConflicts( $ns, $name ) {
-               $page = 'page';
-               $table = $this->db->tableName( $page );
-
-               $prefix = $this->db->strencode( $name );
-               $encNamespace = $this->db->addQuotes( $ns );
-
-               $titleSql = "TRIM(LEADING '$prefix:' FROM {$page}_title)";
+               $titleSql = "TRIM(LEADING {$this->db->addQuotes( "$name:" )} FROM page_title)";
                if ( $ns == 0 ) {
                        // An interwiki; try an alternate encoding with '-' for ':'
-                       $titleSql = $this->db->buildConcat( array( "'$prefix-'", $titleSql ) );
+                       $titleSql = $this->db->buildConcat( array(
+                               $this->db->addQuotes( "$name-" ),
+                               $titleSql,
+                       ) );
                }
 
-               $sql = "SELECT {$page}_id    AS id,
-                                          {$page}_title AS oldtitle,
-                                          $encNamespace + {$page}_namespace AS namespace,
-                                  $titleSql     AS title,
-                                  {$page}_namespace AS oldnamespace
-                                 FROM {$table}
-                                WHERE ( {$page}_namespace=0 OR {$page}_namespace=1 )
-                                  AND {$page}_title " . $this->db->buildLike( $name . ':', $this->db->anyString() );
-
-               $result = $this->db->query( $sql, __METHOD__ );
-
-               $set = array();
-               foreach ( $result as $row ) {
-                       $set[] = $row;
-               }
-
-               return $set;
+               return iterator_to_array( $this->db->select( 'page',
+                       array(
+                               'id' => 'page_id',
+                               'oldtitle' => 'page_title',
+                               'namespace' => $this->db->addQuotes( $ns ) . ' + page_namespace',
+                               'title' => $titleSql,
+                               'oldnamespace' => 'page_namespace',
+                       ),
+                       array(
+                               'page_namespace' => array( 0, 1 ),
+                               'page_title' . $this->db->buildLike( "$name:", $this->db->anyString() ),
+                       ),
+                       __METHOD__
+               ) );
        }
 
        /**
index 21d9104..d172363 100644 (file)
@@ -57,28 +57,24 @@ class NextJobDB extends Maintenance {
                        return; // no DBs with jobs or cache is both empty and locked
                }
 
-               do {
-                       $again = false;
-
-                       $candidates = array(); // list of (type, db)
-                       // Flatten the tree of candidates into a flat list so that a random
-                       // item can be selected, weighing each queue (type/db tuple) equally.
-                       foreach ( $pendingDBs as $type => $dbs ) {
-                               if (
-                                       ( is_array( $types ) && in_array( $type, $types ) ) ||
-                                       ( $types === false && !in_array( $type, $wgJobTypesExcludedFromDefaultQueue ) )
-                               ) {
-                                       foreach ( $dbs as $db ) {
-                                               $candidates[] = array( $type, $db );
-                                       }
+               $candidates = array(); // list of (type, db)
+               // Flatten the tree of candidates into a flat list so that a random
+               // item can be selected, weighing each queue (type/db tuple) equally.
+               foreach ( $pendingDBs as $type => $dbs ) {
+                       if (
+                               ( is_array( $types ) && in_array( $type, $types ) ) ||
+                               ( $types === false && !in_array( $type, $wgJobTypesExcludedFromDefaultQueue ) )
+                       ) {
+                               foreach ( $dbs as $db ) {
+                                       $candidates[] = array( $type, $db );
                                }
                        }
-                       if ( !count( $candidates ) ) {
-                               return; // no jobs for this type
-                       }
+               }
+               if ( !count( $candidates ) ) {
+                       return; // no jobs for this type
+               }
 
-                       list( $type, $db ) = $candidates[mt_rand( 0, count( $candidates ) - 1 )];
-               } while ( $again );
+               list( $type, $db ) = $candidates[mt_rand( 0, count( $candidates ) - 1 )];
 
                if ( $this->hasOption( 'types' ) ) {
                        $this->output( $db . " " . $type . "\n" );
index abbfd3a..be8cbdb 100644 (file)
@@ -448,6 +448,7 @@ CREATE TABLE watchlist (
 );
 CREATE UNIQUE INDEX wl_user_namespace_title ON watchlist (wl_namespace, wl_title, wl_user);
 CREATE INDEX wl_user ON watchlist (wl_user);
+CREATE INDEX wl_user_notificationtimestamp ON watchlist (wl_user, wl_notificationtimestamp);
 
 
 CREATE TABLE interwiki (
index 203d795..f4b0505 100644 (file)
@@ -179,13 +179,6 @@ class RebuildRecentchanges extends Maintenance {
                // Some logs don't go in RC. This should check for that
                $basicRCLogs = array_diff( $wgLogTypes, array_keys( $wgLogRestrictions ) );
 
-               // Escape...blah blah
-               $selectLogs = array();
-               foreach ( $basicRCLogs as $logtype ) {
-                       $safetype = $dbw->strencode( $logtype );
-                       $selectLogs[] = "'$safetype'";
-               }
-
                $cutoff = time() - $wgRCMaxAge;
                list( $logging, $page ) = $dbw->tableNamesN( 'logging', 'page' );
                $dbw->insertSelect(
@@ -219,7 +212,7 @@ class RebuildRecentchanges extends Maintenance {
                        array(
                                'log_timestamp > ' . $dbw->addQuotes( $dbw->timestamp( $cutoff ) ),
                                'log_user=user_id',
-                               'log_type IN(' . implode( ',', $selectLogs ) . ')'
+                               'log_type' => $basicRCLogs,
                        ),
                        __METHOD__,
                        array(), // INSERT options
index 1b8d618..67696f2 100644 (file)
@@ -1129,6 +1129,7 @@ CREATE TABLE /*_*/watchlist (
 
 CREATE UNIQUE INDEX /*i*/wl_user ON /*_*/watchlist (wl_user, wl_namespace, wl_title);
 CREATE INDEX /*i*/namespace_title ON /*_*/watchlist (wl_namespace, wl_title);
+CREATE INDEX /*i*/wl_user_notificationtimestamp ON /*_*/watchlist (wl_user, wl_notificationtimestamp);
 
 
 --
index fc7eadb..d22454f 100644 (file)
@@ -36,6 +36,16 @@ function wfInstallerMain() {
        $installer = InstallerOverrides::getWebInstaller( $wgRequest );
 
        if ( !$installer->startSession() ) {
+
+               if( $installer->request->getVal( "css" ) ) {
+                       // Do not display errors on css pages
+                       $cssDir = $installer->request->getVal( "css" );
+                       $installer->outputCss( $cssDir );
+                       exit;
+               }
+
+               $errors = $installer->getPhpErrors();
+               $installer->showError( 'config-session-error', $errors[0] );
                $installer->finish();
                exit;
        }
index c2112ae..93415a5 100644 (file)
@@ -83,57 +83,41 @@ return array(
         */
        'mediawiki.skinning.elements' => array(
                'styles' => array(
-                       'common/commonElements.css' => array( 'media' => 'screen' ),
+                       'commonElements.css' => array( 'media' => 'screen' ),
                ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'remoteSkinPath' => 'common',
+               'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/common',
        ),
        'mediawiki.skinning.content' => array(
                'styles' => array(
-                       'common/commonElements.css' => array( 'media' => 'screen' ),
-                       'common/commonContent.css' => array( 'media' => 'screen' ),
+                       'commonElements.css' => array( 'media' => 'screen' ),
+                       'commonContent.css' => array( 'media' => 'screen' ),
                ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'remoteSkinPath' => 'common',
+               'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/common',
        ),
        'mediawiki.skinning.interface' => array(
                // Used in the web installer. Test it after modifying this definition!
                'styles' => array(
-                       'common/commonElements.css' => array( 'media' => 'screen' ),
-                       'common/commonContent.css' => array( 'media' => 'screen' ),
-                       'common/commonInterface.css' => array( 'media' => 'screen' ),
+                       'commonElements.css' => array( 'media' => 'screen' ),
+                       'commonContent.css' => array( 'media' => 'screen' ),
+                       'commonInterface.css' => array( 'media' => 'screen' ),
                ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'remoteSkinPath' => 'common',
+               'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/common',
        ),
 
-       // Temporarily kept for backwards-compatibility with generated HTML
-       'skins.common.elements' => array(
-               'styles' => array(
-                       'common/commonElements.css' => array( 'media' => 'screen' ),
-               ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-       ),
-       'skins.common.content' => array(
-               'styles' => array(
-                       'common/commonElements.css' => array( 'media' => 'screen' ),
-                       'common/commonContent.css' => array( 'media' => 'screen' ),
-               ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-       ),
-       'skins.common.interface' => array(
-               'styles' => array(
-                       'common/commonElements.css' => array( 'media' => 'screen' ),
-                       'common/commonContent.css' => array( 'media' => 'screen' ),
-                       'common/commonInterface.css' => array( 'media' => 'screen' ),
+       'mediawiki.skinning.content.parsoid' => array(
+               // Style Parsoid HTML+RDFa output consistent with wikitext from PHP parser
+               // with the commonInterface.css styles; skinStyles should be used if your
+               // skin over-rides common content styling.
+               'skinStyles' => array(
+                       'default' => 'resources/src/mediawiki.skinning/content.parsoid.less',
+                       'minerva' => array(),
                ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
-
        /**
         * Skins
         * Be careful not to add 'scripts' to these modules,
@@ -144,56 +128,47 @@ return array(
         *
         * See Vector for an example.
         */
-       'skins.cologneblue' => array(
-               'styles' => array(
-                       'cologneblue/screen.css' => array( 'media' => 'screen' ),
-                       'cologneblue/print.css' => array( 'media' => 'print' ),
-               ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-       ),
-       'skins.modern' => array(
-               'styles' => array(
-                       'modern/main.css' => array( 'media' => 'screen' ),
-                       'modern/print.css' => array( 'media' => 'print' ),
-               ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-       ),
        'skins.vector.styles' => array(
                // Used in the web installer. Test it after modifying this definition!
                'styles' => array(
-                       'vector/screen.less' => array( 'media' => 'screen' ),
-                       'vector/screen-hd.less' => array( 'media' => 'screen and (min-width: 982px)' ),
+                       'screen.less' => array( 'media' => 'screen' ),
+                       'screen-hd.less' => array( 'media' => 'screen and (min-width: 982px)' ),
                ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'remoteSkinPath' => 'vector',
+               'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/vector',
        ),
        'skins.monobook.styles' => array(
                'styles' => array(
-                       'monobook/main.css' => array( 'media' => 'screen' ),
+                       'main.css' => array( 'media' => 'screen' ),
                ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'remoteSkinPath' => 'monobook',
+               'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/monobook',
        ),
        'skins.vector.js' => array(
                'scripts' => array(
-                       'vector/collapsibleTabs.js',
-                       'vector/vector.js',
+                       'collapsibleTabs.js',
+                       'vector.js',
                ),
                'position' => 'top',
-               'dependencies' => 'jquery.throttle-debounce',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'dependencies' => array(
+                       'jquery.throttle-debounce',
+                       'jquery.tabIndex',
+               ),
+               'remoteSkinPath' => 'vector',
+               'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/vector',
        ),
 
        /* jQuery */
 
        'jquery' => array(
-               'scripts' => array(
-                       'resources/lib/jquery/jquery.js',
-                       'resources/lib/jquery/jquery.migrate.js',
-               ),
+               'scripts' => ( $GLOBALS['wgIncludejQueryMigrate'] ?
+                       array(
+                               'resources/lib/jquery/jquery.js',
+                               'resources/lib/jquery/jquery.migrate.js'
+                       ) :
+                       array(
+                               'resources/lib/jquery/jquery.js'
+                       ) ),
                'debugRaw' => false,
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -383,13 +358,12 @@ return array(
 
        /* jQuery UI */
 
-       // Core
        'jquery.ui.core' => array(
                'scripts' => 'resources/lib/jquery.ui/jquery.ui.core.js',
                'skinStyles' => array(
                        'default' => array(
-                               'resources/lib/jquery.ui/themes/default/jquery.ui.core.css',
-                               'resources/lib/jquery.ui/themes/default/jquery.ui.theme.css',
+                               'resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css',
+                               'resources/lib/jquery.ui/themes/smoothness/jquery.ui.theme.css',
                        ),
                        'vector' => array(
                                'resources/src/jquery.ui-themes/vector/jquery.ui.core.css',
@@ -398,79 +372,40 @@ return array(
                ),
                'group' => 'jquery.ui',
        ),
-       'jquery.ui.widget' => array(
-               'scripts' => 'resources/lib/jquery.ui/jquery.ui.widget.js',
-               'group' => 'jquery.ui',
-       ),
-       'jquery.ui.mouse' => array(
-               'scripts' => 'resources/lib/jquery.ui/jquery.ui.mouse.js',
-               'dependencies' => 'jquery.ui.widget',
-               'group' => 'jquery.ui',
-       ),
-       'jquery.ui.position' => array(
-               'scripts' => 'resources/lib/jquery.ui/jquery.ui.position.js',
-               'group' => 'jquery.ui',
-       ),
-       // Interactions
-       'jquery.ui.draggable' => array(
-               'scripts' => 'resources/lib/jquery.ui/jquery.ui.draggable.js',
-               'dependencies' => array( 'jquery.ui.core', 'jquery.ui.mouse', 'jquery.ui.widget' ),
-               'group' => 'jquery.ui',
-       ),
-       'jquery.ui.droppable' => array(
-               'scripts' => 'resources/lib/jquery.ui/jquery.ui.droppable.js',
-               'dependencies' => array(
-                       'jquery.ui.core', 'jquery.ui.mouse', 'jquery.ui.widget', 'jquery.ui.draggable',
-               ),
-               'group' => 'jquery.ui',
-       ),
-       'jquery.ui.resizable' => array(
-               'scripts' => 'resources/lib/jquery.ui/jquery.ui.resizable.js',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/jquery.ui/themes/default/jquery.ui.resizable.css',
-                       'vector' => 'resources/src/jquery.ui-themes/vector/jquery.ui.resizable.css',
-               ),
-               'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.mouse' ),
-               'group' => 'jquery.ui',
-       ),
-       'jquery.ui.selectable' => array(
-               'scripts' => 'resources/lib/jquery.ui/jquery.ui.selectable.js',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/jquery.ui/themes/default/jquery.ui.selectable.css',
-                       'vector' => 'resources/src/jquery.ui-themes/vector/jquery.ui.selectable.css',
-               ),
-               'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.mouse' ),
-               'group' => 'jquery.ui',
-       ),
-       'jquery.ui.sortable' => array(
-               'scripts' => 'resources/lib/jquery.ui/jquery.ui.sortable.js',
-               'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.mouse' ),
-               'group' => 'jquery.ui',
-       ),
-       // Widgets
        'jquery.ui.accordion' => array(
                'scripts' => 'resources/lib/jquery.ui/jquery.ui.accordion.js',
-               'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget' ),
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.widget',
+               ),
                'skinStyles' => array(
-                       'default' => 'resources/lib/jquery.ui/themes/default/jquery.ui.accordion.css',
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.accordion.css',
                        'vector' => 'resources/src/jquery.ui-themes/vector/jquery.ui.accordion.css',
                ),
                'group' => 'jquery.ui',
        ),
        'jquery.ui.autocomplete' => array(
                'scripts' => 'resources/lib/jquery.ui/jquery.ui.autocomplete.js',
-               'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.position' ),
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.widget',
+                       'jquery.ui.position',
+                       'jquery.ui.menu',
+               ),
                'skinStyles' => array(
-                       'default' => 'resources/lib/jquery.ui/themes/default/jquery.ui.autocomplete.css',
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.autocomplete.css',
                        'vector' => 'resources/src/jquery.ui-themes/vector/jquery.ui.autocomplete.css',
                ),
                'group' => 'jquery.ui',
        ),
        'jquery.ui.button' => array(
                'scripts' => 'resources/lib/jquery.ui/jquery.ui.button.js',
-               'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget' ),
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.widget',
+               ),
                'skinStyles' => array(
-                       'default' => 'resources/lib/jquery.ui/themes/default/jquery.ui.button.css',
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.button.css',
                        'vector' => 'resources/src/jquery.ui-themes/vector/jquery.ui.button.css',
                ),
                'group' => 'jquery.ui',
@@ -479,12 +414,13 @@ return array(
                'scripts' => 'resources/lib/jquery.ui/jquery.ui.datepicker.js',
                'dependencies' => 'jquery.ui.core',
                'skinStyles' => array(
-                       'default' => 'resources/lib/jquery.ui/themes/default/jquery.ui.datepicker.css',
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.datepicker.css',
                        'vector' => 'resources/src/jquery.ui-themes/vector/jquery.ui.datepicker.css',
                ),
                'languageScripts' => array(
                        'af' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-af.js',
                        'ar' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ar.js',
+                       'ar-dz' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ar-DZ.js',
                        'az' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-az.js',
                        'bg' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-bg.js',
                        'bs' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-bs.js',
@@ -493,7 +429,9 @@ return array(
                        'da' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-da.js',
                        'de' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-de.js',
                        'el' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-el.js',
+                       'en-au' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-en-AU.js',
                        'en-gb' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-en-GB.js',
+                       'en-nz' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-en-NZ.js',
                        'eo' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-eo.js',
                        'es' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-es.js',
                        'et' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-et.js',
@@ -502,6 +440,7 @@ return array(
                        'fi' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-fi.js',
                        'fo' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-fo.js',
                        'fr' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-fr.js',
+                       'fr-ch' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js',
                        'gl' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-gl.js',
                        'he' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-he.js',
                        'hi' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-hi.js',
@@ -523,6 +462,7 @@ return array(
                        'ml' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ml.js',
                        'ms' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ms.js',
                        'nl' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-nl.js',
+                       'nl-be' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-nl-BE.js',
                        'no' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-no.js',
                        'pl' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-pl.js',
                        'pt' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-pt.js',
@@ -538,6 +478,7 @@ return array(
                        'sv' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sv.js',
                        'ta' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ta.js',
                        'th' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-th.js',
+                       'tj' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-tj.js',
                        'tr' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-tr.js',
                        'uk' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-uk.js',
                        'vi' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-vi.js',
@@ -559,105 +500,218 @@ return array(
                        'jquery.ui.resizable',
                ),
                'skinStyles' => array(
-                       'default' => 'resources/lib/jquery.ui/themes/default/jquery.ui.dialog.css',
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.dialog.css',
                        'vector' => 'resources/src/jquery.ui-themes/vector/jquery.ui.dialog.css',
                ),
                'group' => 'jquery.ui',
        ),
+       'jquery.ui.draggable' => array(
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.draggable.js',
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.mouse',
+                       'jquery.ui.widget',
+               ),
+               'group' => 'jquery.ui',
+       ),
+       'jquery.ui.droppable' => array(
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.droppable.js',
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.mouse',
+                       'jquery.ui.widget',
+                       'jquery.ui.draggable',
+               ),
+               'group' => 'jquery.ui',
+       ),
+       'jquery.ui.menu' => array(
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.menu.js',
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.widget',
+                       'jquery.ui.position',
+               ),
+               'skinStyles' => array(
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.menu.css',
+               ),
+               'group' => 'jquery.ui',
+       ),
+       'jquery.ui.mouse' => array(
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.mouse.js',
+               'dependencies' => 'jquery.ui.widget',
+               'group' => 'jquery.ui',
+       ),
+       'jquery.ui.position' => array(
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.position.js',
+               'group' => 'jquery.ui',
+       ),
        'jquery.ui.progressbar' => array(
                'scripts' => 'resources/lib/jquery.ui/jquery.ui.progressbar.js',
-               'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget' ),
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.widget',
+               ),
                'skinStyles' => array(
-                       'default' => 'resources/lib/jquery.ui/themes/default/jquery.ui.progressbar.css',
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.progressbar.css',
                        'vector' => 'resources/src/jquery.ui-themes/vector/jquery.ui.progressbar.css',
                ),
                'group' => 'jquery.ui',
        ),
+       'jquery.ui.resizable' => array(
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.resizable.js',
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.widget',
+                       'jquery.ui.mouse',
+               ),
+               'skinStyles' => array(
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.resizable.css',
+                       'vector' => 'resources/src/jquery.ui-themes/vector/jquery.ui.resizable.css',
+               ),
+               'group' => 'jquery.ui',
+       ),
+       'jquery.ui.selectable' => array(
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.selectable.js',
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.widget',
+                       'jquery.ui.mouse',
+               ),
+               'skinStyles' => array(
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.selectable.css',
+                       'vector' => 'resources/src/jquery.ui-themes/vector/jquery.ui.selectable.css',
+               ),
+               'group' => 'jquery.ui',
+       ),
        'jquery.ui.slider' => array(
                'scripts' => 'resources/lib/jquery.ui/jquery.ui.slider.js',
-               'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.mouse' ),
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.widget',
+                       'jquery.ui.mouse',
+               ),
                'skinStyles' => array(
-                       'default' => 'resources/lib/jquery.ui/themes/default/jquery.ui.slider.css',
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.slider.css',
                        'vector' => 'resources/src/jquery.ui-themes/vector/jquery.ui.slider.css',
                ),
                'group' => 'jquery.ui',
        ),
+       'jquery.ui.sortable' => array(
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.sortable.js',
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.mouse',
+                       'jquery.ui.widget',
+               ),
+               'group' => 'jquery.ui',
+       ),
+       'jquery.ui.spinner' => array(
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.spinner.js',
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.widget',
+                       'jquery.ui.button',
+               ),
+               'skinStyles' => array(
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.spinner.css',
+               ),
+               'group' => 'jquery.ui',
+       ),
        'jquery.ui.tabs' => array(
                'scripts' => 'resources/lib/jquery.ui/jquery.ui.tabs.js',
-               'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget' ),
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.widget',
+               ),
                'skinStyles' => array(
-                       'default' => 'resources/lib/jquery.ui/themes/default/jquery.ui.tabs.css',
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.tabs.css',
                        'vector' => 'resources/src/jquery.ui-themes/vector/jquery.ui.tabs.css',
                ),
                'group' => 'jquery.ui',
        ),
+       'jquery.ui.tooltip' => array(
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.tooltip.js',
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.ui.widget',
+                       'jquery.ui.position',
+               ),
+               'skinStyles' => array(
+                       'default' => 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.tooltip.css',
+               ),
+               'group' => 'jquery.ui',
+       ),
+       'jquery.ui.widget' => array(
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.widget.js',
+               'group' => 'jquery.ui',
+       ),
        // Effects
        'jquery.effects.core' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.core.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect.js',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.blind' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.blind.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-blind.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.bounce' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.bounce.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-bounce.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.clip' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.clip.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-clip.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.drop' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.drop.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-drop.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.explode' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.explode.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-explode.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.fade' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.fade.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-fade.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.fold' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.fold.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-fold.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.highlight' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.highlight.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-highlight.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.pulsate' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.pulsate.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-pulsate.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.scale' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.scale.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-scale.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.shake' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.shake.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-shake.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.slide' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.slide.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-slide.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
        'jquery.effects.transfer' => array(
-               'scripts' => 'resources/lib/jquery.effects/jquery.effects.transfer.js',
+               'scripts' => 'resources/lib/jquery.ui/jquery.ui.effect-transfer.js',
                'dependencies' => 'jquery.effects.core',
                'group' => 'jquery.ui',
        ),
@@ -925,7 +979,6 @@ return array(
                        'jquery.accessKeyLabel',
                        'jquery.mwExtension',
                        'mediawiki.notify',
-                       'mediawiki.toc', // bug 64765
                ),
                'position' => 'top', // For $wgPreloadJavaScriptMwUtil
                'targets' => array( 'desktop', 'mobile' ),
@@ -971,6 +1024,7 @@ return array(
        ),
        'mediawiki.action.history' => array(
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.history.js',
+               'styles' => 'resources/src/mediawiki.action/mediawiki.action.history.css',
                'group' => 'mediawiki.action.history',
        ),
        'mediawiki.action.history.diff' => array(
@@ -1175,7 +1229,7 @@ return array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.js',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.css',
                'skinStyles' => array(
-                       'vector' => 'skins/vector/special.less',
+                       'vector' => 'skins/vector/special.less', // FIXME this should use $wgStyleDirectory
                ),
        ),
        'mediawiki.special.block' => array(
@@ -1224,7 +1278,7 @@ return array(
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.preferences.css',
                'position' => 'top',
                'skinStyles' => array(
-                       'vector' => 'skins/vector/special.preferences.less',
+                       'vector' => 'skins/vector/special.preferences.less', // FIXME this should use $wgStyleDirectory
                ),
                'messages' => array(
                        'prefs-tabs-navigation-hint',
diff --git a/resources/lib/jquery.effects/jquery.effects.blind.js b/resources/lib/jquery.effects/jquery.effects.blind.js
deleted file mode 100644 (file)
index ac25bbd..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*!
- * jQuery UI Effects Blind 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Blind
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.blind = function(o) {
-
-       return this.queue(function() {
-
-               // Create element
-               var el = $(this), props = ['position','top','bottom','left','right'];
-
-               // Set options
-               var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
-               var direction = o.options.direction || 'vertical'; // Default direction
-
-               // Adjust
-               $.effects.save(el, props); el.show(); // Save & Show
-               var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
-               var ref = (direction == 'vertical') ? 'height' : 'width';
-               var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width();
-               if(mode == 'show') wrapper.css(ref, 0); // Shift
-
-               // Animation
-               var animation = {};
-               animation[ref] = mode == 'show' ? distance : 0;
-
-               // Animate
-               wrapper.animate(animation, o.duration, o.options.easing, function() {
-                       if(mode == 'hide') el.hide(); // Hide
-                       $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
-                       if(o.callback) o.callback.apply(el[0], arguments); // Callback
-                       el.dequeue();
-               });
-
-       });
-
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.bounce.js b/resources/lib/jquery.effects/jquery.effects.bounce.js
deleted file mode 100644 (file)
index 1169d77..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
- * jQuery UI Effects Bounce 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Bounce
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.bounce = function(o) {
-
-       return this.queue(function() {
-
-               // Create element
-               var el = $(this), props = ['position','top','bottom','left','right'];
-
-               // Set options
-               var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
-               var direction = o.options.direction || 'up'; // Default direction
-               var distance = o.options.distance || 20; // Default distance
-               var times = o.options.times || 5; // Default # of times
-               var speed = o.duration || 250; // Default speed per bounce
-               if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE
-
-               // Adjust
-               $.effects.save(el, props); el.show(); // Save & Show
-               $.effects.createWrapper(el); // Create Wrapper
-               var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
-               var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
-               var distance = o.options.distance || (ref == 'top' ? el.outerHeight(true) / 3 : el.outerWidth(true) / 3);
-               if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
-               if (mode == 'hide') distance = distance / (times * 2);
-               if (mode != 'hide') times--;
-
-               // Animate
-               if (mode == 'show') { // Show Bounce
-                       var animation = {opacity: 1};
-                       animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
-                       el.animate(animation, speed / 2, o.options.easing);
-                       distance = distance / 2;
-                       times--;
-               };
-               for (var i = 0; i < times; i++) { // Bounces
-                       var animation1 = {}, animation2 = {};
-                       animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
-                       animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
-                       el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing);
-                       distance = (mode == 'hide') ? distance * 2 : distance / 2;
-               };
-               if (mode == 'hide') { // Last Bounce
-                       var animation = {opacity: 0};
-                       animation[ref] = (motion == 'pos' ? '-=' : '+=')  + distance;
-                       el.animate(animation, speed / 2, o.options.easing, function(){
-                               el.hide(); // Hide
-                               $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
-                               if(o.callback) o.callback.apply(this, arguments); // Callback
-                       });
-               } else {
-                       var animation1 = {}, animation2 = {};
-                       animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
-                       animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
-                       el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){
-                               $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
-                               if(o.callback) o.callback.apply(this, arguments); // Callback
-                       });
-               };
-               el.queue('fx', function() { el.dequeue(); });
-               el.dequeue();
-       });
-
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.clip.js b/resources/lib/jquery.effects/jquery.effects.clip.js
deleted file mode 100644 (file)
index edd51a6..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
- * jQuery UI Effects Clip 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Clip
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.clip = function(o) {
-
-       return this.queue(function() {
-
-               // Create element
-               var el = $(this), props = ['position','top','bottom','left','right','height','width'];
-
-               // Set options
-               var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
-               var direction = o.options.direction || 'vertical'; // Default direction
-
-               // Adjust
-               $.effects.save(el, props); el.show(); // Save & Show
-               var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
-               var animate = el[0].tagName == 'IMG' ? wrapper : el;
-               var ref = {
-                       size: (direction == 'vertical') ? 'height' : 'width',
-                       position: (direction == 'vertical') ? 'top' : 'left'
-               };
-               var distance = (direction == 'vertical') ? animate.height() : animate.width();
-               if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift
-
-               // Animation
-               var animation = {};
-               animation[ref.size] = mode == 'show' ? distance : 0;
-               animation[ref.position] = mode == 'show' ? 0 : distance / 2;
-
-               // Animate
-               animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
-                       if(mode == 'hide') el.hide(); // Hide
-                       $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
-                       if(o.callback) o.callback.apply(el[0], arguments); // Callback
-                       el.dequeue();
-               }});
-
-       });
-
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.core.js b/resources/lib/jquery.effects/jquery.effects.core.js
deleted file mode 100644 (file)
index 7fd946f..0000000
+++ /dev/null
@@ -1,612 +0,0 @@
-/*!
- * jQuery UI Effects 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/
- */
-;jQuery.effects || (function($, undefined) {
-
-$.effects = {};
-
-
-
-/******************************************************************************/
-/****************************** COLOR ANIMATIONS ******************************/
-/******************************************************************************/
-
-// override the animation for color styles
-$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor',
-       'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'],
-function(i, attr) {
-       $.fx.step[attr] = function(fx) {
-               if (!fx.colorInit) {
-                       fx.start = getColor(fx.elem, attr);
-                       fx.end = getRGB(fx.end);
-                       fx.colorInit = true;
-               }
-
-               fx.elem.style[attr] = 'rgb(' +
-                       Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' +
-                       Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' +
-                       Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')';
-       };
-});
-
-// Color Conversion functions from highlightFade
-// By Blair Mitchelmore
-// http://jquery.offput.ca/highlightFade/
-
-// Parse strings looking for color tuples [255,255,255]
-function getRGB(color) {
-               var result;
-
-               // Check if we're already dealing with an array of colors
-               if ( color && color.constructor == Array && color.length == 3 )
-                               return color;
-
-               // Look for rgb(num,num,num)
-               if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
-                               return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
-
-               // Look for rgb(num%,num%,num%)
-               if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
-                               return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
-
-               // Look for #a0b1c2
-               if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
-                               return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
-
-               // Look for #fff
-               if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
-                               return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
-
-               // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
-               if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
-                               return colors['transparent'];
-
-               // Otherwise, we're most likely dealing with a named color
-               return colors[$.trim(color).toLowerCase()];
-}
-
-function getColor(elem, attr) {
-               var color;
-
-               do {
-                               // jQuery <1.4.3 uses curCSS, in 1.4.3 - 1.7.2 curCSS = css, 1.8+ only has css
-                               color = ($.curCSS || $.css)(elem, attr);
-
-                               // Keep going until we find an element that has color, or we hit the body
-                               if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
-                                               break;
-
-                               attr = "backgroundColor";
-               } while ( elem = elem.parentNode );
-
-               return getRGB(color);
-};
-
-// Some named colors to work with
-// From Interface by Stefan Petre
-// http://interface.eyecon.ro/
-
-var colors = {
-       aqua:[0,255,255],
-       azure:[240,255,255],
-       beige:[245,245,220],
-       black:[0,0,0],
-       blue:[0,0,255],
-       brown:[165,42,42],
-       cyan:[0,255,255],
-       darkblue:[0,0,139],
-       darkcyan:[0,139,139],
-       darkgrey:[169,169,169],
-       darkgreen:[0,100,0],
-       darkkhaki:[189,183,107],
-       darkmagenta:[139,0,139],
-       darkolivegreen:[85,107,47],
-       darkorange:[255,140,0],
-       darkorchid:[153,50,204],
-       darkred:[139,0,0],
-       darksalmon:[233,150,122],
-       darkviolet:[148,0,211],
-       fuchsia:[255,0,255],
-       gold:[255,215,0],
-       green:[0,128,0],
-       indigo:[75,0,130],
-       khaki:[240,230,140],
-       lightblue:[173,216,230],
-       lightcyan:[224,255,255],
-       lightgreen:[144,238,144],
-       lightgrey:[211,211,211],
-       lightpink:[255,182,193],
-       lightyellow:[255,255,224],
-       lime:[0,255,0],
-       magenta:[255,0,255],
-       maroon:[128,0,0],
-       navy:[0,0,128],
-       olive:[128,128,0],
-       orange:[255,165,0],
-       pink:[255,192,203],
-       purple:[128,0,128],
-       violet:[128,0,128],
-       red:[255,0,0],
-       silver:[192,192,192],
-       white:[255,255,255],
-       yellow:[255,255,0],
-       transparent: [255,255,255]
-};
-
-
-
-/******************************************************************************/
-/****************************** CLASS ANIMATIONS ******************************/
-/******************************************************************************/
-
-var classAnimationActions = ['add', 'remove', 'toggle'],
-       shorthandStyles = {
-               border: 1,
-               borderBottom: 1,
-               borderColor: 1,
-               borderLeft: 1,
-               borderRight: 1,
-               borderTop: 1,
-               borderWidth: 1,
-               margin: 1,
-               padding: 1
-       };
-
-function getElementStyles() {
-       var style = document.defaultView
-                       ? document.defaultView.getComputedStyle(this, null)
-                       : this.currentStyle,
-               newStyle = {},
-               key,
-               camelCase;
-
-       // webkit enumerates style porperties
-       if (style && style.length && style[0] && style[style[0]]) {
-               var len = style.length;
-               while (len--) {
-                       key = style[len];
-                       if (typeof style[key] == 'string') {
-                               camelCase = key.replace(/\-(\w)/g, function(all, letter){
-                                       return letter.toUpperCase();
-                               });
-                               newStyle[camelCase] = style[key];
-                       }
-               }
-       } else {
-               for (key in style) {
-                       if (typeof style[key] === 'string') {
-                               newStyle[key] = style[key];
-                       }
-               }
-       }
-       
-       return newStyle;
-}
-
-function filterStyles(styles) {
-       var name, value;
-       for (name in styles) {
-               value = styles[name];
-               if (
-                       // ignore null and undefined values
-                       value == null ||
-                       // ignore functions (when does this occur?)
-                       $.isFunction(value) ||
-                       // shorthand styles that need to be expanded
-                       name in shorthandStyles ||
-                       // ignore scrollbars (break in IE)
-                       (/scrollbar/).test(name) ||
-
-                       // only colors or values that can be converted to numbers
-                       (!(/color/i).test(name) && isNaN(parseFloat(value)))
-               ) {
-                       delete styles[name];
-               }
-       }
-       
-       return styles;
-}
-
-function styleDifference(oldStyle, newStyle) {
-       var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459
-               name;
-
-       for (name in newStyle) {
-               if (oldStyle[name] != newStyle[name]) {
-                       diff[name] = newStyle[name];
-               }
-       }
-
-       return diff;
-}
-
-$.effects.animateClass = function(value, duration, easing, callback) {
-       if ($.isFunction(easing)) {
-               callback = easing;
-               easing = null;
-       }
-
-       return this.queue(function() {
-               var that = $(this),
-                       originalStyleAttr = that.attr('style') || ' ',
-                       originalStyle = filterStyles(getElementStyles.call(this)),
-                       newStyle,
-                       className = that.attr('class') || "";
-
-               $.each(classAnimationActions, function(i, action) {
-                       if (value[action]) {
-                               that[action + 'Class'](value[action]);
-                       }
-               });
-               newStyle = filterStyles(getElementStyles.call(this));
-               that.attr('class', className);
-
-               that.animate(styleDifference(originalStyle, newStyle), {
-                       queue: false,
-                       duration: duration,
-                       easing: easing,
-                       complete: function() {
-                               $.each(classAnimationActions, function(i, action) {
-                                       if (value[action]) { that[action + 'Class'](value[action]); }
-                               });
-                               // work around bug in IE by clearing the cssText before setting it
-                               if (typeof that.attr('style') == 'object') {
-                                       that.attr('style').cssText = '';
-                                       that.attr('style').cssText = originalStyleAttr;
-                               } else {
-                                       that.attr('style', originalStyleAttr);
-                               }
-                               if (callback) { callback.apply(this, arguments); }
-                               $.dequeue( this );
-                       }
-               });
-       });
-};
-
-$.fn.extend({
-       _addClass: $.fn.addClass,
-       addClass: function(classNames, speed, easing, callback) {
-               return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);
-       },
-
-       _removeClass: $.fn.removeClass,
-       removeClass: function(classNames,speed,easing,callback) {
-               return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);
-       },
-
-       _toggleClass: $.fn.toggleClass,
-       toggleClass: function(classNames, force, speed, easing, callback) {
-               if ( typeof force == "boolean" || force === undefined ) {
-                       if ( !speed ) {
-                               // without speed parameter;
-                               return this._toggleClass(classNames, force);
-                       } else {
-                               return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]);
-                       }
-               } else {
-                       // without switch parameter;
-                       return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]);
-               }
-       },
-
-       switchClass: function(remove,add,speed,easing,callback) {
-               return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);
-       }
-});
-
-
-
-/******************************************************************************/
-/*********************************** EFFECTS **********************************/
-/******************************************************************************/
-
-$.extend($.effects, {
-       version: "1.8.24",
-
-       // Saves a set of properties in a data storage
-       save: function(element, set) {
-               for(var i=0; i < set.length; i++) {
-                       if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]);
-               }
-       },
-
-       // Restores a set of previously saved properties from a data storage
-       restore: function(element, set) {
-               for(var i=0; i < set.length; i++) {
-                       if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i]));
-               }
-       },
-
-       setMode: function(el, mode) {
-               if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle
-               return mode;
-       },
-
-       getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value
-               // this should be a little more flexible in the future to handle a string & hash
-               var y, x;
-               switch (origin[0]) {
-                       case 'top': y = 0; break;
-                       case 'middle': y = 0.5; break;
-                       case 'bottom': y = 1; break;
-                       default: y = origin[0] / original.height;
-               };
-               switch (origin[1]) {
-                       case 'left': x = 0; break;
-                       case 'center': x = 0.5; break;
-                       case 'right': x = 1; break;
-                       default: x = origin[1] / original.width;
-               };
-               return {x: x, y: y};
-       },
-
-       // Wraps the element around a wrapper that copies position properties
-       createWrapper: function(element) {
-
-               // if the element is already wrapped, return it
-               if (element.parent().is('.ui-effects-wrapper')) {
-                       return element.parent();
-               }
-
-               // wrap the element
-               var props = {
-                               width: element.outerWidth(true),
-                               height: element.outerHeight(true),
-                               'float': element.css('float')
-                       },
-                       wrapper = $('<div></div>')
-                               .addClass('ui-effects-wrapper')
-                               .css({
-                                       fontSize: '100%',
-                                       background: 'transparent',
-                                       border: 'none',
-                                       margin: 0,
-                                       padding: 0
-                               }),
-                       active = document.activeElement;
-
-               // support: Firefox
-               // Firefox incorrectly exposes anonymous content
-               // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
-               try {
-                       active.id;
-               } catch( e ) {
-                       active = document.body;
-               }
-
-               element.wrap( wrapper );
-
-               // Fixes #7595 - Elements lose focus when wrapped.
-               if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
-                       $( active ).focus();
-               }
-               
-               wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element
-
-               // transfer positioning properties to the wrapper
-               if (element.css('position') == 'static') {
-                       wrapper.css({ position: 'relative' });
-                       element.css({ position: 'relative' });
-               } else {
-                       $.extend(props, {
-                               position: element.css('position'),
-                               zIndex: element.css('z-index')
-                       });
-                       $.each(['top', 'left', 'bottom', 'right'], function(i, pos) {
-                               props[pos] = element.css(pos);
-                               if (isNaN(parseInt(props[pos], 10))) {
-                                       props[pos] = 'auto';
-                               }
-                       });
-                       element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' });
-               }
-
-               return wrapper.css(props).show();
-       },
-
-       removeWrapper: function(element) {
-               var parent,
-                       active = document.activeElement;
-               
-               if (element.parent().is('.ui-effects-wrapper')) {
-                       parent = element.parent().replaceWith(element);
-                       // Fixes #7595 - Elements lose focus when wrapped.
-                       if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
-                               $( active ).focus();
-                       }
-                       return parent;
-               }
-                       
-               return element;
-       },
-
-       setTransition: function(element, list, factor, value) {
-               value = value || {};
-               $.each(list, function(i, x){
-                       var unit = element.cssUnit(x);
-                       if (unit[0] > 0) value[x] = unit[0] * factor + unit[1];
-               });
-               return value;
-       }
-});
-
-
-function _normalizeArguments(effect, options, speed, callback) {
-       // shift params for method overloading
-       if (typeof effect == 'object') {
-               callback = options;
-               speed = null;
-               options = effect;
-               effect = options.effect;
-       }
-       if ($.isFunction(options)) {
-               callback = options;
-               speed = null;
-               options = {};
-       }
-        if (typeof options == 'number' || $.fx.speeds[options]) {
-               callback = speed;
-               speed = options;
-               options = {};
-       }
-       if ($.isFunction(speed)) {
-               callback = speed;
-               speed = null;
-       }
-
-       options = options || {};
-
-       speed = speed || options.duration;
-       speed = $.fx.off ? 0 : typeof speed == 'number'
-               ? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default;
-
-       callback = callback || options.complete;
-
-       return [effect, options, speed, callback];
-}
-
-function standardSpeed( speed ) {
-       // valid standard speeds
-       if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) {
-               return true;
-       }
-       
-       // invalid strings - treat as "normal" speed
-       if ( typeof speed === "string" && !$.effects[ speed ] ) {
-               return true;
-       }
-       
-       return false;
-}
-
-$.fn.extend({
-       effect: function(effect, options, speed, callback) {
-               var args = _normalizeArguments.apply(this, arguments),
-                       // TODO: make effects take actual parameters instead of a hash
-                       args2 = {
-                               options: args[1],
-                               duration: args[2],
-                               callback: args[3]
-                       },
-                       mode = args2.options.mode,
-                       effectMethod = $.effects[effect];
-               
-               if ( $.fx.off || !effectMethod ) {
-                       // delegate to the original method (e.g., .show()) if possible
-                       if ( mode ) {
-                               return this[ mode ]( args2.duration, args2.callback );
-                       } else {
-                               return this.each(function() {
-                                       if ( args2.callback ) {
-                                               args2.callback.call( this );
-                                       }
-                               });
-                       }
-               }
-               
-               return effectMethod.call(this, args2);
-       },
-
-       _show: $.fn.show,
-       show: function(speed) {
-               if ( standardSpeed( speed ) ) {
-                       return this._show.apply(this, arguments);
-               } else {
-                       var args = _normalizeArguments.apply(this, arguments);
-                       args[1].mode = 'show';
-                       return this.effect.apply(this, args);
-               }
-       },
-
-       _hide: $.fn.hide,
-       hide: function(speed) {
-               if ( standardSpeed( speed ) ) {
-                       return this._hide.apply(this, arguments);
-               } else {
-                       var args = _normalizeArguments.apply(this, arguments);
-                       args[1].mode = 'hide';
-                       return this.effect.apply(this, args);
-               }
-       },
-
-       // jQuery core overloads toggle and creates _toggle
-       __toggle: $.fn.toggle,
-       toggle: function(speed) {
-               if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) {
-                       return this.__toggle.apply(this, arguments);
-               } else {
-                       var args = _normalizeArguments.apply(this, arguments);
-                       args[1].mode = 'toggle';
-                       return this.effect.apply(this, args);
-               }
-       },
-
-       // helper functions
-       cssUnit: function(key) {
-               var style = this.css(key), val = [];
-               $.each( ['em','px','%','pt'], function(i, unit){
-                       if(style.indexOf(unit) > 0)
-                               val = [parseFloat(style), unit];
-               });
-               return val;
-       }
-});
-
-
-
-/******************************************************************************/
-/*********************************** EASING ***********************************/
-/******************************************************************************/
-
-// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
-
-var baseEasings = {};
-
-$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
-       baseEasings[ name ] = function( p ) {
-               return Math.pow( p, i + 2 );
-       };
-});
-
-$.extend( baseEasings, {
-       Sine: function ( p ) {
-               return 1 - Math.cos( p * Math.PI / 2 );
-       },
-       Circ: function ( p ) {
-               return 1 - Math.sqrt( 1 - p * p );
-       },
-       Elastic: function( p ) {
-               return p === 0 || p === 1 ? p :
-                       -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
-       },
-       Back: function( p ) {
-               return p * p * ( 3 * p - 2 );
-       },
-       Bounce: function ( p ) {
-               var pow2,
-                       bounce = 4;
-
-               while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
-               return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
-       }
-});
-
-$.each( baseEasings, function( name, easeIn ) {
-       $.easing[ "easeIn" + name ] = easeIn;
-       $.easing[ "easeOut" + name ] = function( p ) {
-               return 1 - easeIn( 1 - p );
-       };
-       $.easing[ "easeInOut" + name ] = function( p ) {
-               return p < .5 ?
-                       easeIn( p * 2 ) / 2 :
-                       easeIn( p * -2 + 2 ) / -2 + 1;
-       };
-});
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.drop.js b/resources/lib/jquery.effects/jquery.effects.drop.js
deleted file mode 100644 (file)
index 97e5abd..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
- * jQuery UI Effects Drop 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Drop
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.drop = function(o) {
-
-       return this.queue(function() {
-
-               // Create element
-               var el = $(this), props = ['position','top','bottom','left','right','opacity'];
-
-               // Set options
-               var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
-               var direction = o.options.direction || 'left'; // Default Direction
-
-               // Adjust
-               $.effects.save(el, props); el.show(); // Save & Show
-               $.effects.createWrapper(el); // Create Wrapper
-               var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
-               var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
-               var distance = o.options.distance || (ref == 'top' ? el.outerHeight( true ) / 2 : el.outerWidth( true ) / 2);
-               if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
-
-               // Animation
-               var animation = {opacity: mode == 'show' ? 1 : 0};
-               animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
-
-               // Animate
-               el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
-                       if(mode == 'hide') el.hide(); // Hide
-                       $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
-                       if(o.callback) o.callback.apply(this, arguments); // Callback
-                       el.dequeue();
-               }});
-
-       });
-
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.explode.js b/resources/lib/jquery.effects/jquery.effects.explode.js
deleted file mode 100644 (file)
index f63e47a..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*!
- * jQuery UI Effects Explode 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Explode
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.explode = function(o) {
-
-       return this.queue(function() {
-
-       var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
-       var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
-
-       o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode;
-       var el = $(this).show().css('visibility', 'hidden');
-       var offset = el.offset();
-
-       //Substract the margins - not fixing the problem yet.
-       offset.top -= parseInt(el.css("marginTop"),10) || 0;
-       offset.left -= parseInt(el.css("marginLeft"),10) || 0;
-
-       var width = el.outerWidth(true);
-       var height = el.outerHeight(true);
-
-       for(var i=0;i<rows;i++) { // =
-               for(var j=0;j<cells;j++) { // ||
-                       el
-                               .clone()
-                               .appendTo('body')
-                               .wrap('<div></div>')
-                               .css({
-                                       position: 'absolute',
-                                       visibility: 'visible',
-                                       left: -j*(width/cells),
-                                       top: -i*(height/rows)
-                               })
-                               .parent()
-                               .addClass('ui-effects-explode')
-                               .css({
-                                       position: 'absolute',
-                                       overflow: 'hidden',
-                                       width: width/cells,
-                                       height: height/rows,
-                                       left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0),
-                                       top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0),
-                                       opacity: o.options.mode == 'show' ? 0 : 1
-                               }).animate({
-                                       left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)),
-                                       top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)),
-                                       opacity: o.options.mode == 'show' ? 1 : 0
-                               }, o.duration || 500);
-               }
-       }
-
-       // Set a timeout, to call the callback approx. when the other animations have finished
-       setTimeout(function() {
-
-               o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide();
-                               if(o.callback) o.callback.apply(el[0]); // Callback
-                               el.dequeue();
-
-                               $('div.ui-effects-explode').remove();
-
-       }, o.duration || 500);
-
-
-       });
-
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.fade.js b/resources/lib/jquery.effects/jquery.effects.fade.js
deleted file mode 100644 (file)
index 7aa37b1..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*!
- * jQuery UI Effects Fade 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fade
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.fade = function(o) {
-       return this.queue(function() {
-               var elem = $(this),
-                       mode = $.effects.setMode(elem, o.options.mode || 'hide');
-
-               elem.animate({ opacity: mode }, {
-                       queue: false,
-                       duration: o.duration,
-                       easing: o.options.easing,
-                       complete: function() {
-                               (o.callback && o.callback.apply(this, arguments));
-                               elem.dequeue();
-                       }
-               });
-       });
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.fold.js b/resources/lib/jquery.effects/jquery.effects.fold.js
deleted file mode 100644 (file)
index 06cc553..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*!
- * jQuery UI Effects Fold 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fold
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.fold = function(o) {
-
-       return this.queue(function() {
-
-               // Create element
-               var el = $(this), props = ['position','top','bottom','left','right'];
-
-               // Set options
-               var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
-               var size = o.options.size || 15; // Default fold size
-               var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value
-               var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2;
-
-               // Adjust
-               $.effects.save(el, props); el.show(); // Save & Show
-               var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
-               var widthFirst = ((mode == 'show') != horizFirst);
-               var ref = widthFirst ? ['width', 'height'] : ['height', 'width'];
-               var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()];
-               var percent = /([0-9]+)%/.exec(size);
-               if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1];
-               if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift
-
-               // Animation
-               var animation1 = {}, animation2 = {};
-               animation1[ref[0]] = mode == 'show' ? distance[0] : size;
-               animation2[ref[1]] = mode == 'show' ? distance[1] : 0;
-
-               // Animate
-               wrapper.animate(animation1, duration, o.options.easing)
-               .animate(animation2, duration, o.options.easing, function() {
-                       if(mode == 'hide') el.hide(); // Hide
-                       $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
-                       if(o.callback) o.callback.apply(el[0], arguments); // Callback
-                       el.dequeue();
-               });
-
-       });
-
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.highlight.js b/resources/lib/jquery.effects/jquery.effects.highlight.js
deleted file mode 100644 (file)
index ad9e7bd..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
- * jQuery UI Effects Highlight 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Highlight
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.highlight = function(o) {
-       return this.queue(function() {
-               var elem = $(this),
-                       props = ['backgroundImage', 'backgroundColor', 'opacity'],
-                       mode = $.effects.setMode(elem, o.options.mode || 'show'),
-                       animation = {
-                               backgroundColor: elem.css('backgroundColor')
-                       };
-
-               if (mode == 'hide') {
-                       animation.opacity = 0;
-               }
-
-               $.effects.save(elem, props);
-               elem
-                       .show()
-                       .css({
-                               backgroundImage: 'none',
-                               backgroundColor: o.options.color || '#ffff99'
-                       })
-                       .animate(animation, {
-                               queue: false,
-                               duration: o.duration,
-                               easing: o.options.easing,
-                               complete: function() {
-                                       (mode == 'hide' && elem.hide());
-                                       $.effects.restore(elem, props);
-                                       (mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter'));
-                                       (o.callback && o.callback.apply(this, arguments));
-                                       elem.dequeue();
-                               }
-                       });
-       });
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.pulsate.js b/resources/lib/jquery.effects/jquery.effects.pulsate.js
deleted file mode 100644 (file)
index d730bee..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
- * jQuery UI Effects Pulsate 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Pulsate
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.pulsate = function(o) {
-       return this.queue(function() {
-               var elem = $(this),
-                       mode = $.effects.setMode(elem, o.options.mode || 'show'),
-                       times = ((o.options.times || 5) * 2) - 1,
-                       duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2,
-                       isVisible = elem.is(':visible'),
-                       animateTo = 0;
-
-               if (!isVisible) {
-                       elem.css('opacity', 0).show();
-                       animateTo = 1;
-               }
-
-               if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) {
-                       times--;
-               }
-
-               for (var i = 0; i < times; i++) {
-                       elem.animate({ opacity: animateTo }, duration, o.options.easing);
-                       animateTo = (animateTo + 1) % 2;
-               }
-
-               elem.animate({ opacity: animateTo }, duration, o.options.easing, function() {
-                       if (animateTo == 0) {
-                               elem.hide();
-                       }
-                       (o.callback && o.callback.apply(this, arguments));
-               });
-
-               elem
-                       .queue('fx', function() { elem.dequeue(); })
-                       .dequeue();
-       });
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.scale.js b/resources/lib/jquery.effects/jquery.effects.scale.js
deleted file mode 100644 (file)
index 52d1871..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*!
- * jQuery UI Effects Scale 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Scale
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.puff = function(o) {
-       return this.queue(function() {
-               var elem = $(this),
-                       mode = $.effects.setMode(elem, o.options.mode || 'hide'),
-                       percent = parseInt(o.options.percent, 10) || 150,
-                       factor = percent / 100,
-                       original = { height: elem.height(), width: elem.width() };
-
-               $.extend(o.options, {
-                       fade: true,
-                       mode: mode,
-                       percent: mode == 'hide' ? percent : 100,
-                       from: mode == 'hide'
-                               ? original
-                               : {
-                                       height: original.height * factor,
-                                       width: original.width * factor
-                               }
-               });
-
-               elem.effect('scale', o.options, o.duration, o.callback);
-               elem.dequeue();
-       });
-};
-
-$.effects.scale = function(o) {
-
-       return this.queue(function() {
-
-               // Create element
-               var el = $(this);
-
-               // Set options
-               var options = $.extend(true, {}, o.options);
-               var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
-               var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent
-               var direction = o.options.direction || 'both'; // Set default axis
-               var origin = o.options.origin; // The origin of the scaling
-               if (mode != 'effect') { // Set default origin and restore for show/hide
-                       options.origin = origin || ['middle','center'];
-                       options.restore = true;
-               }
-               var original = {height: el.height(), width: el.width()}; // Save original
-               el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state
-
-               // Adjust
-               var factor = { // Set scaling factor
-                       y: direction != 'horizontal' ? (percent / 100) : 1,
-                       x: direction != 'vertical' ? (percent / 100) : 1
-               };
-               el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state
-
-               if (o.options.fade) { // Fade option to support puff
-                       if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;};
-                       if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;};
-               };
-
-               // Animation
-               options.from = el.from; options.to = el.to; options.mode = mode;
-
-               // Animate
-               el.effect('size', options, o.duration, o.callback);
-               el.dequeue();
-       });
-
-};
-
-$.effects.size = function(o) {
-
-       return this.queue(function() {
-
-               // Create element
-               var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity'];
-               var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore
-               var props2 = ['width','height','overflow']; // Copy for children
-               var cProps = ['fontSize'];
-               var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];
-               var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];
-
-               // Set options
-               var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
-               var restore = o.options.restore || false; // Default restore
-               var scale = o.options.scale || 'both'; // Default scale mode
-               var origin = o.options.origin; // The origin of the sizing
-               var original = {height: el.height(), width: el.width()}; // Save original
-               el.from = o.options.from || original; // Default from state
-               el.to = o.options.to || original; // Default to state
-               // Adjust
-               if (origin) { // Calculate baseline shifts
-                       var baseline = $.effects.getBaseline(origin, original);
-                       el.from.top = (original.height - el.from.height) * baseline.y;
-                       el.from.left = (original.width - el.from.width) * baseline.x;
-                       el.to.top = (original.height - el.to.height) * baseline.y;
-                       el.to.left = (original.width - el.to.width) * baseline.x;
-               };
-               var factor = { // Set scaling factor
-                       from: {y: el.from.height / original.height, x: el.from.width / original.width},
-                       to: {y: el.to.height / original.height, x: el.to.width / original.width}
-               };
-               if (scale == 'box' || scale == 'both') { // Scale the css box
-                       if (factor.from.y != factor.to.y) { // Vertical props scaling
-                               props = props.concat(vProps);
-                               el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
-                               el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
-                       };
-                       if (factor.from.x != factor.to.x) { // Horizontal props scaling
-                               props = props.concat(hProps);
-                               el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
-                               el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
-                       };
-               };
-               if (scale == 'content' || scale == 'both') { // Scale the content
-                       if (factor.from.y != factor.to.y) { // Vertical props scaling
-                               props = props.concat(cProps);
-                               el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
-                               el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
-                       };
-               };
-               $.effects.save(el, restore ? props : props1); el.show(); // Save & Show
-               $.effects.createWrapper(el); // Create Wrapper
-               el.css('overflow','hidden').css(el.from); // Shift
-
-               // Animate
-               if (scale == 'content' || scale == 'both') { // Scale the children
-                       vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size
-                       hProps = hProps.concat(['marginLeft','marginRight']); // Add margins
-                       props2 = props.concat(vProps).concat(hProps); // Concat
-                       el.find("*[width]").each(function(){
-                               var child = $(this);
-                               if (restore) $.effects.save(child, props2);
-                               var c_original = {height: child.height(), width: child.width()}; // Save original
-                               child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x};
-                               child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x};
-                               if (factor.from.y != factor.to.y) { // Vertical props scaling
-                                       child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
-                                       child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
-                               };
-                               if (factor.from.x != factor.to.x) { // Horizontal props scaling
-                                       child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
-                                       child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
-                               };
-                               child.css(child.from); // Shift children
-                               child.animate(child.to, o.duration, o.options.easing, function(){
-                                       if (restore) $.effects.restore(child, props2); // Restore children
-                               }); // Animate children
-                       });
-               };
-
-               // Animate
-               el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
-                       if (el.to.opacity === 0) {
-                               el.css('opacity', el.from.opacity);
-                       }
-                       if(mode == 'hide') el.hide(); // Hide
-                       $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore
-                       if(o.callback) o.callback.apply(this, arguments); // Callback
-                       el.dequeue();
-               }});
-
-       });
-
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.shake.js b/resources/lib/jquery.effects/jquery.effects.shake.js
deleted file mode 100644 (file)
index 44b8ea4..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
- * jQuery UI Effects Shake 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Shake
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.shake = function(o) {
-
-       return this.queue(function() {
-
-               // Create element
-               var el = $(this), props = ['position','top','bottom','left','right'];
-
-               // Set options
-               var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
-               var direction = o.options.direction || 'left'; // Default direction
-               var distance = o.options.distance || 20; // Default distance
-               var times = o.options.times || 3; // Default # of times
-               var speed = o.duration || o.options.duration || 140; // Default speed per shake
-
-               // Adjust
-               $.effects.save(el, props); el.show(); // Save & Show
-               $.effects.createWrapper(el); // Create Wrapper
-               var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
-               var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
-
-               // Animation
-               var animation = {}, animation1 = {}, animation2 = {};
-               animation[ref] = (motion == 'pos' ? '-=' : '+=')  + distance;
-               animation1[ref] = (motion == 'pos' ? '+=' : '-=')  + distance * 2;
-               animation2[ref] = (motion == 'pos' ? '-=' : '+=')  + distance * 2;
-
-               // Animate
-               el.animate(animation, speed, o.options.easing);
-               for (var i = 1; i < times; i++) { // Shakes
-                       el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing);
-               };
-               el.animate(animation1, speed, o.options.easing).
-               animate(animation, speed / 2, o.options.easing, function(){ // Last shake
-                       $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
-                       if(o.callback) o.callback.apply(this, arguments); // Callback
-               });
-               el.queue('fx', function() { el.dequeue(); });
-               el.dequeue();
-       });
-
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.slide.js b/resources/lib/jquery.effects/jquery.effects.slide.js
deleted file mode 100644 (file)
index 502e6c9..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
- * jQuery UI Effects Slide 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Slide
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.slide = function(o) {
-
-       return this.queue(function() {
-
-               // Create element
-               var el = $(this), props = ['position','top','bottom','left','right'];
-
-               // Set options
-               var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
-               var direction = o.options.direction || 'left'; // Default Direction
-
-               // Adjust
-               $.effects.save(el, props); el.show(); // Save & Show
-               $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
-               var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
-               var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
-               var distance = o.options.distance || (ref == 'top' ? el.outerHeight( true ) : el.outerWidth( true ));
-               if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift
-
-               // Animation
-               var animation = {};
-               animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
-
-               // Animate
-               el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
-                       if(mode == 'hide') el.hide(); // Hide
-                       $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
-                       if(o.callback) o.callback.apply(this, arguments); // Callback
-                       el.dequeue();
-               }});
-
-       });
-
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.effects/jquery.effects.transfer.js b/resources/lib/jquery.effects/jquery.effects.transfer.js
deleted file mode 100644 (file)
index 4ee4ae8..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*!
- * jQuery UI Effects Transfer 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Transfer
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function( $, undefined ) {
-
-$.effects.transfer = function(o) {
-       return this.queue(function() {
-               var elem = $(this),
-                       target = $(o.options.to),
-                       endPosition = target.offset(),
-                       animation = {
-                               top: endPosition.top,
-                               left: endPosition.left,
-                               height: target.innerHeight(),
-                               width: target.innerWidth()
-                       },
-                       startPosition = elem.offset(),
-                       transfer = $('<div class="ui-effects-transfer"></div>')
-                               .appendTo(document.body)
-                               .addClass(o.options.className)
-                               .css({
-                                       top: startPosition.top,
-                                       left: startPosition.left,
-                                       height: elem.innerHeight(),
-                                       width: elem.innerWidth(),
-                                       position: 'absolute'
-                               })
-                               .animate(animation, o.duration, o.options.easing, function() {
-                                       transfer.remove();
-                                       (o.callback && o.callback.apply(elem[0], arguments));
-                                       elem.dequeue();
-                               });
-       });
-};
-
-})(jQuery);
diff --git a/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ar-DZ.js b/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ar-DZ.js
new file mode 100644 (file)
index 0000000..7b175af
--- /dev/null
@@ -0,0 +1,23 @@
+/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/
+/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
+
+jQuery(function($){
+       $.datepicker.regional['ar-DZ'] = {
+               closeText: 'إغلاق',
+               prevText: '&#x3C;السابق',
+               nextText: 'التالي&#x3E;',
+               currentText: 'اليوم',
+               monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان',
+               'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'],
+               monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+               dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+               dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+               dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+               weekHeader: 'أسبوع',
+               dateFormat: 'dd/mm/yy',
+               firstDay: 6,
+               isRTL: true,
+               showMonthAfterYear: false,
+               yearSuffix: ''};
+       $.datepicker.setDefaults($.datepicker.regional['ar-DZ']);
+});
index 8a9218d..cef0f08 100644 (file)
@@ -4,8 +4,8 @@
 jQuery(function($){
        $.datepicker.regional['ar'] = {
                closeText: 'إغلاق',
-               prevText: '&#x3c;السابق',
-               nextText: 'التالي&#x3e;',
+               prevText: '&#x3C;السابق',
+               nextText: 'التالي&#x3E;',
                currentText: 'اليوم',
                monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
                'تموز', 'آب', 'أيلول',       'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['ar']);
-});
\ No newline at end of file
+});
index 57802a4..a133a9e 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($) {
        $.datepicker.regional['az'] = {
                closeText: 'Bağla',
-               prevText: '&#x3c;Geri',
-               nextText: 'İrəli&#x3e;',
+               prevText: '&#x3C;Geri',
+               nextText: 'İrəli&#x3E;',
                currentText: 'Bugün',
                monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun',
                'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
@@ -20,4 +20,4 @@ jQuery(function($) {
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['az']);
-});
\ No newline at end of file
+});
index c19d20f..86ab885 100644 (file)
@@ -1,24 +1,24 @@
 /* Bulgarian initialisation for the jQuery UI date picker plugin. */
 /* Written by Stoyan Kyosev (http://svest.org). */
 jQuery(function($){
-    $.datepicker.regional['bg'] = {
-        closeText: 'затвори',
-        prevText: '&#x3c;назад',
-        nextText: 'напред&#x3e;',
-               nextBigText: '&#x3e;&#x3e;',
-        currentText: 'днес',
-        monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
-        'Юли','Август','Септември','Октомври','Ноември','Декември'],
-        monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
-        'Юли','Авг','Сеп','Окт','Нов','Дек'],
-        dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
-        dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
-        dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
+       $.datepicker.regional['bg'] = {
+               closeText: 'затвори',
+               prevText: '&#x3C;назад',
+               nextText: 'напред&#x3E;',
+               nextBigText: '&#x3E;&#x3E;',
+               currentText: 'днес',
+               monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
+               'Юли','Август','Септември','Октомври','Ноември','Декември'],
+               monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
+               'Юли','Авг','Сеп','Окт','Нов','Дек'],
+               dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
+               dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
+               dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
                weekHeader: 'Wk',
-        dateFormat: 'dd.mm.yy',
+               dateFormat: 'dd.mm.yy',
                firstDay: 1,
-        isRTL: false,
+               isRTL: false,
                showMonthAfterYear: false,
                yearSuffix: ''};
-    $.datepicker.setDefaults($.datepicker.regional['bg']);
+       $.datepicker.setDefaults($.datepicker.regional['bg']);
 });
index d4dc8b0..f08870f 100644 (file)
@@ -2,10 +2,10 @@
 /* Written by Kenan Konjo. */
 jQuery(function($){
        $.datepicker.regional['bs'] = {
-               closeText: 'Zatvori', 
-               prevText: '&#x3c;', 
-               nextText: '&#x3e;', 
-               currentText: 'Danas', 
+               closeText: 'Zatvori',
+               prevText: '&#x3C;',
+               nextText: '&#x3E;',
+               currentText: 'Danas',
                monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
                'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
                monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['bs']);
-});
\ No newline at end of file
+});
index b128e69..a10b549 100644 (file)
@@ -1,23 +1,23 @@
-/* Inicialització en català per a l'extenció 'calendar' per jQuery. */
+/* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */
 /* Writers: (joan.leon@gmail.com). */
 jQuery(function($){
        $.datepicker.regional['ca'] = {
-               closeText: 'Tancar',
-               prevText: '&#x3c;Ant',
-               nextText: 'Seg&#x3e;',
+               closeText: 'Tanca',
+               prevText: 'Anterior',
+               nextText: 'Següent',
                currentText: 'Avui',
-               monthNames: ['Gener','Febrer','Mar&ccedil;','Abril','Maig','Juny',
-               'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
-               monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun',
-               'Jul','Ago','Set','Oct','Nov','Des'],
-               dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
-               dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'],
-               dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'],
-               weekHeader: 'Sm',
+               monthNames: ['gener','febrer','març','abril','maig','juny',
+               'juliol','agost','setembre','octubre','novembre','desembre'],
+               monthNamesShort: ['gen','feb','març','abr','maig','juny',
+               'jul','ag','set','oct','nov','des'],
+               dayNames: ['diumenge','dilluns','dimarts','dimecres','dijous','divendres','dissabte'],
+               dayNamesShort: ['dg','dl','dt','dc','dj','dv','ds'],
+               dayNamesMin: ['dg','dl','dt','dc','dj','dv','ds'],
+               weekHeader: 'Set',
                dateFormat: 'dd/mm/yy',
                firstDay: 1,
                isRTL: false,
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['ca']);
-});
\ No newline at end of file
+});
index 9805bcd..b96b1a5 100644 (file)
@@ -3,11 +3,11 @@
 jQuery(function($){
        $.datepicker.regional['cs'] = {
                closeText: 'Zavřít',
-               prevText: '&#x3c;Dříve',
-               nextText: 'Později&#x3e;',
+               prevText: '&#x3C;Dříve',
+               nextText: 'Později&#x3E;',
                currentText: 'Nyní',
                monthNames: ['leden','únor','březen','duben','květen','červen',
-        'červenec','srpen','září','říjen','listopad','prosinec'],
+               'červenec','srpen','září','říjen','listopad','prosinec'],
                monthNamesShort: ['led','úno','bře','dub','kvě','čer',
                'čvc','srp','zář','říj','lis','pro'],
                dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
diff --git a/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-cy-GB.js b/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-cy-GB.js
new file mode 100644 (file)
index 0000000..cf3a38e
--- /dev/null
@@ -0,0 +1,23 @@
+/* Welsh/UK initialisation for the jQuery UI date picker plugin. */
+/* Written by William Griffiths. */
+jQuery(function($){
+       $.datepicker.regional['cy-GB'] = {
+               closeText: 'Done',
+               prevText: 'Prev',
+               nextText: 'Next',
+               currentText: 'Today',
+               monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin',
+               'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'],
+               monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh',
+               'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'],
+               dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'],
+               dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],
+               dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'],
+               weekHeader: 'Wy',
+               dateFormat: 'dd/mm/yy',
+               firstDay: 1,
+               isRTL: false,
+               showMonthAfterYear: false,
+               yearSuffix: ''};
+       $.datepicker.setDefaults($.datepicker.regional['cy-GB']);
+});
index 176044e..7e42948 100644 (file)
@@ -1,23 +1,23 @@
 /* Danish initialisation for the jQuery UI date picker plugin. */
 /* Written by Jan Christensen ( deletestuff@gmail.com). */
 jQuery(function($){
-    $.datepicker.regional['da'] = {
+       $.datepicker.regional['da'] = {
                closeText: 'Luk',
-        prevText: '&#x3c;Forrige',
-               nextText: 'Næste&#x3e;',
+               prevText: '&#x3C;Forrige',
+               nextText: 'Næste&#x3E;',
                currentText: 'Idag',
-        monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
-        'Juli','August','September','Oktober','November','December'],
-        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
-        'Jul','Aug','Sep','Okt','Nov','Dec'],
+               monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
+               'Juli','August','September','Oktober','November','December'],
+               monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+               'Jul','Aug','Sep','Okt','Nov','Dec'],
                dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
                dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
                dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
                weekHeader: 'Uge',
-        dateFormat: 'dd-mm-yy',
+               dateFormat: 'dd-mm-yy',
                firstDay: 1,
                isRTL: false,
                showMonthAfterYear: false,
                yearSuffix: ''};
-    $.datepicker.setDefaults($.datepicker.regional['da']);
+       $.datepicker.setDefaults($.datepicker.regional['da']);
 });
index f3ef9e8..cfe9175 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['de'] = {
                closeText: 'schließen',
-               prevText: '&#x3c;zurück',
-               nextText: 'Vor&#x3e;',
+               prevText: '&#x3C;zurück',
+               nextText: 'Vor&#x3E;',
                currentText: 'heute',
                monthNames: ['Januar','Februar','März','April','Mai','Juni',
                'Juli','August','September','Oktober','November','Dezember'],
index 6d775f9..1ac4756 100644 (file)
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['el']);
-});
\ No newline at end of file
+});
diff --git a/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-en-AU.js b/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-en-AU.js
new file mode 100644 (file)
index 0000000..c1a1020
--- /dev/null
@@ -0,0 +1,23 @@
+/* English/Australia initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+       $.datepicker.regional['en-AU'] = {
+               closeText: 'Done',
+               prevText: 'Prev',
+               nextText: 'Next',
+               currentText: 'Today',
+               monthNames: ['January','February','March','April','May','June',
+               'July','August','September','October','November','December'],
+               monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+               dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+               dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+               dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+               weekHeader: 'Wk',
+               dateFormat: 'dd/mm/yy',
+               firstDay: 1,
+               isRTL: false,
+               showMonthAfterYear: false,
+               yearSuffix: ''};
+       $.datepicker.setDefaults($.datepicker.regional['en-AU']);
+});
diff --git a/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-en-NZ.js b/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-en-NZ.js
new file mode 100644 (file)
index 0000000..7819df0
--- /dev/null
@@ -0,0 +1,23 @@
+/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+       $.datepicker.regional['en-NZ'] = {
+               closeText: 'Done',
+               prevText: 'Prev',
+               nextText: 'Next',
+               currentText: 'Today',
+               monthNames: ['January','February','March','April','May','June',
+               'July','August','September','October','November','December'],
+               monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+               dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+               dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+               dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+               weekHeader: 'Wk',
+               dateFormat: 'dd/mm/yy',
+               firstDay: 1,
+               isRTL: false,
+               showMonthAfterYear: false,
+               yearSuffix: ''};
+       $.datepicker.setDefaults($.datepicker.regional['en-NZ']);
+});
index 6cabc2c..39e44fc 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['eo'] = {
                closeText: 'Fermi',
-               prevText: '&lt;Anta',
-               nextText: 'Sekv&gt;',
+               prevText: '&#x3C;Anta',
+               nextText: 'Sekv&#x3E;',
                currentText: 'Nuna',
                monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
                'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'],
index a02133d..97a2d6e 100644 (file)
@@ -3,16 +3,16 @@
 jQuery(function($){
        $.datepicker.regional['es'] = {
                closeText: 'Cerrar',
-               prevText: '&#x3c;Ant',
-               nextText: 'Sig&#x3e;',
+               prevText: '&#x3C;Ant',
+               nextText: 'Sig&#x3E;',
                currentText: 'Hoy',
                monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
                'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
                monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
                'Jul','Ago','Sep','Oct','Nov','Dic'],
-               dayNames: ['Domingo','Lunes','Martes','Mi&eacute;rcoles','Jueves','Viernes','S&aacute;bado'],
-               dayNamesShort: ['Dom','Lun','Mar','Mi&eacute;','Juv','Vie','S&aacute;b'],
-               dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'],
+               dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
+               dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
+               dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'],
                weekHeader: 'Sm',
                dateFormat: 'dd/mm/yy',
                firstDay: 1,
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['es']);
-});
\ No newline at end of file
+});
index 32702b2..62cbea8 100644 (file)
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['et']);
-}); 
\ No newline at end of file
+});
index ff66e49..a71db2c 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['eu'] = {
                closeText: 'Egina',
-               prevText: '&#x3c;Aur',
-               nextText: 'Hur&#x3e;',
+               prevText: '&#x3C;Aur',
+               nextText: 'Hur&#x3E;',
                currentText: 'Gaur',
                monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina',
                        'uztaila','abuztua','iraila','urria','azaroa','abendua'],
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['eu']);
-});
\ No newline at end of file
+});
index be8acd2..bb957f6 100644 (file)
@@ -37,7 +37,7 @@ jQuery(function($) {
                        'س',
                        'چ',
                        'پ',
-                       'ج', 
+                       'ج',
                        'ش'
                ],
                dayNamesMin: [
@@ -46,7 +46,7 @@ jQuery(function($) {
                        'س',
                        'چ',
                        'پ',
-                       'ج', 
+                       'ج',
                        'ش'
                ],
                weekHeader: 'هف',
@@ -56,4 +56,4 @@ jQuery(function($) {
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['fa']);
-});
\ No newline at end of file
+});
index 4c5adda..bd6d994 100644 (file)
@@ -5,11 +5,11 @@ jQuery(function($){
                closeText: 'Sulje',
                prevText: '&#xAB;Edellinen',
                nextText: 'Seuraava&#xBB;',
-               currentText: 'T&#xE4;n&#xE4;&#xE4;n',
-               monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kes&#xE4;kuu',
-               'Hein&#xE4;kuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
-               monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kes&#xE4;',
-               'Hein&#xE4;','Elo','Syys','Loka','Marras','Joulu'],
+               currentText: 'Tänään',
+               monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu',
+               'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
+               monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä',
+               'Heinä','Elo','Syys','Loka','Marras','Joulu'],
                dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'],
                dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
                dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
index 8a6cb99..cb0e3de 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['fo'] = {
                closeText: 'Lat aftur',
-               prevText: '&#x3c;Fyrra',
-               nextText: 'Næsta&#x3e;',
+               prevText: '&#x3C;Fyrra',
+               nextText: 'Næsta&#x3E;',
                currentText: 'Í dag',
                monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
                'Juli','August','September','Oktober','November','Desember'],
@@ -15,7 +15,7 @@ jQuery(function($){
                dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
                weekHeader: 'Vk',
                dateFormat: 'dd-mm-yy',
-               firstDay: 0,
+               firstDay: 1,
                isRTL: false,
                showMonthAfterYear: false,
                yearSuffix: ''};
diff --git a/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js b/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js
new file mode 100644 (file)
index 0000000..e574537
--- /dev/null
@@ -0,0 +1,23 @@
+/* Swiss-French initialisation for the jQuery UI date picker plugin. */
+/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
+jQuery(function($){
+       $.datepicker.regional['fr-CH'] = {
+               closeText: 'Fermer',
+               prevText: '&#x3C;Préc',
+               nextText: 'Suiv&#x3E;',
+               currentText: 'Courant',
+               monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+               'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+               monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
+               'Jul','Aoû','Sep','Oct','Nov','Déc'],
+               dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+               dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+               dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+               weekHeader: 'Sm',
+               dateFormat: 'dd.mm.yy',
+               firstDay: 1,
+               isRTL: false,
+               showMonthAfterYear: false,
+               yearSuffix: ''};
+       $.datepicker.setDefaults($.datepicker.regional['fr-CH']);
+});
index 7e79363..934afd1 100644 (file)
@@ -1,7 +1,7 @@
 /* French initialisation for the jQuery UI date picker plugin. */
 /* Written by Keith Wood (kbwood{at}iinet.com.au),
-              Stéphane Nahmani (sholby@sholby.net),
-              Stéphane Raimbault <stephane.raimbault@gmail.com> */
+                         Stéphane Nahmani (sholby@sholby.net),
+                         Stéphane Raimbault <stephane.raimbault@gmail.com> */
 jQuery(function($){
        $.datepicker.regional['fr'] = {
                closeText: 'Fermer',
index 278403e..59b989a 100644 (file)
@@ -3,16 +3,16 @@
 jQuery(function($){
        $.datepicker.regional['gl'] = {
                closeText: 'Pechar',
-               prevText: '&#x3c;Ant',
-               nextText: 'Seg&#x3e;',
+               prevText: '&#x3C;Ant',
+               nextText: 'Seg&#x3E;',
                currentText: 'Hoxe',
                monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño',
                'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'],
                monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ',
                'Xul','Ago','Set','Out','Nov','Dec'],
-               dayNames: ['Domingo','Luns','Martes','M&eacute;rcores','Xoves','Venres','S&aacute;bado'],
-               dayNamesShort: ['Dom','Lun','Mar','M&eacute;r','Xov','Ven','S&aacute;b'],
-               dayNamesMin: ['Do','Lu','Ma','M&eacute;','Xo','Ve','S&aacute;'],
+               dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'],
+               dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'],
+               dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'],
                weekHeader: 'Sm',
                dateFormat: 'dd/mm/yy',
                firstDay: 1,
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['gl']);
-});
\ No newline at end of file
+});
index 135cdec..b9e8dee 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['he'] = {
                closeText: 'סגור',
-               prevText: '&#x3c;הקודם',
-               nextText: 'הבא&#x3e;',
+               prevText: '&#x3C;הקודם',
+               nextText: 'הבא&#x3E;',
                currentText: 'היום',
                monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
                'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
index 1eb3dd9..2fe37b6 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['hr'] = {
                closeText: 'Zatvori',
-               prevText: '&#x3c;',
-               nextText: '&#x3e;',
+               prevText: '&#x3C;',
+               nextText: '&#x3E;',
                currentText: 'Danas',
                monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj',
                'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['hr']);
-});
\ No newline at end of file
+});
index c6cc194..6d4eca5 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['hy'] = {
                closeText: 'Փակել',
-               prevText: '&#x3c;Նախ.',
-               nextText: 'Հաջ.&#x3e;',
+               prevText: '&#x3C;Նախ.',
+               nextText: 'Հաջ.&#x3E;',
                currentText: 'Այսօր',
                monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս',
                'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'],
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['hy']);
-});
\ No newline at end of file
+});
index c626fbb..6327fa6 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['id'] = {
                closeText: 'Tutup',
-               prevText: '&#x3c;mundur',
-               nextText: 'maju&#x3e;',
+               prevText: '&#x3C;mundur',
+               nextText: 'maju&#x3E;',
                currentText: 'hari ini',
                monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
                'Juli','Agustus','September','Oktober','Nopember','Desember'],
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['id']);
-});
\ No newline at end of file
+});
index c53235a..925341a 100644 (file)
@@ -3,16 +3,16 @@
 jQuery(function($){
        $.datepicker.regional['is'] = {
                closeText: 'Loka',
-               prevText: '&#x3c; Fyrri',
-               nextText: 'N&aelig;sti &#x3e;',
-               currentText: '&Iacute; dag',
-               monthNames: ['Jan&uacute;ar','Febr&uacute;ar','Mars','Apr&iacute;l','Ma&iacute','J&uacute;n&iacute;',
-               'J&uacute;l&iacute;','&Aacute;g&uacute;st','September','Okt&oacute;ber','N&oacute;vember','Desember'],
-               monthNamesShort: ['Jan','Feb','Mar','Apr','Ma&iacute;','J&uacute;n',
-               'J&uacute;l','&Aacute;g&uacute;','Sep','Okt','N&oacute;v','Des'],
-               dayNames: ['Sunnudagur','M&aacute;nudagur','&THORN;ri&eth;judagur','Mi&eth;vikudagur','Fimmtudagur','F&ouml;studagur','Laugardagur'],
-               dayNamesShort: ['Sun','M&aacute;n','&THORN;ri','Mi&eth;','Fim','F&ouml;s','Lau'],
-               dayNamesMin: ['Su','M&aacute;','&THORN;r','Mi','Fi','F&ouml;','La'],
+               prevText: '&#x3C; Fyrri',
+               nextText: 'Næsti &#x3E;',
+               currentText: 'Í dag',
+               monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní',
+               'Júlí','Ágúst','September','Október','Nóvember','Desember'],
+               monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún',
+               'Júl','Ágú','Sep','Okt','Nóv','Des'],
+               dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'],
+               dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'],
+               dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'],
                weekHeader: 'Vika',
                dateFormat: 'dd/mm/yy',
                firstDay: 0,
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['is']);
-});
\ No newline at end of file
+});
index 59da2df..a01f043 100644 (file)
@@ -3,14 +3,14 @@
 jQuery(function($){
        $.datepicker.regional['it'] = {
                closeText: 'Chiudi',
-               prevText: '&#x3c;Prec',
-               nextText: 'Succ&#x3e;',
+               prevText: '&#x3C;Prec',
+               nextText: 'Succ&#x3E;',
                currentText: 'Oggi',
                monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
                        'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
                monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
                        'Lug','Ago','Set','Ott','Nov','Dic'],
-               dayNames: ['Domenica','Luned&#236','Marted&#236','Mercoled&#236','Gioved&#236','Venerd&#236','Sabato'],
+               dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'],
                dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
                dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
                weekHeader: 'Sm',
index 7eb4268..4d0b63c 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['ja'] = {
                closeText: '閉じる',
-               prevText: '&#x3c;前',
-               nextText: '次&#x3e;',
+               prevText: '&#x3C;前',
+               nextText: '次&#x3E;',
                currentText: '今日',
                monthNames: ['1月','2月','3月','4月','5月','6月',
                '7月','8月','9月','10月','11月','12月'],
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: true,
                yearSuffix: '年'};
        $.datepicker.setDefaults($.datepicker.regional['ja']);
-});
\ No newline at end of file
+});
index 79e3f24..dcd6a65 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['kk'] = {
                closeText: 'Жабу',
-               prevText: '&#x3c;Алдыңғы',
-               nextText: 'Келесі&#x3e;',
+               prevText: '&#x3C;Алдыңғы',
+               nextText: 'Келесі&#x3E;',
                currentText: 'Бүгін',
                monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым',
                'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'],
index 0411242..af36f3d 100644 (file)
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: true,
                yearSuffix: '년'};
        $.datepicker.setDefaults($.datepicker.regional['ko']);
-});
\ No newline at end of file
+});
index 67d5119..1afaaac 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['lt'] = {
                closeText: 'Uždaryti',
-               prevText: '&#x3c;Atgal',
-               nextText: 'Pirmyn&#x3e;',
+               prevText: '&#x3C;Atgal',
+               nextText: 'Pirmyn&#x3E;',
                currentText: 'Šiandien',
                monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
                'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['lt']);
-});
\ No newline at end of file
+});
index 003934e..28cc102 100644 (file)
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['lv']);
-});
\ No newline at end of file
+});
index 1e3432c..9b8f460 100644 (file)
@@ -3,7 +3,7 @@
 jQuery(function($){
        $.datepicker.regional['ml'] = {
                closeText: 'ശരി',
-               prevText: 'മുന്നത്തെ',  
+               prevText: 'മുന്നത്തെ',
                nextText: 'അടുത്തത് ',
                currentText: 'ഇന്ന്',
                monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍',
index e953ac0..e70de72 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['ms'] = {
                closeText: 'Tutup',
-               prevText: '&#x3c;Sebelum',
-               nextText: 'Selepas&#x3e;',
+               prevText: '&#x3C;Sebelum',
+               nextText: 'Selepas&#x3E;',
                currentText: 'hari ini',
                monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
                'Julai','Ogos','September','Oktober','November','Disember'],
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['ms']);
-});
\ No newline at end of file
+});
diff --git a/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-nl-BE.js b/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-nl-BE.js
new file mode 100644 (file)
index 0000000..7b3cdf4
--- /dev/null
@@ -0,0 +1,23 @@
+/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */
+/* David De Sloovere @DavidDeSloovere */
+jQuery(function($){
+       $.datepicker.regional['nl-BE'] = {
+               closeText: 'Sluiten',
+               prevText: '←',
+               nextText: '→',
+               currentText: 'Vandaag',
+               monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+               'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+               monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+               'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+               dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+               dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+               dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+               weekHeader: 'Wk',
+               dateFormat: 'dd/mm/yy',
+               firstDay: 1,
+               isRTL: false,
+               showMonthAfterYear: false,
+               yearSuffix: ''};
+       $.datepicker.setDefaults($.datepicker.regional['nl-BE']);
+});
index 781fe61..203f160 100644 (file)
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional.nl);
-});
\ No newline at end of file
+});
index 2507043..d36e430 100644 (file)
@@ -2,22 +2,22 @@
 /* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
 
 jQuery(function($){
-  $.datepicker.regional['no'] = {
-    closeText: 'Lukk',
-    prevText: '&laquo;Forrige',
-    nextText: 'Neste&raquo;',
-    currentText: 'I dag',
-    monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
-    monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
-    dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
-    dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
-    dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
-    weekHeader: 'Uke',
-    dateFormat: 'dd.mm.yy',
-    firstDay: 1,
-    isRTL: false,
-    showMonthAfterYear: false,
-    yearSuffix: ''
-  };
-  $.datepicker.setDefaults($.datepicker.regional['no']);
+       $.datepicker.regional['no'] = {
+               closeText: 'Lukk',
+               prevText: '&#xAB;Forrige',
+               nextText: 'Neste&#xBB;',
+               currentText: 'I dag',
+               monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+               monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+               dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
+               dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
+               dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
+               weekHeader: 'Uke',
+               dateFormat: 'dd.mm.yy',
+               firstDay: 1,
+               isRTL: false,
+               showMonthAfterYear: false,
+               yearSuffix: ''
+       };
+       $.datepicker.setDefaults($.datepicker.regional['no']);
 });
index 61fa29c..0ffc515 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['pl'] = {
                closeText: 'Zamknij',
-               prevText: '&#x3c;Poprzedni',
-               nextText: 'Następny&#x3e;',
+               prevText: '&#x3C;Poprzedni',
+               nextText: 'Następny&#x3E;',
                currentText: 'Dziś',
                monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
                'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
index 3cc8c79..521967e 100644 (file)
@@ -3,16 +3,16 @@
 jQuery(function($){
        $.datepicker.regional['pt-BR'] = {
                closeText: 'Fechar',
-               prevText: '&#x3c;Anterior',
-               nextText: 'Pr&oacute;ximo&#x3e;',
+               prevText: '&#x3C;Anterior',
+               nextText: 'Próximo&#x3E;',
                currentText: 'Hoje',
-               monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
+               monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
                'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
                monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
                'Jul','Ago','Set','Out','Nov','Dez'],
-               dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
-               dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
-               dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+               dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
+               dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+               dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
                weekHeader: 'Sm',
                dateFormat: 'dd/mm/yy',
                firstDay: 0,
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['pt-BR']);
-});
\ No newline at end of file
+});
index f09f5ae..999f20e 100644 (file)
@@ -2,16 +2,16 @@
 jQuery(function($){
        $.datepicker.regional['pt'] = {
                closeText: 'Fechar',
-               prevText: '&#x3c;Anterior',
+               prevText: '&#x3C;Anterior',
                nextText: 'Seguinte',
                currentText: 'Hoje',
-               monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
+               monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
                'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
                monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
                'Jul','Ago','Set','Out','Nov','Dez'],
-               dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
-               dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
-               dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+               dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
+               dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+               dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
                weekHeader: 'Sem',
                dateFormat: 'dd/mm/yy',
                firstDay: 0,
@@ -19,4 +19,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['pt']);
-});
\ No newline at end of file
+});
index cf03cd4..22ed216 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['rm'] = {
                closeText: 'Serrar',
-               prevText: '&#x3c;Suandant',
-               nextText: 'Precedent&#x3e;',
+               prevText: '&#x3C;Suandant',
+               nextText: 'Precedent&#x3E;',
                currentText: 'Actual',
                monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'],
                monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'],
index 6b140af..a988270 100644 (file)
@@ -6,8 +6,8 @@
 jQuery(function($){
        $.datepicker.regional['ro'] = {
                closeText: 'Închide',
-               prevText: '&laquo; Luna precedentă',
-               nextText: 'Luna următoare &raquo;',
+               prevText: '&#xAB; Luna precedentă',
+               nextText: 'Luna următoare &#xBB;',
                currentText: 'Azi',
                monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
                'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
index 50a4613..a519714 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['ru'] = {
                closeText: 'Закрыть',
-               prevText: '&#x3c;Пред',
-               nextText: 'След&#x3e;',
+               prevText: '&#x3C;Пред',
+               nextText: 'След&#x3E;',
                currentText: 'Сегодня',
                monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
                'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['ru']);
-});
\ No newline at end of file
+});
index 078d1b0..83ae8e8 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['sk'] = {
                closeText: 'Zavrieť',
-               prevText: '&#x3c;Predchádzajúci',
-               nextText: 'Nasledujúci&#x3e;',
+               prevText: '&#x3C;Predchádzajúci',
+               nextText: 'Nasledujúci&#x3E;',
                currentText: 'Dnes',
                monthNames: ['Január','Február','Marec','Apríl','Máj','Jún',
                'Júl','August','September','Október','November','December'],
index 5165501..048a47a 100644 (file)
@@ -1,19 +1,19 @@
 /* Slovenian initialisation for the jQuery UI date picker plugin. */
 /* Written by Jaka Jancar (jaka@kubje.org). */
-/* c = &#x10D;, s = &#x161; z = &#x17E; C = &#x10C; S = &#x160; Z = &#x17D; */
+/* c = č, s = š z = ž C = Č S = Š Z = Ž */
 jQuery(function($){
        $.datepicker.regional['sl'] = {
                closeText: 'Zapri',
-               prevText: '&lt;Prej&#x161;nji',
-               nextText: 'Naslednji&gt;',
+               prevText: '&#x3C;Prejšnji',
+               nextText: 'Naslednji&#x3E;',
                currentText: 'Trenutni',
                monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
                'Julij','Avgust','September','Oktober','November','December'],
                monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
                'Jul','Avg','Sep','Okt','Nov','Dec'],
-               dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','&#x10C;etrtek','Petek','Sobota'],
-               dayNamesShort: ['Ned','Pon','Tor','Sre','&#x10C;et','Pet','Sob'],
-               dayNamesMin: ['Ne','Po','To','Sr','&#x10C;e','Pe','So'],
+               dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'],
+               dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'],
+               dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'],
                weekHeader: 'Teden',
                dateFormat: 'dd.mm.yy',
                firstDay: 1,
index 21974c5..d6086a7 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['sq'] = {
                closeText: 'mbylle',
-               prevText: '&#x3c;mbrapa',
-               nextText: 'Përpara&#x3e;',
+               prevText: '&#x3C;mbrapa',
+               nextText: 'Përpara&#x3E;',
                currentText: 'sot',
                monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
                'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
index e7a8683..6d5d042 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['sr-SR'] = {
                closeText: 'Zatvori',
-               prevText: '&#x3c;',
-               nextText: '&#x3e;',
+               prevText: '&#x3C;',
+               nextText: '&#x3E;',
                currentText: 'Danas',
                monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
                'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
index 0bd240e..d4e1d9a 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['sr'] = {
                closeText: 'Затвори',
-               prevText: '&#x3c;',
-               nextText: '&#x3e;',
+               prevText: '&#x3C;',
+               nextText: '&#x3E;',
                currentText: 'Данас',
                monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун',
                'Јул','Август','Септембар','Октобар','Новембар','Децембар'],
index e5f549f..cbb5ad1 100644 (file)
@@ -1,23 +1,23 @@
 /* Swedish initialisation for the jQuery UI date picker plugin. */
 /* Written by Anders Ekdahl ( anders@nomadiz.se). */
 jQuery(function($){
-    $.datepicker.regional['sv'] = {
+       $.datepicker.regional['sv'] = {
                closeText: 'Stäng',
-        prevText: '&laquo;Förra',
-               nextText: 'Nästa&raquo;',
+               prevText: '&#xAB;Förra',
+               nextText: 'Nästa&#xBB;',
                currentText: 'Idag',
-        monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
-        'Juli','Augusti','September','Oktober','November','December'],
-        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
-        'Jul','Aug','Sep','Okt','Nov','Dec'],
+               monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
+               'Juli','Augusti','September','Oktober','November','December'],
+               monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+               'Jul','Aug','Sep','Okt','Nov','Dec'],
                dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
                dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
                dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
                weekHeader: 'Ve',
-        dateFormat: 'yy-mm-dd',
+               dateFormat: 'yy-mm-dd',
                firstDay: 1,
                isRTL: false,
                showMonthAfterYear: false,
                yearSuffix: ''};
-    $.datepicker.setDefaults($.datepicker.regional['sv']);
+       $.datepicker.setDefaults($.datepicker.regional['sv']);
 });
index 2e5300c..aecfd27 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['th'] = {
                closeText: 'ปิด',
-               prevText: '&laquo;&nbsp;ย้อน',
-               nextText: 'ถัดไป&nbsp;&raquo;',
+               prevText: '&#xAB;&#xA0;ย้อน',
+               nextText: 'ถัดไป&#xA0;&#xBB;',
                currentText: 'วันนี้',
                monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
                'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['th']);
-});
\ No newline at end of file
+});
diff --git a/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-tj.js b/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-tj.js
new file mode 100644 (file)
index 0000000..9a20e4d
--- /dev/null
@@ -0,0 +1,23 @@
+/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Abdurahmon Saidov (saidovab@gmail.com). */
+jQuery(function($){
+       $.datepicker.regional['tj'] = {
+               closeText: 'Идома',
+               prevText: '&#x3c;Қафо',
+               nextText: 'Пеш&#x3e;',
+               currentText: 'Имрӯз',
+               monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн',
+               'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'],
+               monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
+               'Июл','Авг','Сен','Окт','Ноя','Дек'],
+               dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'],
+               dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'],
+               dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'],
+               weekHeader: 'Хф',
+               dateFormat: 'dd.mm.yy',
+               firstDay: 1,
+               isRTL: false,
+               showMonthAfterYear: false,
+               yearSuffix: ''};
+       $.datepicker.setDefaults($.datepicker.regional['tj']);
+});
index dedfc7f..75b583a 100644 (file)
@@ -3,7 +3,7 @@
 jQuery(function($){
        $.datepicker.regional['tr'] = {
                closeText: 'kapat',
-               prevText: '&#x3c;geri',
+               prevText: '&#x3C;geri',
                nextText: 'ileri&#x3e',
                currentText: 'bugün',
                monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
@@ -20,4 +20,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['tr']);
-});
\ No newline at end of file
+});
index 2718f5d..2bdc82f 100644 (file)
@@ -4,8 +4,8 @@
 jQuery(function($){
        $.datepicker.regional['uk'] = {
                closeText: 'Закрити',
-               prevText: '&#x3c;',
-               nextText: '&#x3e;',
+               prevText: '&#x3C;',
+               nextText: '&#x3E;',
                currentText: 'Сьогодні',
                monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
                'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'],
@@ -21,4 +21,4 @@ jQuery(function($){
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['uk']);
-});
\ No newline at end of file
+});
index 1d8f7bb..b49e7eb 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['vi'] = {
                closeText: 'Đóng',
-               prevText: '&#x3c;Trước',
-               nextText: 'Tiếp&#x3e;',
+               prevText: '&#x3C;Trước',
+               nextText: 'Tiếp&#x3E;',
                currentText: 'Hôm nay',
                monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
                'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'],
index 83f2825..d337e4a 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['zh-CN'] = {
                closeText: '关闭',
-               prevText: '&#x3c;上月',
-               nextText: '下月&#x3e;',
+               prevText: '&#x3C;上月',
+               nextText: '下月&#x3E;',
                currentText: '今天',
                monthNames: ['一月','二月','三月','四月','五月','六月',
                '七月','八月','九月','十月','十一月','十二月'],
index 11189d3..ef6f4e7 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['zh-HK'] = {
                closeText: '關閉',
-               prevText: '&#x3c;上月',
-               nextText: '下月&#x3e;',
+               prevText: '&#x3C;上月',
+               nextText: '下月&#x3E;',
                currentText: '今天',
                monthNames: ['一月','二月','三月','四月','五月','六月',
                '七月','八月','九月','十月','十一月','十二月'],
index 089498b..b9105ea 100644 (file)
@@ -3,8 +3,8 @@
 jQuery(function($){
        $.datepicker.regional['zh-TW'] = {
                closeText: '關閉',
-               prevText: '&#x3c;上月',
-               nextText: '下月&#x3e;',
+               prevText: '&#x3C;上月',
+               nextText: '下月&#x3E;',
                currentText: '今天',
                monthNames: ['一月','二月','三月','四月','五月','六月',
                '七月','八月','九月','十月','十一月','十二月'],
index dc1ba60..55bbecb 100644 (file)
@@ -1,11 +1,12 @@
 /*!
- * jQuery UI Accordion 1.8.24
+ * jQuery UI Accordion 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Accordion
+ * http://api.jqueryui.com/accordion/
  *
  * Depends:
  *     jquery.ui.core.js
  */
 (function( $, undefined ) {
 
+var uid = 0,
+       hideProps = {},
+       showProps = {};
+
+hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
+       hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
+showProps.height = showProps.paddingTop = showProps.paddingBottom =
+       showProps.borderTopWidth = showProps.borderBottomWidth = "show";
+
 $.widget( "ui.accordion", {
+       version: "1.9.2",
        options: {
                active: 0,
-               animated: "slide",
-               autoHeight: true,
-               clearStyle: false,
+               animate: {},
                collapsible: false,
                event: "click",
-               fillSpace: false,
                header: "> li > :first-child,> :not(li):even",
+               heightStyle: "auto",
                icons: {
-                       header: "ui-icon-triangle-1-e",
-                       headerSelected: "ui-icon-triangle-1-s"
+                       activeHeader: "ui-icon-triangle-1-s",
+                       header: "ui-icon-triangle-1-e"
                },
-               navigation: false,
-               navigationFilter: function() {
-                       return this.href.toLowerCase() === location.href.toLowerCase();
-               }
+
+               // callbacks
+               activate: null,
+               beforeActivate: null
        },
 
        _create: function() {
-               var self = this,
-                       options = self.options;
-
-               self.running = 0;
-
-               self.element
-                       .addClass( "ui-accordion ui-widget ui-helper-reset" )
-                       // in lack of child-selectors in CSS
-                       // we need to mark top-LIs in a UL-accordion for some IE-fix
-                       .children( "li" )
-                               .addClass( "ui-accordion-li-fix" );
-
-               self.headers = self.element.find( options.header )
-                       .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" )
-                       .bind( "mouseenter.accordion", function() {
-                               if ( options.disabled ) {
-                                       return;
-                               }
-                               $( this ).addClass( "ui-state-hover" );
-                       })
-                       .bind( "mouseleave.accordion", function() {
-                               if ( options.disabled ) {
-                                       return;
-                               }
-                               $( this ).removeClass( "ui-state-hover" );
-                       })
-                       .bind( "focus.accordion", function() {
-                               if ( options.disabled ) {
-                                       return;
-                               }
-                               $( this ).addClass( "ui-state-focus" );
-                       })
-                       .bind( "blur.accordion", function() {
-                               if ( options.disabled ) {
-                                       return;
-                               }
-                               $( this ).removeClass( "ui-state-focus" );
-                       });
+               var accordionId = this.accordionId = "ui-accordion-" +
+                               (this.element.attr( "id" ) || ++uid),
+                       options = this.options;
 
-               self.headers.next()
-                       .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" );
+               this.prevShow = this.prevHide = $();
+               this.element.addClass( "ui-accordion ui-widget ui-helper-reset" );
 
-               if ( options.navigation ) {
-                       var current = self.element.find( "a" ).filter( options.navigationFilter ).eq( 0 );
-                       if ( current.length ) {
-                               var header = current.closest( ".ui-accordion-header" );
-                               if ( header.length ) {
-                                       // anchor within header
-                                       self.active = header;
-                               } else {
-                                       // anchor within content
-                                       self.active = current.closest( ".ui-accordion-content" ).prev();
-                               }
-                       }
+               this.headers = this.element.find( options.header )
+                       .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
+               this._hoverable( this.headers );
+               this._focusable( this.headers );
+
+               this.headers.next()
+                       .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+                       .hide();
+
+               // don't allow collapsible: false and active: false / null
+               if ( !options.collapsible && (options.active === false || options.active == null) ) {
+                       options.active = 0;
+               }
+               // handle negative values
+               if ( options.active < 0 ) {
+                       options.active += this.headers.length;
                }
+               this.active = this._findActive( options.active )
+                       .addClass( "ui-accordion-header-active ui-state-active" )
+                       .toggleClass( "ui-corner-all ui-corner-top" );
+               this.active.next()
+                       .addClass( "ui-accordion-content-active" )
+                       .show();
 
-               self.active = self._findActive( self.active || options.active )
-                       .addClass( "ui-state-default ui-state-active" )
-                       .toggleClass( "ui-corner-all" )
-                       .toggleClass( "ui-corner-top" );
-               self.active.next().addClass( "ui-accordion-content-active" );
+               this._createIcons();
+               this.refresh();
 
-               self._createIcons();
-               self.resize();
-               
                // ARIA
-               self.element.attr( "role", "tablist" );
+               this.element.attr( "role", "tablist" );
 
-               self.headers
+               this.headers
                        .attr( "role", "tab" )
-                       .bind( "keydown.accordion", function( event ) {
-                               return self._keydown( event );
+                       .each(function( i ) {
+                               var header = $( this ),
+                                       headerId = header.attr( "id" ),
+                                       panel = header.next(),
+                                       panelId = panel.attr( "id" );
+                               if ( !headerId ) {
+                                       headerId = accordionId + "-header-" + i;
+                                       header.attr( "id", headerId );
+                               }
+                               if ( !panelId ) {
+                                       panelId = accordionId + "-panel-" + i;
+                                       panel.attr( "id", panelId );
+                               }
+                               header.attr( "aria-controls", panelId );
+                               panel.attr( "aria-labelledby", headerId );
                        })
                        .next()
                                .attr( "role", "tabpanel" );
 
-               self.headers
-                       .not( self.active || "" )
+               this.headers
+                       .not( this.active )
                        .attr({
-                               "aria-expanded": "false",
                                "aria-selected": "false",
                                tabIndex: -1
                        })
                        .next()
+                               .attr({
+                                       "aria-expanded": "false",
+                                       "aria-hidden": "true"
+                               })
                                .hide();
 
                // make sure at least one header is in the tab order
-               if ( !self.active.length ) {
-                       self.headers.eq( 0 ).attr( "tabIndex", 0 );
+               if ( !this.active.length ) {
+                       this.headers.eq( 0 ).attr( "tabIndex", 0 );
                } else {
-                       self.active
+                       this.active.attr({
+                               "aria-selected": "true",
+                               tabIndex: 0
+                       })
+                       .next()
                                .attr({
                                        "aria-expanded": "true",
-                                       "aria-selected": "true",
-                                       tabIndex: 0
+                                       "aria-hidden": "false"
                                });
                }
 
-               // only need links in tab order for Safari
-               if ( !$.browser.safari ) {
-                       self.headers.find( "a" ).attr( "tabIndex", -1 );
-               }
+               this._on( this.headers, { keydown: "_keydown" });
+               this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+               this._setupEvents( options.event );
+       },
 
-               if ( options.event ) {
-                       self.headers.bind( options.event.split(" ").join(".accordion ") + ".accordion", function(event) {
-                               self._clickHandler.call( self, event, this );
-                               event.preventDefault();
-                       });
-               }
+       _getCreateEventData: function() {
+               return {
+                       header: this.active,
+                       content: !this.active.length ? $() : this.active.next()
+               };
        },
 
        _createIcons: function() {
-               var options = this.options;
-               if ( options.icons ) {
-                       $( "<span></span>" )
-                               .addClass( "ui-icon " + options.icons.header )
+               var icons = this.options.icons;
+               if ( icons ) {
+                       $( "<span>" )
+                               .addClass( "ui-accordion-header-icon ui-icon " + icons.header )
                                .prependTo( this.headers );
-                       this.active.children( ".ui-icon" )
-                               .toggleClass(options.icons.header)
-                               .toggleClass(options.icons.headerSelected);
-                       this.element.addClass( "ui-accordion-icons" );
+                       this.active.children( ".ui-accordion-header-icon" )
+                               .removeClass( icons.header )
+                               .addClass( icons.activeHeader );
+                       this.headers.addClass( "ui-accordion-icons" );
                }
        },
 
        _destroyIcons: function() {
-               this.headers.children( ".ui-icon" ).remove();
-               this.element.removeClass( "ui-accordion-icons" );
+               this.headers
+                       .removeClass( "ui-accordion-icons" )
+                       .children( ".ui-accordion-header-icon" )
+                               .remove();
        },
 
-       destroy: function() {
-               var options = this.options;
+       _destroy: function() {
+               var contents;
 
+               // clean up main element
                this.element
                        .removeClass( "ui-accordion ui-widget ui-helper-reset" )
                        .removeAttr( "role" );
 
+               // clean up headers
                this.headers
-                       .unbind( ".accordion" )
-                       .removeClass( "ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+                       .removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
                        .removeAttr( "role" )
-                       .removeAttr( "aria-expanded" )
                        .removeAttr( "aria-selected" )
-                       .removeAttr( "tabIndex" );
-
-               this.headers.find( "a" ).removeAttr( "tabIndex" );
+                       .removeAttr( "aria-controls" )
+                       .removeAttr( "tabIndex" )
+                       .each(function() {
+                               if ( /^ui-accordion/.test( this.id ) ) {
+                                       this.removeAttribute( "id" );
+                               }
+                       });
                this._destroyIcons();
-               var contents = this.headers.next()
+
+               // clean up content panels
+               contents = this.headers.next()
                        .css( "display", "" )
                        .removeAttr( "role" )
-                       .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled" );
-               if ( options.autoHeight || options.fillHeight ) {
+                       .removeAttr( "aria-expanded" )
+                       .removeAttr( "aria-hidden" )
+                       .removeAttr( "aria-labelledby" )
+                       .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+                       .each(function() {
+                               if ( /^ui-accordion/.test( this.id ) ) {
+                                       this.removeAttribute( "id" );
+                               }
+                       });
+               if ( this.options.heightStyle !== "content" ) {
                        contents.css( "height", "" );
                }
-
-               return $.Widget.prototype.destroy.call( this );
        },
 
        _setOption: function( key, value ) {
-               $.Widget.prototype._setOption.apply( this, arguments );
-                       
-               if ( key == "active" ) {
-                       this.activate( value );
+               if ( key === "active" ) {
+                       // _activate() will handle invalid values and update this.options
+                       this._activate( value );
+                       return;
+               }
+
+               if ( key === "event" ) {
+                       if ( this.options.event ) {
+                               this._off( this.headers, this.options.event );
+                       }
+                       this._setupEvents( value );
+               }
+
+               this._super( key, value );
+
+               // setting collapsible: false while collapsed; open first panel
+               if ( key === "collapsible" && !value && this.options.active === false ) {
+                       this._activate( 0 );
                }
-               if ( key == "icons" ) {
+
+               if ( key === "icons" ) {
                        this._destroyIcons();
                        if ( value ) {
                                this._createIcons();
                        }
                }
+
                // #5332 - opacity doesn't cascade to positioned elements in IE
                // so we need to add the disabled class to the headers and panels
-               if ( key == "disabled" ) {
-                       this.headers.add(this.headers.next())
-                               [ value ? "addClass" : "removeClass" ](
-                                       "ui-accordion-disabled ui-state-disabled" );
+               if ( key === "disabled" ) {
+                       this.headers.add( this.headers.next() )
+                               .toggleClass( "ui-state-disabled", !!value );
                }
        },
 
        _keydown: function( event ) {
-               if ( this.options.disabled || event.altKey || event.ctrlKey ) {
+               if ( event.altKey || event.ctrlKey ) {
                        return;
                }
 
@@ -233,32 +258,57 @@ $.widget( "ui.accordion", {
                                break;
                        case keyCode.SPACE:
                        case keyCode.ENTER:
-                               this._clickHandler( { target: event.target }, event.target );
-                               event.preventDefault();
+                               this._eventHandler( event );
+                               break;
+                       case keyCode.HOME:
+                               toFocus = this.headers[ 0 ];
+                               break;
+                       case keyCode.END:
+                               toFocus = this.headers[ length - 1 ];
+                               break;
                }
 
                if ( toFocus ) {
                        $( event.target ).attr( "tabIndex", -1 );
                        $( toFocus ).attr( "tabIndex", 0 );
                        toFocus.focus();
-                       return false;
+                       event.preventDefault();
                }
+       },
 
-               return true;
+       _panelKeyDown : function( event ) {
+               if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+                       $( event.currentTarget ).prev().focus();
+               }
        },
 
-       resize: function() {
-               var options = this.options,
-                       maxHeight;
+       refresh: function() {
+               var maxHeight, overflow,
+                       heightStyle = this.options.heightStyle,
+                       parent = this.element.parent();
+
 
-               if ( options.fillSpace ) {
-                       if ( $.browser.msie ) {
-                               var defOverflow = this.element.parent().css( "overflow" );
-                               this.element.parent().css( "overflow", "hidden");
+               if ( heightStyle === "fill" ) {
+                       // IE 6 treats height like minHeight, so we need to turn off overflow
+                       // in order to get a reliable height
+                       // we use the minHeight support test because we assume that only
+                       // browsers that don't support minHeight will treat height as minHeight
+                       if ( !$.support.minHeight ) {
+                               overflow = parent.css( "overflow" );
+                               parent.css( "overflow", "hidden");
                        }
-                       maxHeight = this.element.parent().height();
-                       if ($.browser.msie) {
-                               this.element.parent().css( "overflow", defOverflow );
+                       maxHeight = parent.height();
+                       this.element.siblings( ":visible" ).each(function() {
+                               var elem = $( this ),
+                                       position = elem.css( "position" );
+
+                               if ( position === "absolute" || position === "fixed" ) {
+                                       return;
+                               }
+                               maxHeight -= elem.outerHeight( true );
+                       });
+                       if ( overflow ) {
+                               parent.css( "overflow", overflow );
                        }
 
                        this.headers.each(function() {
@@ -271,341 +321,411 @@ $.widget( "ui.accordion", {
                                                $( this ).innerHeight() + $( this ).height() ) );
                                })
                                .css( "overflow", "auto" );
-               } else if ( options.autoHeight ) {
+               } else if ( heightStyle === "auto" ) {
                        maxHeight = 0;
                        this.headers.next()
                                .each(function() {
-                                       maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+                                       maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
                                })
                                .height( maxHeight );
                }
-
-               return this;
        },
 
-       activate: function( index ) {
-               // TODO this gets called on init, changing the option without an explicit call for that
-               this.options.active = index;
-               // call clickHandler with custom event
+       _activate: function( index ) {
                var active = this._findActive( index )[ 0 ];
-               this._clickHandler( { target: active }, active );
 
-               return this;
+               // trying to activate the already active panel
+               if ( active === this.active[ 0 ] ) {
+                       return;
+               }
+
+               // trying to collapse, simulate a click on the currently active header
+               active = active || this.active[ 0 ];
+
+               this._eventHandler({
+                       target: active,
+                       currentTarget: active,
+                       preventDefault: $.noop
+               });
        },
 
        _findActive: function( selector ) {
-               return selector
-                       ? typeof selector === "number"
-                               ? this.headers.filter( ":eq(" + selector + ")" )
-                               : this.headers.not( this.headers.not( selector ) )
-                       : selector === false
-                               ? $( [] )
-                               : this.headers.filter( ":eq(0)" );
+               return typeof selector === "number" ? this.headers.eq( selector ) : $();
        },
 
-       // TODO isn't event.target enough? why the separate target argument?
-       _clickHandler: function( event, target ) {
-               var options = this.options;
-               if ( options.disabled ) {
-                       return;
-               }
-
-               // called only when using activate(false) to close all parts programmatically
-               if ( !event.target ) {
-                       if ( !options.collapsible ) {
-                               return;
-                       }
-                       this.active
-                               .removeClass( "ui-state-active ui-corner-top" )
-                               .addClass( "ui-state-default ui-corner-all" )
-                               .children( ".ui-icon" )
-                                       .removeClass( options.icons.headerSelected )
-                                       .addClass( options.icons.header );
-                       this.active.next().addClass( "ui-accordion-content-active" );
-                       var toHide = this.active.next(),
-                               data = {
-                                       options: options,
-                                       newHeader: $( [] ),
-                                       oldHeader: options.active,
-                                       newContent: $( [] ),
-                                       oldContent: toHide
-                               },
-                               toShow = ( this.active = $( [] ) );
-                       this._toggle( toShow, toHide, data );
+       _setupEvents: function( event ) {
+               var events = {};
+               if ( !event ) {
                        return;
                }
+               $.each( event.split(" "), function( index, eventName ) {
+                       events[ eventName ] = "_eventHandler";
+               });
+               this._on( this.headers, events );
+       },
 
-               // get the click target
-               var clicked = $( event.currentTarget || target ),
-                       clickedIsActive = clicked[0] === this.active[0];
-
-               // TODO the option is changed, is that correct?
-               // TODO if it is correct, shouldn't that happen after determining that the click is valid?
-               options.active = options.collapsible && clickedIsActive ?
-                       false :
-                       this.headers.index( clicked );
-
-               // if animations are still active, or the active header is the target, ignore click
-               if ( this.running || ( !options.collapsible && clickedIsActive ) ) {
+       _eventHandler: function( event ) {
+               var options = this.options,
+                       active = this.active,
+                       clicked = $( event.currentTarget ),
+                       clickedIsActive = clicked[ 0 ] === active[ 0 ],
+                       collapsing = clickedIsActive && options.collapsible,
+                       toShow = collapsing ? $() : clicked.next(),
+                       toHide = active.next(),
+                       eventData = {
+                               oldHeader: active,
+                               oldPanel: toHide,
+                               newHeader: collapsing ? $() : clicked,
+                               newPanel: toShow
+                       };
+
+               event.preventDefault();
+
+               if (
+                               // click on active header, but not collapsible
+                               ( clickedIsActive && !options.collapsible ) ||
+                               // allow canceling activation
+                               ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
                        return;
                }
 
-               // find elements to show and hide
-               var active = this.active,
-                       toShow = clicked.next(),
-                       toHide = this.active.next(),
-                       data = {
-                               options: options,
-                               newHeader: clickedIsActive && options.collapsible ? $([]) : clicked,
-                               oldHeader: this.active,
-                               newContent: clickedIsActive && options.collapsible ? $([]) : toShow,
-                               oldContent: toHide
-                       },
-                       down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] );
+               options.active = collapsing ? false : this.headers.index( clicked );
 
                // when the call to ._toggle() comes after the class changes
                // it causes a very odd bug in IE 8 (see #6720)
-               this.active = clickedIsActive ? $([]) : clicked;
-               this._toggle( toShow, toHide, data, clickedIsActive, down );
+               this.active = clickedIsActive ? $() : clicked;
+               this._toggle( eventData );
 
                // switch classes
-               active
-                       .removeClass( "ui-state-active ui-corner-top" )
-                       .addClass( "ui-state-default ui-corner-all" )
-                       .children( ".ui-icon" )
-                               .removeClass( options.icons.headerSelected )
+               // corner classes on the previously active header stay after the animation
+               active.removeClass( "ui-accordion-header-active ui-state-active" );
+               if ( options.icons ) {
+                       active.children( ".ui-accordion-header-icon" )
+                               .removeClass( options.icons.activeHeader )
                                .addClass( options.icons.header );
+               }
+
                if ( !clickedIsActive ) {
                        clicked
-                               .removeClass( "ui-state-default ui-corner-all" )
-                               .addClass( "ui-state-active ui-corner-top" )
-                               .children( ".ui-icon" )
+                               .removeClass( "ui-corner-all" )
+                               .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+                       if ( options.icons ) {
+                               clicked.children( ".ui-accordion-header-icon" )
                                        .removeClass( options.icons.header )
-                                       .addClass( options.icons.headerSelected );
+                                       .addClass( options.icons.activeHeader );
+                       }
+
                        clicked
                                .next()
                                .addClass( "ui-accordion-content-active" );
                }
+       },
+
+       _toggle: function( data ) {
+               var toShow = data.newPanel,
+                       toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
 
-               return;
+               // handle activating a panel during the animation for another activation
+               this.prevShow.add( this.prevHide ).stop( true, true );
+               this.prevShow = toShow;
+               this.prevHide = toHide;
+
+               if ( this.options.animate ) {
+                       this._animate( toShow, toHide, data );
+               } else {
+                       toHide.hide();
+                       toShow.show();
+                       this._toggleComplete( data );
+               }
+
+               toHide.attr({
+                       "aria-expanded": "false",
+                       "aria-hidden": "true"
+               });
+               toHide.prev().attr( "aria-selected", "false" );
+               // if we're switching panels, remove the old header from the tab order
+               // if we're opening from collapsed state, remove the previous header from the tab order
+               // if we're collapsing, then keep the collapsing header in the tab order
+               if ( toShow.length && toHide.length ) {
+                       toHide.prev().attr( "tabIndex", -1 );
+               } else if ( toShow.length ) {
+                       this.headers.filter(function() {
+                               return $( this ).attr( "tabIndex" ) === 0;
+                       })
+                       .attr( "tabIndex", -1 );
+               }
+
+               toShow
+                       .attr({
+                               "aria-expanded": "true",
+                               "aria-hidden": "false"
+                       })
+                       .prev()
+                               .attr({
+                                       "aria-selected": "true",
+                                       tabIndex: 0
+                               });
        },
 
-       _toggle: function( toShow, toHide, data, clickedIsActive, down ) {
-               var self = this,
-                       options = self.options;
+       _animate: function( toShow, toHide, data ) {
+               var total, easing, duration,
+                       that = this,
+                       adjust = 0,
+                       down = toShow.length &&
+                               ( !toHide.length || ( toShow.index() < toHide.index() ) ),
+                       animate = this.options.animate || {},
+                       options = down && animate.down || animate,
+                       complete = function() {
+                               that._toggleComplete( data );
+                       };
+
+               if ( typeof options === "number" ) {
+                       duration = options;
+               }
+               if ( typeof options === "string" ) {
+                       easing = options;
+               }
+               // fall back from options to animation in case of partial down settings
+               easing = easing || options.easing || animate.easing;
+               duration = duration || options.duration || animate.duration;
 
-               self.toShow = toShow;
-               self.toHide = toHide;
-               self.data = data;
+               if ( !toHide.length ) {
+                       return toShow.animate( showProps, duration, easing, complete );
+               }
+               if ( !toShow.length ) {
+                       return toHide.animate( hideProps, duration, easing, complete );
+               }
 
-               var complete = function() {
-                       if ( !self ) {
-                               return;
+               total = toShow.show().outerHeight();
+               toHide.animate( hideProps, {
+                       duration: duration,
+                       easing: easing,
+                       step: function( now, fx ) {
+                               fx.now = Math.round( now );
                        }
-                       return self._completed.apply( self, arguments );
-               };
+               });
+               toShow
+                       .hide()
+                       .animate( showProps, {
+                               duration: duration,
+                               easing: easing,
+                               complete: complete,
+                               step: function( now, fx ) {
+                                       fx.now = Math.round( now );
+                                       if ( fx.prop !== "height" ) {
+                                               adjust += fx.now;
+                                       } else if ( that.options.heightStyle !== "content" ) {
+                                               fx.now = Math.round( total - toHide.outerHeight() - adjust );
+                                               adjust = 0;
+                                       }
+                               }
+                       });
+       },
 
-               // trigger changestart event
-               self._trigger( "changestart", null, self.data );
-
-               // count elements to animate
-               self.running = toHide.size() === 0 ? toShow.size() : toHide.size();
-
-               if ( options.animated ) {
-                       var animOptions = {};
-
-                       if ( options.collapsible && clickedIsActive ) {
-                               animOptions = {
-                                       toShow: $( [] ),
-                                       toHide: toHide,
-                                       complete: complete,
-                                       down: down,
-                                       autoHeight: options.autoHeight || options.fillSpace
-                               };
-                       } else {
-                               animOptions = {
-                                       toShow: toShow,
-                                       toHide: toHide,
-                                       complete: complete,
-                                       down: down,
-                                       autoHeight: options.autoHeight || options.fillSpace
-                               };
-                       }
+       _toggleComplete: function( data ) {
+               var toHide = data.oldPanel;
 
-                       if ( !options.proxied ) {
-                               options.proxied = options.animated;
-                       }
+               toHide
+                       .removeClass( "ui-accordion-content-active" )
+                       .prev()
+                               .removeClass( "ui-corner-top" )
+                               .addClass( "ui-corner-all" );
 
-                       if ( !options.proxiedDuration ) {
-                               options.proxiedDuration = options.duration;
-                       }
+               // Work around for rendering bug in IE (#5421)
+               if ( toHide.length ) {
+                       toHide.parent()[0].className = toHide.parent()[0].className;
+               }
 
-                       options.animated = $.isFunction( options.proxied ) ?
-                               options.proxied( animOptions ) :
-                               options.proxied;
+               this._trigger( "activate", null, data );
+       }
+});
 
-                       options.duration = $.isFunction( options.proxiedDuration ) ?
-                               options.proxiedDuration( animOptions ) :
-                               options.proxiedDuration;
 
-                       var animations = $.ui.accordion.animations,
-                               duration = options.duration,
-                               easing = options.animated;
 
-                       if ( easing && !animations[ easing ] && !$.easing[ easing ] ) {
-                               easing = "slide";
+// DEPRECATED
+if ( $.uiBackCompat !== false ) {
+       // navigation options
+       (function( $, prototype ) {
+               $.extend( prototype.options, {
+                       navigation: false,
+                       navigationFilter: function() {
+                               return this.href.toLowerCase() === location.href.toLowerCase();
                        }
-                       if ( !animations[ easing ] ) {
-                               animations[ easing ] = function( options ) {
-                                       this.slide( options, {
-                                               easing: easing,
-                                               duration: duration || 700
+               });
+
+               var _create = prototype._create;
+               prototype._create = function() {
+                       if ( this.options.navigation ) {
+                               var that = this,
+                                       headers = this.element.find( this.options.header ),
+                                       content = headers.next(),
+                                       current = headers.add( content )
+                                               .find( "a" )
+                                               .filter( this.options.navigationFilter )
+                                               [ 0 ];
+                               if ( current ) {
+                                       headers.add( content ).each( function( index ) {
+                                               if ( $.contains( this, current ) ) {
+                                                       that.options.active = Math.floor( index / 2 );
+                                                       return false;
+                                               }
                                        });
-                               };
+                               }
                        }
+                       _create.call( this );
+               };
+       }( jQuery, jQuery.ui.accordion.prototype ) );
+
+       // height options
+       (function( $, prototype ) {
+               $.extend( prototype.options, {
+                       heightStyle: null, // remove default so we fall back to old values
+                       autoHeight: true, // use heightStyle: "auto"
+                       clearStyle: false, // use heightStyle: "content"
+                       fillSpace: false // use heightStyle: "fill"
+               });
+
+               var _create = prototype._create,
+                       _setOption = prototype._setOption;
+
+               $.extend( prototype, {
+                       _create: function() {
+                               this.options.heightStyle = this.options.heightStyle ||
+                                       this._mergeHeightStyle();
+
+                               _create.call( this );
+                       },
 
-                       animations[ easing ]( animOptions );
-               } else {
-                       if ( options.collapsible && clickedIsActive ) {
-                               toShow.toggle();
-                       } else {
-                               toHide.hide();
-                               toShow.show();
-                       }
+                       _setOption: function( key ) {
+                               if ( key === "autoHeight" || key === "clearStyle" || key === "fillSpace" ) {
+                                       this.options.heightStyle = this._mergeHeightStyle();
+                               }
+                               _setOption.apply( this, arguments );
+                       },
 
-                       complete( true );
-               }
+                       _mergeHeightStyle: function() {
+                               var options = this.options;
 
-               // TODO assert that the blur and focus triggers are really necessary, remove otherwise
-               toHide.prev()
-                       .attr({
-                               "aria-expanded": "false",
-                               "aria-selected": "false",
-                               tabIndex: -1
-                       })
-                       .blur();
-               toShow.prev()
-                       .attr({
-                               "aria-expanded": "true",
-                               "aria-selected": "true",
-                               tabIndex: 0
-                       })
-                       .focus();
-       },
+                               if ( options.fillSpace ) {
+                                       return "fill";
+                               }
 
-       _completed: function( cancel ) {
-               this.running = cancel ? 0 : --this.running;
-               if ( this.running ) {
-                       return;
-               }
+                               if ( options.clearStyle ) {
+                                       return "content";
+                               }
 
-               if ( this.options.clearStyle ) {
-                       this.toShow.add( this.toHide ).css({
-                               height: "",
-                               overflow: ""
-                       });
-               }
+                               if ( options.autoHeight ) {
+                                       return "auto";
+                               }
+                       }
+               });
+       }( jQuery, jQuery.ui.accordion.prototype ) );
 
-               // other classes are removed before the animation; this one needs to stay until completed
-               this.toHide.removeClass( "ui-accordion-content-active" );
-               // Work around for rendering bug in IE (#5421)
-               if ( this.toHide.length ) {
-                       this.toHide.parent()[0].className = this.toHide.parent()[0].className;
-               }
+       // icon options
+       (function( $, prototype ) {
+               $.extend( prototype.options.icons, {
+                       activeHeader: null, // remove default so we fall back to old values
+                       headerSelected: "ui-icon-triangle-1-s"
+               });
 
-               this._trigger( "change", null, this.data );
-       }
-});
+               var _createIcons = prototype._createIcons;
+               prototype._createIcons = function() {
+                       if ( this.options.icons ) {
+                               this.options.icons.activeHeader = this.options.icons.activeHeader ||
+                                       this.options.icons.headerSelected;
+                       }
+                       _createIcons.call( this );
+               };
+       }( jQuery, jQuery.ui.accordion.prototype ) );
 
-$.extend( $.ui.accordion, {
-       version: "1.8.24",
-       animations: {
-               slide: function( options, additions ) {
-                       options = $.extend({
-                               easing: "swing",
-                               duration: 300
-                       }, options, additions );
-                       if ( !options.toHide.size() ) {
-                               options.toShow.animate({
-                                       height: "show",
-                                       paddingTop: "show",
-                                       paddingBottom: "show"
-                               }, options );
-                               return;
+       // expanded active option, activate method
+       (function( $, prototype ) {
+               prototype.activate = prototype._activate;
+
+               var _findActive = prototype._findActive;
+               prototype._findActive = function( index ) {
+                       if ( index === -1 ) {
+                               index = false;
                        }
-                       if ( !options.toShow.size() ) {
-                               options.toHide.animate({
-                                       height: "hide",
-                                       paddingTop: "hide",
-                                       paddingBottom: "hide"
-                               }, options );
-                               return;
+                       if ( index && typeof index !== "number" ) {
+                               index = this.headers.index( this.headers.filter( index ) );
+                               if ( index === -1 ) {
+                                       index = false;
+                               }
+                       }
+                       return _findActive.call( this, index );
+               };
+       }( jQuery, jQuery.ui.accordion.prototype ) );
+
+       // resize method
+       jQuery.ui.accordion.prototype.resize = jQuery.ui.accordion.prototype.refresh;
+
+       // change events
+       (function( $, prototype ) {
+               $.extend( prototype.options, {
+                       change: null,
+                       changestart: null
+               });
+
+               var _trigger = prototype._trigger;
+               prototype._trigger = function( type, event, data ) {
+                       var ret = _trigger.apply( this, arguments );
+                       if ( !ret ) {
+                               return false;
                        }
-                       var overflow = options.toShow.css( "overflow" ),
-                               percentDone = 0,
-                               showProps = {},
-                               hideProps = {},
-                               fxAttrs = [ "height", "paddingTop", "paddingBottom" ],
-                               originalWidth;
-                       // fix width before calculating height of hidden element
-                       var s = options.toShow;
-                       originalWidth = s[0].style.width;
-                       s.width( s.parent().width()
-                               - parseFloat( s.css( "paddingLeft" ) )
-                               - parseFloat( s.css( "paddingRight" ) )
-                               - ( parseFloat( s.css( "borderLeftWidth" ) ) || 0 )
-                               - ( parseFloat( s.css( "borderRightWidth" ) ) || 0 ) );
-
-                       $.each( fxAttrs, function( i, prop ) {
-                               hideProps[ prop ] = "hide";
-
-                               var parts = ( "" + $.css( options.toShow[0], prop ) ).match( /^([\d+-.]+)(.*)$/ );
-                               showProps[ prop ] = {
-                                       value: parts[ 1 ],
-                                       unit: parts[ 2 ] || "px"
-                               };
-                       });
-                       options.toShow.css({ height: 0, overflow: "hidden" }).show();
-                       options.toHide
-                               .filter( ":hidden" )
-                                       .each( options.complete )
-                               .end()
-                               .filter( ":visible" )
-                               .animate( hideProps, {
-                               step: function( now, settings ) {
-                                       // only calculate the percent when animating height
-                                       // IE gets very inconsistent results when animating elements
-                                       // with small values, which is common for padding
-                                       if ( settings.prop == "height" ) {
-                                               percentDone = ( settings.end - settings.start === 0 ) ? 0 :
-                                                       ( settings.now - settings.start ) / ( settings.end - settings.start );
-                                       }
 
-                                       options.toShow[ 0 ].style[ settings.prop ] =
-                                               ( percentDone * showProps[ settings.prop ].value )
-                                               + showProps[ settings.prop ].unit;
-                               },
-                               duration: options.duration,
-                               easing: options.easing,
-                               complete: function() {
-                                       if ( !options.autoHeight ) {
-                                               options.toShow.css( "height", "" );
-                                       }
-                                       options.toShow.css({
-                                               width: originalWidth,
-                                               overflow: overflow
-                                       });
-                                       options.complete();
+                       if ( type === "beforeActivate" ) {
+                               ret = _trigger.call( this, "changestart", event, {
+                                       oldHeader: data.oldHeader,
+                                       oldContent: data.oldPanel,
+                                       newHeader: data.newHeader,
+                                       newContent: data.newPanel
+                               });
+                       } else if ( type === "activate" ) {
+                               ret = _trigger.call( this, "change", event, {
+                                       oldHeader: data.oldHeader,
+                                       oldContent: data.oldPanel,
+                                       newHeader: data.newHeader,
+                                       newContent: data.newPanel
+                               });
+                       }
+                       return ret;
+               };
+       }( jQuery, jQuery.ui.accordion.prototype ) );
+
+       // animated option
+       // NOTE: this only provides support for "slide", "bounceslide", and easings
+       // not the full $.ui.accordion.animations API
+       (function( $, prototype ) {
+               $.extend( prototype.options, {
+                       animate: null,
+                       animated: "slide"
+               });
+
+               var _create = prototype._create;
+               prototype._create = function() {
+                       var options = this.options;
+                       if ( options.animate === null ) {
+                               if ( !options.animated ) {
+                                       options.animate = false;
+                               } else if ( options.animated === "slide" ) {
+                                       options.animate = 300;
+                               } else if ( options.animated === "bounceslide" ) {
+                                       options.animate = {
+                                               duration: 200,
+                                               down: {
+                                                       easing: "easeOutBounce",
+                                                       duration: 1000
+                                               }
+                                       };
+                               } else {
+                                       options.animate = options.animated;
                                }
-                       });
-               },
-               bounceslide: function( options ) {
-                       this.slide( options, {
-                               easing: options.down ? "easeOutBounce" : "swing",
-                               duration: options.down ? 1000 : 200
-                       });
-               }
-       }
-});
+                       }
+
+                       _create.call( this );
+               };
+       }( jQuery, jQuery.ui.accordion.prototype ) );
+}
 
 })( jQuery );
index 8d69be2..3baed1d 100644 (file)
@@ -1,16 +1,18 @@
 /*!
- * jQuery UI Autocomplete 1.8.24
+ * jQuery UI Autocomplete 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Autocomplete
+ * http://api.jqueryui.com/autocomplete/
  *
  * Depends:
  *     jquery.ui.core.js
  *     jquery.ui.widget.js
  *     jquery.ui.position.js
+ *     jquery.ui.menu.js
  */
 (function( $, undefined ) {
 
@@ -18,6 +20,8 @@
 var requestIndex = 0;
 
 $.widget( "ui.autocomplete", {
+       version: "1.9.2",
+       defaultElement: "<input>",
        options: {
                appendTo: "body",
                autoFocus: false,
@@ -28,241 +32,335 @@ $.widget( "ui.autocomplete", {
                        at: "left bottom",
                        collision: "none"
                },
-               source: null
+               source: null,
+
+               // callbacks
+               change: null,
+               close: null,
+               focus: null,
+               open: null,
+               response: null,
+               search: null,
+               select: null
        },
 
        pending: 0,
 
        _create: function() {
-               var self = this,
-                       doc = this.element[ 0 ].ownerDocument,
-                       suppressKeyPress;
-               this.isMultiLine = this.element.is( "textarea" );
+               // Some browsers only repeat keydown events, not keypress events,
+               // so we use the suppressKeyPress flag to determine if we've already
+               // handled the keydown event. #7269
+               // Unfortunately the code for & in keypress is the same as the up arrow,
+               // so we use the suppressKeyPressRepeat flag to avoid handling keypress
+               // events when we know the keydown event was used to modify the
+               // search term. #7799
+               var suppressKeyPress, suppressKeyPressRepeat, suppressInput;
+
+               this.isMultiLine = this._isMultiLine();
+               this.valueMethod = this.element[ this.element.is( "input,textarea" ) ? "val" : "text" ];
+               this.isNewMenu = true;
 
                this.element
                        .addClass( "ui-autocomplete-input" )
-                       .attr( "autocomplete", "off" )
-                       // TODO verify these actually work as intended
-                       .attr({
-                               role: "textbox",
-                               "aria-autocomplete": "list",
-                               "aria-haspopup": "true"
-                       })
-                       .bind( "keydown.autocomplete", function( event ) {
-                               if ( self.options.disabled || self.element.propAttr( "readOnly" ) ) {
+                       .attr( "autocomplete", "off" );
+
+               this._on( this.element, {
+                       keydown: function( event ) {
+                               if ( this.element.prop( "readOnly" ) ) {
+                                       suppressKeyPress = true;
+                                       suppressInput = true;
+                                       suppressKeyPressRepeat = true;
                                        return;
                                }
 
                                suppressKeyPress = false;
+                               suppressInput = false;
+                               suppressKeyPressRepeat = false;
                                var keyCode = $.ui.keyCode;
                                switch( event.keyCode ) {
                                case keyCode.PAGE_UP:
-                                       self._move( "previousPage", event );
+                                       suppressKeyPress = true;
+                                       this._move( "previousPage", event );
                                        break;
                                case keyCode.PAGE_DOWN:
-                                       self._move( "nextPage", event );
+                                       suppressKeyPress = true;
+                                       this._move( "nextPage", event );
                                        break;
                                case keyCode.UP:
-                                       self._keyEvent( "previous", event );
+                                       suppressKeyPress = true;
+                                       this._keyEvent( "previous", event );
                                        break;
                                case keyCode.DOWN:
-                                       self._keyEvent( "next", event );
+                                       suppressKeyPress = true;
+                                       this._keyEvent( "next", event );
                                        break;
                                case keyCode.ENTER:
                                case keyCode.NUMPAD_ENTER:
                                        // when menu is open and has focus
-                                       if ( self.menu.active ) {
+                                       if ( this.menu.active ) {
                                                // #6055 - Opera still allows the keypress to occur
                                                // which causes forms to submit
                                                suppressKeyPress = true;
                                                event.preventDefault();
+                                               this.menu.select( event );
                                        }
-                                       //passthrough - ENTER and TAB both select the current element
+                                       break;
                                case keyCode.TAB:
-                                       if ( !self.menu.active ) {
-                                               return;
+                                       if ( this.menu.active ) {
+                                               this.menu.select( event );
                                        }
-                                       self.menu.select( event );
                                        break;
                                case keyCode.ESCAPE:
-                                       self.element.val( self.term );
-                                       self.close( event );
+                                       if ( this.menu.element.is( ":visible" ) ) {
+                                               this._value( this.term );
+                                               this.close( event );
+                                               // Different browsers have different default behavior for escape
+                                               // Single press can mean undo or clear
+                                               // Double press in IE means clear the whole form
+                                               event.preventDefault();
+                                       }
                                        break;
                                default:
-                                       // keypress is triggered before the input value is changed
-                                       clearTimeout( self.searching );
-                                       self.searching = setTimeout(function() {
-                                               // only search if the value has changed
-                                               if ( self.term != self.element.val() ) {
-                                                       self.selectedItem = null;
-                                                       self.search( null, event );
-                                               }
-                                       }, self.options.delay );
+                                       suppressKeyPressRepeat = true;
+                                       // search timeout should be triggered before the input value is changed
+                                       this._searchTimeout( event );
                                        break;
                                }
-                       })
-                       .bind( "keypress.autocomplete", function( event ) {
+                       },
+                       keypress: function( event ) {
                                if ( suppressKeyPress ) {
                                        suppressKeyPress = false;
                                        event.preventDefault();
+                                       return;
                                }
-                       })
-                       .bind( "focus.autocomplete", function() {
-                               if ( self.options.disabled ) {
+                               if ( suppressKeyPressRepeat ) {
                                        return;
                                }
 
-                               self.selectedItem = null;
-                               self.previous = self.element.val();
-                       })
-                       .bind( "blur.autocomplete", function( event ) {
-                               if ( self.options.disabled ) {
+                               // replicate some key handlers to allow them to repeat in Firefox and Opera
+                               var keyCode = $.ui.keyCode;
+                               switch( event.keyCode ) {
+                               case keyCode.PAGE_UP:
+                                       this._move( "previousPage", event );
+                                       break;
+                               case keyCode.PAGE_DOWN:
+                                       this._move( "nextPage", event );
+                                       break;
+                               case keyCode.UP:
+                                       this._keyEvent( "previous", event );
+                                       break;
+                               case keyCode.DOWN:
+                                       this._keyEvent( "next", event );
+                                       break;
+                               }
+                       },
+                       input: function( event ) {
+                               if ( suppressInput ) {
+                                       suppressInput = false;
+                                       event.preventDefault();
                                        return;
                                }
+                               this._searchTimeout( event );
+                       },
+                       focus: function() {
+                               this.selectedItem = null;
+                               this.previous = this._value();
+                       },
+                       blur: function( event ) {
+                               if ( this.cancelBlur ) {
+                                       delete this.cancelBlur;
+                                       return;
+                               }
+
+                               clearTimeout( this.searching );
+                               this.close( event );
+                               this._change( event );
+                       }
+               });
 
-                               clearTimeout( self.searching );
-                               // clicks on the menu (or a button to trigger a search) will cause a blur event
-                               self.closing = setTimeout(function() {
-                                       self.close( event );
-                                       self._change( event );
-                               }, 150 );
-                       });
                this._initSource();
-               this.menu = $( "<ul></ul>" )
+               this.menu = $( "<ul>" )
                        .addClass( "ui-autocomplete" )
-                       .appendTo( $( this.options.appendTo || "body", doc )[0] )
-                       // prevent the close-on-blur in case of a "slow" click on the menu (long mousedown)
-                       .mousedown(function( event ) {
+                       .appendTo( this.document.find( this.options.appendTo || "body" )[ 0 ] )
+                       .menu({
+                               // custom key handling for now
+                               input: $(),
+                               // disable ARIA support, the live region takes care of that
+                               role: null
+                       })
+                       .zIndex( this.element.zIndex() + 1 )
+                       .hide()
+                       .data( "menu" );
+
+               this._on( this.menu.element, {
+                       mousedown: function( event ) {
+                               // prevent moving focus out of the text field
+                               event.preventDefault();
+
+                               // IE doesn't prevent moving focus even with event.preventDefault()
+                               // so we set a flag to know when we should ignore the blur event
+                               this.cancelBlur = true;
+                               this._delay(function() {
+                                       delete this.cancelBlur;
+                               });
+
                                // clicking on the scrollbar causes focus to shift to the body
                                // but we can't detect a mouseup or a click immediately afterward
                                // so we have to track the next mousedown and close the menu if
                                // the user clicks somewhere outside of the autocomplete
-                               var menuElement = self.menu.element[ 0 ];
+                               var menuElement = this.menu.element[ 0 ];
                                if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
-                                       setTimeout(function() {
-                                               $( document ).one( 'mousedown', function( event ) {
-                                                       if ( event.target !== self.element[ 0 ] &&
-                                                               event.target !== menuElement &&
-                                                               !$.ui.contains( menuElement, event.target ) ) {
-                                                               self.close();
+                                       this._delay(function() {
+                                               var that = this;
+                                               this.document.one( "mousedown", function( event ) {
+                                                       if ( event.target !== that.element[ 0 ] &&
+                                                                       event.target !== menuElement &&
+                                                                       !$.contains( menuElement, event.target ) ) {
+                                                               that.close();
                                                        }
                                                });
-                                       }, 1 );
+                                       });
                                }
+                       },
+                       menufocus: function( event, ui ) {
+                               // #7024 - Prevent accidental activation of menu items in Firefox
+                               if ( this.isNewMenu ) {
+                                       this.isNewMenu = false;
+                                       if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+                                               this.menu.blur();
+
+                                               this.document.one( "mousemove", function() {
+                                                       $( event.target ).trigger( event.originalEvent );
+                                               });
 
-                               // use another timeout to make sure the blur-event-handler on the input was already triggered
-                               setTimeout(function() {
-                                       clearTimeout( self.closing );
-                               }, 13);
-                       })
-                       .menu({
-                               focus: function( event, ui ) {
-                                       var item = ui.item.data( "item.autocomplete" );
-                                       if ( false !== self._trigger( "focus", event, { item: item } ) ) {
-                                               // use value to match what will end up in the input, if it was a key event
-                                               if ( /^key/.test(event.originalEvent.type) ) {
-                                                       self.element.val( item.value );
-                                               }
-                                       }
-                               },
-                               selected: function( event, ui ) {
-                                       var item = ui.item.data( "item.autocomplete" ),
-                                               previous = self.previous;
-
-                                       // only trigger when focus was lost (click on menu)
-                                       if ( self.element[0] !== doc.activeElement ) {
-                                               self.element.focus();
-                                               self.previous = previous;
-                                               // #6109 - IE triggers two focus events and the second
-                                               // is asynchronous, so we need to reset the previous
-                                               // term synchronously and asynchronously :-(
-                                               setTimeout(function() {
-                                                       self.previous = previous;
-                                                       self.selectedItem = item;
-                                               }, 1);
+                                               return;
                                        }
+                               }
 
-                                       if ( false !== self._trigger( "select", event, { item: item } ) ) {
-                                               self.element.val( item.value );
-                                       }
-                                       // reset the term after the select event
-                                       // this allows custom select handling to work properly
-                                       self.term = self.element.val();
-
-                                       self.close( event );
-                                       self.selectedItem = item;
-                               },
-                               blur: function( event, ui ) {
-                                       // don't set the value of the text field if it's already correct
-                                       // this prevents moving the cursor unnecessarily
-                                       if ( self.menu.element.is(":visible") &&
-                                               ( self.element.val() !== self.term ) ) {
-                                               self.element.val( self.term );
+                               // back compat for _renderItem using item.autocomplete, via #7810
+                               // TODO remove the fallback, see #8156
+                               var item = ui.item.data( "ui-autocomplete-item" ) || ui.item.data( "item.autocomplete" );
+                               if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+                                       // use value to match what will end up in the input, if it was a key event
+                                       if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+                                               this._value( item.value );
                                        }
+                               } else {
+                                       // Normally the input is populated with the item's value as the
+                                       // menu is navigated, causing screen readers to notice a change and
+                                       // announce the item. Since the focus event was canceled, this doesn't
+                                       // happen, so we update the live region so that screen readers can
+                                       // still notice the change and announce it.
+                                       this.liveRegion.text( item.value );
+                               }
+                       },
+                       menuselect: function( event, ui ) {
+                               // back compat for _renderItem using item.autocomplete, via #7810
+                               // TODO remove the fallback, see #8156
+                               var item = ui.item.data( "ui-autocomplete-item" ) || ui.item.data( "item.autocomplete" ),
+                                       previous = this.previous;
+
+                               // only trigger when focus was lost (click on menu)
+                               if ( this.element[0] !== this.document[0].activeElement ) {
+                                       this.element.focus();
+                                       this.previous = previous;
+                                       // #6109 - IE triggers two focus events and the second
+                                       // is asynchronous, so we need to reset the previous
+                                       // term synchronously and asynchronously :-(
+                                       this._delay(function() {
+                                               this.previous = previous;
+                                               this.selectedItem = item;
+                                       });
+                               }
+
+                               if ( false !== this._trigger( "select", event, { item: item } ) ) {
+                                       this._value( item.value );
                                }
+                               // reset the term after the select event
+                               // this allows custom select handling to work properly
+                               this.term = this._value();
+
+                               this.close( event );
+                               this.selectedItem = item;
+                       }
+               });
+
+               this.liveRegion = $( "<span>", {
+                               role: "status",
+                               "aria-live": "polite"
                        })
-                       .zIndex( this.element.zIndex() + 1 )
-                       // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
-                       .css({ top: 0, left: 0 })
-                       .hide()
-                       .data( "menu" );
+                       .addClass( "ui-helper-hidden-accessible" )
+                       .insertAfter( this.element );
+
                if ( $.fn.bgiframe ) {
-                        this.menu.element.bgiframe();
+                       this.menu.element.bgiframe();
                }
+
                // turning off autocomplete prevents the browser from remembering the
                // value when navigating through history, so we re-enable autocomplete
                // if the page is unloaded before the widget is destroyed. #7790
-               self.beforeunloadHandler = function() {
-                       self.element.removeAttr( "autocomplete" );
-               };
-               $( window ).bind( "beforeunload", self.beforeunloadHandler );
+               this._on( this.window, {
+                       beforeunload: function() {
+                               this.element.removeAttr( "autocomplete" );
+                       }
+               });
        },
 
-       destroy: function() {
+       _destroy: function() {
+               clearTimeout( this.searching );
                this.element
                        .removeClass( "ui-autocomplete-input" )
-                       .removeAttr( "autocomplete" )
-                       .removeAttr( "role" )
-                       .removeAttr( "aria-autocomplete" )
-                       .removeAttr( "aria-haspopup" );
+                       .removeAttr( "autocomplete" );
                this.menu.element.remove();
-               $( window ).unbind( "beforeunload", this.beforeunloadHandler );
-               $.Widget.prototype.destroy.call( this );
+               this.liveRegion.remove();
        },
 
        _setOption: function( key, value ) {
-               $.Widget.prototype._setOption.apply( this, arguments );
+               this._super( key, value );
                if ( key === "source" ) {
                        this._initSource();
                }
                if ( key === "appendTo" ) {
-                       this.menu.element.appendTo( $( value || "body", this.element[0].ownerDocument )[0] )
+                       this.menu.element.appendTo( this.document.find( value || "body" )[0] );
                }
                if ( key === "disabled" && value && this.xhr ) {
                        this.xhr.abort();
                }
        },
 
+       _isMultiLine: function() {
+               // Textareas are always multi-line
+               if ( this.element.is( "textarea" ) ) {
+                       return true;
+               }
+               // Inputs are always single-line, even if inside a contentEditable element
+               // IE also treats inputs as contentEditable
+               if ( this.element.is( "input" ) ) {
+                       return false;
+               }
+               // All other element types are determined by whether or not they're contentEditable
+               return this.element.prop( "isContentEditable" );
+       },
+
        _initSource: function() {
-               var self = this,
-                       array,
-                       url;
+               var array, url,
+                       that = this;
                if ( $.isArray(this.options.source) ) {
                        array = this.options.source;
                        this.source = function( request, response ) {
-                               response( $.ui.autocomplete.filter(array, request.term) );
+                               response( $.ui.autocomplete.filter( array, request.term ) );
                        };
                } else if ( typeof this.options.source === "string" ) {
                        url = this.options.source;
                        this.source = function( request, response ) {
-                               if ( self.xhr ) {
-                                       self.xhr.abort();
+                               if ( that.xhr ) {
+                                       that.xhr.abort();
                                }
-                               self.xhr = $.ajax({
+                               that.xhr = $.ajax({
                                        url: url,
                                        data: request,
                                        dataType: "json",
-                                       success: function( data, status ) {
+                                       success: function( data ) {
                                                response( data );
                                        },
                                        error: function() {
@@ -275,17 +373,27 @@ $.widget( "ui.autocomplete", {
                }
        },
 
+       _searchTimeout: function( event ) {
+               clearTimeout( this.searching );
+               this.searching = this._delay(function() {
+                       // only search if the value has changed
+                       if ( this.term !== this._value() ) {
+                               this.selectedItem = null;
+                               this.search( null, event );
+                       }
+               }, this.options.delay );
+       },
+
        search: function( value, event ) {
-               value = value != null ? value : this.element.val();
+               value = value != null ? value : this._value();
 
                // always save the actual value, not the one passed as an argument
-               this.term = this.element.val();
+               this.term = this._value();
 
                if ( value.length < this.options.minLength ) {
                        return this.close( event );
                }
 
-               clearTimeout( this.closing );
                if ( this._trigger( "search", event ) === false ) {
                        return;
                }
@@ -296,6 +404,7 @@ $.widget( "ui.autocomplete", {
        _search: function( value ) {
                this.pending++;
                this.element.addClass( "ui-autocomplete-loading" );
+               this.cancelSearch = false;
 
                this.source( { term: value }, this._response() );
        },
@@ -317,26 +426,35 @@ $.widget( "ui.autocomplete", {
        },
 
        __response: function( content ) {
-               if ( !this.options.disabled && content && content.length ) {
+               if ( content ) {
                        content = this._normalize( content );
+               }
+               this._trigger( "response", null, { content: content } );
+               if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
                        this._suggest( content );
                        this._trigger( "open" );
                } else {
-                       this.close();
+                       // use ._close() instead of .close() so we don't cancel future searches
+                       this._close();
                }
        },
 
        close: function( event ) {
-               clearTimeout( this.closing );
-               if ( this.menu.element.is(":visible") ) {
+               this.cancelSearch = true;
+               this._close( event );
+       },
+
+       _close: function( event ) {
+               if ( this.menu.element.is( ":visible" ) ) {
                        this.menu.element.hide();
-                       this.menu.deactivate();
+                       this.menu.blur();
+                       this.isNewMenu = true;
                        this._trigger( "close", event );
                }
        },
-       
+
        _change: function( event ) {
-               if ( this.previous !== this.element.val() ) {
+               if ( this.previous !== this._value() ) {
                        this._trigger( "change", event, { item: this.selectedItem } );
                }
        },
@@ -346,7 +464,7 @@ $.widget( "ui.autocomplete", {
                if ( items.length && items[0].label && items[0].value ) {
                        return items;
                }
-               return $.map( items, function(item) {
+               return $.map( items, function( item ) {
                        if ( typeof item === "string" ) {
                                return {
                                        label: item,
@@ -365,8 +483,6 @@ $.widget( "ui.autocomplete", {
                        .empty()
                        .zIndex( this.element.zIndex() + 1 );
                this._renderMenu( ul, items );
-               // TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate
-               this.menu.deactivate();
                this.menu.refresh();
 
                // size and position menu
@@ -377,7 +493,7 @@ $.widget( "ui.autocomplete", {
                }, this.options.position ));
 
                if ( this.options.autoFocus ) {
-                       this.menu.next( new $.Event("mouseover") );
+                       this.menu.next();
                }
        },
 
@@ -392,28 +508,31 @@ $.widget( "ui.autocomplete", {
        },
 
        _renderMenu: function( ul, items ) {
-               var self = this;
+               var that = this;
                $.each( items, function( index, item ) {
-                       self._renderItem( ul, item );
+                       that._renderItemData( ul, item );
                });
        },
 
-       _renderItem: function( ul, item) {
-               return $( "<li></li>" )
-                       .data( "item.autocomplete", item )
-                       .append( $( "<a></a>" ).text( item.label ) )
+       _renderItemData: function( ul, item ) {
+               return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+       },
+
+       _renderItem: function( ul, item ) {
+               return $( "<li>" )
+                       .append( $( "<a>" ).text( item.label ) )
                        .appendTo( ul );
        },
 
        _move: function( direction, event ) {
-               if ( !this.menu.element.is(":visible") ) {
+               if ( !this.menu.element.is( ":visible" ) ) {
                        this.search( null, event );
                        return;
                }
-               if ( this.menu.first() && /^previous/.test(direction) ||
-                               this.menu.last() && /^next/.test(direction) ) {
-                       this.element.val( this.term );
-                       this.menu.deactivate();
+               if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+                               this.menu.isLastItem() && /^next/.test( direction ) ) {
+                       this._value( this.term );
+                       this.menu.blur();
                        return;
                }
                this.menu[ direction ]( event );
@@ -422,6 +541,11 @@ $.widget( "ui.autocomplete", {
        widget: function() {
                return this.menu.element;
        },
+
+       _value: function() {
+               return this.valueMethod.apply( this.element, arguments );
+       },
+
        _keyEvent: function( keyEvent, event ) {
                if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
                        this._move( keyEvent, event );
@@ -434,7 +558,7 @@ $.widget( "ui.autocomplete", {
 
 $.extend( $.ui.autocomplete, {
        escapeRegex: function( value ) {
-               return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+               return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
        },
        filter: function(array, term) {
                var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
@@ -444,188 +568,35 @@ $.extend( $.ui.autocomplete, {
        }
 });
 
-}( jQuery ));
-
-/*
- * jQuery UI Menu (not officially released)
- * 
- * This widget isn't yet finished and the API is subject to change. We plan to finish
- * it for the next release. You're welcome to give it a try anyway and give us feedback,
- * as long as you're okay with migrating your code later on. We can help with that, too.
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu
- *
- * Depends:
- *     jquery.ui.core.js
- *  jquery.ui.widget.js
- */
-(function($) {
-
-$.widget("ui.menu", {
-       _create: function() {
-               var self = this;
-               this.element
-                       .addClass("ui-menu ui-widget ui-widget-content ui-corner-all")
-                       .attr({
-                               role: "listbox",
-                               "aria-activedescendant": "ui-active-menuitem"
-                       })
-                       .click(function( event ) {
-                               if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) {
-                                       return;
-                               }
-                               // temporary
-                               event.preventDefault();
-                               self.select( event );
-                       });
-               this.refresh();
-       },
-       
-       refresh: function() {
-               var self = this;
-
-               // don't refresh list items that are already adapted
-               var items = this.element.children("li:not(.ui-menu-item):has(a)")
-                       .addClass("ui-menu-item")
-                       .attr("role", "menuitem");
-               
-               items.children("a")
-                       .addClass("ui-corner-all")
-                       .attr("tabindex", -1)
-                       // mouseenter doesn't work with event delegation
-                       .mouseenter(function( event ) {
-                               self.activate( event, $(this).parent() );
-                       })
-                       .mouseleave(function() {
-                               self.deactivate();
-                       });
-       },
 
-       activate: function( event, item ) {
-               this.deactivate();
-               if (this.hasScroll()) {
-                       var offset = item.offset().top - this.element.offset().top,
-                               scroll = this.element.scrollTop(),
-                               elementHeight = this.element.height();
-                       if (offset < 0) {
-                               this.element.scrollTop( scroll + offset);
-                       } else if (offset >= elementHeight) {
-                               this.element.scrollTop( scroll + offset - elementHeight + item.height());
+// live region extension, adding a `messages` option
+// NOTE: This is an experimental API. We are still investigating
+// a full solution for string manipulation and internationalization.
+$.widget( "ui.autocomplete", $.ui.autocomplete, {
+       options: {
+               messages: {
+                       noResults: "No search results.",
+                       results: function( amount ) {
+                               return amount + ( amount > 1 ? " results are" : " result is" ) +
+                                       " available, use up and down arrow keys to navigate.";
                        }
                }
-               this.active = item.eq(0)
-                       .children("a")
-                               .addClass("ui-state-hover")
-                               .attr("id", "ui-active-menuitem")
-                       .end();
-               this._trigger("focus", event, { item: item });
-       },
-
-       deactivate: function() {
-               if (!this.active) { return; }
-
-               this.active.children("a")
-                       .removeClass("ui-state-hover")
-                       .removeAttr("id");
-               this._trigger("blur");
-               this.active = null;
        },
 
-       next: function(event) {
-               this.move("next", ".ui-menu-item:first", event);
-       },
-
-       previous: function(event) {
-               this.move("prev", ".ui-menu-item:last", event);
-       },
-
-       first: function() {
-               return this.active && !this.active.prevAll(".ui-menu-item").length;
-       },
-
-       last: function() {
-               return this.active && !this.active.nextAll(".ui-menu-item").length;
-       },
-
-       move: function(direction, edge, event) {
-               if (!this.active) {
-                       this.activate(event, this.element.children(edge));
+       __response: function( content ) {
+               var message;
+               this._superApply( arguments );
+               if ( this.options.disabled || this.cancelSearch ) {
                        return;
                }
-               var next = this.active[direction + "All"](".ui-menu-item").eq(0);
-               if (next.length) {
-                       this.activate(event, next);
-               } else {
-                       this.activate(event, this.element.children(edge));
-               }
-       },
-
-       // TODO merge with previousPage
-       nextPage: function(event) {
-               if (this.hasScroll()) {
-                       // TODO merge with no-scroll-else
-                       if (!this.active || this.last()) {
-                               this.activate(event, this.element.children(".ui-menu-item:first"));
-                               return;
-                       }
-                       var base = this.active.offset().top,
-                               height = this.element.height(),
-                               result = this.element.children(".ui-menu-item").filter(function() {
-                                       var close = $(this).offset().top - base - height + $(this).height();
-                                       // TODO improve approximation
-                                       return close < 10 && close > -10;
-                               });
-
-                       // TODO try to catch this earlier when scrollTop indicates the last page anyway
-                       if (!result.length) {
-                               result = this.element.children(".ui-menu-item:last");
-                       }
-                       this.activate(event, result);
-               } else {
-                       this.activate(event, this.element.children(".ui-menu-item")
-                               .filter(!this.active || this.last() ? ":first" : ":last"));
-               }
-       },
-
-       // TODO merge with nextPage
-       previousPage: function(event) {
-               if (this.hasScroll()) {
-                       // TODO merge with no-scroll-else
-                       if (!this.active || this.first()) {
-                               this.activate(event, this.element.children(".ui-menu-item:last"));
-                               return;
-                       }
-
-                       var base = this.active.offset().top,
-                               height = this.element.height(),
-                               result = this.element.children(".ui-menu-item").filter(function() {
-                                       var close = $(this).offset().top - base + height - $(this).height();
-                                       // TODO improve approximation
-                                       return close < 10 && close > -10;
-                               });
-
-                       // TODO try to catch this earlier when scrollTop indicates the last page anyway
-                       if (!result.length) {
-                               result = this.element.children(".ui-menu-item:first");
-                       }
-                       this.activate(event, result);
+               if ( content && content.length ) {
+                       message = this.options.messages.results( content.length );
                } else {
-                       this.activate(event, this.element.children(".ui-menu-item")
-                               .filter(!this.active || this.first() ? ":last" : ":first"));
+                       message = this.options.messages.noResults;
                }
-       },
-
-       hasScroll: function() {
-               return this.element.height() < this.element[ $.fn.prop ? "prop" : "attr" ]("scrollHeight");
-       },
-
-       select: function( event ) {
-               this._trigger("selected", event, { item: this.active });
+               this.liveRegion.text( message );
        }
 });
 
-}(jQuery));
+
+}( jQuery ));
index 8326262..53cf699 100644 (file)
@@ -1,11 +1,12 @@
 /*!
- * jQuery UI Button 1.8.24
+ * jQuery UI Button 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Button
+ * http://api.jqueryui.com/button/
  *
  * Depends:
  *     jquery.ui.core.js
@@ -41,6 +42,8 @@ var lastActive, startXPos, startYPos, clickDragged,
        };
 
 $.widget( "ui.button", {
+       version: "1.9.2",
+       defaultElement: "<button>",
        options: {
                disabled: null,
                text: true,
@@ -52,47 +55,48 @@ $.widget( "ui.button", {
        },
        _create: function() {
                this.element.closest( "form" )
-                       .unbind( "reset.button" )
-                       .bind( "reset.button", formResetHandler );
+                       .unbind( "reset" + this.eventNamespace )
+                       .bind( "reset" + this.eventNamespace, formResetHandler );
 
                if ( typeof this.options.disabled !== "boolean" ) {
-                       this.options.disabled = !!this.element.propAttr( "disabled" );
+                       this.options.disabled = !!this.element.prop( "disabled" );
                } else {
-                       this.element.propAttr( "disabled", this.options.disabled );
+                       this.element.prop( "disabled", this.options.disabled );
                }
 
                this._determineButtonType();
                this.hasTitle = !!this.buttonElement.attr( "title" );
 
-               var self = this,
+               var that = this,
                        options = this.options,
                        toggleButton = this.type === "checkbox" || this.type === "radio",
-                       hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ),
+                       activeClass = !toggleButton ? "ui-state-active" : "",
                        focusClass = "ui-state-focus";
 
                if ( options.label === null ) {
-                       options.label = this.buttonElement.html();
+                       options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
                }
 
+               this._hoverable( this.buttonElement );
+
                this.buttonElement
                        .addClass( baseClasses )
                        .attr( "role", "button" )
-                       .bind( "mouseenter.button", function() {
+                       .bind( "mouseenter" + this.eventNamespace, function() {
                                if ( options.disabled ) {
                                        return;
                                }
-                               $( this ).addClass( "ui-state-hover" );
                                if ( this === lastActive ) {
                                        $( this ).addClass( "ui-state-active" );
                                }
                        })
-                       .bind( "mouseleave.button", function() {
+                       .bind( "mouseleave" + this.eventNamespace, function() {
                                if ( options.disabled ) {
                                        return;
                                }
-                               $( this ).removeClass( hoverClass );
+                               $( this ).removeClass( activeClass );
                        })
-                       .bind( "click.button", function( event ) {
+                       .bind( "click" + this.eventNamespace, function( event ) {
                                if ( options.disabled ) {
                                        event.preventDefault();
                                        event.stopImmediatePropagation();
@@ -100,26 +104,26 @@ $.widget( "ui.button", {
                        });
 
                this.element
-                       .bind( "focus.button", function() {
+                       .bind( "focus" + this.eventNamespace, function() {
                                // no need to check disabled, focus won't be triggered anyway
-                               self.buttonElement.addClass( focusClass );
+                               that.buttonElement.addClass( focusClass );
                        })
-                       .bind( "blur.button", function() {
-                               self.buttonElement.removeClass( focusClass );
+                       .bind( "blur" + this.eventNamespace, function() {
+                               that.buttonElement.removeClass( focusClass );
                        });
 
                if ( toggleButton ) {
-                       this.element.bind( "change.button", function() {
+                       this.element.bind( "change" + this.eventNamespace, function() {
                                if ( clickDragged ) {
                                        return;
                                }
-                               self.refresh();
+                               that.refresh();
                        });
                        // if mouse moves between mousedown and mouseup (drag) set clickDragged flag
                        // prevents issue where button state changes but checkbox/radio checked state
                        // does not in Firefox (see ticket #6970)
                        this.buttonElement
-                               .bind( "mousedown.button", function( event ) {
+                               .bind( "mousedown" + this.eventNamespace, function( event ) {
                                        if ( options.disabled ) {
                                                return;
                                        }
@@ -127,7 +131,7 @@ $.widget( "ui.button", {
                                        startXPos = event.pageX;
                                        startYPos = event.pageY;
                                })
-                               .bind( "mouseup.button", function( event ) {
+                               .bind( "mouseup" + this.eventNamespace, function( event ) {
                                        if ( options.disabled ) {
                                                return;
                                        }
@@ -138,22 +142,22 @@ $.widget( "ui.button", {
                }
 
                if ( this.type === "checkbox" ) {
-                       this.buttonElement.bind( "click.button", function() {
+                       this.buttonElement.bind( "click" + this.eventNamespace, function() {
                                if ( options.disabled || clickDragged ) {
                                        return false;
                                }
                                $( this ).toggleClass( "ui-state-active" );
-                               self.buttonElement.attr( "aria-pressed", self.element[0].checked );
+                               that.buttonElement.attr( "aria-pressed", that.element[0].checked );
                        });
                } else if ( this.type === "radio" ) {
-                       this.buttonElement.bind( "click.button", function() {
+                       this.buttonElement.bind( "click" + this.eventNamespace, function() {
                                if ( options.disabled || clickDragged ) {
                                        return false;
                                }
                                $( this ).addClass( "ui-state-active" );
-                               self.buttonElement.attr( "aria-pressed", "true" );
+                               that.buttonElement.attr( "aria-pressed", "true" );
 
-                               var radio = self.element[ 0 ];
+                               var radio = that.element[ 0 ];
                                radioGroup( radio )
                                        .not( radio )
                                        .map(function() {
@@ -164,31 +168,31 @@ $.widget( "ui.button", {
                        });
                } else {
                        this.buttonElement
-                               .bind( "mousedown.button", function() {
+                               .bind( "mousedown" + this.eventNamespace, function() {
                                        if ( options.disabled ) {
                                                return false;
                                        }
                                        $( this ).addClass( "ui-state-active" );
                                        lastActive = this;
-                                       $( document ).one( "mouseup", function() {
+                                       that.document.one( "mouseup", function() {
                                                lastActive = null;
                                        });
                                })
-                               .bind( "mouseup.button", function() {
+                               .bind( "mouseup" + this.eventNamespace, function() {
                                        if ( options.disabled ) {
                                                return false;
                                        }
                                        $( this ).removeClass( "ui-state-active" );
                                })
-                               .bind( "keydown.button", function(event) {
+                               .bind( "keydown" + this.eventNamespace, function(event) {
                                        if ( options.disabled ) {
                                                return false;
                                        }
-                                       if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) {
+                                       if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
                                                $( this ).addClass( "ui-state-active" );
                                        }
                                })
-                               .bind( "keyup.button", function() {
+                               .bind( "keyup" + this.eventNamespace, function() {
                                        $( this ).removeClass( "ui-state-active" );
                                });
 
@@ -210,10 +214,11 @@ $.widget( "ui.button", {
        },
 
        _determineButtonType: function() {
+               var ancestor, labelSelector, checked;
 
-               if ( this.element.is(":checkbox") ) {
+               if ( this.element.is("[type=checkbox]") ) {
                        this.type = "checkbox";
-               } else if ( this.element.is(":radio") ) {
+               } else if ( this.element.is("[type=radio]") ) {
                        this.type = "radio";
                } else if ( this.element.is("input") ) {
                        this.type = "input";
@@ -224,8 +229,8 @@ $.widget( "ui.button", {
                if ( this.type === "checkbox" || this.type === "radio" ) {
                        // we don't search against the document in case the element
                        // is disconnected from the DOM
-                       var ancestor = this.element.parents().filter(":last"),
-                               labelSelector = "label[for='" + this.element.attr("id") + "']";
+                       ancestor = this.element.parents().last();
+                       labelSelector = "label[for='" + this.element.attr("id") + "']";
                        this.buttonElement = ancestor.find( labelSelector );
                        if ( !this.buttonElement.length ) {
                                ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
@@ -236,11 +241,11 @@ $.widget( "ui.button", {
                        }
                        this.element.addClass( "ui-helper-hidden-accessible" );
 
-                       var checked = this.element.is( ":checked" );
+                       checked = this.element.is( ":checked" );
                        if ( checked ) {
                                this.buttonElement.addClass( "ui-state-active" );
                        }
-                       this.buttonElement.attr( "aria-pressed", checked );
+                       this.buttonElement.prop( "aria-pressed", checked );
                } else {
                        this.buttonElement = this.element;
                }
@@ -250,7 +255,7 @@ $.widget( "ui.button", {
                return this.buttonElement;
        },
 
-       destroy: function() {
+       _destroy: function() {
                this.element
                        .removeClass( "ui-helper-hidden-accessible" );
                this.buttonElement
@@ -262,17 +267,15 @@ $.widget( "ui.button", {
                if ( !this.hasTitle ) {
                        this.buttonElement.removeAttr( "title" );
                }
-
-               $.Widget.prototype.destroy.call( this );
        },
 
        _setOption: function( key, value ) {
-               $.Widget.prototype._setOption.apply( this, arguments );
+               this._super( key, value );
                if ( key === "disabled" ) {
                        if ( value ) {
-                               this.element.propAttr( "disabled", true );
+                               this.element.prop( "disabled", true );
                        } else {
-                               this.element.propAttr( "disabled", false );
+                               this.element.prop( "disabled", false );
                        }
                        return;
                }
@@ -280,7 +283,9 @@ $.widget( "ui.button", {
        },
 
        refresh: function() {
-               var isDisabled = this.element.is( ":disabled" );
+               //See #8237 & #8828
+               var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+
                if ( isDisabled !== this.options.disabled ) {
                        this._setOption( "disabled", isDisabled );
                }
@@ -317,14 +322,14 @@ $.widget( "ui.button", {
                        return;
                }
                var buttonElement = this.buttonElement.removeClass( typeClasses ),
-                       buttonText = $( "<span></span>", this.element[0].ownerDocument )
+                       buttonText = $( "<span></span>", this.document[0] )
                                .addClass( "ui-button-text" )
                                .html( this.options.label )
                                .appendTo( buttonElement.empty() )
                                .text(),
                        icons = this.options.icons,
                        multipleIcons = icons.primary && icons.secondary,
-                       buttonClasses = [];  
+                       buttonClasses = [];
 
                if ( icons.primary || icons.secondary ) {
                        if ( this.options.text ) {
@@ -343,7 +348,7 @@ $.widget( "ui.button", {
                                buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
 
                                if ( !this.hasTitle ) {
-                                       buttonElement.attr( "title", buttonText );
+                                       buttonElement.attr( "title", $.trim( buttonText ) );
                                }
                        }
                } else {
@@ -354,14 +359,15 @@ $.widget( "ui.button", {
 });
 
 $.widget( "ui.buttonset", {
+       version: "1.9.2",
        options: {
-               items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)"
+               items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(button)"
        },
 
        _create: function() {
                this.element.addClass( "ui-buttonset" );
        },
-       
+
        _init: function() {
                this.refresh();
        },
@@ -371,12 +377,12 @@ $.widget( "ui.buttonset", {
                        this.buttons.button( "option", key, value );
                }
 
-               $.Widget.prototype._setOption.apply( this, arguments );
+               this._super( key, value );
        },
-       
+
        refresh: function() {
                var rtl = this.element.css( "direction" ) === "rtl";
-               
+
                this.buttons = this.element.find( this.options.items )
                        .filter( ":ui-button" )
                                .button( "refresh" )
@@ -397,7 +403,7 @@ $.widget( "ui.buttonset", {
                        .end();
        },
 
-       destroy: function() {
+       _destroy: function() {
                this.element.removeClass( "ui-buttonset" );
                this.buttons
                        .map(function() {
@@ -406,8 +412,6 @@ $.widget( "ui.buttonset", {
                                .removeClass( "ui-corner-left ui-corner-right" )
                        .end()
                        .button( "destroy" );
-
-               $.Widget.prototype.destroy.call( this );
        }
 });
 
index b36c1ac..4ef4b76 100644 (file)
@@ -1,14 +1,18 @@
 /*!
- * jQuery UI 1.8.24
+ * jQuery UI Core 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI
+ * http://api.jqueryui.com/category/ui-core/
  */
 (function( $, undefined ) {
 
+var uuid = 0,
+       runiqueId = /^ui-id-\d+$/;
+
 // prevent duplicate loading
 // this is only a problem because we proxy existing functions
 // and we don't want to double proxy them
@@ -18,26 +22,18 @@ if ( $.ui.version ) {
 }
 
 $.extend( $.ui, {
-       version: "1.8.24",
+       version: "1.9.2",
 
        keyCode: {
-               ALT: 18,
                BACKSPACE: 8,
-               CAPS_LOCK: 20,
                COMMA: 188,
-               COMMAND: 91,
-               COMMAND_LEFT: 91, // COMMAND
-               COMMAND_RIGHT: 93,
-               CONTROL: 17,
                DELETE: 46,
                DOWN: 40,
                END: 35,
                ENTER: 13,
                ESCAPE: 27,
                HOME: 36,
-               INSERT: 45,
                LEFT: 37,
-               MENU: 93, // COMMAND_RIGHT
                NUMPAD_ADD: 107,
                NUMPAD_DECIMAL: 110,
                NUMPAD_DIVIDE: 111,
@@ -48,18 +44,14 @@ $.extend( $.ui, {
                PAGE_UP: 33,
                PERIOD: 190,
                RIGHT: 39,
-               SHIFT: 16,
                SPACE: 32,
                TAB: 9,
-               UP: 38,
-               WINDOWS: 91 // COMMAND
+               UP: 38
        }
 });
 
 // plugins
 $.fn.extend({
-       propAttr: $.fn.prop || $.fn.attr,
-
        _focus: $.fn.focus,
        focus: function( delay, fn ) {
                return typeof delay === "number" ?
@@ -77,13 +69,13 @@ $.fn.extend({
 
        scrollParent: function() {
                var scrollParent;
-               if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
+               if (($.ui.ie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
                        scrollParent = this.parents().filter(function() {
-                               return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+                               return (/(relative|absolute|fixed)/).test($.css(this,'position')) && (/(auto|scroll)/).test($.css(this,'overflow')+$.css(this,'overflow-y')+$.css(this,'overflow-x'));
                        }).eq(0);
                } else {
                        scrollParent = this.parents().filter(function() {
-                               return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+                               return (/(auto|scroll)/).test($.css(this,'overflow')+$.css(this,'overflow-y')+$.css(this,'overflow-x'));
                        }).eq(0);
                }
 
@@ -119,92 +111,50 @@ $.fn.extend({
                return 0;
        },
 
-       disableSelection: function() {
-               return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
-                       ".ui-disableSelection", function( event ) {
-                               event.preventDefault();
-                       });
+       uniqueId: function() {
+               return this.each(function() {
+                       if ( !this.id ) {
+                               this.id = "ui-id-" + (++uuid);
+                       }
+               });
        },
 
-       enableSelection: function() {
-               return this.unbind( ".ui-disableSelection" );
+       removeUniqueId: function() {
+               return this.each(function() {
+                       if ( runiqueId.test( this.id ) ) {
+                               $( this ).removeAttr( "id" );
+                       }
+               });
        }
 });
 
-// support: jQuery <1.8
-if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
-       $.each( [ "Width", "Height" ], function( i, name ) {
-               var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
-                       type = name.toLowerCase(),
-                       orig = {
-                               innerWidth: $.fn.innerWidth,
-                               innerHeight: $.fn.innerHeight,
-                               outerWidth: $.fn.outerWidth,
-                               outerHeight: $.fn.outerHeight
-                       };
-
-               function reduce( elem, size, border, margin ) {
-                       $.each( side, function() {
-                               size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
-                               if ( border ) {
-                                       size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
-                               }
-                               if ( margin ) {
-                                       size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
-                               }
-                       });
-                       return size;
-               }
-
-               $.fn[ "inner" + name ] = function( size ) {
-                       if ( size === undefined ) {
-                               return orig[ "inner" + name ].call( this );
-                       }
-
-                       return this.each(function() {
-                               $( this ).css( type, reduce( this, size ) + "px" );
-                       });
-               };
-
-               $.fn[ "outer" + name] = function( size, margin ) {
-                       if ( typeof size !== "number" ) {
-                               return orig[ "outer" + name ].call( this, size );
-                       }
-
-                       return this.each(function() {
-                               $( this).css( type, reduce( this, size, true, margin ) + "px" );
-                       });
-               };
-       });
-}
-
 // selectors
 function focusable( element, isTabIndexNotNaN ) {
-       var nodeName = element.nodeName.toLowerCase();
+       var map, mapName, img,
+               nodeName = element.nodeName.toLowerCase();
        if ( "area" === nodeName ) {
-               var map = element.parentNode,
-                       mapName = map.name,
-                       img;
+               map = element.parentNode;
+               mapName = map.name;
                if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
                        return false;
                }
                img = $( "img[usemap=#" + mapName + "]" )[0];
                return !!img && visible( img );
        }
-       return ( /input|select|textarea|button|object/.test( nodeName )
-               ? !element.disabled
-               : "a" == nodeName
-                       ? element.href || isTabIndexNotNaN
-                       : isTabIndexNotNaN)
+       return ( /input|select|textarea|button|object/.test( nodeName ) ?
+               !element.disabled :
+               "a" === nodeName ?
+                       element.href || isTabIndexNotNaN :
+                       isTabIndexNotNaN) &&
                // the element and all of its ancestors must be visible
-               && visible( element );
+               visible( element );
 }
 
 function visible( element ) {
-       return !$( element ).parents().andSelf().filter(function() {
-               return $.curCSS( this, "visibility" ) === "hidden" ||
-                       $.expr.filters.hidden( this );
-       }).length;
+       return $.expr.filters.visible( element ) &&
+               !$( element ).parents().andSelf().filter(function() {
+                       return $.css( this, "visibility" ) === "hidden";
+               }).length;
 }
 
 $.extend( $.expr[ ":" ], {
@@ -236,7 +186,7 @@ $(function() {
                div = body.appendChild( div = document.createElement( "div" ) );
 
        // access offsetHeight before setting the style to prevent a layout bug
-       // in IE 9 which causes the elemnt to continue to take up space even
+       // in IE 9 which causes the element to continue to take up space even
        // after it is removed from the DOM (#8026)
        div.offsetHeight;
 
@@ -255,9 +205,64 @@ $(function() {
        body.removeChild( div ).style.display = "none";
 });
 
-// jQuery <1.4.3 uses curCSS, in 1.4.3 - 1.7.2 curCSS = css, 1.8+ only has css
-if ( !$.curCSS ) {
-       $.curCSS = $.css;
+// support: jQuery <1.8
+if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+       $.each( [ "Width", "Height" ], function( i, name ) {
+               var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+                       type = name.toLowerCase(),
+                       orig = {
+                               innerWidth: $.fn.innerWidth,
+                               innerHeight: $.fn.innerHeight,
+                               outerWidth: $.fn.outerWidth,
+                               outerHeight: $.fn.outerHeight
+                       };
+
+               function reduce( elem, size, border, margin ) {
+                       $.each( side, function() {
+                               size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+                               if ( border ) {
+                                       size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+                               }
+                               if ( margin ) {
+                                       size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+                               }
+                       });
+                       return size;
+               }
+
+               $.fn[ "inner" + name ] = function( size ) {
+                       if ( size === undefined ) {
+                               return orig[ "inner" + name ].call( this );
+                       }
+
+                       return this.each(function() {
+                               $( this ).css( type, reduce( this, size ) + "px" );
+                       });
+               };
+
+               $.fn[ "outer" + name] = function( size, margin ) {
+                       if ( typeof size !== "number" ) {
+                               return orig[ "outer" + name ].call( this, size );
+                       }
+
+                       return this.each(function() {
+                               $( this).css( type, reduce( this, size, true, margin ) + "px" );
+                       });
+               };
+       });
+}
+
+// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+       $.fn.removeData = (function( removeData ) {
+               return function( key ) {
+                       if ( arguments.length ) {
+                               return removeData.call( this, $.camelCase( key ) );
+                       } else {
+                               return removeData.call( this );
+                       }
+               };
+       })( $.fn.removeData );
 }
 
 
@@ -265,52 +270,69 @@ if ( !$.curCSS ) {
 
 
 // deprecated
+
+(function() {
+       var uaMatch = /msie ([\w.]+)/.exec( navigator.userAgent.toLowerCase() ) || [];
+       $.ui.ie = uaMatch.length ? true : false;
+       $.ui.ie6 = parseFloat( uaMatch[ 1 ], 10 ) === 6;
+})();
+
+$.fn.extend({
+       disableSelection: function() {
+               return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+                       ".ui-disableSelection", function( event ) {
+                               event.preventDefault();
+                       });
+       },
+
+       enableSelection: function() {
+               return this.unbind( ".ui-disableSelection" );
+       }
+});
+
 $.extend( $.ui, {
        // $.ui.plugin is deprecated.  Use the proxy pattern instead.
        plugin: {
                add: function( module, option, set ) {
-                       var proto = $.ui[ module ].prototype;
-                       for ( var i in set ) {
+                       var i,
+                               proto = $.ui[ module ].prototype;
+                       for ( i in set ) {
                                proto.plugins[ i ] = proto.plugins[ i ] || [];
                                proto.plugins[ i ].push( [ option, set[ i ] ] );
                        }
                },
                call: function( instance, name, args ) {
-                       var set = instance.plugins[ name ];
-                       if ( !set || !instance.element[ 0 ].parentNode ) {
+                       var i,
+                               set = instance.plugins[ name ];
+                       if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
                                return;
                        }
-       
-                       for ( var i = 0; i < set.length; i++ ) {
+
+                       for ( i = 0; i < set.length; i++ ) {
                                if ( instance.options[ set[ i ][ 0 ] ] ) {
                                        set[ i ][ 1 ].apply( instance.element, args );
                                }
                        }
                }
        },
-       
-       // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
-       contains: function( a, b ) {
-               return document.compareDocumentPosition ?
-                       a.compareDocumentPosition( b ) & 16 :
-                       a !== b && a.contains( b );
-       },
-       
+
+       contains: $.contains,
+
        // only used by resizable
        hasScroll: function( el, a ) {
-       
+
                //If overflow is hidden, the element might have extra content, but the user wants to hide it
                if ( $( el ).css( "overflow" ) === "hidden") {
                        return false;
                }
-       
+
                var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
                        has = false;
-       
+
                if ( el[ scroll ] > 0 ) {
                        return true;
                }
-       
+
                // TODO: determine which cases actually cause this to happen
                // if the element doesn't have the scroll set, see if it's possible to
                // set the scroll
@@ -319,7 +341,7 @@ $.extend( $.ui, {
                el[ scroll ] = 0;
                return has;
        },
-       
+
        // these are odd functions, fix the API or move into individual plugins
        isOverAxis: function( x, reference, size ) {
                //Determines when x coordinate is over "b" element axis
index 1fcea12..cd5d490 100644 (file)
@@ -1,18 +1,19 @@
 /*!
- * jQuery UI Datepicker 1.8.24
+ * jQuery UI Datepicker 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Datepicker
+ * http://api.jqueryui.com/datepicker/
  *
  * Depends:
  *     jquery.ui.core.js
  */
 (function( $, undefined ) {
 
-$.extend($.ui, { datepicker: { version: "1.8.24" } });
+$.extend($.ui, { datepicker: { version: "1.9.2" } });
 
 var PROP_NAME = 'datepicker';
 var dpuuid = new Date().getTime();
@@ -115,7 +116,7 @@ function Datepicker() {
 $.extend(Datepicker.prototype, {
        /* Class name added to elements to indicate already configured with a date picker. */
        markerClassName: 'hasDatepicker',
-       
+
        //Keep track of the maximum number of rows displayed (see #7043)
        maxRows: 4,
 
@@ -124,7 +125,7 @@ $.extend(Datepicker.prototype, {
                if (this.debug)
                        console.log.apply('', arguments);
        },
-       
+
        // TODO rename to "widget" when switching to widget factory
        _widgetDatepicker: function() {
                return this.dpDiv;
@@ -234,7 +235,7 @@ $.extend(Datepicker.prototype, {
                                if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0])
                                        $.datepicker._hideDatepicker();
                                else if ($.datepicker._datepickerShowing && $.datepicker._lastInput != input[0]) {
-                                       $.datepicker._hideDatepicker(); 
+                                       $.datepicker._hideDatepicker();
                                        $.datepicker._showDatepicker(input[0]);
                                } else
                                        $.datepicker._showDatepicker(input[0]);
@@ -382,7 +383,7 @@ $.extend(Datepicker.prototype, {
                        var inline = $target.children('.' + this._inlineClass);
                        inline.children().removeClass('ui-state-disabled');
                        inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
-                               removeAttr("disabled");
+                               prop("disabled", false);
                }
                this._disabledInputs = $.map(this._disabledInputs,
                        function(value) { return (value == target ? null : value); }); // delete entry
@@ -407,7 +408,7 @@ $.extend(Datepicker.prototype, {
                        var inline = $target.children('.' + this._inlineClass);
                        inline.children().addClass('ui-state-disabled');
                        inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
-                               attr("disabled", "disabled");
+                               prop("disabled", true);
                }
                this._disabledInputs = $.map(this._disabledInputs,
                        function(value) { return (value == target ? null : value); }); // delete entry
@@ -530,7 +531,7 @@ $.extend(Datepicker.prototype, {
                                case 9: $.datepicker._hideDatepicker();
                                                handled = false;
                                                break; // hide on tab out
-                               case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + 
+                               case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' +
                                                                        $.datepicker._currentClass + ')', inst.dpDiv);
                                                if (sel[0])
                                                        $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
@@ -628,7 +629,7 @@ $.extend(Datepicker.prototype, {
        },
 
        /* Pop-up the date picker for a given input field.
-       If false returned from beforeShow event handler do not show. 
+          If false returned from beforeShow event handler do not show.
           @param  input  element - the input field attached to the date picker or
                          event - if triggered by focus */
        _showDatepicker: function(input) {
@@ -647,7 +648,7 @@ $.extend(Datepicker.prototype, {
                var beforeShow = $.datepicker._get(inst, 'beforeShow');
                var beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
                if(beforeShowSettings === false){
-            //false
+                       //false
                        return;
                }
                extendRemove(inst.settings, beforeShowSettings);
@@ -665,10 +666,6 @@ $.extend(Datepicker.prototype, {
                        isFixed |= $(this).css('position') == 'fixed';
                        return !isFixed;
                });
-               if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled
-                       $.datepicker._pos[0] -= document.documentElement.scrollLeft;
-                       $.datepicker._pos[1] -= document.documentElement.scrollTop;
-               }
                var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
                $.datepicker._pos = null;
                //to avoid flashes on Firefox
@@ -695,7 +692,9 @@ $.extend(Datepicker.prototype, {
                        };
                        inst.dpDiv.zIndex($(input).zIndex()+1);
                        $.datepicker._datepickerShowing = true;
-                       if ($.effects && $.effects[showAnim])
+
+                       // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+                       if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) )
                                inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
                        else
                                inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess);
@@ -709,8 +708,7 @@ $.extend(Datepicker.prototype, {
 
        /* Generate the date picker content. */
        _updateDatepicker: function(inst) {
-               var self = this;
-               self.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+               this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
                var borders = $.datepicker._getBorders(inst.dpDiv);
                instActive = inst; // for delegate hover events
                inst.dpDiv.empty().append(this._generateHTML(inst));
@@ -735,7 +733,7 @@ $.extend(Datepicker.prototype, {
                                // this breaks the change event in IE
                                inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement)
                        inst.input.focus();
-               // deffered render of the years select (to avoid flashes on Firefox) 
+               // deffered render of the years select (to avoid flashes on Firefox)
                if( inst.yearshtml ){
                        var origyearshtml = inst.yearshtml;
                        setTimeout(function(){
@@ -785,11 +783,11 @@ $.extend(Datepicker.prototype, {
        _findPos: function(obj) {
                var inst = this._getInst(obj);
                var isRTL = this._get(inst, 'isRTL');
-        while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) {
-            obj = obj[isRTL ? 'previousSibling' : 'nextSibling'];
-        }
-        var position = $(obj).offset();
-           return [position.left, position.top];
+               while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) {
+                       obj = obj[isRTL ? 'previousSibling' : 'nextSibling'];
+               }
+               var position = $(obj).offset();
+               return [position.left, position.top];
        },
 
        /* Hide the date picker from view.
@@ -804,7 +802,9 @@ $.extend(Datepicker.prototype, {
                        var postProcess = function() {
                                $.datepicker._tidyDialog(inst);
                        };
-                       if ($.effects && $.effects[showAnim])
+
+                       // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+                       if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) )
                                inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
                        else
                                inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' :
@@ -1096,7 +1096,10 @@ $.extend(Datepicker.prototype, {
                                }
                }
                if (iValue < value.length){
-                       throw "Extra/unparsed characters found in date: " + value.substring(iValue);
+                       var extra = value.substr(iValue);
+                       if (!/^\s+/.test(extra)) {
+                               throw "Extra/unparsed characters found in date: " + extra;
+                       }
                }
                if (year == -1)
                        year = new Date().getFullYear();
@@ -1439,7 +1442,7 @@ $.extend(Datepicker.prototype, {
                        $(this).bind(this.getAttribute('data-event'), handler[this.getAttribute('data-handler')]);
                });
        },
-       
+
        /* Generate the HTML for the current state of the date picker. */
        _generateHTML: function(inst) {
                var today = new Date();
@@ -1596,13 +1599,13 @@ $.extend(Datepicker.prototype, {
                                        drawMonth = 0;
                                        drawYear++;
                                }
-                               calender += '</tbody></table>' + (isMultiMonth ? '</div>' + 
+                               calender += '</tbody></table>' + (isMultiMonth ? '</div>' +
                                                        ((numMonths[0] > 0 && col == numMonths[1]-1) ? '<div class="ui-datepicker-row-break"></div>' : '') : '');
                                group += calender;
                        }
                        html += group;
                }
-               html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ?
+               html += buttonPanel + ($.ui.ie6 && !inst.inline ?
                        '<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : '');
                inst._keyEvent = false;
                return html;
@@ -1660,7 +1663,7 @@ $.extend(Datepicker.prototype, {
                                                '>' + year + '</option>';
                                }
                                inst.yearshtml += '</select>';
-                               
+
                                html += inst.yearshtml;
                                inst.yearshtml = null;
                        }
@@ -1771,26 +1774,21 @@ $.extend(Datepicker.prototype, {
  * Bind hover events for datepicker elements.
  * Done via delegate so the binding only occurs once in the lifetime of the parent div.
  * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
- */ 
+ */
 function bindHover(dpDiv) {
        var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a';
-       return dpDiv.bind('mouseout', function(event) {
-                       var elem = $( event.target ).closest( selector );
-                       if ( !elem.length ) {
-                               return;
-                       }
-                       elem.removeClass( "ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover" );
+       return dpDiv.delegate(selector, 'mouseout', function() {
+                       $(this).removeClass('ui-state-hover');
+                       if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover');
+                       if (this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover');
                })
-               .bind('mouseover', function(event) {
-                       var elem = $( event.target ).closest( selector );
-                       if ($.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0]) ||
-                                       !elem.length ) {
-                               return;
+               .delegate(selector, 'mouseover', function(){
+                       if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
+                               $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
+                               $(this).addClass('ui-state-hover');
+                               if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover');
+                               if (this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover');
                        }
-                       elem.parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
-                       elem.addClass('ui-state-hover');
-                       if (elem.hasClass('ui-datepicker-prev')) elem.addClass('ui-datepicker-prev-hover');
-                       if (elem.hasClass('ui-datepicker-next')) elem.addClass('ui-datepicker-next-hover');
                });
 }
 
@@ -1803,27 +1801,21 @@ function extendRemove(target, props) {
        return target;
 };
 
-/* Determine whether an object is an array. */
-function isArray(a) {
-       return (a && (($.browser.safari && typeof a == 'object' && a.length) ||
-               (a.constructor && a.constructor.toString().match(/\Array\(\)/))));
-};
-
 /* Invoke the datepicker functionality.
    @param  options  string - a command, optionally followed by additional parameters or
-                    Object - settings for attaching new datepicker functionality
+                       Object - settings for attaching new datepicker functionality
    @return  jQuery object */
 $.fn.datepicker = function(options){
-       
+
        /* Verify an empty collection wasn't passed - Fixes #6976 */
        if ( !this.length ) {
                return this;
        }
-       
+
        /* Initialise the date picker. */
        if (!$.datepicker.initialized) {
                $(document).mousedown($.datepicker._checkExternalClick).
-                       find('body').append($.datepicker.dpDiv);
+                       find(document.body).append($.datepicker.dpDiv);
                $.datepicker.initialized = true;
        }
 
@@ -1845,7 +1837,7 @@ $.fn.datepicker = function(options){
 $.datepicker = new Datepicker(); // singleton instance
 $.datepicker.initialized = false;
 $.datepicker.uuid = new Date().getTime();
-$.datepicker.version = "1.8.24";
+$.datepicker.version = "1.9.2";
 
 // Workaround for #4055
 // Add another global to avoid noConflict issues with inline event handlers
index 06b85f2..75a9e8f 100644 (file)
@@ -1,11 +1,12 @@
 /*!
- * jQuery UI Dialog 1.8.24
+ * jQuery UI Dialog 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Dialog
+ * http://api.jqueryui.com/dialog/
  *
  * Depends:
  *     jquery.ui.core.js
  */
 (function( $, undefined ) {
 
-var uiDialogClasses =
-               'ui-dialog ' +
-               'ui-widget ' +
-               'ui-widget-content ' +
-               'ui-corner-all ',
+var uiDialogClasses = "ui-dialog ui-widget ui-widget-content ui-corner-all ",
        sizeRelatedOptions = {
                buttons: true,
                height: true,
@@ -40,158 +37,167 @@ var uiDialogClasses =
        };
 
 $.widget("ui.dialog", {
+       version: "1.9.2",
        options: {
                autoOpen: true,
                buttons: {},
                closeOnEscape: true,
-               closeText: 'close',
-               dialogClass: '',
+               closeText: "close",
+               dialogClass: "",
                draggable: true,
                hide: null,
-               height: 'auto',
+               height: "auto",
                maxHeight: false,
                maxWidth: false,
                minHeight: 150,
                minWidth: 150,
                modal: false,
                position: {
-                       my: 'center',
-                       at: 'center',
-                       collision: 'fit',
+                       my: "center",
+                       at: "center",
+                       of: window,
+                       collision: "fit",
                        // ensure that the titlebar is never outside the document
-                       using: function(pos) {
-                               var topOffset = $(this).css(pos).offset().top;
-                               if (topOffset < 0) {
-                                       $(this).css('top', pos.top - topOffset);
+                       using: function( pos ) {
+                               var topOffset = $( this ).css( pos ).offset().top;
+                               if ( topOffset < 0 ) {
+                                       $( this ).css( "top", pos.top - topOffset );
                                }
                        }
                },
                resizable: true,
                show: null,
                stack: true,
-               title: '',
+               title: "",
                width: 300,
                zIndex: 1000
        },
 
        _create: function() {
-               this.originalTitle = this.element.attr('title');
+               this.originalTitle = this.element.attr( "title" );
                // #5742 - .attr() might return a DOMElement
                if ( typeof this.originalTitle !== "string" ) {
                        this.originalTitle = "";
                }
-
+               this.oldPosition = {
+                       parent: this.element.parent(),
+                       index: this.element.parent().children().index( this.element )
+               };
                this.options.title = this.options.title || this.originalTitle;
-               var self = this,
-                       options = self.options,
-
-                       title = options.title || '&#160;',
-                       titleId = $.ui.dialog.getTitleId(self.element),
-
-                       uiDialog = (self.uiDialog = $('<div></div>'))
-                               .appendTo(document.body)
-                               .hide()
-                               .addClass(uiDialogClasses + options.dialogClass)
+               var that = this,
+                       options = this.options,
+
+                       title = options.title || "&#160;",
+                       uiDialog,
+                       uiDialogTitlebar,
+                       uiDialogTitlebarClose,
+                       uiDialogTitle,
+                       uiDialogButtonPane;
+
+                       uiDialog = ( this.uiDialog = $( "<div>" ) )
+                               .addClass( uiDialogClasses + options.dialogClass )
                                .css({
+                                       display: "none",
+                                       outline: 0, // TODO: move to stylesheet
                                        zIndex: options.zIndex
                                })
                                // setting tabIndex makes the div focusable
-                               // setting outline to 0 prevents a border on focus in Mozilla
-                               .attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
-                                       if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
-                                               event.keyCode === $.ui.keyCode.ESCAPE) {
-                                               
-                                               self.close(event);
+                               .attr( "tabIndex", -1)
+                               .keydown(function( event ) {
+                                       if ( options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+                                                       event.keyCode === $.ui.keyCode.ESCAPE ) {
+                                               that.close( event );
                                                event.preventDefault();
                                        }
                                })
-                               .attr({
-                                       role: 'dialog',
-                                       'aria-labelledby': titleId
+                               .mousedown(function( event ) {
+                                       that.moveToTop( false, event );
                                })
-                               .mousedown(function(event) {
-                                       self.moveToTop(false, event);
-                               }),
+                               .appendTo( "body" );
 
-                       uiDialogContent = self.element
+                       this.element
                                .show()
-                               .removeAttr('title')
-                               .addClass(
-                                       'ui-dialog-content ' +
-                                       'ui-widget-content')
-                               .appendTo(uiDialog),
-
-                       uiDialogTitlebar = (self.uiDialogTitlebar = $('<div></div>'))
-                               .addClass(
-                                       'ui-dialog-titlebar ' +
-                                       'ui-widget-header ' +
-                                       'ui-corner-all ' +
-                                       'ui-helper-clearfix'
-                               )
-                               .prependTo(uiDialog),
-
-                       uiDialogTitlebarClose = $('<a href="#"></a>')
-                               .addClass(
-                                       'ui-dialog-titlebar-close ' +
-                                       'ui-corner-all'
-                               )
-                               .attr('role', 'button')
-                               .hover(
-                                       function() {
-                                               uiDialogTitlebarClose.addClass('ui-state-hover');
-                                       },
-                                       function() {
-                                               uiDialogTitlebarClose.removeClass('ui-state-hover');
-                                       }
-                               )
-                               .focus(function() {
-                                       uiDialogTitlebarClose.addClass('ui-state-focus');
-                               })
-                               .blur(function() {
-                                       uiDialogTitlebarClose.removeClass('ui-state-focus');
+                               .removeAttr( "title" )
+                               .addClass( "ui-dialog-content ui-widget-content" )
+                               .appendTo( uiDialog );
+
+                       uiDialogTitlebar = ( this.uiDialogTitlebar = $( "<div>" ) )
+                               .addClass( "ui-dialog-titlebar  ui-widget-header  " +
+                                       "ui-corner-all  ui-helper-clearfix" )
+                               .bind( "mousedown", function() {
+                                       // Dialog isn't getting focus when dragging (#8063)
+                                       uiDialog.focus();
                                })
-                               .click(function(event) {
-                                       self.close(event);
-                                       return false;
+                               .prependTo( uiDialog );
+
+                       uiDialogTitlebarClose = $( "<a href='#'></a>" )
+                               .addClass( "ui-dialog-titlebar-close  ui-corner-all" )
+                               .attr( "role", "button" )
+                               .click(function( event ) {
+                                       event.preventDefault();
+                                       that.close( event );
                                })
-                               .appendTo(uiDialogTitlebar),
+                               .appendTo( uiDialogTitlebar );
 
-                       uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('<span></span>'))
-                               .addClass(
-                                       'ui-icon ' +
-                                       'ui-icon-closethick'
-                               )
-                               .text(options.closeText)
-                               .appendTo(uiDialogTitlebarClose),
+                       ( this.uiDialogTitlebarCloseText = $( "<span>" ) )
+                               .addClass( "ui-icon ui-icon-closethick" )
+                               .text( options.closeText )
+                               .appendTo( uiDialogTitlebarClose );
 
-                       uiDialogTitle = $('<span></span>')
-                               .addClass('ui-dialog-title')
-                               .attr('id', titleId)
-                               .html(title)
-                               .prependTo(uiDialogTitlebar);
+                       uiDialogTitle = $( "<span>" )
+                               .uniqueId()
+                               .addClass( "ui-dialog-title" )
+                               .html( title )
+                               .prependTo( uiDialogTitlebar );
 
-               //handling of deprecated beforeclose (vs beforeClose) option
-               //Ticket #4669 http://dev.jqueryui.com/ticket/4669
-               //TODO: remove in 1.9pre
-               if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) {
-                       options.beforeClose = options.beforeclose;
-               }
+                       uiDialogButtonPane = ( this.uiDialogButtonPane = $( "<div>" ) )
+                               .addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" );
+
+                       ( this.uiButtonSet = $( "<div>" ) )
+                               .addClass( "ui-dialog-buttonset" )
+                               .appendTo( uiDialogButtonPane );
 
-               uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();
+               uiDialog.attr({
+                       role: "dialog",
+                       "aria-labelledby": uiDialogTitle.attr( "id" )
+               });
 
-               if (options.draggable && $.fn.draggable) {
-                       self._makeDraggable();
+               uiDialogTitlebar.find( "*" ).add( uiDialogTitlebar ).disableSelection();
+               this._hoverable( uiDialogTitlebarClose );
+               this._focusable( uiDialogTitlebarClose );
+
+               if ( options.draggable && $.fn.draggable ) {
+                       this._makeDraggable();
                }
-               if (options.resizable && $.fn.resizable) {
-                       self._makeResizable();
+               if ( options.resizable && $.fn.resizable ) {
+                       this._makeResizable();
                }
 
-               self._createButtons(options.buttons);
-               self._isOpen = false;
+               this._createButtons( options.buttons );
+               this._isOpen = false;
 
-               if ($.fn.bgiframe) {
+               if ( $.fn.bgiframe ) {
                        uiDialog.bgiframe();
                }
+
+               // prevent tabbing out of modal dialogs
+               this._on( uiDialog, { keydown: function( event ) {
+                       if ( !options.modal || event.keyCode !== $.ui.keyCode.TAB ) {
+                               return;
+                       }
+
+                       var tabbables = $( ":tabbable", uiDialog ),
+                               first = tabbables.filter( ":first" ),
+                               last  = tabbables.filter( ":last" );
+
+                       if ( event.target === last[0] && !event.shiftKey ) {
+                               first.focus( 1 );
+                               return false;
+                       } else if ( event.target === first[0] && event.shiftKey ) {
+                               last.focus( 1 );
+                               return false;
+                       }
+               }});
        },
 
        _init: function() {
@@ -200,72 +206,81 @@ $.widget("ui.dialog", {
                }
        },
 
-       destroy: function() {
-               var self = this;
-               
-               if (self.overlay) {
-                       self.overlay.destroy();
+       _destroy: function() {
+               var next,
+                       oldPosition = this.oldPosition;
+
+               if ( this.overlay ) {
+                       this.overlay.destroy();
                }
-               self.uiDialog.hide();
-               self.element
-                       .unbind('.dialog')
-                       .removeData('dialog')
-                       .removeClass('ui-dialog-content ui-widget-content')
-                       .hide().appendTo('body');
-               self.uiDialog.remove();
+               this.uiDialog.hide();
+               this.element
+                       .removeClass( "ui-dialog-content ui-widget-content" )
+                       .hide()
+                       .appendTo( "body" );
+               this.uiDialog.remove();
 
-               if (self.originalTitle) {
-                       self.element.attr('title', self.originalTitle);
+               if ( this.originalTitle ) {
+                       this.element.attr( "title", this.originalTitle );
                }
 
-               return self;
+               next = oldPosition.parent.children().eq( oldPosition.index );
+               // Don't try to place the dialog next to itself (#8613)
+               if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
+                       next.before( this.element );
+               } else {
+                       oldPosition.parent.append( this.element );
+               }
        },
 
        widget: function() {
                return this.uiDialog;
        },
 
-       close: function(event) {
-               var self = this,
+       close: function( event ) {
+               var that = this,
                        maxZ, thisZ;
-               
-               if (false === self._trigger('beforeClose', event)) {
+
+               if ( !this._isOpen ) {
                        return;
                }
 
-               if (self.overlay) {
-                       self.overlay.destroy();
+               if ( false === this._trigger( "beforeClose", event ) ) {
+                       return;
                }
-               self.uiDialog.unbind('keypress.ui-dialog');
 
-               self._isOpen = false;
+               this._isOpen = false;
+
+               if ( this.overlay ) {
+                       this.overlay.destroy();
+               }
 
-               if (self.options.hide) {
-                       self.uiDialog.hide(self.options.hide, function() {
-                               self._trigger('close', event);
+               if ( this.options.hide ) {
+                       this._hide( this.uiDialog, this.options.hide, function() {
+                               that._trigger( "close", event );
                        });
                } else {
-                       self.uiDialog.hide();
-                       self._trigger('close', event);
+                       this.uiDialog.hide();
+                       this._trigger( "close", event );
                }
 
                $.ui.dialog.overlay.resize();
 
                // adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
-               if (self.options.modal) {
+               if ( this.options.modal ) {
                        maxZ = 0;
-                       $('.ui-dialog').each(function() {
-                               if (this !== self.uiDialog[0]) {
-                                       thisZ = $(this).css('z-index');
-                                       if(!isNaN(thisZ)) {
-                                               maxZ = Math.max(maxZ, thisZ);
+                       $( ".ui-dialog" ).each(function() {
+                               if ( this !== that.uiDialog[0] ) {
+                                       thisZ = $( this ).css( "z-index" );
+                                       if ( !isNaN( thisZ ) ) {
+                                               maxZ = Math.max( maxZ, thisZ );
                                        }
                                }
                        });
                        $.ui.dialog.maxZ = maxZ;
                }
 
-               return self;
+               return this;
        },
 
        isOpen: function() {
@@ -274,179 +289,158 @@ $.widget("ui.dialog", {
 
        // the force parameter allows us to move modal dialogs to their correct
        // position on open
-       moveToTop: function(force, event) {
-               var self = this,
-                       options = self.options,
+       moveToTop: function( force, event ) {
+               var options = this.options,
                        saveScroll;
 
-               if ((options.modal && !force) ||
-                       (!options.stack && !options.modal)) {
-                       return self._trigger('focus', event);
+               if ( ( options.modal && !force ) ||
+                               ( !options.stack && !options.modal ) ) {
+                       return this._trigger( "focus", event );
                }
 
-               if (options.zIndex > $.ui.dialog.maxZ) {
+               if ( options.zIndex > $.ui.dialog.maxZ ) {
                        $.ui.dialog.maxZ = options.zIndex;
                }
-               if (self.overlay) {
+               if ( this.overlay ) {
                        $.ui.dialog.maxZ += 1;
-                       self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ);
+                       $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ;
+                       this.overlay.$el.css( "z-index", $.ui.dialog.overlay.maxZ );
                }
 
-               //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.
-               //  http://ui.jquery.com/bugs/ticket/3193
-               saveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() };
+               // Save and then restore scroll
+               // Opera 9.5+ resets when parent z-index is changed.
+               // http://bugs.jqueryui.com/ticket/3193
+               saveScroll = {
+                       scrollTop: this.element.scrollTop(),
+                       scrollLeft: this.element.scrollLeft()
+               };
                $.ui.dialog.maxZ += 1;
-               self.uiDialog.css('z-index', $.ui.dialog.maxZ);
-               self.element.attr(saveScroll);
-               self._trigger('focus', event);
+               this.uiDialog.css( "z-index", $.ui.dialog.maxZ );
+               this.element.attr( saveScroll );
+               this._trigger( "focus", event );
 
-               return self;
+               return this;
        },
 
        open: function() {
-               if (this._isOpen) { return; }
-
-               var self = this,
-                       options = self.options,
-                       uiDialog = self.uiDialog;
-
-               self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null;
-               self._size();
-               self._position(options.position);
-               uiDialog.show(options.show);
-               self.moveToTop(true);
+               if ( this._isOpen ) {
+                       return;
+               }
 
-               // prevent tabbing out of modal dialogs
-               if ( options.modal ) {
-                       uiDialog.bind( "keydown.ui-dialog", function( event ) {
-                               if ( event.keyCode !== $.ui.keyCode.TAB ) {
-                                       return;
-                               }
+               var hasFocus,
+                       options = this.options,
+                       uiDialog = this.uiDialog;
 
-                               var tabbables = $(':tabbable', this),
-                                       first = tabbables.filter(':first'),
-                                       last  = tabbables.filter(':last');
-
-                               if (event.target === last[0] && !event.shiftKey) {
-                                       first.focus(1);
-                                       return false;
-                               } else if (event.target === first[0] && event.shiftKey) {
-                                       last.focus(1);
-                                       return false;
-                               }
-                       });
-               }
+               this._size();
+               this._position( options.position );
+               uiDialog.show( options.show );
+               this.overlay = options.modal ? new $.ui.dialog.overlay( this ) : null;
+               this.moveToTop( true );
 
                // set focus to the first tabbable element in the content area or the first button
                // if there are no tabbable elements, set focus on the dialog itself
-               $(self.element.find(':tabbable').get().concat(
-                       uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat(
-                               uiDialog.get()))).eq(0).focus();
+               hasFocus = this.element.find( ":tabbable" );
+               if ( !hasFocus.length ) {
+                       hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
+                       if ( !hasFocus.length ) {
+                               hasFocus = uiDialog;
+                       }
+               }
+               hasFocus.eq( 0 ).focus();
 
-               self._isOpen = true;
-               self._trigger('open');
+               this._isOpen = true;
+               this._trigger( "open" );
 
-               return self;
+               return this;
        },
 
-       _createButtons: function(buttons) {
-               var self = this,
-                       hasButtons = false,
-                       uiDialogButtonPane = $('<div></div>')
-                               .addClass(
-                                       'ui-dialog-buttonpane ' +
-                                       'ui-widget-content ' +
-                                       'ui-helper-clearfix'
-                               ),
-                       uiButtonSet = $( "<div></div>" )
-                               .addClass( "ui-dialog-buttonset" )
-                               .appendTo( uiDialogButtonPane );
+       _createButtons: function( buttons ) {
+               var that = this,
+                       hasButtons = false;
 
                // if we already have a button pane, remove it
-               self.uiDialog.find('.ui-dialog-buttonpane').remove();
+               this.uiDialogButtonPane.remove();
+               this.uiButtonSet.empty();
 
-               if (typeof buttons === 'object' && buttons !== null) {
-                       $.each(buttons, function() {
+               if ( typeof buttons === "object" && buttons !== null ) {
+                       $.each( buttons, function() {
                                return !(hasButtons = true);
                        });
                }
-               if (hasButtons) {
-                       $.each(buttons, function(name, props) {
+               if ( hasButtons ) {
+                       $.each( buttons, function( name, props ) {
+                               var button, click;
                                props = $.isFunction( props ) ?
                                        { click: props, text: name } :
                                        props;
-                               var button = $('<button type="button"></button>')
-                                       .click(function() {
-                                               props.click.apply(self.element[0], arguments);
-                                       })
-                                       .appendTo(uiButtonSet);
-                               // can't use .attr( props, true ) with jQuery 1.3.2.
-                               $.each( props, function( key, value ) {
-                                       if ( key === "click" ) {
-                                               return;
-                                       }
-                                       if ( key in button ) {
-                                               button[ key ]( value );
-                                       } else {
-                                               button.attr( key, value );
-                                       }
-                               });
-                               if ($.fn.button) {
+                               // Default to a non-submitting button
+                               props = $.extend( { type: "button" }, props );
+                               // Change the context for the click callback to be the main element
+                               click = props.click;
+                               props.click = function() {
+                                       click.apply( that.element[0], arguments );
+                               };
+                               button = $( "<button></button>", props )
+                                       .appendTo( that.uiButtonSet );
+                               if ( $.fn.button ) {
                                        button.button();
                                }
                        });
-                       uiDialogButtonPane.appendTo(self.uiDialog);
+                       this.uiDialog.addClass( "ui-dialog-buttons" );
+                       this.uiDialogButtonPane.appendTo( this.uiDialog );
+               } else {
+                       this.uiDialog.removeClass( "ui-dialog-buttons" );
                }
        },
 
        _makeDraggable: function() {
-               var self = this,
-                       options = self.options,
-                       doc = $(document),
-                       heightBeforeDrag;
+               var that = this,
+                       options = this.options;
 
-               function filteredUi(ui) {
+               function filteredUi( ui ) {
                        return {
                                position: ui.position,
                                offset: ui.offset
                        };
                }
 
-               self.uiDialog.draggable({
-                       cancel: '.ui-dialog-content, .ui-dialog-titlebar-close',
-                       handle: '.ui-dialog-titlebar',
-                       containment: 'document',
-                       start: function(event, ui) {
-                               heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height();
-                               $(this).height($(this).height()).addClass("ui-dialog-dragging");
-                               self._trigger('dragStart', event, filteredUi(ui));
+               this.uiDialog.draggable({
+                       cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+                       handle: ".ui-dialog-titlebar",
+                       containment: "document",
+                       start: function( event, ui ) {
+                               $( this )
+                                       .addClass( "ui-dialog-dragging" );
+                               that._trigger( "dragStart", event, filteredUi( ui ) );
                        },
-                       drag: function(event, ui) {
-                               self._trigger('drag', event, filteredUi(ui));
+                       drag: function( event, ui ) {
+                               that._trigger( "drag", event, filteredUi( ui ) );
                        },
-                       stop: function(event, ui) {
-                               options.position = [ui.position.left - doc.scrollLeft(),
-                                       ui.position.top - doc.scrollTop()];
-                               $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);
-                               self._trigger('dragStop', event, filteredUi(ui));
+                       stop: function( event, ui ) {
+                               options.position = [
+                                       ui.position.left - that.document.scrollLeft(),
+                                       ui.position.top - that.document.scrollTop()
+                               ];
+                               $( this )
+                                       .removeClass( "ui-dialog-dragging" );
+                               that._trigger( "dragStop", event, filteredUi( ui ) );
                                $.ui.dialog.overlay.resize();
                        }
                });
        },
 
-       _makeResizable: function(handles) {
+       _makeResizable: function( handles ) {
                handles = (handles === undefined ? this.options.resizable : handles);
-               var self = this,
-                       options = self.options,
+               var that = this,
+                       options = this.options,
                        // .ui-resizable has position: relative defined in the stylesheet
                        // but dialogs have to use absolute or fixed positioning
-                       position = self.uiDialog.css('position'),
-                       resizeHandles = (typeof handles === 'string' ?
+                       position = this.uiDialog.css( "position" ),
+                       resizeHandles = typeof handles === 'string' ?
                                handles :
-                               'n,e,s,w,se,sw,ne,nw'
-                       );
+                               "n,e,s,w,se,sw,ne,nw";
 
-               function filteredUi(ui) {
+               function filteredUi( ui ) {
                        return {
                                originalPosition: ui.originalPosition,
                                originalSize: ui.originalSize,
@@ -455,101 +449,99 @@ $.widget("ui.dialog", {
                        };
                }
 
-               self.uiDialog.resizable({
-                       cancel: '.ui-dialog-content',
-                       containment: 'document',
-                       alsoResize: self.element,
+               this.uiDialog.resizable({
+                       cancel: ".ui-dialog-content",
+                       containment: "document",
+                       alsoResize: this.element,
                        maxWidth: options.maxWidth,
                        maxHeight: options.maxHeight,
                        minWidth: options.minWidth,
-                       minHeight: self._minHeight(),
+                       minHeight: this._minHeight(),
                        handles: resizeHandles,
-                       start: function(event, ui) {
-                               $(this).addClass("ui-dialog-resizing");
-                               self._trigger('resizeStart', event, filteredUi(ui));
+                       start: function( event, ui ) {
+                               $( this ).addClass( "ui-dialog-resizing" );
+                               that._trigger( "resizeStart", event, filteredUi( ui ) );
                        },
-                       resize: function(event, ui) {
-                               self._trigger('resize', event, filteredUi(ui));
+                       resize: function( event, ui ) {
+                               that._trigger( "resize", event, filteredUi( ui ) );
                        },
-                       stop: function(event, ui) {
-                               $(this).removeClass("ui-dialog-resizing");
-                               options.height = $(this).height();
-                               options.width = $(this).width();
-                               self._trigger('resizeStop', event, filteredUi(ui));
+                       stop: function( event, ui ) {
+                               $( this ).removeClass( "ui-dialog-resizing" );
+                               options.height = $( this ).height();
+                               options.width = $( this ).width();
+                               that._trigger( "resizeStop", event, filteredUi( ui ) );
                                $.ui.dialog.overlay.resize();
                        }
                })
-               .css('position', position)
-               .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');
+               .css( "position", position )
+               .find( ".ui-resizable-se" )
+                       .addClass( "ui-icon ui-icon-grip-diagonal-se" );
        },
 
        _minHeight: function() {
                var options = this.options;
 
-               if (options.height === 'auto') {
+               if ( options.height === "auto" ) {
                        return options.minHeight;
                } else {
-                       return Math.min(options.minHeight, options.height);
+                       return Math.min( options.minHeight, options.height );
                }
        },
 
-       _position: function(position) {
+       _position: function( position ) {
                var myAt = [],
-                       offset = [0, 0],
+                       offset = [ 0, 0 ],
                        isVisible;
 
-               if (position) {
+               if ( position ) {
                        // deep extending converts arrays to objects in jQuery <= 1.3.2 :-(
        //              if (typeof position == 'string' || $.isArray(position)) {
        //                      myAt = $.isArray(position) ? position : position.split(' ');
 
-                       if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) {
-                               myAt = position.split ? position.split(' ') : [position[0], position[1]];
-                               if (myAt.length === 1) {
-                                       myAt[1] = myAt[0];
+                       if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
+                               myAt = position.split ? position.split( " " ) : [ position[ 0 ], position[ 1 ] ];
+                               if ( myAt.length === 1 ) {
+                                       myAt[ 1 ] = myAt[ 0 ];
                                }
 
-                               $.each(['left', 'top'], function(i, offsetPosition) {
-                                       if (+myAt[i] === myAt[i]) {
-                                               offset[i] = myAt[i];
-                                               myAt[i] = offsetPosition;
+                               $.each( [ "left", "top" ], function( i, offsetPosition ) {
+                                       if ( +myAt[ i ] === myAt[ i ] ) {
+                                               offset[ i ] = myAt[ i ];
+                                               myAt[ i ] = offsetPosition;
                                        }
                                });
 
                                position = {
-                                       my: myAt.join(" "),
-                                       at: myAt.join(" "),
-                                       offset: offset.join(" ")
+                                       my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
+                                               myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
+                                       at: myAt.join( " " )
                                };
-                       } 
+                       }
 
-                       position = $.extend({}, $.ui.dialog.prototype.options.position, position);
+                       position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
                } else {
                        position = $.ui.dialog.prototype.options.position;
                }
 
                // need to show the dialog to get the actual offset in the position plugin
-               isVisible = this.uiDialog.is(':visible');
-               if (!isVisible) {
+               isVisible = this.uiDialog.is( ":visible" );
+               if ( !isVisible ) {
                        this.uiDialog.show();
                }
-               this.uiDialog
-                       // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
-                       .css({ top: 0, left: 0 })
-                       .position($.extend({ of: window }, position));
-               if (!isVisible) {
+               this.uiDialog.position( position );
+               if ( !isVisible ) {
                        this.uiDialog.hide();
                }
        },
 
        _setOptions: function( options ) {
-               var self = this,
+               var that = this,
                        resizableOptions = {},
                        resize = false;
 
                $.each( options, function( key, value ) {
-                       self._setOption( key, value );
-                       
+                       that._setOption( key, value );
+
                        if ( key in sizeRelatedOptions ) {
                                resize = true;
                        }
@@ -566,104 +558,98 @@ $.widget("ui.dialog", {
                }
        },
 
-       _setOption: function(key, value){
-               var self = this,
-                       uiDialog = self.uiDialog;
+       _setOption: function( key, value ) {
+               var isDraggable, isResizable,
+                       uiDialog = this.uiDialog;
 
-               switch (key) {
-                       //handling of deprecated beforeclose (vs beforeClose) option
-                       //Ticket #4669 http://dev.jqueryui.com/ticket/4669
-                       //TODO: remove in 1.9pre
-                       case "beforeclose":
-                               key = "beforeClose";
-                               break;
+               switch ( key ) {
                        case "buttons":
-                               self._createButtons(value);
+                               this._createButtons( value );
                                break;
                        case "closeText":
                                // ensure that we always pass a string
-                               self.uiDialogTitlebarCloseText.text("" + value);
+                               this.uiDialogTitlebarCloseText.text( "" + value );
                                break;
                        case "dialogClass":
                                uiDialog
-                                       .removeClass(self.options.dialogClass)
-                                       .addClass(uiDialogClasses + value);
+                                       .removeClass( this.options.dialogClass )
+                                       .addClass( uiDialogClasses + value );
                                break;
                        case "disabled":
-                               if (value) {
-                                       uiDialog.addClass('ui-dialog-disabled');
+                               if ( value ) {
+                                       uiDialog.addClass( "ui-dialog-disabled" );
                                } else {
-                                       uiDialog.removeClass('ui-dialog-disabled');
+                                       uiDialog.removeClass( "ui-dialog-disabled" );
                                }
                                break;
                        case "draggable":
-                               var isDraggable = uiDialog.is( ":data(draggable)" );
+                               isDraggable = uiDialog.is( ":data(draggable)" );
                                if ( isDraggable && !value ) {
                                        uiDialog.draggable( "destroy" );
                                }
-                               
+
                                if ( !isDraggable && value ) {
-                                       self._makeDraggable();
+                                       this._makeDraggable();
                                }
                                break;
                        case "position":
-                               self._position(value);
+                               this._position( value );
                                break;
                        case "resizable":
                                // currently resizable, becoming non-resizable
-                               var isResizable = uiDialog.is( ":data(resizable)" );
-                               if (isResizable && !value) {
-                                       uiDialog.resizable('destroy');
+                               isResizable = uiDialog.is( ":data(resizable)" );
+                               if ( isResizable && !value ) {
+                                       uiDialog.resizable( "destroy" );
                                }
 
                                // currently resizable, changing handles
-                               if (isResizable && typeof value === 'string') {
-                                       uiDialog.resizable('option', 'handles', value);
+                               if ( isResizable && typeof value === "string" ) {
+                                       uiDialog.resizable( "option", "handles", value );
                                }
 
                                // currently non-resizable, becoming resizable
-                               if (!isResizable && value !== false) {
-                                       self._makeResizable(value);
+                               if ( !isResizable && value !== false ) {
+                                       this._makeResizable( value );
                                }
                                break;
                        case "title":
                                // convert whatever was passed in o a string, for html() to not throw up
-                               $(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || '&#160;'));
+                               $( ".ui-dialog-title", this.uiDialogTitlebar )
+                                       .html( "" + ( value || "&#160;" ) );
                                break;
                }
 
-               $.Widget.prototype._setOption.apply(self, arguments);
+               this._super( key, value );
        },
 
        _size: function() {
                /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
                 * divs will both have width and height set, so we need to reset them
                 */
-               var options = this.options,
-                       nonContentHeight,
-                       minContentHeight,
+               var nonContentHeight, minContentHeight, autoHeight,
+                       options = this.options,
                        isVisible = this.uiDialog.is( ":visible" );
 
                // reset content sizing
                this.element.show().css({
-                       width: 'auto',
+                       width: "auto",
                        minHeight: 0,
                        height: 0
                });
 
-               if (options.minWidth > options.width) {
+               if ( options.minWidth > options.width ) {
                        options.width = options.minWidth;
                }
 
                // reset wrapper sizing
                // determine the height of all the non-content elements
                nonContentHeight = this.uiDialog.css({
-                               height: 'auto',
+                               height: "auto",
                                width: options.width
                        })
-                       .height();
+                       .outerHeight();
                minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
-               
+
                if ( options.height === "auto" ) {
                        // only needed for IE6 support
                        if ( $.support.minHeight ) {
@@ -673,7 +659,7 @@ $.widget("ui.dialog", {
                                });
                        } else {
                                this.uiDialog.show();
-                               var autoHeight = this.element.css( "height", "auto" ).height();
+                               autoHeight = this.element.css( "height", "auto" ).height();
                                if ( !isVisible ) {
                                        this.uiDialog.hide();
                                }
@@ -683,102 +669,108 @@ $.widget("ui.dialog", {
                        this.element.height( Math.max( options.height - nonContentHeight, 0 ) );
                }
 
-               if (this.uiDialog.is(':data(resizable)')) {
-                       this.uiDialog.resizable('option', 'minHeight', this._minHeight());
+               if (this.uiDialog.is( ":data(resizable)" ) ) {
+                       this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
                }
        }
 });
 
 $.extend($.ui.dialog, {
-       version: "1.8.24",
-
        uuid: 0,
        maxZ: 0,
 
        getTitleId: function($el) {
-               var id = $el.attr('id');
-               if (!id) {
+               var id = $el.attr( "id" );
+               if ( !id ) {
                        this.uuid += 1;
                        id = this.uuid;
                }
-               return 'ui-dialog-title-' + id;
+               return "ui-dialog-title-" + id;
        },
 
-       overlay: function(dialog) {
-               this.$el = $.ui.dialog.overlay.create(dialog);
+       overlay: function( dialog ) {
+               this.$el = $.ui.dialog.overlay.create( dialog );
        }
 });
 
-$.extend($.ui.dialog.overlay, {
+$.extend( $.ui.dialog.overlay, {
        instances: [],
        // reuse old instances due to IE memory leak with alpha transparency (see #5185)
        oldInstances: [],
        maxZ: 0,
-       events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
-               function(event) { return event + '.dialog-overlay'; }).join(' '),
-       create: function(dialog) {
-               if (this.instances.length === 0) {
+       events: $.map(
+               "focus,mousedown,mouseup,keydown,keypress,click".split( "," ),
+               function( event ) {
+                       return event + ".dialog-overlay";
+               }
+       ).join( " " ),
+       create: function( dialog ) {
+               if ( this.instances.length === 0 ) {
                        // prevent use of anchors and inputs
                        // we use a setTimeout in case the overlay is created from an
                        // event that we're going to be cancelling (see #2804)
                        setTimeout(function() {
                                // handle $(el).dialog().dialog('close') (see #4065)
-                               if ($.ui.dialog.overlay.instances.length) {
-                                       $(document).bind($.ui.dialog.overlay.events, function(event) {
+                               if ( $.ui.dialog.overlay.instances.length ) {
+                                       $( document ).bind( $.ui.dialog.overlay.events, function( event ) {
                                                // stop events if the z-index of the target is < the z-index of the overlay
                                                // we cannot return true when we don't want to cancel the event (#3523)
-                                               if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) {
+                                               if ( $( event.target ).zIndex() < $.ui.dialog.overlay.maxZ ) {
                                                        return false;
                                                }
                                        });
                                }
-                       }, 1);
-
-                       // allow closing by pressing the escape key
-                       $(document).bind('keydown.dialog-overlay', function(event) {
-                               if (dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
-                                       event.keyCode === $.ui.keyCode.ESCAPE) {
-                                       
-                                       dialog.close(event);
-                                       event.preventDefault();
-                               }
-                       });
+                       }, 1 );
 
                        // handle window resize
-                       $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);
+                       $( window ).bind( "resize.dialog-overlay", $.ui.dialog.overlay.resize );
                }
 
-               var $el = (this.oldInstances.pop() || $('<div></div>').addClass('ui-widget-overlay'))
-                       .appendTo(document.body)
-                       .css({
-                               width: this.width(),
-                               height: this.height()
-                       });
+               var $el = ( this.oldInstances.pop() || $( "<div>" ).addClass( "ui-widget-overlay" ) );
 
-               if ($.fn.bgiframe) {
+               // allow closing by pressing the escape key
+               $( document ).bind( "keydown.dialog-overlay", function( event ) {
+                       var instances = $.ui.dialog.overlay.instances;
+                       // only react to the event if we're the top overlay
+                       if ( instances.length !== 0 && instances[ instances.length - 1 ] === $el &&
+                               dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+                               event.keyCode === $.ui.keyCode.ESCAPE ) {
+
+                               dialog.close( event );
+                               event.preventDefault();
+                       }
+               });
+
+               $el.appendTo( document.body ).css({
+                       width: this.width(),
+                       height: this.height()
+               });
+
+               if ( $.fn.bgiframe ) {
                        $el.bgiframe();
                }
 
-               this.instances.push($el);
+               this.instances.push( $el );
                return $el;
        },
 
-       destroy: function($el) {
-               var indexOf = $.inArray($el, this.instances);
-               if (indexOf != -1){
-                       this.oldInstances.push(this.instances.splice(indexOf, 1)[0]);
+       destroy: function( $el ) {
+               var indexOf = $.inArray( $el, this.instances ),
+                       maxZ = 0;
+
+               if ( indexOf !== -1 ) {
+                       this.oldInstances.push( this.instances.splice( indexOf, 1 )[ 0 ] );
                }
 
-               if (this.instances.length === 0) {
-                       $([document, window]).unbind('.dialog-overlay');
+               if ( this.instances.length === 0 ) {
+                       $( [ document, window ] ).unbind( ".dialog-overlay" );
                }
 
-               $el.remove();
-               
+               $el.height( 0 ).width( 0 ).remove();
+
                // adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
-               var maxZ = 0;
-               $.each(this.instances, function() {
-                       maxZ = Math.max(maxZ, this.css('z-index'));
+               $.each( this.instances, function() {
+                       maxZ = Math.max( maxZ, this.css( "z-index" ) );
                });
                this.maxZ = maxZ;
        },
@@ -786,8 +778,8 @@ $.extend($.ui.dialog.overlay, {
        height: function() {
                var scrollHeight,
                        offsetHeight;
-               // handle IE 6
-               if ($.browser.msie && $.browser.version < 7) {
+               // handle IE
+               if ( $.ui.ie ) {
                        scrollHeight = Math.max(
                                document.documentElement.scrollHeight,
                                document.body.scrollHeight
@@ -797,14 +789,14 @@ $.extend($.ui.dialog.overlay, {
                                document.body.offsetHeight
                        );
 
-                       if (scrollHeight < offsetHeight) {
-                               return $(window).height() + 'px';
+                       if ( scrollHeight < offsetHeight ) {
+                               return $( window ).height() + "px";
                        } else {
-                               return scrollHeight + 'px';
+                               return scrollHeight + "px";
                        }
                // handle "good" browsers
                } else {
-                       return $(document).height() + 'px';
+                       return $( document ).height() + "px";
                }
        },
 
@@ -812,7 +804,7 @@ $.extend($.ui.dialog.overlay, {
                var scrollWidth,
                        offsetWidth;
                // handle IE
-               if ( $.browser.msie ) {
+               if ( $.ui.ie ) {
                        scrollWidth = Math.max(
                                document.documentElement.scrollWidth,
                                document.body.scrollWidth
@@ -822,14 +814,14 @@ $.extend($.ui.dialog.overlay, {
                                document.body.offsetWidth
                        );
 
-                       if (scrollWidth < offsetWidth) {
-                               return $(window).width() + 'px';
+                       if ( scrollWidth < offsetWidth ) {
+                               return $( window ).width() + "px";
                        } else {
-                               return scrollWidth + 'px';
+                               return scrollWidth + "px";
                        }
                // handle "good" browsers
                } else {
-                       return $(document).width() + 'px';
+                       return $( document ).width() + "px";
                }
        },
 
@@ -842,9 +834,9 @@ $.extend($.ui.dialog.overlay, {
                 * This is handled by shrinking the overlay before setting it
                 * to the full document size.
                 */
-               var $overlays = $([]);
-               $.each($.ui.dialog.overlay.instances, function() {
-                       $overlays = $overlays.add(this);
+               var $overlays = $( [] );
+               $.each( $.ui.dialog.overlay.instances, function() {
+                       $overlays = $overlays.add( this );
                });
 
                $overlays.css({
@@ -857,10 +849,10 @@ $.extend($.ui.dialog.overlay, {
        }
 });
 
-$.extend($.ui.dialog.overlay.prototype, {
+$.extend( $.ui.dialog.overlay.prototype, {
        destroy: function() {
-               $.ui.dialog.overlay.destroy(this.$el);
+               $.ui.dialog.overlay.destroy( this.$el );
        }
 });
 
-}(jQuery));
+}( jQuery ) );
index 149035c..3768022 100644 (file)
@@ -1,11 +1,12 @@
 /*!
- * jQuery UI Draggable 1.8.24
+ * jQuery UI Draggable 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Draggables
+ * http://api.jqueryui.com/draggable/
  *
  * Depends:
  *     jquery.ui.core.js
@@ -15,6 +16,7 @@
 (function( $, undefined ) {
 
 $.widget("ui.draggable", $.ui.mouse, {
+       version: "1.9.2",
        widgetEventPrefix: "drag",
        options: {
                addClasses: true,
@@ -54,17 +56,9 @@ $.widget("ui.draggable", $.ui.mouse, {
 
        },
 
-       destroy: function() {
-               if(!this.element.data('draggable')) return;
-               this.element
-                       .removeData("draggable")
-                       .unbind(".draggable")
-                       .removeClass("ui-draggable"
-                               + " ui-draggable-dragging"
-                               + " ui-draggable-disabled");
+       _destroy: function() {
+               this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
                this._mouseDestroy();
-
-               return this;
        },
 
        _mouseCapture: function(event) {
@@ -79,18 +73,16 @@ $.widget("ui.draggable", $.ui.mouse, {
                this.handle = this._getHandle(event);
                if (!this.handle)
                        return false;
-               
-               if ( o.iframeFix ) {
-                       $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
-                               $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
-                               .css({
-                                       width: this.offsetWidth+"px", height: this.offsetHeight+"px",
-                                       position: "absolute", opacity: "0.001", zIndex: 1000
-                               })
-                               .css($(this).offset())
-                               .appendTo("body");
-                       });
-               }
+
+               $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+                       $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
+                       .css({
+                               width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+                               position: "absolute", opacity: "0.001", zIndex: 1000
+                       })
+                       .css($(this).offset())
+                       .appendTo("body");
+               });
 
                return true;
 
@@ -165,12 +157,12 @@ $.widget("ui.draggable", $.ui.mouse, {
                if ($.ui.ddmanager && !o.dropBehaviour)
                        $.ui.ddmanager.prepareOffsets(this, event);
 
-               
+
                this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
-               
+
                //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
                if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event);
-               
+
                return true;
        },
 
@@ -209,7 +201,7 @@ $.widget("ui.draggable", $.ui.mouse, {
                        dropped = this.dropped;
                        this.dropped = false;
                }
-               
+
                //if the original element is no longer in the DOM don't bother to continue (see #8269)
                var element = this.element[0], elementInDom = false;
                while ( element && (element = element.parentNode) ) {
@@ -221,10 +213,10 @@ $.widget("ui.draggable", $.ui.mouse, {
                        return false;
 
                if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
-                       var self = this;
+                       var that = this;
                        $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
-                               if(self._trigger("stop", event) !== false) {
-                                       self._clear();
+                               if(that._trigger("stop", event) !== false) {
+                                       that._clear();
                                }
                        });
                } else {
@@ -235,29 +227,29 @@ $.widget("ui.draggable", $.ui.mouse, {
 
                return false;
        },
-       
+
        _mouseUp: function(event) {
                //Remove frame helpers
-               $("div.ui-draggable-iframeFix").each(function() { 
-                       this.parentNode.removeChild(this); 
+               $("div.ui-draggable-iframeFix").each(function() {
+                       this.parentNode.removeChild(this);
                });
-               
+
                //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
                if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event);
-               
+
                return $.ui.mouse.prototype._mouseUp.call(this, event);
        },
-       
+
        cancel: function() {
-               
+
                if(this.helper.is(".ui-draggable-dragging")) {
                        this._mouseUp({});
                } else {
                        this._clear();
                }
-               
+
                return this;
-               
+
        },
 
        _getHandle: function(event) {
@@ -320,13 +312,13 @@ $.widget("ui.draggable", $.ui.mouse, {
                // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
                // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
                //    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
-               if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
+               if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
                        po.left += this.scrollParent.scrollLeft();
                        po.top += this.scrollParent.scrollTop();
                }
 
                if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
-               || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
+               || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.ui.ie)) //Ugly IE fix
                        po = { top: 0, left: 0 };
 
                return {
@@ -378,7 +370,7 @@ $.widget("ui.draggable", $.ui.mouse, {
                ];
 
                if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
-                       var c = $(o.containment);
+                       var c = $(o.containment);
                        var ce = c[0]; if(!ce) return;
                        var co = c.offset();
                        var over = ($(ce).css("overflow") != 'hidden');
@@ -401,20 +393,20 @@ $.widget("ui.draggable", $.ui.mouse, {
 
                if(!pos) pos = this.position;
                var mod = d == "absolute" ? 1 : -1;
-               var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+               var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
 
                return {
                        top: (
                                pos.top                                                                                                                                 // The absolute mouse position
                                + this.offset.relative.top * mod                                                                                // Only for relative positioned nodes: Relative offset from element to offset parent
                                + this.offset.parent.top * mod                                                                                  // The offsetParent's offset without borders (offset + border)
-                               - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+                               - ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
                        ),
                        left: (
                                pos.left                                                                                                                                // The absolute mouse position
                                + this.offset.relative.left * mod                                                                               // Only for relative positioned nodes: Relative offset from element to offset parent
                                + this.offset.parent.left * mod                                                                                 // The offsetParent's offset without borders (offset + border)
-                               - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+                               - ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
                        )
                };
 
@@ -422,7 +414,7 @@ $.widget("ui.draggable", $.ui.mouse, {
 
        _generatePosition: function(event) {
 
-               var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+               var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
                var pageX = event.pageX;
                var pageY = event.pageY;
 
@@ -432,18 +424,18 @@ $.widget("ui.draggable", $.ui.mouse, {
                 */
 
                if(this.originalPosition) { //If we are not dragging yet, we won't check for options
-                        var containment;
-                        if(this.containment) {
-                                if (this.relative_container){
-                                    var co = this.relative_container.offset();
-                                    containment = [ this.containment[0] + co.left,
-                                                    this.containment[1] + co.top,
-                                                    this.containment[2] + co.left,
-                                                    this.containment[3] + co.top ];
-                                }
-                                else {
-                                    containment = this.containment;
-                                }
+                       var containment;
+                       if(this.containment) {
+                       if (this.relative_container){
+                               var co = this.relative_container.offset();
+                               containment = [ this.containment[0] + co.left,
+                                       this.containment[1] + co.top,
+                                       this.containment[2] + co.left,
+                                       this.containment[3] + co.top ];
+                       }
+                       else {
+                               containment = this.containment;
+                       }
 
                                if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left;
                                if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top;
@@ -468,14 +460,14 @@ $.widget("ui.draggable", $.ui.mouse, {
                                - this.offset.click.top                                                                                                 // Click offset (relative to the element)
                                - this.offset.relative.top                                                                                              // Only for relative positioned nodes: Relative offset from element to offset parent
                                - this.offset.parent.top                                                                                                // The offsetParent's offset without borders (offset + border)
-                               + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+                               + ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
                        ),
                        left: (
                                pageX                                                                                                                           // The absolute mouse position
                                - this.offset.click.left                                                                                                // Click offset (relative to the element)
                                - this.offset.relative.left                                                                                             // Only for relative positioned nodes: Relative offset from element to offset parent
                                - this.offset.parent.left                                                                                               // The offsetParent's offset without borders (offset + border)
-                               + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+                               + ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
                        )
                };
 
@@ -511,10 +503,6 @@ $.widget("ui.draggable", $.ui.mouse, {
 
 });
 
-$.extend($.ui.draggable, {
-       version: "1.8.24"
-});
-
 $.ui.plugin.add("draggable", "connectToSortable", {
        start: function(event, ui) {
 
@@ -570,7 +558,7 @@ $.ui.plugin.add("draggable", "connectToSortable", {
        },
        drag: function(event, ui) {
 
-               var inst = $(this).data("draggable"), self = this;
+               var inst = $(this).data("draggable"), that = this;
 
                var checkPos = function(o) {
                        var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
@@ -582,14 +570,30 @@ $.ui.plugin.add("draggable", "connectToSortable", {
                };
 
                $.each(inst.sortables, function(i) {
-                       
+
+                       var innermostIntersecting = false;
+                       var thisSortable = this;
                        //Copy over some variables to allow calling the sortable's native _intersectsWith
                        this.instance.positionAbs = inst.positionAbs;
                        this.instance.helperProportions = inst.helperProportions;
                        this.instance.offset.click = inst.offset.click;
-                       
+
                        if(this.instance._intersectsWith(this.instance.containerCache)) {
+                               innermostIntersecting = true;
+                               $.each(inst.sortables, function () {
+                                       this.instance.positionAbs = inst.positionAbs;
+                                       this.instance.helperProportions = inst.helperProportions;
+                                       this.instance.offset.click = inst.offset.click;
+                                       if  (this != thisSortable
+                                               && this.instance._intersectsWith(this.instance.containerCache)
+                                               && $.ui.contains(thisSortable.instance.element[0], this.instance.element[0]))
+                                               innermostIntersecting = false;
+                                               return innermostIntersecting;
+                               });
+                       }
 
+
+                       if(innermostIntersecting) {
                                //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
                                if(!this.instance.isOver) {
 
@@ -597,7 +601,7 @@ $.ui.plugin.add("draggable", "connectToSortable", {
                                        //Now we fake the start of dragging for the sortable instance,
                                        //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
                                        //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
-                                       this.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true);
+                                       this.instance.currentItem = $(that).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true);
                                        this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
                                        this.instance.options.helper = function() { return ui.helper[0]; };
 
@@ -630,13 +634,13 @@ $.ui.plugin.add("draggable", "connectToSortable", {
 
                                        this.instance.isOver = 0;
                                        this.instance.cancelHelperRemoval = true;
-                                       
+
                                        //Prevent reverting on this forced stop
                                        this.instance.options.revert = false;
-                                       
+
                                        // The out event needs to be triggered independently
                                        this.instance._trigger('out', event, this.instance._uiHash(this.instance));
-                                       
+
                                        this.instance._mouseStop(event, true);
                                        this.instance.options.helper = this.instance.options._helper;
 
@@ -806,7 +810,7 @@ $.ui.plugin.add("draggable", "stack", {
                        return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
                });
                if (!group.length) { return; }
-               
+
                var min = parseInt(group[0].style.zIndex) || 0;
                $(group).each(function(i) {
                        this.style.zIndex = min + i;
index f17c222..1e9ea51 100644 (file)
@@ -1,11 +1,12 @@
 /*!
- * jQuery UI Droppable 1.8.24
+ * jQuery UI Droppable 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Droppables
+ * http://api.jqueryui.com/droppable/
  *
  * Depends:
  *     jquery.ui.core.js
@@ -16,6 +17,7 @@
 (function( $, undefined ) {
 
 $.widget("ui.droppable", {
+       version: "1.9.2",
        widgetEventPrefix: "drop",
        options: {
                accept: '*',
@@ -46,18 +48,13 @@ $.widget("ui.droppable", {
 
        },
 
-       destroy: function() {
+       _destroy: function() {
                var drop = $.ui.ddmanager.droppables[this.options.scope];
                for ( var i = 0; i < drop.length; i++ )
                        if ( drop[i] == this )
                                drop.splice(i, 1);
 
-               this.element
-                       .removeClass("ui-droppable ui-droppable-disabled")
-                       .removeData("droppable")
-                       .unbind(".droppable");
-
-               return this;
+               this.element.removeClass("ui-droppable ui-droppable-disabled");
        },
 
        _setOption: function(key, value) {
@@ -146,10 +143,6 @@ $.widget("ui.droppable", {
 
 });
 
-$.extend($.ui.droppable, {
-       version: "1.8.24"
-});
-
 $.ui.intersect = function(draggable, droppable, toleranceMode) {
 
        if (!droppable.offset) return false;
@@ -240,7 +233,7 @@ $.ui.ddmanager = {
        },
        dragStart: function( draggable, event ) {
                //Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
-               draggable.element.parents( ":not(body,html)" ).bind( "scroll.droppable", function() {
+               draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
                        if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
                });
        },
@@ -292,7 +285,7 @@ $.ui.ddmanager = {
 
        },
        dragStop: function( draggable, event ) {
-               draggable.element.parents( ":not(body,html)" ).unbind( "scroll.droppable" );
+               draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
                //Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
                if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
        }
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-blind.js b/resources/lib/jquery.ui/jquery.ui.effect-blind.js
new file mode 100644 (file)
index 0000000..e5c7331
--- /dev/null
@@ -0,0 +1,82 @@
+/*!
+ * jQuery UI Effects Blind 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/blind-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+var rvertical = /up|down|vertical/,
+       rpositivemotion = /up|left|vertical|horizontal/;
+
+$.effects.effect.blind = function( o, done ) {
+       // Create element
+       var el = $( this ),
+               props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+               mode = $.effects.setMode( el, o.mode || "hide" ),
+               direction = o.direction || "up",
+               vertical = rvertical.test( direction ),
+               ref = vertical ? "height" : "width",
+               ref2 = vertical ? "top" : "left",
+               motion = rpositivemotion.test( direction ),
+               animation = {},
+               show = mode === "show",
+               wrapper, distance, margin;
+
+       // if already wrapped, the wrapper's properties are my property. #6245
+       if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+               $.effects.save( el.parent(), props );
+       } else {
+               $.effects.save( el, props );
+       }
+       el.show();
+       wrapper = $.effects.createWrapper( el ).css({
+               overflow: "hidden"
+       });
+
+       distance = wrapper[ ref ]();
+       margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+
+       animation[ ref ] = show ? distance : 0;
+       if ( !motion ) {
+               el
+                       .css( vertical ? "bottom" : "right", 0 )
+                       .css( vertical ? "top" : "left", "auto" )
+                       .css({ position: "absolute" });
+
+               animation[ ref2 ] = show ? margin : distance + margin;
+       }
+
+       // start at 0 if we are showing
+       if ( show ) {
+               wrapper.css( ref, 0 );
+               if ( ! motion ) {
+                       wrapper.css( ref2, margin + distance );
+               }
+       }
+
+       // Animate
+       wrapper.animate( animation, {
+               duration: o.duration,
+               easing: o.easing,
+               queue: false,
+               complete: function() {
+                       if ( mode === "hide" ) {
+                               el.hide();
+                       }
+                       $.effects.restore( el, props );
+                       $.effects.removeWrapper( el );
+                       done();
+               }
+       });
+
+};
+
+})(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-bounce.js b/resources/lib/jquery.ui/jquery.ui.effect-bounce.js
new file mode 100644 (file)
index 0000000..ab1977e
--- /dev/null
@@ -0,0 +1,113 @@
+/*!
+ * jQuery UI Effects Bounce 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/bounce-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+$.effects.effect.bounce = function( o, done ) {
+       var el = $( this ),
+               props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+
+               // defaults:
+               mode = $.effects.setMode( el, o.mode || "effect" ),
+               hide = mode === "hide",
+               show = mode === "show",
+               direction = o.direction || "up",
+               distance = o.distance,
+               times = o.times || 5,
+
+               // number of internal animations
+               anims = times * 2 + ( show || hide ? 1 : 0 ),
+               speed = o.duration / anims,
+               easing = o.easing,
+
+               // utility:
+               ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+               motion = ( direction === "up" || direction === "left" ),
+               i,
+               upAnim,
+               downAnim,
+
+               // we will need to re-assemble the queue to stack our animations in place
+               queue = el.queue(),
+               queuelen = queue.length;
+
+       // Avoid touching opacity to prevent clearType and PNG issues in IE
+       if ( show || hide ) {
+               props.push( "opacity" );
+       }
+
+       $.effects.save( el, props );
+       el.show();
+       $.effects.createWrapper( el ); // Create Wrapper
+
+       // default distance for the BIGGEST bounce is the outer Distance / 3
+       if ( !distance ) {
+               distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+       }
+
+       if ( show ) {
+               downAnim = { opacity: 1 };
+               downAnim[ ref ] = 0;
+
+               // if we are showing, force opacity 0 and set the initial position
+               // then do the "first" animation
+               el.css( "opacity", 0 )
+                       .css( ref, motion ? -distance * 2 : distance * 2 )
+                       .animate( downAnim, speed, easing );
+       }
+
+       // start at the smallest distance if we are hiding
+       if ( hide ) {
+               distance = distance / Math.pow( 2, times - 1 );
+       }
+
+       downAnim = {};
+       downAnim[ ref ] = 0;
+       // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+       for ( i = 0; i < times; i++ ) {
+               upAnim = {};
+               upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+               el.animate( upAnim, speed, easing )
+                       .animate( downAnim, speed, easing );
+
+               distance = hide ? distance * 2 : distance / 2;
+       }
+
+       // Last Bounce when Hiding
+       if ( hide ) {
+               upAnim = { opacity: 0 };
+               upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+               el.animate( upAnim, speed, easing );
+       }
+
+       el.queue(function() {
+               if ( hide ) {
+                       el.hide();
+               }
+               $.effects.restore( el, props );
+               $.effects.removeWrapper( el );
+               done();
+       });
+
+       // inject all the animations we just queued to be first in line (after "inprogress")
+       if ( queuelen > 1) {
+               queue.splice.apply( queue,
+                       [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+       }
+       el.dequeue();
+
+};
+
+})(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-clip.js b/resources/lib/jquery.ui/jquery.ui.effect-clip.js
new file mode 100644 (file)
index 0000000..cce037a
--- /dev/null
@@ -0,0 +1,67 @@
+/*!
+ * jQuery UI Effects Clip 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/clip-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+$.effects.effect.clip = function( o, done ) {
+       // Create element
+       var el = $( this ),
+               props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+               mode = $.effects.setMode( el, o.mode || "hide" ),
+               show = mode === "show",
+               direction = o.direction || "vertical",
+               vert = direction === "vertical",
+               size = vert ? "height" : "width",
+               position = vert ? "top" : "left",
+               animation = {},
+               wrapper, animate, distance;
+
+       // Save & Show
+       $.effects.save( el, props );
+       el.show();
+
+       // Create Wrapper
+       wrapper = $.effects.createWrapper( el ).css({
+               overflow: "hidden"
+       });
+       animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+       distance = animate[ size ]();
+
+       // Shift
+       if ( show ) {
+               animate.css( size, 0 );
+               animate.css( position, distance / 2 );
+       }
+
+       // Create Animation Object:
+       animation[ size ] = show ? distance : 0;
+       animation[ position ] = show ? 0 : distance / 2;
+
+       // Animate
+       animate.animate( animation, {
+               queue: false,
+               duration: o.duration,
+               easing: o.easing,
+               complete: function() {
+                       if ( !show ) {
+                               el.hide();
+                       }
+                       $.effects.restore( el, props );
+                       $.effects.removeWrapper( el );
+                       done();
+               }
+       });
+
+};
+
+})(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-drop.js b/resources/lib/jquery.ui/jquery.ui.effect-drop.js
new file mode 100644 (file)
index 0000000..83c8ef4
--- /dev/null
@@ -0,0 +1,65 @@
+/*!
+ * jQuery UI Effects Drop 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/drop-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+$.effects.effect.drop = function( o, done ) {
+
+       var el = $( this ),
+               props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+               mode = $.effects.setMode( el, o.mode || "hide" ),
+               show = mode === "show",
+               direction = o.direction || "left",
+               ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+               motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+               animation = {
+                       opacity: show ? 1 : 0
+               },
+               distance;
+
+       // Adjust
+       $.effects.save( el, props );
+       el.show();
+       $.effects.createWrapper( el );
+
+       distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
+
+       if ( show ) {
+               el
+                       .css( "opacity", 0 )
+                       .css( ref, motion === "pos" ? -distance : distance );
+       }
+
+       // Animation
+       animation[ ref ] = ( show ?
+               ( motion === "pos" ? "+=" : "-=" ) :
+               ( motion === "pos" ? "-=" : "+=" ) ) +
+               distance;
+
+       // Animate
+       el.animate( animation, {
+               queue: false,
+               duration: o.duration,
+               easing: o.easing,
+               complete: function() {
+                       if ( mode === "hide" ) {
+                               el.hide();
+                       }
+                       $.effects.restore( el, props );
+                       $.effects.removeWrapper( el );
+                       done();
+               }
+       });
+};
+
+})(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-explode.js b/resources/lib/jquery.ui/jquery.ui.effect-explode.js
new file mode 100644 (file)
index 0000000..98d5be5
--- /dev/null
@@ -0,0 +1,97 @@
+/*!
+ * jQuery UI Effects Explode 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/explode-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+$.effects.effect.explode = function( o, done ) {
+
+       var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+               cells = rows,
+               el = $( this ),
+               mode = $.effects.setMode( el, o.mode || "hide" ),
+               show = mode === "show",
+
+               // show and then visibility:hidden the element before calculating offset
+               offset = el.show().css( "visibility", "hidden" ).offset(),
+
+               // width and height of a piece
+               width = Math.ceil( el.outerWidth() / cells ),
+               height = Math.ceil( el.outerHeight() / rows ),
+               pieces = [],
+
+               // loop
+               i, j, left, top, mx, my;
+
+       // children animate complete:
+       function childComplete() {
+               pieces.push( this );
+               if ( pieces.length === rows * cells ) {
+                       animComplete();
+               }
+       }
+
+       // clone the element for each row and cell.
+       for( i = 0; i < rows ; i++ ) { // ===>
+               top = offset.top + i * height;
+               my = i - ( rows - 1 ) / 2 ;
+
+               for( j = 0; j < cells ; j++ ) { // |||
+                       left = offset.left + j * width;
+                       mx = j - ( cells - 1 ) / 2 ;
+
+                       // Create a clone of the now hidden main element that will be absolute positioned
+                       // within a wrapper div off the -left and -top equal to size of our pieces
+                       el
+                               .clone()
+                               .appendTo( "body" )
+                               .wrap( "<div></div>" )
+                               .css({
+                                       position: "absolute",
+                                       visibility: "visible",
+                                       left: -j * width,
+                                       top: -i * height
+                               })
+
+                       // select the wrapper - make it overflow: hidden and absolute positioned based on
+                       // where the original was located +left and +top equal to the size of pieces
+                               .parent()
+                               .addClass( "ui-effects-explode" )
+                               .css({
+                                       position: "absolute",
+                                       overflow: "hidden",
+                                       width: width,
+                                       height: height,
+                                       left: left + ( show ? mx * width : 0 ),
+                                       top: top + ( show ? my * height : 0 ),
+                                       opacity: show ? 0 : 1
+                               }).animate({
+                                       left: left + ( show ? 0 : mx * width ),
+                                       top: top + ( show ? 0 : my * height ),
+                                       opacity: show ? 1 : 0
+                               }, o.duration || 500, o.easing, childComplete );
+               }
+       }
+
+       function animComplete() {
+               el.css({
+                       visibility: "visible"
+               });
+               $( pieces ).remove();
+               if ( !show ) {
+                       el.hide();
+               }
+               done();
+       }
+};
+
+})(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-fade.js b/resources/lib/jquery.ui/jquery.ui.effect-fade.js
new file mode 100644 (file)
index 0000000..c79c6f4
--- /dev/null
@@ -0,0 +1,30 @@
+/*!
+ * jQuery UI Effects Fade 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fade-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+$.effects.effect.fade = function( o, done ) {
+       var el = $( this ),
+               mode = $.effects.setMode( el, o.mode || "toggle" );
+
+       el.animate({
+               opacity: mode
+       }, {
+               queue: false,
+               duration: o.duration,
+               easing: o.easing,
+               complete: done
+       });
+};
+
+})( jQuery );
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-fold.js b/resources/lib/jquery.ui/jquery.ui.effect-fold.js
new file mode 100644 (file)
index 0000000..9452c5d
--- /dev/null
@@ -0,0 +1,76 @@
+/*!
+ * jQuery UI Effects Fold 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fold-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+$.effects.effect.fold = function( o, done ) {
+
+       // Create element
+       var el = $( this ),
+               props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+               mode = $.effects.setMode( el, o.mode || "hide" ),
+               show = mode === "show",
+               hide = mode === "hide",
+               size = o.size || 15,
+               percent = /([0-9]+)%/.exec( size ),
+               horizFirst = !!o.horizFirst,
+               widthFirst = show !== horizFirst,
+               ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+               duration = o.duration / 2,
+               wrapper, distance,
+               animation1 = {},
+               animation2 = {};
+
+       $.effects.save( el, props );
+       el.show();
+
+       // Create Wrapper
+       wrapper = $.effects.createWrapper( el ).css({
+               overflow: "hidden"
+       });
+       distance = widthFirst ?
+               [ wrapper.width(), wrapper.height() ] :
+               [ wrapper.height(), wrapper.width() ];
+
+       if ( percent ) {
+               size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+       }
+       if ( show ) {
+               wrapper.css( horizFirst ? {
+                       height: 0,
+                       width: size
+               } : {
+                       height: size,
+                       width: 0
+               });
+       }
+
+       // Animation
+       animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+       animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+
+       // Animate
+       wrapper
+               .animate( animation1, duration, o.easing )
+               .animate( animation2, duration, o.easing, function() {
+                       if ( hide ) {
+                               el.hide();
+                       }
+                       $.effects.restore( el, props );
+                       $.effects.removeWrapper( el );
+                       done();
+               });
+
+};
+
+})(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-highlight.js b/resources/lib/jquery.ui/jquery.ui.effect-highlight.js
new file mode 100644 (file)
index 0000000..d901f80
--- /dev/null
@@ -0,0 +1,50 @@
+/*!
+ * jQuery UI Effects Highlight 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/highlight-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+$.effects.effect.highlight = function( o, done ) {
+       var elem = $( this ),
+               props = [ "backgroundImage", "backgroundColor", "opacity" ],
+               mode = $.effects.setMode( elem, o.mode || "show" ),
+               animation = {
+                       backgroundColor: elem.css( "backgroundColor" )
+               };
+
+       if (mode === "hide") {
+               animation.opacity = 0;
+       }
+
+       $.effects.save( elem, props );
+
+       elem
+               .show()
+               .css({
+                       backgroundImage: "none",
+                       backgroundColor: o.color || "#ffff99"
+               })
+               .animate( animation, {
+                       queue: false,
+                       duration: o.duration,
+                       easing: o.easing,
+                       complete: function() {
+                               if ( mode === "hide" ) {
+                                       elem.hide();
+                               }
+                               $.effects.restore( elem, props );
+                               done();
+                       }
+               });
+};
+
+})(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-pulsate.js b/resources/lib/jquery.ui/jquery.ui.effect-pulsate.js
new file mode 100644 (file)
index 0000000..20f84dd
--- /dev/null
@@ -0,0 +1,63 @@
+/*!
+ * jQuery UI Effects Pulsate 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/pulsate-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+$.effects.effect.pulsate = function( o, done ) {
+       var elem = $( this ),
+               mode = $.effects.setMode( elem, o.mode || "show" ),
+               show = mode === "show",
+               hide = mode === "hide",
+               showhide = ( show || mode === "hide" ),
+
+               // showing or hiding leaves of the "last" animation
+               anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+               duration = o.duration / anims,
+               animateTo = 0,
+               queue = elem.queue(),
+               queuelen = queue.length,
+               i;
+
+       if ( show || !elem.is(":visible")) {
+               elem.css( "opacity", 0 ).show();
+               animateTo = 1;
+       }
+
+       // anims - 1 opacity "toggles"
+       for ( i = 1; i < anims; i++ ) {
+               elem.animate({
+                       opacity: animateTo
+               }, duration, o.easing );
+               animateTo = 1 - animateTo;
+       }
+
+       elem.animate({
+               opacity: animateTo
+       }, duration, o.easing);
+
+       elem.queue(function() {
+               if ( hide ) {
+                       elem.hide();
+               }
+               done();
+       });
+
+       // We just queued up "anims" animations, we need to put them next in the queue
+       if ( queuelen > 1 ) {
+               queue.splice.apply( queue,
+                       [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+       }
+       elem.dequeue();
+};
+
+})(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-scale.js b/resources/lib/jquery.ui/jquery.ui.effect-scale.js
new file mode 100644 (file)
index 0000000..9beac69
--- /dev/null
@@ -0,0 +1,318 @@
+/*!
+ * jQuery UI Effects Scale 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/scale-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+$.effects.effect.puff = function( o, done ) {
+       var elem = $( this ),
+               mode = $.effects.setMode( elem, o.mode || "hide" ),
+               hide = mode === "hide",
+               percent = parseInt( o.percent, 10 ) || 150,
+               factor = percent / 100,
+               original = {
+                       height: elem.height(),
+                       width: elem.width(),
+                       outerHeight: elem.outerHeight(),
+                       outerWidth: elem.outerWidth()
+               };
+
+       $.extend( o, {
+               effect: "scale",
+               queue: false,
+               fade: true,
+               mode: mode,
+               complete: done,
+               percent: hide ? percent : 100,
+               from: hide ?
+                       original :
+                       {
+                               height: original.height * factor,
+                               width: original.width * factor,
+                               outerHeight: original.outerHeight * factor,
+                               outerWidth: original.outerWidth * factor
+                       }
+       });
+
+       elem.effect( o );
+};
+
+$.effects.effect.scale = function( o, done ) {
+
+       // Create element
+       var el = $( this ),
+               options = $.extend( true, {}, o ),
+               mode = $.effects.setMode( el, o.mode || "effect" ),
+               percent = parseInt( o.percent, 10 ) ||
+                       ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+               direction = o.direction || "both",
+               origin = o.origin,
+               original = {
+                       height: el.height(),
+                       width: el.width(),
+                       outerHeight: el.outerHeight(),
+                       outerWidth: el.outerWidth()
+               },
+               factor = {
+                       y: direction !== "horizontal" ? (percent / 100) : 1,
+                       x: direction !== "vertical" ? (percent / 100) : 1
+               };
+
+       // We are going to pass this effect to the size effect:
+       options.effect = "size";
+       options.queue = false;
+       options.complete = done;
+
+       // Set default origin and restore for show/hide
+       if ( mode !== "effect" ) {
+               options.origin = origin || ["middle","center"];
+               options.restore = true;
+       }
+
+       options.from = o.from || ( mode === "show" ? {
+               height: 0,
+               width: 0,
+               outerHeight: 0,
+               outerWidth: 0
+       } : original );
+       options.to = {
+               height: original.height * factor.y,
+               width: original.width * factor.x,
+               outerHeight: original.outerHeight * factor.y,
+               outerWidth: original.outerWidth * factor.x
+       };
+
+       // Fade option to support puff
+       if ( options.fade ) {
+               if ( mode === "show" ) {
+                       options.from.opacity = 0;
+                       options.to.opacity = 1;
+               }
+               if ( mode === "hide" ) {
+                       options.from.opacity = 1;
+                       options.to.opacity = 0;
+               }
+       }
+
+       // Animate
+       el.effect( options );
+
+};
+
+$.effects.effect.size = function( o, done ) {
+
+       // Create element
+       var original, baseline, factor,
+               el = $( this ),
+               props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+
+               // Always restore
+               props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+
+               // Copy for children
+               props2 = [ "width", "height", "overflow" ],
+               cProps = [ "fontSize" ],
+               vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+               hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+
+               // Set options
+               mode = $.effects.setMode( el, o.mode || "effect" ),
+               restore = o.restore || mode !== "effect",
+               scale = o.scale || "both",
+               origin = o.origin || [ "middle", "center" ],
+               position = el.css( "position" ),
+               props = restore ? props0 : props1,
+               zero = {
+                       height: 0,
+                       width: 0,
+                       outerHeight: 0,
+                       outerWidth: 0
+               };
+
+       if ( mode === "show" ) {
+               el.show();
+       }
+       original = {
+               height: el.height(),
+               width: el.width(),
+               outerHeight: el.outerHeight(),
+               outerWidth: el.outerWidth()
+       };
+
+       if ( o.mode === "toggle" && mode === "show" ) {
+               el.from = o.to || zero;
+               el.to = o.from || original;
+       } else {
+               el.from = o.from || ( mode === "show" ? zero : original );
+               el.to = o.to || ( mode === "hide" ? zero : original );
+       }
+
+       // Set scaling factor
+       factor = {
+               from: {
+                       y: el.from.height / original.height,
+                       x: el.from.width / original.width
+               },
+               to: {
+                       y: el.to.height / original.height,
+                       x: el.to.width / original.width
+               }
+       };
+
+       // Scale the css box
+       if ( scale === "box" || scale === "both" ) {
+
+               // Vertical props scaling
+               if ( factor.from.y !== factor.to.y ) {
+                       props = props.concat( vProps );
+                       el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+                       el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+               }
+
+               // Horizontal props scaling
+               if ( factor.from.x !== factor.to.x ) {
+                       props = props.concat( hProps );
+                       el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+                       el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+               }
+       }
+
+       // Scale the content
+       if ( scale === "content" || scale === "both" ) {
+
+               // Vertical props scaling
+               if ( factor.from.y !== factor.to.y ) {
+                       props = props.concat( cProps ).concat( props2 );
+                       el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+                       el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+               }
+       }
+
+       $.effects.save( el, props );
+       el.show();
+       $.effects.createWrapper( el );
+       el.css( "overflow", "hidden" ).css( el.from );
+
+       // Adjust
+       if (origin) { // Calculate baseline shifts
+               baseline = $.effects.getBaseline( origin, original );
+               el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+               el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+               el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+               el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+       }
+       el.css( el.from ); // set top & left
+
+       // Animate
+       if ( scale === "content" || scale === "both" ) { // Scale the children
+
+               // Add margins/font-size
+               vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+               hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+               props2 = props0.concat(vProps).concat(hProps);
+
+               el.find( "*[width]" ).each( function(){
+                       var child = $( this ),
+                               c_original = {
+                                       height: child.height(),
+                                       width: child.width(),
+                                       outerHeight: child.outerHeight(),
+                                       outerWidth: child.outerWidth()
+                               };
+                       if (restore) {
+                               $.effects.save(child, props2);
+                       }
+
+                       child.from = {
+                               height: c_original.height * factor.from.y,
+                               width: c_original.width * factor.from.x,
+                               outerHeight: c_original.outerHeight * factor.from.y,
+                               outerWidth: c_original.outerWidth * factor.from.x
+                       };
+                       child.to = {
+                               height: c_original.height * factor.to.y,
+                               width: c_original.width * factor.to.x,
+                               outerHeight: c_original.height * factor.to.y,
+                               outerWidth: c_original.width * factor.to.x
+                       };
+
+                       // Vertical props scaling
+                       if ( factor.from.y !== factor.to.y ) {
+                               child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+                               child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+                       }
+
+                       // Horizontal props scaling
+                       if ( factor.from.x !== factor.to.x ) {
+                               child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+                               child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+                       }
+
+                       // Animate children
+                       child.css( child.from );
+                       child.animate( child.to, o.duration, o.easing, function() {
+
+                               // Restore children
+                               if ( restore ) {
+                                       $.effects.restore( child, props2 );
+                               }
+                       });
+               });
+       }
+
+       // Animate
+       el.animate( el.to, {
+               queue: false,
+               duration: o.duration,
+               easing: o.easing,
+               complete: function() {
+                       if ( el.to.opacity === 0 ) {
+                               el.css( "opacity", el.from.opacity );
+                       }
+                       if( mode === "hide" ) {
+                               el.hide();
+                       }
+                       $.effects.restore( el, props );
+                       if ( !restore ) {
+
+                               // we need to calculate our new positioning based on the scaling
+                               if ( position === "static" ) {
+                                       el.css({
+                                               position: "relative",
+                                               top: el.to.top,
+                                               left: el.to.left
+                                       });
+                               } else {
+                                       $.each([ "top", "left" ], function( idx, pos ) {
+                                               el.css( pos, function( _, str ) {
+                                                       var val = parseInt( str, 10 ),
+                                                               toRef = idx ? el.to.left : el.to.top;
+
+                                                       // if original was "auto", recalculate the new value from wrapper
+                                                       if ( str === "auto" ) {
+                                                               return toRef + "px";
+                                                       }
+
+                                                       return val + toRef + "px";
+                                               });
+                                       });
+                               }
+                       }
+
+                       $.effects.removeWrapper( el );
+                       done();
+               }
+       });
+
+};
+
+})(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-shake.js b/resources/lib/jquery.ui/jquery.ui.effect-shake.js
new file mode 100644 (file)
index 0000000..216c08b
--- /dev/null
@@ -0,0 +1,74 @@
+/*!
+ * jQuery UI Effects Shake 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/shake-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+$.effects.effect.shake = function( o, done ) {
+
+       var el = $( this ),
+               props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+               mode = $.effects.setMode( el, o.mode || "effect" ),
+               direction = o.direction || "left",
+               distance = o.distance || 20,
+               times = o.times || 3,
+               anims = times * 2 + 1,
+               speed = Math.round(o.duration/anims),
+               ref = (direction === "up" || direction === "down") ? "top" : "left",
+               positiveMotion = (direction === "up" || direction === "left"),
+               animation = {},
+               animation1 = {},
+               animation2 = {},
+               i,
+
+               // we will need to re-assemble the queue to stack our animations in place
+               queue = el.queue(),
+               queuelen = queue.length;
+
+       $.effects.save( el, props );
+       el.show();
+       $.effects.createWrapper( el );
+
+       // Animation
+       animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+       animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+       animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+
+       // Animate
+       el.animate( animation, speed, o.easing );
+
+       // Shakes
+       for ( i = 1; i < times; i++ ) {
+               el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+       }
+       el
+               .animate( animation1, speed, o.easing )
+               .animate( animation, speed / 2, o.easing )
+               .queue(function() {
+                       if ( mode === "hide" ) {
+                               el.hide();
+                       }
+                       $.effects.restore( el, props );
+                       $.effects.removeWrapper( el );
+                       done();
+               });
+
+       // inject all the animations we just queued to be first in line (after "inprogress")
+       if ( queuelen > 1) {
+               queue.splice.apply( queue,
+                       [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+       }
+       el.dequeue();
+
+};
+
+})(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-slide.js b/resources/lib/jquery.ui/jquery.ui.effect-slide.js
new file mode 100644 (file)
index 0000000..445ec48
--- /dev/null
@@ -0,0 +1,64 @@
+/*!
+ * jQuery UI Effects Slide 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slide-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+$.effects.effect.slide = function( o, done ) {
+
+       // Create element
+       var el = $( this ),
+               props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+               mode = $.effects.setMode( el, o.mode || "show" ),
+               show = mode === "show",
+               direction = o.direction || "left",
+               ref = (direction === "up" || direction === "down") ? "top" : "left",
+               positiveMotion = (direction === "up" || direction === "left"),
+               distance,
+               animation = {};
+
+       // Adjust
+       $.effects.save( el, props );
+       el.show();
+       distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+
+       $.effects.createWrapper( el ).css({
+               overflow: "hidden"
+       });
+
+       if ( show ) {
+               el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+       }
+
+       // Animation
+       animation[ ref ] = ( show ?
+               ( positiveMotion ? "+=" : "-=") :
+               ( positiveMotion ? "-=" : "+=")) +
+               distance;
+
+       // Animate
+       el.animate( animation, {
+               queue: false,
+               duration: o.duration,
+               easing: o.easing,
+               complete: function() {
+                       if ( mode === "hide" ) {
+                               el.hide();
+                       }
+                       $.effects.restore( el, props );
+                       $.effects.removeWrapper( el );
+                       done();
+               }
+       });
+};
+
+})(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.effect-transfer.js b/resources/lib/jquery.ui/jquery.ui.effect-transfer.js
new file mode 100644 (file)
index 0000000..f133c04
--- /dev/null
@@ -0,0 +1,47 @@
+/*!
+ * jQuery UI Effects Transfer 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/transfer-effect/
+ *
+ * Depends:
+ *     jquery.ui.effect.js
+ */
+(function( $, undefined ) {
+
+$.effects.effect.transfer = function( o, done ) {
+       var elem = $( this ),
+               target = $( o.to ),
+               targetFixed = target.css( "position" ) === "fixed",
+               body = $("body"),
+               fixTop = targetFixed ? body.scrollTop() : 0,
+               fixLeft = targetFixed ? body.scrollLeft() : 0,
+               endPosition = target.offset(),
+               animation = {
+                       top: endPosition.top - fixTop ,
+                       left: endPosition.left - fixLeft ,
+                       height: target.innerHeight(),
+                       width: target.innerWidth()
+               },
+               startPosition = elem.offset(),
+               transfer = $( '<div class="ui-effects-transfer"></div>' )
+                       .appendTo( document.body )
+                       .addClass( o.className )
+                       .css({
+                               top: startPosition.top - fixTop ,
+                               left: startPosition.left - fixLeft ,
+                               height: elem.innerHeight(),
+                               width: elem.innerWidth(),
+                               position: targetFixed ? "fixed" : "absolute"
+                       })
+                       .animate( animation, o.duration, o.easing, function() {
+                               transfer.remove();
+                               done();
+                       });
+};
+
+})(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.effect.js b/resources/lib/jquery.ui/jquery.ui.effect.js
new file mode 100644 (file)
index 0000000..c8e5818
--- /dev/null
@@ -0,0 +1,1276 @@
+/*!
+ * jQuery UI Effects 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/effects-core/
+ */
+;(jQuery.effects || (function($, undefined) {
+
+var backCompat = $.uiBackCompat !== false,
+       // prefix used for storing data on .data()
+       dataSpace = "ui-effects-";
+
+$.effects = {
+       effect: {}
+};
+
+/*!
+ * jQuery Color Animations v2.0.0
+ * http://jquery.com/
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * Date: Mon Aug 13 13:41:02 2012 -0500
+ */
+(function( jQuery, undefined ) {
+
+       var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor".split(" "),
+
+       // plusequals test for += 100 -= 100
+       rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+       // a set of RE's that can match strings and generate color tuples.
+       stringParsers = [{
+                       re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
+                       parse: function( execResult ) {
+                               return [
+                                       execResult[ 1 ],
+                                       execResult[ 2 ],
+                                       execResult[ 3 ],
+                                       execResult[ 4 ]
+                               ];
+                       }
+               }, {
+                       re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
+                       parse: function( execResult ) {
+                               return [
+                                       execResult[ 1 ] * 2.55,
+                                       execResult[ 2 ] * 2.55,
+                                       execResult[ 3 ] * 2.55,
+                                       execResult[ 4 ]
+                               ];
+                       }
+               }, {
+                       // this regex ignores A-F because it's compared against an already lowercased string
+                       re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+                       parse: function( execResult ) {
+                               return [
+                                       parseInt( execResult[ 1 ], 16 ),
+                                       parseInt( execResult[ 2 ], 16 ),
+                                       parseInt( execResult[ 3 ], 16 )
+                               ];
+                       }
+               }, {
+                       // this regex ignores A-F because it's compared against an already lowercased string
+                       re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+                       parse: function( execResult ) {
+                               return [
+                                       parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+                                       parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+                                       parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+                               ];
+                       }
+               }, {
+                       re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
+                       space: "hsla",
+                       parse: function( execResult ) {
+                               return [
+                                       execResult[ 1 ],
+                                       execResult[ 2 ] / 100,
+                                       execResult[ 3 ] / 100,
+                                       execResult[ 4 ]
+                               ];
+                       }
+               }],
+
+       // jQuery.Color( )
+       color = jQuery.Color = function( color, green, blue, alpha ) {
+               return new jQuery.Color.fn.parse( color, green, blue, alpha );
+       },
+       spaces = {
+               rgba: {
+                       props: {
+                               red: {
+                                       idx: 0,
+                                       type: "byte"
+                               },
+                               green: {
+                                       idx: 1,
+                                       type: "byte"
+                               },
+                               blue: {
+                                       idx: 2,
+                                       type: "byte"
+                               }
+                       }
+               },
+
+               hsla: {
+                       props: {
+                               hue: {
+                                       idx: 0,
+                                       type: "degrees"
+                               },
+                               saturation: {
+                                       idx: 1,
+                                       type: "percent"
+                               },
+                               lightness: {
+                                       idx: 2,
+                                       type: "percent"
+                               }
+                       }
+               }
+       },
+       propTypes = {
+               "byte": {
+                       floor: true,
+                       max: 255
+               },
+               "percent": {
+                       max: 1
+               },
+               "degrees": {
+                       mod: 360,
+                       floor: true
+               }
+       },
+       support = color.support = {},
+
+       // element for support tests
+       supportElem = jQuery( "<p>" )[ 0 ],
+
+       // colors = jQuery.Color.names
+       colors,
+
+       // local aliases of functions called often
+       each = jQuery.each;
+
+// determine rgba support immediately
+supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+
+// define cache name and alpha properties
+// for rgba and hsla spaces
+each( spaces, function( spaceName, space ) {
+       space.cache = "_" + spaceName;
+       space.props.alpha = {
+               idx: 3,
+               type: "percent",
+               def: 1
+       };
+});
+
+function clamp( value, prop, allowEmpty ) {
+       var type = propTypes[ prop.type ] || {};
+
+       if ( value == null ) {
+               return (allowEmpty || !prop.def) ? null : prop.def;
+       }
+
+       // ~~ is an short way of doing floor for positive numbers
+       value = type.floor ? ~~value : parseFloat( value );
+
+       // IE will pass in empty strings as value for alpha,
+       // which will hit this case
+       if ( isNaN( value ) ) {
+               return prop.def;
+       }
+
+       if ( type.mod ) {
+               // we add mod before modding to make sure that negatives values
+               // get converted properly: -10 -> 350
+               return (value + type.mod) % type.mod;
+       }
+
+       // for now all property types without mod have min and max
+       return 0 > value ? 0 : type.max < value ? type.max : value;
+}
+
+function stringParse( string ) {
+       var inst = color(),
+               rgba = inst._rgba = [];
+
+       string = string.toLowerCase();
+
+       each( stringParsers, function( i, parser ) {
+               var parsed,
+                       match = parser.re.exec( string ),
+                       values = match && parser.parse( match ),
+                       spaceName = parser.space || "rgba";
+
+               if ( values ) {
+                       parsed = inst[ spaceName ]( values );
+
+                       // if this was an rgba parse the assignment might happen twice
+                       // oh well....
+                       inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+                       rgba = inst._rgba = parsed._rgba;
+
+                       // exit each( stringParsers ) here because we matched
+                       return false;
+               }
+       });
+
+       // Found a stringParser that handled it
+       if ( rgba.length ) {
+
+               // if this came from a parsed string, force "transparent" when alpha is 0
+               // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+               if ( rgba.join() === "0,0,0,0" ) {
+                       jQuery.extend( rgba, colors.transparent );
+               }
+               return inst;
+       }
+
+       // named colors
+       return colors[ string ];
+}
+
+color.fn = jQuery.extend( color.prototype, {
+       parse: function( red, green, blue, alpha ) {
+               if ( red === undefined ) {
+                       this._rgba = [ null, null, null, null ];
+                       return this;
+               }
+               if ( red.jquery || red.nodeType ) {
+                       red = jQuery( red ).css( green );
+                       green = undefined;
+               }
+
+               var inst = this,
+                       type = jQuery.type( red ),
+                       rgba = this._rgba = [];
+
+               // more than 1 argument specified - assume ( red, green, blue, alpha )
+               if ( green !== undefined ) {
+                       red = [ red, green, blue, alpha ];
+                       type = "array";
+               }
+
+               if ( type === "string" ) {
+                       return this.parse( stringParse( red ) || colors._default );
+               }
+
+               if ( type === "array" ) {
+                       each( spaces.rgba.props, function( key, prop ) {
+                               rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+                       });
+                       return this;
+               }
+
+               if ( type === "object" ) {
+                       if ( red instanceof color ) {
+                               each( spaces, function( spaceName, space ) {
+                                       if ( red[ space.cache ] ) {
+                                               inst[ space.cache ] = red[ space.cache ].slice();
+                                       }
+                               });
+                       } else {
+                               each( spaces, function( spaceName, space ) {
+                                       var cache = space.cache;
+                                       each( space.props, function( key, prop ) {
+
+                                               // if the cache doesn't exist, and we know how to convert
+                                               if ( !inst[ cache ] && space.to ) {
+
+                                                       // if the value was null, we don't need to copy it
+                                                       // if the key was alpha, we don't need to copy it either
+                                                       if ( key === "alpha" || red[ key ] == null ) {
+                                                               return;
+                                                       }
+                                                       inst[ cache ] = space.to( inst._rgba );
+                                               }
+
+                                               // this is the only case where we allow nulls for ALL properties.
+                                               // call clamp with alwaysAllowEmpty
+                                               inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+                                       });
+
+                                       // everything defined but alpha?
+                                       if ( inst[ cache ] && $.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+                                               // use the default of 1
+                                               inst[ cache ][ 3 ] = 1;
+                                               if ( space.from ) {
+                                                       inst._rgba = space.from( inst[ cache ] );
+                                               }
+                                       }
+                               });
+                       }
+                       return this;
+               }
+       },
+       is: function( compare ) {
+               var is = color( compare ),
+                       same = true,
+                       inst = this;
+
+               each( spaces, function( _, space ) {
+                       var localCache,
+                               isCache = is[ space.cache ];
+                       if (isCache) {
+                               localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+                               each( space.props, function( _, prop ) {
+                                       if ( isCache[ prop.idx ] != null ) {
+                                               same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+                                               return same;
+                                       }
+                               });
+                       }
+                       return same;
+               });
+               return same;
+       },
+       _space: function() {
+               var used = [],
+                       inst = this;
+               each( spaces, function( spaceName, space ) {
+                       if ( inst[ space.cache ] ) {
+                               used.push( spaceName );
+                       }
+               });
+               return used.pop();
+       },
+       transition: function( other, distance ) {
+               var end = color( other ),
+                       spaceName = end._space(),
+                       space = spaces[ spaceName ],
+                       startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+                       start = startColor[ space.cache ] || space.to( startColor._rgba ),
+                       result = start.slice();
+
+               end = end[ space.cache ];
+               each( space.props, function( key, prop ) {
+                       var index = prop.idx,
+                               startValue = start[ index ],
+                               endValue = end[ index ],
+                               type = propTypes[ prop.type ] || {};
+
+                       // if null, don't override start value
+                       if ( endValue === null ) {
+                               return;
+                       }
+                       // if null - use end
+                       if ( startValue === null ) {
+                               result[ index ] = endValue;
+                       } else {
+                               if ( type.mod ) {
+                                       if ( endValue - startValue > type.mod / 2 ) {
+                                               startValue += type.mod;
+                                       } else if ( startValue - endValue > type.mod / 2 ) {
+                                               startValue -= type.mod;
+                                       }
+                               }
+                               result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+                       }
+               });
+               return this[ spaceName ]( result );
+       },
+       blend: function( opaque ) {
+               // if we are already opaque - return ourself
+               if ( this._rgba[ 3 ] === 1 ) {
+                       return this;
+               }
+
+               var rgb = this._rgba.slice(),
+                       a = rgb.pop(),
+                       blend = color( opaque )._rgba;
+
+               return color( jQuery.map( rgb, function( v, i ) {
+                       return ( 1 - a ) * blend[ i ] + a * v;
+               }));
+       },
+       toRgbaString: function() {
+               var prefix = "rgba(",
+                       rgba = jQuery.map( this._rgba, function( v, i ) {
+                               return v == null ? ( i > 2 ? 1 : 0 ) : v;
+                       });
+
+               if ( rgba[ 3 ] === 1 ) {
+                       rgba.pop();
+                       prefix = "rgb(";
+               }
+
+               return prefix + rgba.join() + ")";
+       },
+       toHslaString: function() {
+               var prefix = "hsla(",
+                       hsla = jQuery.map( this.hsla(), function( v, i ) {
+                               if ( v == null ) {
+                                       v = i > 2 ? 1 : 0;
+                               }
+
+                               // catch 1 and 2
+                               if ( i && i < 3 ) {
+                                       v = Math.round( v * 100 ) + "%";
+                               }
+                               return v;
+                       });
+
+               if ( hsla[ 3 ] === 1 ) {
+                       hsla.pop();
+                       prefix = "hsl(";
+               }
+               return prefix + hsla.join() + ")";
+       },
+       toHexString: function( includeAlpha ) {
+               var rgba = this._rgba.slice(),
+                       alpha = rgba.pop();
+
+               if ( includeAlpha ) {
+                       rgba.push( ~~( alpha * 255 ) );
+               }
+
+               return "#" + jQuery.map( rgba, function( v ) {
+
+                       // default to 0 when nulls exist
+                       v = ( v || 0 ).toString( 16 );
+                       return v.length === 1 ? "0" + v : v;
+               }).join("");
+       },
+       toString: function() {
+               return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+       }
+});
+color.fn.parse.prototype = color.fn;
+
+// hsla conversions adapted from:
+// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+
+function hue2rgb( p, q, h ) {
+       h = ( h + 1 ) % 1;
+       if ( h * 6 < 1 ) {
+               return p + (q - p) * h * 6;
+       }
+       if ( h * 2 < 1) {
+               return q;
+       }
+       if ( h * 3 < 2 ) {
+               return p + (q - p) * ((2/3) - h) * 6;
+       }
+       return p;
+}
+
+spaces.hsla.to = function ( rgba ) {
+       if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+               return [ null, null, null, rgba[ 3 ] ];
+       }
+       var r = rgba[ 0 ] / 255,
+               g = rgba[ 1 ] / 255,
+               b = rgba[ 2 ] / 255,
+               a = rgba[ 3 ],
+               max = Math.max( r, g, b ),
+               min = Math.min( r, g, b ),
+               diff = max - min,
+               add = max + min,
+               l = add * 0.5,
+               h, s;
+
+       if ( min === max ) {
+               h = 0;
+       } else if ( r === max ) {
+               h = ( 60 * ( g - b ) / diff ) + 360;
+       } else if ( g === max ) {
+               h = ( 60 * ( b - r ) / diff ) + 120;
+       } else {
+               h = ( 60 * ( r - g ) / diff ) + 240;
+       }
+
+       if ( l === 0 || l === 1 ) {
+               s = l;
+       } else if ( l <= 0.5 ) {
+               s = diff / add;
+       } else {
+               s = diff / ( 2 - add );
+       }
+       return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+};
+
+spaces.hsla.from = function ( hsla ) {
+       if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+               return [ null, null, null, hsla[ 3 ] ];
+       }
+       var h = hsla[ 0 ] / 360,
+               s = hsla[ 1 ],
+               l = hsla[ 2 ],
+               a = hsla[ 3 ],
+               q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+               p = 2 * l - q;
+
+       return [
+               Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+               Math.round( hue2rgb( p, q, h ) * 255 ),
+               Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+               a
+       ];
+};
+
+
+each( spaces, function( spaceName, space ) {
+       var props = space.props,
+               cache = space.cache,
+               to = space.to,
+               from = space.from;
+
+       // makes rgba() and hsla()
+       color.fn[ spaceName ] = function( value ) {
+
+               // generate a cache for this space if it doesn't exist
+               if ( to && !this[ cache ] ) {
+                       this[ cache ] = to( this._rgba );
+               }
+               if ( value === undefined ) {
+                       return this[ cache ].slice();
+               }
+
+               var ret,
+                       type = jQuery.type( value ),
+                       arr = ( type === "array" || type === "object" ) ? value : arguments,
+                       local = this[ cache ].slice();
+
+               each( props, function( key, prop ) {
+                       var val = arr[ type === "object" ? key : prop.idx ];
+                       if ( val == null ) {
+                               val = local[ prop.idx ];
+                       }
+                       local[ prop.idx ] = clamp( val, prop );
+               });
+
+               if ( from ) {
+                       ret = color( from( local ) );
+                       ret[ cache ] = local;
+                       return ret;
+               } else {
+                       return color( local );
+               }
+       };
+
+       // makes red() green() blue() alpha() hue() saturation() lightness()
+       each( props, function( key, prop ) {
+               // alpha is included in more than one space
+               if ( color.fn[ key ] ) {
+                       return;
+               }
+               color.fn[ key ] = function( value ) {
+                       var vtype = jQuery.type( value ),
+                               fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+                               local = this[ fn ](),
+                               cur = local[ prop.idx ],
+                               match;
+
+                       if ( vtype === "undefined" ) {
+                               return cur;
+                       }
+
+                       if ( vtype === "function" ) {
+                               value = value.call( this, cur );
+                               vtype = jQuery.type( value );
+                       }
+                       if ( value == null && prop.empty ) {
+                               return this;
+                       }
+                       if ( vtype === "string" ) {
+                               match = rplusequals.exec( value );
+                               if ( match ) {
+                                       value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+                               }
+                       }
+                       local[ prop.idx ] = value;
+                       return this[ fn ]( local );
+               };
+       });
+});
+
+// add .fx.step functions
+each( stepHooks, function( i, hook ) {
+       jQuery.cssHooks[ hook ] = {
+               set: function( elem, value ) {
+                       var parsed, curElem,
+                               backgroundColor = "";
+
+                       if ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) {
+                               value = color( parsed || value );
+                               if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+                                       curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+                                       while (
+                                               (backgroundColor === "" || backgroundColor === "transparent") &&
+                                               curElem && curElem.style
+                                       ) {
+                                               try {
+                                                       backgroundColor = jQuery.css( curElem, "backgroundColor" );
+                                                       curElem = curElem.parentNode;
+                                               } catch ( e ) {
+                                               }
+                                       }
+
+                                       value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+                                               backgroundColor :
+                                               "_default" );
+                               }
+
+                               value = value.toRgbaString();
+                       }
+                       try {
+                               elem.style[ hook ] = value;
+                       } catch( error ) {
+                               // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+                       }
+               }
+       };
+       jQuery.fx.step[ hook ] = function( fx ) {
+               if ( !fx.colorInit ) {
+                       fx.start = color( fx.elem, hook );
+                       fx.end = color( fx.end );
+                       fx.colorInit = true;
+               }
+               jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+       };
+});
+
+jQuery.cssHooks.borderColor = {
+       expand: function( value ) {
+               var expanded = {};
+
+               each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+                       expanded[ "border" + part + "Color" ] = value;
+               });
+               return expanded;
+       }
+};
+
+// Basic color names only.
+// Usage of any of the other color names requires adding yourself or including
+// jquery.color.svg-names.js.
+colors = jQuery.Color.names = {
+       // 4.1. Basic color keywords
+       aqua: "#00ffff",
+       black: "#000000",
+       blue: "#0000ff",
+       fuchsia: "#ff00ff",
+       gray: "#808080",
+       green: "#008000",
+       lime: "#00ff00",
+       maroon: "#800000",
+       navy: "#000080",
+       olive: "#808000",
+       purple: "#800080",
+       red: "#ff0000",
+       silver: "#c0c0c0",
+       teal: "#008080",
+       white: "#ffffff",
+       yellow: "#ffff00",
+
+       // 4.2.3. "transparent" color keyword
+       transparent: [ null, null, null, 0 ],
+
+       _default: "#ffffff"
+};
+
+})( jQuery );
+
+
+
+/******************************************************************************/
+/****************************** CLASS ANIMATIONS ******************************/
+/******************************************************************************/
+(function() {
+
+var classAnimationActions = [ "add", "remove", "toggle" ],
+       shorthandStyles = {
+               border: 1,
+               borderBottom: 1,
+               borderColor: 1,
+               borderLeft: 1,
+               borderRight: 1,
+               borderTop: 1,
+               borderWidth: 1,
+               margin: 1,
+               padding: 1
+       };
+
+$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+       $.fx.step[ prop ] = function( fx ) {
+               if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+                       jQuery.style( fx.elem, prop, fx.end );
+                       fx.setAttr = true;
+               }
+       };
+});
+
+function getElementStyles() {
+       var style = this.ownerDocument.defaultView ?
+                       this.ownerDocument.defaultView.getComputedStyle( this, null ) :
+                       this.currentStyle,
+               newStyle = {},
+               key,
+               len;
+
+       // webkit enumerates style porperties
+       if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+               len = style.length;
+               while ( len-- ) {
+                       key = style[ len ];
+                       if ( typeof style[ key ] === "string" ) {
+                               newStyle[ $.camelCase( key ) ] = style[ key ];
+                       }
+               }
+       } else {
+               for ( key in style ) {
+                       if ( typeof style[ key ] === "string" ) {
+                               newStyle[ key ] = style[ key ];
+                       }
+               }
+       }
+
+       return newStyle;
+}
+
+
+function styleDifference( oldStyle, newStyle ) {
+       var diff = {},
+               name, value;
+
+       for ( name in newStyle ) {
+               value = newStyle[ name ];
+               if ( oldStyle[ name ] !== value ) {
+                       if ( !shorthandStyles[ name ] ) {
+                               if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+                                       diff[ name ] = value;
+                               }
+                       }
+               }
+       }
+
+       return diff;
+}
+
+$.effects.animateClass = function( value, duration, easing, callback ) {
+       var o = $.speed( duration, easing, callback );
+
+       return this.queue( function() {
+               var animated = $( this ),
+                       baseClass = animated.attr( "class" ) || "",
+                       applyClassChange,
+                       allAnimations = o.children ? animated.find( "*" ).andSelf() : animated;
+
+               // map the animated objects to store the original styles.
+               allAnimations = allAnimations.map(function() {
+                       var el = $( this );
+                       return {
+                               el: el,
+                               start: getElementStyles.call( this )
+                       };
+               });
+
+               // apply class change
+               applyClassChange = function() {
+                       $.each( classAnimationActions, function(i, action) {
+                               if ( value[ action ] ) {
+                                       animated[ action + "Class" ]( value[ action ] );
+                               }
+                       });
+               };
+               applyClassChange();
+
+               // map all animated objects again - calculate new styles and diff
+               allAnimations = allAnimations.map(function() {
+                       this.end = getElementStyles.call( this.el[ 0 ] );
+                       this.diff = styleDifference( this.start, this.end );
+                       return this;
+               });
+
+               // apply original class
+               animated.attr( "class", baseClass );
+
+               // map all animated objects again - this time collecting a promise
+               allAnimations = allAnimations.map(function() {
+                       var styleInfo = this,
+                               dfd = $.Deferred(),
+                               opts = jQuery.extend({}, o, {
+                                       queue: false,
+                                       complete: function() {
+                                               dfd.resolve( styleInfo );
+                                       }
+                               });
+
+                       this.el.animate( this.diff, opts );
+                       return dfd.promise();
+               });
+
+               // once all animations have completed:
+               $.when.apply( $, allAnimations.get() ).done(function() {
+
+                       // set the final class
+                       applyClassChange();
+
+                       // for each animated element,
+                       // clear all css properties that were animated
+                       $.each( arguments, function() {
+                               var el = this.el;
+                               $.each( this.diff, function(key) {
+                                       el.css( key, '' );
+                               });
+                       });
+
+                       // this is guarnteed to be there if you use jQuery.speed()
+                       // it also handles dequeuing the next anim...
+                       o.complete.call( animated[ 0 ] );
+               });
+       });
+};
+
+$.fn.extend({
+       _addClass: $.fn.addClass,
+       addClass: function( classNames, speed, easing, callback ) {
+               return speed ?
+                       $.effects.animateClass.call( this,
+                               { add: classNames }, speed, easing, callback ) :
+                       this._addClass( classNames );
+       },
+
+       _removeClass: $.fn.removeClass,
+       removeClass: function( classNames, speed, easing, callback ) {
+               return speed ?
+                       $.effects.animateClass.call( this,
+                               { remove: classNames }, speed, easing, callback ) :
+                       this._removeClass( classNames );
+       },
+
+       _toggleClass: $.fn.toggleClass,
+       toggleClass: function( classNames, force, speed, easing, callback ) {
+               if ( typeof force === "boolean" || force === undefined ) {
+                       if ( !speed ) {
+                               // without speed parameter
+                               return this._toggleClass( classNames, force );
+                       } else {
+                               return $.effects.animateClass.call( this,
+                                       (force ? { add: classNames } : { remove: classNames }),
+                                       speed, easing, callback );
+                       }
+               } else {
+                       // without force parameter
+                       return $.effects.animateClass.call( this,
+                               { toggle: classNames }, force, speed, easing );
+               }
+       },
+
+       switchClass: function( remove, add, speed, easing, callback) {
+               return $.effects.animateClass.call( this, {
+                       add: add,
+                       remove: remove
+               }, speed, easing, callback );
+       }
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EFFECTS **********************************/
+/******************************************************************************/
+
+(function() {
+
+$.extend( $.effects, {
+       version: "1.9.2",
+
+       // Saves a set of properties in a data storage
+       save: function( element, set ) {
+               for( var i=0; i < set.length; i++ ) {
+                       if ( set[ i ] !== null ) {
+                               element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+                       }
+               }
+       },
+
+       // Restores a set of previously saved properties from a data storage
+       restore: function( element, set ) {
+               var val, i;
+               for( i=0; i < set.length; i++ ) {
+                       if ( set[ i ] !== null ) {
+                               val = element.data( dataSpace + set[ i ] );
+                               // support: jQuery 1.6.2
+                               // http://bugs.jquery.com/ticket/9917
+                               // jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+                               // We can't differentiate between "" and 0 here, so we just assume
+                               // empty string since it's likely to be a more common value...
+                               if ( val === undefined ) {
+                                       val = "";
+                               }
+                               element.css( set[ i ], val );
+                       }
+               }
+       },
+
+       setMode: function( el, mode ) {
+               if (mode === "toggle") {
+                       mode = el.is( ":hidden" ) ? "show" : "hide";
+               }
+               return mode;
+       },
+
+       // Translates a [top,left] array into a baseline value
+       // this should be a little more flexible in the future to handle a string & hash
+       getBaseline: function( origin, original ) {
+               var y, x;
+               switch ( origin[ 0 ] ) {
+                       case "top": y = 0; break;
+                       case "middle": y = 0.5; break;
+                       case "bottom": y = 1; break;
+                       default: y = origin[ 0 ] / original.height;
+               }
+               switch ( origin[ 1 ] ) {
+                       case "left": x = 0; break;
+                       case "center": x = 0.5; break;
+                       case "right": x = 1; break;
+                       default: x = origin[ 1 ] / original.width;
+               }
+               return {
+                       x: x,
+                       y: y
+               };
+       },
+
+       // Wraps the element around a wrapper that copies position properties
+       createWrapper: function( element ) {
+
+               // if the element is already wrapped, return it
+               if ( element.parent().is( ".ui-effects-wrapper" )) {
+                       return element.parent();
+               }
+
+               // wrap the element
+               var props = {
+                               width: element.outerWidth(true),
+                               height: element.outerHeight(true),
+                               "float": element.css( "float" )
+                       },
+                       wrapper = $( "<div></div>" )
+                               .addClass( "ui-effects-wrapper" )
+                               .css({
+                                       fontSize: "100%",
+                                       background: "transparent",
+                                       border: "none",
+                                       margin: 0,
+                                       padding: 0
+                               }),
+                       // Store the size in case width/height are defined in % - Fixes #5245
+                       size = {
+                               width: element.width(),
+                               height: element.height()
+                       },
+                       active = document.activeElement;
+
+               // support: Firefox
+               // Firefox incorrectly exposes anonymous content
+               // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+               try {
+                       active.id;
+               } catch( e ) {
+                       active = document.body;
+               }
+
+               element.wrap( wrapper );
+
+               // Fixes #7595 - Elements lose focus when wrapped.
+               if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+                       $( active ).focus();
+               }
+
+               wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+
+               // transfer positioning properties to the wrapper
+               if ( element.css( "position" ) === "static" ) {
+                       wrapper.css({ position: "relative" });
+                       element.css({ position: "relative" });
+               } else {
+                       $.extend( props, {
+                               position: element.css( "position" ),
+                               zIndex: element.css( "z-index" )
+                       });
+                       $.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+                               props[ pos ] = element.css( pos );
+                               if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+                                       props[ pos ] = "auto";
+                               }
+                       });
+                       element.css({
+                               position: "relative",
+                               top: 0,
+                               left: 0,
+                               right: "auto",
+                               bottom: "auto"
+                       });
+               }
+               element.css(size);
+
+               return wrapper.css( props ).show();
+       },
+
+       removeWrapper: function( element ) {
+               var active = document.activeElement;
+
+               if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+                       element.parent().replaceWith( element );
+
+                       // Fixes #7595 - Elements lose focus when wrapped.
+                       if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+                               $( active ).focus();
+                       }
+               }
+
+
+               return element;
+       },
+
+       setTransition: function( element, list, factor, value ) {
+               value = value || {};
+               $.each( list, function( i, x ) {
+                       var unit = element.cssUnit( x );
+                       if ( unit[ 0 ] > 0 ) {
+                               value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+                       }
+               });
+               return value;
+       }
+});
+
+// return an effect options object for the given parameters:
+function _normalizeArguments( effect, options, speed, callback ) {
+
+       // allow passing all options as the first parameter
+       if ( $.isPlainObject( effect ) ) {
+               options = effect;
+               effect = effect.effect;
+       }
+
+       // convert to an object
+       effect = { effect: effect };
+
+       // catch (effect, null, ...)
+       if ( options == null ) {
+               options = {};
+       }
+
+       // catch (effect, callback)
+       if ( $.isFunction( options ) ) {
+               callback = options;
+               speed = null;
+               options = {};
+       }
+
+       // catch (effect, speed, ?)
+       if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+               callback = speed;
+               speed = options;
+               options = {};
+       }
+
+       // catch (effect, options, callback)
+       if ( $.isFunction( speed ) ) {
+               callback = speed;
+               speed = null;
+       }
+
+       // add options to effect
+       if ( options ) {
+               $.extend( effect, options );
+       }
+
+       speed = speed || options.duration;
+       effect.duration = $.fx.off ? 0 :
+               typeof speed === "number" ? speed :
+               speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+               $.fx.speeds._default;
+
+       effect.complete = callback || options.complete;
+
+       return effect;
+}
+
+function standardSpeed( speed ) {
+       // valid standard speeds
+       if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) {
+               return true;
+       }
+
+       // invalid strings - treat as "normal" speed
+       if ( typeof speed === "string" && !$.effects.effect[ speed ] ) {
+               // TODO: remove in 2.0 (#7115)
+               if ( backCompat && $.effects[ speed ] ) {
+                       return false;
+               }
+               return true;
+       }
+
+       return false;
+}
+
+$.fn.extend({
+       effect: function( /* effect, options, speed, callback */ ) {
+               var args = _normalizeArguments.apply( this, arguments ),
+                       mode = args.mode,
+                       queue = args.queue,
+                       effectMethod = $.effects.effect[ args.effect ],
+
+                       // DEPRECATED: remove in 2.0 (#7115)
+                       oldEffectMethod = !effectMethod && backCompat && $.effects[ args.effect ];
+
+               if ( $.fx.off || !( effectMethod || oldEffectMethod ) ) {
+                       // delegate to the original method (e.g., .show()) if possible
+                       if ( mode ) {
+                               return this[ mode ]( args.duration, args.complete );
+                       } else {
+                               return this.each( function() {
+                                       if ( args.complete ) {
+                                               args.complete.call( this );
+                                       }
+                               });
+                       }
+               }
+
+               function run( next ) {
+                       var elem = $( this ),
+                               complete = args.complete,
+                               mode = args.mode;
+
+                       function done() {
+                               if ( $.isFunction( complete ) ) {
+                                       complete.call( elem[0] );
+                               }
+                               if ( $.isFunction( next ) ) {
+                                       next();
+                               }
+                       }
+
+                       // if the element is hiddden and mode is hide,
+                       // or element is visible and mode is show
+                       if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+                               done();
+                       } else {
+                               effectMethod.call( elem[0], args, done );
+                       }
+               }
+
+               // TODO: remove this check in 2.0, effectMethod will always be true
+               if ( effectMethod ) {
+                       return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+               } else {
+                       // DEPRECATED: remove in 2.0 (#7115)
+                       return oldEffectMethod.call(this, {
+                               options: args,
+                               duration: args.duration,
+                               callback: args.complete,
+                               mode: args.mode
+                       });
+               }
+       },
+
+       _show: $.fn.show,
+       show: function( speed ) {
+               if ( standardSpeed( speed ) ) {
+                       return this._show.apply( this, arguments );
+               } else {
+                       var args = _normalizeArguments.apply( this, arguments );
+                       args.mode = "show";
+                       return this.effect.call( this, args );
+               }
+       },
+
+       _hide: $.fn.hide,
+       hide: function( speed ) {
+               if ( standardSpeed( speed ) ) {
+                       return this._hide.apply( this, arguments );
+               } else {
+                       var args = _normalizeArguments.apply( this, arguments );
+                       args.mode = "hide";
+                       return this.effect.call( this, args );
+               }
+       },
+
+       // jQuery core overloads toggle and creates _toggle
+       __toggle: $.fn.toggle,
+       toggle: function( speed ) {
+               if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) {
+                       return this.__toggle.apply( this, arguments );
+               } else {
+                       var args = _normalizeArguments.apply( this, arguments );
+                       args.mode = "toggle";
+                       return this.effect.call( this, args );
+               }
+       },
+
+       // helper functions
+       cssUnit: function(key) {
+               var style = this.css( key ),
+                       val = [];
+
+               $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+                       if ( style.indexOf( unit ) > 0 ) {
+                               val = [ parseFloat( style ), unit ];
+                       }
+               });
+               return val;
+       }
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EASING ***********************************/
+/******************************************************************************/
+
+(function() {
+
+// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+
+var baseEasings = {};
+
+$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+       baseEasings[ name ] = function( p ) {
+               return Math.pow( p, i + 2 );
+       };
+});
+
+$.extend( baseEasings, {
+       Sine: function ( p ) {
+               return 1 - Math.cos( p * Math.PI / 2 );
+       },
+       Circ: function ( p ) {
+               return 1 - Math.sqrt( 1 - p * p );
+       },
+       Elastic: function( p ) {
+               return p === 0 || p === 1 ? p :
+                       -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+       },
+       Back: function( p ) {
+               return p * p * ( 3 * p - 2 );
+       },
+       Bounce: function ( p ) {
+               var pow2,
+                       bounce = 4;
+
+               while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+               return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+       }
+});
+
+$.each( baseEasings, function( name, easeIn ) {
+       $.easing[ "easeIn" + name ] = easeIn;
+       $.easing[ "easeOut" + name ] = function( p ) {
+               return 1 - easeIn( 1 - p );
+       };
+       $.easing[ "easeInOut" + name ] = function( p ) {
+               return p < 0.5 ?
+                       easeIn( p * 2 ) / 2 :
+                       1 - easeIn( p * -2 + 2 ) / 2;
+       };
+});
+
+})();
+
+})(jQuery));
diff --git a/resources/lib/jquery.ui/jquery.ui.menu.js b/resources/lib/jquery.ui/jquery.ui.menu.js
new file mode 100644 (file)
index 0000000..6342f2d
--- /dev/null
@@ -0,0 +1,610 @@
+/*!
+ * jQuery UI Menu 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/menu/
+ *
+ * Depends:
+ *     jquery.ui.core.js
+ *     jquery.ui.widget.js
+ *     jquery.ui.position.js
+ */
+(function( $, undefined ) {
+
+var mouseHandled = false;
+
+$.widget( "ui.menu", {
+       version: "1.9.2",
+       defaultElement: "<ul>",
+       delay: 300,
+       options: {
+               icons: {
+                       submenu: "ui-icon-carat-1-e"
+               },
+               menus: "ul",
+               position: {
+                       my: "left top",
+                       at: "right top"
+               },
+               role: "menu",
+
+               // callbacks
+               blur: null,
+               focus: null,
+               select: null
+       },
+
+       _create: function() {
+               this.activeMenu = this.element;
+               this.element
+                       .uniqueId()
+                       .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+                       .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+                       .attr({
+                               role: this.options.role,
+                               tabIndex: 0
+                       })
+                       // need to catch all clicks on disabled menu
+                       // not possible through _on
+                       .bind( "click" + this.eventNamespace, $.proxy(function( event ) {
+                               if ( this.options.disabled ) {
+                                       event.preventDefault();
+                               }
+                       }, this ));
+
+               if ( this.options.disabled ) {
+                       this.element
+                               .addClass( "ui-state-disabled" )
+                               .attr( "aria-disabled", "true" );
+               }
+
+               this._on({
+                       // Prevent focus from sticking to links inside menu after clicking
+                       // them (focus should always stay on UL during navigation).
+                       "mousedown .ui-menu-item > a": function( event ) {
+                               event.preventDefault();
+                       },
+                       "click .ui-state-disabled > a": function( event ) {
+                               event.preventDefault();
+                       },
+                       "click .ui-menu-item:has(a)": function( event ) {
+                               var target = $( event.target ).closest( ".ui-menu-item" );
+                               if ( !mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+                                       mouseHandled = true;
+
+                                       this.select( event );
+                                       // Open submenu on click
+                                       if ( target.has( ".ui-menu" ).length ) {
+                                               this.expand( event );
+                                       } else if ( !this.element.is( ":focus" ) ) {
+                                               // Redirect focus to the menu
+                                               this.element.trigger( "focus", [ true ] );
+
+                                               // If the active item is on the top level, let it stay active.
+                                               // Otherwise, blur the active item since it is no longer visible.
+                                               if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+                                                       clearTimeout( this.timer );
+                                               }
+                                       }
+                               }
+                       },
+                       "mouseenter .ui-menu-item": function( event ) {
+                               var target = $( event.currentTarget );
+                               // Remove ui-state-active class from siblings of the newly focused menu item
+                               // to avoid a jump caused by adjacent elements both having a class with a border
+                               target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
+                               this.focus( event, target );
+                       },
+                       mouseleave: "collapseAll",
+                       "mouseleave .ui-menu": "collapseAll",
+                       focus: function( event, keepActiveItem ) {
+                               // If there's already an active item, keep it active
+                               // If not, activate the first item
+                               var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
+
+                               if ( !keepActiveItem ) {
+                                       this.focus( event, item );
+                               }
+                       },
+                       blur: function( event ) {
+                               this._delay(function() {
+                                       if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+                                               this.collapseAll( event );
+                                       }
+                               });
+                       },
+                       keydown: "_keydown"
+               });
+
+               this.refresh();
+
+               // Clicks outside of a menu collapse any open menus
+               this._on( this.document, {
+                       click: function( event ) {
+                               if ( !$( event.target ).closest( ".ui-menu" ).length ) {
+                                       this.collapseAll( event );
+                               }
+
+                               // Reset the mouseHandled flag
+                               mouseHandled = false;
+                       }
+               });
+       },
+
+       _destroy: function() {
+               // Destroy (sub)menus
+               this.element
+                       .removeAttr( "aria-activedescendant" )
+                       .find( ".ui-menu" ).andSelf()
+                               .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
+                               .removeAttr( "role" )
+                               .removeAttr( "tabIndex" )
+                               .removeAttr( "aria-labelledby" )
+                               .removeAttr( "aria-expanded" )
+                               .removeAttr( "aria-hidden" )
+                               .removeAttr( "aria-disabled" )
+                               .removeUniqueId()
+                               .show();
+
+               // Destroy menu items
+               this.element.find( ".ui-menu-item" )
+                       .removeClass( "ui-menu-item" )
+                       .removeAttr( "role" )
+                       .removeAttr( "aria-disabled" )
+                       .children( "a" )
+                               .removeUniqueId()
+                               .removeClass( "ui-corner-all ui-state-hover" )
+                               .removeAttr( "tabIndex" )
+                               .removeAttr( "role" )
+                               .removeAttr( "aria-haspopup" )
+                               .children().each( function() {
+                                       var elem = $( this );
+                                       if ( elem.data( "ui-menu-submenu-carat" ) ) {
+                                               elem.remove();
+                                       }
+                               });
+
+               // Destroy menu dividers
+               this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+       },
+
+       _keydown: function( event ) {
+               var match, prev, character, skip, regex,
+                       preventDefault = true;
+
+               function escape( value ) {
+                       return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+               }
+
+               switch ( event.keyCode ) {
+               case $.ui.keyCode.PAGE_UP:
+                       this.previousPage( event );
+                       break;
+               case $.ui.keyCode.PAGE_DOWN:
+                       this.nextPage( event );
+                       break;
+               case $.ui.keyCode.HOME:
+                       this._move( "first", "first", event );
+                       break;
+               case $.ui.keyCode.END:
+                       this._move( "last", "last", event );
+                       break;
+               case $.ui.keyCode.UP:
+                       this.previous( event );
+                       break;
+               case $.ui.keyCode.DOWN:
+                       this.next( event );
+                       break;
+               case $.ui.keyCode.LEFT:
+                       this.collapse( event );
+                       break;
+               case $.ui.keyCode.RIGHT:
+                       if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+                               this.expand( event );
+                       }
+                       break;
+               case $.ui.keyCode.ENTER:
+               case $.ui.keyCode.SPACE:
+                       this._activate( event );
+                       break;
+               case $.ui.keyCode.ESCAPE:
+                       this.collapse( event );
+                       break;
+               default:
+                       preventDefault = false;
+                       prev = this.previousFilter || "";
+                       character = String.fromCharCode( event.keyCode );
+                       skip = false;
+
+                       clearTimeout( this.filterTimer );
+
+                       if ( character === prev ) {
+                               skip = true;
+                       } else {
+                               character = prev + character;
+                       }
+
+                       regex = new RegExp( "^" + escape( character ), "i" );
+                       match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+                               return regex.test( $( this ).children( "a" ).text() );
+                       });
+                       match = skip && match.index( this.active.next() ) !== -1 ?
+                               this.active.nextAll( ".ui-menu-item" ) :
+                               match;
+
+                       // If no matches on the current filter, reset to the last character pressed
+                       // to move down the menu to the first item that starts with that character
+                       if ( !match.length ) {
+                               character = String.fromCharCode( event.keyCode );
+                               regex = new RegExp( "^" + escape( character ), "i" );
+                               match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+                                       return regex.test( $( this ).children( "a" ).text() );
+                               });
+                       }
+
+                       if ( match.length ) {
+                               this.focus( event, match );
+                               if ( match.length > 1 ) {
+                                       this.previousFilter = character;
+                                       this.filterTimer = this._delay(function() {
+                                               delete this.previousFilter;
+                                       }, 1000 );
+                               } else {
+                                       delete this.previousFilter;
+                               }
+                       } else {
+                               delete this.previousFilter;
+                       }
+               }
+
+               if ( preventDefault ) {
+                       event.preventDefault();
+               }
+       },
+
+       _activate: function( event ) {
+               if ( !this.active.is( ".ui-state-disabled" ) ) {
+                       if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
+                               this.expand( event );
+                       } else {
+                               this.select( event );
+                       }
+               }
+       },
+
+       refresh: function() {
+               var menus,
+                       icon = this.options.icons.submenu,
+                       submenus = this.element.find( this.options.menus );
+
+               // Initialize nested menus
+               submenus.filter( ":not(.ui-menu)" )
+                       .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+                       .hide()
+                       .attr({
+                               role: this.options.role,
+                               "aria-hidden": "true",
+                               "aria-expanded": "false"
+                       })
+                       .each(function() {
+                               var menu = $( this ),
+                                       item = menu.prev( "a" ),
+                                       submenuCarat = $( "<span>" )
+                                               .addClass( "ui-menu-icon ui-icon " + icon )
+                                               .data( "ui-menu-submenu-carat", true );
+
+                               item
+                                       .attr( "aria-haspopup", "true" )
+                                       .prepend( submenuCarat );
+                               menu.attr( "aria-labelledby", item.attr( "id" ) );
+                       });
+
+               menus = submenus.add( this.element );
+
+               // Don't refresh list items that are already adapted
+               menus.children( ":not(.ui-menu-item):has(a)" )
+                       .addClass( "ui-menu-item" )
+                       .attr( "role", "presentation" )
+                       .children( "a" )
+                               .uniqueId()
+                               .addClass( "ui-corner-all" )
+                               .attr({
+                                       tabIndex: -1,
+                                       role: this._itemRole()
+                               });
+
+               // Initialize unlinked menu-items containing spaces and/or dashes only as dividers
+               menus.children( ":not(.ui-menu-item)" ).each(function() {
+                       var item = $( this );
+                       // hyphen, em dash, en dash
+                       if ( !/[^\-—–\s]/.test( item.text() ) ) {
+                               item.addClass( "ui-widget-content ui-menu-divider" );
+                       }
+               });
+
+               // Add aria-disabled attribute to any disabled menu item
+               menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+
+               // If the active item has been removed, blur the menu
+               if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+                       this.blur();
+               }
+       },
+
+       _itemRole: function() {
+               return {
+                       menu: "menuitem",
+                       listbox: "option"
+               }[ this.options.role ];
+       },
+
+       focus: function( event, item ) {
+               var nested, focused;
+               this.blur( event, event && event.type === "focus" );
+
+               this._scrollIntoView( item );
+
+               this.active = item.first();
+               focused = this.active.children( "a" ).addClass( "ui-state-focus" );
+               // Only update aria-activedescendant if there's a role
+               // otherwise we assume focus is managed elsewhere
+               if ( this.options.role ) {
+                       this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+               }
+
+               // Highlight active parent menu item, if any
+               this.active
+                       .parent()
+                       .closest( ".ui-menu-item" )
+                       .children( "a:first" )
+                       .addClass( "ui-state-active" );
+
+               if ( event && event.type === "keydown" ) {
+                       this._close();
+               } else {
+                       this.timer = this._delay(function() {
+                               this._close();
+                       }, this.delay );
+               }
+
+               nested = item.children( ".ui-menu" );
+               if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
+                       this._startOpening(nested);
+               }
+               this.activeMenu = item.parent();
+
+               this._trigger( "focus", event, { item: item } );
+       },
+
+       _scrollIntoView: function( item ) {
+               var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+               if ( this._hasScroll() ) {
+                       borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+                       paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+                       offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+                       scroll = this.activeMenu.scrollTop();
+                       elementHeight = this.activeMenu.height();
+                       itemHeight = item.height();
+
+                       if ( offset < 0 ) {
+                               this.activeMenu.scrollTop( scroll + offset );
+                       } else if ( offset + itemHeight > elementHeight ) {
+                               this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+                       }
+               }
+       },
+
+       blur: function( event, fromFocus ) {
+               if ( !fromFocus ) {
+                       clearTimeout( this.timer );
+               }
+
+               if ( !this.active ) {
+                       return;
+               }
+
+               this.active.children( "a" ).removeClass( "ui-state-focus" );
+               this.active = null;
+
+               this._trigger( "blur", event, { item: this.active } );
+       },
+
+       _startOpening: function( submenu ) {
+               clearTimeout( this.timer );
+
+               // Don't open if already open fixes a Firefox bug that caused a .5 pixel
+               // shift in the submenu position when mousing over the carat icon
+               if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+                       return;
+               }
+
+               this.timer = this._delay(function() {
+                       this._close();
+                       this._open( submenu );
+               }, this.delay );
+       },
+
+       _open: function( submenu ) {
+               var position = $.extend({
+                       of: this.active
+               }, this.options.position );
+
+               clearTimeout( this.timer );
+               this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+                       .hide()
+                       .attr( "aria-hidden", "true" );
+
+               submenu
+                       .show()
+                       .removeAttr( "aria-hidden" )
+                       .attr( "aria-expanded", "true" )
+                       .position( position );
+       },
+
+       collapseAll: function( event, all ) {
+               clearTimeout( this.timer );
+               this.timer = this._delay(function() {
+                       // If we were passed an event, look for the submenu that contains the event
+                       var currentMenu = all ? this.element :
+                               $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+
+                       // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+                       if ( !currentMenu.length ) {
+                               currentMenu = this.element;
+                       }
+
+                       this._close( currentMenu );
+
+                       this.blur( event );
+                       this.activeMenu = currentMenu;
+               }, this.delay );
+       },
+
+       // With no arguments, closes the currently active menu - if nothing is active
+       // it closes all menus.  If passed an argument, it will search for menus BELOW
+       _close: function( startMenu ) {
+               if ( !startMenu ) {
+                       startMenu = this.active ? this.active.parent() : this.element;
+               }
+
+               startMenu
+                       .find( ".ui-menu" )
+                               .hide()
+                               .attr( "aria-hidden", "true" )
+                               .attr( "aria-expanded", "false" )
+                       .end()
+                       .find( "a.ui-state-active" )
+                               .removeClass( "ui-state-active" );
+       },
+
+       collapse: function( event ) {
+               var newItem = this.active &&
+                       this.active.parent().closest( ".ui-menu-item", this.element );
+               if ( newItem && newItem.length ) {
+                       this._close();
+                       this.focus( event, newItem );
+               }
+       },
+
+       expand: function( event ) {
+               var newItem = this.active &&
+                       this.active
+                               .children( ".ui-menu " )
+                               .children( ".ui-menu-item" )
+                               .first();
+
+               if ( newItem && newItem.length ) {
+                       this._open( newItem.parent() );
+
+                       // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+                       this._delay(function() {
+                               this.focus( event, newItem );
+                       });
+               }
+       },
+
+       next: function( event ) {
+               this._move( "next", "first", event );
+       },
+
+       previous: function( event ) {
+               this._move( "prev", "last", event );
+       },
+
+       isFirstItem: function() {
+               return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+       },
+
+       isLastItem: function() {
+               return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+       },
+
+       _move: function( direction, filter, event ) {
+               var next;
+               if ( this.active ) {
+                       if ( direction === "first" || direction === "last" ) {
+                               next = this.active
+                                       [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+                                       .eq( -1 );
+                       } else {
+                               next = this.active
+                                       [ direction + "All" ]( ".ui-menu-item" )
+                                       .eq( 0 );
+                       }
+               }
+               if ( !next || !next.length || !this.active ) {
+                       next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
+               }
+
+               this.focus( event, next );
+       },
+
+       nextPage: function( event ) {
+               var item, base, height;
+
+               if ( !this.active ) {
+                       this.next( event );
+                       return;
+               }
+               if ( this.isLastItem() ) {
+                       return;
+               }
+               if ( this._hasScroll() ) {
+                       base = this.active.offset().top;
+                       height = this.element.height();
+                       this.active.nextAll( ".ui-menu-item" ).each(function() {
+                               item = $( this );
+                               return item.offset().top - base - height < 0;
+                       });
+
+                       this.focus( event, item );
+               } else {
+                       this.focus( event, this.activeMenu.children( ".ui-menu-item" )
+                               [ !this.active ? "first" : "last" ]() );
+               }
+       },
+
+       previousPage: function( event ) {
+               var item, base, height;
+               if ( !this.active ) {
+                       this.next( event );
+                       return;
+               }
+               if ( this.isFirstItem() ) {
+                       return;
+               }
+               if ( this._hasScroll() ) {
+                       base = this.active.offset().top;
+                       height = this.element.height();
+                       this.active.prevAll( ".ui-menu-item" ).each(function() {
+                               item = $( this );
+                               return item.offset().top - base + height > 0;
+                       });
+
+                       this.focus( event, item );
+               } else {
+                       this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
+               }
+       },
+
+       _hasScroll: function() {
+               return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+       },
+
+       select: function( event ) {
+               // TODO: It should never be possible to not have an active item at this
+               // point, but the tests don't trigger mouseenter before click.
+               this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+               var ui = { item: this.active };
+               if ( !this.active.has( ".ui-menu" ).length ) {
+                       this.collapseAll( event, true );
+               }
+               this._trigger( "select", event, ui );
+       }
+});
+
+}( jQuery ));
index 52a1786..250365f 100644 (file)
@@ -1,11 +1,12 @@
 /*!
- * jQuery UI Mouse 1.8.24
+ * jQuery UI Mouse 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Mouse
+ * http://api.jqueryui.com/mouse/
  *
  * Depends:
  *     jquery.ui.widget.js
@@ -18,21 +19,22 @@ $( document ).mouseup( function( e ) {
 });
 
 $.widget("ui.mouse", {
+       version: "1.9.2",
        options: {
-               cancel: ':input,option',
+               cancel: 'input,textarea,button,select,option',
                distance: 1,
                delay: 0
        },
        _mouseInit: function() {
-               var self = this;
+               var that = this;
 
                this.element
                        .bind('mousedown.'+this.widgetName, function(event) {
-                               return self._mouseDown(event);
+                               return that._mouseDown(event);
                        })
                        .bind('click.'+this.widgetName, function(event) {
-                               if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
-                                   $.removeData(event.target, self.widgetName + '.preventClickEvent');
+                               if (true === $.data(event.target, that.widgetName + '.preventClickEvent')) {
+                                       $.removeData(event.target, that.widgetName + '.preventClickEvent');
                                        event.stopImmediatePropagation();
                                        return false;
                                }
@@ -54,18 +56,18 @@ $.widget("ui.mouse", {
 
        _mouseDown: function(event) {
                // don't let more than one widget handle mouseStart
-               if( mouseHandled ) { return };
+               if( mouseHandled ) { return; }
 
                // we may have missed mouseup (out of window)
                (this._mouseStarted && this._mouseUp(event));
 
                this._mouseDownEvent = event;
 
-               var self = this,
-                       btnIsLeft = (event.which == 1),
+               var that = this,
+                       btnIsLeft = (event.which === 1),
                        // event.target.nodeName works around a bug in IE 8 with
                        // disabled inputs (#7620)
-                       elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+                       elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
                if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
                        return true;
                }
@@ -73,7 +75,7 @@ $.widget("ui.mouse", {
                this.mouseDelayMet = !this.options.delay;
                if (!this.mouseDelayMet) {
                        this._mouseDelayTimer = setTimeout(function() {
-                               self.mouseDelayMet = true;
+                               that.mouseDelayMet = true;
                        }, this.options.delay);
                }
 
@@ -92,24 +94,24 @@ $.widget("ui.mouse", {
 
                // these delegates are required to keep context
                this._mouseMoveDelegate = function(event) {
-                       return self._mouseMove(event);
+                       return that._mouseMove(event);
                };
                this._mouseUpDelegate = function(event) {
-                       return self._mouseUp(event);
+                       return that._mouseUp(event);
                };
                $(document)
                        .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
                        .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
 
                event.preventDefault();
-               
+
                mouseHandled = true;
                return true;
        },
 
        _mouseMove: function(event) {
                // IE mouseup check - mouseup happened when mouse was out of window
-               if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
+               if ($.ui.ie && !(document.documentMode >= 9) && !event.button) {
                        return this._mouseUp(event);
                }
 
@@ -135,8 +137,8 @@ $.widget("ui.mouse", {
                if (this._mouseStarted) {
                        this._mouseStarted = false;
 
-                       if (event.target == this._mouseDownEvent.target) {
-                           $.data(event.target, this.widgetName + '.preventClickEvent', true);
+                       if (event.target === this._mouseDownEvent.target) {
+                               $.data(event.target, this.widgetName + '.preventClickEvent', true);
                        }
 
                        this._mouseStop(event);
index 8b20179..be99013 100644 (file)
@@ -1,22 +1,87 @@
 /*!
- * jQuery UI Position 1.8.24
+ * jQuery UI Position 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Position
+ * http://api.jqueryui.com/position/
  */
 (function( $, undefined ) {
 
 $.ui = $.ui || {};
 
-var horizontalPositions = /left|center|right/,
-       verticalPositions = /top|center|bottom/,
-       center = "center",
-       support = {},
-       _position = $.fn.position,
-       _offset = $.fn.offset;
+var cachedScrollbarWidth,
+       max = Math.max,
+       abs = Math.abs,
+       round = Math.round,
+       rhorizontal = /left|center|right/,
+       rvertical = /top|center|bottom/,
+       roffset = /[\+\-]\d+%?/,
+       rposition = /^\w+/,
+       rpercent = /%$/,
+       _position = $.fn.position;
+
+function getOffsets( offsets, width, height ) {
+       return [
+               parseInt( offsets[ 0 ], 10 ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+               parseInt( offsets[ 1 ], 10 ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+       ];
+}
+function parseCss( element, property ) {
+       return parseInt( $.css( element, property ), 10 ) || 0;
+}
+
+$.position = {
+       scrollbarWidth: function() {
+               if ( cachedScrollbarWidth !== undefined ) {
+                       return cachedScrollbarWidth;
+               }
+               var w1, w2,
+                       div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+                       innerDiv = div.children()[0];
+
+               $( "body" ).append( div );
+               w1 = innerDiv.offsetWidth;
+               div.css( "overflow", "scroll" );
+
+               w2 = innerDiv.offsetWidth;
+
+               if ( w1 === w2 ) {
+                       w2 = div[0].clientWidth;
+               }
+
+               div.remove();
+
+               return (cachedScrollbarWidth = w1 - w2);
+       },
+       getScrollInfo: function( within ) {
+               var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
+                       overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
+                       hasOverflowX = overflowX === "scroll" ||
+                               ( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+                       hasOverflowY = overflowY === "scroll" ||
+                               ( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+               return {
+                       width: hasOverflowX ? $.position.scrollbarWidth() : 0,
+                       height: hasOverflowY ? $.position.scrollbarWidth() : 0
+               };
+       },
+       getWithinInfo: function( element ) {
+               var withinElement = $( element || window ),
+                       isWindow = $.isWindow( withinElement[0] );
+               return {
+                       element: withinElement,
+                       isWindow: isWindow,
+                       offset: withinElement.offset() || { left: 0, top: 0 },
+                       scrollLeft: withinElement.scrollLeft(),
+                       scrollTop: withinElement.scrollTop(),
+                       width: isWindow ? withinElement.width() : withinElement.outerWidth(),
+                       height: isWindow ? withinElement.height() : withinElement.outerHeight()
+               };
+       }
+};
 
 $.fn.position = function( options ) {
        if ( !options || !options.of ) {
@@ -26,48 +91,65 @@ $.fn.position = function( options ) {
        // make a copy, we don't want to modify arguments
        options = $.extend( {}, options );
 
-       var target = $( options.of ),
+       var atOffset, targetWidth, targetHeight, targetOffset, basePosition,
+               target = $( options.of ),
+               within = $.position.getWithinInfo( options.within ),
+               scrollInfo = $.position.getScrollInfo( within ),
                targetElem = target[0],
                collision = ( options.collision || "flip" ).split( " " ),
-               offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ],
-               targetWidth,
-               targetHeight,
-               basePosition;
+               offsets = {};
 
        if ( targetElem.nodeType === 9 ) {
                targetWidth = target.width();
                targetHeight = target.height();
-               basePosition = { top: 0, left: 0 };
-       // TODO: use $.isWindow() in 1.9
-       } else if ( targetElem.setTimeout ) {
+               targetOffset = { top: 0, left: 0 };
+       } else if ( $.isWindow( targetElem ) ) {
                targetWidth = target.width();
                targetHeight = target.height();
-               basePosition = { top: target.scrollTop(), left: target.scrollLeft() };
+               targetOffset = { top: target.scrollTop(), left: target.scrollLeft() };
        } else if ( targetElem.preventDefault ) {
                // force left top to allow flipping
                options.at = "left top";
                targetWidth = targetHeight = 0;
-               basePosition = { top: options.of.pageY, left: options.of.pageX };
+               targetOffset = { top: targetElem.pageY, left: targetElem.pageX };
        } else {
                targetWidth = target.outerWidth();
                targetHeight = target.outerHeight();
-               basePosition = target.offset();
+               targetOffset = target.offset();
        }
+       // clone to reuse original targetOffset later
+       basePosition = $.extend( {}, targetOffset );
 
-       // force my and at to have valid horizontal and veritcal positions
-       // if a value is missing or invalid, it will be converted to center 
+       // force my and at to have valid horizontal and vertical positions
+       // if a value is missing or invalid, it will be converted to center
        $.each( [ "my", "at" ], function() {
-               var pos = ( options[this] || "" ).split( " " );
+               var pos = ( options[ this ] || "" ).split( " " ),
+                       horizontalOffset,
+                       verticalOffset;
+
                if ( pos.length === 1) {
-                       pos = horizontalPositions.test( pos[0] ) ?
-                               pos.concat( [center] ) :
-                               verticalPositions.test( pos[0] ) ?
-                                       [ center ].concat( pos ) :
-                                       [ center, center ];
+                       pos = rhorizontal.test( pos[ 0 ] ) ?
+                               pos.concat( [ "center" ] ) :
+                               rvertical.test( pos[ 0 ] ) ?
+                                       [ "center" ].concat( pos ) :
+                                       [ "center", "center" ];
                }
-               pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center;
-               pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center;
-               options[ this ] = pos;
+               pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+               pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+               // calculate offsets
+               horizontalOffset = roffset.exec( pos[ 0 ] );
+               verticalOffset = roffset.exec( pos[ 1 ] );
+               offsets[ this ] = [
+                       horizontalOffset ? horizontalOffset[ 0 ] : 0,
+                       verticalOffset ? verticalOffset[ 0 ] : 0
+               ];
+
+               // reduce to just the positions without the offsets
+               options[ this ] = [
+                       rposition.exec( pos[ 0 ] )[ 0 ],
+                       rposition.exec( pos[ 1 ] )[ 0 ]
+               ];
        });
 
        // normalize collision option
@@ -75,67 +157,63 @@ $.fn.position = function( options ) {
                collision[ 1 ] = collision[ 0 ];
        }
 
-       // normalize offset option
-       offset[ 0 ] = parseInt( offset[0], 10 ) || 0;
-       if ( offset.length === 1 ) {
-               offset[ 1 ] = offset[ 0 ];
-       }
-       offset[ 1 ] = parseInt( offset[1], 10 ) || 0;
-
-       if ( options.at[0] === "right" ) {
+       if ( options.at[ 0 ] === "right" ) {
                basePosition.left += targetWidth;
-       } else if ( options.at[0] === center ) {
+       } else if ( options.at[ 0 ] === "center" ) {
                basePosition.left += targetWidth / 2;
        }
 
-       if ( options.at[1] === "bottom" ) {
+       if ( options.at[ 1 ] === "bottom" ) {
                basePosition.top += targetHeight;
-       } else if ( options.at[1] === center ) {
+       } else if ( options.at[ 1 ] === "center" ) {
                basePosition.top += targetHeight / 2;
        }
 
-       basePosition.left += offset[ 0 ];
-       basePosition.top += offset[ 1 ];
+       atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+       basePosition.left += atOffset[ 0 ];
+       basePosition.top += atOffset[ 1 ];
 
        return this.each(function() {
-               var elem = $( this ),
+               var collisionPosition, using,
+                       elem = $( this ),
                        elemWidth = elem.outerWidth(),
                        elemHeight = elem.outerHeight(),
-                       marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0,
-                       marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0,
-                       collisionWidth = elemWidth + marginLeft +
-                               ( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ),
-                       collisionHeight = elemHeight + marginTop +
-                               ( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ),
+                       marginLeft = parseCss( this, "marginLeft" ),
+                       marginTop = parseCss( this, "marginTop" ),
+                       collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+                       collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
                        position = $.extend( {}, basePosition ),
-                       collisionPosition;
+                       myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
 
-               if ( options.my[0] === "right" ) {
+               if ( options.my[ 0 ] === "right" ) {
                        position.left -= elemWidth;
-               } else if ( options.my[0] === center ) {
+               } else if ( options.my[ 0 ] === "center" ) {
                        position.left -= elemWidth / 2;
                }
 
-               if ( options.my[1] === "bottom" ) {
+               if ( options.my[ 1 ] === "bottom" ) {
                        position.top -= elemHeight;
-               } else if ( options.my[1] === center ) {
+               } else if ( options.my[ 1 ] === "center" ) {
                        position.top -= elemHeight / 2;
                }
 
-               // prevent fractions if jQuery version doesn't support them (see #5280)
-               if ( !support.fractions ) {
-                       position.left = Math.round( position.left );
-                       position.top = Math.round( position.top );
+               position.left += myOffset[ 0 ];
+               position.top += myOffset[ 1 ];
+
+               // if the browser doesn't support fractions, then round for consistent results
+               if ( !$.support.offsetFractions ) {
+                       position.left = round( position.left );
+                       position.top = round( position.top );
                }
 
                collisionPosition = {
-                       left: position.left - marginLeft,
-                       top: position.top - marginTop
+                       marginLeft: marginLeft,
+                       marginTop: marginTop
                };
 
                $.each( [ "left", "top" ], function( i, dir ) {
-                       if ( $.ui.position[ collision[i] ] ) {
-                               $.ui.position[ collision[i] ][ dir ]( position, {
+                       if ( $.ui.position[ collision[ i ] ] ) {
+                               $.ui.position[ collision[ i ] ][ dir ]( position, {
                                        targetWidth: targetWidth,
                                        targetHeight: targetHeight,
                                        elemWidth: elemWidth,
@@ -143,9 +221,11 @@ $.fn.position = function( options ) {
                                        collisionPosition: collisionPosition,
                                        collisionWidth: collisionWidth,
                                        collisionHeight: collisionHeight,
-                                       offset: offset,
+                                       offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
                                        my: options.my,
-                                       at: options.at
+                                       at: options.at,
+                                       within: within,
+                                       elem : elem
                                });
                        }
                });
@@ -153,31 +233,137 @@ $.fn.position = function( options ) {
                if ( $.fn.bgiframe ) {
                        elem.bgiframe();
                }
-               elem.offset( $.extend( position, { using: options.using } ) );
+
+               if ( options.using ) {
+                       // adds feedback as second argument to using callback, if present
+                       using = function( props ) {
+                               var left = targetOffset.left - position.left,
+                                       right = left + targetWidth - elemWidth,
+                                       top = targetOffset.top - position.top,
+                                       bottom = top + targetHeight - elemHeight,
+                                       feedback = {
+                                               target: {
+                                                       element: target,
+                                                       left: targetOffset.left,
+                                                       top: targetOffset.top,
+                                                       width: targetWidth,
+                                                       height: targetHeight
+                                               },
+                                               element: {
+                                                       element: elem,
+                                                       left: position.left,
+                                                       top: position.top,
+                                                       width: elemWidth,
+                                                       height: elemHeight
+                                               },
+                                               horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+                                               vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+                                       };
+                               if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+                                       feedback.horizontal = "center";
+                               }
+                               if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+                                       feedback.vertical = "middle";
+                               }
+                               if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+                                       feedback.important = "horizontal";
+                               } else {
+                                       feedback.important = "vertical";
+                               }
+                               options.using.call( this, props, feedback );
+                       };
+               }
+
+               elem.offset( $.extend( position, { using: using } ) );
        });
 };
 
 $.ui.position = {
        fit: {
                left: function( position, data ) {
-                       var win = $( window ),
-                               over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft();
-                       position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left );
+                       var within = data.within,
+                               withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+                               outerWidth = within.width,
+                               collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+                               overLeft = withinOffset - collisionPosLeft,
+                               overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+                               newOverRight;
+
+                       // element is wider than within
+                       if ( data.collisionWidth > outerWidth ) {
+                               // element is initially over the left side of within
+                               if ( overLeft > 0 && overRight <= 0 ) {
+                                       newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+                                       position.left += overLeft - newOverRight;
+                               // element is initially over right side of within
+                               } else if ( overRight > 0 && overLeft <= 0 ) {
+                                       position.left = withinOffset;
+                               // element is initially over both left and right sides of within
+                               } else {
+                                       if ( overLeft > overRight ) {
+                                               position.left = withinOffset + outerWidth - data.collisionWidth;
+                                       } else {
+                                               position.left = withinOffset;
+                                       }
+                               }
+                       // too far left -> align with left edge
+                       } else if ( overLeft > 0 ) {
+                               position.left += overLeft;
+                       // too far right -> align with right edge
+                       } else if ( overRight > 0 ) {
+                               position.left -= overRight;
+                       // adjust based on position and margin
+                       } else {
+                               position.left = max( position.left - collisionPosLeft, position.left );
+                       }
                },
                top: function( position, data ) {
-                       var win = $( window ),
-                               over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop();
-                       position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top );
+                       var within = data.within,
+                               withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+                               outerHeight = data.within.height,
+                               collisionPosTop = position.top - data.collisionPosition.marginTop,
+                               overTop = withinOffset - collisionPosTop,
+                               overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+                               newOverBottom;
+
+                       // element is taller than within
+                       if ( data.collisionHeight > outerHeight ) {
+                               // element is initially over the top of within
+                               if ( overTop > 0 && overBottom <= 0 ) {
+                                       newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+                                       position.top += overTop - newOverBottom;
+                               // element is initially over bottom of within
+                               } else if ( overBottom > 0 && overTop <= 0 ) {
+                                       position.top = withinOffset;
+                               // element is initially over both top and bottom of within
+                               } else {
+                                       if ( overTop > overBottom ) {
+                                               position.top = withinOffset + outerHeight - data.collisionHeight;
+                                       } else {
+                                               position.top = withinOffset;
+                                       }
+                               }
+                       // too far up -> align with top
+                       } else if ( overTop > 0 ) {
+                               position.top += overTop;
+                       // too far down -> align with bottom edge
+                       } else if ( overBottom > 0 ) {
+                               position.top -= overBottom;
+                       // adjust based on position and margin
+                       } else {
+                               position.top = max( position.top - collisionPosTop, position.top );
+                       }
                }
        },
-
        flip: {
                left: function( position, data ) {
-                       if ( data.at[0] === center ) {
-                               return;
-                       }
-                       var win = $( window ),
-                               over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(),
+                       var within = data.within,
+                               withinOffset = within.offset.left + within.scrollLeft,
+                               outerWidth = within.width,
+                               offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+                               collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+                               overLeft = collisionPosLeft - offsetLeft,
+                               overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
                                myOffset = data.my[ 0 ] === "left" ?
                                        -data.elemWidth :
                                        data.my[ 0 ] === "right" ?
@@ -185,88 +371,79 @@ $.ui.position = {
                                                0,
                                atOffset = data.at[ 0 ] === "left" ?
                                        data.targetWidth :
-                                       -data.targetWidth,
-                               offset = -2 * data.offset[ 0 ];
-                       position.left += data.collisionPosition.left < 0 ?
-                               myOffset + atOffset + offset :
-                               over > 0 ?
-                                       myOffset + atOffset + offset :
-                                       0;
+                                       data.at[ 0 ] === "right" ?
+                                               -data.targetWidth :
+                                               0,
+                               offset = -2 * data.offset[ 0 ],
+                               newOverRight,
+                               newOverLeft;
+
+                       if ( overLeft < 0 ) {
+                               newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+                               if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+                                       position.left += myOffset + atOffset + offset;
+                               }
+                       }
+                       else if ( overRight > 0 ) {
+                               newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+                               if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+                                       position.left += myOffset + atOffset + offset;
+                               }
+                       }
                },
                top: function( position, data ) {
-                       if ( data.at[1] === center ) {
-                               return;
-                       }
-                       var win = $( window ),
-                               over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(),
-                               myOffset = data.my[ 1 ] === "top" ?
+                       var within = data.within,
+                               withinOffset = within.offset.top + within.scrollTop,
+                               outerHeight = within.height,
+                               offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+                               collisionPosTop = position.top - data.collisionPosition.marginTop,
+                               overTop = collisionPosTop - offsetTop,
+                               overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+                               top = data.my[ 1 ] === "top",
+                               myOffset = top ?
                                        -data.elemHeight :
                                        data.my[ 1 ] === "bottom" ?
                                                data.elemHeight :
                                                0,
                                atOffset = data.at[ 1 ] === "top" ?
                                        data.targetHeight :
-                                       -data.targetHeight,
-                               offset = -2 * data.offset[ 1 ];
-                       position.top += data.collisionPosition.top < 0 ?
-                               myOffset + atOffset + offset :
-                               over > 0 ?
-                                       myOffset + atOffset + offset :
-                                       0;
+                                       data.at[ 1 ] === "bottom" ?
+                                               -data.targetHeight :
+                                               0,
+                               offset = -2 * data.offset[ 1 ],
+                               newOverTop,
+                               newOverBottom;
+                       if ( overTop < 0 ) {
+                               newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+                               if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
+                                       position.top += myOffset + atOffset + offset;
+                               }
+                       }
+                       else if ( overBottom > 0 ) {
+                               newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+                               if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
+                                       position.top += myOffset + atOffset + offset;
+                               }
+                       }
+               }
+       },
+       flipfit: {
+               left: function() {
+                       $.ui.position.flip.left.apply( this, arguments );
+                       $.ui.position.fit.left.apply( this, arguments );
+               },
+               top: function() {
+                       $.ui.position.flip.top.apply( this, arguments );
+                       $.ui.position.fit.top.apply( this, arguments );
                }
        }
 };
 
-// offset setter from jQuery 1.4
-if ( !$.offset.setOffset ) {
-       $.offset.setOffset = function( elem, options ) {
-               // set position first, in-case top/left are set even on static elem
-               if ( /static/.test( $.curCSS( elem, "position" ) ) ) {
-                       elem.style.position = "relative";
-               }
-               var curElem   = $( elem ),
-                       curOffset = curElem.offset(),
-                       curTop    = parseInt( $.curCSS( elem, "top",  true ), 10 ) || 0,
-                       curLeft   = parseInt( $.curCSS( elem, "left", true ), 10)  || 0,
-                       props     = {
-                               top:  (options.top  - curOffset.top)  + curTop,
-                               left: (options.left - curOffset.left) + curLeft
-                       };
-               
-               if ( 'using' in options ) {
-                       options.using.call( elem, props );
-               } else {
-                       curElem.css( props );
-               }
-       };
-
-       $.fn.offset = function( options ) {
-               var elem = this[ 0 ];
-               if ( !elem || !elem.ownerDocument ) { return null; }
-               if ( options ) {
-                       if ( $.isFunction( options ) ) {
-                               return this.each(function( i ) {
-                                       $( this ).offset( options.call( this, i, $( this ).offset() ) );
-                               });
-                       }
-                       return this.each(function() {
-                               $.offset.setOffset( this, options );
-                       });
-               }
-               return _offset.call( this );
-       };
-}
-
-// jQuery <1.4.3 uses curCSS, in 1.4.3 - 1.7.2 curCSS = css, 1.8+ only has css
-if ( !$.curCSS ) {
-       $.curCSS = $.css;
-}
-
-// fraction support test (older versions of jQuery don't support fractions)
+// fraction support test
 (function () {
-       var body = document.getElementsByTagName( "body" )[ 0 ], 
-               div = document.createElement( "div" ),
-               testElement, testElementParent, testElementStyle, offset, offsetTotal;
+       var testElement, testElementParent, testElementStyle, offsetLeft, i,
+               body = document.getElementsByTagName( "body" )[ 0 ],
+               div = document.createElement( "div" );
 
        //Create a "fake body" for testing based on method used in jQuery.support
        testElement = document.createElement( body ? "div" : "body" );
@@ -285,24 +462,56 @@ if ( !$.curCSS ) {
                        top: "-1000px"
                });
        }
-       for ( var i in testElementStyle ) {
+       for ( i in testElementStyle ) {
                testElement.style[ i ] = testElementStyle[ i ];
        }
        testElement.appendChild( div );
        testElementParent = body || document.documentElement;
        testElementParent.insertBefore( testElement, testElementParent.firstChild );
 
-       div.style.cssText = "position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;";
+       div.style.cssText = "position: absolute; left: 10.7432222px;";
 
-       offset = $( div ).offset( function( _, offset ) {
-               return offset;
-       }).offset();
+       offsetLeft = $( div ).offset().left;
+       $.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
 
        testElement.innerHTML = "";
        testElementParent.removeChild( testElement );
-
-       offsetTotal = offset.top + offset.left + ( body ? 2000 : 0 );
-       support.fractions = offsetTotal > 21 && offsetTotal < 22;
 })();
 
-}( jQuery ));
+// DEPRECATED
+if ( $.uiBackCompat !== false ) {
+       // offset option
+       (function( $ ) {
+               var _position = $.fn.position;
+               $.fn.position = function( options ) {
+                       if ( !options || !options.offset ) {
+                               return _position.call( this, options );
+                       }
+                       var offset = options.offset.split( " " ),
+                               at = options.at.split( " " );
+                       if ( offset.length === 1 ) {
+                               offset[ 1 ] = offset[ 0 ];
+                       }
+                       if ( /^\d/.test( offset[ 0 ] ) ) {
+                               offset[ 0 ] = "+" + offset[ 0 ];
+                       }
+                       if ( /^\d/.test( offset[ 1 ] ) ) {
+                               offset[ 1 ] = "+" + offset[ 1 ];
+                       }
+                       if ( at.length === 1 ) {
+                               if ( /left|center|right/.test( at[ 0 ] ) ) {
+                                       at[ 1 ] = "center";
+                               } else {
+                                       at[ 1 ] = at[ 0 ];
+                                       at[ 0 ] = "center";
+                               }
+                       }
+                       return _position.call( this, $.extend( options, {
+                               at: at[ 0 ] + offset[ 0 ] + " " + at[ 1 ] + offset[ 1 ],
+                               offset: undefined
+                       } ) );
+               };
+       }( jQuery ) );
+}
+
+}( jQuery ) );
index 7cea1ba..4aa19d8 100644 (file)
@@ -1,11 +1,12 @@
 /*!
- * jQuery UI Progressbar 1.8.24
+ * jQuery UI Progressbar 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Progressbar
+ * http://api.jqueryui.com/progressbar/
  *
  * Depends:
  *   jquery.ui.core.js
@@ -14,6 +15,7 @@
 (function( $, undefined ) {
 
 $.widget( "ui.progressbar", {
+       version: "1.9.2",
        options: {
                value: 0,
                max: 100
@@ -38,7 +40,7 @@ $.widget( "ui.progressbar", {
                this._refreshValue();
        },
 
-       destroy: function() {
+       _destroy: function() {
                this.element
                        .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
                        .removeAttr( "role" )
@@ -47,8 +49,6 @@ $.widget( "ui.progressbar", {
                        .removeAttr( "aria-valuenow" );
 
                this.valueDiv.remove();
-
-               $.Widget.prototype.destroy.apply( this, arguments );
        },
 
        value: function( newValue ) {
@@ -69,7 +69,7 @@ $.widget( "ui.progressbar", {
                        }
                }
 
-               $.Widget.prototype._setOption.apply( this, arguments );
+               this._super( key, value );
        },
 
        _value: function() {
@@ -86,8 +86,8 @@ $.widget( "ui.progressbar", {
        },
 
        _refreshValue: function() {
-               var value = this.value();
-               var percentage = this._percentage();
+               var value = this.value(),
+                       percentage = this._percentage();
 
                if ( this.oldValue !== value ) {
                        this.oldValue = value;
@@ -102,8 +102,4 @@ $.widget( "ui.progressbar", {
        }
 });
 
-$.extend( $.ui.progressbar, {
-       version: "1.8.24"
-});
-
 })( jQuery );
index 6cc6f41..bb277e2 100644 (file)
@@ -1,11 +1,12 @@
 /*!
- * jQuery UI Resizable 1.8.24
+ * jQuery UI Resizable 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Resizables
+ * http://api.jqueryui.com/resizable/
  *
  * Depends:
  *     jquery.ui.core.js
@@ -15,6 +16,7 @@
 (function( $, undefined ) {
 
 $.widget("ui.resizable", $.ui.mouse, {
+       version: "1.9.2",
        widgetEventPrefix: "resize",
        options: {
                alsoResize: false,
@@ -36,7 +38,7 @@ $.widget("ui.resizable", $.ui.mouse, {
        },
        _create: function() {
 
-               var self = this, o = this.options;
+               var that = this, o = this.options;
                this.element.addClass("ui-resizable");
 
                $.extend(this, {
@@ -157,11 +159,11 @@ $.widget("ui.resizable", $.ui.mouse, {
 
                //Matching axis name
                this._handles.mouseover(function() {
-                       if (!self.resizing) {
+                       if (!that.resizing) {
                                if (this.className)
                                        var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
                                //Axis, default = se
-                               self.axis = axis && axis[1] ? axis[1] : 'se';
+                               that.axis = axis && axis[1] ? axis[1] : 'se';
                        }
                });
 
@@ -170,16 +172,16 @@ $.widget("ui.resizable", $.ui.mouse, {
                        this._handles.hide();
                        $(this.element)
                                .addClass("ui-resizable-autohide")
-                               .hover(function() {
+                               .mouseenter(function() {
                                        if (o.disabled) return;
                                        $(this).removeClass("ui-resizable-autohide");
-                                       self._handles.show();
-                               },
-                               function(){
+                                       that._handles.show();
+                               })
+                               .mouseleave(function(){
                                        if (o.disabled) return;
-                                       if (!self.resizing) {
+                                       if (!that.resizing) {
                                                $(this).addClass("ui-resizable-autohide");
-                                               self._handles.hide();
+                                               that._handles.hide();
                                        }
                                });
                }
@@ -189,28 +191,27 @@ $.widget("ui.resizable", $.ui.mouse, {
 
        },
 
-       destroy: function() {
+       _destroy: function() {
 
                this._mouseDestroy();
 
                var _destroy = function(exp) {
                        $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
-                               .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
+                               .removeData("resizable").removeData("ui-resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
                };
 
                //TODO: Unwrap at same DOM position
                if (this.elementIsWrapper) {
                        _destroy(this.element);
                        var wrapper = this.element;
-                       wrapper.after(
-                               this.originalElement.css({
-                                       position: wrapper.css('position'),
-                                       width: wrapper.outerWidth(),
-                                       height: wrapper.outerHeight(),
-                                       top: wrapper.css('top'),
-                                       left: wrapper.css('left')
-                               })
-                       ).remove();
+                       this.originalElement.css({
+                               position: wrapper.css('position'),
+                               width: wrapper.outerWidth(),
+                               height: wrapper.outerHeight(),
+                               top: wrapper.css('top'),
+                               left: wrapper.css('left')
+                       }).insertAfter( wrapper );
+                       wrapper.remove();
                }
 
                this.originalElement.css('resize', this.originalResizeStyle);
@@ -263,8 +264,8 @@ $.widget("ui.resizable", $.ui.mouse, {
                //Aspect Ratio
                this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
 
-           var cursor = $('.ui-resizable-' + this.axis).css('cursor');
-           $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
+               var cursor = $('.ui-resizable-' + this.axis).css('cursor');
+               $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
 
                el.addClass("ui-resizable-resizing");
                this._propagate("start", event);
@@ -275,14 +276,14 @@ $.widget("ui.resizable", $.ui.mouse, {
 
                //Increase performance, avoid regex
                var el = this.helper, o = this.options, props = {},
-                       self = this, smp = this.originalMousePosition, a = this.axis;
+                       that = this, smp = this.originalMousePosition, a = this.axis;
 
                var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;
                var trigger = this._change[a];
                if (!trigger) return false;
 
                // Calculate the attrs that will be change
-               var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
+               var data = trigger.apply(this, [event, dx, dy]);
 
                // Put this in the mouseDrag handler since the user can start pressing shift while resizing
                this._updateVirtualBoundaries(event.shiftKey);
@@ -313,22 +314,22 @@ $.widget("ui.resizable", $.ui.mouse, {
        _mouseStop: function(event) {
 
                this.resizing = false;
-               var o = this.options, self = this;
+               var o = this.options, that = this;
 
                if(this._helper) {
                        var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
-                               soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
-                               soffsetw = ista ? 0 : self.sizeDiff.width;
+                               soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : that.sizeDiff.height,
+                               soffsetw = ista ? 0 : that.sizeDiff.width;
 
-                       var s = { width: (self.helper.width()  - soffsetw), height: (self.helper.height() - soffseth) },
-                               left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
-                               top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+                       var s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) },
+                               left = (parseInt(that.element.css('left'), 10) + (that.position.left - that.originalPosition.left)) || null,
+                               top = (parseInt(that.element.css('top'), 10) + (that.position.top - that.originalPosition.top)) || null;
 
                        if (!o.animate)
                                this.element.css($.extend(s, { top: top, left: left }));
 
-                       self.helper.height(self.size.height);
-                       self.helper.width(self.size.width);
+                       that.helper.height(that.size.height);
+                       that.helper.width(that.size.width);
 
                        if (this._helper && !o.animate) this._proportionallyResize();
                }
@@ -344,31 +345,31 @@ $.widget("ui.resizable", $.ui.mouse, {
 
        },
 
-    _updateVirtualBoundaries: function(forceAspectRatio) {
-        var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
-
-        b = {
-            minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
-            maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
-            minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
-            maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
-        };
-
-        if(this._aspectRatio || forceAspectRatio) {
-            // We want to create an enclosing box whose aspect ration is the requested one
-            // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
-            pMinWidth = b.minHeight * this.aspectRatio;
-            pMinHeight = b.minWidth / this.aspectRatio;
-            pMaxWidth = b.maxHeight * this.aspectRatio;
-            pMaxHeight = b.maxWidth / this.aspectRatio;
-
-            if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
-            if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
-            if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
-            if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
-        }
-        this._vBoundaries = b;
-    },
+       _updateVirtualBoundaries: function(forceAspectRatio) {
+               var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
+
+               b = {
+                       minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+                       maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+                       minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+                       maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+               };
+
+               if(this._aspectRatio || forceAspectRatio) {
+                       // We want to create an enclosing box whose aspect ration is the requested one
+                       // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+                       pMinWidth = b.minHeight * this.aspectRatio;
+                       pMinHeight = b.minWidth / this.aspectRatio;
+                       pMaxWidth = b.maxHeight * this.aspectRatio;
+                       pMaxHeight = b.maxWidth / this.aspectRatio;
+
+                       if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
+                       if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
+                       if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
+                       if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
+               }
+               this._vBoundaries = b;
+       },
 
        _updateCache: function(data) {
                var o = this.options;
@@ -445,9 +446,6 @@ $.widget("ui.resizable", $.ui.mouse, {
                                });
                        }
 
-                       if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length)))
-                               continue;
-
                        prel.css({
                                height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
                                width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
@@ -467,8 +465,8 @@ $.widget("ui.resizable", $.ui.mouse, {
                        this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
 
                        // fix ie6 offset TODO: This seems broken
-                       var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0),
-                       pxyoffset = ( ie6 ? 2 : -1 );
+                       var ie6offset = ($.ui.ie6 ? 1 : 0),
+                       pxyoffset = ( $.ui.ie6 ? 2 : -1 );
 
                        this.helper.addClass(this._helper).css({
                                width: this.element.outerWidth() + pxyoffset,
@@ -539,10 +537,6 @@ $.widget("ui.resizable", $.ui.mouse, {
 
 });
 
-$.extend($.ui.resizable, {
-       version: "1.8.24"
-});
-
 /*
  * Resizable Extensions
  */
@@ -550,7 +544,7 @@ $.extend($.ui.resizable, {
 $.ui.plugin.add("resizable", "alsoResize", {
 
        start: function (event, ui) {
-               var self = $(this).data("resizable"), o = self.options;
+               var that = $(this).data("resizable"), o = that.options;
 
                var _store = function (exp) {
                        $(exp).each(function() {
@@ -571,16 +565,16 @@ $.ui.plugin.add("resizable", "alsoResize", {
        },
 
        resize: function (event, ui) {
-               var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
+               var that = $(this).data("resizable"), o = that.options, os = that.originalSize, op = that.originalPosition;
 
                var delta = {
-                       height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,
-                       top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
+                       height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
+                       top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
                },
 
                _alsoResize = function (exp, c) {
                        $(exp).each(function() {
-                               var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, 
+                               var el = $(this), start = $(this).data("resizable-alsoresize"), style = {},
                                        css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left'];
 
                                $.each(css, function (i, prop) {
@@ -608,34 +602,34 @@ $.ui.plugin.add("resizable", "alsoResize", {
 $.ui.plugin.add("resizable", "animate", {
 
        stop: function(event, ui) {
-               var self = $(this).data("resizable"), o = self.options;
+               var that = $(this).data("resizable"), o = that.options;
 
-               var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
-                                       soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
-                                               soffsetw = ista ? 0 : self.sizeDiff.width;
+               var pr = that._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+                                       soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : that.sizeDiff.height,
+                                               soffsetw = ista ? 0 : that.sizeDiff.width;
 
-               var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
-                                       left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
-                                               top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+               var style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+                                       left = (parseInt(that.element.css('left'), 10) + (that.position.left - that.originalPosition.left)) || null,
+                                               top = (parseInt(that.element.css('top'), 10) + (that.position.top - that.originalPosition.top)) || null;
 
-               self.element.animate(
+               that.element.animate(
                        $.extend(style, top && left ? { top: top, left: left } : {}), {
                                duration: o.animateDuration,
                                easing: o.animateEasing,
                                step: function() {
 
                                        var data = {
-                                               width: parseInt(self.element.css('width'), 10),
-                                               height: parseInt(self.element.css('height'), 10),
-                                               top: parseInt(self.element.css('top'), 10),
-                                               left: parseInt(self.element.css('left'), 10)
+                                               width: parseInt(that.element.css('width'), 10),
+                                               height: parseInt(that.element.css('height'), 10),
+                                               top: parseInt(that.element.css('top'), 10),
+                                               left: parseInt(that.element.css('left'), 10)
                                        };
 
                                        if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });
 
                                        // propagating resize, and updating values for each animation step
-                                       self._updateCache(data);
-                                       self._propagate("resize", event);
+                                       that._updateCache(data);
+                                       that._propagate("resize", event);
 
                                }
                        }
@@ -647,17 +641,17 @@ $.ui.plugin.add("resizable", "animate", {
 $.ui.plugin.add("resizable", "containment", {
 
        start: function(event, ui) {
-               var self = $(this).data("resizable"), o = self.options, el = self.element;
+               var that = $(this).data("resizable"), o = that.options, el = that.element;
                var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
                if (!ce) return;
 
-               self.containerElement = $(ce);
+               that.containerElement = $(ce);
 
                if (/document/.test(oc) || oc == document) {
-                       self.containerOffset = { left: 0, top: 0 };
-                       self.containerPosition = { left: 0, top: 0 };
+                       that.containerOffset = { left: 0, top: 0 };
+                       that.containerPosition = { left: 0, top: 0 };
 
-                       self.parentData = {
+                       that.parentData = {
                                element: $(document), left: 0, top: 0,
                                width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
                        };
@@ -668,70 +662,70 @@ $.ui.plugin.add("resizable", "containment", {
                        var element = $(ce), p = [];
                        $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
 
-                       self.containerOffset = element.offset();
-                       self.containerPosition = element.position();
-                       self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+                       that.containerOffset = element.offset();
+                       that.containerPosition = element.position();
+                       that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
 
-                       var co = self.containerOffset, ch = self.containerSize.height,  cw = self.containerSize.width,
+                       var co = that.containerOffset, ch = that.containerSize.height,  cw = that.containerSize.width,
                                                width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
 
-                       self.parentData = {
+                       that.parentData = {
                                element: ce, left: co.left, top: co.top, width: width, height: height
                        };
                }
        },
 
        resize: function(event, ui) {
-               var self = $(this).data("resizable"), o = self.options,
-                               ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position,
-                               pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement;
+               var that = $(this).data("resizable"), o = that.options,
+                               ps = that.containerSize, co = that.containerOffset, cs = that.size, cp = that.position,
+                               pRatio = that._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = that.containerElement;
 
                if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;
 
-               if (cp.left < (self._helper ? co.left : 0)) {
-                       self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));
-                       if (pRatio) self.size.height = self.size.width / self.aspectRatio;
-                       self.position.left = o.helper ? co.left : 0;
+               if (cp.left < (that._helper ? co.left : 0)) {
+                       that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
+                       if (pRatio) that.size.height = that.size.width / that.aspectRatio;
+                       that.position.left = o.helper ? co.left : 0;
                }
 
-               if (cp.top < (self._helper ? co.top : 0)) {
-                       self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);
-                       if (pRatio) self.size.width = self.size.height * self.aspectRatio;
-                       self.position.top = self._helper ? co.top : 0;
+               if (cp.top < (that._helper ? co.top : 0)) {
+                       that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
+                       if (pRatio) that.size.width = that.size.height * that.aspectRatio;
+                       that.position.top = that._helper ? co.top : 0;
                }
 
-               self.offset.left = self.parentData.left+self.position.left;
-               self.offset.top = self.parentData.top+self.position.top;
+               that.offset.left = that.parentData.left+that.position.left;
+               that.offset.top = that.parentData.top+that.position.top;
 
-               var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ),
-                                       hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height );
+               var woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width ),
+                                       hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
 
-               var isParent = self.containerElement.get(0) == self.element.parent().get(0),
-                   isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position'));
+               var isParent = that.containerElement.get(0) == that.element.parent().get(0),
+                       isOffsetRelative = /relative|absolute/.test(that.containerElement.css('position'));
 
-               if(isParent && isOffsetRelative) woset -= self.parentData.left;
+               if(isParent && isOffsetRelative) woset -= that.parentData.left;
 
-               if (woset + self.size.width >= self.parentData.width) {
-                       self.size.width = self.parentData.width - woset;
-                       if (pRatio) self.size.height = self.size.width / self.aspectRatio;
+               if (woset + that.size.width >= that.parentData.width) {
+                       that.size.width = that.parentData.width - woset;
+                       if (pRatio) that.size.height = that.size.width / that.aspectRatio;
                }
 
-               if (hoset + self.size.height >= self.parentData.height) {
-                       self.size.height = self.parentData.height - hoset;
-                       if (pRatio) self.size.width = self.size.height * self.aspectRatio;
+               if (hoset + that.size.height >= that.parentData.height) {
+                       that.size.height = that.parentData.height - hoset;
+                       if (pRatio) that.size.width = that.size.height * that.aspectRatio;
                }
        },
 
        stop: function(event, ui){
-               var self = $(this).data("resizable"), o = self.options, cp = self.position,
-                               co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;
+               var that = $(this).data("resizable"), o = that.options, cp = that.position,
+                               co = that.containerOffset, cop = that.containerPosition, ce = that.containerElement;
 
-               var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height;
+               var helper = $(that.helper), ho = helper.offset(), w = helper.outerWidth() - that.sizeDiff.width, h = helper.outerHeight() - that.sizeDiff.height;
 
-               if (self._helper && !o.animate && (/relative/).test(ce.css('position')))
+               if (that._helper && !o.animate && (/relative/).test(ce.css('position')))
                        $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
 
-               if (self._helper && !o.animate && (/static/).test(ce.css('position')))
+               if (that._helper && !o.animate && (/static/).test(ce.css('position')))
                        $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
 
        }
@@ -741,26 +735,26 @@ $.ui.plugin.add("resizable", "ghost", {
 
        start: function(event, ui) {
 
-               var self = $(this).data("resizable"), o = self.options, cs = self.size;
+               var that = $(this).data("resizable"), o = that.options, cs = that.size;
 
-               self.ghost = self.originalElement.clone();
-               self.ghost
+               that.ghost = that.originalElement.clone();
+               that.ghost
                        .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
                        .addClass('ui-resizable-ghost')
                        .addClass(typeof o.ghost == 'string' ? o.ghost : '');
 
-               self.ghost.appendTo(self.helper);
+               that.ghost.appendTo(that.helper);
 
        },
 
        resize: function(event, ui){
-               var self = $(this).data("resizable"), o = self.options;
-               if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width });
+               var that = $(this).data("resizable"), o = that.options;
+               if (that.ghost) that.ghost.css({ position: 'relative', height: that.size.height, width: that.size.width });
        },
 
        stop: function(event, ui){
-               var self = $(this).data("resizable"), o = self.options;
-               if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));
+               var that = $(this).data("resizable"), o = that.options;
+               if (that.ghost && that.helper) that.helper.get(0).removeChild(that.ghost.get(0));
        }
 
 });
@@ -768,29 +762,29 @@ $.ui.plugin.add("resizable", "ghost", {
 $.ui.plugin.add("resizable", "grid", {
 
        resize: function(event, ui) {
-               var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey;
+               var that = $(this).data("resizable"), o = that.options, cs = that.size, os = that.originalSize, op = that.originalPosition, a = that.axis, ratio = o._aspectRatio || event.shiftKey;
                o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
                var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);
 
                if (/^(se|s|e)$/.test(a)) {
-                       self.size.width = os.width + ox;
-                       self.size.height = os.height + oy;
+                       that.size.width = os.width + ox;
+                       that.size.height = os.height + oy;
                }
                else if (/^(ne)$/.test(a)) {
-                       self.size.width = os.width + ox;
-                       self.size.height = os.height + oy;
-                       self.position.top = op.top - oy;
+                       that.size.width = os.width + ox;
+                       that.size.height = os.height + oy;
+                       that.position.top = op.top - oy;
                }
                else if (/^(sw)$/.test(a)) {
-                       self.size.width = os.width + ox;
-                       self.size.height = os.height + oy;
-                       self.position.left = op.left - ox;
+                       that.size.width = os.width + ox;
+                       that.size.height = os.height + oy;
+                       that.position.left = op.left - ox;
                }
                else {
-                       self.size.width = os.width + ox;
-                       self.size.height = os.height + oy;
-                       self.position.top = op.top - oy;
-                       self.position.left = op.left - ox;
+                       that.size.width = os.width + ox;
+                       that.size.height = os.height + oy;
+                       that.position.top = op.top - oy;
+                       that.position.left = op.left - ox;
                }
        }
 
index 44c6e8c..3f27b73 100644 (file)
@@ -1,11 +1,12 @@
 /*!
- * jQuery UI Selectable 1.8.24
+ * jQuery UI Selectable 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Selectables
+ * http://api.jqueryui.com/selectable/
  *
  * Depends:
  *     jquery.ui.core.js
@@ -15,6 +16,7 @@
 (function( $, undefined ) {
 
 $.widget("ui.selectable", $.ui.mouse, {
+       version: "1.9.2",
        options: {
                appendTo: 'body',
                autoRefresh: true,
@@ -23,7 +25,7 @@ $.widget("ui.selectable", $.ui.mouse, {
                tolerance: 'touch'
        },
        _create: function() {
-               var self = this;
+               var that = this;
 
                this.element.addClass("ui-selectable");
 
@@ -32,7 +34,7 @@ $.widget("ui.selectable", $.ui.mouse, {
                // cache selectee children based on filter
                var selectees;
                this.refresh = function() {
-                       selectees = $(self.options.filter, self.element[0]);
+                       selectees = $(that.options.filter, that.element[0]);
                        selectees.addClass("ui-selectee");
                        selectees.each(function() {
                                var $this = $(this);
@@ -60,21 +62,17 @@ $.widget("ui.selectable", $.ui.mouse, {
                this.helper = $("<div class='ui-selectable-helper'></div>");
        },
 
-       destroy: function() {
+       _destroy: function() {
                this.selectees
                        .removeClass("ui-selectee")
                        .removeData("selectable-item");
                this.element
-                       .removeClass("ui-selectable ui-selectable-disabled")
-                       .removeData("selectable")
-                       .unbind(".selectable");
+                       .removeClass("ui-selectable ui-selectable-disabled");
                this._mouseDestroy();
-
-               return this;
        },
 
        _mouseStart: function(event) {
-               var self = this;
+               var that = this;
 
                this.opos = [event.pageX, event.pageY];
 
@@ -109,7 +107,7 @@ $.widget("ui.selectable", $.ui.mouse, {
                                selectee.$element.addClass('ui-unselecting');
                                selectee.unselecting = true;
                                // selectable UNSELECTING callback
-                               self._trigger("unselecting", event, {
+                               that._trigger("unselecting", event, {
                                        unselecting: selectee.element
                                });
                        }
@@ -127,11 +125,11 @@ $.widget("ui.selectable", $.ui.mouse, {
                                selectee.selected = doSelect;
                                // selectable (UN)SELECTING callback
                                if (doSelect) {
-                                       self._trigger("selecting", event, {
+                                       that._trigger("selecting", event, {
                                                selecting: selectee.element
                                        });
                                } else {
-                                       self._trigger("unselecting", event, {
+                                       that._trigger("unselecting", event, {
                                                unselecting: selectee.element
                                        });
                                }
@@ -142,7 +140,7 @@ $.widget("ui.selectable", $.ui.mouse, {
        },
 
        _mouseDrag: function(event) {
-               var self = this;
+               var that = this;
                this.dragged = true;
 
                if (this.options.disabled)
@@ -158,7 +156,7 @@ $.widget("ui.selectable", $.ui.mouse, {
                this.selectees.each(function() {
                        var selectee = $.data(this, "selectable-item");
                        //prevent helper from being selected if appendTo: selectable
-                       if (!selectee || selectee.element == self.element[0])
+                       if (!selectee || selectee.element == that.element[0])
                                return;
                        var hit = false;
                        if (options.tolerance == 'touch') {
@@ -181,7 +179,7 @@ $.widget("ui.selectable", $.ui.mouse, {
                                        selectee.$element.addClass('ui-selecting');
                                        selectee.selecting = true;
                                        // selectable SELECTING callback
-                                       self._trigger("selecting", event, {
+                                       that._trigger("selecting", event, {
                                                selecting: selectee.element
                                        });
                                }
@@ -201,7 +199,7 @@ $.widget("ui.selectable", $.ui.mouse, {
                                                        selectee.unselecting = true;
                                                }
                                                // selectable UNSELECTING callback
-                                               self._trigger("unselecting", event, {
+                                               that._trigger("unselecting", event, {
                                                        unselecting: selectee.element
                                                });
                                        }
@@ -214,7 +212,7 @@ $.widget("ui.selectable", $.ui.mouse, {
                                                selectee.$element.addClass('ui-unselecting');
                                                selectee.unselecting = true;
                                                // selectable UNSELECTING callback
-                                               self._trigger("unselecting", event, {
+                                               that._trigger("unselecting", event, {
                                                        unselecting: selectee.element
                                                });
                                        }
@@ -226,7 +224,7 @@ $.widget("ui.selectable", $.ui.mouse, {
        },
 
        _mouseStop: function(event) {
-               var self = this;
+               var that = this;
 
                this.dragged = false;
 
@@ -237,7 +235,7 @@ $.widget("ui.selectable", $.ui.mouse, {
                        selectee.$element.removeClass('ui-unselecting');
                        selectee.unselecting = false;
                        selectee.startselected = false;
-                       self._trigger("unselected", event, {
+                       that._trigger("unselected", event, {
                                unselected: selectee.element
                        });
                });
@@ -247,7 +245,7 @@ $.widget("ui.selectable", $.ui.mouse, {
                        selectee.selecting = false;
                        selectee.selected = true;
                        selectee.startselected = true;
-                       self._trigger("selected", event, {
+                       that._trigger("selected", event, {
                                selected: selectee.element
                        });
                });
@@ -260,8 +258,4 @@ $.widget("ui.selectable", $.ui.mouse, {
 
 });
 
-$.extend($.ui.selectable, {
-       version: "1.8.24"
-});
-
 })(jQuery);
index c554e78..c3daa7a 100644 (file)
@@ -1,11 +1,12 @@
 /*!
- * jQuery UI Slider 1.8.24
+ * jQuery UI Slider 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Slider
+ * http://api.jqueryui.com/slider/
  *
  * Depends:
  *     jquery.ui.core.js
@@ -19,7 +20,7 @@
 var numPages = 5;
 
 $.widget( "ui.slider", $.ui.mouse, {
-
+       version: "1.9.2",
        widgetEventPrefix: "slide",
 
        options: {
@@ -35,11 +36,10 @@ $.widget( "ui.slider", $.ui.mouse, {
        },
 
        _create: function() {
-               var self = this,
+               var i, handleCount,
                        o = this.options,
                        existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
                        handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
-                       handleCount = ( o.values && o.values.length ) || 1,
                        handles = [];
 
                this._keySliding = false;
@@ -74,15 +74,17 @@ $.widget( "ui.slider", $.ui.mouse, {
                                .addClass( "ui-slider-range" +
                                // note: this isn't the most fittingly semantic framework class for this element,
                                // but worked best visually with a variety of themes
-                               " ui-widget-header" + 
+                               " ui-widget-header" +
                                ( ( o.range === "min" || o.range === "max" ) ? " ui-slider-range-" + o.range : "" ) );
                }
 
-               for ( var i = existingHandles.length; i < handleCount; i += 1 ) {
+               handleCount = ( o.values && o.values.length ) || 1;
+
+               for ( i = existingHandles.length; i < handleCount; i++ ) {
                        handles.push( handle );
                }
 
-               this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( self.element ) );
+               this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
 
                this.handle = this.handles.eq( 0 );
 
@@ -90,11 +92,12 @@ $.widget( "ui.slider", $.ui.mouse, {
                        .click(function( event ) {
                                event.preventDefault();
                        })
-                       .hover(function() {
+                       .mouseenter(function() {
                                if ( !o.disabled ) {
                                        $( this ).addClass( "ui-state-hover" );
                                }
-                       }, function() {
+                       })
+                       .mouseleave(function() {
                                $( this ).removeClass( "ui-state-hover" );
                        })
                        .focus(function() {
@@ -110,21 +113,14 @@ $.widget( "ui.slider", $.ui.mouse, {
                        });
 
                this.handles.each(function( i ) {
-                       $( this ).data( "index.ui-slider-handle", i );
+                       $( this ).data( "ui-slider-handle-index", i );
                });
 
-               this.handles
-                       .keydown(function( event ) {
-                               var index = $( this ).data( "index.ui-slider-handle" ),
-                                       allowed,
-                                       curVal,
-                                       newVal,
-                                       step;
-       
-                               if ( self.options.disabled ) {
-                                       return;
-                               }
-       
+               this._on( this.handles, {
+                       keydown: function( event ) {
+                               var allowed, curVal, newVal, step,
+                                       index = $( event.target ).data( "ui-slider-handle-index" );
+
                                switch ( event.keyCode ) {
                                        case $.ui.keyCode.HOME:
                                        case $.ui.keyCode.END:
@@ -135,73 +131,73 @@ $.widget( "ui.slider", $.ui.mouse, {
                                        case $.ui.keyCode.DOWN:
                                        case $.ui.keyCode.LEFT:
                                                event.preventDefault();
-                                               if ( !self._keySliding ) {
-                                                       self._keySliding = true;
-                                                       $( this ).addClass( "ui-state-active" );
-                                                       allowed = self._start( event, index );
+                                               if ( !this._keySliding ) {
+                                                       this._keySliding = true;
+                                                       $( event.target ).addClass( "ui-state-active" );
+                                                       allowed = this._start( event, index );
                                                        if ( allowed === false ) {
                                                                return;
                                                        }
                                                }
                                                break;
                                }
-       
-                               step = self.options.step;
-                               if ( self.options.values && self.options.values.length ) {
-                                       curVal = newVal = self.values( index );
+
+                               step = this.options.step;
+                               if ( this.options.values && this.options.values.length ) {
+                                       curVal = newVal = this.values( index );
                                } else {
-                                       curVal = newVal = self.value();
+                                       curVal = newVal = this.value();
                                }
-       
+
                                switch ( event.keyCode ) {
                                        case $.ui.keyCode.HOME:
-                                               newVal = self._valueMin();
+                                               newVal = this._valueMin();
                                                break;
                                        case $.ui.keyCode.END:
-                                               newVal = self._valueMax();
+                                               newVal = this._valueMax();
                                                break;
                                        case $.ui.keyCode.PAGE_UP:
-                                               newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) );
+                                               newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
                                                break;
                                        case $.ui.keyCode.PAGE_DOWN:
-                                               newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) );
+                                               newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
                                                break;
                                        case $.ui.keyCode.UP:
                                        case $.ui.keyCode.RIGHT:
-                                               if ( curVal === self._valueMax() ) {
+                                               if ( curVal === this._valueMax() ) {
                                                        return;
                                                }
-                                               newVal = self._trimAlignValue( curVal + step );
+                                               newVal = this._trimAlignValue( curVal + step );
                                                break;
                                        case $.ui.keyCode.DOWN:
                                        case $.ui.keyCode.LEFT:
-                                               if ( curVal === self._valueMin() ) {
+                                               if ( curVal === this._valueMin() ) {
                                                        return;
                                                }
-                                               newVal = self._trimAlignValue( curVal - step );
+                                               newVal = this._trimAlignValue( curVal - step );
                                                break;
                                }
-       
-                               self._slide( event, index, newVal );
-                       })
-                       .keyup(function( event ) {
-                               var index = $( this ).data( "index.ui-slider-handle" );
-       
-                               if ( self._keySliding ) {
-                                       self._keySliding = false;
-                                       self._stop( event, index );
-                                       self._change( event, index );
-                                       $( this ).removeClass( "ui-state-active" );
+
+                               this._slide( event, index, newVal );
+                       },
+                       keyup: function( event ) {
+                               var index = $( event.target ).data( "ui-slider-handle-index" );
+
+                               if ( this._keySliding ) {
+                                       this._keySliding = false;
+                                       this._stop( event, index );
+                                       this._change( event, index );
+                                       $( event.target ).removeClass( "ui-state-active" );
                                }
-       
-                       });
+                       }
+               });
 
                this._refreshValue();
 
                this._animateOff = false;
        },
 
-       destroy: function() {
+       _destroy: function() {
                this.handles.remove();
                this.range.remove();
 
@@ -212,26 +208,15 @@ $.widget( "ui.slider", $.ui.mouse, {
                                " ui-slider-disabled" +
                                " ui-widget" +
                                " ui-widget-content" +
-                               " ui-corner-all" )
-                       .removeData( "slider" )
-                       .unbind( ".slider" );
+                               " ui-corner-all" );
 
                this._mouseDestroy();
-
-               return this;
        },
 
        _mouseCapture: function( event ) {
-               var o = this.options,
-                       position,
-                       normValue,
-                       distance,
-                       closestHandle,
-                       self,
-                       index,
-                       allowed,
-                       offset,
-                       mouseOverHandle;
+               var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+                       that = this,
+                       o = this.options;
 
                if ( o.disabled ) {
                        return false;
@@ -246,9 +231,8 @@ $.widget( "ui.slider", $.ui.mouse, {
                position = { x: event.pageX, y: event.pageY };
                normValue = this._normValueFromMouse( position );
                distance = this._valueMax() - this._valueMin() + 1;
-               self = this;
                this.handles.each(function( i ) {
-                       var thisDistance = Math.abs( normValue - self.values(i) );
+                       var thisDistance = Math.abs( normValue - that.values(i) );
                        if ( distance > thisDistance ) {
                                distance = thisDistance;
                                closestHandle = $( this );
@@ -270,12 +254,12 @@ $.widget( "ui.slider", $.ui.mouse, {
                }
                this._mouseSliding = true;
 
-               self._handleIndex = index;
+               this._handleIndex = index;
 
                closestHandle
                        .addClass( "ui-state-active" )
                        .focus();
-               
+
                offset = closestHandle.offset();
                mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" );
                this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
@@ -294,14 +278,14 @@ $.widget( "ui.slider", $.ui.mouse, {
                return true;
        },
 
-       _mouseStart: function( event ) {
+       _mouseStart: function() {
                return true;
        },
 
        _mouseDrag: function( event ) {
                var position = { x: event.pageX, y: event.pageY },
                        normValue = this._normValueFromMouse( position );
-               
+
                this._slide( event, this._handleIndex, normValue );
 
                return false;
@@ -320,7 +304,7 @@ $.widget( "ui.slider", $.ui.mouse, {
 
                return false;
        },
-       
+
        _detectOrientation: function() {
                this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
        },
@@ -377,7 +361,7 @@ $.widget( "ui.slider", $.ui.mouse, {
                if ( this.options.values && this.options.values.length ) {
                        otherVal = this.values( index ? 0 : 1 );
 
-                       if ( ( this.options.values.length === 2 && this.options.range === true ) && 
+                       if ( ( this.options.values.length === 2 && this.options.range === true ) &&
                                        ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
                                ) {
                                newVal = otherVal;
@@ -498,10 +482,10 @@ $.widget( "ui.slider", $.ui.mouse, {
                                if ( value ) {
                                        this.handles.filter( ".ui-state-focus" ).blur();
                                        this.handles.removeClass( "ui-state-hover" );
-                                       this.handles.propAttr( "disabled", true );
+                                       this.handles.prop( "disabled", true );
                                        this.element.addClass( "ui-disabled" );
                                } else {
-                                       this.handles.propAttr( "disabled", false );
+                                       this.handles.prop( "disabled", false );
                                        this.element.removeClass( "ui-disabled" );
                                }
                                break;
@@ -526,6 +510,12 @@ $.widget( "ui.slider", $.ui.mouse, {
                                }
                                this._animateOff = false;
                                break;
+                       case "min":
+                       case "max":
+                               this._animateOff = true;
+                               this._refreshValue();
+                               this._animateOff = false;
+                               break;
                }
        },
 
@@ -562,7 +552,7 @@ $.widget( "ui.slider", $.ui.mouse, {
                        return vals;
                }
        },
-       
+
        // returns the step-aligned value that val is closest to, between (inclusive) min and max
        _trimAlignValue: function( val ) {
                if ( val <= this._valueMin() ) {
@@ -591,38 +581,34 @@ $.widget( "ui.slider", $.ui.mouse, {
        _valueMax: function() {
                return this.options.max;
        },
-       
+
        _refreshValue: function() {
-               var oRange = this.options.range,
+               var lastValPercent, valPercent, value, valueMin, valueMax,
+                       oRange = this.options.range,
                        o = this.options,
-                       self = this,
+                       that = this,
                        animate = ( !this._animateOff ) ? o.animate : false,
-                       valPercent,
-                       _set = {},
-                       lastValPercent,
-                       value,
-                       valueMin,
-                       valueMax;
+                       _set = {};
 
                if ( this.options.values && this.options.values.length ) {
-                       this.handles.each(function( i, j ) {
-                               valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100;
-                               _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+                       this.handles.each(function( i ) {
+                               valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+                               _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
                                $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
-                               if ( self.options.range === true ) {
-                                       if ( self.orientation === "horizontal" ) {
+                               if ( that.options.range === true ) {
+                                       if ( that.orientation === "horizontal" ) {
                                                if ( i === 0 ) {
-                                                       self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+                                                       that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
                                                }
                                                if ( i === 1 ) {
-                                                       self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+                                                       that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
                                                }
                                        } else {
                                                if ( i === 0 ) {
-                                                       self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+                                                       that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
                                                }
                                                if ( i === 1 ) {
-                                                       self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+                                                       that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
                                                }
                                        }
                                }
@@ -635,7 +621,7 @@ $.widget( "ui.slider", $.ui.mouse, {
                        valPercent = ( valueMax !== valueMin ) ?
                                        ( value - valueMin ) / ( valueMax - valueMin ) * 100 :
                                        0;
-                       _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+                       _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
                        this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
 
                        if ( oRange === "min" && this.orientation === "horizontal" ) {
@@ -655,8 +641,4 @@ $.widget( "ui.slider", $.ui.mouse, {
 
 });
 
-$.extend( $.ui.slider, {
-       version: "1.8.24"
-});
-
 }(jQuery));
index 9e0cac6..bd960df 100644 (file)
@@ -1,11 +1,12 @@
 /*!
- * jQuery UI Sortable 1.8.24
+ * jQuery UI Sortable 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Sortables
+ * http://api.jqueryui.com/sortable/
  *
  * Depends:
  *     jquery.ui.core.js
@@ -15,6 +16,7 @@
 (function( $, undefined ) {
 
 $.widget("ui.sortable", $.ui.mouse, {
+       version: "1.9.2",
        widgetEventPrefix: "sort",
        ready: false,
        options: {
@@ -58,14 +60,13 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                //Initialize mouse events for interaction
                this._mouseInit();
-               
+
                //We're ready to go
                this.ready = true
 
        },
 
-       destroy: function() {
-               $.Widget.prototype.destroy.call( this );
+       _destroy: function() {
                this.element
                        .removeClass("ui-sortable ui-sortable-disabled");
                this._mouseDestroy();
@@ -79,9 +80,8 @@ $.widget("ui.sortable", $.ui.mouse, {
        _setOption: function(key, value){
                if ( key === "disabled" ) {
                        this.options[ key ] = value;
-       
-                       this.widget()
-                               [ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" );
+
+                       this.widget().toggleClass( "ui-sortable-disabled", !!value );
                } else {
                        // Don't call widget base _setOption for disable as it adds ui-state-disabled class
                        $.Widget.prototype._setOption.apply(this, arguments);
@@ -101,13 +101,13 @@ $.widget("ui.sortable", $.ui.mouse, {
                this._refreshItems(event);
 
                //Find out if the clicked node (or one of its parents) is a actual item in this.items
-               var currentItem = null, self = this, nodes = $(event.target).parents().each(function() {
-                       if($.data(this, that.widgetName + '-item') == self) {
+               var currentItem = null, nodes = $(event.target).parents().each(function() {
+                       if($.data(this, that.widgetName + '-item') == that) {
                                currentItem = $(this);
                                return false;
                        }
                });
-               if($.data(event.target, that.widgetName + '-item') == self) currentItem = $(event.target);
+               if($.data(event.target, that.widgetName + '-item') == that) currentItem = $(event.target);
 
                if(!currentItem) return false;
                if(this.options.handle && !overrideHandle) {
@@ -125,7 +125,7 @@ $.widget("ui.sortable", $.ui.mouse, {
 
        _mouseStart: function(event, overrideHandle, noActivation) {
 
-               var o = this.options, self = this;
+               var o = this.options;
                this.currentContainer = this;
 
                //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
@@ -168,7 +168,7 @@ $.widget("ui.sortable", $.ui.mouse, {
                // TODO: Still need to figure out a way to make relative sorting possible
                this.helper.css("position", "absolute");
                this.cssPosition = this.helper.css("position");
-               
+
                //Generate the original position
                this.originalPosition = this._generatePosition(event);
                this.originalPageX = event.pageX;
@@ -221,7 +221,7 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                //Post 'activate' events to possible containers
                if(!noActivation) {
-                        for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); }
+                        for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, this._uiHash(this)); }
                }
 
                //Prepare possible droppables
@@ -307,8 +307,8 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                        if (itemElement != this.currentItem[0] //cannot intersect with itself
                                &&      this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
-                               &&      !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
-                               && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true)
+                               &&      !$.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
+                               && (this.options.type == 'semi-dynamic' ? !$.contains(this.element[0], itemElement) : true)
                                //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
                        ) {
 
@@ -348,16 +348,16 @@ $.widget("ui.sortable", $.ui.mouse, {
                        $.ui.ddmanager.drop(this, event);
 
                if(this.options.revert) {
-                       var self = this;
-                       var cur = self.placeholder.offset();
+                       var that = this;
+                       var cur = this.placeholder.offset();
 
-                       self.reverting = true;
+                       this.reverting = true;
 
                        $(this.helper).animate({
-                               left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
-                               top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
+                               left: cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
+                               top: cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
                        }, parseInt(this.options.revert, 10) || 500, function() {
-                               self._clear(event);
+                               that._clear(event);
                        });
                } else {
                        this._clear(event, noPropagation);
@@ -369,8 +369,6 @@ $.widget("ui.sortable", $.ui.mouse, {
 
        cancel: function() {
 
-               var self = this;
-
                if(this.dragging) {
 
                        this._mouseUp({ target: null });
@@ -382,9 +380,9 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                        //Post deactivating events to containers
                        for (var i = this.containers.length - 1; i >= 0; i--){
-                               this.containers[i]._trigger("deactivate", null, self._uiHash(this));
+                               this.containers[i]._trigger("deactivate", null, this._uiHash(this));
                                if(this.containers[i].containerCache.over) {
-                                       this.containers[i]._trigger("out", null, self._uiHash(this));
+                                       this.containers[i]._trigger("out", null, this._uiHash(this));
                                        this.containers[i].containerCache.over = 0;
                                }
                        }
@@ -529,10 +527,9 @@ $.widget("ui.sortable", $.ui.mouse, {
                        ? [options.connectWith]
                        : options.connectWith;
        },
-       
+
        _getItemsAsjQuery: function(connected) {
 
-               var self = this;
                var items = [];
                var queries = [];
                var connectWith = this._connectWith();
@@ -565,14 +562,13 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
 
-               for (var i=0; i < this.items.length; i++) {
-
+               this.items = $.grep(this.items, function (item) {
                        for (var j=0; j < list.length; j++) {
-                               if(list[j] == this.items[i].item[0])
-                                       this.items.splice(i,1);
+                               if(list[j] == item.item[0])
+                                       return false;
                        };
-
-               };
+                       return true;
+               });
 
        },
 
@@ -581,7 +577,6 @@ $.widget("ui.sortable", $.ui.mouse, {
                this.items = [];
                this.containers = [this];
                var items = this.items;
-               var self = this;
                var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]];
                var connectWith = this._connectWith();
 
@@ -660,16 +655,16 @@ $.widget("ui.sortable", $.ui.mouse, {
        },
 
        _createPlaceholder: function(that) {
-
-               var self = that || this, o = self.options;
+               that = that || this;
+               var o = that.options;
 
                if(!o.placeholder || o.placeholder.constructor == String) {
                        var className = o.placeholder;
                        o.placeholder = {
                                element: function() {
 
-                                       var el = $(document.createElement(self.currentItem[0].nodeName))
-                                               .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder")
+                                       var el = $(document.createElement(that.currentItem[0].nodeName))
+                                               .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
                                                .removeClass("ui-sortable-helper")[0];
 
                                        if(!className)
@@ -684,46 +679,46 @@ $.widget("ui.sortable", $.ui.mouse, {
                                        if(className && !o.forcePlaceholderSize) return;
 
                                        //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
-                                       if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); };
-                                       if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); };
+                                       if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css('paddingTop')||0, 10) - parseInt(that.currentItem.css('paddingBottom')||0, 10)); };
+                                       if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css('paddingLeft')||0, 10) - parseInt(that.currentItem.css('paddingRight')||0, 10)); };
                                }
                        };
                }
 
                //Create the placeholder
-               self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem));
+               that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
 
                //Append it after the actual current item
-               self.currentItem.after(self.placeholder);
+               that.currentItem.after(that.placeholder);
 
                //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
-               o.placeholder.update(self, self.placeholder);
+               o.placeholder.update(that, that.placeholder);
 
        },
 
        _contactContainers: function(event) {
-               
-               // get innermost container that intersects with item 
-               var innermostContainer = null, innermostIndex = null;           
-               
-               
+
+               // get innermost container that intersects with item
+               var innermostContainer = null, innermostIndex = null;
+
+
                for (var i = this.containers.length - 1; i >= 0; i--){
 
-                       // never consider a container that's located within the item itself 
-                       if($.ui.contains(this.currentItem[0], this.containers[i].element[0]))
+                       // never consider a container that's located within the item itself
+                       if($.contains(this.currentItem[0], this.containers[i].element[0]))
                                continue;
 
                        if(this._intersectsWith(this.containers[i].containerCache)) {
 
-                               // if we've already found a container and it's more "inner" than this, then continue 
-                               if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0]))
+                               // if we've already found a container and it's more "inner" than this, then continue
+                               if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0]))
                                        continue;
 
-                               innermostContainer = this.containers[i]; 
+                               innermostContainer = this.containers[i];
                                innermostIndex = i;
-                                       
+
                        } else {
-                               // container doesn't intersect. trigger "out" event if necessary 
+                               // container doesn't intersect. trigger "out" event if necessary
                                if(this.containers[i].containerCache.over) {
                                        this.containers[i]._trigger("out", event, this._uiHash(this));
                                        this.containers[i].containerCache.over = 0;
@@ -731,24 +726,34 @@ $.widget("ui.sortable", $.ui.mouse, {
                        }
 
                }
-               
-               // if no intersecting containers found, return 
-               if(!innermostContainer) return; 
+
+               // if no intersecting containers found, return
+               if(!innermostContainer) return;
 
                // move the item into the container if it's not there already
                if(this.containers.length === 1) {
                        this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
                        this.containers[innermostIndex].containerCache.over = 1;
-               } else if(this.currentContainer != this.containers[innermostIndex]) {
+               } else {
 
                        //When entering a new container, we will find the item with the least distance and append our item near it
-                       var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top'];
+                       var dist = 10000; var itemWithLeastDistance = null;
+                       var posProperty = this.containers[innermostIndex].floating ? 'left' : 'top';
+                       var sizeProperty = this.containers[innermostIndex].floating ? 'width' : 'height';
+                       var base = this.positionAbs[posProperty] + this.offset.click[posProperty];
                        for (var j = this.items.length - 1; j >= 0; j--) {
-                               if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue;
-                               var cur = this.containers[innermostIndex].floating ? this.items[j].item.offset().left : this.items[j].item.offset().top;
+                               if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue;
+                               if(this.items[j].item[0] == this.currentItem[0]) continue;
+                               var cur = this.items[j].item.offset()[posProperty];
+                               var nearBottom = false;
+                               if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
+                                       nearBottom = true;
+                                       cur += this.items[j][sizeProperty];
+                               }
+
                                if(Math.abs(cur - base) < dist) {
                                        dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
-                                       this.direction = (cur - base > 0) ? 'down' : 'up';
+                                       this.direction = nearBottom ? "up": "down";
                                }
                        }
 
@@ -765,9 +770,9 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                        this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
                        this.containers[innermostIndex].containerCache.over = 1;
-               } 
-       
-               
+               }
+
+
        },
 
        _createHelper: function(event) {
@@ -820,13 +825,13 @@ $.widget("ui.sortable", $.ui.mouse, {
                // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
                // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
                //    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
-               if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
+               if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
                        po.left += this.scrollParent.scrollLeft();
                        po.top += this.scrollParent.scrollTop();
                }
 
                if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
-               || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
+               || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.ui.ie)) //Ugly IE fix
                        po = { top: 0, left: 0 };
 
                return {
@@ -894,20 +899,20 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                if(!pos) pos = this.position;
                var mod = d == "absolute" ? 1 : -1;
-               var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+               var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
 
                return {
                        top: (
                                pos.top                                                                                                                                 // The absolute mouse position
                                + this.offset.relative.top * mod                                                                                // Only for relative positioned nodes: Relative offset from element to offset parent
                                + this.offset.parent.top * mod                                                                                  // The offsetParent's offset without borders (offset + border)
-                               - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+                               - ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
                        ),
                        left: (
                                pos.left                                                                                                                                // The absolute mouse position
                                + this.offset.relative.left * mod                                                                               // Only for relative positioned nodes: Relative offset from element to offset parent
                                + this.offset.parent.left * mod                                                                                 // The offsetParent's offset without borders (offset + border)
-                               - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+                               - ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
                        )
                };
 
@@ -915,7 +920,7 @@ $.widget("ui.sortable", $.ui.mouse, {
 
        _generatePosition: function(event) {
 
-               var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+               var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
 
                // This is another very weird special case that only happens for relative elements:
                // 1. If the css position is relative
@@ -958,14 +963,14 @@ $.widget("ui.sortable", $.ui.mouse, {
                                - this.offset.click.top                                                                                                 // Click offset (relative to the element)
                                - this.offset.relative.top                                                                                              // Only for relative positioned nodes: Relative offset from element to offset parent
                                - this.offset.parent.top                                                                                                // The offsetParent's offset without borders (offset + border)
-                               + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+                               + ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
                        ),
                        left: (
                                pageX                                                                                                                           // The absolute mouse position
                                - this.offset.click.left                                                                                                // Click offset (relative to the element)
                                - this.offset.relative.left                                                                                             // Only for relative positioned nodes: Relative offset from element to offset parent
                                - this.offset.parent.left                                                                                               // The offsetParent's offset without borders (offset + border)
-                               + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+                               + ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
                        )
                };
 
@@ -981,11 +986,11 @@ $.widget("ui.sortable", $.ui.mouse, {
                // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
                // 4. this lets only the last addition to the timeout stack through
                this.counter = this.counter ? ++this.counter : 1;
-               var self = this, counter = this.counter;
+               var counter = this.counter;
 
-               window.setTimeout(function() {
-                       if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
-               },0);
+               this._delay(function() {
+                       if(counter == this.counter) this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+               });
 
        },
 
@@ -994,7 +999,7 @@ $.widget("ui.sortable", $.ui.mouse, {
                this.reverting = false;
                // We delay all events that have to be triggered to after the point where the placeholder has been removed and
                // everything else normalized again
-               var delayedTriggers = [], self = this;
+               var delayedTriggers = [];
 
                // We first have to update the dom position of the actual currentItem
                // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
@@ -1023,6 +1028,7 @@ $.widget("ui.sortable", $.ui.mouse, {
                        }
                }
 
+
                //Post events to containers
                for (var i = this.containers.length - 1; i >= 0; i--){
                        if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
@@ -1072,23 +1078,19 @@ $.widget("ui.sortable", $.ui.mouse, {
                }
        },
 
-       _uiHash: function(inst) {
-               var self = inst || this;
+       _uiHash: function(_inst) {
+               var inst = _inst || this;
                return {
-                       helper: self.helper,
-                       placeholder: self.placeholder || $([]),
-                       position: self.position,
-                       originalPosition: self.originalPosition,
-                       offset: self.positionAbs,
-                       item: self.currentItem,
-                       sender: inst ? inst.element : null
+                       helper: inst.helper,
+                       placeholder: inst.placeholder || $([]),
+                       position: inst.position,
+                       originalPosition: inst.originalPosition,
+                       offset: inst.positionAbs,
+                       item: inst.currentItem,
+                       sender: _inst ? _inst.element : null
                };
        }
 
 });
 
-$.extend($.ui.sortable, {
-       version: "1.8.24"
-});
-
 })(jQuery);
diff --git a/resources/lib/jquery.ui/jquery.ui.spinner.js b/resources/lib/jquery.ui/jquery.ui.spinner.js
new file mode 100644 (file)
index 0000000..98dc9df
--- /dev/null
@@ -0,0 +1,478 @@
+/*!
+ * jQuery UI Spinner 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/spinner/
+ *
+ * Depends:
+ *  jquery.ui.core.js
+ *  jquery.ui.widget.js
+ *  jquery.ui.button.js
+ */
+(function( $ ) {
+
+function modifier( fn ) {
+       return function() {
+               var previous = this.element.val();
+               fn.apply( this, arguments );
+               this._refresh();
+               if ( previous !== this.element.val() ) {
+                       this._trigger( "change" );
+               }
+       };
+}
+
+$.widget( "ui.spinner", {
+       version: "1.9.2",
+       defaultElement: "<input>",
+       widgetEventPrefix: "spin",
+       options: {
+               culture: null,
+               icons: {
+                       down: "ui-icon-triangle-1-s",
+                       up: "ui-icon-triangle-1-n"
+               },
+               incremental: true,
+               max: null,
+               min: null,
+               numberFormat: null,
+               page: 10,
+               step: 1,
+
+               change: null,
+               spin: null,
+               start: null,
+               stop: null
+       },
+
+       _create: function() {
+               // handle string values that need to be parsed
+               this._setOption( "max", this.options.max );
+               this._setOption( "min", this.options.min );
+               this._setOption( "step", this.options.step );
+
+               // format the value, but don't constrain
+               this._value( this.element.val(), true );
+
+               this._draw();
+               this._on( this._events );
+               this._refresh();
+
+               // turning off autocomplete prevents the browser from remembering the
+               // value when navigating through history, so we re-enable autocomplete
+               // if the page is unloaded before the widget is destroyed. #7790
+               this._on( this.window, {
+                       beforeunload: function() {
+                               this.element.removeAttr( "autocomplete" );
+                       }
+               });
+       },
+
+       _getCreateOptions: function() {
+               var options = {},
+                       element = this.element;
+
+               $.each( [ "min", "max", "step" ], function( i, option ) {
+                       var value = element.attr( option );
+                       if ( value !== undefined && value.length ) {
+                               options[ option ] = value;
+                       }
+               });
+
+               return options;
+       },
+
+       _events: {
+               keydown: function( event ) {
+                       if ( this._start( event ) && this._keydown( event ) ) {
+                               event.preventDefault();
+                       }
+               },
+               keyup: "_stop",
+               focus: function() {
+                       this.previous = this.element.val();
+               },
+               blur: function( event ) {
+                       if ( this.cancelBlur ) {
+                               delete this.cancelBlur;
+                               return;
+                       }
+
+                       this._refresh();
+                       if ( this.previous !== this.element.val() ) {
+                               this._trigger( "change", event );
+                       }
+               },
+               mousewheel: function( event, delta ) {
+                       if ( !delta ) {
+                               return;
+                       }
+                       if ( !this.spinning && !this._start( event ) ) {
+                               return false;
+                       }
+
+                       this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+                       clearTimeout( this.mousewheelTimer );
+                       this.mousewheelTimer = this._delay(function() {
+                               if ( this.spinning ) {
+                                       this._stop( event );
+                               }
+                       }, 100 );
+                       event.preventDefault();
+               },
+               "mousedown .ui-spinner-button": function( event ) {
+                       var previous;
+
+                       // We never want the buttons to have focus; whenever the user is
+                       // interacting with the spinner, the focus should be on the input.
+                       // If the input is focused then this.previous is properly set from
+                       // when the input first received focus. If the input is not focused
+                       // then we need to set this.previous based on the value before spinning.
+                       previous = this.element[0] === this.document[0].activeElement ?
+                               this.previous : this.element.val();
+                       function checkFocus() {
+                               var isActive = this.element[0] === this.document[0].activeElement;
+                               if ( !isActive ) {
+                                       this.element.focus();
+                                       this.previous = previous;
+                                       // support: IE
+                                       // IE sets focus asynchronously, so we need to check if focus
+                                       // moved off of the input because the user clicked on the button.
+                                       this._delay(function() {
+                                               this.previous = previous;
+                                       });
+                               }
+                       }
+
+                       // ensure focus is on (or stays on) the text field
+                       event.preventDefault();
+                       checkFocus.call( this );
+
+                       // support: IE
+                       // IE doesn't prevent moving focus even with event.preventDefault()
+                       // so we set a flag to know when we should ignore the blur event
+                       // and check (again) if focus moved off of the input.
+                       this.cancelBlur = true;
+                       this._delay(function() {
+                               delete this.cancelBlur;
+                               checkFocus.call( this );
+                       });
+
+                       if ( this._start( event ) === false ) {
+                               return;
+                       }
+
+                       this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+               },
+               "mouseup .ui-spinner-button": "_stop",
+               "mouseenter .ui-spinner-button": function( event ) {
+                       // button will add ui-state-active if mouse was down while mouseleave and kept down
+                       if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+                               return;
+                       }
+
+                       if ( this._start( event ) === false ) {
+                               return false;
+                       }
+                       this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+               },
+               // TODO: do we really want to consider this a stop?
+               // shouldn't we just stop the repeater and wait until mouseup before
+               // we trigger the stop event?
+               "mouseleave .ui-spinner-button": "_stop"
+       },
+
+       _draw: function() {
+               var uiSpinner = this.uiSpinner = this.element
+                       .addClass( "ui-spinner-input" )
+                       .attr( "autocomplete", "off" )
+                       .wrap( this._uiSpinnerHtml() )
+                       .parent()
+                               // add buttons
+                               .append( this._buttonHtml() );
+
+               this.element.attr( "role", "spinbutton" );
+
+               // button bindings
+               this.buttons = uiSpinner.find( ".ui-spinner-button" )
+                       .attr( "tabIndex", -1 )
+                       .button()
+                       .removeClass( "ui-corner-all" );
+
+               // IE 6 doesn't understand height: 50% for the buttons
+               // unless the wrapper has an explicit height
+               if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+                               uiSpinner.height() > 0 ) {
+                       uiSpinner.height( uiSpinner.height() );
+               }
+
+               // disable spinner if element was already disabled
+               if ( this.options.disabled ) {
+                       this.disable();
+               }
+       },
+
+       _keydown: function( event ) {
+               var options = this.options,
+                       keyCode = $.ui.keyCode;
+
+               switch ( event.keyCode ) {
+               case keyCode.UP:
+                       this._repeat( null, 1, event );
+                       return true;
+               case keyCode.DOWN:
+                       this._repeat( null, -1, event );
+                       return true;
+               case keyCode.PAGE_UP:
+                       this._repeat( null, options.page, event );
+                       return true;
+               case keyCode.PAGE_DOWN:
+                       this._repeat( null, -options.page, event );
+                       return true;
+               }
+
+               return false;
+       },
+
+       _uiSpinnerHtml: function() {
+               return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+       },
+
+       _buttonHtml: function() {
+               return "" +
+                       "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+                               "<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
+                       "</a>" +
+                       "<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+                               "<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
+                       "</a>";
+       },
+
+       _start: function( event ) {
+               if ( !this.spinning && this._trigger( "start", event ) === false ) {
+                       return false;
+               }
+
+               if ( !this.counter ) {
+                       this.counter = 1;
+               }
+               this.spinning = true;
+               return true;
+       },
+
+       _repeat: function( i, steps, event ) {
+               i = i || 500;
+
+               clearTimeout( this.timer );
+               this.timer = this._delay(function() {
+                       this._repeat( 40, steps, event );
+               }, i );
+
+               this._spin( steps * this.options.step, event );
+       },
+
+       _spin: function( step, event ) {
+               var value = this.value() || 0;
+
+               if ( !this.counter ) {
+                       this.counter = 1;
+               }
+
+               value = this._adjustValue( value + step * this._increment( this.counter ) );
+
+               if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+                       this._value( value );
+                       this.counter++;
+               }
+       },
+
+       _increment: function( i ) {
+               var incremental = this.options.incremental;
+
+               if ( incremental ) {
+                       return $.isFunction( incremental ) ?
+                               incremental( i ) :
+                               Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
+               }
+
+               return 1;
+       },
+
+       _precision: function() {
+               var precision = this._precisionOf( this.options.step );
+               if ( this.options.min !== null ) {
+                       precision = Math.max( precision, this._precisionOf( this.options.min ) );
+               }
+               return precision;
+       },
+
+       _precisionOf: function( num ) {
+               var str = num.toString(),
+                       decimal = str.indexOf( "." );
+               return decimal === -1 ? 0 : str.length - decimal - 1;
+       },
+
+       _adjustValue: function( value ) {
+               var base, aboveMin,
+                       options = this.options;
+
+               // make sure we're at a valid step
+               // - find out where we are relative to the base (min or 0)
+               base = options.min !== null ? options.min : 0;
+               aboveMin = value - base;
+               // - round to the nearest step
+               aboveMin = Math.round(aboveMin / options.step) * options.step;
+               // - rounding is based on 0, so adjust back to our base
+               value = base + aboveMin;
+
+               // fix precision from bad JS floating point math
+               value = parseFloat( value.toFixed( this._precision() ) );
+
+               // clamp the value
+               if ( options.max !== null && value > options.max) {
+                       return options.max;
+               }
+               if ( options.min !== null && value < options.min ) {
+                       return options.min;
+               }
+
+               return value;
+       },
+
+       _stop: function( event ) {
+               if ( !this.spinning ) {
+                       return;
+               }
+
+               clearTimeout( this.timer );
+               clearTimeout( this.mousewheelTimer );
+               this.counter = 0;
+               this.spinning = false;
+               this._trigger( "stop", event );
+       },
+
+       _setOption: function( key, value ) {
+               if ( key === "culture" || key === "numberFormat" ) {
+                       var prevValue = this._parse( this.element.val() );
+                       this.options[ key ] = value;
+                       this.element.val( this._format( prevValue ) );
+                       return;
+               }
+
+               if ( key === "max" || key === "min" || key === "step" ) {
+                       if ( typeof value === "string" ) {
+                               value = this._parse( value );
+                       }
+               }
+
+               this._super( key, value );
+
+               if ( key === "disabled" ) {
+                       if ( value ) {
+                               this.element.prop( "disabled", true );
+                               this.buttons.button( "disable" );
+                       } else {
+                               this.element.prop( "disabled", false );
+                               this.buttons.button( "enable" );
+                       }
+               }
+       },
+
+       _setOptions: modifier(function( options ) {
+               this._super( options );
+               this._value( this.element.val() );
+       }),
+
+       _parse: function( val ) {
+               if ( typeof val === "string" && val !== "" ) {
+                       val = window.Globalize && this.options.numberFormat ?
+                               Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+               }
+               return val === "" || isNaN( val ) ? null : val;
+       },
+
+       _format: function( value ) {
+               if ( value === "" ) {
+                       return "";
+               }
+               return window.Globalize && this.options.numberFormat ?
+                       Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+                       value;
+       },
+
+       _refresh: function() {
+               this.element.attr({
+                       "aria-valuemin": this.options.min,
+                       "aria-valuemax": this.options.max,
+                       // TODO: what should we do with values that can't be parsed?
+                       "aria-valuenow": this._parse( this.element.val() )
+               });
+       },
+
+       // update the value without triggering change
+       _value: function( value, allowAny ) {
+               var parsed;
+               if ( value !== "" ) {
+                       parsed = this._parse( value );
+                       if ( parsed !== null ) {
+                               if ( !allowAny ) {
+                                       parsed = this._adjustValue( parsed );
+                               }
+                               value = this._format( parsed );
+                       }
+               }
+               this.element.val( value );
+               this._refresh();
+       },
+
+       _destroy: function() {
+               this.element
+                       .removeClass( "ui-spinner-input" )
+                       .prop( "disabled", false )
+                       .removeAttr( "autocomplete" )
+                       .removeAttr( "role" )
+                       .removeAttr( "aria-valuemin" )
+                       .removeAttr( "aria-valuemax" )
+                       .removeAttr( "aria-valuenow" );
+               this.uiSpinner.replaceWith( this.element );
+       },
+
+       stepUp: modifier(function( steps ) {
+               this._stepUp( steps );
+       }),
+       _stepUp: function( steps ) {
+               this._spin( (steps || 1) * this.options.step );
+       },
+
+       stepDown: modifier(function( steps ) {
+               this._stepDown( steps );
+       }),
+       _stepDown: function( steps ) {
+               this._spin( (steps || 1) * -this.options.step );
+       },
+
+       pageUp: modifier(function( pages ) {
+               this._stepUp( (pages || 1) * this.options.page );
+       }),
+
+       pageDown: modifier(function( pages ) {
+               this._stepDown( (pages || 1) * this.options.page );
+       }),
+
+       value: function( newVal ) {
+               if ( !arguments.length ) {
+                       return this._parse( this.element.val() );
+               }
+               modifier( this._value ).call( this, newVal );
+       },
+
+       widget: function() {
+               return this.uiSpinner;
+       }
+});
+
+}( jQuery ) );
index 0c47f0e..6ea164e 100644 (file)
@@ -1,11 +1,12 @@
 /*!
- * jQuery UI Tabs 1.8.24
+ * jQuery UI Tabs 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Tabs
+ * http://api.jqueryui.com/tabs/
  *
  * Depends:
  *     jquery.ui.core.js
 (function( $, undefined ) {
 
 var tabId = 0,
-       listId = 0;
+       rhash = /#.*$/;
 
 function getNextTabId() {
        return ++tabId;
 }
 
-function getNextListId() {
-       return ++listId;
+function isLocal( anchor ) {
+       return anchor.hash.length > 1 &&
+               anchor.href.replace( rhash, "" ) ===
+                       location.href.replace( rhash, "" )
+                               // support: Safari 5.1
+                               // Safari 5.1 doesn't encode spaces in window.location
+                               // but it does encode spaces from anchors (#8777)
+                               .replace( /\s/g, "%20" );
 }
 
 $.widget( "ui.tabs", {
+       version: "1.9.2",
+       delay: 300,
        options: {
-               add: null,
-               ajaxOptions: null,
-               cache: false,
-               cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }
+               active: null,
                collapsible: false,
-               disable: null,
-               disabled: [],
-               enable: null,
                event: "click",
-               fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }
-               idPrefix: "ui-tabs-",
-               load: null,
-               panelTemplate: "<div></div>",
-               remove: null,
-               select: null,
+               heightStyle: "content",
+               hide: null,
                show: null,
-               spinner: "<em>Loading&#8230;</em>",
-               tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
+
+               // callbacks
+               activate: null,
+               beforeActivate: null,
+               beforeLoad: null,
+               load: null
        },
 
        _create: function() {
-               this._tabify( true );
-       },
+               var that = this,
+                       options = this.options,
+                       active = options.active,
+                       locationHash = location.hash.substring( 1 );
 
-       _setOption: function( key, value ) {
-               if ( key == "selected" ) {
-                       if (this.options.collapsible && value == this.options.selected ) {
-                               return;
+               this.running = false;
+
+               this.element
+                       .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+                       .toggleClass( "ui-tabs-collapsible", options.collapsible )
+                       // Prevent users from focusing disabled tabs via click
+                       .delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
+                               if ( $( this ).is( ".ui-state-disabled" ) ) {
+                                       event.preventDefault();
+                               }
+                       })
+                       // support: IE <9
+                       // Preventing the default action in mousedown doesn't prevent IE
+                       // from focusing the element, so if the anchor gets focused, blur.
+                       // We don't have to worry about focusing the previously focused
+                       // element since clicking on a non-focusable element should focus
+                       // the body anyway.
+                       .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+                               if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+                                       this.blur();
+                               }
+                       });
+
+               this._processTabs();
+
+               if ( active === null ) {
+                       // check the fragment identifier in the URL
+                       if ( locationHash ) {
+                               this.tabs.each(function( i, tab ) {
+                                       if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+                                               active = i;
+                                               return false;
+                                       }
+                               });
+                       }
+
+                       // check for a tab marked active via a class
+                       if ( active === null ) {
+                               active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+                       }
+
+                       // no active tab, set to false
+                       if ( active === null || active === -1 ) {
+                               active = this.tabs.length ? 0 : false;
                        }
-                       this.select( value );
-               } else {
-                       this.options[ key ] = value;
-                       this._tabify();
                }
-       },
 
-       _tabId: function( a ) {
-               return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) ||
-                       this.options.idPrefix + getNextTabId();
-       },
+               // handle numbers: negative, out of range
+               if ( active !== false ) {
+                       active = this.tabs.index( this.tabs.eq( active ) );
+                       if ( active === -1 ) {
+                               active = options.collapsible ? false : 0;
+                       }
+               }
+               options.active = active;
 
-       _sanitizeSelector: function( hash ) {
-               // we need this because an id may contain a ":"
-               return hash.replace( /:/g, "\\:" );
-       },
+               // don't allow collapsible: false and active: false
+               if ( !options.collapsible && options.active === false && this.anchors.length ) {
+                       options.active = 0;
+               }
+
+               // Take disabling tabs via class attribute from HTML
+               // into account and update option properly.
+               if ( $.isArray( options.disabled ) ) {
+                       options.disabled = $.unique( options.disabled.concat(
+                               $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+                                       return that.tabs.index( li );
+                               })
+                       ) ).sort();
+               }
+
+               // check for length avoids error when initializing empty list
+               if ( this.options.active !== false && this.anchors.length ) {
+                       this.active = this._findActive( this.options.active );
+               } else {
+                       this.active = $();
+               }
+
+               this._refresh();
 
-       _cookie: function() {
-               var cookie = this.cookie ||
-                       ( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() );
-               return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) );
+               if ( this.active.length ) {
+                       this.load( options.active );
+               }
        },
 
-       _ui: function( tab, panel ) {
+       _getCreateEventData: function() {
                return {
-                       tab: tab,
-                       panel: panel,
-                       index: this.anchors.index( tab )
+                       tab: this.active,
+                       panel: !this.active.length ? $() : this._getPanelForTab( this.active )
                };
        },
 
-       _cleanup: function() {
-               // restore all former loading tabs labels
-               this.lis.filter( ".ui-state-processing" )
-                       .removeClass( "ui-state-processing" )
-                       .find( "span:data(label.tabs)" )
-                               .each(function() {
-                                       var el = $( this );
-                                       el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" );
-                               });
+       _tabKeydown: function( event ) {
+               var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+                       selectedIndex = this.tabs.index( focusedTab ),
+                       goingForward = true;
+
+               if ( this._handlePageNav( event ) ) {
+                       return;
+               }
+
+               switch ( event.keyCode ) {
+                       case $.ui.keyCode.RIGHT:
+                       case $.ui.keyCode.DOWN:
+                               selectedIndex++;
+                               break;
+                       case $.ui.keyCode.UP:
+                       case $.ui.keyCode.LEFT:
+                               goingForward = false;
+                               selectedIndex--;
+                               break;
+                       case $.ui.keyCode.END:
+                               selectedIndex = this.anchors.length - 1;
+                               break;
+                       case $.ui.keyCode.HOME:
+                               selectedIndex = 0;
+                               break;
+                       case $.ui.keyCode.SPACE:
+                               // Activate only, no collapsing
+                               event.preventDefault();
+                               clearTimeout( this.activating );
+                               this._activate( selectedIndex );
+                               return;
+                       case $.ui.keyCode.ENTER:
+                               // Toggle (cancel delayed activation, allow collapsing)
+                               event.preventDefault();
+                               clearTimeout( this.activating );
+                               // Determine if we should collapse or activate
+                               this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+                               return;
+                       default:
+                               return;
+               }
+
+               // Focus the appropriate tab, based on which key was pressed
+               event.preventDefault();
+               clearTimeout( this.activating );
+               selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+
+               // Navigating with control key will prevent automatic activation
+               if ( !event.ctrlKey ) {
+                       // Update aria-selected immediately so that AT think the tab is already selected.
+                       // Otherwise AT may confuse the user by stating that they need to activate the tab,
+                       // but the tab will already be activated by the time the announcement finishes.
+                       focusedTab.attr( "aria-selected", "false" );
+                       this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+
+                       this.activating = this._delay(function() {
+                               this.option( "active", selectedIndex );
+                       }, this.delay );
+               }
        },
 
-       _tabify: function( init ) {
-               var self = this,
-                       o = this.options,
-                       fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash
+       _panelKeydown: function( event ) {
+               if ( this._handlePageNav( event ) ) {
+                       return;
+               }
 
-               this.list = this.element.find( "ol,ul" ).eq( 0 );
-               this.lis = $( " > li:has(a[href])", this.list );
-               this.anchors = this.lis.map(function() {
-                       return $( "a", this )[ 0 ];
-               });
-               this.panels = $( [] );
-
-               this.anchors.each(function( i, a ) {
-                       var href = $( a ).attr( "href" );
-                       // For dynamically created HTML that contains a hash as href IE < 8 expands
-                       // such href to the full page url with hash and then misinterprets tab as ajax.
-                       // Same consideration applies for an added tab with a fragment identifier
-                       // since a[href=#fragment-identifier] does unexpectedly not match.
-                       // Thus normalize href attribute...
-                       var hrefBase = href.split( "#" )[ 0 ],
-                               baseEl;
-                       if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] ||
-                                       ( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) {
-                               href = a.hash;
-                               a.href = href;
-                       }
+               // Ctrl+up moves focus to the current tab
+               if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+                       event.preventDefault();
+                       this.active.focus();
+               }
+       },
 
-                       // inline tab
-                       if ( fragmentId.test( href ) ) {
-                               self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) );
-                       // remote tab
-                       // prevent loading the page itself if href is just "#"
-                       } else if ( href && href !== "#" ) {
-                               // required for restore on destroy
-                               $.data( a, "href.tabs", href );
-
-                               // TODO until #3808 is fixed strip fragment identifier from url
-                               // (IE fails to load from such url)
-                               $.data( a, "load.tabs", href.replace( /#.*$/, "" ) );
-
-                               var id = self._tabId( a );
-                               a.href = "#" + id;
-                               var $panel = self.element.find( "#" + id );
-                               if ( !$panel.length ) {
-                                       $panel = $( o.panelTemplate )
-                                               .attr( "id", id )
-                                               .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
-                                               .insertAfter( self.panels[ i - 1 ] || self.list );
-                                       $panel.data( "destroy.tabs", true );
-                               }
-                               self.panels = self.panels.add( $panel );
-                       // invalid tab href
-                       } else {
-                               o.disabled.push( i );
-                       }
-               });
+       // Alt+page up/down moves focus to the previous/next tab (and activates)
+       _handlePageNav: function( event ) {
+               if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+                       this._activate( this._focusNextTab( this.options.active - 1, false ) );
+                       return true;
+               }
+               if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+                       this._activate( this._focusNextTab( this.options.active + 1, true ) );
+                       return true;
+               }
+       },
 
-               // initialization from scratch
-               if ( init ) {
-                       // attach necessary classes for styling
-                       this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" );
-                       this.list.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
-                       this.lis.addClass( "ui-state-default ui-corner-top" );
-                       this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" );
-
-                       // Selected tab
-                       // use "selected" option or try to retrieve:
-                       // 1. from fragment identifier in url
-                       // 2. from cookie
-                       // 3. from selected class attribute on <li>
-                       if ( o.selected === undefined ) {
-                               if ( location.hash ) {
-                                       this.anchors.each(function( i, a ) {
-                                               if ( a.hash == location.hash ) {
-                                                       o.selected = i;
-                                                       return false;
-                                               }
-                                       });
-                               }
-                               if ( typeof o.selected !== "number" && o.cookie ) {
-                                       o.selected = parseInt( self._cookie(), 10 );
-                               }
-                               if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) {
-                                       o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
-                               }
-                               o.selected = o.selected || ( this.lis.length ? 0 : -1 );
-                       } else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release
-                               o.selected = -1;
-                       }
-
-                       // sanity check - default to first tab...
-                       o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 )
-                               ? o.selected
-                               : 0;
-
-                       // Take disabling tabs via class attribute from HTML
-                       // into account and update option properly.
-                       // A selected tab cannot become disabled.
-                       o.disabled = $.unique( o.disabled.concat(
-                               $.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) {
-                                       return self.lis.index( n );
-                               })
-                       ) ).sort();
+       _findNextTab: function( index, goingForward ) {
+               var lastTabIndex = this.tabs.length - 1;
 
-                       if ( $.inArray( o.selected, o.disabled ) != -1 ) {
-                               o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 );
+               function constrain() {
+                       if ( index > lastTabIndex ) {
+                               index = 0;
                        }
+                       if ( index < 0 ) {
+                               index = lastTabIndex;
+                       }
+                       return index;
+               }
 
-                       // highlight selected tab
-                       this.panels.addClass( "ui-tabs-hide" );
-                       this.lis.removeClass( "ui-tabs-selected ui-state-active" );
-                       // check for length avoids error when initializing empty list
-                       if ( o.selected >= 0 && this.anchors.length ) {
-                               self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" );
-                               this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" );
+               while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+                       index = goingForward ? index + 1 : index - 1;
+               }
 
-                               // seems to be expected behavior that the show callback is fired
-                               self.element.queue( "tabs", function() {
-                                       self._trigger( "show", null,
-                                               self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) );
-                               });
+               return index;
+       },
 
-                               this.load( o.selected );
-                       }
+       _focusNextTab: function( index, goingForward ) {
+               index = this._findNextTab( index, goingForward );
+               this.tabs.eq( index ).focus();
+               return index;
+       },
 
-                       // clean up to avoid memory leaks in certain versions of IE 6
-                       // TODO: namespace this event
-                       $( window ).bind( "unload", function() {
-                               self.lis.add( self.anchors ).unbind( ".tabs" );
-                               self.lis = self.anchors = self.panels = null;
-                       });
-               // update selected after add/remove
-               } else {
-                       o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
+       _setOption: function( key, value ) {
+               if ( key === "active" ) {
+                       // _activate() will handle invalid values and update this.options
+                       this._activate( value );
+                       return;
                }
 
-               // update collapsible
-               // TODO: use .toggleClass()
-               this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" );
+               if ( key === "disabled" ) {
+                       // don't use the widget factory's disabled handling
+                       this._setupDisabled( value );
+                       return;
+               }
+
+               this._super( key, value);
 
-               // set or update cookie after init and add/remove respectively
-               if ( o.cookie ) {
-                       this._cookie( o.selected, o.cookie );
+               if ( key === "collapsible" ) {
+                       this.element.toggleClass( "ui-tabs-collapsible", value );
+                       // Setting collapsible: false while collapsed; open first panel
+                       if ( !value && this.options.active === false ) {
+                               this._activate( 0 );
+                       }
                }
 
-               // disable tabs
-               for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) {
-                       $( li )[ $.inArray( i, o.disabled ) != -1 &&
-                               // TODO: use .toggleClass()
-                               !$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" );
+               if ( key === "event" ) {
+                       this._setupEvents( value );
                }
 
-               // reset cache if switching from cached to not cached
-               if ( o.cache === false ) {
-                       this.anchors.removeData( "cache.tabs" );
+               if ( key === "heightStyle" ) {
+                       this._setupHeightStyle( value );
                }
+       },
 
-               // remove all handlers before, tabify may run on existing tabs after add or option change
-               this.lis.add( this.anchors ).unbind( ".tabs" );
+       _tabId: function( tab ) {
+               return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
+       },
 
-               if ( o.event !== "mouseover" ) {
-                       var addState = function( state, el ) {
-                               if ( el.is( ":not(.ui-state-disabled)" ) ) {
-                                       el.addClass( "ui-state-" + state );
-                               }
-                       };
-                       var removeState = function( state, el ) {
-                               el.removeClass( "ui-state-" + state );
-                       };
-                       this.lis.bind( "mouseover.tabs" , function() {
-                               addState( "hover", $( this ) );
+       _sanitizeSelector: function( hash ) {
+               return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+       },
+
+       refresh: function() {
+               var options = this.options,
+                       lis = this.tablist.children( ":has(a[href])" );
+
+               // get disabled tabs from class attribute from HTML
+               // this will get converted to a boolean if needed in _refresh()
+               options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+                       return lis.index( tab );
+               });
+
+               this._processTabs();
+
+               // was collapsed or no tabs
+               if ( options.active === false || !this.anchors.length ) {
+                       options.active = false;
+                       this.active = $();
+               // was active, but active tab is gone
+               } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+                       // all remaining tabs are disabled
+                       if ( this.tabs.length === options.disabled.length ) {
+                               options.active = false;
+                               this.active = $();
+                       // activate previous tab
+                       } else {
+                               this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+                       }
+               // was active, active tab still exists
+               } else {
+                       // make sure active index is correct
+                       options.active = this.tabs.index( this.active );
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               this._setupDisabled( this.options.disabled );
+               this._setupEvents( this.options.event );
+               this._setupHeightStyle( this.options.heightStyle );
+
+               this.tabs.not( this.active ).attr({
+                       "aria-selected": "false",
+                       tabIndex: -1
+               });
+               this.panels.not( this._getPanelForTab( this.active ) )
+                       .hide()
+                       .attr({
+                               "aria-expanded": "false",
+                               "aria-hidden": "true"
                        });
-                       this.lis.bind( "mouseout.tabs", function() {
-                               removeState( "hover", $( this ) );
+
+               // Make sure one tab is in the tab order
+               if ( !this.active.length ) {
+                       this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+               } else {
+                       this.active
+                               .addClass( "ui-tabs-active ui-state-active" )
+                               .attr({
+                                       "aria-selected": "true",
+                                       tabIndex: 0
+                               });
+                       this._getPanelForTab( this.active )
+                               .show()
+                               .attr({
+                                       "aria-expanded": "true",
+                                       "aria-hidden": "false"
+                               });
+               }
+       },
+
+       _processTabs: function() {
+               var that = this;
+
+               this.tablist = this._getList()
+                       .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+                       .attr( "role", "tablist" );
+
+               this.tabs = this.tablist.find( "> li:has(a[href])" )
+                       .addClass( "ui-state-default ui-corner-top" )
+                       .attr({
+                               role: "tab",
+                               tabIndex: -1
                        });
-                       this.anchors.bind( "focus.tabs", function() {
-                               addState( "focus", $( this ).closest( "li" ) );
+
+               this.anchors = this.tabs.map(function() {
+                               return $( "a", this )[ 0 ];
+                       })
+                       .addClass( "ui-tabs-anchor" )
+                       .attr({
+                               role: "presentation",
+                               tabIndex: -1
                        });
-                       this.anchors.bind( "blur.tabs", function() {
-                               removeState( "focus", $( this ).closest( "li" ) );
+
+               this.panels = $();
+
+               this.anchors.each(function( i, anchor ) {
+                       var selector, panel, panelId,
+                               anchorId = $( anchor ).uniqueId().attr( "id" ),
+                               tab = $( anchor ).closest( "li" ),
+                               originalAriaControls = tab.attr( "aria-controls" );
+
+                       // inline tab
+                       if ( isLocal( anchor ) ) {
+                               selector = anchor.hash;
+                               panel = that.element.find( that._sanitizeSelector( selector ) );
+                       // remote tab
+                       } else {
+                               panelId = that._tabId( tab );
+                               selector = "#" + panelId;
+                               panel = that.element.find( selector );
+                               if ( !panel.length ) {
+                                       panel = that._createPanel( panelId );
+                                       panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+                               }
+                               panel.attr( "aria-live", "polite" );
+                       }
+
+                       if ( panel.length) {
+                               that.panels = that.panels.add( panel );
+                       }
+                       if ( originalAriaControls ) {
+                               tab.data( "ui-tabs-aria-controls", originalAriaControls );
+                       }
+                       tab.attr({
+                               "aria-controls": selector.substring( 1 ),
+                               "aria-labelledby": anchorId
                        });
+                       panel.attr( "aria-labelledby", anchorId );
+               });
+
+               this.panels
+                       .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+                       .attr( "role", "tabpanel" );
+       },
+
+       // allow overriding how to find the list for rare usage scenarios (#7715)
+       _getList: function() {
+               return this.element.find( "ol,ul" ).eq( 0 );
+       },
+
+       _createPanel: function( id ) {
+               return $( "<div>" )
+                       .attr( "id", id )
+                       .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+                       .data( "ui-tabs-destroy", true );
+       },
+
+       _setupDisabled: function( disabled ) {
+               if ( $.isArray( disabled ) ) {
+                       if ( !disabled.length ) {
+                               disabled = false;
+                       } else if ( disabled.length === this.anchors.length ) {
+                               disabled = true;
+                       }
                }
 
-               // set up animations
-               var hideFx, showFx;
-               if ( o.fx ) {
-                       if ( $.isArray( o.fx ) ) {
-                               hideFx = o.fx[ 0 ];
-                               showFx = o.fx[ 1 ];
+               // disable tabs
+               for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+                       if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+                               $( li )
+                                       .addClass( "ui-state-disabled" )
+                                       .attr( "aria-disabled", "true" );
                        } else {
-                               hideFx = showFx = o.fx;
+                               $( li )
+                                       .removeClass( "ui-state-disabled" )
+                                       .removeAttr( "aria-disabled" );
                        }
                }
 
-               // Reset certain styles left over from animation
-               // and prevent IE's ClearType bug...
-               function resetStyle( $el, fx ) {
-                       $el.css( "display", "" );
-                       if ( !$.support.opacity && fx.opacity ) {
-                               $el[ 0 ].style.removeAttribute( "filter" );
+               this.options.disabled = disabled;
+       },
+
+       _setupEvents: function( event ) {
+               var events = {
+                       click: function( event ) {
+                               event.preventDefault();
                        }
+               };
+               if ( event ) {
+                       $.each( event.split(" "), function( index, eventName ) {
+                               events[ eventName ] = "_eventHandler";
+                       });
                }
 
-               // Show a tab...
-               var showTab = showFx
-                       ? function( clicked, $show ) {
-                               $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
-                               $show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way
-                                       .animate( showFx, showFx.duration || "normal", function() {
-                                               resetStyle( $show, showFx );
-                                               self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
-                                       });
-                       }
-                       : function( clicked, $show ) {
-                               $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
-                               $show.removeClass( "ui-tabs-hide" );
-                               self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
-                       };
+               this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+               this._on( this.anchors, events );
+               this._on( this.tabs, { keydown: "_tabKeydown" } );
+               this._on( this.panels, { keydown: "_panelKeydown" } );
 
-               // Hide a tab, $show is optional...
-               var hideTab = hideFx
-                       ? function( clicked, $hide ) {
-                               $hide.animate( hideFx, hideFx.duration || "normal", function() {
-                                       self.lis.removeClass( "ui-tabs-selected ui-state-active" );
-                                       $hide.addClass( "ui-tabs-hide" );
-                                       resetStyle( $hide, hideFx );
-                                       self.element.dequeue( "tabs" );
-                               });
+               this._focusable( this.tabs );
+               this._hoverable( this.tabs );
+       },
+
+       _setupHeightStyle: function( heightStyle ) {
+               var maxHeight, overflow,
+                       parent = this.element.parent();
+
+               if ( heightStyle === "fill" ) {
+                       // IE 6 treats height like minHeight, so we need to turn off overflow
+                       // in order to get a reliable height
+                       // we use the minHeight support test because we assume that only
+                       // browsers that don't support minHeight will treat height as minHeight
+                       if ( !$.support.minHeight ) {
+                               overflow = parent.css( "overflow" );
+                               parent.css( "overflow", "hidden");
                        }
-                       : function( clicked, $hide, $show ) {
-                               self.lis.removeClass( "ui-tabs-selected ui-state-active" );
-                               $hide.addClass( "ui-tabs-hide" );
-                               self.element.dequeue( "tabs" );
-                       };
+                       maxHeight = parent.height();
+                       this.element.siblings( ":visible" ).each(function() {
+                               var elem = $( this ),
+                                       position = elem.css( "position" );
 
-               // attach tab event handler, unbind to avoid duplicates from former tabifying...
-               this.anchors.bind( o.event + ".tabs", function() {
-                       var el = this,
-                               $li = $(el).closest( "li" ),
-                               $hide = self.panels.filter( ":not(.ui-tabs-hide)" ),
-                               $show = self.element.find( self._sanitizeSelector( el.hash ) );
-
-                       // If tab is already selected and not collapsible or tab disabled or
-                       // or is already loading or click callback returns false stop here.
-                       // Check if click handler returns false last so that it is not executed
-                       // for a disabled or loading tab!
-                       if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) ||
-                               $li.hasClass( "ui-state-disabled" ) ||
-                               $li.hasClass( "ui-state-processing" ) ||
-                               self.panels.filter( ":animated" ).length ||
-                               self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) {
-                               this.blur();
-                               return false;
+                               if ( position === "absolute" || position === "fixed" ) {
+                                       return;
+                               }
+                               maxHeight -= elem.outerHeight( true );
+                       });
+                       if ( overflow ) {
+                               parent.css( "overflow", overflow );
                        }
 
-                       o.selected = self.anchors.index( this );
+                       this.element.children().not( this.panels ).each(function() {
+                               maxHeight -= $( this ).outerHeight( true );
+                       });
 
-                       self.abort();
+                       this.panels.each(function() {
+                               $( this ).height( Math.max( 0, maxHeight -
+                                       $( this ).innerHeight() + $( this ).height() ) );
+                       })
+                       .css( "overflow", "auto" );
+               } else if ( heightStyle === "auto" ) {
+                       maxHeight = 0;
+                       this.panels.each(function() {
+                               maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+                       }).height( maxHeight );
+               }
+       },
 
-                       // if tab may be closed
-                       if ( o.collapsible ) {
-                               if ( $li.hasClass( "ui-tabs-selected" ) ) {
-                                       o.selected = -1;
+       _eventHandler: function( event ) {
+               var options = this.options,
+                       active = this.active,
+                       anchor = $( event.currentTarget ),
+                       tab = anchor.closest( "li" ),
+                       clickedIsActive = tab[ 0 ] === active[ 0 ],
+                       collapsing = clickedIsActive && options.collapsible,
+                       toShow = collapsing ? $() : this._getPanelForTab( tab ),
+                       toHide = !active.length ? $() : this._getPanelForTab( active ),
+                       eventData = {
+                               oldTab: active,
+                               oldPanel: toHide,
+                               newTab: collapsing ? $() : tab,
+                               newPanel: toShow
+                       };
 
-                                       if ( o.cookie ) {
-                                               self._cookie( o.selected, o.cookie );
-                                       }
+               event.preventDefault();
+
+               if ( tab.hasClass( "ui-state-disabled" ) ||
+                               // tab is already loading
+                               tab.hasClass( "ui-tabs-loading" ) ||
+                               // can't switch durning an animation
+                               this.running ||
+                               // click on active header, but not collapsible
+                               ( clickedIsActive && !options.collapsible ) ||
+                               // allow canceling activation
+                               ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+                       return;
+               }
 
-                                       self.element.queue( "tabs", function() {
-                                               hideTab( el, $hide );
-                                       }).dequeue( "tabs" );
+               options.active = collapsing ? false : this.tabs.index( tab );
 
-                                       this.blur();
-                                       return false;
-                               } else if ( !$hide.length ) {
-                                       if ( o.cookie ) {
-                                               self._cookie( o.selected, o.cookie );
-                                       }
+               this.active = clickedIsActive ? $() : tab;
+               if ( this.xhr ) {
+                       this.xhr.abort();
+               }
 
-                                       self.element.queue( "tabs", function() {
-                                               showTab( el, $show );
-                                       });
+               if ( !toHide.length && !toShow.length ) {
+                       $.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+               }
 
-                                       // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171
-                                       self.load( self.anchors.index( this ) );
+               if ( toShow.length ) {
+                       this.load( this.tabs.index( tab ), event );
+               }
+               this._toggle( event, eventData );
+       },
 
-                                       this.blur();
-                                       return false;
-                               }
-                       }
+       // handles show/hide for selecting tabs
+       _toggle: function( event, eventData ) {
+               var that = this,
+                       toShow = eventData.newPanel,
+                       toHide = eventData.oldPanel;
 
-                       if ( o.cookie ) {
-                               self._cookie( o.selected, o.cookie );
-                       }
+               this.running = true;
 
-                       // show new tab
-                       if ( $show.length ) {
-                               if ( $hide.length ) {
-                                       self.element.queue( "tabs", function() {
-                                               hideTab( el, $hide );
-                                       });
-                               }
-                               self.element.queue( "tabs", function() {
-                                       showTab( el, $show );
-                               });
+               function complete() {
+                       that.running = false;
+                       that._trigger( "activate", event, eventData );
+               }
+
+               function show() {
+                       eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
 
-                               self.load( self.anchors.index( this ) );
+                       if ( toShow.length && that.options.show ) {
+                               that._show( toShow, that.options.show, complete );
                        } else {
-                               throw "jQuery UI Tabs: Mismatching fragment identifier.";
+                               toShow.show();
+                               complete();
                        }
+               }
 
-                       // Prevent IE from keeping other link focussed when using the back button
-                       // and remove dotted border from clicked link. This is controlled via CSS
-                       // in modern browsers; blur() removes focus from address bar in Firefox
-                       // which can become a usability and annoying problem with tabs('rotate').
-                       if ( $.browser.msie ) {
-                               this.blur();
-                       }
+               // start out by hiding, then showing, then completing
+               if ( toHide.length && this.options.hide ) {
+                       this._hide( toHide, this.options.hide, function() {
+                               eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+                               show();
+                       });
+               } else {
+                       eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+                       toHide.hide();
+                       show();
+               }
+
+               toHide.attr({
+                       "aria-expanded": "false",
+                       "aria-hidden": "true"
                });
+               eventData.oldTab.attr( "aria-selected", "false" );
+               // If we're switching tabs, remove the old tab from the tab order.
+               // If we're opening from collapsed state, remove the previous tab from the tab order.
+               // If we're collapsing, then keep the collapsing tab in the tab order.
+               if ( toShow.length && toHide.length ) {
+                       eventData.oldTab.attr( "tabIndex", -1 );
+               } else if ( toShow.length ) {
+                       this.tabs.filter(function() {
+                               return $( this ).attr( "tabIndex" ) === 0;
+                       })
+                       .attr( "tabIndex", -1 );
+               }
 
-               // disable click in any case
-               this.anchors.bind( "click.tabs", function(){
-                       return false;
+               toShow.attr({
+                       "aria-expanded": "true",
+                       "aria-hidden": "false"
+               });
+               eventData.newTab.attr({
+                       "aria-selected": "true",
+                       tabIndex: 0
                });
        },
 
-    _getIndex: function( index ) {
+       _activate: function( index ) {
+               var anchor,
+                       active = this._findActive( index );
+
+               // trying to activate the already active panel
+               if ( active[ 0 ] === this.active[ 0 ] ) {
+                       return;
+               }
+
+               // trying to collapse, simulate a click on the current active header
+               if ( !active.length ) {
+                       active = this.active;
+               }
+
+               anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+               this._eventHandler({
+                       target: anchor,
+                       currentTarget: anchor,
+                       preventDefault: $.noop
+               });
+       },
+
+       _findActive: function( index ) {
+               return index === false ? $() : this.tabs.eq( index );
+       },
+
+       _getIndex: function( index ) {
                // meta-function to give users option to provide a href string instead of a numerical index.
-               // also sanitizes numerical indexes to valid values.
-               if ( typeof index == "string" ) {
+               if ( typeof index === "string" ) {
                        index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
                }
 
                return index;
        },
 
-       destroy: function() {
-               var o = this.options;
+       _destroy: function() {
+               if ( this.xhr ) {
+                       this.xhr.abort();
+               }
 
-               this.abort();
+               this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
 
-               this.element
-                       .unbind( ".tabs" )
-                       .removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" )
-                       .removeData( "tabs" );
+               this.tablist
+                       .removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+                       .removeAttr( "role" );
 
-               this.list.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
+               this.anchors
+                       .removeClass( "ui-tabs-anchor" )
+                       .removeAttr( "role" )
+                       .removeAttr( "tabIndex" )
+                       .removeData( "href.tabs" )
+                       .removeData( "load.tabs" )
+                       .removeUniqueId();
 
-               this.anchors.each(function() {
-                       var href = $.data( this, "href.tabs" );
-                       if ( href ) {
-                               this.href = href;
+               this.tabs.add( this.panels ).each(function() {
+                       if ( $.data( this, "ui-tabs-destroy" ) ) {
+                               $( this ).remove();
+                       } else {
+                               $( this )
+                                       .removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+                                               "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+                                       .removeAttr( "tabIndex" )
+                                       .removeAttr( "aria-live" )
+                                       .removeAttr( "aria-busy" )
+                                       .removeAttr( "aria-selected" )
+                                       .removeAttr( "aria-labelledby" )
+                                       .removeAttr( "aria-hidden" )
+                                       .removeAttr( "aria-expanded" )
+                                       .removeAttr( "role" );
                        }
-                       var $this = $( this ).unbind( ".tabs" );
-                       $.each( [ "href", "load", "cache" ], function( i, prefix ) {
-                               $this.removeData( prefix + ".tabs" );
-                       });
                });
 
-               this.lis.unbind( ".tabs" ).add( this.panels ).each(function() {
-                       if ( $.data( this, "destroy.tabs" ) ) {
-                               $( this ).remove();
+               this.tabs.each(function() {
+                       var li = $( this ),
+                               prev = li.data( "ui-tabs-aria-controls" );
+                       if ( prev ) {
+                               li.attr( "aria-controls", prev );
                        } else {
-                               $( this ).removeClass([
-                                       "ui-state-default",
-                                       "ui-corner-top",
-                                       "ui-tabs-selected",
-                                       "ui-state-active",
-                                       "ui-state-hover",
-                                       "ui-state-focus",
-                                       "ui-state-disabled",
-                                       "ui-tabs-panel",
-                                       "ui-widget-content",
-                                       "ui-corner-bottom",
-                                       "ui-tabs-hide"
-                               ].join( " " ) );
+                               li.removeAttr( "aria-controls" );
                        }
                });
 
-               if ( o.cookie ) {
-                       this._cookie( null, o.cookie );
-               }
+               this.panels.show();
 
-               return this;
+               if ( this.options.heightStyle !== "content" ) {
+                       this.panels.css( "height", "" );
+               }
        },
 
-       add: function( url, label, index ) {
-               if ( index === undefined ) {
-                       index = this.anchors.length;
+       enable: function( index ) {
+               var disabled = this.options.disabled;
+               if ( disabled === false ) {
+                       return;
                }
 
-               var self = this,
-                       o = this.options,
-                       $li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ),
-                       id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] );
-
-               $li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true );
+               if ( index === undefined ) {
+                       disabled = false;
+               } else {
+                       index = this._getIndex( index );
+                       if ( $.isArray( disabled ) ) {
+                               disabled = $.map( disabled, function( num ) {
+                                       return num !== index ? num : null;
+                               });
+                       } else {
+                               disabled = $.map( this.tabs, function( li, num ) {
+                                       return num !== index ? num : null;
+                               });
+                       }
+               }
+               this._setupDisabled( disabled );
+       },
 
-               // try to find an existing element before creating a new one
-               var $panel = self.element.find( "#" + id );
-               if ( !$panel.length ) {
-                       $panel = $( o.panelTemplate )
-                               .attr( "id", id )
-                               .data( "destroy.tabs", true );
+       disable: function( index ) {
+               var disabled = this.options.disabled;
+               if ( disabled === true ) {
+                       return;
                }
-               $panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" );
 
-               if ( index >= this.lis.length ) {
-                       $li.appendTo( this.list );
-                       $panel.appendTo( this.list[ 0 ].parentNode );
+               if ( index === undefined ) {
+                       disabled = true;
                } else {
-                       $li.insertBefore( this.lis[ index ] );
-                       $panel.insertBefore( this.panels[ index ] );
+                       index = this._getIndex( index );
+                       if ( $.inArray( index, disabled ) !== -1 ) {
+                               return;
+                       }
+                       if ( $.isArray( disabled ) ) {
+                               disabled = $.merge( [ index ], disabled ).sort();
+                       } else {
+                               disabled = [ index ];
+                       }
                }
+               this._setupDisabled( disabled );
+       },
 
-               o.disabled = $.map( o.disabled, function( n, i ) {
-                       return n >= index ? ++n : n;
-               });
+       load: function( index, event ) {
+               index = this._getIndex( index );
+               var that = this,
+                       tab = this.tabs.eq( index ),
+                       anchor = tab.find( ".ui-tabs-anchor" ),
+                       panel = this._getPanelForTab( tab ),
+                       eventData = {
+                               tab: tab,
+                               panel: panel
+                       };
 
-               this._tabify();
+               // not remote
+               if ( isLocal( anchor[ 0 ] ) ) {
+                       return;
+               }
 
-               if ( this.anchors.length == 1 ) {
-                       o.selected = 0;
-                       $li.addClass( "ui-tabs-selected ui-state-active" );
-                       $panel.removeClass( "ui-tabs-hide" );
-                       this.element.queue( "tabs", function() {
-                               self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) );
-                       });
+               this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+
+               // support: jQuery <1.8
+               // jQuery <1.8 returns false if the request is canceled in beforeSend,
+               // but as of 1.8, $.ajax() always returns a jqXHR object.
+               if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+                       tab.addClass( "ui-tabs-loading" );
+                       panel.attr( "aria-busy", "true" );
+
+                       this.xhr
+                               .success(function( response ) {
+                                       // support: jQuery <1.8
+                                       // http://bugs.jquery.com/ticket/11778
+                                       setTimeout(function() {
+                                               panel.html( response );
+                                               that._trigger( "load", event, eventData );
+                                       }, 1 );
+                               })
+                               .complete(function( jqXHR, status ) {
+                                       // support: jQuery <1.8
+                                       // http://bugs.jquery.com/ticket/11778
+                                       setTimeout(function() {
+                                               if ( status === "abort" ) {
+                                                       that.panels.stop( false, true );
+                                               }
+
+                                               tab.removeClass( "ui-tabs-loading" );
+                                               panel.removeAttr( "aria-busy" );
 
-                       this.load( 0 );
+                                               if ( jqXHR === that.xhr ) {
+                                                       delete that.xhr;
+                                               }
+                                       }, 1 );
+                               });
                }
+       },
 
-               this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
-               return this;
+       // TODO: Remove this function in 1.10 when ajaxOptions is removed
+       _ajaxSettings: function( anchor, event, eventData ) {
+               var that = this;
+               return {
+                       url: anchor.attr( "href" ),
+                       beforeSend: function( jqXHR, settings ) {
+                               return that._trigger( "beforeLoad", event,
+                                       $.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
+                       }
+               };
        },
 
-       remove: function( index ) {
-               index = this._getIndex( index );
-               var o = this.options,
-                       $li = this.lis.eq( index ).remove(),
-                       $panel = this.panels.eq( index ).remove();
-
-               // If selected tab was removed focus tab to the right or
-               // in case the last tab was removed the tab to the left.
-               if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) {
-                       this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) );
-               }
-
-               o.disabled = $.map(
-                       $.grep( o.disabled, function(n, i) {
-                               return n != index;
-                       }),
-                       function( n, i ) {
-                               return n >= index ? --n : n;
-                       });
+       _getPanelForTab: function( tab ) {
+               var id = $( tab ).attr( "aria-controls" );
+               return this.element.find( this._sanitizeSelector( "#" + id ) );
+       }
+});
 
-               this._tabify();
+// DEPRECATED
+if ( $.uiBackCompat !== false ) {
 
-               this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) );
-               return this;
-       },
+       // helper method for a lot of the back compat extensions
+       $.ui.tabs.prototype._ui = function( tab, panel ) {
+               return {
+                       tab: tab,
+                       panel: panel,
+                       index: this.anchors.index( tab )
+               };
+       };
 
-       enable: function( index ) {
-               index = this._getIndex( index );
-               var o = this.options;
-               if ( $.inArray( index, o.disabled ) == -1 ) {
-                       return;
+       // url method
+       $.widget( "ui.tabs", $.ui.tabs, {
+               url: function( index, url ) {
+                       this.anchors.eq( index ).attr( "href", url );
                }
+       });
+
+       // TODO: Remove _ajaxSettings() method when removing this extension
+       // ajaxOptions and cache options
+       $.widget( "ui.tabs", $.ui.tabs, {
+               options: {
+                       ajaxOptions: null,
+                       cache: false
+               },
+
+               _create: function() {
+                       this._super();
+
+                       var that = this;
+
+                       this._on({ tabsbeforeload: function( event, ui ) {
+                               // tab is already cached
+                               if ( $.data( ui.tab[ 0 ], "cache.tabs" ) ) {
+                                       event.preventDefault();
+                                       return;
+                               }
 
-               this.lis.eq( index ).removeClass( "ui-state-disabled" );
-               o.disabled = $.grep( o.disabled, function( n, i ) {
-                       return n != index;
-               });
-
-               this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
-               return this;
-       },
+                               ui.jqXHR.success(function() {
+                                       if ( that.options.cache ) {
+                                               $.data( ui.tab[ 0 ], "cache.tabs", true );
+                                       }
+                               });
+                       }});
+               },
+
+               _ajaxSettings: function( anchor, event, ui ) {
+                       var ajaxOptions = this.options.ajaxOptions;
+                       return $.extend( {}, ajaxOptions, {
+                               error: function( xhr, status ) {
+                                       try {
+                                               // Passing index avoid a race condition when this method is
+                                               // called after the user has selected another tab.
+                                               // Pass the anchor that initiated this request allows
+                                               // loadError to manipulate the tab content panel via $(a.hash)
+                                               ajaxOptions.error(
+                                                       xhr, status, ui.tab.closest( "li" ).index(), ui.tab[ 0 ] );
+                                       }
+                                       catch ( error ) {}
+                               }
+                       }, this._superApply( arguments ) );
+               },
 
-       disable: function( index ) {
-               index = this._getIndex( index );
-               var self = this, o = this.options;
-               // cannot disable already selected tab
-               if ( index != o.selected ) {
-                       this.lis.eq( index ).addClass( "ui-state-disabled" );
+               _setOption: function( key, value ) {
+                       // reset cache if switching from cached to not cached
+                       if ( key === "cache" && value === false ) {
+                               this.anchors.removeData( "cache.tabs" );
+                       }
+                       this._super( key, value );
+               },
 
-                       o.disabled.push( index );
-                       o.disabled.sort();
+               _destroy: function() {
+                       this.anchors.removeData( "cache.tabs" );
+                       this._super();
+               },
 
-                       this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+               url: function( index ){
+                       this.anchors.eq( index ).removeData( "cache.tabs" );
+                       this._superApply( arguments );
                }
+       });
 
-               return this;
-       },
-
-       select: function( index ) {
-               index = this._getIndex( index );
-               if ( index == -1 ) {
-                       if ( this.options.collapsible && this.options.selected != -1 ) {
-                               index = this.options.selected;
-                       } else {
-                               return this;
+       // abort method
+       $.widget( "ui.tabs", $.ui.tabs, {
+               abort: function() {
+                       if ( this.xhr ) {
+                               this.xhr.abort();
                        }
                }
-               this.anchors.eq( index ).trigger( this.options.event + ".tabs" );
-               return this;
-       },
+       });
+
+       // spinner
+       $.widget( "ui.tabs", $.ui.tabs, {
+               options: {
+                       spinner: "<em>Loading&#8230;</em>"
+               },
+               _create: function() {
+                       this._super();
+                       this._on({
+                               tabsbeforeload: function( event, ui ) {
+                                       // Don't react to nested tabs or tabs that don't use a spinner
+                                       if ( event.target !== this.element[ 0 ] ||
+                                                       !this.options.spinner ) {
+                                               return;
+                                       }
 
-       load: function( index ) {
-               index = this._getIndex( index );
-               var self = this,
-                       o = this.options,
-                       a = this.anchors.eq( index )[ 0 ],
-                       url = $.data( a, "load.tabs" );
+                                       var span = ui.tab.find( "span" ),
+                                               html = span.html();
+                                       span.html( this.options.spinner );
+                                       ui.jqXHR.complete(function() {
+                                               span.html( html );
+                                       });
+                               }
+                       });
+               }
+       });
+
+       // enable/disable events
+       $.widget( "ui.tabs", $.ui.tabs, {
+               options: {
+                       enable: null,
+                       disable: null
+               },
+
+               enable: function( index ) {
+                       var options = this.options,
+                               trigger;
+
+                       if ( index && options.disabled === true ||
+                                       ( $.isArray( options.disabled ) && $.inArray( index, options.disabled ) !== -1 ) ) {
+                               trigger = true;
+                       }
 
-               this.abort();
+                       this._superApply( arguments );
 
-               // not remote or from cache
-               if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) {
-                       this.element.dequeue( "tabs" );
-                       return;
-               }
+                       if ( trigger ) {
+                               this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+                       }
+               },
 
-               // load remote from here on
-               this.lis.eq( index ).addClass( "ui-state-processing" );
+               disable: function( index ) {
+                       var options = this.options,
+                               trigger;
 
-               if ( o.spinner ) {
-                       var span = $( "span", a );
-                       span.data( "label.tabs", span.html() ).html( o.spinner );
-               }
+                       if ( index && options.disabled === false ||
+                                       ( $.isArray( options.disabled ) && $.inArray( index, options.disabled ) === -1 ) ) {
+                               trigger = true;
+                       }
 
-               this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, {
-                       url: url,
-                       success: function( r, s ) {
-                               self.element.find( self._sanitizeSelector( a.hash ) ).html( r );
+                       this._superApply( arguments );
 
-                               // take care of tab labels
-                               self._cleanup();
+                       if ( trigger ) {
+                               this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+                       }
+               }
+       });
+
+       // add/remove methods and events
+       $.widget( "ui.tabs", $.ui.tabs, {
+               options: {
+                       add: null,
+                       remove: null,
+                       tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
+               },
+
+               add: function( url, label, index ) {
+                       if ( index === undefined ) {
+                               index = this.anchors.length;
+                       }
 
-                               if ( o.cache ) {
-                                       $.data( a, "cache.tabs", true );
+                       var doInsertAfter, panel,
+                               options = this.options,
+                               li = $( options.tabTemplate
+                                       .replace( /#\{href\}/g, url )
+                                       .replace( /#\{label\}/g, label ) ),
+                               id = !url.indexOf( "#" ) ?
+                                       url.replace( "#", "" ) :
+                                       this._tabId( li );
+
+                       li.addClass( "ui-state-default ui-corner-top" ).data( "ui-tabs-destroy", true );
+                       li.attr( "aria-controls", id );
+
+                       doInsertAfter = index >= this.tabs.length;
+
+                       // try to find an existing element before creating a new one
+                       panel = this.element.find( "#" + id );
+                       if ( !panel.length ) {
+                               panel = this._createPanel( id );
+                               if ( doInsertAfter ) {
+                                       if ( index > 0 ) {
+                                               panel.insertAfter( this.panels.eq( -1 ) );
+                                       } else {
+                                               panel.appendTo( this.element );
+                                       }
+                               } else {
+                                       panel.insertBefore( this.panels[ index ] );
                                }
+                       }
+                       panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ).hide();
 
-                               self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
-                               try {
-                                       o.ajaxOptions.success( r, s );
-                               }
-                               catch ( e ) {}
-                       },
-                       error: function( xhr, s, e ) {
-                               // take care of tab labels
-                               self._cleanup();
-
-                               self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
-                               try {
-                                       // Passing index avoid a race condition when this method is
-                                       // called after the user has selected another tab.
-                                       // Pass the anchor that initiated this request allows
-                                       // loadError to manipulate the tab content panel via $(a.hash)
-                                       o.ajaxOptions.error( xhr, s, index, a );
-                               }
-                               catch ( e ) {}
+                       if ( doInsertAfter ) {
+                               li.appendTo( this.tablist );
+                       } else {
+                               li.insertBefore( this.tabs[ index ] );
                        }
-               } ) );
 
-               // last, so that load event is fired before show...
-               self.element.dequeue( "tabs" );
+                       options.disabled = $.map( options.disabled, function( n ) {
+                               return n >= index ? ++n : n;
+                       });
 
-               return this;
-       },
+                       this.refresh();
+                       if ( this.tabs.length === 1 && options.active === false ) {
+                               this.option( "active", 0 );
+                       }
 
-       abort: function() {
-               // stop possibly running animations
-               this.element.queue( [] );
-               this.panels.stop( false, true );
+                       this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+                       return this;
+               },
+
+               remove: function( index ) {
+                       index = this._getIndex( index );
+                       var options = this.options,
+                               tab = this.tabs.eq( index ).remove(),
+                               panel = this._getPanelForTab( tab ).remove();
+
+                       // If selected tab was removed focus tab to the right or
+                       // in case the last tab was removed the tab to the left.
+                       // We check for more than 2 tabs, because if there are only 2,
+                       // then when we remove this tab, there will only be one tab left
+                       // so we don't need to detect which tab to activate.
+                       if ( tab.hasClass( "ui-tabs-active" ) && this.anchors.length > 2 ) {
+                               this._activate( index + ( index + 1 < this.anchors.length ? 1 : -1 ) );
+                       }
 
-               // "tabs" queue must not contain more than two elements,
-               // which are the callbacks for the latest clicked tab...
-               this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) );
+                       options.disabled = $.map(
+                               $.grep( options.disabled, function( n ) {
+                                       return n !== index;
+                               }),
+                               function( n ) {
+                                       return n >= index ? --n : n;
+                               });
 
-               // terminate pending requests from other tabs
-               if ( this.xhr ) {
-                       this.xhr.abort();
-                       delete this.xhr;
+                       this.refresh();
+
+                       this._trigger( "remove", null, this._ui( tab.find( "a" )[ 0 ], panel[ 0 ] ) );
+                       return this;
                }
+       });
 
-               // take care of tab labels
-               this._cleanup();
-               return this;
-       },
+       // length method
+       $.widget( "ui.tabs", $.ui.tabs, {
+               length: function() {
+                       return this.anchors.length;
+               }
+       });
+
+       // panel ids (idPrefix option + title attribute)
+       $.widget( "ui.tabs", $.ui.tabs, {
+               options: {
+                       idPrefix: "ui-tabs-"
+               },
+
+               _tabId: function( tab ) {
+                       var a = tab.is( "li" ) ? tab.find( "a[href]" ) : tab;
+                       a = a[0];
+                       return $( a ).closest( "li" ).attr( "aria-controls" ) ||
+                               a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF\-]/g, "" ) ||
+                               this.options.idPrefix + getNextTabId();
+               }
+       });
 
-       url: function( index, url ) {
-               this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url );
-               return this;
-       },
+       // _createPanel method
+       $.widget( "ui.tabs", $.ui.tabs, {
+               options: {
+                       panelTemplate: "<div></div>"
+               },
 
-       length: function() {
-               return this.anchors.length;
-       }
-});
+               _createPanel: function( id ) {
+                       return $( this.options.panelTemplate )
+                               .attr( "id", id )
+                               .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+                               .data( "ui-tabs-destroy", true );
+               }
+       });
+
+       // selected option
+       $.widget( "ui.tabs", $.ui.tabs, {
+               _create: function() {
+                       var options = this.options;
+                       if ( options.active === null && options.selected !== undefined ) {
+                               options.active = options.selected === -1 ? false : options.selected;
+                       }
+                       this._super();
+                       options.selected = options.active;
+                       if ( options.selected === false ) {
+                               options.selected = -1;
+                       }
+               },
 
-$.extend( $.ui.tabs, {
-       version: "1.8.24"
-});
+               _setOption: function( key, value ) {
+                       if ( key !== "selected" ) {
+                               return this._super( key, value );
+                       }
 
-/*
- * Tabs Extensions
- */
+                       var options = this.options;
+                       this._super( "active", value === -1 ? false : value );
+                       options.selected = options.active;
+                       if ( options.selected === false ) {
+                               options.selected = -1;
+                       }
+               },
 
-/*
- * Rotate
- */
-$.extend( $.ui.tabs.prototype, {
-       rotation: null,
-       rotate: function( ms, continuing ) {
-               var self = this,
-                       o = this.options;
-
-               var rotate = self._rotate || ( self._rotate = function( e ) {
-                       clearTimeout( self.rotation );
-                       self.rotation = setTimeout(function() {
-                               var t = o.selected;
-                               self.select( ++t < self.anchors.length ? t : 0 );
-                       }, ms );
-                       
-                       if ( e ) {
-                               e.stopPropagation();
+               _eventHandler: function() {
+                       this._superApply( arguments );
+                       this.options.selected = this.options.active;
+                       if ( this.options.selected === false ) {
+                               this.options.selected = -1;
                        }
-               });
+               }
+       });
+
+       // show and select event
+       $.widget( "ui.tabs", $.ui.tabs, {
+               options: {
+                       show: null,
+                       select: null
+               },
+               _create: function() {
+                       this._super();
+                       if ( this.options.active !== false ) {
+                               this._trigger( "show", null, this._ui(
+                                       this.active.find( ".ui-tabs-anchor" )[ 0 ],
+                                       this._getPanelForTab( this.active )[ 0 ] ) );
+                       }
+               },
+               _trigger: function( type, event, data ) {
+                       var tab, panel,
+                               ret = this._superApply( arguments );
 
-               var stop = self._unrotate || ( self._unrotate = !continuing
-                       ? function(e) {
-                               if (e.clientX) { // in case of a true click
-                                       self.rotate(null);
+                       if ( !ret ) {
+                               return false;
+                       }
+
+                       if ( type === "beforeActivate" ) {
+                               tab = data.newTab.length ? data.newTab : data.oldTab;
+                               panel = data.newPanel.length ? data.newPanel : data.oldPanel;
+                               ret = this._super( "select", event, {
+                                       tab: tab.find( ".ui-tabs-anchor" )[ 0],
+                                       panel: panel[ 0 ],
+                                       index: tab.closest( "li" ).index()
+                               });
+                       } else if ( type === "activate" && data.newTab.length ) {
+                               ret = this._super( "show", event, {
+                                       tab: data.newTab.find( ".ui-tabs-anchor" )[ 0 ],
+                                       panel: data.newPanel[ 0 ],
+                                       index: data.newTab.closest( "li" ).index()
+                               });
+                       }
+                       return ret;
+               }
+       });
+
+       // select method
+       $.widget( "ui.tabs", $.ui.tabs, {
+               select: function( index ) {
+                       index = this._getIndex( index );
+                       if ( index === -1 ) {
+                               if ( this.options.collapsible && this.options.selected !== -1 ) {
+                                       index = this.options.selected;
+                               } else {
+                                       return;
                                }
                        }
-                       : function( e ) {
-                               rotate();
-                       });
+                       this.anchors.eq( index ).trigger( this.options.event + this.eventNamespace );
+               }
+       });
+
+       // cookie option
+       (function() {
+
+       var listId = 0;
+
+       $.widget( "ui.tabs", $.ui.tabs, {
+               options: {
+                       cookie: null // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }
+               },
+               _create: function() {
+                       var options = this.options,
+                               active;
+                       if ( options.active == null && options.cookie ) {
+                               active = parseInt( this._cookie(), 10 );
+                               if ( active === -1 ) {
+                                       active = false;
+                               }
+                               options.active = active;
+                       }
+                       this._super();
+               },
+               _cookie: function( active ) {
+                       var cookie = [ this.cookie ||
+                               ( this.cookie = this.options.cookie.name || "ui-tabs-" + (++listId) ) ];
+                       if ( arguments.length ) {
+                               cookie.push( active === false ? -1 : active );
+                               cookie.push( this.options.cookie );
+                       }
+                       return $.cookie.apply( null, cookie );
+               },
+               _refresh: function() {
+                       this._super();
+                       if ( this.options.cookie ) {
+                               this._cookie( this.options.active, this.options.cookie );
+                       }
+               },
+               _eventHandler: function() {
+                       this._superApply( arguments );
+                       if ( this.options.cookie ) {
+                               this._cookie( this.options.active, this.options.cookie );
+                       }
+               },
+               _destroy: function() {
+                       this._super();
+                       if ( this.options.cookie ) {
+                               this._cookie( null, this.options.cookie );
+                       }
+               }
+       });
 
-               // start rotation
-               if ( ms ) {
-                       this.element.bind( "tabsshow", rotate );
-                       this.anchors.bind( o.event + ".tabs", stop );
-                       rotate();
-               // stop rotation
-               } else {
-                       clearTimeout( self.rotation );
-                       this.element.unbind( "tabsshow", rotate );
-                       this.anchors.unbind( o.event + ".tabs", stop );
-                       delete this._rotate;
-                       delete this._unrotate;
+       })();
+
+       // load event
+       $.widget( "ui.tabs", $.ui.tabs, {
+               _trigger: function( type, event, data ) {
+                       var _data = $.extend( {}, data );
+                       if ( type === "load" ) {
+                               _data.panel = _data.panel[ 0 ];
+                               _data.tab = _data.tab.find( ".ui-tabs-anchor" )[ 0 ];
+                       }
+                       return this._super( type, event, _data );
                }
+       });
+
+       // fx option
+       // The new animation options (show, hide) conflict with the old show callback.
+       // The old fx option wins over show/hide anyway (always favor back-compat).
+       // If a user wants to use the new animation API, they must give up the old API.
+       $.widget( "ui.tabs", $.ui.tabs, {
+               options: {
+                       fx: null // e.g. { height: "toggle", opacity: "toggle", duration: 200 }
+               },
+
+               _getFx: function() {
+                       var hide, show,
+                               fx = this.options.fx;
+
+                       if ( fx ) {
+                               if ( $.isArray( fx ) ) {
+                                       hide = fx[ 0 ];
+                                       show = fx[ 1 ];
+                               } else {
+                                       hide = show = fx;
+                               }
+                       }
 
-               return this;
-       }
-});
+                       return fx ? { show: show, hide: hide } : null;
+               },
+
+               _toggle: function( event, eventData ) {
+                       var that = this,
+                               toShow = eventData.newPanel,
+                               toHide = eventData.oldPanel,
+                               fx = this._getFx();
+
+                       if ( !fx ) {
+                               return this._super( event, eventData );
+                       }
+
+                       that.running = true;
+
+                       function complete() {
+                               that.running = false;
+                               that._trigger( "activate", event, eventData );
+                       }
+
+                       function show() {
+                               eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+
+                               if ( toShow.length && fx.show ) {
+                                       toShow
+                                               .animate( fx.show, fx.show.duration, function() {
+                                                       complete();
+                                               });
+                               } else {
+                                       toShow.show();
+                                       complete();
+                               }
+                       }
+
+                       // start out by hiding, then showing, then completing
+                       if ( toHide.length && fx.hide ) {
+                               toHide.animate( fx.hide, fx.hide.duration, function() {
+                                       eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+                                       show();
+                               });
+                       } else {
+                               eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+                               toHide.hide();
+                               show();
+                       }
+               }
+       });
+}
 
 })( jQuery );
diff --git a/resources/lib/jquery.ui/jquery.ui.tooltip.js b/resources/lib/jquery.ui/jquery.ui.tooltip.js
new file mode 100644 (file)
index 0000000..2b50b44
--- /dev/null
@@ -0,0 +1,398 @@
+/*!
+ * jQuery UI Tooltip 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tooltip/
+ *
+ * Depends:
+ *     jquery.ui.core.js
+ *     jquery.ui.widget.js
+ *     jquery.ui.position.js
+ */
+(function( $ ) {
+
+var increments = 0;
+
+function addDescribedBy( elem, id ) {
+       var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+       describedby.push( id );
+       elem
+               .data( "ui-tooltip-id", id )
+               .attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+}
+
+function removeDescribedBy( elem ) {
+       var id = elem.data( "ui-tooltip-id" ),
+               describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+               index = $.inArray( id, describedby );
+       if ( index !== -1 ) {
+               describedby.splice( index, 1 );
+       }
+
+       elem.removeData( "ui-tooltip-id" );
+       describedby = $.trim( describedby.join( " " ) );
+       if ( describedby ) {
+               elem.attr( "aria-describedby", describedby );
+       } else {
+               elem.removeAttr( "aria-describedby" );
+       }
+}
+
+$.widget( "ui.tooltip", {
+       version: "1.9.2",
+       options: {
+               content: function() {
+                       return $( this ).attr( "title" );
+               },
+               hide: true,
+               // Disabled elements have inconsistent behavior across browsers (#8661)
+               items: "[title]:not([disabled])",
+               position: {
+                       my: "left top+15",
+                       at: "left bottom",
+                       collision: "flipfit flip"
+               },
+               show: true,
+               tooltipClass: null,
+               track: false,
+
+               // callbacks
+               close: null,
+               open: null
+       },
+
+       _create: function() {
+               this._on({
+                       mouseover: "open",
+                       focusin: "open"
+               });
+
+               // IDs of generated tooltips, needed for destroy
+               this.tooltips = {};
+               // IDs of parent tooltips where we removed the title attribute
+               this.parents = {};
+
+               if ( this.options.disabled ) {
+                       this._disable();
+               }
+       },
+
+       _setOption: function( key, value ) {
+               var that = this;
+
+               if ( key === "disabled" ) {
+                       this[ value ? "_disable" : "_enable" ]();
+                       this.options[ key ] = value;
+                       // disable element style changes
+                       return;
+               }
+
+               this._super( key, value );
+
+               if ( key === "content" ) {
+                       $.each( this.tooltips, function( id, element ) {
+                               that._updateContent( element );
+                       });
+               }
+       },
+
+       _disable: function() {
+               var that = this;
+
+               // close open tooltips
+               $.each( this.tooltips, function( id, element ) {
+                       var event = $.Event( "blur" );
+                       event.target = event.currentTarget = element[0];
+                       that.close( event, true );
+               });
+
+               // remove title attributes to prevent native tooltips
+               this.element.find( this.options.items ).andSelf().each(function() {
+                       var element = $( this );
+                       if ( element.is( "[title]" ) ) {
+                               element
+                                       .data( "ui-tooltip-title", element.attr( "title" ) )
+                                       .attr( "title", "" );
+                       }
+               });
+       },
+
+       _enable: function() {
+               // restore title attributes
+               this.element.find( this.options.items ).andSelf().each(function() {
+                       var element = $( this );
+                       if ( element.data( "ui-tooltip-title" ) ) {
+                               element.attr( "title", element.data( "ui-tooltip-title" ) );
+                       }
+               });
+       },
+
+       open: function( event ) {
+               var that = this,
+                       target = $( event ? event.target : this.element )
+                               // we need closest here due to mouseover bubbling,
+                               // but always pointing at the same event target
+                               .closest( this.options.items );
+
+               // No element to show a tooltip for or the tooltip is already open
+               if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+                       return;
+               }
+
+               if ( target.attr( "title" ) ) {
+                       target.data( "ui-tooltip-title", target.attr( "title" ) );
+               }
+
+               target.data( "ui-tooltip-open", true );
+
+               // kill parent tooltips, custom or native, for hover
+               if ( event && event.type === "mouseover" ) {
+                       target.parents().each(function() {
+                               var parent = $( this ),
+                                       blurEvent;
+                               if ( parent.data( "ui-tooltip-open" ) ) {
+                                       blurEvent = $.Event( "blur" );
+                                       blurEvent.target = blurEvent.currentTarget = this;
+                                       that.close( blurEvent, true );
+                               }
+                               if ( parent.attr( "title" ) ) {
+                                       parent.uniqueId();
+                                       that.parents[ this.id ] = {
+                                               element: this,
+                                               title: parent.attr( "title" )
+                                       };
+                                       parent.attr( "title", "" );
+                               }
+                       });
+               }
+
+               this._updateContent( target, event );
+       },
+
+       _updateContent: function( target, event ) {
+               var content,
+                       contentOption = this.options.content,
+                       that = this,
+                       eventType = event ? event.type : null;
+
+               if ( typeof contentOption === "string" ) {
+                       return this._open( event, target, contentOption );
+               }
+
+               content = contentOption.call( target[0], function( response ) {
+                       // ignore async response if tooltip was closed already
+                       if ( !target.data( "ui-tooltip-open" ) ) {
+                               return;
+                       }
+                       // IE may instantly serve a cached response for ajax requests
+                       // delay this call to _open so the other call to _open runs first
+                       that._delay(function() {
+                               // jQuery creates a special event for focusin when it doesn't
+                               // exist natively. To improve performance, the native event
+                               // object is reused and the type is changed. Therefore, we can't
+                               // rely on the type being correct after the event finished
+                               // bubbling, so we set it back to the previous value. (#8740)
+                               if ( event ) {
+                                       event.type = eventType;
+                               }
+                               this._open( event, target, response );
+                       });
+               });
+               if ( content ) {
+                       this._open( event, target, content );
+               }
+       },
+
+       _open: function( event, target, content ) {
+               var tooltip, events, delayedShow,
+                       positionOption = $.extend( {}, this.options.position );
+
+               if ( !content ) {
+                       return;
+               }
+
+               // Content can be updated multiple times. If the tooltip already
+               // exists, then just update the content and bail.
+               tooltip = this._find( target );
+               if ( tooltip.length ) {
+                       tooltip.find( ".ui-tooltip-content" ).html( content );
+                       return;
+               }
+
+               // if we have a title, clear it to prevent the native tooltip
+               // we have to check first to avoid defining a title if none exists
+               // (we don't want to cause an element to start matching [title])
+               //
+               // We use removeAttr only for key events, to allow IE to export the correct
+               // accessible attributes. For mouse events, set to empty string to avoid
+               // native tooltip showing up (happens only when removing inside mouseover).
+               if ( target.is( "[title]" ) ) {
+                       if ( event && event.type === "mouseover" ) {
+                               target.attr( "title", "" );
+                       } else {
+                               target.removeAttr( "title" );
+                       }
+               }
+
+               tooltip = this._tooltip( target );
+               addDescribedBy( target, tooltip.attr( "id" ) );
+               tooltip.find( ".ui-tooltip-content" ).html( content );
+
+               function position( event ) {
+                       positionOption.of = event;
+                       if ( tooltip.is( ":hidden" ) ) {
+                               return;
+                       }
+                       tooltip.position( positionOption );
+               }
+               if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+                       this._on( this.document, {
+                               mousemove: position
+                       });
+                       // trigger once to override element-relative positioning
+                       position( event );
+               } else {
+                       tooltip.position( $.extend({
+                               of: target
+                       }, this.options.position ) );
+               }
+
+               tooltip.hide();
+
+               this._show( tooltip, this.options.show );
+               // Handle tracking tooltips that are shown with a delay (#8644). As soon
+               // as the tooltip is visible, position the tooltip using the most recent
+               // event.
+               if ( this.options.show && this.options.show.delay ) {
+                       delayedShow = setInterval(function() {
+                               if ( tooltip.is( ":visible" ) ) {
+                                       position( positionOption.of );
+                                       clearInterval( delayedShow );
+                               }
+                       }, $.fx.interval );
+               }
+
+               this._trigger( "open", event, { tooltip: tooltip } );
+
+               events = {
+                       keyup: function( event ) {
+                               if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+                                       var fakeEvent = $.Event(event);
+                                       fakeEvent.currentTarget = target[0];
+                                       this.close( fakeEvent, true );
+                               }
+                       },
+                       remove: function() {
+                               this._removeTooltip( tooltip );
+                       }
+               };
+               if ( !event || event.type === "mouseover" ) {
+                       events.mouseleave = "close";
+               }
+               if ( !event || event.type === "focusin" ) {
+                       events.focusout = "close";
+               }
+               this._on( true, target, events );
+       },
+
+       close: function( event ) {
+               var that = this,
+                       target = $( event ? event.currentTarget : this.element ),
+                       tooltip = this._find( target );
+
+               // disabling closes the tooltip, so we need to track when we're closing
+               // to avoid an infinite loop in case the tooltip becomes disabled on close
+               if ( this.closing ) {
+                       return;
+               }
+
+               // only set title if we had one before (see comment in _open())
+               if ( target.data( "ui-tooltip-title" ) ) {
+                       target.attr( "title", target.data( "ui-tooltip-title" ) );
+               }
+
+               removeDescribedBy( target );
+
+               tooltip.stop( true );
+               this._hide( tooltip, this.options.hide, function() {
+                       that._removeTooltip( $( this ) );
+               });
+
+               target.removeData( "ui-tooltip-open" );
+               this._off( target, "mouseleave focusout keyup" );
+               // Remove 'remove' binding only on delegated targets
+               if ( target[0] !== this.element[0] ) {
+                       this._off( target, "remove" );
+               }
+               this._off( this.document, "mousemove" );
+
+               if ( event && event.type === "mouseleave" ) {
+                       $.each( this.parents, function( id, parent ) {
+                               $( parent.element ).attr( "title", parent.title );
+                               delete that.parents[ id ];
+                       });
+               }
+
+               this.closing = true;
+               this._trigger( "close", event, { tooltip: tooltip } );
+               this.closing = false;
+       },
+
+       _tooltip: function( element ) {
+               var id = "ui-tooltip-" + increments++,
+                       tooltip = $( "<div>" )
+                               .attr({
+                                       id: id,
+                                       role: "tooltip"
+                               })
+                               .addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+                                       ( this.options.tooltipClass || "" ) );
+               $( "<div>" )
+                       .addClass( "ui-tooltip-content" )
+                       .appendTo( tooltip );
+               tooltip.appendTo( this.document[0].body );
+               if ( $.fn.bgiframe ) {
+                       tooltip.bgiframe();
+               }
+               this.tooltips[ id ] = element;
+               return tooltip;
+       },
+
+       _find: function( target ) {
+               var id = target.data( "ui-tooltip-id" );
+               return id ? $( "#" + id ) : $();
+       },
+
+       _removeTooltip: function( tooltip ) {
+               tooltip.remove();
+               delete this.tooltips[ tooltip.attr( "id" ) ];
+       },
+
+       _destroy: function() {
+               var that = this;
+
+               // close open tooltips
+               $.each( this.tooltips, function( id, element ) {
+                       // Delegate to close method to handle common cleanup
+                       var event = $.Event( "blur" );
+                       event.target = event.currentTarget = element[0];
+                       that.close( event, true );
+
+                       // Remove immediately; destroying an open tooltip doesn't use the
+                       // hide animation
+                       $( "#" + id ).remove();
+
+                       // Restore the title
+                       if ( element.data( "ui-tooltip-title" ) ) {
+                               element.attr( "title", element.data( "ui-tooltip-title" ) );
+                               element.removeData( "ui-tooltip-title" );
+                       }
+               });
+       }
+});
+
+}( jQuery ) );
index 66ef013..067476d 100644 (file)
@@ -1,48 +1,32 @@
 /*!
- * jQuery UI Widget 1.8.24
+ * jQuery UI Widget 1.9.2
+ * http://jqueryui.com
  *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Widget
+ * http://api.jqueryui.com/jQuery.widget/
  */
 (function( $, undefined ) {
 
-// jQuery 1.4+
-if ( $.cleanData ) {
-       var _cleanData = $.cleanData;
-       $.cleanData = function( elems ) {
-               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-                       try {
-                               $( elem ).triggerHandler( "remove" );
-                       // http://bugs.jquery.com/ticket/8235
-                       } catch( e ) {}
-               }
-               _cleanData( elems );
-       };
-} else {
-       var _remove = $.fn.remove;
-       $.fn.remove = function( selector, keepData ) {
-               return this.each(function() {
-                       if ( !keepData ) {
-                               if ( !selector || $.filter( selector, [ this ] ).length ) {
-                                       $( "*", this ).add( [ this ] ).each(function() {
-                                               try {
-                                                       $( this ).triggerHandler( "remove" );
-                                               // http://bugs.jquery.com/ticket/8235
-                                               } catch( e ) {}
-                                       });
-                               }
-                       }
-                       return _remove.call( $(this), selector, keepData );
-               });
-       };
-}
+var uuid = 0,
+       slice = Array.prototype.slice,
+       _cleanData = $.cleanData;
+$.cleanData = function( elems ) {
+       for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+               try {
+                       $( elem ).triggerHandler( "remove" );
+               // http://bugs.jquery.com/ticket/8235
+               } catch( e ) {}
+       }
+       _cleanData( elems );
+};
 
 $.widget = function( name, base, prototype ) {
-       var namespace = name.split( "." )[ 0 ],
-               fullName;
+       var fullName, existingConstructor, constructor, basePrototype,
+               namespace = name.split( "." )[ 0 ];
+
        name = name.split( "." )[ 1 ];
        fullName = namespace + "-" + name;
 
@@ -52,81 +36,167 @@ $.widget = function( name, base, prototype ) {
        }
 
        // create selector for plugin
-       $.expr[ ":" ][ fullName ] = function( elem ) {
-               return !!$.data( elem, name );
+       $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+               return !!$.data( elem, fullName );
        };
 
        $[ namespace ] = $[ namespace ] || {};
-       $[ namespace ][ name ] = function( options, element ) {
+       existingConstructor = $[ namespace ][ name ];
+       constructor = $[ namespace ][ name ] = function( options, element ) {
+               // allow instantiation without "new" keyword
+               if ( !this._createWidget ) {
+                       return new constructor( options, element );
+               }
+
                // allow instantiation without initializing for simple inheritance
+               // must use "new" keyword (the code above always passes args)
                if ( arguments.length ) {
                        this._createWidget( options, element );
                }
        };
-
-       var basePrototype = new base();
+       // extend with the existing constructor to carry over any static properties
+       $.extend( constructor, existingConstructor, {
+               version: prototype.version,
+               // copy the object used to create the prototype in case we need to
+               // redefine the widget later
+               _proto: $.extend( {}, prototype ),
+               // track widgets that inherit from this widget in case this widget is
+               // redefined after a widget inherits from it
+               _childConstructors: []
+       });
+
+       basePrototype = new base();
        // we need to make the options hash a property directly on the new instance
        // otherwise we'll modify the options hash on the prototype that we're
        // inheriting from
-//     $.each( basePrototype, function( key, val ) {
-//             if ( $.isPlainObject(val) ) {
-//                     basePrototype[ key ] = $.extend( {}, val );
-//             }
-//     });
-       basePrototype.options = $.extend( true, {}, basePrototype.options );
-       $[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
+       basePrototype.options = $.widget.extend( {}, basePrototype.options );
+       $.each( prototype, function( prop, value ) {
+               if ( $.isFunction( value ) ) {
+                       prototype[ prop ] = (function() {
+                               var _super = function() {
+                                               return base.prototype[ prop ].apply( this, arguments );
+                                       },
+                                       _superApply = function( args ) {
+                                               return base.prototype[ prop ].apply( this, args );
+                                       };
+                               return function() {
+                                       var __super = this._super,
+                                               __superApply = this._superApply,
+                                               returnValue;
+
+                                       this._super = _super;
+                                       this._superApply = _superApply;
+
+                                       returnValue = value.apply( this, arguments );
+
+                                       this._super = __super;
+                                       this._superApply = __superApply;
+
+                                       return returnValue;
+                               };
+                       })();
+               }
+       });
+       constructor.prototype = $.widget.extend( basePrototype, {
+               // TODO: remove support for widgetEventPrefix
+               // always use the name + a colon as the prefix, e.g., draggable:start
+               // don't prefix for widgets that aren't DOM-based
+               widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
+       }, prototype, {
+               constructor: constructor,
                namespace: namespace,
                widgetName: name,
-               widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
-               widgetBaseClass: fullName
-       }, prototype );
+               // TODO remove widgetBaseClass, see #8155
+               widgetBaseClass: fullName,
+               widgetFullName: fullName
+       });
+
+       // If this widget is being redefined then we need to find all widgets that
+       // are inheriting from it and redefine all of them so that they inherit from
+       // the new version of this widget. We're essentially trying to replace one
+       // level in the prototype chain.
+       if ( existingConstructor ) {
+               $.each( existingConstructor._childConstructors, function( i, child ) {
+                       var childPrototype = child.prototype;
+
+                       // redefine the child widget using the same prototype that was
+                       // originally used, but inherit from the new version of the base
+                       $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+               });
+               // remove the list of existing child constructors from the old constructor
+               // so the old child constructors can be garbage collected
+               delete existingConstructor._childConstructors;
+       } else {
+               base._childConstructors.push( constructor );
+       }
 
-       $.widget.bridge( name, $[ namespace ][ name ] );
+       $.widget.bridge( name, constructor );
+};
+
+$.widget.extend = function( target ) {
+       var input = slice.call( arguments, 1 ),
+               inputIndex = 0,
+               inputLength = input.length,
+               key,
+               value;
+       for ( ; inputIndex < inputLength; inputIndex++ ) {
+               for ( key in input[ inputIndex ] ) {
+                       value = input[ inputIndex ][ key ];
+                       if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+                               // Clone objects
+                               if ( $.isPlainObject( value ) ) {
+                                       target[ key ] = $.isPlainObject( target[ key ] ) ?
+                                               $.widget.extend( {}, target[ key ], value ) :
+                                               // Don't extend strings, arrays, etc. with objects
+                                               $.widget.extend( {}, value );
+                               // Copy everything else by reference
+                               } else {
+                                       target[ key ] = value;
+                               }
+                       }
+               }
+       }
+       return target;
 };
 
 $.widget.bridge = function( name, object ) {
+       var fullName = object.prototype.widgetFullName || name;
        $.fn[ name ] = function( options ) {
                var isMethodCall = typeof options === "string",
-                       args = Array.prototype.slice.call( arguments, 1 ),
+                       args = slice.call( arguments, 1 ),
                        returnValue = this;
 
                // allow multiple hashes to be passed on init
                options = !isMethodCall && args.length ?
-                       $.extend.apply( null, [ true, options ].concat(args) ) :
+                       $.widget.extend.apply( null, [ options ].concat(args) ) :
                        options;
 
-               // prevent calls to internal methods
-               if ( isMethodCall && options.charAt( 0 ) === "_" ) {
-                       return returnValue;
-               }
-
                if ( isMethodCall ) {
                        this.each(function() {
-                               var instance = $.data( this, name ),
-                                       methodValue = instance && $.isFunction( instance[options] ) ?
-                                               instance[ options ].apply( instance, args ) :
-                                               instance;
-                               // TODO: add this back in 1.9 and use $.error() (see #5972)
-//                             if ( !instance ) {
-//                                     throw "cannot call methods on " + name + " prior to initialization; " +
-//                                             "attempted to call method '" + options + "'";
-//                             }
-//                             if ( !$.isFunction( instance[options] ) ) {
-//                                     throw "no such method '" + options + "' for " + name + " widget instance";
-//                             }
-//                             var methodValue = instance[ options ].apply( instance, args );
+                               var methodValue,
+                                       instance = $.data( this, fullName );
+                               if ( !instance ) {
+                                       return $.error( "cannot call methods on " + name + " prior to initialization; " +
+                                               "attempted to call method '" + options + "'" );
+                               }
+                               if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+                                       return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+                               }
+                               methodValue = instance[ options ].apply( instance, args );
                                if ( methodValue !== instance && methodValue !== undefined ) {
-                                       returnValue = methodValue;
+                                       returnValue = methodValue && methodValue.jquery ?
+                                               returnValue.pushStack( methodValue.get() ) :
+                                               methodValue;
                                        return false;
                                }
                        });
                } else {
                        this.each(function() {
-                               var instance = $.data( this, name );
+                               var instance = $.data( this, fullName );
                                if ( instance ) {
                                        instance.option( options || {} )._init();
                                } else {
-                                       $.data( this, name, new object( options, this ) );
+                                       $.data( this, fullName, new object( options, this ) );
                                }
                        });
                }
@@ -135,74 +205,126 @@ $.widget.bridge = function( name, object ) {
        };
 };
 
-$.Widget = function( options, element ) {
-       // allow instantiation without initializing for simple inheritance
-       if ( arguments.length ) {
-               this._createWidget( options, element );
-       }
-};
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
 
 $.Widget.prototype = {
        widgetName: "widget",
        widgetEventPrefix: "",
+       defaultElement: "<div>",
        options: {
-               disabled: false
+               disabled: false,
+
+               // callbacks
+               create: null
        },
        _createWidget: function( options, element ) {
-               // $.widget.bridge stores the plugin instance, but we do it anyway
-               // so that it's stored even before the _create function runs
-               $.data( element, this.widgetName, this );
+               element = $( element || this.defaultElement || this )[ 0 ];
                this.element = $( element );
-               this.options = $.extend( true, {},
+               this.uuid = uuid++;
+               this.eventNamespace = "." + this.widgetName + this.uuid;
+               this.options = $.widget.extend( {},
                        this.options,
                        this._getCreateOptions(),
                        options );
 
-               var self = this;
-               this.element.bind( "remove." + this.widgetName, function() {
-                       self.destroy();
-               });
+               this.bindings = $();
+               this.hoverable = $();
+               this.focusable = $();
+
+               if ( element !== this ) {
+                       // 1.9 BC for #7810
+                       // TODO remove dual storage
+                       $.data( element, this.widgetName, this );
+                       $.data( element, this.widgetFullName, this );
+                       this._on( true, this.element, {
+                               remove: function( event ) {
+                                       if ( event.target === element ) {
+                                               this.destroy();
+                                       }
+                               }
+                       });
+                       this.document = $( element.style ?
+                               // element within the document
+                               element.ownerDocument :
+                               // element is window or document
+                               element.document || element );
+                       this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+               }
 
                this._create();
-               this._trigger( "create" );
+               this._trigger( "create", null, this._getCreateEventData() );
                this._init();
        },
-       _getCreateOptions: function() {
-               return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
-       },
-       _create: function() {},
-       _init: function() {},
+       _getCreateOptions: $.noop,
+       _getCreateEventData: $.noop,
+       _create: $.noop,
+       _init: $.noop,
 
        destroy: function() {
+               this._destroy();
+               // we can probably remove the unbind calls in 2.0
+               // all event bindings should go through this._on()
                this.element
-                       .unbind( "." + this.widgetName )
-                       .removeData( this.widgetName );
+                       .unbind( this.eventNamespace )
+                       // 1.9 BC for #7810
+                       // TODO remove dual storage
+                       .removeData( this.widgetName )
+                       .removeData( this.widgetFullName )
+                       // support: jquery <1.6.3
+                       // http://bugs.jquery.com/ticket/9413
+                       .removeData( $.camelCase( this.widgetFullName ) );
                this.widget()
-                       .unbind( "." + this.widgetName )
+                       .unbind( this.eventNamespace )
                        .removeAttr( "aria-disabled" )
                        .removeClass(
-                               this.widgetBaseClass + "-disabled " +
+                               this.widgetFullName + "-disabled " +
                                "ui-state-disabled" );
+
+               // clean up events and states
+               this.bindings.unbind( this.eventNamespace );
+               this.hoverable.removeClass( "ui-state-hover" );
+               this.focusable.removeClass( "ui-state-focus" );
        },
+       _destroy: $.noop,
 
        widget: function() {
                return this.element;
        },
 
        option: function( key, value ) {
-               var options = key;
+               var options = key,
+                       parts,
+                       curOption,
+                       i;
 
                if ( arguments.length === 0 ) {
                        // don't return a reference to the internal hash
-                       return $.extend( {}, this.options );
+                       return $.widget.extend( {}, this.options );
                }
 
-               if  (typeof key === "string" ) {
-                       if ( value === undefined ) {
-                               return this.options[ key ];
-                       }
+               if ( typeof key === "string" ) {
+                       // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
                        options = {};
-                       options[ key ] = value;
+                       parts = key.split( "." );
+                       key = parts.shift();
+                       if ( parts.length ) {
+                               curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+                               for ( i = 0; i < parts.length - 1; i++ ) {
+                                       curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+                                       curOption = curOption[ parts[ i ] ];
+                               }
+                               key = parts.pop();
+                               if ( value === undefined ) {
+                                       return curOption[ key ] === undefined ? null : curOption[ key ];
+                               }
+                               curOption[ key ] = value;
+                       } else {
+                               if ( value === undefined ) {
+                                       return this.options[ key ] === undefined ? null : this.options[ key ];
+                               }
+                               options[ key ] = value;
+                       }
                }
 
                this._setOptions( options );
@@ -210,10 +332,11 @@ $.Widget.prototype = {
                return this;
        },
        _setOptions: function( options ) {
-               var self = this;
-               $.each( options, function( key, value ) {
-                       self._setOption( key, value );
-               });
+               var key;
+
+               for ( key in options ) {
+                       this._setOption( key, options[ key ] );
+               }
 
                return this;
        },
@@ -222,10 +345,10 @@ $.Widget.prototype = {
 
                if ( key === "disabled" ) {
                        this.widget()
-                               [ value ? "addClass" : "removeClass"](
-                                       this.widgetBaseClass + "-disabled" + " " +
-                                       "ui-state-disabled" )
+                               .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
                                .attr( "aria-disabled", value );
+                       this.hoverable.removeClass( "ui-state-hover" );
+                       this.focusable.removeClass( "ui-state-focus" );
                }
 
                return this;
@@ -238,6 +361,97 @@ $.Widget.prototype = {
                return this._setOption( "disabled", true );
        },
 
+       _on: function( suppressDisabledCheck, element, handlers ) {
+               var delegateElement,
+                       instance = this;
+
+               // no suppressDisabledCheck flag, shuffle arguments
+               if ( typeof suppressDisabledCheck !== "boolean" ) {
+                       handlers = element;
+                       element = suppressDisabledCheck;
+                       suppressDisabledCheck = false;
+               }
+
+               // no element argument, shuffle and use this.element
+               if ( !handlers ) {
+                       handlers = element;
+                       element = this.element;
+                       delegateElement = this.widget();
+               } else {
+                       // accept selectors, DOM elements
+                       element = delegateElement = $( element );
+                       this.bindings = this.bindings.add( element );
+               }
+
+               $.each( handlers, function( event, handler ) {
+                       function handlerProxy() {
+                               // allow widgets to customize the disabled handling
+                               // - disabled as an array instead of boolean
+                               // - disabled class as method for disabling individual parts
+                               if ( !suppressDisabledCheck &&
+                                               ( instance.options.disabled === true ||
+                                                       $( this ).hasClass( "ui-state-disabled" ) ) ) {
+                                       return;
+                               }
+                               return ( typeof handler === "string" ? instance[ handler ] : handler )
+                                       .apply( instance, arguments );
+                       }
+
+                       // copy the guid so direct unbinding works
+                       if ( typeof handler !== "string" ) {
+                               handlerProxy.guid = handler.guid =
+                                       handler.guid || handlerProxy.guid || $.guid++;
+                       }
+
+                       var match = event.match( /^(\w+)\s*(.*)$/ ),
+                               eventName = match[1] + instance.eventNamespace,
+                               selector = match[2];
+                       if ( selector ) {
+                               delegateElement.delegate( selector, eventName, handlerProxy );
+                       } else {
+                               element.bind( eventName, handlerProxy );
+                       }
+               });
+       },
+
+       _off: function( element, eventName ) {
+               eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+               element.unbind( eventName ).undelegate( eventName );
+       },
+
+       _delay: function( handler, delay ) {
+               function handlerProxy() {
+                       return ( typeof handler === "string" ? instance[ handler ] : handler )
+                               .apply( instance, arguments );
+               }
+               var instance = this;
+               return setTimeout( handlerProxy, delay || 0 );
+       },
+
+       _hoverable: function( element ) {
+               this.hoverable = this.hoverable.add( element );
+               this._on( element, {
+                       mouseenter: function( event ) {
+                               $( event.currentTarget ).addClass( "ui-state-hover" );
+                       },
+                       mouseleave: function( event ) {
+                               $( event.currentTarget ).removeClass( "ui-state-hover" );
+                       }
+               });
+       },
+
+       _focusable: function( element ) {
+               this.focusable = this.focusable.add( element );
+               this._on( element, {
+                       focusin: function( event ) {
+                               $( event.currentTarget ).addClass( "ui-state-focus" );
+                       },
+                       focusout: function( event ) {
+                               $( event.currentTarget ).removeClass( "ui-state-focus" );
+                       }
+               });
+       },
+
        _trigger: function( type, event, data ) {
                var prop, orig,
                        callback = this.options[ type ];
@@ -262,11 +476,53 @@ $.Widget.prototype = {
                }
 
                this.element.trigger( event, data );
-
-               return !( $.isFunction(callback) &&
-                       callback.call( this.element[0], event, data ) === false ||
+               return !( $.isFunction( callback ) &&
+                       callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
                        event.isDefaultPrevented() );
        }
 };
 
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+       $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+               if ( typeof options === "string" ) {
+                       options = { effect: options };
+               }
+               var hasOptions,
+                       effectName = !options ?
+                               method :
+                               options === true || typeof options === "number" ?
+                                       defaultEffect :
+                                       options.effect || defaultEffect;
+               options = options || {};
+               if ( typeof options === "number" ) {
+                       options = { duration: options };
+               }
+               hasOptions = !$.isEmptyObject( options );
+               options.complete = callback;
+               if ( options.delay ) {
+                       element.delay( options.delay );
+               }
+               if ( hasOptions && $.effects && ( $.effects.effect[ effectName ] || $.uiBackCompat !== false && $.effects[ effectName ] ) ) {
+                       element[ method ]( options );
+               } else if ( effectName !== method && element[ effectName ] ) {
+                       element[ effectName ]( options.duration, options.easing, callback );
+               } else {
+                       element.queue(function( next ) {
+                               $( this )[ method ]();
+                               if ( callback ) {
+                                       callback.call( element[ 0 ] );
+                               }
+                               next();
+                       });
+               }
+       };
+});
+
+// DEPRECATED
+if ( $.uiBackCompat !== false ) {
+       $.Widget.prototype._getCreateOptions = function() {
+               return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
+       };
+}
+
 })( jQuery );
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-bg_flat_0_aaaaaa_40x100.png b/resources/lib/jquery.ui/themes/default/images/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100644 (file)
index e425e6e..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-bg_flat_0_aaaaaa_40x100.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-bg_flat_75_ffffff_40x100.png b/resources/lib/jquery.ui/themes/default/images/ui-bg_flat_75_ffffff_40x100.png
deleted file mode 100644 (file)
index 72d4757..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-bg_flat_75_ffffff_40x100.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_55_fbf9ee_1x400.png b/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_55_fbf9ee_1x400.png
deleted file mode 100644 (file)
index 3b2914a..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_55_fbf9ee_1x400.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_65_ffffff_1x400.png b/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100644 (file)
index 8569c1b..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_75_dadada_1x400.png b/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_75_dadada_1x400.png
deleted file mode 100644 (file)
index d6cc3c5..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_75_dadada_1x400.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_75_e6e6e6_1x400.png b/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_75_e6e6e6_1x400.png
deleted file mode 100644 (file)
index 86c2baa..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_75_e6e6e6_1x400.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_95_fef1ec_1x400.png b/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_95_fef1ec_1x400.png
deleted file mode 100644 (file)
index 4443fdc..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-bg_glass_95_fef1ec_1x400.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/resources/lib/jquery.ui/themes/default/images/ui-bg_highlight-soft_75_cccccc_1x100.png
deleted file mode 100644 (file)
index 3cd467e..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-bg_highlight-soft_75_cccccc_1x100.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-icons_222222_256x240.png b/resources/lib/jquery.ui/themes/default/images/ui-icons_222222_256x240.png
deleted file mode 100644 (file)
index 9a9606f..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-icons_222222_256x240.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-icons_2e83ff_256x240.png b/resources/lib/jquery.ui/themes/default/images/ui-icons_2e83ff_256x240.png
deleted file mode 100644 (file)
index 08d2617..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-icons_2e83ff_256x240.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-icons_454545_256x240.png b/resources/lib/jquery.ui/themes/default/images/ui-icons_454545_256x240.png
deleted file mode 100644 (file)
index 80cb644..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-icons_454545_256x240.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-icons_888888_256x240.png b/resources/lib/jquery.ui/themes/default/images/ui-icons_888888_256x240.png
deleted file mode 100644 (file)
index 8373712..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-icons_888888_256x240.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/images/ui-icons_cd0a0a_256x240.png b/resources/lib/jquery.ui/themes/default/images/ui-icons_cd0a0a_256x240.png
deleted file mode 100644 (file)
index 34fc893..0000000
Binary files a/resources/lib/jquery.ui/themes/default/images/ui-icons_cd0a0a_256x240.png and /dev/null differ
diff --git a/resources/lib/jquery.ui/themes/default/jquery.ui.accordion.css b/resources/lib/jquery.ui/themes/default/jquery.ui.accordion.css
deleted file mode 100644 (file)
index cd8f971..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*!
- * jQuery UI Accordion 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion#theming
- */
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion { width: 100%; }
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
-.ui-accordion .ui-accordion-content-active { display: block; }
diff --git a/resources/lib/jquery.ui/themes/default/jquery.ui.autocomplete.css b/resources/lib/jquery.ui/themes/default/jquery.ui.autocomplete.css
deleted file mode 100644 (file)
index c7eaff2..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*!
- * jQuery UI Autocomplete 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-.ui-autocomplete { position: absolute; cursor: default; }      
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu 1.8.24
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
-       list-style:none;
-       padding: 2px;
-       margin: 0;
-       display:block;
-       float: left;
-}
-.ui-menu .ui-menu {
-       margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
-       margin:0;
-       padding: 0;
-       zoom: 1;
-       float: left;
-       clear: left;
-       width: 100%;
-}
-.ui-menu .ui-menu-item a {
-       text-decoration:none;
-       display:block;
-       padding:.2em .4em;
-       line-height:1.5;
-       zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
-       font-weight: normal;
-       margin: -1px;
-}
diff --git a/resources/lib/jquery.ui/themes/default/jquery.ui.button.css b/resources/lib/jquery.ui/themes/default/jquery.ui.button.css
deleted file mode 100644 (file)
index cd2dbb6..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*!
- * jQuery UI Button 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button#theming
- */
-
-.ui-button {
-       display: inline-block;
-       position: relative;
-       padding: 0;
-       margin-right: .1em;
-       text-decoration: none !important;
-       cursor: pointer;
-       text-align: center;
-       zoom: 1;
-       overflow: visible; /* the overflow property removes extra width in IE */
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
-       width: 2.2em;
-}
-
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
-       width: 2.4em;
-}
-.ui-button-icons-only {
-       width: 3.4em;
-}
-button.ui-button-icons-only {
-       width: 3.7em;
-}
-
-/*button text element */
-.ui-button .ui-button-text {
-       display: block;
-       line-height: 1.4;
-}
-.ui-button-text-only .ui-button-text {
-       padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
-       padding: .4em;
-       text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
-       padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
-       padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
-       padding-left: 2.1em;
-       padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-       input.ui-button {
-       padding: .4em 1em;
-}
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
-       position: absolute;
-       top: 50%;
-       margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
-       left: 50%;
-       margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
-       left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
-       right: .5em;
-}
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
-       right: .5em;
-}
-
-/*button sets*/
-.ui-buttonset {
-       margin-right: 7px;
-}
-.ui-buttonset .ui-button {
-       margin-left: 0;
-       margin-right: -.3em;
-}
-
-/* workarounds */
-button.ui-button::-moz-focus-inner {
-       border: 0;
-       padding: 0; /* reset extra padding in Firefox */
-}
diff --git a/resources/lib/jquery.ui/themes/default/jquery.ui.core.css b/resources/lib/jquery.ui/themes/default/jquery.ui.core.css
deleted file mode 100644 (file)
index 8b953a2..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*!
- * jQuery UI CSS Framework 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
-.ui-helper-clearfix:after { clear: both; }
-.ui-helper-clearfix { zoom: 1; }
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
diff --git a/resources/lib/jquery.ui/themes/default/jquery.ui.datepicker.css b/resources/lib/jquery.ui/themes/default/jquery.ui.datepicker.css
deleted file mode 100644 (file)
index 37d3a98..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*!
- * jQuery UI Datepicker 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker#theming
- */
-.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month, 
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
-    position: absolute; /*must have*/
-    z-index: -1; /*must have*/
-    filter: mask(); /*must have*/
-    top: -4px; /*must have*/
-    left: -4px; /*must have*/
-    width: 200px; /*must have*/
-    height: 200px; /*must have*/
-}
\ No newline at end of file
diff --git a/resources/lib/jquery.ui/themes/default/jquery.ui.dialog.css b/resources/lib/jquery.ui/themes/default/jquery.ui.dialog.css
deleted file mode 100644 (file)
index 04515f4..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/*!
- * jQuery UI Dialog 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
diff --git a/resources/lib/jquery.ui/themes/default/jquery.ui.progressbar.css b/resources/lib/jquery.ui/themes/default/jquery.ui.progressbar.css
deleted file mode 100644 (file)
index 90bf308..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- * jQuery UI Progressbar 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/resources/lib/jquery.ui/themes/default/jquery.ui.resizable.css b/resources/lib/jquery.ui/themes/default/jquery.ui.resizable.css
deleted file mode 100644 (file)
index d17873e..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*!
- * jQuery UI Resizable 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
\ No newline at end of file
diff --git a/resources/lib/jquery.ui/themes/default/jquery.ui.selectable.css b/resources/lib/jquery.ui/themes/default/jquery.ui.selectable.css
deleted file mode 100644 (file)
index 9850ee7..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-/*!
- * jQuery UI Selectable 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
diff --git a/resources/lib/jquery.ui/themes/default/jquery.ui.slider.css b/resources/lib/jquery.ui/themes/default/jquery.ui.slider.css
deleted file mode 100644 (file)
index fbfe665..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*!
- * jQuery UI Slider 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }
\ No newline at end of file
diff --git a/resources/lib/jquery.ui/themes/default/jquery.ui.tabs.css b/resources/lib/jquery.ui/themes/default/jquery.ui.tabs.css
deleted file mode 100644 (file)
index f0bee7a..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- * jQuery UI Tabs 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs#theming
- */
-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/resources/lib/jquery.ui/themes/default/jquery.ui.theme.css b/resources/lib/jquery.ui/themes/default/jquery.ui.theme.css
deleted file mode 100644 (file)
index b7d2f61..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-/*!
- * jQuery UI CSS Framework 1.8.24
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; }
-.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; }
-.ui-widget-content a { color: #222222/*{fcContent}*/; }
-.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; }
-.ui-widget-header a { color: #222222/*{fcHeader}*/; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; }
-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }
-
-/* Overlays */
-.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; }
-.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; }
\ No newline at end of file
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100755 (executable)
index 0000000..67b1fdd
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
new file mode 100755 (executable)
index 0000000..efa0b15
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100755 (executable)
index 0000000..6467bba
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100755 (executable)
index 0000000..ca988a3
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100755 (executable)
index 0000000..6e20803
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100755 (executable)
index 0000000..9a11b43
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100755 (executable)
index 0000000..01048f8
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100755 (executable)
index 0000000..35976e8
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_222222_256x240.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_222222_256x240.png
new file mode 100755 (executable)
index 0000000..c1cb117
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_222222_256x240.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png
new file mode 100755 (executable)
index 0000000..84b601b
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_454545_256x240.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_454545_256x240.png
new file mode 100755 (executable)
index 0000000..b6db1ac
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_454545_256x240.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_888888_256x240.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_888888_256x240.png
new file mode 100755 (executable)
index 0000000..feea0e2
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_888888_256x240.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png b/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png
new file mode 100755 (executable)
index 0000000..ed5b6b0
Binary files /dev/null and b/resources/lib/jquery.ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png differ
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.accordion.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.accordion.css
new file mode 100644 (file)
index 0000000..d429fd2
--- /dev/null
@@ -0,0 +1,16 @@
+/*!
+ * jQuery UI Accordion 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion#theming
+ */
+.ui-accordion .ui-accordion-header { display: block; cursor: pointer; position: relative; margin-top: 2px; padding: .5em .5em .5em .7em; zoom: 1; }
+.ui-accordion .ui-accordion-icons { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-noicons { padding-left: .7em; }
+.ui-accordion .ui-accordion-icons .ui-accordion-icons { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; overflow: auto; zoom: 1; }
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.autocomplete.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.autocomplete.css
new file mode 100644 (file)
index 0000000..4ef3497
--- /dev/null
@@ -0,0 +1,19 @@
+/*!
+ * jQuery UI Autocomplete 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete {
+       position: absolute;
+       top: 0;
+       left: 0;
+       cursor: default;
+}
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.button.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.button.css
new file mode 100644 (file)
index 0000000..44a7d9b
--- /dev/null
@@ -0,0 +1,40 @@
+/*!
+ * jQuery UI Button 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button#theming
+ */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active { text-decoration: none; }
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; } 
+button.ui-button-icons-only { width: 3.7em; } 
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4;  }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css
new file mode 100644 (file)
index 0000000..2e088ca
--- /dev/null
@@ -0,0 +1,39 @@
+/*!
+ * jQuery UI CSS Framework 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
+.ui-helper-clearfix:after { clear: both; }
+.ui-helper-clearfix { zoom: 1; }
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.datepicker.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.datepicker.css
new file mode 100644 (file)
index 0000000..f56bb75
--- /dev/null
@@ -0,0 +1,67 @@
+/*!
+ * jQuery UI Datepicker 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month, 
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+    position: absolute; /*must have*/
+    z-index: -1; /*must have*/
+    filter: mask(); /*must have*/
+    top: -4px; /*must have*/
+    left: -4px; /*must have*/
+    width: 200px; /*must have*/
+    height: 200px; /*must have*/
+}
\ No newline at end of file
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.dialog.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.dialog.css
new file mode 100644 (file)
index 0000000..1313a5e
--- /dev/null
@@ -0,0 +1,22 @@
+/*!
+ * jQuery UI Dialog 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; top: 0; left: 0; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.menu.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.menu.css
new file mode 100644 (file)
index 0000000..83fd84e
--- /dev/null
@@ -0,0 +1,30 @@
+/*!
+ * jQuery UI Menu 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu { list-style:none; padding: 2px; margin: 0; display:block; outline: none; }
+.ui-menu .ui-menu { margin-top: -3px; position: absolute; }
+.ui-menu .ui-menu-item { margin: 0; padding: 0; zoom: 1; width: 100%; }
+.ui-menu .ui-menu-divider { margin: 5px -2px 5px -2px; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; }
+.ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; zoom: 1; font-weight: normal; }
+.ui-menu .ui-menu-item a.ui-state-focus,
+.ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; }
+
+.ui-menu .ui-state-disabled { font-weight: normal; margin: .4em 0 .2em; line-height: 1.5; }
+.ui-menu .ui-state-disabled a { cursor: default; }
+
+/* icon support */
+.ui-menu-icons { position: relative; }
+.ui-menu-icons .ui-menu-item a { position: relative; padding-left: 2em; }
+
+/* left-aligned */
+.ui-menu .ui-icon { position: absolute; top: .2em; left: .2em; }
+
+/* right-aligned */
+.ui-menu .ui-menu-icon { position: static; float: right; }
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.progressbar.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.progressbar.css
new file mode 100644 (file)
index 0000000..bd7e403
--- /dev/null
@@ -0,0 +1,12 @@
+/*!
+ * jQuery UI Progressbar 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.resizable.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.resizable.css
new file mode 100644 (file)
index 0000000..2f87843
--- /dev/null
@@ -0,0 +1,21 @@
+/*!
+ * jQuery UI Resizable 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
\ No newline at end of file
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.selectable.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.selectable.css
new file mode 100644 (file)
index 0000000..5854c41
--- /dev/null
@@ -0,0 +1,11 @@
+/*!
+ * jQuery UI Selectable 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.slider.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.slider.css
new file mode 100644 (file)
index 0000000..e579478
--- /dev/null
@@ -0,0 +1,25 @@
+/*!
+ * jQuery UI Slider 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }
\ No newline at end of file
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.spinner.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.spinner.css
new file mode 100644 (file)
index 0000000..e89b720
--- /dev/null
@@ -0,0 +1,23 @@
+/*!
+ * jQuery UI Spinner 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Spinner#theming
+ */
+.ui-spinner { position:relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; }
+.ui-spinner-input { border: none; background: none; padding: 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; margin-right: 22px; }
+.ui-spinner-button { width: 16px; height: 50%; font-size: .5em; padding: 0; margin: 0; text-align: center; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; }
+.ui-spinner a.ui-spinner-button { border-top: none; border-bottom: none; border-right: none; } /* more specificity required here to overide default borders */
+.ui-spinner .ui-icon { position: absolute; margin-top: -8px; top: 50%; left: 0; } /* vertical centre icon */
+.ui-spinner-up { top: 0; }
+.ui-spinner-down { bottom: 0; }
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+       /* need to fix icons sprite */
+       background-position:-65px -16px;
+}
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.tabs.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.tabs.css
new file mode 100644 (file)
index 0000000..11a000f
--- /dev/null
@@ -0,0 +1,18 @@
+/*!
+ * jQuery UI Tabs 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 0; margin: 1px .2em 0 0; border-bottom: 0; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: -1px; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.theme.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.theme.css
new file mode 100644 (file)
index 0000000..d170081
--- /dev/null
@@ -0,0 +1,248 @@
+/*!
+ * jQuery UI CSS Framework 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; color: #222222; font-weight: bold; }
+.ui-widget-header a { color: #222222; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; font-weight: normal; color: #555555; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #212121; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fcefa1; background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+.ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); } /* For IE8 - See #6059 */
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url("images/ui-icons_222222_256x240.png"); }
+.ui-widget-content .ui-icon {background-image: url("images/ui-icons_222222_256x240.png"); }
+.ui-widget-header .ui-icon {background-image: url("images/ui-icons_222222_256x240.png"); }
+.ui-state-default .ui-icon { background-image: url("images/ui-icons_888888_256x240.png"); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url("images/ui-icons_454545_256x240.png"); }
+.ui-state-active .ui-icon {background-image: url("images/ui-icons_454545_256x240.png"); }
+.ui-state-highlight .ui-icon {background-image: url("images/ui-icons_2e83ff_256x240.png"); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url("images/ui-icons_cd0a0a_256x240.png"); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; opacity: .3;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; opacity: .3;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }
\ No newline at end of file
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.tooltip.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.tooltip.css
new file mode 100644 (file)
index 0000000..88b0d02
--- /dev/null
@@ -0,0 +1,21 @@
+/*!
+ * jQuery UI Tooltip 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+.ui-tooltip {
+       padding: 8px;
+       position: absolute;
+       z-index: 9999;
+       max-width: 300px;
+       -webkit-box-shadow: 0 0 5px #aaa;
+       box-shadow: 0 0 5px #aaa;
+}
+/* Fades and background-images don't work well together in IE6, drop the image */
+* html .ui-tooltip {
+       background-image: none;
+}
+body .ui-tooltip { border-width: 2px; }
diff --git a/resources/lib/jquery/jquery.cycle.all.js b/resources/lib/jquery/jquery.cycle.all.js
deleted file mode 100644 (file)
index d57fb72..0000000
+++ /dev/null
@@ -1,1529 +0,0 @@
-/*!
- * jQuery Cycle Plugin (with Transition Definitions)
- * Examples and documentation at: http://jquery.malsup.com/cycle/
- * Copyright (c) 2007-2010 M. Alsup
- * Version: 2.9999 (13-NOV-2011)
- * Dual licensed under the MIT and GPL licenses.
- * http://jquery.malsup.com/license.html
- * Requires: jQuery v1.3.2 or later
- */
-;(function($, undefined) {
-
-var ver = '2.9999';
-
-// if $.support is not defined (pre jQuery 1.3) add what I need
-if ($.support == undefined) {
-       $.support = {
-               opacity: !($.browser.msie)
-       };
-}
-
-function debug(s) {
-       $.fn.cycle.debug && log(s);
-}              
-function log() {
-       window.console && console.log && console.log('[cycle] ' + Array.prototype.join.call(arguments,' '));
-}
-$.expr[':'].paused = function(el) {
-       return el.cyclePause;
-}
-
-
-// the options arg can be...
-//   a number  - indicates an immediate transition should occur to the given slide index
-//   a string  - 'pause', 'resume', 'toggle', 'next', 'prev', 'stop', 'destroy' or the name of a transition effect (ie, 'fade', 'zoom', etc)
-//   an object - properties to control the slideshow
-//
-// the arg2 arg can be...
-//   the name of an fx (only used in conjunction with a numeric value for 'options')
-//   the value true (only used in first arg == 'resume') and indicates
-//      that the resume should occur immediately (not wait for next timeout)
-
-$.fn.cycle = function(options, arg2) {
-       var o = { s: this.selector, c: this.context };
-
-       // in 1.3+ we can fix mistakes with the ready state
-       if (this.length === 0 && options != 'stop') {
-               if (!$.isReady && o.s) {
-                       log('DOM not ready, queuing slideshow');
-                       $(function() {
-                               $(o.s,o.c).cycle(options,arg2);
-                       });
-                       return this;
-               }
-               // is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
-               log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
-               return this;
-       }
-
-       // iterate the matched nodeset
-       return this.each(function() {
-               var opts = handleArguments(this, options, arg2);
-               if (opts === false)
-                       return;
-
-               opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink;
-               
-               // stop existing slideshow for this container (if there is one)
-               if (this.cycleTimeout)
-                       clearTimeout(this.cycleTimeout);
-               this.cycleTimeout = this.cyclePause = 0;
-
-               var $cont = $(this);
-               var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children();
-               var els = $slides.get();
-
-               var opts2 = buildOptions($cont, $slides, els, opts, o);
-               if (opts2 === false)
-                       return;
-
-               if (els.length < 2) {
-                       log('terminating; too few slides: ' + els.length);
-                       return;
-               }
-
-               var startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.backwards);
-
-               // if it's an auto slideshow, kick it off
-               if (startTime) {
-                       startTime += (opts2.delay || 0);
-                       if (startTime < 10)
-                               startTime = 10;
-                       debug('first timeout: ' + startTime);
-                       this.cycleTimeout = setTimeout(function(){go(els,opts2,0,!opts.backwards)}, startTime);
-               }
-       });
-};
-
-function triggerPause(cont, byHover, onPager) {
-       var opts = $(cont).data('cycle.opts');
-       var paused = !!cont.cyclePause;
-       if (paused && opts.paused)
-               opts.paused(cont, opts, byHover, onPager);
-       else if (!paused && opts.resumed)
-               opts.resumed(cont, opts, byHover, onPager);
-}
-
-// process the args that were passed to the plugin fn
-function handleArguments(cont, options, arg2) {
-       if (cont.cycleStop == undefined)
-               cont.cycleStop = 0;
-       if (options === undefined || options === null)
-               options = {};
-       if (options.constructor == String) {
-               switch(options) {
-               case 'destroy':
-               case 'stop':
-                       var opts = $(cont).data('cycle.opts');
-                       if (!opts)
-                               return false;
-                       cont.cycleStop++; // callbacks look for change
-                       if (cont.cycleTimeout)
-                               clearTimeout(cont.cycleTimeout);
-                       cont.cycleTimeout = 0;
-                       opts.elements && $(opts.elements).stop();
-                       $(cont).removeData('cycle.opts');
-                       if (options == 'destroy')
-                               destroy(opts);
-                       return false;
-               case 'toggle':
-                       cont.cyclePause = (cont.cyclePause === 1) ? 0 : 1;
-                       checkInstantResume(cont.cyclePause, arg2, cont);
-                       triggerPause(cont);
-                       return false;
-               case 'pause':
-                       cont.cyclePause = 1;
-                       triggerPause(cont);
-                       return false;
-               case 'resume':
-                       cont.cyclePause = 0;
-                       checkInstantResume(false, arg2, cont);
-                       triggerPause(cont);
-                       return false;
-               case 'prev':
-               case 'next':
-                       var opts = $(cont).data('cycle.opts');
-                       if (!opts) {
-                               log('options not found, "prev/next" ignored');
-                               return false;
-                       }
-                       $.fn.cycle[options](opts);
-                       return false;
-               default:
-                       options = { fx: options };
-               };
-               return options;
-       }
-       else if (options.constructor == Number) {
-               // go to the requested slide
-               var num = options;
-               options = $(cont).data('cycle.opts');
-               if (!options) {
-                       log('options not found, can not advance slide');
-                       return false;
-               }
-               if (num < 0 || num >= options.elements.length) {
-                       log('invalid slide index: ' + num);
-                       return false;
-               }
-               options.nextSlide = num;
-               if (cont.cycleTimeout) {
-                       clearTimeout(cont.cycleTimeout);
-                       cont.cycleTimeout = 0;
-               }
-               if (typeof arg2 == 'string')
-                       options.oneTimeFx = arg2;
-               go(options.elements, options, 1, num >= options.currSlide);
-               return false;
-       }
-       return options;
-       
-       function checkInstantResume(isPaused, arg2, cont) {
-               if (!isPaused && arg2 === true) { // resume now!
-                       var options = $(cont).data('cycle.opts');
-                       if (!options) {
-                               log('options not found, can not resume');
-                               return false;
-                       }
-                       if (cont.cycleTimeout) {
-                               clearTimeout(cont.cycleTimeout);
-                               cont.cycleTimeout = 0;
-                       }
-                       go(options.elements, options, 1, !options.backwards);
-               }
-       }
-};
-
-function removeFilter(el, opts) {
-       if (!$.support.opacity && opts.cleartype && el.style.filter) {
-               try { el.style.removeAttribute('filter'); }
-               catch(smother) {} // handle old opera versions
-       }
-};
-
-// unbind event handlers
-function destroy(opts) {
-       if (opts.next)
-               $(opts.next).unbind(opts.prevNextEvent);
-       if (opts.prev)
-               $(opts.prev).unbind(opts.prevNextEvent);
-       
-       if (opts.pager || opts.pagerAnchorBuilder)
-               $.each(opts.pagerAnchors || [], function() {
-                       this.unbind().remove();
-               });
-       opts.pagerAnchors = null;
-       if (opts.destroy) // callback
-               opts.destroy(opts);
-};
-
-// one-time initialization
-function buildOptions($cont, $slides, els, options, o) {
-       var startingSlideSpecified;
-       // support metadata plugin (v1.0 and v2.0)
-       var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
-       var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null;
-       if (meta)
-               opts = $.extend(opts, meta);
-       if (opts.autostop)
-               opts.countdown = opts.autostopCount || els.length;
-
-       var cont = $cont[0];
-       $cont.data('cycle.opts', opts);
-       opts.$cont = $cont;
-       opts.stopCount = cont.cycleStop;
-       opts.elements = els;
-       opts.before = opts.before ? [opts.before] : [];
-       opts.after = opts.after ? [opts.after] : [];
-
-       // push some after callbacks
-       if (!$.support.opacity && opts.cleartype)
-               opts.after.push(function() { removeFilter(this, opts); });
-       if (opts.continuous)
-               opts.after.push(function() { go(els,opts,0,!opts.backwards); });
-
-       saveOriginalOpts(opts);
-
-       // clearType corrections
-       if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
-               clearTypeFix($slides);
-
-       // container requires non-static position so that slides can be position within
-       if ($cont.css('position') == 'static')
-               $cont.css('position', 'relative');
-       if (opts.width)
-               $cont.width(opts.width);
-       if (opts.height && opts.height != 'auto')
-               $cont.height(opts.height);
-
-       if (opts.startingSlide != undefined) {
-               opts.startingSlide = parseInt(opts.startingSlide,10);
-               if (opts.startingSlide >= els.length || opts.startSlide < 0)
-                       opts.startingSlide = 0; // catch bogus input
-               else 
-                       startingSlideSpecified = true;
-       }
-       else if (opts.backwards)
-               opts.startingSlide = els.length - 1;
-       else
-               opts.startingSlide = 0;
-
-       // if random, mix up the slide array
-       if (opts.random) {
-               opts.randomMap = [];
-               for (var i = 0; i < els.length; i++)
-                       opts.randomMap.push(i);
-               opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
-               if (startingSlideSpecified) {
-                       // try to find the specified starting slide and if found set start slide index in the map accordingly
-                       for ( var cnt = 0; cnt < els.length; cnt++ ) {
-                               if ( opts.startingSlide == opts.randomMap[cnt] ) {
-                                       opts.randomIndex = cnt;
-                               }
-                       }
-               }
-               else {
-                       opts.randomIndex = 1;
-                       opts.startingSlide = opts.randomMap[1];
-               }
-       }
-       else if (opts.startingSlide >= els.length)
-               opts.startingSlide = 0; // catch bogus input
-       opts.currSlide = opts.startingSlide || 0;
-       var first = opts.startingSlide;
-
-       // set position and zIndex on all the slides
-       $slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) {
-               var z;
-               if (opts.backwards)
-                       z = first ? i <= first ? els.length + (i-first) : first-i : els.length-i;
-               else
-                       z = first ? i >= first ? els.length - (i-first) : first-i : els.length-i;
-               $(this).css('z-index', z)
-       });
-
-       // make sure first slide is visible
-       $(els[first]).css('opacity',1).show(); // opacity bit needed to handle restart use case
-       removeFilter(els[first], opts);
-
-       // stretch slides
-       if (opts.fit) {
-               if (!opts.aspect) {
-               if (opts.width)
-                   $slides.width(opts.width);
-               if (opts.height && opts.height != 'auto')
-                   $slides.height(opts.height);
-               } else {
-                       $slides.each(function(){
-                               var $slide = $(this);
-                               var ratio = (opts.aspect === true) ? $slide.width()/$slide.height() : opts.aspect;
-                               if( opts.width && $slide.width() != opts.width ) {
-                                       $slide.width( opts.width );
-                                       $slide.height( opts.width / ratio );
-                               }
-
-                               if( opts.height && $slide.height() < opts.height ) {
-                                       $slide.height( opts.height );
-                                       $slide.width( opts.height * ratio );
-                               }
-                       });
-               }
-       }
-
-       if (opts.center && ((!opts.fit) || opts.aspect)) {
-               $slides.each(function(){
-                       var $slide = $(this);
-                       $slide.css({
-                               "margin-left": opts.width ?
-                                       ((opts.width - $slide.width()) / 2) + "px" :
-                                       0,
-                               "margin-top": opts.height ?
-                                       ((opts.height - $slide.height()) / 2) + "px" :
-                                       0
-                       });
-               });
-       }
-
-       if (opts.center && !opts.fit && !opts.slideResize) {
-               $slides.each(function(){
-               var $slide = $(this);
-               $slide.css({
-                       "margin-left": opts.width ? ((opts.width - $slide.width()) / 2) + "px" : 0,
-                       "margin-top": opts.height ? ((opts.height - $slide.height()) / 2) + "px" : 0
-               });
-               });
-       }
-               
-       // stretch container
-       var reshape = opts.containerResize && !$cont.innerHeight();
-       if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9
-               var maxw = 0, maxh = 0;
-               for(var j=0; j < els.length; j++) {
-                       var $e = $(els[j]), e = $e[0], w = $e.outerWidth(), h = $e.outerHeight();
-                       if (!w) w = e.offsetWidth || e.width || $e.attr('width');
-                       if (!h) h = e.offsetHeight || e.height || $e.attr('height');
-                       maxw = w > maxw ? w : maxw;
-                       maxh = h > maxh ? h : maxh;
-               }
-               if (maxw > 0 && maxh > 0)
-                       $cont.css({width:maxw+'px',height:maxh+'px'});
-       }
-
-       var pauseFlag = false;  // https://github.com/malsup/cycle/issues/44
-       if (opts.pause)
-               $cont.hover(
-                       function(){
-                               pauseFlag = true;
-                               this.cyclePause++;
-                               triggerPause(cont, true);
-                       },
-                       function(){
-                               pauseFlag && this.cyclePause--;
-                               triggerPause(cont, true);
-                       }
-               );
-
-       if (supportMultiTransitions(opts) === false)
-               return false;
-
-       // apparently a lot of people use image slideshows without height/width attributes on the images.
-       // Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that.
-       var requeue = false;
-       options.requeueAttempts = options.requeueAttempts || 0;
-       $slides.each(function() {
-               // try to get height/width of each slide
-               var $el = $(this);
-               this.cycleH = (opts.fit && opts.height) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr('height') || 0);
-               this.cycleW = (opts.fit && opts.width) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr('width') || 0);
-
-               if ( $el.is('img') ) {
-                       // sigh..  sniffing, hacking, shrugging...  this crappy hack tries to account for what browsers do when
-                       // an image is being downloaded and the markup did not include sizing info (height/width attributes);
-                       // there seems to be some "default" sizes used in this situation
-                       var loadingIE   = ($.browser.msie  && this.cycleW == 28 && this.cycleH == 30 && !this.complete);
-                       var loadingFF   = ($.browser.mozilla && this.cycleW == 34 && this.cycleH == 19 && !this.complete);
-                       var loadingOp   = ($.browser.opera && ((this.cycleW == 42 && this.cycleH == 19) || (this.cycleW == 37 && this.cycleH == 17)) && !this.complete);
-                       var loadingOther = (this.cycleH == 0 && this.cycleW == 0 && !this.complete);
-                       // don't requeue for images that are still loading but have a valid size
-                       if (loadingIE || loadingFF || loadingOp || loadingOther) {
-                               if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) { // track retry count so we don't loop forever
-                                       log(options.requeueAttempts,' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH);
-                                       setTimeout(function() {$(o.s,o.c).cycle(options)}, opts.requeueTimeout);
-                                       requeue = true;
-                                       return false; // break each loop
-                               }
-                               else {
-                                       log('could not determine size of image: '+this.src, this.cycleW, this.cycleH);
-                               }
-                       }
-               }
-               return true;
-       });
-
-       if (requeue)
-               return false;
-
-       opts.cssBefore = opts.cssBefore || {};
-       opts.cssAfter = opts.cssAfter || {};
-       opts.cssFirst = opts.cssFirst || {};
-       opts.animIn = opts.animIn || {};
-       opts.animOut = opts.animOut || {};
-
-       $slides.not(':eq('+first+')').css(opts.cssBefore);
-       $($slides[first]).css(opts.cssFirst);
-
-       if (opts.timeout) {
-               opts.timeout = parseInt(opts.timeout,10);
-               // ensure that timeout and speed settings are sane
-               if (opts.speed.constructor == String)
-                       opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed,10);
-               if (!opts.sync)
-                       opts.speed = opts.speed / 2;
-               
-               var buffer = opts.fx == 'none' ? 0 : opts.fx == 'shuffle' ? 500 : 250;
-               while((opts.timeout - opts.speed) < buffer) // sanitize timeout
-                       opts.timeout += opts.speed;
-       }
-       if (opts.easing)
-               opts.easeIn = opts.easeOut = opts.easing;
-       if (!opts.speedIn)
-               opts.speedIn = opts.speed;
-       if (!opts.speedOut)
-               opts.speedOut = opts.speed;
-
-       opts.slideCount = els.length;
-       opts.currSlide = opts.lastSlide = first;
-       if (opts.random) {
-               if (++opts.randomIndex == els.length)
-                       opts.randomIndex = 0;
-               opts.nextSlide = opts.randomMap[opts.randomIndex];
-       }
-       else if (opts.backwards)
-               opts.nextSlide = opts.startingSlide == 0 ? (els.length-1) : opts.startingSlide-1;
-       else
-               opts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1;
-
-       // run transition init fn
-       if (!opts.multiFx) {
-               var init = $.fn.cycle.transitions[opts.fx];
-               if ($.isFunction(init))
-                       init($cont, $slides, opts);
-               else if (opts.fx != 'custom' && !opts.multiFx) {
-                       log('unknown transition: ' + opts.fx,'; slideshow terminating');
-                       return false;
-               }
-       }
-
-       // fire artificial events
-       var e0 = $slides[first];
-       if (!opts.skipInitializationCallbacks) {
-               if (opts.before.length)
-                       opts.before[0].apply(e0, [e0, e0, opts, true]);
-               if (opts.after.length)
-                       opts.after[0].apply(e0, [e0, e0, opts, true]);
-       }
-       if (opts.next)
-               $(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,1)});
-       if (opts.prev)
-               $(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,0)});
-       if (opts.pager || opts.pagerAnchorBuilder)
-               buildPager(els,opts);
-
-       exposeAddSlide(opts, els);
-
-       return opts;
-};
-
-// save off original opts so we can restore after clearing state
-function saveOriginalOpts(opts) {
-       opts.original = { before: [], after: [] };
-       opts.original.cssBefore = $.extend({}, opts.cssBefore);
-       opts.original.cssAfter  = $.extend({}, opts.cssAfter);
-       opts.original.animIn    = $.extend({}, opts.animIn);
-       opts.original.animOut   = $.extend({}, opts.animOut);
-       $.each(opts.before, function() { opts.original.before.push(this); });
-       $.each(opts.after,  function() { opts.original.after.push(this); });
-};
-
-function supportMultiTransitions(opts) {
-       var i, tx, txs = $.fn.cycle.transitions;
-       // look for multiple effects
-       if (opts.fx.indexOf(',') > 0) {
-               opts.multiFx = true;
-               opts.fxs = opts.fx.replace(/\s*/g,'').split(',');
-               // discard any bogus effect names
-               for (i=0; i < opts.fxs.length; i++) {
-                       var fx = opts.fxs[i];
-                       tx = txs[fx];
-                       if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) {
-                               log('discarding unknown transition: ',fx);
-                               opts.fxs.splice(i,1);
-                               i--;
-                       }
-               }
-               // if we have an empty list then we threw everything away!
-               if (!opts.fxs.length) {
-                       log('No valid transitions named; slideshow terminating.');
-                       return false;
-               }
-       }
-       else if (opts.fx == 'all') {  // auto-gen the list of transitions
-               opts.multiFx = true;
-               opts.fxs = [];
-               for (p in txs) {
-                       tx = txs[p];
-                       if (txs.hasOwnProperty(p) && $.isFunction(tx))
-                               opts.fxs.push(p);
-               }
-       }
-       if (opts.multiFx && opts.randomizeEffects) {
-               // munge the fxs array to make effect selection random
-               var r1 = Math.floor(Math.random() * 20) + 30;
-               for (i = 0; i < r1; i++) {
-                       var r2 = Math.floor(Math.random() * opts.fxs.length);
-                       opts.fxs.push(opts.fxs.splice(r2,1)[0]);
-               }
-               debug('randomized fx sequence: ',opts.fxs);
-       }
-       return true;
-};
-
-// provide a mechanism for adding slides after the slideshow has started
-function exposeAddSlide(opts, els) {
-       opts.addSlide = function(newSlide, prepend) {
-               var $s = $(newSlide), s = $s[0];
-               if (!opts.autostopCount)
-                       opts.countdown++;
-               els[prepend?'unshift':'push'](s);
-               if (opts.els)
-                       opts.els[prepend?'unshift':'push'](s); // shuffle needs this
-               opts.slideCount = els.length;
-
-               // add the slide to the random map and resort
-               if (opts.random) {
-                       opts.randomMap.push(opts.slideCount-1);
-                       opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
-               }
-
-               $s.css('position','absolute');
-               $s[prepend?'prependTo':'appendTo'](opts.$cont);
-
-               if (prepend) {
-                       opts.currSlide++;
-                       opts.nextSlide++;
-               }
-
-               if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
-                       clearTypeFix($s);
-
-               if (opts.fit && opts.width)
-                       $s.width(opts.width);
-               if (opts.fit && opts.height && opts.height != 'auto')
-                       $s.height(opts.height);
-               s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height();
-               s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width();
-
-               $s.css(opts.cssBefore);
-
-               if (opts.pager || opts.pagerAnchorBuilder)
-                       $.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts);
-
-               if ($.isFunction(opts.onAddSlide))
-                       opts.onAddSlide($s);
-               else
-                       $s.hide(); // default behavior
-       };
-}
-
-// reset internal state; we do this on every pass in order to support multiple effects
-$.fn.cycle.resetState = function(opts, fx) {
-       fx = fx || opts.fx;
-       opts.before = []; opts.after = [];
-       opts.cssBefore = $.extend({}, opts.original.cssBefore);
-       opts.cssAfter  = $.extend({}, opts.original.cssAfter);
-       opts.animIn     = $.extend({}, opts.original.animIn);
-       opts.animOut   = $.extend({}, opts.original.animOut);
-       opts.fxFn = null;
-       $.each(opts.original.before, function() { opts.before.push(this); });
-       $.each(opts.original.after,  function() { opts.after.push(this); });
-
-       // re-init
-       var init = $.fn.cycle.transitions[fx];
-       if ($.isFunction(init))
-               init(opts.$cont, $(opts.elements), opts);
-};
-
-// this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt
-function go(els, opts, manual, fwd) {
-       // opts.busy is true if we're in the middle of an animation
-       if (manual && opts.busy && opts.manualTrump) {
-               // let manual transitions requests trump active ones
-               debug('manualTrump in go(), stopping active transition');
-               $(els).stop(true,true);
-               opts.busy = 0;
-       }
-       // don't begin another timeout-based transition if there is one active
-       if (opts.busy) {
-               debug('transition active, ignoring new tx request');
-               return;
-       }
-
-       var p = opts.$cont[0], curr = els[opts.currSlide], next = els[opts.nextSlide];
-
-       // stop cycling if we have an outstanding stop request
-       if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual)
-               return;
-
-       // check to see if we should stop cycling based on autostop options
-       if (!manual && !p.cyclePause && !opts.bounce &&
-               ((opts.autostop && (--opts.countdown <= 0)) ||
-               (opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) {
-               if (opts.end)
-                       opts.end(opts);
-               return;
-       }
-
-       // if slideshow is paused, only transition on a manual trigger
-       var changed = false;
-       if ((manual || !p.cyclePause) && (opts.nextSlide != opts.currSlide)) {
-               changed = true;
-               var fx = opts.fx;
-               // keep trying to get the slide size if we don't have it yet
-               curr.cycleH = curr.cycleH || $(curr).height();
-               curr.cycleW = curr.cycleW || $(curr).width();
-               next.cycleH = next.cycleH || $(next).height();
-               next.cycleW = next.cycleW || $(next).width();
-
-               // support multiple transition types
-               if (opts.multiFx) {
-                       if (fwd && (opts.lastFx == undefined || ++opts.lastFx >= opts.fxs.length))
-                               opts.lastFx = 0;
-                       else if (!fwd && (opts.lastFx == undefined || --opts.lastFx < 0))
-                               opts.lastFx = opts.fxs.length - 1;
-                       fx = opts.fxs[opts.lastFx];
-               }
-
-               // one-time fx overrides apply to:  $('div').cycle(3,'zoom');
-               if (opts.oneTimeFx) {
-                       fx = opts.oneTimeFx;
-                       opts.oneTimeFx = null;
-               }
-
-               $.fn.cycle.resetState(opts, fx);
-
-               // run the before callbacks
-               if (opts.before.length)
-                       $.each(opts.before, function(i,o) {
-                               if (p.cycleStop != opts.stopCount) return;
-                               o.apply(next, [curr, next, opts, fwd]);
-                       });
-
-               // stage the after callacks
-               var after = function() {
-                       opts.busy = 0;
-                       $.each(opts.after, function(i,o) {
-                               if (p.cycleStop != opts.stopCount) return;
-                               o.apply(next, [curr, next, opts, fwd]);
-                       });
-                       if (!p.cycleStop) {
-                               // queue next transition
-                               queueNext();
-                       }
-               };
-
-               debug('tx firing('+fx+'); currSlide: ' + opts.currSlide + '; nextSlide: ' + opts.nextSlide);
-               
-               // get ready to perform the transition
-               opts.busy = 1;
-               if (opts.fxFn) // fx function provided?
-                       opts.fxFn(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
-               else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ?
-                       $.fn.cycle[opts.fx](curr, next, opts, after, fwd, manual && opts.fastOnEvent);
-               else
-                       $.fn.cycle.custom(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
-       }
-       else {
-               queueNext();
-       }
-
-       if (changed || opts.nextSlide == opts.currSlide) {
-               // calculate the next slide
-               opts.lastSlide = opts.currSlide;
-               if (opts.random) {
-                       opts.currSlide = opts.nextSlide;
-                       if (++opts.randomIndex == els.length) {
-                               opts.randomIndex = 0;
-                               opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
-                       }
-                       opts.nextSlide = opts.randomMap[opts.randomIndex];
-                       if (opts.nextSlide == opts.currSlide)
-                               opts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1;
-               }
-               else if (opts.backwards) {
-                       var roll = (opts.nextSlide - 1) < 0;
-                       if (roll && opts.bounce) {
-                               opts.backwards = !opts.backwards;
-                               opts.nextSlide = 1;
-                               opts.currSlide = 0;
-                       }
-                       else {
-                               opts.nextSlide = roll ? (els.length-1) : opts.nextSlide-1;
-                               opts.currSlide = roll ? 0 : opts.nextSlide+1;
-                       }
-               }
-               else { // sequence
-                       var roll = (opts.nextSlide + 1) == els.length;
-                       if (roll && opts.bounce) {
-                               opts.backwards = !opts.backwards;
-                               opts.nextSlide = els.length-2;
-                               opts.currSlide = els.length-1;
-                       }
-                       else {
-                               opts.nextSlide = roll ? 0 : opts.nextSlide+1;
-                               opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
-                       }
-               }
-       }
-       if (changed && opts.pager)
-               opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass);
-       
-       function queueNext() {
-               // stage the next transition
-               var ms = 0, timeout = opts.timeout;
-               if (opts.timeout && !opts.continuous) {
-                       ms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd);
-         if (opts.fx == 'shuffle')
-            ms -= opts.speedOut;
-      }
-               else if (opts.continuous && p.cyclePause) // continuous shows work off an after callback, not this timer logic
-                       ms = 10;
-               if (ms > 0)
-                       p.cycleTimeout = setTimeout(function(){ go(els, opts, 0, !opts.backwards) }, ms);
-       }
-};
-
-// invoked after transition
-$.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) {
-   $(pager).each(function() {
-       $(this).children().removeClass(clsName).eq(currSlide).addClass(clsName);
-   });
-};
-
-// calculate timeout value for current transition
-function getTimeout(curr, next, opts, fwd) {
-       if (opts.timeoutFn) {
-               // call user provided calc fn
-               var t = opts.timeoutFn.call(curr,curr,next,opts,fwd);
-               while (opts.fx != 'none' && (t - opts.speed) < 250) // sanitize timeout
-                       t += opts.speed;
-               debug('calculated timeout: ' + t + '; speed: ' + opts.speed);
-               if (t !== false)
-                       return t;
-       }
-       return opts.timeout;
-};
-
-// expose next/prev function, caller must pass in state
-$.fn.cycle.next = function(opts) { advance(opts,1); };
-$.fn.cycle.prev = function(opts) { advance(opts,0);};
-
-// advance slide forward or back
-function advance(opts, moveForward) {
-       var val = moveForward ? 1 : -1;
-       var els = opts.elements;
-       var p = opts.$cont[0], timeout = p.cycleTimeout;
-       if (timeout) {
-               clearTimeout(timeout);
-               p.cycleTimeout = 0;
-       }
-       if (opts.random && val < 0) {
-               // move back to the previously display slide
-               opts.randomIndex--;
-               if (--opts.randomIndex == -2)
-                       opts.randomIndex = els.length-2;
-               else if (opts.randomIndex == -1)
-                       opts.randomIndex = els.length-1;
-               opts.nextSlide = opts.randomMap[opts.randomIndex];
-       }
-       else if (opts.random) {
-               opts.nextSlide = opts.randomMap[opts.randomIndex];
-       }
-       else {
-               opts.nextSlide = opts.currSlide + val;
-               if (opts.nextSlide < 0) {
-                       if (opts.nowrap) return false;
-                       opts.nextSlide = els.length - 1;
-               }
-               else if (opts.nextSlide >= els.length) {
-                       if (opts.nowrap) return false;
-                       opts.nextSlide = 0;
-               }
-       }
-
-       var cb = opts.onPrevNextEvent || opts.prevNextClick; // prevNextClick is deprecated
-       if ($.isFunction(cb))
-               cb(val > 0, opts.nextSlide, els[opts.nextSlide]);
-       go(els, opts, 1, moveForward);
-       return false;
-};
-
-function buildPager(els, opts) {
-       var $p = $(opts.pager);
-       $.each(els, function(i,o) {
-               $.fn.cycle.createPagerAnchor(i,o,$p,els,opts);
-       });
-       opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass);
-};
-
-$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {
-       var a;
-       if ($.isFunction(opts.pagerAnchorBuilder)) {
-               a = opts.pagerAnchorBuilder(i,el);
-               debug('pagerAnchorBuilder('+i+', el) returned: ' + a);
-       }
-       else
-               a = '<a href="#">'+(i+1)+'</a>';
-               
-       if (!a)
-               return;
-       var $a = $(a);
-       // don't reparent if anchor is in the dom
-       if ($a.parents('body').length === 0) {
-               var arr = [];
-               if ($p.length > 1) {
-                       $p.each(function() {
-                               var $clone = $a.clone(true);
-                               $(this).append($clone);
-                               arr.push($clone[0]);
-                       });
-                       $a = $(arr);
-               }
-               else {
-                       $a.appendTo($p);
-               }
-       }
-
-       opts.pagerAnchors =  opts.pagerAnchors || [];
-       opts.pagerAnchors.push($a);
-       
-       var pagerFn = function(e) {
-               e.preventDefault();
-               opts.nextSlide = i;
-               var p = opts.$cont[0], timeout = p.cycleTimeout;
-               if (timeout) {
-                       clearTimeout(timeout);
-                       p.cycleTimeout = 0;
-               }
-               var cb = opts.onPagerEvent || opts.pagerClick; // pagerClick is deprecated
-               if ($.isFunction(cb))
-                       cb(opts.nextSlide, els[opts.nextSlide]);
-               go(els,opts,1,opts.currSlide < i); // trigger the trans
-//             return false; // <== allow bubble
-       }
-       
-       if ( /mouseenter|mouseover/i.test(opts.pagerEvent) ) {
-               $a.hover(pagerFn, function(){/* no-op */} );
-       }
-       else {
-               $a.bind(opts.pagerEvent, pagerFn);
-       }
-       
-       if ( ! /^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble)
-               $a.bind('click.cycle', function(){return false;}); // suppress click
-       
-       var cont = opts.$cont[0];
-       var pauseFlag = false; // https://github.com/malsup/cycle/issues/44
-       if (opts.pauseOnPagerHover) {
-               $a.hover(
-                       function() { 
-                               pauseFlag = true;
-                               cont.cyclePause++; 
-                               triggerPause(cont,true,true);
-                       }, function() { 
-                               pauseFlag && cont.cyclePause--; 
-                               triggerPause(cont,true,true);
-                       } 
-               );
-       }
-};
-
-// helper fn to calculate the number of slides between the current and the next
-$.fn.cycle.hopsFromLast = function(opts, fwd) {
-       var hops, l = opts.lastSlide, c = opts.currSlide;
-       if (fwd)
-               hops = c > l ? c - l : opts.slideCount - l;
-       else
-               hops = c < l ? l - c : l + opts.slideCount - c;
-       return hops;
-};
-
-// fix clearType problems in ie6 by setting an explicit bg color
-// (otherwise text slides look horrible during a fade transition)
-function clearTypeFix($slides) {
-       debug('applying clearType background-color hack');
-       function hex(s) {
-               s = parseInt(s,10).toString(16);
-               return s.length < 2 ? '0'+s : s;
-       };
-       function getBg(e) {
-               for ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) {
-                       var v = $.css(e,'background-color');
-                       if (v && v.indexOf('rgb') >= 0 ) {
-                               var rgb = v.match(/\d+/g);
-                               return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
-                       }
-                       if (v && v != 'transparent')
-                               return v;
-               }
-               return '#ffffff';
-       };
-       $slides.each(function() { $(this).css('background-color', getBg(this)); });
-};
-
-// reset common props before the next transition
-$.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) {
-       $(opts.elements).not(curr).hide();
-       if (typeof opts.cssBefore.opacity == 'undefined')
-               opts.cssBefore.opacity = 1;
-       opts.cssBefore.display = 'block';
-       if (opts.slideResize && w !== false && next.cycleW > 0)
-               opts.cssBefore.width = next.cycleW;
-       if (opts.slideResize && h !== false && next.cycleH > 0)
-               opts.cssBefore.height = next.cycleH;
-       opts.cssAfter = opts.cssAfter || {};
-       opts.cssAfter.display = 'none';
-       $(curr).css('zIndex',opts.slideCount + (rev === true ? 1 : 0));
-       $(next).css('zIndex',opts.slideCount + (rev === true ? 0 : 1));
-};
-
-// the actual fn for effecting a transition
-$.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) {
-       var $l = $(curr), $n = $(next);
-       var speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut;
-       $n.css(opts.cssBefore);
-       if (speedOverride) {
-               if (typeof speedOverride == 'number')
-                       speedIn = speedOut = speedOverride;
-               else
-                       speedIn = speedOut = 1;
-               easeIn = easeOut = null;
-       }
-       var fn = function() {
-               $n.animate(opts.animIn, speedIn, easeIn, function() {
-                       cb();
-               });
-       };
-       $l.animate(opts.animOut, speedOut, easeOut, function() {
-               $l.css(opts.cssAfter);
-               if (!opts.sync) 
-                       fn();
-       });
-       if (opts.sync) fn();
-};
-
-// transition definitions - only fade is defined here, transition pack defines the rest
-$.fn.cycle.transitions = {
-       fade: function($cont, $slides, opts) {
-               $slides.not(':eq('+opts.currSlide+')').css('opacity',0);
-               opts.before.push(function(curr,next,opts) {
-                       $.fn.cycle.commonReset(curr,next,opts);
-                       opts.cssBefore.opacity = 0;
-               });
-               opts.animIn        = { opacity: 1 };
-               opts.animOut   = { opacity: 0 };
-               opts.cssBefore = { top: 0, left: 0 };
-       }
-};
-
-$.fn.cycle.ver = function() { return ver; };
-
-// override these globally if you like (they are all optional)
-$.fn.cycle.defaults = {
-       activePagerClass: 'activeSlide', // class name used for the active pager link
-       after:             null,  // transition callback (scope set to element that was shown):  function(currSlideElement, nextSlideElement, options, forwardFlag)
-       allowPagerClickBubble: false, // allows or prevents click event on pager anchors from bubbling
-       animIn:            null,  // properties that define how the slide animates in
-       animOut:           null,  // properties that define how the slide animates out
-       aspect:            false,  // preserve aspect ratio during fit resizing, cropping if necessary (must be used with fit option)
-       autostop:          0,     // true to end slideshow after X transitions (where X == slide count)
-       autostopCount: 0,         // number of transitions (optionally used with autostop to define X)
-       backwards:     false, // true to start slideshow at last slide and move backwards through the stack
-       before:            null,  // transition callback (scope set to element to be shown):     function(currSlideElement, nextSlideElement, options, forwardFlag)
-       center:            null,  // set to true to have cycle add top/left margin to each slide (use with width and height options)
-       cleartype:         !$.support.opacity,  // true if clearType corrections should be applied (for IE)
-       cleartypeNoBg: false, // set to true to disable extra cleartype fixing (leave false to force background color setting on slides)
-       containerResize: 1,       // resize container to fit largest slide
-       continuous:        0,     // true to start next transition immediately after current one completes
-       cssAfter:          null,  // properties that defined the state of the slide after transitioning out
-       cssBefore:         null,  // properties that define the initial state of the slide before transitioning in
-       delay:             0,     // additional delay (in ms) for first transition (hint: can be negative)
-       easeIn:            null,  // easing for "in" transition
-       easeOut:           null,  // easing for "out" transition
-       easing:            null,  // easing method for both in and out transitions
-       end:               null,  // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)
-       fastOnEvent:   0,         // force fast transitions when triggered manually (via pager or prev/next); value == time in ms
-       fit:               0,     // force slides to fit container
-       fx:                       'fade', // name of transition effect (or comma separated names, ex: 'fade,scrollUp,shuffle')
-       fxFn:              null,  // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)
-       height:           'auto', // container height (if the 'fit' option is true, the slides will be set to this height as well)
-       manualTrump:   true,  // causes manual transition to stop an active transition instead of being ignored
-       metaAttr:     'cycle',// data- attribute that holds the option data for the slideshow
-       next:              null,  // element, jQuery object, or jQuery selector string for the element to use as event trigger for next slide
-       nowrap:            0,     // true to prevent slideshow from wrapping
-       onPagerEvent:  null,  // callback fn for pager events: function(zeroBasedSlideIndex, slideElement)
-       onPrevNextEvent: null,// callback fn for prev/next events: function(isNext, zeroBasedSlideIndex, slideElement)
-       pager:             null,  // element, jQuery object, or jQuery selector string for the element to use as pager container
-       pagerAnchorBuilder: null, // callback fn for building anchor links:  function(index, DOMelement)
-       pagerEvent:       'click.cycle', // name of event which drives the pager navigation
-       pause:             0,     // true to enable "pause on hover"
-       pauseOnPagerHover: 0, // true to pause when hovering over pager link
-       prev:              null,  // element, jQuery object, or jQuery selector string for the element to use as event trigger for previous slide
-       prevNextEvent:'click.cycle',// event which drives the manual transition to the previous or next slide
-       random:            0,     // true for random, false for sequence (not applicable to shuffle fx)
-       randomizeEffects: 1,  // valid when multiple effects are used; true to make the effect sequence random
-       requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded
-       requeueTimeout: 250,  // ms delay for requeue
-       rev:               0,     // causes animations to transition in reverse (for effects that support it such as scrollHorz/scrollVert/shuffle)
-       shuffle:           null,  // coords for shuffle animation, ex: { top:15, left: 200 }
-       skipInitializationCallbacks: false, // set to true to disable the first before/after callback that occurs prior to any transition
-       slideExpr:         null,  // expression for selecting slides (if something other than all children is required)
-       slideResize:   1,     // force slide width/height to fixed size before every transition
-       speed:             1000,  // speed of the transition (any valid fx speed value)
-       speedIn:           null,  // speed of the 'in' transition
-       speedOut:          null,  // speed of the 'out' transition
-       startingSlide: undefined,         // zero-based index of the first slide to be displayed
-       sync:              1,     // true if in/out transitions should occur simultaneously
-       timeout:           4000,  // milliseconds between slide transitions (0 to disable auto advance)
-       timeoutFn:     null,  // callback for determining per-slide timeout value:  function(currSlideElement, nextSlideElement, options, forwardFlag)
-       updateActivePagerLink: null, // callback fn invoked to update the active pager link (adds/removes activePagerClass style)
-       width:         null   // container width (if the 'fit' option is true, the slides will be set to this width as well)
-};
-
-})(jQuery);
-
-
-/*!
- * jQuery Cycle Plugin Transition Definitions
- * This script is a plugin for the jQuery Cycle Plugin
- * Examples and documentation at: http://malsup.com/jquery/cycle/
- * Copyright (c) 2007-2010 M. Alsup
- * Version:     2.73
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
-(function($) {
-
-//
-// These functions define slide initialization and properties for the named
-// transitions. To save file size feel free to remove any of these that you
-// don't need.
-//
-$.fn.cycle.transitions.none = function($cont, $slides, opts) {
-       opts.fxFn = function(curr,next,opts,after){
-               $(next).show();
-               $(curr).hide();
-               after();
-       };
-};
-
-// not a cross-fade, fadeout only fades out the top slide
-$.fn.cycle.transitions.fadeout = function($cont, $slides, opts) {
-       $slides.not(':eq('+opts.currSlide+')').css({ display: 'block', 'opacity': 1 });
-       opts.before.push(function(curr,next,opts,w,h,rev) {
-               $(curr).css('zIndex',opts.slideCount + (!rev === true ? 1 : 0));
-               $(next).css('zIndex',opts.slideCount + (!rev === true ? 0 : 1));
-       });
-       opts.animIn.opacity = 1;
-       opts.animOut.opacity = 0;
-       opts.cssBefore.opacity = 1;
-       opts.cssBefore.display = 'block';
-       opts.cssAfter.zIndex = 0;
-};
-
-// scrollUp/Down/Left/Right
-$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) {
-       $cont.css('overflow','hidden');
-       opts.before.push($.fn.cycle.commonReset);
-       var h = $cont.height();
-       opts.cssBefore.top = h;
-       opts.cssBefore.left = 0;
-       opts.cssFirst.top = 0;
-       opts.animIn.top = 0;
-       opts.animOut.top = -h;
-};
-$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) {
-       $cont.css('overflow','hidden');
-       opts.before.push($.fn.cycle.commonReset);
-       var h = $cont.height();
-       opts.cssFirst.top = 0;
-       opts.cssBefore.top = -h;
-       opts.cssBefore.left = 0;
-       opts.animIn.top = 0;
-       opts.animOut.top = h;
-};
-$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) {
-       $cont.css('overflow','hidden');
-       opts.before.push($.fn.cycle.commonReset);
-       var w = $cont.width();
-       opts.cssFirst.left = 0;
-       opts.cssBefore.left = w;
-       opts.cssBefore.top = 0;
-       opts.animIn.left = 0;
-       opts.animOut.left = 0-w;
-};
-$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) {
-       $cont.css('overflow','hidden');
-       opts.before.push($.fn.cycle.commonReset);
-       var w = $cont.width();
-       opts.cssFirst.left = 0;
-       opts.cssBefore.left = -w;
-       opts.cssBefore.top = 0;
-       opts.animIn.left = 0;
-       opts.animOut.left = w;
-};
-$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) {
-       $cont.css('overflow','hidden').width();
-       opts.before.push(function(curr, next, opts, fwd) {
-               if (opts.rev)
-                       fwd = !fwd;
-               $.fn.cycle.commonReset(curr,next,opts);
-               opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW);
-               opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW;
-       });
-       opts.cssFirst.left = 0;
-       opts.cssBefore.top = 0;
-       opts.animIn.left = 0;
-       opts.animOut.top = 0;
-};
-$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) {
-       $cont.css('overflow','hidden');
-       opts.before.push(function(curr, next, opts, fwd) {
-               if (opts.rev)
-                       fwd = !fwd;
-               $.fn.cycle.commonReset(curr,next,opts);
-               opts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1);
-               opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH;
-       });
-       opts.cssFirst.top = 0;
-       opts.cssBefore.left = 0;
-       opts.animIn.top = 0;
-       opts.animOut.left = 0;
-};
-
-// slideX/slideY
-$.fn.cycle.transitions.slideX = function($cont, $slides, opts) {
-       opts.before.push(function(curr, next, opts) {
-               $(opts.elements).not(curr).hide();
-               $.fn.cycle.commonReset(curr,next,opts,false,true);
-               opts.animIn.width = next.cycleW;
-       });
-       opts.cssBefore.left = 0;
-       opts.cssBefore.top = 0;
-       opts.cssBefore.width = 0;
-       opts.animIn.width = 'show';
-       opts.animOut.width = 0;
-};
-$.fn.cycle.transitions.slideY = function($cont, $slides, opts) {
-       opts.before.push(function(curr, next, opts) {
-               $(opts.elements).not(curr).hide();
-               $.fn.cycle.commonReset(curr,next,opts,true,false);
-               opts.animIn.height = next.cycleH;
-       });
-       opts.cssBefore.left = 0;
-       opts.cssBefore.top = 0;
-       opts.cssBefore.height = 0;
-       opts.animIn.height = 'show';
-       opts.animOut.height = 0;
-};
-
-// shuffle
-$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) {
-       var i, w = $cont.css('overflow', 'visible').width();
-       $slides.css({left: 0, top: 0});
-       opts.before.push(function(curr,next,opts) {
-               $.fn.cycle.commonReset(curr,next,opts,true,true,true);
-       });
-       // only adjust speed once!
-       if (!opts.speedAdjusted) {
-               opts.speed = opts.speed / 2; // shuffle has 2 transitions
-               opts.speedAdjusted = true;
-       }
-       opts.random = 0;
-       opts.shuffle = opts.shuffle || {left:-w, top:15};
-       opts.els = [];
-       for (i=0; i < $slides.length; i++)
-               opts.els.push($slides[i]);
-
-       for (i=0; i < opts.currSlide; i++)
-               opts.els.push(opts.els.shift());
-
-       // custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!)
-       opts.fxFn = function(curr, next, opts, cb, fwd) {
-               if (opts.rev)
-                       fwd = !fwd;
-               var $el = fwd ? $(curr) : $(next);
-               $(next).css(opts.cssBefore);
-               var count = opts.slideCount;
-               $el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() {
-                       var hops = $.fn.cycle.hopsFromLast(opts, fwd);
-                       for (var k=0; k < hops; k++)
-                               fwd ? opts.els.push(opts.els.shift()) : opts.els.unshift(opts.els.pop());
-                       if (fwd) {
-                               for (var i=0, len=opts.els.length; i < len; i++)
-                                       $(opts.els[i]).css('z-index', len-i+count);
-                       }
-                       else {
-                               var z = $(curr).css('z-index');
-                               $el.css('z-index', parseInt(z,10)+1+count);
-                       }
-                       $el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() {
-                               $(fwd ? this : curr).hide();
-                               if (cb) cb();
-                       });
-               });
-       };
-       $.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
-};
-
-// turnUp/Down/Left/Right
-$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) {
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts,true,false);
-               opts.cssBefore.top = next.cycleH;
-               opts.animIn.height = next.cycleH;
-               opts.animOut.width = next.cycleW;
-       });
-       opts.cssFirst.top = 0;
-       opts.cssBefore.left = 0;
-       opts.cssBefore.height = 0;
-       opts.animIn.top = 0;
-       opts.animOut.height = 0;
-};
-$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) {
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts,true,false);
-               opts.animIn.height = next.cycleH;
-               opts.animOut.top   = curr.cycleH;
-       });
-       opts.cssFirst.top = 0;
-       opts.cssBefore.left = 0;
-       opts.cssBefore.top = 0;
-       opts.cssBefore.height = 0;
-       opts.animOut.height = 0;
-};
-$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) {
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts,false,true);
-               opts.cssBefore.left = next.cycleW;
-               opts.animIn.width = next.cycleW;
-       });
-       opts.cssBefore.top = 0;
-       opts.cssBefore.width = 0;
-       opts.animIn.left = 0;
-       opts.animOut.width = 0;
-};
-$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) {
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts,false,true);
-               opts.animIn.width = next.cycleW;
-               opts.animOut.left = curr.cycleW;
-       });
-       $.extend(opts.cssBefore, { top: 0, left: 0, width: 0 });
-       opts.animIn.left = 0;
-       opts.animOut.width = 0;
-};
-
-// zoom
-$.fn.cycle.transitions.zoom = function($cont, $slides, opts) {
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts,false,false,true);
-               opts.cssBefore.top = next.cycleH/2;
-               opts.cssBefore.left = next.cycleW/2;
-               $.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
-               $.extend(opts.animOut, { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 });
-       });
-       opts.cssFirst.top = 0;
-       opts.cssFirst.left = 0;
-       opts.cssBefore.width = 0;
-       opts.cssBefore.height = 0;
-};
-
-// fadeZoom
-$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) {
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts,false,false);
-               opts.cssBefore.left = next.cycleW/2;
-               opts.cssBefore.top = next.cycleH/2;
-               $.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
-       });
-       opts.cssBefore.width = 0;
-       opts.cssBefore.height = 0;
-       opts.animOut.opacity = 0;
-};
-
-// blindX
-$.fn.cycle.transitions.blindX = function($cont, $slides, opts) {
-       var w = $cont.css('overflow','hidden').width();
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts);
-               opts.animIn.width = next.cycleW;
-               opts.animOut.left   = curr.cycleW;
-       });
-       opts.cssBefore.left = w;
-       opts.cssBefore.top = 0;
-       opts.animIn.left = 0;
-       opts.animOut.left = w;
-};
-// blindY
-$.fn.cycle.transitions.blindY = function($cont, $slides, opts) {
-       var h = $cont.css('overflow','hidden').height();
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts);
-               opts.animIn.height = next.cycleH;
-               opts.animOut.top   = curr.cycleH;
-       });
-       opts.cssBefore.top = h;
-       opts.cssBefore.left = 0;
-       opts.animIn.top = 0;
-       opts.animOut.top = h;
-};
-// blindZ
-$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) {
-       var h = $cont.css('overflow','hidden').height();
-       var w = $cont.width();
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts);
-               opts.animIn.height = next.cycleH;
-               opts.animOut.top   = curr.cycleH;
-       });
-       opts.cssBefore.top = h;
-       opts.cssBefore.left = w;
-       opts.animIn.top = 0;
-       opts.animIn.left = 0;
-       opts.animOut.top = h;
-       opts.animOut.left = w;
-};
-
-// growX - grow horizontally from centered 0 width
-$.fn.cycle.transitions.growX = function($cont, $slides, opts) {
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts,false,true);
-               opts.cssBefore.left = this.cycleW/2;
-               opts.animIn.left = 0;
-               opts.animIn.width = this.cycleW;
-               opts.animOut.left = 0;
-       });
-       opts.cssBefore.top = 0;
-       opts.cssBefore.width = 0;
-};
-// growY - grow vertically from centered 0 height
-$.fn.cycle.transitions.growY = function($cont, $slides, opts) {
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts,true,false);
-               opts.cssBefore.top = this.cycleH/2;
-               opts.animIn.top = 0;
-               opts.animIn.height = this.cycleH;
-               opts.animOut.top = 0;
-       });
-       opts.cssBefore.height = 0;
-       opts.cssBefore.left = 0;
-};
-
-// curtainX - squeeze in both edges horizontally
-$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) {
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts,false,true,true);
-               opts.cssBefore.left = next.cycleW/2;
-               opts.animIn.left = 0;
-               opts.animIn.width = this.cycleW;
-               opts.animOut.left = curr.cycleW/2;
-               opts.animOut.width = 0;
-       });
-       opts.cssBefore.top = 0;
-       opts.cssBefore.width = 0;
-};
-// curtainY - squeeze in both edges vertically
-$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) {
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts,true,false,true);
-               opts.cssBefore.top = next.cycleH/2;
-               opts.animIn.top = 0;
-               opts.animIn.height = next.cycleH;
-               opts.animOut.top = curr.cycleH/2;
-               opts.animOut.height = 0;
-       });
-       opts.cssBefore.height = 0;
-       opts.cssBefore.left = 0;
-};
-
-// cover - curr slide covered by next slide
-$.fn.cycle.transitions.cover = function($cont, $slides, opts) {
-       var d = opts.direction || 'left';
-       var w = $cont.css('overflow','hidden').width();
-       var h = $cont.height();
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts);
-               if (d == 'right')
-                       opts.cssBefore.left = -w;
-               else if (d == 'up')
-                       opts.cssBefore.top = h;
-               else if (d == 'down')
-                       opts.cssBefore.top = -h;
-               else
-                       opts.cssBefore.left = w;
-       });
-       opts.animIn.left = 0;
-       opts.animIn.top = 0;
-       opts.cssBefore.top = 0;
-       opts.cssBefore.left = 0;
-};
-
-// uncover - curr slide moves off next slide
-$.fn.cycle.transitions.uncover = function($cont, $slides, opts) {
-       var d = opts.direction || 'left';
-       var w = $cont.css('overflow','hidden').width();
-       var h = $cont.height();
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts,true,true,true);
-               if (d == 'right')
-                       opts.animOut.left = w;
-               else if (d == 'up')
-                       opts.animOut.top = -h;
-               else if (d == 'down')
-                       opts.animOut.top = h;
-               else
-                       opts.animOut.left = -w;
-       });
-       opts.animIn.left = 0;
-       opts.animIn.top = 0;
-       opts.cssBefore.top = 0;
-       opts.cssBefore.left = 0;
-};
-
-// toss - move top slide and fade away
-$.fn.cycle.transitions.toss = function($cont, $slides, opts) {
-       var w = $cont.css('overflow','visible').width();
-       var h = $cont.height();
-       opts.before.push(function(curr, next, opts) {
-               $.fn.cycle.commonReset(curr,next,opts,true,true,true);
-               // provide default toss settings if animOut not provided
-               if (!opts.animOut.left && !opts.animOut.top)
-                       $.extend(opts.animOut, { left: w*2, top: -h/2, opacity: 0 });
-               else
-                       opts.animOut.opacity = 0;
-       });
-       opts.cssBefore.left = 0;
-       opts.cssBefore.top = 0;
-       opts.animIn.left = 0;
-};
-
-// wipe - clip animation
-$.fn.cycle.transitions.wipe = function($cont, $slides, opts) {
-       var w = $cont.css('overflow','hidden').width();
-       var h = $cont.height();
-       opts.cssBefore = opts.cssBefore || {};
-       var clip;
-       if (opts.clip) {
-               if (/l2r/.test(opts.clip))
-                       clip = 'rect(0px 0px '+h+'px 0px)';
-               else if (/r2l/.test(opts.clip))
-                       clip = 'rect(0px '+w+'px '+h+'px '+w+'px)';
-               else if (/t2b/.test(opts.clip))
-                       clip = 'rect(0px '+w+'px 0px 0px)';
-               else if (/b2t/.test(opts.clip))
-                       clip = 'rect('+h+'px '+w+'px '+h+'px 0px)';
-               else if (/zoom/.test(opts.clip)) {
-                       var top = parseInt(h/2,10);
-                       var left = parseInt(w/2,10);
-                       clip = 'rect('+top+'px '+left+'px '+top+'px '+left+'px)';
-               }
-       }
-
-       opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)';
-
-       var d = opts.cssBefore.clip.match(/(\d+)/g);
-       var t = parseInt(d[0],10), r = parseInt(d[1],10), b = parseInt(d[2],10), l = parseInt(d[3],10);
-
-       opts.before.push(function(curr, next, opts) {
-               if (curr == next) return;
-               var $curr = $(curr), $next = $(next);
-               $.fn.cycle.commonReset(curr,next,opts,true,true,false);
-               opts.cssAfter.display = 'block';
-
-               var step = 1, count = parseInt((opts.speedIn / 13),10) - 1;
-               (function f() {
-                       var tt = t ? t - parseInt(step * (t/count),10) : 0;
-                       var ll = l ? l - parseInt(step * (l/count),10) : 0;
-                       var bb = b < h ? b + parseInt(step * ((h-b)/count || 1),10) : h;
-                       var rr = r < w ? r + parseInt(step * ((w-r)/count || 1),10) : w;
-                       $next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' });
-                       (step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none');
-               })();
-       });
-       $.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
-       opts.animIn        = { left: 0 };
-       opts.animOut   = { left: 0 };
-};
-
-})(jQuery);
index 324833c..902a5cc 100644 (file)
 
         // set next check
         if(nextExpire != Infinity){
-            _ttl_timeout = setTimeout(_handleTTL, nextExpire - curtime);
+            _ttl_timeout = setTimeout(Math.min(_handleTTL, nextExpire - curtime, 0x7FFFFFFF));
         }
 
         // save changes
          * @param {Mixed} value Value to set. This can be any value that is JSON
          *              compatible (Numbers, Strings, Objects etc.).
          * @param {Object} [options] - possible options to use
-         * @param {Number} [options.TTL] - optional TTL value
+         * @param {Number} [options.TTL] - optional TTL value, in milliseconds
          * @return {Mixed} the used value
          */
         set: function(key, value, options){
index 25b6c81..5b18236 100644 (file)
@@ -2,6 +2,8 @@
  * jQuery Migrate - v1.2.1 - 2013-05-08
  * https://github.com/jquery/jquery-migrate
  * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT
+ *
+ * Patched for MediaWiki to add mw.track calls. --Krinkle 2014-04-14
  */
 (function( jQuery, window, undefined ) {
 // See http://bugs.jquery.com/ticket/13335
@@ -32,8 +34,36 @@ jQuery.migrateReset = function() {
        jQuery.migrateWarnings.length = 0;
 };
 
-function migrateWarn( msg) {
+function migrateWarn( msg, key ) {
        var console = window.console;
+       /*
+               MediaWiki patch for tracking usage.
+
+               Custom keys:
+               - andSelf
+               - attr-pass
+               - attr-prop
+               - bind-error
+               - clean
+               - create-html
+               - data-events
+               - die
+               - event-ajax
+               - event-global
+               - event-hover
+               - event-handle
+               - input-type
+               - json-invalid
+               - live
+               - sub
+               - toggle-handle
+
+               Prop keys:
+               - attrFn
+               - browser
+       */
+       mw.track( "jquery.migrate", key || "unknown" );
+
        if ( !warnedAbout[ msg ] ) {
                warnedAbout[ msg ] = true;
                jQuery.migrateWarnings.push( msg );
@@ -46,7 +76,7 @@ function migrateWarn( msg) {
        }
 }
 
-function migrateWarnProp( obj, prop, value, msg ) {
+function migrateWarnProp( obj, prop, value, msg, key ) {
        if ( Object.defineProperty ) {
                // On ES5 browsers (non-oldIE), warn if the code tries to get prop;
                // allow property to be overwritten in case some other plugin wants it
@@ -55,11 +85,11 @@ function migrateWarnProp( obj, prop, value, msg ) {
                                configurable: true,
                                enumerable: true,
                                get: function() {
-                                       migrateWarn( msg );
+                                       migrateWarn( msg, key || prop );
                                        return value;
                                },
                                set: function( newValue ) {
-                                       migrateWarn( msg );
+                                       migrateWarn( msg, key || prop );
                                        value = newValue;
                                }
                        });
@@ -102,7 +132,7 @@ jQuery.attr = function( elem, name, value, pass ) {
                // Since pass is used internally, we only warn for new jQuery
                // versions where there isn't a pass arg in the formal params
                if ( oldAttr.length < 4 ) {
-                       migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");
+                       migrateWarn("jQuery.fn.attr( props, pass ) is deprecated", "attr-pass" );
                }
                if ( elem && !rnoAttrNodeType.test( nType ) &&
                        (attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {
@@ -113,7 +143,7 @@ jQuery.attr = function( elem, name, value, pass ) {
        // Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking
        // for disconnected elements we don't warn on $( "<button>", { type: "button" } ).
        if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {
-               migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8");
+               migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8", "input-type");
        }
 
        // Restore boolHook for boolean property/attribute synchronization
@@ -152,7 +182,7 @@ jQuery.attr = function( elem, name, value, pass ) {
 
                // Warn only for attributes that can remain distinct from their properties post-1.9
                if ( ruseDefault.test( lowerName ) ) {
-                       migrateWarn( "jQuery.fn.attr('" + lowerName + "') may use property instead of attribute" );
+                       migrateWarn( "jQuery.fn.attr('" + lowerName + "') may use property instead of attribute", "attr-prop" );
                }
        }
 
@@ -167,7 +197,7 @@ jQuery.attrHooks.value = {
                        return valueAttrGet.apply( this, arguments );
                }
                if ( nodeName !== "input" && nodeName !== "option" ) {
-                       migrateWarn("jQuery.fn.attr('value') no longer gets properties");
+                       migrateWarn("jQuery.fn.attr('value') no longer gets properties", "attr-prop");
                }
                return name in elem ?
                        elem.value :
@@ -179,7 +209,7 @@ jQuery.attrHooks.value = {
                        return valueAttrSet.apply( this, arguments );
                }
                if ( nodeName !== "input" && nodeName !== "option" ) {
-                       migrateWarn("jQuery.fn.attr('value', val) no longer sets properties");
+                       migrateWarn("jQuery.fn.attr('value', val) no longer sets properties", "attr-prop");
                }
                // Does not return so that setAttribute is also used
                elem.value = value;
@@ -201,15 +231,15 @@ jQuery.fn.init = function( selector, context, rootjQuery ) {
                        (match = rquickExpr.exec( jQuery.trim( selector ) )) && match[ 0 ] ) {
                // This is an HTML string according to the "old" rules; is it still?
                if ( selector.charAt( 0 ) !== "<" ) {
-                       migrateWarn("$(html) HTML strings must start with '<' character");
+                       migrateWarn("$(html) HTML strings must start with '<' character", "create-html");
                }
                if ( match[ 3 ] ) {
-                       migrateWarn("$(html) HTML text after last tag is ignored");
+                       migrateWarn("$(html) HTML text after last tag is ignored", "create-html");
                }
                // Consistently reject any HTML-like string starting with a hash (#9521)
                // Note that this may break jQuery 1.6.x code that otherwise would work.
                if ( match[ 0 ].charAt( 0 ) === "#" ) {
-                       migrateWarn("HTML string cannot start with a '#' character");
+                       migrateWarn("HTML string cannot start with a '#' character", "create-html");
                        jQuery.error("JQMIGRATE: Invalid selector string (XSS)");
                }
                // Now process using loose rules; let pre-1.8 play too
@@ -229,7 +259,7 @@ jQuery.fn.init.prototype = jQuery.fn;
 // Let $.parseJSON(falsy_value) return null
 jQuery.parseJSON = function( json ) {
        if ( !json && json !== null ) {
-               migrateWarn("jQuery.parseJSON requires a valid JSON string");
+               migrateWarn("jQuery.parseJSON requires a valid JSON string", "json-invalid");
                return null;
        }
        return oldParseJSON.apply( this, arguments );
@@ -292,7 +322,7 @@ jQuery.sub = function() {
        };
        jQuerySub.fn.init.prototype = jQuerySub.fn;
        var rootjQuerySub = jQuerySub(document);
-       migrateWarn( "jQuery.sub() is deprecated" );
+       migrateWarn( "jQuery.sub() is deprecated", "sub" );
        return jQuerySub;
 };
 
@@ -316,7 +346,7 @@ jQuery.fn.data = function( name ) {
                ret = jQuery.data( elem, name );
                evt = jQuery._data( elem, name );
                if ( ( ret === undefined || ret === evt ) && evt !== undefined ) {
-                       migrateWarn("Use of jQuery.fn.data('events') is deprecated");
+                       migrateWarn("Use of jQuery.fn.data('events') is deprecated", "data-events");
                        return evt;
                }
        }
@@ -328,7 +358,7 @@ var rscriptType = /\/(java|ecma)script/i,
        oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;
 
 jQuery.fn.andSelf = function() {
-       migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()");
+       migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()", "andSelf");
        return oldSelf.apply( this, arguments );
 };
 
@@ -340,7 +370,7 @@ if ( !jQuery.clean ) {
                context = !context.nodeType && context[0] || context;
                context = context.ownerDocument || context;
 
-               migrateWarn("jQuery.clean() is deprecated");
+               migrateWarn("jQuery.clean() is deprecated", "clean");
 
                var i, elem, handleScript, jsTags,
                        ret = [];
@@ -396,7 +426,7 @@ var eventAdd = jQuery.event.add,
                        return events;
                }
                if ( rhoverHack.test( events ) ) {
-                       migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'");
+                       migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'", "event-hover");
                }
                return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
        };
@@ -408,13 +438,13 @@ if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) {
 
 // Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7
 if ( jQuery.event.dispatch ) {
-       migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" );
+       migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated", "event-handle" );
 }
 
 // Support for 'hover' pseudo-event and ajax event warnings
 jQuery.event.add = function( elem, types, handler, data, selector ){
        if ( elem !== document && rajaxEvent.test( types ) ) {
-               migrateWarn( "AJAX events should be attached to document: " + types );
+               migrateWarn( "AJAX events should be attached to document: " + types, "event-ajax" );
        }
        eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector );
 };
@@ -424,7 +454,7 @@ jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){
 
 jQuery.fn.error = function() {
        var args = Array.prototype.slice.call( arguments, 0);
-       migrateWarn("jQuery.fn.error() is deprecated");
+       migrateWarn("jQuery.fn.error() is deprecated", "bind-error");
        args.splice( 0, 0, "error" );
        if ( arguments.length ) {
                return this.bind.apply( this, args );
@@ -440,7 +470,7 @@ jQuery.fn.toggle = function( fn, fn2 ) {
        if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {
                return oldToggle.apply( this, arguments );
        }
-       migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");
+       migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated", "toggle-handle");
 
        // Save reference to arguments for access in closure
        var args = arguments,
@@ -468,7 +498,7 @@ jQuery.fn.toggle = function( fn, fn2 ) {
 };
 
 jQuery.fn.live = function( types, data, fn ) {
-       migrateWarn("jQuery.fn.live() is deprecated");
+       migrateWarn("jQuery.fn.live() is deprecated", "live");
        if ( oldLive ) {
                return oldLive.apply( this, arguments );
        }
@@ -477,7 +507,7 @@ jQuery.fn.live = function( types, data, fn ) {
 };
 
 jQuery.fn.die = function( types, fn ) {
-       migrateWarn("jQuery.fn.die() is deprecated");
+       migrateWarn("jQuery.fn.die() is deprecated", "die");
        if ( oldDie ) {
                return oldDie.apply( this, arguments );
        }
@@ -488,7 +518,7 @@ jQuery.fn.die = function( types, fn ) {
 // Turn global events into document-triggered events
 jQuery.event.trigger = function( event, data, elem, onlyHandlers  ){
        if ( !elem && !rajaxEvent.test( event ) ) {
-               migrateWarn( "Global events are undocumented and deprecated" );
+               migrateWarn( "Global events are undocumented and deprecated", "event-global" );
        }
        return eventTrigger.call( this,  event, data, elem || document, onlyHandlers  );
 };
index 416d6be..eb39dac 100644 (file)
@@ -10,5 +10,9 @@
        "ooui-outline-control-move-down": "Mover abaxo l'elementu",
        "ooui-outline-control-move-up": "Mover arriba l'elementu",
        "ooui-outline-control-remove": "Desaniciar elementu",
-       "ooui-toolbar-more": "Más"
+       "ooui-toolbar-more": "Más",
+       "ooui-dialog-confirm-title": "Confirmar",
+       "ooui-dialog-confirm-default-prompt": "¿Tas seguru?",
+       "ooui-dialog-confirm-default-ok": "Aceutar",
+       "ooui-dialog-confirm-default-cancel": "Encaboxar"
 }
index 0ef6829..08fbe0b 100644 (file)
@@ -1,8 +1,13 @@
 {
        "@metadata": {
                "authors": [
-                       "Чаховіч Уладзіслаў"
+                       "Чаховіч Уладзіслаў",
+                       "Artificial123"
                ]
        },
-       "ooui-dialog-action-close": "Закрыць"
+       "ooui-dialog-action-close": "Закрыць",
+       "ooui-dialog-confirm-title": "Пацвердзіць",
+       "ooui-dialog-confirm-default-prompt": "Вы ўпэўненыя?",
+       "ooui-dialog-confirm-default-ok": "ОК",
+       "ooui-dialog-confirm-default-cancel": "Адмяніць"
 }
index a7b9d9d..f7105ce 100644 (file)
@@ -13,5 +13,8 @@
        "ooui-outline-control-move-down": "আইটেম নিচে স্থানান্তর",
        "ooui-outline-control-move-up": "আইটেম উপরে স্থানান্তর",
        "ooui-outline-control-remove": "আইটেম সরান",
-       "ooui-toolbar-more": "আরও"
+       "ooui-toolbar-more": "আরও",
+       "ooui-dialog-confirm-title": "নিশ্চিত করুন",
+       "ooui-dialog-confirm-default-ok": "ঠিক আছে",
+       "ooui-dialog-confirm-default-cancel": "বাতিল"
 }
index 75e3547..14280a7 100644 (file)
@@ -8,5 +8,9 @@
        "ooui-outline-control-move-down": "Premjesti stavku dole",
        "ooui-outline-control-move-up": "Premjesti stavku gore",
        "ooui-outline-control-remove": "Ukloni stavku",
-       "ooui-toolbar-more": "Više"
+       "ooui-toolbar-more": "Više",
+       "ooui-dialog-confirm-title": "Potvrdi",
+       "ooui-dialog-confirm-default-prompt": "Da li ste sigurni?",
+       "ooui-dialog-confirm-default-ok": "U redu",
+       "ooui-dialog-confirm-default-cancel": "Otkaži"
 }
index 1ef2731..de86daf 100644 (file)
@@ -9,5 +9,9 @@
        "ooui-outline-control-move-down": "Лаха яккха элемент",
        "ooui-outline-control-move-up": "Лаккха яккха элемент",
        "ooui-outline-control-remove": "ДӀадаха меттиг",
-       "ooui-toolbar-more": "Кхин тӀе"
+       "ooui-toolbar-more": "Кхин",
+       "ooui-dialog-confirm-title": "Бакъдан",
+       "ooui-dialog-confirm-default-prompt": "Бакъалла лаьий хӀуна?",
+       "ooui-dialog-confirm-default-ok": "ХӀаъ",
+       "ooui-dialog-confirm-default-cancel": "Цаоьшу"
 }
index 884a462..eadae99 100644 (file)
@@ -2,8 +2,12 @@
        "@metadata": {
                "authors": [
                        "Calak",
-                       "Muhammed taha"
+                       "Muhammed taha",
+                       "Serwan"
                ]
        },
-       "ooui-dialog-action-close": "دایخە"
+       "ooui-dialog-action-close": "دایخە",
+       "ooui-dialog-confirm-default-prompt": "ئایا تۆ دڵنیات ؟",
+       "ooui-dialog-confirm-default-ok": "باشە",
+       "ooui-dialog-confirm-default-cancel": "پاشگەزبوونەوە"
 }
index 831da51..d4ef2d5 100644 (file)
@@ -1,12 +1,17 @@
 {
        "@metadata": {
                "authors": [
-                       "Lévi"
+                       "Lévi",
+                       "Gloria sah"
                ]
        },
        "ooui-dialog-action-close": "Sèra",
        "ooui-outline-control-move-down": "Spôsta in bâs",
        "ooui-outline-control-move-up": "Spôsta in êlt",
        "ooui-outline-control-remove": "Armōv l'elemèint",
-       "ooui-toolbar-more": "Êter"
+       "ooui-toolbar-more": "Êter",
+       "ooui-dialog-confirm-title": "Cunfermèr",
+       "ooui-dialog-confirm-default-prompt": "Sî-'v sicùr?",
+       "ooui-dialog-confirm-default-ok": "'D acòrdi",
+       "ooui-dialog-confirm-default-cancel": "Scanślèr"
 }
index 35f26c6..0b54f41 100644 (file)
@@ -7,7 +7,11 @@
        },
        "ooui-dialog-action-close": "Sèra",
        "ooui-outline-control-move-down": "Spôsta in bâs",
-       "ooui-outline-control-move-up": "Spôsta in êlt",
+       "ooui-outline-control-move-up": "Spôsta in êlta",
        "ooui-outline-control-remove": "Tór vìa 'l elemèint",
-       "ooui-toolbar-more": "Êter"
+       "ooui-toolbar-more": "Êter",
+       "ooui-dialog-confirm-title": "Cunfirmèr",
+       "ooui-dialog-confirm-default-prompt": "Sî-'v sicùr?",
+       "ooui-dialog-confirm-default-ok": "'D acòrdi",
+       "ooui-dialog-confirm-default-cancel": "Scanślèr"
 }
index d2b89a7..76485ea 100644 (file)
                        "Jduranboger",
                        "PoLuX124",
                        "Ralgis",
-                       "Thehelpfulone"
+                       "Thehelpfulone",
+                       "Gloria sah"
                ]
        },
        "ooui-dialog-action-close": "Cerrar",
        "ooui-outline-control-move-down": "Bajar elemento",
        "ooui-outline-control-move-up": "Subir elemento",
        "ooui-outline-control-remove": "Eliminar elemento",
-       "ooui-toolbar-more": "Más"
+       "ooui-toolbar-more": "Más",
+       "ooui-dialog-confirm-title": "Confirmar",
+       "ooui-dialog-confirm-default-prompt": "¿Está seguro?",
+       "ooui-dialog-confirm-default-ok": "Aceptar",
+       "ooui-dialog-confirm-default-cancel": "Cancelar"
 }
index 03db1a8..164685c 100644 (file)
@@ -9,5 +9,9 @@
        "ooui-outline-control-move-down": "Liiguta üksust allapoole",
        "ooui-outline-control-move-up": "Liiguta üksust ülespoole",
        "ooui-outline-control-remove": "Eemalda üksus",
-       "ooui-toolbar-more": "Veel"
+       "ooui-toolbar-more": "Veel",
+       "ooui-dialog-confirm-title": "Kinnitus",
+       "ooui-dialog-confirm-default-prompt": "Kas oled kindel?",
+       "ooui-dialog-confirm-default-ok": "Sobib",
+       "ooui-dialog-confirm-default-cancel": "Loobu"
 }
index bf05121..8e8b81e 100644 (file)
@@ -20,5 +20,9 @@
        "ooui-outline-control-move-down": "Siirrä kohdetta alaspäin",
        "ooui-outline-control-move-up": "Siirrä kohdetta ylöspäin",
        "ooui-outline-control-remove": "Poista kohde",
-       "ooui-toolbar-more": "Lisää"
+       "ooui-toolbar-more": "Lisää",
+       "ooui-dialog-confirm-title": "Vahvista",
+       "ooui-dialog-confirm-default-prompt": "Oletko varma?",
+       "ooui-dialog-confirm-default-ok": "OK",
+       "ooui-dialog-confirm-default-cancel": "Peruuta"
 }
index 949b034..a4b6787 100644 (file)
@@ -10,5 +10,9 @@
        "ooui-outline-control-move-down": "Mover o elemento abaixo",
        "ooui-outline-control-move-up": "Mover o elemento arriba",
        "ooui-outline-control-remove": "Eliminar o elemento",
-       "ooui-toolbar-more": "Máis"
+       "ooui-toolbar-more": "Máis",
+       "ooui-dialog-confirm-title": "Confirmar",
+       "ooui-dialog-confirm-default-prompt": "Está seguro?",
+       "ooui-dialog-confirm-default-ok": "Aceptar",
+       "ooui-dialog-confirm-default-cancel": "Cancelar"
 }
index afc727c..f16f984 100644 (file)
@@ -9,5 +9,6 @@
        "ooui-dialog-action-close": "zatvori",
        "ooui-outline-control-move-down": "Premjesti stavku dolje",
        "ooui-outline-control-move-up": "Premjesti stavku gore",
+       "ooui-outline-control-remove": "Ukloni",
        "ooui-toolbar-more": "Više mogućnosti"
 }
index 1adbb35..0f423b3 100644 (file)
@@ -12,5 +12,8 @@
        "ooui-outline-control-move-down": "Elem mozgatása lefelé",
        "ooui-outline-control-move-up": "Elem mozgatása felfelé",
        "ooui-outline-control-remove": "Elem eltávolítása",
-       "ooui-toolbar-more": "Tovább..."
+       "ooui-toolbar-more": "Tovább...",
+       "ooui-dialog-confirm-title": "Megerősítés",
+       "ooui-dialog-confirm-default-prompt": "Biztos vagy benne?",
+       "ooui-dialog-confirm-default-cancel": "Mégse"
 }
index de54b47..f1c9ced 100644 (file)
@@ -4,5 +4,13 @@
                        "McDutchie"
                ]
        },
-       "ooui-dialog-action-close": "Clauder"
+       "ooui-dialog-action-close": "Clauder",
+       "ooui-outline-control-move-down": "Displaciar elemento in basso",
+       "ooui-outline-control-move-up": "Displaciar elemento in alto",
+       "ooui-outline-control-remove": "Remover elemento",
+       "ooui-toolbar-more": "Plus",
+       "ooui-dialog-confirm-title": "Confirmation",
+       "ooui-dialog-confirm-default-prompt": "Es tu secur?",
+       "ooui-dialog-confirm-default-ok": "OK",
+       "ooui-dialog-confirm-default-cancel": "Cancellar"
 }
index b0a717a..5d9e3bb 100644 (file)
@@ -8,5 +8,9 @@
        "ooui-outline-control-move-down": "Ipababa ti banag",
        "ooui-outline-control-move-up": "Ipangato ti banag",
        "ooui-outline-control-remove": "Ikkaten ti banag",
-       "ooui-toolbar-more": "Adu pay"
+       "ooui-toolbar-more": "Adu pay",
+       "ooui-dialog-confirm-title": "Pasingkedan",
+       "ooui-dialog-confirm-default-prompt": "Siguradoka kadi?",
+       "ooui-dialog-confirm-default-ok": "Sige",
+       "ooui-dialog-confirm-default-cancel": "Ukasen"
 }
index 73297b4..85931f5 100644 (file)
@@ -1,10 +1,17 @@
 {
        "@metadata": {
                "authors": [
-                       "Vikassy"
+                       "Vikassy",
+                       "Nayvik"
                ]
        },
        "ooui-dialog-action-close": "ಮುಚ್ಚಿ",
+       "ooui-outline-control-move-down": "ವಸ್ತು ಕೆಲ್ಗೆ ಸ್ಥಲಾನ್ಥರಿಸು",
+       "ooui-outline-control-move-up": "ವಸ್ತು ಮೆಲೆ ಸ್ಥಲಾನ್ಥರಿಸು",
        "ooui-outline-control-remove": "ವಸ್ತು ತೆಗೆ",
-       "ooui-toolbar-more": "ಹೆಚ್ಚು"
+       "ooui-toolbar-more": "ಹೆಚ್ಚು",
+       "ooui-dialog-confirm-title": "ಧೃಡಪಡಿಸು",
+       "ooui-dialog-confirm-default-prompt": "ನೀವು ಖ‍ಚಿತವಾಗಿದ್ದೀರಾ?",
+       "ooui-dialog-confirm-default-ok": "ಸರಿ",
+       "ooui-dialog-confirm-default-cancel": "ರದ್ದು"
 }
index 8ce236e..afd8753 100644 (file)
@@ -5,12 +5,17 @@
                        "Hym411",
                        "Kwj2772",
                        "LFM",
-                       "아라"
+                       "아라",
+                       "고기랑"
                ]
        },
        "ooui-dialog-action-close": "닫기",
        "ooui-outline-control-move-down": "항목을 아래로 옮기기",
        "ooui-outline-control-move-up": "항목을 위로 옮기기",
        "ooui-outline-control-remove": "항목 지우기",
-       "ooui-toolbar-more": "더 보기"
+       "ooui-toolbar-more": "더 보기",
+       "ooui-dialog-confirm-title": "확인",
+       "ooui-dialog-confirm-default-prompt": "확실합니까?",
+       "ooui-dialog-confirm-default-ok": "확인",
+       "ooui-dialog-confirm-default-cancel": "취소"
 }
diff --git a/resources/lib/oojs-ui/i18n/lzh.json b/resources/lib/oojs-ui/i18n/lzh.json
new file mode 100644 (file)
index 0000000..f296c3a
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Joe young yu"
+               ]
+       },
+       "ooui-dialog-confirm-default-ok": "可"
+}
index a44d0e5..6dfe34a 100644 (file)
@@ -5,5 +5,13 @@
                        "Jagwar"
                ]
        },
-       "ooui-dialog-action-close": "Tutuik"
+       "ooui-dialog-action-close": "Tutuik",
+       "ooui-outline-control-move-down": "Pindahan ko ka bawah",
+       "ooui-outline-control-move-up": "Pindahan ko ka ateh",
+       "ooui-outline-control-remove": "Hapuih ko",
+       "ooui-toolbar-more": "Lainnyo",
+       "ooui-dialog-confirm-title": "Pastian",
+       "ooui-dialog-confirm-default-prompt": "Yakin?",
+       "ooui-dialog-confirm-default-ok": "Yo",
+       "ooui-dialog-confirm-default-cancel": "Batal"
 }
index f7bbff4..da4b829 100644 (file)
@@ -2,12 +2,17 @@
        "@metadata": {
                "authors": [
                        "RajeshPandey",
-                       "सरोज कुमार ढकाल"
+                       "सरोज कुमार ढकाल",
+                       "Ganesh Paudel"
                ]
        },
        "ooui-dialog-action-close": "बन्द गर्ने",
        "ooui-outline-control-move-down": "वस्तुलाई तल सार्ने",
        "ooui-outline-control-move-up": "वस्तुलाई माथि सार्ने",
        "ooui-outline-control-remove": "वस्तुलाई हटाउने",
-       "ooui-toolbar-more": "थप"
+       "ooui-toolbar-more": "थप",
+       "ooui-dialog-confirm-title": "निश्चित गर्ने",
+       "ooui-dialog-confirm-default-prompt": "निश्चित हुनुहुन्छ ?",
+       "ooui-dialog-confirm-default-ok": "हुन्छ",
+       "ooui-dialog-confirm-default-cancel": "रद्द गर्ने"
 }
index 2160937..dbae538 100644 (file)
                        "Siebrand",
                        "Southparkfan",
                        "सरोज कुमार ढकाल",
-                       "Sjoerddebruin"
+                       "Sjoerddebruin",
+                       "Gloria sah"
                ]
        },
        "ooui-dialog-action-close": "Sluiten",
        "ooui-outline-control-move-down": "Item omlaag verplaatsen",
        "ooui-outline-control-move-up": "Item omhoog verplaatsen",
        "ooui-outline-control-remove": "Item verwijderen",
-       "ooui-toolbar-more": "Meer"
+       "ooui-toolbar-more": "Meer",
+       "ooui-dialog-confirm-title": "Bevestigen",
+       "ooui-dialog-confirm-default-prompt": "Weet u het zeker?",
+       "ooui-dialog-confirm-default-ok": "Oké",
+       "ooui-dialog-confirm-default-cancel": "Annuleren"
 }
index 4f8a988..a7f43a3 100644 (file)
@@ -1,12 +1,16 @@
 {
        "@metadata": {
                "authors": [
-                       "Cedric31"
+                       "Cedric31",
+                       "Gloria sah"
                ]
        },
        "ooui-dialog-action-close": "Tampar",
        "ooui-outline-control-move-down": "Far davalar l’element",
        "ooui-outline-control-move-up": "Far montar l’element",
        "ooui-outline-control-remove": "Suprimir l’element",
-       "ooui-toolbar-more": "Mai"
+       "ooui-toolbar-more": "Mai",
+       "ooui-dialog-confirm-title": "Confirmar",
+       "ooui-dialog-confirm-default-prompt": "Sètz segur ?",
+       "ooui-dialog-confirm-default-cancel": "Anullar"
 }
index 0ee623e..b51f70d 100644 (file)
@@ -8,5 +8,8 @@
        "ooui-outline-control-move-down": "Bweeschs nunna",
        "ooui-outline-control-move-up": "Bweeschs nuff",
        "ooui-outline-control-remove": "Leschs",
-       "ooui-toolbar-more": "Mea"
+       "ooui-toolbar-more": "Mea",
+       "ooui-dialog-confirm-default-prompt": "Bischda sischa?",
+       "ooui-dialog-confirm-default-ok": "OK",
+       "ooui-dialog-confirm-default-cancel": "Abbresche"
 }
index 2d70f17..bea0c3a 100644 (file)
@@ -14,7 +14,9 @@
                        "Woytecr",
                        "Wpedzich",
                        "Jacenty359",
-                       "Matik7"
+                       "Matik7",
+                       "Gloria sah",
+                       "Andrzej aa"
                ]
        },
        "ooui-dialog-action-close": "Zamknij",
@@ -24,5 +26,6 @@
        "ooui-toolbar-more": "Więcej",
        "ooui-dialog-confirm-title": "Potwierdź",
        "ooui-dialog-confirm-default-prompt": "Jesteś pewien?",
+       "ooui-dialog-confirm-default-ok": "OK",
        "ooui-dialog-confirm-default-cancel": "Anuluj"
 }
index 7fe2247..e9ad6de 100644 (file)
@@ -20,5 +20,6 @@
        "ooui-toolbar-more": "Mais",
        "ooui-dialog-confirm-title": "Confirmar",
        "ooui-dialog-confirm-default-prompt": "Tem a certeza?",
+       "ooui-dialog-confirm-default-ok": "Aceitar",
        "ooui-dialog-confirm-default-cancel": "Cancelar"
 }
index b1bfb32..0181514 100644 (file)
@@ -4,12 +4,17 @@
                        "AlimanRuna",
                        "Firilacroco",
                        "Minisarm",
-                       "Stelistcristi"
+                       "Stelistcristi",
+                       "Gloria sah"
                ]
        },
        "ooui-dialog-action-close": "Închide",
        "ooui-outline-control-move-down": "Mută elementul mai jos",
        "ooui-outline-control-move-up": "Mută elementul mai sus",
        "ooui-outline-control-remove": "Elimină elementul",
-       "ooui-toolbar-more": "Mai mult"
+       "ooui-toolbar-more": "Mai mult",
+       "ooui-dialog-confirm-title": "Confirmare",
+       "ooui-dialog-confirm-default-prompt": "Sunteți sigur(ă)?",
+       "ooui-dialog-confirm-default-ok": "OK",
+       "ooui-dialog-confirm-default-cancel": "Revocare"
 }
index 6297b85..a063cc8 100644 (file)
@@ -3,11 +3,13 @@
                "authors": [
                        "Gazeb",
                        "Gmelfi",
-                       "HalanTul"
+                       "HalanTul",
+                       "Gloria sah"
                ]
        },
        "ooui-dialog-action-close": "Chiùi",
        "ooui-outline-control-move-down": "Sposta di sutta",
        "ooui-outline-control-move-up": "Sposta di supra",
-       "ooui-toolbar-more": "Àutri cosi"
+       "ooui-toolbar-more": "Àutri cosi",
+       "ooui-dialog-confirm-title": "Cunferma"
 }
index f56773f..f0ccce5 100644 (file)
@@ -11,5 +11,9 @@
        "ooui-outline-control-move-down": "Prestavi predmet nižje",
        "ooui-outline-control-move-up": "Prestavi predmet višje",
        "ooui-outline-control-remove": "Odstrani vnos",
-       "ooui-toolbar-more": "Več"
+       "ooui-toolbar-more": "Več",
+       "ooui-dialog-confirm-title": "Potrdi",
+       "ooui-dialog-confirm-default-prompt": "Ste prepričani?",
+       "ooui-dialog-confirm-default-ok": "V redu",
+       "ooui-dialog-confirm-default-cancel": "Prekliči"
 }
index 5e46ab6..44dfd60 100644 (file)
@@ -3,12 +3,17 @@
                "authors": [
                        "Euriditi",
                        "Kushtrim",
-                       "Elioqoshi"
+                       "Elioqoshi",
+                       "GretaDoci"
                ]
        },
        "ooui-dialog-action-close": "Mbylle",
        "ooui-outline-control-move-down": "Zhvendose artikullin më poshtë",
        "ooui-outline-control-move-up": "Zhvendose artikullin më lart",
        "ooui-outline-control-remove": "Hiq artikullin",
-       "ooui-toolbar-more": "Më tepër..."
+       "ooui-toolbar-more": "Më tepër...",
+       "ooui-dialog-confirm-title": "Konfirmo",
+       "ooui-dialog-confirm-default-prompt": "A jeni i sigurt?",
+       "ooui-dialog-confirm-default-ok": "Në rregull",
+       "ooui-dialog-confirm-default-cancel": "Anullo"
 }
index 889f623..308ed84 100644 (file)
@@ -10,5 +10,9 @@
        "ooui-outline-control-move-down": "Премести ставку на доле",
        "ooui-outline-control-move-up": "Премести ставку на горе",
        "ooui-outline-control-remove": "Уклони ставку",
-       "ooui-toolbar-more": "Више"
+       "ooui-toolbar-more": "Више",
+       "ooui-dialog-confirm-title": "Потврди",
+       "ooui-dialog-confirm-default-prompt": "Јесте ли сигурни?",
+       "ooui-dialog-confirm-default-ok": "У реду",
+       "ooui-dialog-confirm-default-cancel": "Откажи"
 }
index 1f2da2d..889b0f6 100644 (file)
@@ -8,5 +8,6 @@
        "ooui-outline-control-move-down": "Premesti stavku na dole",
        "ooui-outline-control-move-up": "Premesti stavku na gore",
        "ooui-outline-control-remove": "Ukloni stavku",
-       "ooui-toolbar-more": "Više"
+       "ooui-toolbar-more": "Više",
+       "ooui-dialog-confirm-default-prompt": "Jeste li sigurni?"
 }
index 8a295f4..178384c 100644 (file)
@@ -8,5 +8,10 @@
        "ooui-dialog-action-close": "Isara",
        "ooui-outline-control-move-down": "Ilipat ang aytem pababa",
        "ooui-outline-control-move-up": "Ilipat ang aytem pataas",
-       "ooui-toolbar-more": "Marami pa"
+       "ooui-outline-control-remove": "Tanggalin ang aytem",
+       "ooui-toolbar-more": "Marami pa",
+       "ooui-dialog-confirm-title": "Tiyakin",
+       "ooui-dialog-confirm-default-prompt": "Nakatitiyak ka ba?",
+       "ooui-dialog-confirm-default-ok": "Sige",
+       "ooui-dialog-confirm-default-cancel": "Huwag ituloy"
 }
index dde9316..1a91cdb 100644 (file)
@@ -2,11 +2,14 @@
        "@metadata": {
                "authors": [
                        "Candalua",
-                       "GatoSelvadego"
+                       "GatoSelvadego",
+                       "Gloria sah"
                ]
        },
        "ooui-dialog-action-close": "Sara",
        "ooui-outline-control-move-down": "Sposta in baso",
        "ooui-outline-control-move-up": "Sposta in sima",
-       "ooui-toolbar-more": "Altro"
+       "ooui-toolbar-more": "Altro",
+       "ooui-dialog-confirm-title": "Conferma",
+       "ooui-dialog-confirm-default-ok": "Va ben"
 }
index 377c254..9cc4543 100644 (file)
@@ -10,5 +10,9 @@
        "ooui-outline-control-move-down": "Chuyển mục xuống",
        "ooui-outline-control-move-up": "Chuyển mục lên",
        "ooui-outline-control-remove": "Xóa khoản",
-       "ooui-toolbar-more": "Thêm"
+       "ooui-toolbar-more": "Thêm",
+       "ooui-dialog-confirm-title": "Xác nhận",
+       "ooui-dialog-confirm-default-prompt": "Bạn có chắc chắn?",
+       "ooui-dialog-confirm-default-ok": "OK",
+       "ooui-dialog-confirm-default-cancel": "Hủy bỏ"
 }
index 091dbaf..01a22d1 100644 (file)
@@ -10,5 +10,9 @@
        "ooui-outline-control-move-down": "רוקן עלעמענט אראפ",
        "ooui-outline-control-move-up": "רוקן עלעמענט ארויף",
        "ooui-outline-control-remove": "אַראָפנעמען איינס",
-       "ooui-toolbar-more": "נאך"
+       "ooui-toolbar-more": "נאך",
+       "ooui-dialog-confirm-title": "באַשטעטיקן",
+       "ooui-dialog-confirm-default-prompt": "איר זענט זיכער?",
+       "ooui-dialog-confirm-default-ok": "יאָ",
+       "ooui-dialog-confirm-default-cancel": "אַנולירן"
 }
index 8ce4b25..e549b17 100644 (file)
@@ -1,8 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12" height="12" viewBox="0, 0, 12, 12">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
+        height="12px" viewBox="0 0 12 12">
   <g id="deprecated" opacity="0.75">
-    <path d="M6,12 C2.686,12 -0,9.314 -0,6 C-0,2.686 2.686,-0 6,-0 C9.314,-0 12,2.686 12,6 C12,9.314 9.314,12 6,12 z M5,7 L7,7 L7,2 L5,2 z M5,10 L7,10 L7,8 L5,8 z" fill="#000000"/>
+    <path d="M6,12 C2.686,12 -0,9.314 -0,6 C-0,2.686 2.686,-0 6,-0 C9.314,-0 12,2.686 12,6 C12,9.314 9.314,12 6,12 z M5,7 L7,7 L7,2 L5,2 z M5,10 L7,10 L7,8 L5,8 z"/>
   </g>
   <defs/>
 </svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-down.png b/resources/lib/oojs-ui/images/indicators/arrow-down.png
new file mode 100644 (file)
index 0000000..64e3bac
Binary files /dev/null and b/resources/lib/oojs-ui/images/indicators/arrow-down.png differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-down.svg b/resources/lib/oojs-ui/images/indicators/arrow-down.svg
new file mode 100644 (file)
index 0000000..89c21e3
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
+        height="12px" viewBox="0 0 12 12">
+<g id="down" style="opacity:0.75;">
+       <polygon id="arrow" points="2,3 5.5,9 9,3"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-ltr.png b/resources/lib/oojs-ui/images/indicators/arrow-ltr.png
new file mode 100644 (file)
index 0000000..4eafd0f
Binary files /dev/null and b/resources/lib/oojs-ui/images/indicators/arrow-ltr.png differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-ltr.svg b/resources/lib/oojs-ui/images/indicators/arrow-ltr.svg
new file mode 100644 (file)
index 0000000..ad87640
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
+        height="12px" viewBox="0 0 12 12">
+<g id="ltr" opacity="0.75">
+       <path id="arrow" d="M3,9 L3,2 L9,5.5 z"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-rtl.png b/resources/lib/oojs-ui/images/indicators/arrow-rtl.png
new file mode 100644 (file)
index 0000000..ce13ba0
Binary files /dev/null and b/resources/lib/oojs-ui/images/indicators/arrow-rtl.png differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-rtl.svg b/resources/lib/oojs-ui/images/indicators/arrow-rtl.svg
new file mode 100644 (file)
index 0000000..010b24e
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
+        height="12px" viewBox="0 0 12 12">
+<g id="rtl" opacity="0.75">
+       <path id="arrow" d="M3,5.5 L9,9 L9,2 z"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-up.png b/resources/lib/oojs-ui/images/indicators/arrow-up.png
new file mode 100644 (file)
index 0000000..401cde6
Binary files /dev/null and b/resources/lib/oojs-ui/images/indicators/arrow-up.png differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-up.svg b/resources/lib/oojs-ui/images/indicators/arrow-up.svg
new file mode 100644 (file)
index 0000000..bbc2b3c
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
+        height="12px" viewBox="0 0 12 12">
+<g id="up" style="opacity:0.75;">
+       <polygon id="arrow" points="5.5,2 2,8 9,8"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/down.png b/resources/lib/oojs-ui/images/indicators/down.png
deleted file mode 100644 (file)
index 47ff54c..0000000
Binary files a/resources/lib/oojs-ui/images/indicators/down.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/indicators/down.svg b/resources/lib/oojs-ui/images/indicators/down.svg
deleted file mode 100644 (file)
index c871f60..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
-        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
-<g id="down" style="opacity:0.75;">
-       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="2.023,3 5.512,8.953 9,3"/>
-</g>
-</svg>
index ee1baf7..d8b36b1 100644 (file)
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12" height="12" viewBox="0, 0, 12, 12">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
+        height="12px" viewBox="0 0 12 12">
   <g id="required" opacity="0.75">
-    <path d="M5,1 L7,1 L7,11 L5,11 z" fill="#000000"/>
-    <path d="M9.83,2.634 L10.83,4.366 L2.17,9.366 L1.17,7.634 z" fill="#000000"/>
-    <path d="M1.17,4.366 L2.17,2.634 L10.83,7.634 L9.83,9.366 z" fill="#000000"/>
+    <path d="M5,1 L7,1 L7,11 L5,11 z"/>
+    <path d="M9.83,2.634 L10.83,4.366 L2.17,9.366 L1.17,7.634 z"/>
+    <path d="M1.17,4.366 L2.17,2.634 L10.83,7.634 L9.83,9.366 z"/>
   </g>
   <defs/>
 </svg>
diff --git a/resources/lib/oojs-ui/images/indicators/up.png b/resources/lib/oojs-ui/images/indicators/up.png
deleted file mode 100644 (file)
index b827f6d..0000000
Binary files a/resources/lib/oojs-ui/images/indicators/up.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/indicators/up.svg b/resources/lib/oojs-ui/images/indicators/up.svg
deleted file mode 100644 (file)
index a5d7f38..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
-        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
-<g id="up" style="opacity:0.75;">
-       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="5.512,2.006 2,8 9.024,8                "/>
-</g>
-</svg>
index 5a69a2c..47fce7a 100644 (file)
@@ -9,7 +9,29 @@
 }
 
 .oo-ui-dialog-content .oo-ui-window-body {
-  position: relative;
+  position: absolute;
+  top: 3.35em;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  overflow-y: auto;
+}
+
+.oo-ui-dialog-content .oo-ui-window-foot {
+  position: absolute;
+  top: 0;
+  right: 0;
+  height: 3.35em;
+}
+
+.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-buttonedElement-button {
+  height: 100%;
+}
+
+.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-buttonedElement-button .oo-ui-labeledElement-label {
+  display: inline-block;
+  width: 0;
+  text-indent: -9999px;
 }
 
 .oo-ui-dialog-medium .oo-ui-window-frame {
@@ -21,6 +43,9 @@
 .oo-ui-window-head {
   height: 3.35em;
   border-bottom: 1px solid #dddddd;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
 }
 
 .oo-ui-window-body {
   background-size: 2em auto;
 }
 
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
+  padding: 0 0 1em;
+}
+
 .oo-ui-optionWidget {
   padding: 0.8em 1em 0.8em 3.35em;
   font-weight: bold;
 .oo-ui-textInputWidget input,
 .oo-ui-textInputWidget textarea {
   padding: .8em 1em;
+}
+
+/* Icons */
+
+.oo-ui-icon-check {
+  background: #347bff;
+  background-image: /* @embed */ url(themes/agora/images/icons/check.svg);
 }
\ No newline at end of file
index 63a66fb..94ebbe3 100644 (file)
@@ -1,7 +1,21 @@
 .oo-ui-dialog {
   background-color: #fff;
   background-color: rgba(255, 255, 255, 0.5);
+  /* Opening and closing animation */
+
   opacity: 0;
+}
+
+.oo-ui-dialog > .oo-ui-window-frame {
+  -webkit-transform: scale(0.5);
+     -moz-transform: scale(0.5);
+      -ms-transform: scale(0.5);
+       -o-transform: scale(0.5);
+          transform: scale(0.5);
+}
+
+.oo-ui-dialog.oo-ui-window-setup,
+.oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
   -webkit-transition: all 250ms ease-in-out;
      -moz-transition: all 250ms ease-in-out;
       -ms-transition: all 250ms ease-in-out;
@@ -9,6 +23,18 @@
           transition: all 250ms ease-in-out;
 }
 
+.oo-ui-dialog.oo-ui-window-ready {
+  opacity: 1;
+}
+
+.oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
+  -webkit-transform: scale(1);
+     -moz-transform: scale(1);
+      -ms-transform: scale(1);
+       -o-transform: scale(1);
+          transform: scale(1);
+}
+
 .oo-ui-dialog-content .oo-ui-window-head,
 .oo-ui-dialog-content .oo-ui-window-body,
 .oo-ui-dialog-content .oo-ui-window-foot {
   background-color: #fff;
   border: solid 1px #ccc;
   border-radius: 0.5em;
-  -webkit-transform: scale(0.5);
-     -moz-transform: scale(0.5);
-      -ms-transform: scale(0.5);
-       -o-transform: scale(0.5);
-          transform: scale(0.5);
   box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-  -webkit-transition: all 250ms ease-in-out;
-     -moz-transition: all 250ms ease-in-out;
-      -ms-transition: all 250ms ease-in-out;
-       -o-transition: all 250ms ease-in-out;
-          transition: all 250ms ease-in-out;
 }
 
 .oo-ui-dialog-small > .oo-ui-window-frame {
   max-height: 690px;
 }
 
-.oo-ui-dialog-open {
-  opacity: 1;
-}
-
-.oo-ui-dialog-open > .oo-ui-window-frame {
-  -webkit-transform: scale(1);
-     -moz-transform: scale(1);
-      -ms-transform: scale(1);
-       -o-transform: scale(1);
-          transform: scale(1);
-}
-
 .oo-ui-dialog-content .oo-ui-window-head,
 .oo-ui-dialog-content .oo-ui-window-foot {
   z-index: 1;
   box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
 }
 
+.oo-ui-dialog-content .oo-ui-window-foot {
+  bottom: 0;
+  height: 4.8em;
+  padding: 1em;
+}
+
+.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-buttonedElement-framed {
+  margin: 0.125em 0.25em;
+}
+
 .oo-ui-dialog-content .oo-ui-window-overlay {
   z-index: 3;
 }
 }
 
 .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
+  padding: 0.2em 0.8em;
+  margin: 0.1em 0;
   text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
   background: #eeeeee;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
   box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
 }
 
+.oo-ui-buttonedElement-framed.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
+  margin-right: -0.5em;
+  margin-left: -0.5em;
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-iconedElement.oo-ui-labeledElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
+  margin-right: 0.3em;
+  margin-left: -0.5em;
+}
+
 .oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button {
   background: #cde7f4;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
   box-shadow: none;
 }
 
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
+  padding: 1.5em;
+}
+
 .oo-ui-bookletLayout-outlinePanel {
   border-right: solid 1px #ddd;
 }
index acdb4ab..fa07706 100644 (file)
@@ -6,7 +6,7 @@
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Fri May 16 2014 15:50:17 GMT-0700 (PDT)
+ * Date: Fri May 30 2014 12:12:37 GMT-0700 (PDT)
  */
 
 /* Textures */
   height: 100%;
 }
 
-.oo-ui-dialog-content .oo-ui-window-foot {
-  bottom: 0;
-  height: 4.8em;
-  padding: 1em;
-}
-
 .oo-ui-dialog-content .oo-ui-window-foot .oo-ui-buttonedElement-framed {
   float: left;
-  margin: 0.125em 0.25em;
 }
 
 .oo-ui-dialog-content .oo-ui-window-foot .oo-ui-flaggableElement-primary,
 
 .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
   display: inline-block;
-  padding: 0.2em 0.8em;
-  margin: 0.1em 0;
   text-align: center;
   vertical-align: top;
 }
   vertical-align: middle;
 }
 
-.oo-ui-buttonedElement-framed.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-right: -0.5em;
-  margin-left: -0.5em;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-iconedElement.oo-ui-labeledElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-right: 0.3em;
-  margin-left: -0.5em;
-}
-
 .oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button,
 .oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
 .oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
 
 .oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
   width: 100%;
-  padding: 1.5em;
   -webkit-box-sizing: border-box;
      -moz-box-sizing: border-box;
           box-sizing: border-box;
   line-height: 2.6em;
 }
 
+.oo-ui-popupToolGroup-header {
+  margin: 0 0.6em;
+  font-size: 0.8em;
+  font-weight: bold;
+  line-height: 2.6em;
+}
+
 .oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
   cursor: default;
 }
index cbfc470..7e3aadf 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (d4086ff6e6)
+ * OOjs UI v0.1.0-pre (7a0e222a75)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Fri May 16 2014 16:32:36 GMT-0700 (PDT)
+ * Date: Wed Jun 18 2014 16:19:15 GMT-0700 (PDT)
  */
 ( function ( OO ) {
 
@@ -486,18 +486,32 @@ OO.ui.Element.scrollIntoView = function ( el, config ) {
        // Configuration initialization
        config = config || {};
 
-       var anim = {},
+       var rel, anim = {},
                callback = typeof config.complete === 'function' && config.complete,
                sc = this.getClosestScrollableContainer( el, config.direction ),
                $sc = $( sc ),
                eld = this.getDimensions( el ),
                scd = this.getDimensions( sc ),
+               $win = $( this.getWindow( el ) );
+
+       // Compute the distances between the edges of el and the edges of the scroll viewport
+       if ( $sc.is( 'body' ) ) {
+               // If the scrollable container is the <body> this is easy
+               rel = {
+                       'top': eld.rect.top,
+                       'bottom': $win.innerHeight() - eld.rect.bottom,
+                       'left': eld.rect.left,
+                       'right': $win.innerWidth() - eld.rect.right
+               };
+       } else {
+               // Otherwise, we have to subtract el's coordinates from sc's coordinates
                rel = {
                        'top': eld.rect.top - ( scd.rect.top + scd.borders.top ),
                        'bottom': scd.rect.bottom - scd.borders.bottom - scd.scrollbar.bottom - eld.rect.bottom,
                        'left': eld.rect.left - ( scd.rect.left + scd.borders.left ),
                        'right': scd.rect.right - scd.borders.right - scd.scrollbar.right - eld.rect.right
                };
+       }
 
        if ( !config.direction || config.direction === 'y' ) {
                if ( rel.top < 0 ) {
@@ -606,6 +620,7 @@ OO.ui.Element.prototype.scrollElementIntoView = function ( config ) {
 /**
  * Bind a handler for an event on this.$element
  *
+ * @deprecated Use jQuery#on instead.
  * @param {string} event
  * @param {Function} callback
  */
@@ -616,6 +631,7 @@ OO.ui.Element.prototype.onDOMEvent = function ( event, callback ) {
 /**
  * Unbind a handler bound with #offDOMEvent
  *
+ * @deprecated Use jQuery#off instead.
  * @param {string} event
  * @param {Function} callback
  */
@@ -624,105 +640,33 @@ OO.ui.Element.prototype.offDOMEvent = function ( event, callback ) {
 };
 
 ( function () {
-       // Static
-
-       // jQuery 1.8.3 has a bug with handling focusin/focusout events inside iframes.
-       // Firefox doesn't support focusin/focusout at all, so we listen for 'focus'/'blur' on the
-       // document, and simulate a 'focusin'/'focusout' event on the target element and make
-       // it bubble from there.
-       //
-       // - http://jsfiddle.net/sw3hr/
-       // - http://bugs.jquery.com/ticket/14180
-       // - https://github.com/jquery/jquery/commit/1cecf64e5aa4153
-       function specialEvent( simulatedName, realName ) {
-               function handler( e ) {
-                       jQuery.event.simulate(
-                               simulatedName,
-                               e.target,
-                               jQuery.event.fix( e ),
-                               /* bubble = */ true
-                       );
-               }
-
-               return {
-                       setup: function () {
-                               var doc = this.ownerDocument || this,
-                                       attaches = $.data( doc, 'ooui-' + simulatedName + '-attaches' );
-                               if ( !attaches ) {
-                                       doc.addEventListener( realName, handler, true );
-                               }
-                               $.data( doc, 'ooui-' + simulatedName + '-attaches', ( attaches || 0 ) + 1 );
-                       },
-                       teardown: function () {
-                               var doc = this.ownerDocument || this,
-                                       attaches = $.data( doc, 'ooui-' + simulatedName + '-attaches' ) - 1;
-                               if ( !attaches ) {
-                                       doc.removeEventListener( realName, handler, true );
-                                       $.removeData( doc, 'ooui-' + simulatedName + '-attaches' );
-                               } else {
-                                       $.data( doc, 'ooui-' + simulatedName + '-attaches', attaches );
-                               }
-                       }
-               };
-       }
-
-       var hasOwn = Object.prototype.hasOwnProperty,
-               specialEvents = {
-                       focusin: specialEvent( 'focusin', 'focus' ),
-                       focusout: specialEvent( 'focusout', 'blur' )
-               };
-
        /**
         * Bind a handler for an event on a DOM element.
         *
-        * Uses jQuery internally for everything except for events which are
-        * known to have issues in the browser or in jQuery. This method
-        * should become obsolete eventually.
+        * Used to be for working around a jQuery bug (jqbug.com/14180),
+        * but obsolete as of jQuery 1.11.0.
         *
         * @static
+        * @deprecated Use jQuery#on instead.
         * @param {HTMLElement|jQuery} el DOM element
         * @param {string} event Event to bind
         * @param {Function} callback Callback to call when the event fires
         */
        OO.ui.Element.onDOMEvent = function ( el, event, callback ) {
-               var orig;
-
-               if ( hasOwn.call( specialEvents, event ) ) {
-                       // Replace jQuery's override with our own
-                       orig = $.event.special[event];
-                       $.event.special[event] = specialEvents[event];
-
-                       $( el ).on( event, callback );
-
-                       // Restore
-                       $.event.special[event] = orig;
-               } else {
-                       $( el ).on( event, callback );
-               }
+               $( el ).on( event, callback );
        };
 
        /**
         * Unbind a handler bound with #static-method-onDOMEvent.
         *
+        * @deprecated Use jQuery#off instead.
         * @static
         * @param {HTMLElement|jQuery} el DOM element
         * @param {string} event Event to unbind
         * @param {Function} [callback] Callback to unbind
         */
        OO.ui.Element.offDOMEvent = function ( el, event, callback ) {
-               var orig;
-               if ( hasOwn.call( specialEvents, event ) ) {
-                       // Replace jQuery's override with our own
-                       orig = $.event.special[event];
-                       $.event.special[event] = specialEvents[event];
-
-                       $( el ).off( event, callback );
-
-                       // Restore
-                       $.event.special[event] = orig;
-               } else {
-                       $( el ).off( event, callback );
-               }
+               $( el ).off( event, callback );
        };
 }() );
 /**
@@ -743,8 +687,7 @@ OO.ui.Frame = function OoUiFrame( config ) {
        OO.EventEmitter.call( this );
 
        // Properties
-       this.loading = false;
-       this.loaded = false;
+       this.loading = null;
        this.config = config;
 
        // Initialize
@@ -780,10 +723,10 @@ OO.ui.Frame.static.tagName = 'iframe';
  *
  * This loops over the style sheets in the parent document, and copies their nodes to the
  * frame's document. It then polls the document to see when all styles have loaded, and once they
- * have, invokes the callback.
+ * have, resolves the promise.
  *
  * If the styles still haven't loaded after a long time (5 seconds by default), we give up waiting
- * and invoke the callback anyway. This protects against cases like a display: none; iframe in
+ * and resolve the promise anyway. This protects against cases like a display: none; iframe in
  * Firefox, where the styles won't load until the iframe becomes visible.
  *
  * For details of how we arrived at the strategy used in this function, see #load.
@@ -792,18 +735,19 @@ OO.ui.Frame.static.tagName = 'iframe';
  * @inheritable
  * @param {HTMLDocument} parentDoc Document to transplant styles from
  * @param {HTMLDocument} frameDoc Document to transplant styles to
- * @param {Function} [callback] Callback to execute once styles have loaded
  * @param {number} [timeout=5000] How long to wait before giving up (in ms). If 0, never give up.
+ * @return {jQuery.Promise} Promise resolved when styles have loaded
  */
-OO.ui.Frame.static.transplantStyles = function ( parentDoc, frameDoc, callback, timeout ) {
+OO.ui.Frame.static.transplantStyles = function ( parentDoc, frameDoc, timeout ) {
        var i, numSheets, styleNode, newNode, timeoutID, pollNodeId, $pendingPollNodes,
                $pollNodes = $( [] ),
                // Fake font-family value
-               fontFamily = 'oo-ui-frame-transplantStyles-loaded';
+               fontFamily = 'oo-ui-frame-transplantStyles-loaded',
+               deferred = $.Deferred();
 
        for ( i = 0, numSheets = parentDoc.styleSheets.length; i < numSheets; i++ ) {
                styleNode = parentDoc.styleSheets[i].ownerNode;
-               if ( callback && styleNode.nodeName.toLowerCase() === 'link' ) {
+               if ( styleNode.nodeName.toLowerCase() === 'link' ) {
                        // External stylesheet
                        // Create a node with a unique ID that we're going to monitor to see when the CSS
                        // has loaded
@@ -825,40 +769,40 @@ OO.ui.Frame.static.transplantStyles = function ( parentDoc, frameDoc, callback,
                frameDoc.head.appendChild( newNode );
        }
 
-       if ( callback ) {
-               // Poll every 100ms until all external stylesheets have loaded
-               $pendingPollNodes = $pollNodes;
-               timeoutID = setTimeout( function pollExternalStylesheets() {
-                       while (
-                               $pendingPollNodes.length > 0 &&
-                               $pendingPollNodes.eq( 0 ).css( 'font-family' ) === fontFamily
-                       ) {
-                               $pendingPollNodes = $pendingPollNodes.slice( 1 );
-                       }
+       // Poll every 100ms until all external stylesheets have loaded
+       $pendingPollNodes = $pollNodes;
+       timeoutID = setTimeout( function pollExternalStylesheets() {
+               while (
+                       $pendingPollNodes.length > 0 &&
+                       $pendingPollNodes.eq( 0 ).css( 'font-family' ) === fontFamily
+               ) {
+                       $pendingPollNodes = $pendingPollNodes.slice( 1 );
+               }
 
-                       if ( $pendingPollNodes.length === 0 ) {
-                               // We're done!
-                               if ( timeoutID !== null ) {
-                                       timeoutID = null;
-                                       $pollNodes.remove();
-                                       callback();
-                               }
-                       } else {
-                               timeoutID = setTimeout( pollExternalStylesheets, 100 );
+               if ( $pendingPollNodes.length === 0 ) {
+                       // We're done!
+                       if ( timeoutID !== null ) {
+                               timeoutID = null;
+                               $pollNodes.remove();
+                               deferred.resolve();
                        }
-               }, 100 );
-               // ...but give up after a while
-               if ( timeout !== 0 ) {
-                       setTimeout( function () {
-                               if ( timeoutID ) {
-                                       clearTimeout( timeoutID );
-                                       timeoutID = null;
-                                       $pollNodes.remove();
-                                       callback();
-                               }
-                       }, timeout || 5000 );
+               } else {
+                       timeoutID = setTimeout( pollExternalStylesheets, 100 );
                }
+       }, 100 );
+       // ...but give up after a while
+       if ( timeout !== 0 ) {
+               setTimeout( function () {
+                       if ( timeoutID ) {
+                               clearTimeout( timeoutID );
+                               timeoutID = null;
+                               $pollNodes.remove();
+                               deferred.reject();
+                       }
+               }, timeout || 5000 );
        }
+
+       return deferred.promise();
 };
 
 /* Methods */
@@ -866,7 +810,10 @@ OO.ui.Frame.static.transplantStyles = function ( parentDoc, frameDoc, callback,
 /**
  * Load the frame contents.
  *
- * Once the iframe's stylesheets are loaded, the `initialize` event will be emitted.
+ * Once the iframe's stylesheets are loaded, the `load` event will be emitted and the returned
+ * promise will be resolved. Calling while loading will return a promise but not trigger a new
+ * loading cycle. Calling after loading is complete will return a promise that's already been
+ * resolved.
  *
  * Sounds simple right? Read on...
  *
@@ -894,18 +841,25 @@ OO.ui.Frame.static.transplantStyles = function ( parentDoc, frameDoc, callback,
  *
  * All this stylesheet injection and polling magic is in #transplantStyles.
  *
- * @private
+ * @return {jQuery.Promise} Promise resolved when loading is complete
  * @fires load
  */
 OO.ui.Frame.prototype.load = function () {
-       var win = this.$element.prop( 'contentWindow' ),
-               doc = win.document,
-               frame = this;
+       var win, doc;
 
-       this.loading = true;
+       // Return existing promise if already loading or loaded
+       if ( this.loading ) {
+               return this.loading.promise();
+       }
+
+       // Load the frame
+       this.loading = $.Deferred();
+
+       win = this.$element.prop( 'contentWindow' );
+       doc = win.document;
 
        // Figure out directionality:
-       this.dir = this.$element.closest( '[dir]' ).prop( 'dir' ) || 'ltr';
+       this.dir = OO.ui.Element.getDir( this.$element ) || 'ltr';
 
        // Initialize contents
        doc.open();
@@ -924,37 +878,14 @@ OO.ui.Frame.prototype.load = function () {
        this.$content = this.$( '.oo-ui-frame-content' ).attr( 'tabIndex', 0 );
        this.$document = this.$( doc );
 
-       this.constructor.static.transplantStyles(
-               this.getElementDocument(),
-               this.$document[0],
-               function () {
-                       frame.loading = false;
-                       frame.loaded = true;
-                       frame.emit( 'load' );
-               }
-       );
-};
+       // Initialization
+       this.constructor.static.transplantStyles( this.getElementDocument(), this.$document[0] )
+               .always( OO.ui.bind( function () {
+                       this.emit( 'load' );
+                       this.loading.resolve();
+               }, this ) );
 
-/**
- * Run a callback as soon as the frame has been loaded.
- *
- *
- * This will start loading if it hasn't already, and runs
- * immediately if the frame is already loaded.
- *
- * Don't call this until the element is attached.
- *
- * @param {Function} callback
- */
-OO.ui.Frame.prototype.run = function ( callback ) {
-       if ( this.loaded ) {
-               callback();
-       } else {
-               if ( !this.loading ) {
-                       this.load();
-               }
-               this.once( 'load', callback );
-       }
+       return this.loading.promise();
 };
 
 /**
@@ -986,6 +917,7 @@ OO.ui.Frame.prototype.setSize = function ( width, height ) {
  * @fires initialize
  */
 OO.ui.Window = function OoUiWindow( config ) {
+       var element = this;
        // Parent constructor
        OO.ui.Window.super.call( this, config );
 
@@ -994,8 +926,9 @@ OO.ui.Window = function OoUiWindow( config ) {
 
        // Properties
        this.visible = false;
-       this.opening = false;
-       this.closing = false;
+       this.opening = null;
+       this.closing = null;
+       this.opened = null;
        this.title = OO.ui.resolveMsg( config.title || this.constructor.static.title );
        this.icon = config.icon || this.constructor.static.icon;
        this.frame = new OO.ui.Frame( { '$': this.$ } );
@@ -1016,7 +949,14 @@ OO.ui.Window = function OoUiWindow( config ) {
                .append( this.frame.$element );
 
        // Events
-       this.frame.connect( this, { 'load': 'initialize' } );
+       this.frame.on( 'load', function () {
+               element.initialize();
+               // Undo the visibility: hidden; hack and apply display: none;
+               // We can do this safely now that the iframe has initialized
+               // (don't do this from within #initialize because it has to happen
+               // after the all subclasses have been handled as well).
+               element.$element.hide().css( 'visibility', '' );
+       } );
 };
 
 /* Setup */
@@ -1027,28 +967,29 @@ OO.mixinClass( OO.ui.Window, OO.EventEmitter );
 /* Events */
 
 /**
- * Initialize contents.
+ * Window is setup.
  *
- * Fired asynchronously after construction when iframe is ready.
+ * Fired after the setup process has been executed.
  *
- * @event initialize
+ * @event setup
+ * @param {Object} data Window opening data
  */
 
 /**
- * Open window.
+ * Window is ready.
  *
- * Fired after window has been opened.
+ * Fired after the ready process has been executed.
  *
- * @event open
+ * @event ready
  * @param {Object} data Window opening data
  */
 
 /**
- * Close window.
+ * Window is torn down
  *
- * Fired after window has been closed.
+ * Fired after the teardown process has been executed.
  *
- * @event close
+ * @event teardown
  * @param {Object} data Window closing data
  */
 
@@ -1093,7 +1034,7 @@ OO.ui.Window.prototype.isVisible = function () {
  * @return {boolean} Window is opening
  */
 OO.ui.Window.prototype.isOpening = function () {
-       return this.opening;
+       return !!this.opening && this.opening.state() === 'pending';
 };
 
 /**
@@ -1102,7 +1043,16 @@ OO.ui.Window.prototype.isOpening = function () {
  * @return {boolean} Window is closing
  */
 OO.ui.Window.prototype.isClosing = function () {
-       return this.closing;
+       return !!this.closing && this.closing.state() === 'pending';
+};
+
+/**
+ * Check if window is opened.
+ *
+ * @return {boolean} Window is opened
+ */
+OO.ui.Window.prototype.isOpened = function () {
+       return !!this.opened && this.opened.state() === 'pending';
 };
 
 /**
@@ -1238,7 +1188,6 @@ OO.ui.Window.prototype.fitWidthToContents = function ( min, max ) {
  *
  * Once this method is called, this.$$ can be used to create elements within the frame.
  *
- * @fires initialize
  * @chainable
  */
 OO.ui.Window.prototype.initialize = function () {
@@ -1261,103 +1210,160 @@ OO.ui.Window.prototype.initialize = function () {
                this.$overlay
        );
 
-       // Undo the visibility: hidden; hack from the constructor and apply display: none;
-       // We can do this safely now that the iframe has initialized
-       this.$element.hide().css( 'visibility', '' );
-
-       this.emit( 'initialize' );
-
        return this;
 };
 
 /**
- * Setup window for use.
+ * Get a process for setting up a window for use.
  *
- * Each time the window is opened, once it's ready to be interacted with, this will set it up for
- * use in a particular context, based on the `data` argument.
+ * Each time the window is opened this process will set it up for use in a particular context, based
+ * on the `data` argument.
  *
- * When you override this method, you must call the parent method at the very beginning.
+ * When you override this method, you can add additional setup steps to the process the parent
+ * method provides using the 'first' and 'next' methods.
  *
  * @abstract
  * @param {Object} [data] Window opening data
+ * @return {OO.ui.Process} Setup process
  */
-OO.ui.Window.prototype.setup = function () {
-       // Override to do something
+OO.ui.Window.prototype.getSetupProcess = function () {
+       return new OO.ui.Process();
 };
 
 /**
- * Tear down window after use.
+ * Get a process for readying a window for use.
  *
- * Each time the window is closed, and it's done being interacted with, this will tear it down and
- * do something with the user's interactions within the window, based on the `data` argument.
+ * Each time the window is open and setup, this process will ready it up for use in a particular
+ * context, based on the `data` argument.
  *
- * When you override this method, you must call the parent method at the very end.
+ * When you override this method, you can add additional setup steps to the process the parent
+ * method provides using the 'first' and 'next' methods.
+ *
+ * @abstract
+ * @param {Object} [data] Window opening data
+ * @return {OO.ui.Process} Setup process
+ */
+OO.ui.Window.prototype.getReadyProcess = function () {
+       return new OO.ui.Process();
+};
+
+/**
+ * Get a process for tearing down a window after use.
+ *
+ * Each time the window is closed this process will tear it down and do something with the user's
+ * interactions within the window, based on the `data` argument.
+ *
+ * When you override this method, you can add additional teardown steps to the process the parent
+ * method provides using the 'first' and 'next' methods.
  *
  * @abstract
  * @param {Object} [data] Window closing data
+ * @return {OO.ui.Process} Teardown process
  */
-OO.ui.Window.prototype.teardown = function () {
-       // Override to do something
+OO.ui.Window.prototype.getTeardownProcess = function () {
+       return new OO.ui.Process();
 };
 
 /**
  * Open window.
  *
- * Do not override this method. See #setup for a way to make changes each time the window opens.
+ * Do not override this method. Use #getSetupProcess to do something each time the window closes.
  *
  * @param {Object} [data] Window opening data
+ * @fires initialize
  * @fires opening
  * @fires open
  * @fires ready
- * @chainable
+ * @return {jQuery.Promise} Promise resolved when window is opened; when the promise is resolved the
+ *   first argument will be a promise which will be resolved when the window begins closing
  */
 OO.ui.Window.prototype.open = function ( data ) {
-       if ( !this.opening && !this.closing && !this.visible ) {
-               this.opening = true;
-               this.frame.run( OO.ui.bind( function () {
-                       this.$element.show();
-                       this.visible = true;
-                       this.emit( 'opening', data );
-                       this.setup( data );
-                       this.emit( 'open', data );
+       // Return existing promise if already opening or open
+       if ( this.opening ) {
+               return this.opening.promise();
+       }
+
+       // Open the window
+       this.opening = $.Deferred();
+
+       // So we can restore focus on closing
+       this.$prevFocus = $( document.activeElement );
+
+       this.frame.load().done( OO.ui.bind( function () {
+               this.$element.show();
+               this.visible = true;
+               this.getSetupProcess( data ).execute().done( OO.ui.bind( function () {
+                       this.$element.addClass( 'oo-ui-window-setup' );
+                       this.emit( 'setup', data );
                        setTimeout( OO.ui.bind( function () {
-                               // Focus the content div (which has a tabIndex) to inactivate
-                               // (but not clear) selections in the parent frame.
-                               // Must happen after 'open' is emitted (to ensure it is visible)
-                               // but before 'ready' is emitted (so subclasses can give focus to something else)
                                this.frame.$content.focus();
-                               this.emit( 'ready', data );
-                               this.opening = false;
+                               this.getReadyProcess( data ).execute().done( OO.ui.bind( function () {
+                                       this.$element.addClass( 'oo-ui-window-ready' );
+                                       this.emit( 'ready', data );
+                                       this.opened = $.Deferred();
+                                       // Now that we are totally done opening, it's safe to allow closing
+                                       this.closing = null;
+                                       this.opening.resolve( this.opened.promise() );
+                               }, this ) );
                        }, this ) );
                }, this ) );
-       }
+       }, this ) );
 
-       return this;
+       return this.opening.promise();
 };
 
 /**
  * Close window.
  *
- * See #teardown for a way to do something each time the window closes.
+ * Do not override this method. Use #getTeardownProcess to do something each time the window closes.
  *
  * @param {Object} [data] Window closing data
  * @fires closing
  * @fires close
- * @chainable
+ * @return {jQuery.Promise} Promise resolved when window is closed
  */
 OO.ui.Window.prototype.close = function ( data ) {
-       if ( !this.opening && !this.closing && this.visible ) {
-               this.frame.$content.find( ':focus' ).blur();
-               this.closing = true;
+       var close;
+
+       // Return existing promise if already closing or closed
+       if ( this.closing ) {
+               return this.closing.promise();
+       }
+
+       // Close after opening is done if opening is in progress
+       if ( this.opening && this.opening.state() === 'pending' ) {
+               close = OO.ui.bind( function () {
+                       return this.close( data );
+               }, this );
+               return this.opening.then( close, close );
+       }
+
+       // Close the window
+       // This.closing needs to exist before we emit the closing event so that handlers can call
+       // window.close() and trigger the safety check above
+       this.closing = $.Deferred();
+       this.frame.$content.find( ':focus' ).blur();
+       this.$element.removeClass( 'oo-ui-window-ready' );
+       this.getTeardownProcess( data ).execute().done( OO.ui.bind( function () {
+               this.$element.removeClass( 'oo-ui-window-setup' );
+               this.emit( 'teardown', data );
+               // To do something different with #opened, resolve/reject #opened in the teardown process
+               if ( this.opened && this.opened.state() === 'pending' ) {
+                       this.opened.resolve();
+               }
                this.$element.hide();
+               // Restore focus to whatever was focused before opening
+               if ( this.$prevFocus ) {
+                       this.$prevFocus.focus();
+                       this.$prevFocus = undefined;
+               }
                this.visible = false;
-               this.emit( 'closing', data );
-               this.teardown( data );
-               this.emit( 'close', data );
-               this.closing = false;
-       }
+               this.closing.resolve();
+               // Now that we are totally done closing, it's safe to allow opening
+               this.opening = null;
+       }, this ) );
 
-       return this;
+       return this.closing.promise();
 };
 /**
  * Set of mutually exclusive windows.
@@ -1407,78 +1413,61 @@ OO.mixinClass( OO.ui.WindowSet, OO.EventEmitter );
 /* Events */
 
 /**
- * @event opening
- * @param {OO.ui.Window} win Window that's being opened
+ * @event setup
+ * @param {OO.ui.Window} win Window that's been setup
  * @param {Object} config Window opening information
  */
 
 /**
- * @event open
- * @param {OO.ui.Window} win Window that's been opened
+ * @event ready
+ * @param {OO.ui.Window} win Window that's ready
  * @param {Object} config Window opening information
  */
 
 /**
- * @event closing
- * @param {OO.ui.Window} win Window that's being closed
- * @param {Object} config Window closing information
- */
-
-/**
- * @event close
- * @param {OO.ui.Window} win Window that's been closed
+ * @event teardown
+ * @param {OO.ui.Window} win Window that's been torn down
  * @param {Object} config Window closing information
  */
 
 /* Methods */
 
 /**
- * Handle a window that's being opened.
+ * Handle a window setup event.
  *
- * @param {OO.ui.Window} win Window that's being opened
+ * @param {OO.ui.Window} win Window that's been setup
  * @param {Object} [config] Window opening information
- * @fires opening
+ * @fires setup
  */
-OO.ui.WindowSet.prototype.onWindowOpening = function ( win, config ) {
+OO.ui.WindowSet.prototype.onWindowSetup = function ( win, config ) {
        if ( this.currentWindow && this.currentWindow !== win ) {
                this.currentWindow.close();
        }
        this.currentWindow = win;
-       this.emit( 'opening', win, config );
+       this.emit( 'setup', win, config );
 };
 
 /**
- * Handle a window that's been opened.
+ * Handle a window ready event.
  *
- * @param {OO.ui.Window} win Window that's been opened
+ * @param {OO.ui.Window} win Window that's ready
  * @param {Object} [config] Window opening information
- * @fires open
+ * @fires ready
  */
-OO.ui.WindowSet.prototype.onWindowOpen = function ( win, config ) {
-       this.emit( 'open', win, config );
+OO.ui.WindowSet.prototype.onWindowReady = function ( win, config ) {
+       this.emit( 'ready', win, config );
 };
 
 /**
- * Handle a window that's being closed.
+ * Handle a window teardown event.
  *
- * @param {OO.ui.Window} win Window that's being closed
+ * @param {OO.ui.Window} win Window that's been torn down
  * @param {Object} [config] Window closing information
- * @fires closing
+ * @fires teardown
  */
-OO.ui.WindowSet.prototype.onWindowClosing = function ( win, config ) {
+OO.ui.WindowSet.prototype.onWindowTeardown = function ( win, config ) {
        this.currentWindow = null;
-       this.emit( 'closing', win, config );
-};
-
-/**
- * Handle a window that's been closed.
- *
- * @param {OO.ui.Window} win Window that's been closed
- * @param {Object} [config] Window closing information
- * @fires close
- */
-OO.ui.WindowSet.prototype.onWindowClose = function ( win, config ) {
-       this.emit( 'close', win, config );
+       this.emit( 'teardown', win, config );
 };
 
 /**
@@ -1525,7 +1514,7 @@ OO.ui.WindowSet.prototype.createWindow = function ( name ) {
  * Connects event handlers and attaches it to the DOM. Calling
  * OO.ui.Window#open will not work until the window is added to the set.
  *
- * @param {OO.ui.Window} win
+ * @param {OO.ui.Window} win Window to add
  */
 OO.ui.WindowSet.prototype.addWindow = function ( win ) {
        if ( this.windowList.indexOf( win ) !== -1 ) {
@@ -1535,10 +1524,9 @@ OO.ui.WindowSet.prototype.addWindow = function ( win ) {
        this.windowList.push( win );
 
        win.connect( this, {
-               'opening': [ 'onWindowOpening', win ],
-               'open': [ 'onWindowOpen', win ],
-               'closing': [ 'onWindowClosing', win ],
-               'close': [ 'onWindowClose', win ]
+               'setup': [ 'onWindowSetup', win ],
+               'ready': [ 'onWindowReady', win ],
+               'teardown': [ 'onWindowTeardown', win ]
        } );
        this.$element.append( win.$element );
 };
@@ -1571,10 +1559,9 @@ OO.ui.Dialog = function OoUiDialog( config ) {
 
        // Events
        this.$element.on( 'mousedown', false );
-       this.connect( this, { 'opening': 'onOpening' } );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-dialog' );
+       this.$element.addClass( 'oo-ui-dialog' ).attr( 'role', 'dialog' );
        this.setSize( config.size );
 };
 
@@ -1657,11 +1644,6 @@ OO.ui.Dialog.prototype.onFrameDocumentKeyDown = function ( e ) {
        }
 };
 
-/** */
-OO.ui.Dialog.prototype.onOpening = function () {
-       this.$element.addClass( 'oo-ui-dialog-open' );
-};
-
 /**
  * Set dialog size.
  *
@@ -1679,9 +1661,6 @@ OO.ui.Dialog.prototype.setSize = function ( size ) {
                state = name === size;
                cssClass = sizeCssClasses[name];
                this.$element.toggleClass( cssClass, state );
-               if ( this.frame.$content ) {
-                       this.frame.$content.toggleClass( cssClass, state );
-               }
        }
 };
 
@@ -1690,7 +1669,7 @@ OO.ui.Dialog.prototype.setSize = function ( size ) {
  */
 OO.ui.Dialog.prototype.initialize = function () {
        // Parent method
-       OO.ui.Window.prototype.initialize.call( this );
+       OO.ui.Dialog.super.prototype.initialize.call( this );
 
        // Properties
        this.closeButton = new OO.ui.ButtonWidget( {
@@ -1716,41 +1695,29 @@ OO.ui.Dialog.prototype.initialize = function () {
 /**
  * @inheritdoc
  */
-OO.ui.Dialog.prototype.setup = function ( data ) {
-       // Parent method
-       OO.ui.Window.prototype.setup.call( this, data );
-
-       // Prevent scrolling in top-level window
-       this.$( window ).on( 'mousewheel', this.onWindowMouseWheelHandler );
-       this.$( document ).on( 'keydown', this.onDocumentKeyDownHandler );
-};
-
-/**
- * @inheritdoc
- */
-OO.ui.Dialog.prototype.teardown = function ( data ) {
-       // Parent method
-       OO.ui.Window.prototype.teardown.call( this, data );
-
-       // Allow scrolling in top-level window
-       this.$( window ).off( 'mousewheel', this.onWindowMouseWheelHandler );
-       this.$( document ).off( 'keydown', this.onDocumentKeyDownHandler );
+OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
+       return OO.ui.Dialog.super.prototype.getSetupProcess.call( this, data )
+               .next( function () {
+                       // Prevent scrolling in top-level window
+                       this.$( window ).on( 'mousewheel', this.onWindowMouseWheelHandler );
+                       this.$( document ).on( 'keydown', this.onDocumentKeyDownHandler );
+               }, this );
 };
 
 /**
  * @inheritdoc
  */
-OO.ui.Dialog.prototype.close = function ( data ) {
-       var dialog = this;
-       if ( !dialog.opening && !dialog.closing && dialog.visible ) {
-               // Trigger transition
-               dialog.$element.removeClass( 'oo-ui-dialog-open' );
-               // Allow transition to complete before actually closing
-               setTimeout( function () {
-                       // Parent method
-                       OO.ui.Window.prototype.close.call( dialog, data );
-               }, 250 );
-       }
+OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
+       return OO.ui.Dialog.super.prototype.getTeardownProcess.call( this, data )
+               .first( function () {
+                       // Wait for closing transition
+                       return OO.ui.Process.static.delay( 250 );
+               }, this )
+               .next( function () {
+                       // Allow scrolling in top-level window
+                       this.$( window ).off( 'mousewheel', this.onWindowMouseWheelHandler );
+                       this.$( document ).off( 'keydown', this.onDocumentKeyDownHandler );
+               }, this );
 };
 
 /**
@@ -1909,6 +1876,122 @@ OO.ui.Widget.prototype.setDisabled = function ( disabled ) {
        this.wasDisabled = isDisabled;
        return this;
 };
+/**
+ * A list of functions, called in sequence.
+ *
+ * If a function added to a process returns boolean false the process will stop; if it returns an
+ * object with a `promise` method the process will use the promise to either continue to the next
+ * step when the promise is resolved or stop when the promise is rejected.
+ *
+ * @class
+ *
+ * @constructor
+ */
+OO.ui.Process = function () {
+       // Properties
+       this.steps = [];
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.Process );
+
+/* Static Methods */
+
+/**
+ * Generate a promise which is resolved after a set amount of time.
+ *
+ * @param {number} length Number of milliseconds before resolving the promise
+ * @return {jQuery.Promise} Promise that will be resolved after a set amount of time
+ */
+OO.ui.Process.static.delay = function ( length ) {
+       var deferred = $.Deferred();
+
+       setTimeout( function () {
+               deferred.resolve();
+       }, length );
+
+       return deferred.promise();
+};
+
+/* Methods */
+
+/**
+ * Start the process.
+ *
+ * @return {jQuery.Promise} Promise that is resolved when all steps have completed or rejected when
+ *   any of the steps return boolean false or a promise which gets rejected; upon stopping the
+ *   process, the remaining steps will not be taken
+ */
+OO.ui.Process.prototype.execute = function () {
+       var i, len, promise;
+
+       /**
+        * Continue execution.
+        *
+        * @ignore
+        * @param {Array} step A function and the context it should be called in
+        * @return {Function} Function that continues the process
+        */
+       function proceed( step ) {
+               return function () {
+                       // Execute step in the correct context
+                       var result = step[0].call( step[1] );
+
+                       if ( result === false ) {
+                               // Use rejected promise for boolean false results
+                               return $.Deferred().reject().promise();
+                       }
+                       // Duck-type the object to see if it can produce a promise
+                       if ( result && $.isFunction( result.promise ) ) {
+                               // Use a promise generated from the result
+                               return result.promise();
+                       }
+                       // Use resolved promise for other results
+                       return $.Deferred().resolve().promise();
+               };
+       }
+
+       if ( this.steps.length ) {
+               // Generate a chain reaction of promises
+               promise = proceed( this.steps[0] )();
+               for ( i = 1, len = this.steps.length; i < len; i++ ) {
+                       promise = promise.then( proceed( this.steps[i] ) );
+               }
+       } else {
+               promise = $.Deferred().resolve().promise();
+       }
+
+       return promise;
+};
+
+/**
+ * Add step to the beginning of the process.
+ *
+ * @param {Function} step Function to execute; if it returns boolean false the process will stop; if
+ *   it returns an object with a `promise` method the process will use the promise to either
+ *   continue to the next step when the promise is resolved or stop when the promise is rejected
+ * @param {Object} [context=null] Context to call the step function in
+ * @chainable
+ */
+OO.ui.Process.prototype.first = function ( step, context ) {
+       this.steps.unshift( [ step, context || null ] );
+       return this;
+};
+
+/**
+ * Add step to the end of the process.
+ *
+ * @param {Function} step Function to execute; if it returns boolean false the process will stop; if
+ *   it returns an object with a `promise` method the process will use the promise to either
+ *   continue to the next step when the promise is resolved or stop when the promise is rejected
+ * @param {Object} [context=null] Context to call the step function in
+ * @chainable
+ */
+OO.ui.Process.prototype.next = function ( step, context ) {
+       this.steps.push( [ step, context || null ] );
+       return this;
+};
 /**
  * Dialog for showing a confirmation/warning message.
  *
@@ -1955,15 +2038,11 @@ OO.ui.ConfirmationDialog.prototype.initialize = function () {
 
        this.$promptContainer = this.$( '<div>' ).addClass( 'oo-ui-dialog-confirm-promptContainer' );
 
-       this.cancelButton = new OO.ui.ButtonWidget( {
-               'flags': [ 'destructive' ]
-       } );
-       this.cancelButton.connect( this, { 'click': [ 'emit', 'cancel' ] } );
+       this.cancelButton = new OO.ui.ButtonWidget();
+       this.cancelButton.connect( this, { 'click': [ 'close', 'cancel' ] } );
 
-       this.okButton = new OO.ui.ButtonWidget( {
-               'flags': [ 'constructive' ]
-       } );
-       this.okButton.connect( this, { 'click': [ 'emit', 'ok' ] } );
+       this.okButton = new OO.ui.ButtonWidget();
+       this.okButton.connect( this, { 'click': [ 'close', 'ok' ] } );
 
        // Make the buttons
        contentLayout.$element.append( this.$promptContainer );
@@ -1974,37 +2053,54 @@ OO.ui.ConfirmationDialog.prototype.initialize = function () {
                this.cancelButton.$element
        );
 
-       this.connect( this, {
-               'ok': 'close',
-               'cancel': 'close',
-               'close': [ 'emit', 'cancel' ]
-       } );
+       this.connect( this, { 'teardown': [ 'close', 'cancel' ] } );
 };
 
 /*
- * Open a confirmation dialog.
+ * Setup a confirmation dialog.
  *
- * @param {object} [data] Window opening data including text of the dialog and text for the buttons
- * @param {jQuery|string} [data.prompt] The text of the dialog.
- * @param {jQuery|string|Function|null} [data.okLabel] The text used on the OK button
- * @param {jQuery|string|Function|null} [data.cancelLabel] The text used on the cancel button
+ * @param {Object} [data] Window opening data including text of the dialog and text for the buttons
+ * @param {jQuery|string} [data.prompt] Text to display or list of nodes to use as content of the dialog.
+ * @param {jQuery|string|Function|null} [data.okLabel] Label of the OK button
+ * @param {jQuery|string|Function|null} [data.cancelLabel] Label of the cancel button
+ * @param {string|string[]} [data.okFlags="constructive"] Flags for the OK button
+ * @param {string|string[]} [data.cancelFlags="destructive"] Flags for the cancel button
+ * @return {OO.ui.Process} Setup process
  */
-OO.ui.ConfirmationDialog.prototype.setup = function ( data ) {
+OO.ui.ConfirmationDialog.prototype.getSetupProcess = function ( data ) {
        // Parent method
-       OO.ui.Dialog.prototype.setup.call( this, data );
-
-       var prompt = data.prompt || OO.ui.deferMsg( 'ooui-dialog-confirm-default-prompt' ),
-               okLabel = data.okLabel || OO.ui.deferMsg( 'ooui-dialog-confirm-default-ok' ),
-               cancelLabel = data.cancelLabel || OO.ui.deferMsg( 'ooui-dialog-confirm-default-cancel' );
+       return OO.ui.ConfirmationDialog.super.prototype.getSetupProcess.call( this, data )
+               .next( function () {
+                       var prompt = data.prompt || OO.ui.deferMsg( 'ooui-dialog-confirm-default-prompt' ),
+                               okLabel = data.okLabel || OO.ui.deferMsg( 'ooui-dialog-confirm-default-ok' ),
+                               cancelLabel = data.cancelLabel || OO.ui.deferMsg( 'ooui-dialog-confirm-default-cancel' ),
+                               okFlags = data.okFlags || 'constructive',
+                               cancelFlags = data.cancelFlags || 'destructive';
+
+                       if ( typeof prompt === 'string' ) {
+                               this.$promptContainer.text( prompt );
+                       } else {
+                               this.$promptContainer.empty().append( prompt );
+                       }
 
-       if ( typeof prompt === 'string' ) {
-               this.$promptContainer.text( prompt );
-       } else {
-               this.$promptContainer.empty().append( prompt );
-       }
+                       this.okButton.setLabel( okLabel ).clearFlags().setFlags( okFlags );
+                       this.cancelButton.setLabel( cancelLabel ).clearFlags().setFlags( cancelFlags );
+               }, this );
+};
 
-       this.okButton.setLabel( okLabel );
-       this.cancelButton.setLabel( cancelLabel );
+/**
+ * @inheritdoc
+ */
+OO.ui.ConfirmationDialog.prototype.getTeardownProcess = function ( data ) {
+       // Parent method
+       return OO.ui.ConfirmationDialog.super.prototype.getTeardownProcess.call( this, data )
+               .first( function () {
+                       if ( data === 'ok' ) {
+                               this.opened.resolve();
+                       } else if ( data === 'cancel' ) {
+                               this.opened.reject();
+                       }
+               }, this );
 };
 /**
  * Element with a button.
@@ -2044,6 +2140,21 @@ OO.ui.ButtonedElement = function OoUiButtonedElement( $button, config ) {
        }
 };
 
+/* Setup */
+
+OO.initClass( OO.ui.ButtonedElement );
+
+/* Static Properties */
+
+/**
+ * Cancel mouse down events.
+ *
+ * @static
+ * @inheritable
+ * @property {boolean}
+ */
+OO.ui.ButtonedElement.static.cancelButtonMouseDownEvents = true;
+
 /* Methods */
 
 /**
@@ -2055,16 +2166,20 @@ OO.ui.ButtonedElement.prototype.onMouseDown = function ( e ) {
        if ( this.isDisabled() || e.which !== 1 ) {
                return false;
        }
-       // tabIndex should generally be interacted with via the property,
-       // but it's not possible to reliably unset a tabIndex via a property
-       // so we use the (lowercase) "tabindex" attribute instead.
+       // tabIndex should generally be interacted with via the property, but it's not possible to
+       // reliably unset a tabIndex via a property so we use the (lowercase) "tabindex" attribute
        this.tabIndex = this.$button.attr( 'tabindex' );
-       // Remove the tab-index while the button is down to prevent the button from stealing focus
        this.$button
+               // Remove the tab-index while the button is down to prevent the button from stealing focus
                .removeAttr( 'tabindex' )
                .addClass( 'oo-ui-buttonedElement-pressed' );
+       // Run the mouseup handler no matter where the mouse is when the button is let go, so we can
+       // reliably reapply the tabindex and remove the pressed class
        this.getElementDocument().addEventListener( 'mouseup', this.onMouseUpHandler, true );
-       return false;
+       // Prevent change of focus unless specifically configured otherwise
+       if ( this.constructor.static.cancelButtonMouseDownEvents ) {
+               return false;
+       }
 };
 
 /**
@@ -2076,10 +2191,11 @@ OO.ui.ButtonedElement.prototype.onMouseUp = function ( e ) {
        if ( this.isDisabled() || e.which !== 1 ) {
                return false;
        }
-       // Restore the tab-index after the button is up to restore the button's accesssibility
        this.$button
+               // Restore the tab-index after the button is up to restore the button's accesssibility
                .attr( 'tabindex', this.tabIndex )
                .removeClass( 'oo-ui-buttonedElement-pressed' );
+       // Stop listening for mouseup, since we only needed this once
        this.getElementDocument().removeEventListener( 'mouseup', this.onMouseUpHandler, true );
 };
 
@@ -2297,15 +2413,19 @@ OO.ui.FlaggableElement.prototype.clearFlags = function () {
 /**
  * Add one or more flags.
  *
- * @param {string[]|Object.<string, boolean>} flags List of flags to add, or list of set/remove
- *  values, keyed by flag name
+ * @param {string|string[]|Object.<string, boolean>} flags One or more flags to add, or an object
+ *  keyed by flag name containing boolean set/remove instructions.
  * @chainable
  */
 OO.ui.FlaggableElement.prototype.setFlags = function ( flags ) {
        var i, len, flag,
                classPrefix = 'oo-ui-flaggableElement-';
 
-       if ( $.isArray( flags ) ) {
+       if ( typeof flags === 'string' ) {
+               // Set
+               this.flags[flags] = true;
+               this.$element.addClass( classPrefix + flags );
+       } else if ( $.isArray( flags ) ) {
                for ( i = 0, len = flags.length; i < len; i++ ) {
                        flag = flags[i];
                        // Set
@@ -2344,7 +2464,6 @@ OO.ui.GroupElement = function OoUiGroupElement( $group, config ) {
        // Properties
        this.$group = $group;
        this.items = [];
-       this.$items = this.$( [] );
        this.aggregateItemEvents = {};
 };
 
@@ -2421,7 +2540,7 @@ OO.ui.GroupElement.prototype.aggregate = function ( events ) {
  */
 OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
        var i, len, item, event, events, currentIndex,
-               $items = this.$( [] );
+               itemElements = [];
 
        for ( i = 0, len = items.length; i < len; i++ ) {
                item = items[i];
@@ -2444,22 +2563,20 @@ OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
                        item.connect( this, events );
                }
                item.setElementGroup( this );
-               $items = $items.add( item.$element );
+               itemElements.push( item.$element.get( 0 ) );
        }
 
        if ( index === undefined || index < 0 || index >= this.items.length ) {
-               this.$group.append( $items );
+               this.$group.append( itemElements );
                this.items.push.apply( this.items, items );
        } else if ( index === 0 ) {
-               this.$group.prepend( $items );
+               this.$group.prepend( itemElements );
                this.items.unshift.apply( this.items, items );
        } else {
-               this.$items.eq( index ).before( $items );
+               this.items[index].$element.before( itemElements );
                this.items.splice.apply( this.items, [ index, 0 ].concat( items ) );
        }
 
-       this.$items = this.$items.add( $items );
-
        return this;
 };
 
@@ -2492,7 +2609,6 @@ OO.ui.GroupElement.prototype.removeItems = function ( items ) {
                        item.setElementGroup( null );
                        this.items.splice( index, 1 );
                        item.$element.detach();
-                       this.$items = this.$items.not( item.$element );
                }
        }
 
@@ -2523,11 +2639,10 @@ OO.ui.GroupElement.prototype.clearItems = function () {
                        item.disconnect( this, remove );
                }
                item.setElementGroup( null );
+               item.$element.detach();
        }
-       this.items = [];
-       this.$items.detach();
-       this.$items = this.$( [] );
 
+       this.items = [];
        return this;
 };
 /**
@@ -4066,14 +4181,14 @@ OO.ui.GridLayout = function OoUiGridLayout( panels, config ) {
                this.$element.append( panels[i].$element );
        }
        if ( config.widths || config.heights ) {
-               this.layout( config.widths || [1], config.heights || [1] );
+               this.layout( config.widths || [ 1 ], config.heights || [ 1 ] );
        } else {
                // Arrange in columns by default
                widths = [];
                for ( i = 0, len = this.panels.length; i < len; i++ ) {
                        widths[i] = 1;
                }
-               this.layout( widths, [1] );
+               this.layout( widths, [ 1 ] );
        }
 };
 
@@ -4205,7 +4320,6 @@ OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
  * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when changing to a page
  * @cfg {boolean} [outlined=false] Show an outline
  * @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages
- * @cfg {Object[]} [adders] List of adders for controls, each with name, icon and title properties
  */
 OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
        // Initialize configuration
@@ -4224,18 +4338,17 @@ OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
        this.outlined = !!config.outlined;
        if ( this.outlined ) {
                this.editable = !!config.editable;
-               this.adders = config.adders || null;
                this.outlineControlsWidget = null;
                this.outlineWidget = new OO.ui.OutlineWidget( { '$': this.$ } );
                this.outlinePanel = new OO.ui.PanelLayout( { '$': this.$, 'scrollable': true } );
                this.gridLayout = new OO.ui.GridLayout(
-                       [this.outlinePanel, this.stackLayout], { '$': this.$, 'widths': [1, 2] }
+                       [ this.outlinePanel, this.stackLayout ],
+                       { '$': this.$, 'widths': [ 1, 2 ] }
                );
                this.outlineVisible = true;
                if ( this.editable ) {
                        this.outlineControlsWidget = new OO.ui.OutlineControlsWidget(
-                               this.outlineWidget,
-                               { '$': this.$, 'adders': this.adders }
+                               this.outlineWidget, { '$': this.$ }
                        );
                }
        }
@@ -4784,7 +4897,7 @@ OO.mixinClass( OO.ui.StackLayout, OO.ui.GroupElement );
 
 /**
  * @event set
- * @param {OO.ui.Layout|null} [item] Current item
+ * @param {OO.ui.Layout|null} item Current item or null if there is no longer a layout shown
  */
 
 /* Methods */
@@ -4792,12 +4905,29 @@ OO.mixinClass( OO.ui.StackLayout, OO.ui.GroupElement );
 /**
  * Get the current item.
  *
- * @return {OO.ui.Layout|null} [description]
+ * @return {OO.ui.Layout|null}
  */
 OO.ui.StackLayout.prototype.getCurrentItem = function () {
        return this.currentItem;
 };
 
+/**
+ * Unset the current item.
+ *
+ * @private
+ * @param {OO.ui.StackLayout} layout
+ * @fires set
+ */
+OO.ui.StackLayout.prototype.unsetCurrentItem = function () {
+       var prevItem = this.currentItem;
+       if ( prevItem === null ) {
+               return;
+       }
+
+       this.currentItem = null;
+       this.emit( 'set', null );
+};
+
 /**
  * Add items.
  *
@@ -4808,6 +4938,7 @@ OO.ui.StackLayout.prototype.getCurrentItem = function () {
  * @chainable
  */
 OO.ui.StackLayout.prototype.addItems = function ( items, index ) {
+       // Mixin method
        OO.ui.GroupElement.prototype.addItems.call( this, items, index );
 
        if ( !this.currentItem && items.length ) {
@@ -4824,13 +4955,17 @@ OO.ui.StackLayout.prototype.addItems = function ( items, index ) {
  *
  * @param {OO.ui.Layout[]} items Items to remove
  * @chainable
+ * @fires set
  */
 OO.ui.StackLayout.prototype.removeItems = function ( items ) {
+       // Mixin method
        OO.ui.GroupElement.prototype.removeItems.call( this, items );
+
        if ( $.inArray( this.currentItem, items  ) !== -1 ) {
-               this.currentItem = null;
-               if ( !this.currentItem && this.items.length ) {
+               if ( this.items.length ) {
                        this.setItem( this.items[0] );
+               } else {
+                       this.unsetCurrentItem();
                }
        }
 
@@ -4843,9 +4978,10 @@ OO.ui.StackLayout.prototype.removeItems = function ( items ) {
  * Items will be detached, not removed, so they can be used later.
  *
  * @chainable
+ * @fires set
  */
 OO.ui.StackLayout.prototype.clearItems = function () {
-       this.currentItem = null;
+       this.unsetCurrentItem();
        OO.ui.GroupElement.prototype.clearItems.call( this );
 
        return this;
@@ -4856,23 +4992,31 @@ OO.ui.StackLayout.prototype.clearItems = function () {
  *
  * Any currently shown item will be hidden.
  *
+ * FIXME: If the passed item to show has not been added in the items list, then
+ * this method drops it and unsets the current item.
+ *
  * @param {OO.ui.Layout} item Item to show
  * @chainable
+ * @fires set
  */
 OO.ui.StackLayout.prototype.setItem = function ( item ) {
+       var i, len;
+
        if ( item !== this.currentItem ) {
                if ( !this.continuous ) {
-                       this.$items.css( 'display', '' );
+                       for ( i = 0, len = this.items.length; i < len; i++ ) {
+                               this.items[i].$element.css( 'display', '' );
+                       }
                }
                if ( $.inArray( item, this.items ) !== -1 ) {
                        if ( !this.continuous ) {
                                item.$element.css( 'display', 'block' );
                        }
+                       this.currentItem = item;
+                       this.emit( 'set', item );
                } else {
-                       item = null;
+                       this.unsetCurrentItem();
                }
-               this.currentItem = item;
-               this.emit( 'set', item );
        }
 
        return this;
@@ -4921,6 +5065,7 @@ OO.ui.BarToolGroup.static.name = 'bar';
  * @constructor
  * @param {OO.ui.Toolbar} toolbar
  * @param {Object} [config] Configuration options
+ * @cfg {string} [header] Text to display at the top of the pop-up
  */
 OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
        // Configuration initialization
@@ -4952,6 +5097,16 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
        this.$handle
                .addClass( 'oo-ui-popupToolGroup-handle' )
                .append( this.$icon, this.$label, this.$indicator );
+       // If the pop-up should have a header, add it to the top of the toolGroup.
+       // Note: If this feature is useful for other widgets, we could abstract it into an
+       // OO.ui.HeaderedElement mixin constructor.
+       if ( config.header !== undefined ) {
+               this.$group
+                       .prepend( this.$( '<span>' )
+                               .addClass( 'oo-ui-popupToolGroup-header' )
+                               .text( config.header )
+                       );
+       }
        this.$element
                .addClass( 'oo-ui-popupToolGroup' )
                .prepend( this.$handle );
@@ -5003,7 +5158,7 @@ OO.ui.PopupToolGroup.prototype.onMouseUp = function ( e ) {
        if ( !this.isDisabled() && e.which === 1 ) {
                this.setActive( false );
        }
-       return OO.ui.ToolGroup.prototype.onMouseUp.call( this, e );
+       return OO.ui.PopupToolGroup.super.prototype.onMouseUp.call( this, e );
 };
 
 /**
@@ -5223,8 +5378,7 @@ OO.ui.GroupWidget.prototype.setDisabled = function ( disabled ) {
        var i, len;
 
        // Parent method
-       // Note this is calling OO.ui.Widget; we're assuming the class this is mixed into
-       // is a subclass of OO.ui.Widget.
+       // Note: Calling #setDisabled this way assumes this is mixed into an OO.ui.Widget
        OO.ui.Widget.prototype.setDisabled.call( this, disabled );
 
        // During construction, #setDisabled is called before the OO.ui.GroupElement constructor
@@ -5272,6 +5426,7 @@ OO.ui.ItemWidget.prototype.isDisabled = function () {
  */
 OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
        // Parent method
+       // Note: Calling #setElementGroup this way assumes this is mixed into an OO.ui.Element
        OO.ui.Element.prototype.setElementGroup.call( this, group );
 
        // Initialize item disabled states
@@ -5659,7 +5814,7 @@ OO.ui.InputWidget.prototype.setReadOnly = function ( state ) {
  * @inheritdoc
  */
 OO.ui.InputWidget.prototype.setDisabled = function ( state ) {
-       OO.ui.Widget.prototype.setDisabled.call( this, state );
+       OO.ui.InputWidget.super.prototype.setDisabled.call( this, state );
        if ( this.$input ) {
                this.$input.prop( 'disabled', this.isDisabled() );
        }
@@ -6158,7 +6313,7 @@ OO.ui.OptionWidget.prototype.isPressed = function () {
  * @chainable
  */
 OO.ui.OptionWidget.prototype.setSelected = function ( state ) {
-       if ( !this.isDisabled() && this.constructor.static.selectable ) {
+       if ( this.constructor.static.selectable ) {
                this.selected = !!state;
                if ( this.selected ) {
                        this.$element.addClass( 'oo-ui-optionWidget-selected' );
@@ -6179,7 +6334,7 @@ OO.ui.OptionWidget.prototype.setSelected = function ( state ) {
  * @chainable
  */
 OO.ui.OptionWidget.prototype.setHighlighted = function ( state ) {
-       if ( !this.isDisabled() && this.constructor.static.highlightable ) {
+       if ( this.constructor.static.highlightable ) {
                this.highlighted = !!state;
                if ( this.highlighted ) {
                        this.$element.addClass( 'oo-ui-optionWidget-highlighted' );
@@ -6197,7 +6352,7 @@ OO.ui.OptionWidget.prototype.setHighlighted = function ( state ) {
  * @chainable
  */
 OO.ui.OptionWidget.prototype.setPressed = function ( state ) {
-       if ( !this.isDisabled() && this.constructor.static.pressable ) {
+       if ( this.constructor.static.pressable ) {
                this.pressed = !!state;
                if ( this.pressed ) {
                        this.$element.addClass( 'oo-ui-optionWidget-pressed' );
@@ -6270,12 +6425,12 @@ OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
        this.pressed = false;
        this.selecting = null;
        this.hashes = {};
+       this.onMouseUpHandler = OO.ui.bind( this.onMouseUp, this );
+       this.onMouseMoveHandler = OO.ui.bind( this.onMouseMove, this );
 
        // Events
        this.$element.on( {
                'mousedown': OO.ui.bind( this.onMouseDown, this ),
-               'mouseup': OO.ui.bind( this.onMouseUp, this ),
-               'mousemove': OO.ui.bind( this.onMouseMove, this ),
                'mouseover': OO.ui.bind( this.onMouseOver, this ),
                'mouseleave': OO.ui.bind( this.onMouseLeave, this )
        } );
@@ -6349,7 +6504,12 @@ OO.ui.SelectWidget.prototype.onMouseDown = function ( e ) {
                if ( item && item.isSelectable() ) {
                        this.pressItem( item );
                        this.selecting = item;
-                       this.$( this.$.context ).one( 'mouseup', OO.ui.bind( this.onMouseUp, this ) );
+                       this.getElementDocument().addEventListener(
+                               'mouseup', this.onMouseUpHandler, true
+                       );
+                       this.getElementDocument().addEventListener(
+                               'mousemove', this.onMouseMoveHandler, true
+                       );
                }
        }
        return false;
@@ -6377,6 +6537,13 @@ OO.ui.SelectWidget.prototype.onMouseUp = function ( e ) {
                this.selecting = null;
        }
 
+       this.getElementDocument().removeEventListener(
+               'mouseup', this.onMouseUpHandler, true
+       );
+       this.getElementDocument().removeEventListener(
+               'mousemove', this.onMouseMoveHandler, true
+       );
+
        return false;
 };
 
@@ -6680,7 +6847,8 @@ OO.ui.SelectWidget.prototype.addItems = function ( items, index ) {
                this.removeItems( remove );
        }
 
-       OO.ui.GroupElement.prototype.addItems.call( this, items, index );
+       // Mixin method
+       OO.ui.GroupWidget.prototype.addItems.call( this, items, index );
 
        // Always provide an index, even if it was omitted
        this.emit( 'add', items, index === undefined ? this.items.length - items.length - 1 : index );
@@ -6711,7 +6879,9 @@ OO.ui.SelectWidget.prototype.removeItems = function ( items ) {
                        this.selectItem( null );
                }
        }
-       OO.ui.GroupElement.prototype.removeItems.call( this, items );
+
+       // Mixin method
+       OO.ui.GroupWidget.prototype.removeItems.call( this, items );
 
        this.emit( 'remove', items );
 
@@ -6731,7 +6901,8 @@ OO.ui.SelectWidget.prototype.clearItems = function () {
 
        // Clear all items
        this.hashes = {};
-       OO.ui.GroupElement.prototype.clearItems.call( this );
+       // Mixin method
+       OO.ui.GroupWidget.prototype.clearItems.call( this );
        this.selectItem( null );
 
        this.emit( 'remove', items );
@@ -6940,7 +7111,7 @@ OO.ui.MenuWidget.prototype.addItems = function ( items, index ) {
        var i, len, item;
 
        // Parent method
-       OO.ui.SelectWidget.prototype.addItems.call( this, items, index );
+       OO.ui.MenuWidget.super.prototype.addItems.call( this, items, index );
 
        // Auto-initialize
        if ( !this.newItems ) {
@@ -7232,13 +7403,13 @@ OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, confi
                'add': 'onOutlineChange',
                'remove': 'onOutlineChange'
        } );
-       this.upButton.connect( this, { 'click': ['emit', 'move', -1] } );
-       this.downButton.connect( this, { 'click': ['emit', 'move', 1] } );
-       this.removeButton.connect( this, { 'click': ['emit', 'remove'] } );
+       this.upButton.connect( this, { 'click': [ 'emit', 'move', -1 ] } );
+       this.downButton.connect( this, { 'click': [ 'emit', 'move', 1 ] } );
+       this.removeButton.connect( this, { 'click': [ 'emit', 'remove' ] } );
 
        // Initialization
        this.$element.addClass( 'oo-ui-outlineControlsWidget' );
-       this.$group.addClass( 'oo-ui-outlineControlsWidget-adders' );
+       this.$group.addClass( 'oo-ui-outlineControlsWidget-items' );
        this.$movers
                .addClass( 'oo-ui-outlineControlsWidget-movers' )
                .append( this.removeButton.$element, this.upButton.$element, this.downButton.$element );
@@ -7455,15 +7626,22 @@ OO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.OptionWidget );
 OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.ButtonedElement );
 OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.FlaggableElement );
 
+/* Static Properties */
+
+// Allow button mouse down events to pass through so they can be handled by the parent select widget
+OO.ui.ButtonOptionWidget.static.cancelButtonMouseDownEvents = false;
+
 /* Methods */
 
 /**
  * @inheritdoc
  */
 OO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {
-       OO.ui.OptionWidget.prototype.setSelected.call( this, state );
+       OO.ui.ButtonOptionWidget.super.prototype.setSelected.call( this, state );
 
-       this.setActive( state );
+       if ( this.constructor.static.selectable ) {
+               this.setActive( state );
+       }
 
        return this;
 };
@@ -7781,7 +7959,7 @@ OO.ui.PopupButtonWidget.prototype.onClick = function ( e ) {
                } else {
                        this.showPopup();
                }
-               OO.ui.ButtonWidget.prototype.onClick.call( this );
+               OO.ui.PopupButtonWidget.super.prototype.onClick.call( this );
        }
        return false;
 };
@@ -8030,7 +8208,7 @@ OO.ui.TextInputWidget.prototype.onEdit = function () {
        this.adjustSize();
 
        // Parent method
-       return OO.ui.InputWidget.prototype.onEdit.call( this );
+       return OO.ui.TextInputWidget.super.prototype.onEdit.call( this );
 };
 
 /**
@@ -8196,7 +8374,7 @@ OO.ui.TextInputMenuWidget.prototype.onWindowResize = function () {
  */
 OO.ui.TextInputMenuWidget.prototype.show = function () {
        // Parent method
-       OO.ui.MenuWidget.prototype.show.call( this );
+       OO.ui.TextInputMenuWidget.super.prototype.show.call( this );
 
        this.position();
        this.$( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );
@@ -8210,7 +8388,7 @@ OO.ui.TextInputMenuWidget.prototype.show = function () {
  */
 OO.ui.TextInputMenuWidget.prototype.hide = function () {
        // Parent method
-       OO.ui.MenuWidget.prototype.hide.call( this );
+       OO.ui.TextInputMenuWidget.super.prototype.hide.call( this );
 
        this.$( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );
        return this;
@@ -8240,7 +8418,7 @@ OO.ui.TextInputMenuWidget.prototype.position = function () {
                // Fix for RTL (for some reason, no need to fix if the frameoffset is set)
                if ( this.$element.css( 'direction' ) === 'rtl' ) {
                        dimensions.right = this.$element.parent().position().left -
-                               dimensions.width - dimensions.left;
+                               $container.width() - dimensions.left;
                        // Erase the value for 'left':
                        delete dimensions.left;
                }
@@ -8350,7 +8528,7 @@ OO.ui.ToggleButtonWidget.prototype.onClick = function () {
        }
 
        // Parent method
-       return OO.ui.ButtonWidget.prototype.onClick.call( this );
+       return OO.ui.ToggleButtonWidget.super.prototype.onClick.call( this );
 };
 
 /**
@@ -8362,7 +8540,7 @@ OO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {
                this.setActive( value );
        }
 
-       // Parent method
+       // Parent method (from mixin)
        OO.ui.ToggleWidget.prototype.setValue.call( this, value );
 
        return this;
index 6546cb4..76feb5d 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (d4086ff6e6)
+ * OOjs UI v0.1.0-pre (7a0e222a75)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Fri May 16 2014 16:32:36 GMT-0700 (PDT)
+ * Date: Wed Jun 18 2014 16:19:15 GMT-0700 (PDT)
  */
 
 /* Textures */
   height: 100%;
 }
 
-.oo-ui-dialog-content .oo-ui-window-foot {
-  bottom: 0;
-  height: 4.8em;
-  padding: 1em;
-}
-
 .oo-ui-dialog-content .oo-ui-window-foot .oo-ui-buttonedElement-framed {
   float: left;
-  margin: 0.125em 0.25em;
 }
 
 .oo-ui-dialog-content .oo-ui-window-foot .oo-ui-flaggableElement-primary,
 
 .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
   display: inline-block;
-  padding: 0.2em 0.8em;
-  margin: 0.1em 0;
   text-align: center;
   vertical-align: top;
 }
   vertical-align: middle;
 }
 
-.oo-ui-buttonedElement-framed.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-right: -0.5em;
-  margin-left: -0.5em;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-iconedElement.oo-ui-labeledElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-right: 0.3em;
-  margin-left: -0.5em;
-}
-
 .oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button,
 .oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
 .oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
 
 .oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
   width: 100%;
-  padding: 1.5em;
   -webkit-box-sizing: border-box;
      -moz-box-sizing: border-box;
           box-sizing: border-box;
   min-width: 8em;
 }
 
+.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
+  padding: 0.25em 0 0.25em 0;
+}
+
 .oo-ui-menuToolGroup .oo-ui-tool {
   display: block;
 }
 
 .oo-ui-menuToolGroup .oo-ui-tool-link {
   display: block;
-  padding: 0.25em 1em 0.25em 0.25em;
+  padding: 0 1em 0 0.25em;
   white-space: nowrap;
   cursor: pointer;
 }
   line-height: 2.6em;
 }
 
+.oo-ui-popupToolGroup-header {
+  margin: 0 0.6em;
+  font-size: 0.8em;
+  font-weight: bold;
+  line-height: 2.6em;
+}
+
 .oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
   cursor: default;
 }
   height: 3em;
 }
 
-.oo-ui-outlineControlsWidget-adders,
+.oo-ui-outlineControlsWidget-items,
 .oo-ui-outlineControlsWidget-movers {
   float: left;
   height: 2em;
   background-repeat: no-repeat;
 }
 
-.oo-ui-outlineControlsWidget-adders {
+.oo-ui-outlineControlsWidget-items {
   float: left;
   margin-left: 0;
 }
 
-.oo-ui-outlineControlsWidget-adders .oo-ui-buttonWidget {
+.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
   float: left;
 }
 
 }
 
 .oo-ui-indicator-down {
-  background-image: /* @embed */ url(images/indicators/down.svg);
+  background-image: /* @embed */ url(images/indicators/arrow-down.svg);
+}
+
+.oo-ui-indicator-next {
+  background-image: /* @embed */ url(images/indicators/arrow-ltr.svg);
+}
+
+.oo-ui-indicator-previous {
+  background-image: /* @embed */ url(images/indicators/arrow-rtl.svg);
 }
 
 .oo-ui-indicator-required {
 }
 
 .oo-ui-indicator-up {
-  background-image: /* @embed */ url(images/indicators/up.svg);
+  background-image: /* @embed */ url(images/indicators/arrow-up.svg);
 }
\ No newline at end of file
diff --git a/resources/lib/oojs-ui/themes/agora/images/icons/check.svg b/resources/lib/oojs-ui/themes/agora/images/icons/check.svg
new file mode 100644 (file)
index 0000000..6a91939
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\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
+        width="44.075px" height="44.076px" viewBox="0 0 44.075 44.076" enable-background="new 0 0 44.075 44.076" xml:space="preserve">\r
+<polygon fill="#FFFFFF" points="41.673,12.657 15.385,37.159 15.201,36.961 10.037,31.424 2.402,23.239 8.057,17.962 15.693,26.157 \r
+       36.319,6.917 "/>\r
+</svg>\r
index f920e8b..58a99a5 100644 (file)
         return (typeof thing == 'function') ? (thing.call(ctx)) : thing;
     }
 
-    function fixTitle($ele) {
-        if ($ele.attr('title') || typeof($ele.attr('original-title')) != 'string') {
-            $ele.attr('original-title', $ele.attr('title') || '').removeAttr('title');
-        }
-    }
-
     function Tipsy(element, options) {
         this.$element = $(element);
         this.options = options;
         this.enabled = true;
-        fixTitle(this.$element);
+        this.fixTitle();
     }
 
     Tipsy.prototype = {
             }
         },
 
+
+        fixTitle: function() {
+            var $e = this.$element;
+            if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {
+                $e.attr('original-title', $e.attr('title') || '').removeAttr('title');
+            }
+        },
+
         getTitle: function() {
             var title, $e = this.$element, o = this.options;
-            fixTitle($e);
+            this.fixTitle();
             if (typeof o.title == 'string') {
                 title = $e.attr(o.title == 'title' ? 'original-title' : o.title);
             } else if (typeof o.title == 'function') {
 
         tip: function() {
             if (!this.$tip) {
-                this.$tip = $('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"/></div>');
+                this.$tip = $('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>');
             }
             return this.$tip;
         },
         if (options === true) {
             return this.data('tipsy');
         } else if (typeof options == 'string') {
-            return this.data('tipsy')[options]();
+            var tipsy = this.data('tipsy');
+            if (tipsy) tipsy[options]();
+            return this;
         }
 
         options = $.extend({}, $.fn.tipsy.defaults, options);
             if (options.delayIn == 0) {
                 tipsy.show();
             } else {
+                tipsy.fixTitle();
                 setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);
             }
         };
         return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w';
     };
 
+    /**
+     * yields a closure of the supplied parameters, producing a function that takes
+     * no arguments and is suitable for use as an autogravity function like so:
+     *
+     * @param margin (int) - distance from the viewable region edge that an
+     *        element should be before setting its tooltip's gravity to be away
+     *        from that edge.
+     * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer
+     *        if there are no viewable region edges effecting the tooltip's
+     *        gravity. It will try to vary from this minimally, for example,
+     *        if 'sw' is preferred and an element is near the right viewable 
+     *        region edge, but not the top edge, it will set the gravity for
+     *        that element's tooltip to be 'se', preserving the southern
+     *        component.
+     */
+     $.fn.tipsy.autoBounds = function(margin, prefer) {
+        return function() {
+            var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},
+                boundTop = $(document).scrollTop() + margin,
+                boundLeft = $(document).scrollLeft() + margin,
+                $this = $(this);
+
+            if ($this.offset().top < boundTop) dir.ns = 'n';
+            if ($this.offset().left < boundLeft) dir.ew = 'w';
+            if ($(window).width() + $(document).scrollLeft() - $this.offset().left < margin) dir.ew = 'e';
+            if ($(window).height() + $(document).scrollTop() - $this.offset().top < margin) dir.ns = 's';
+
+            return dir.ns + (dir.ew ? dir.ew : '');
+        }
+    };
+
 })(jQuery);
index c06fd18..da6de45 100644 (file)
@@ -1,6 +1,6 @@
 /* Autocomplete
 ----------------------------------*/
-.ui-autocomplete { position: absolute; cursor: default; }      
+.ui-autocomplete { position: absolute; cursor: default; }
 .ui-autocomplete-loading { /* @embed */ background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; }
 
 /* workarounds */
index 0408151..1338218 100644 (file)
                                        middlebit.parentNode.replaceChild( spannode, middlebit );
                                }
                        // if this is an element with childnodes, and not a script, style or an element we created
-                       } else if ( node.nodeType === 1 && node.childNodes && !/(script|style)/i.test( node.tagName )
-                                       && !( node.tagName.toLowerCase() === 'span' && node.className.match( /\bhighlight/ ) ) ) {
+                       } else if ( node.nodeType === 1
+                               && node.childNodes
+                               && !/(script|style)/i.test( node.tagName )
+                               && !( node.tagName.toLowerCase() === 'span'
+                                       && node.className.match( /\bhighlight/ )
+                               )
+                       ) {
                                for ( i = 0; i < node.childNodes.length; ++i ) {
                                        // call the highlight function for each child node
                                        $.highlightText.innerHighlight( node.childNodes[i], pat );
index 314d518..05745f8 100644 (file)
                                                // Make sure the numeral order doesn't get messed up, force the first (soon to be second) item
                                                // to be "1". Except if the value-attribute is already used.
                                                // If no value was set WebKit returns "", Mozilla returns '-1', others return 0, null or undefined.
-                                               firstval = $firstItem.attr( 'value' );
+                                               firstval = $firstItem.prop( 'value' );
                                                if ( firstval === undefined || !firstval || firstval === '-1' || firstval === -1 ) {
-                                                       $firstItem.attr( 'value', '1' );
+                                                       $firstItem.prop( 'value', '1' );
                                                }
                                                $toggleLink = buildDefaultToggleLink();
                                                $toggleLink.wrap( '<li class="mw-collapsible-toggle-li"></li>' ).parent().prependTo( $collapsible );
index 6f7ada3..d458019 100644 (file)
                                if (!$input.data('placeholder-textinput')) {
                                        try {
                                                $replacement = $input.clone().attr({ 'type': 'text' });
-                                       } catch(e) {
+                                       } catch (e) {
                                                $replacement = $('<input>').attr($.extend(args(this), { 'type': 'text' }));
                                        }
                                        $replacement
index 86fcaea..d6dfedd 100644 (file)
                        }
                        return keys;
                },
-               extend: function () {
-                       var options, name, src, copy,
-                               target = arguments[0] || {},
-                               i = 1,
-                               length = arguments.length;
-
-                       for ( ; i < length; i++ ) {
-                               options = arguments[ i ];
-                               // Only deal with non-null/undefined values
-                               if ( options !== null && options !== undefined ) {
-                                       // Extend the base object
-                                       for ( name in options ) {
-                                               src = target[ name ];
-                                               copy = options[ name ];
-
-                                               // Prevent never-ending loop
-                                               if ( target === copy ) {
-                                                       continue;
-                                               }
-
-                                               if ( copy !== undefined ) {
-                                                       target[ name ] = copy;
-                                               }
-                                       }
-                               }
-                       }
-
-                       // Return the modified object
-                       return target;
-               },
                each: function ( object, callback ) {
                        var name;
                        for ( name in object ) {
                this.methodCallTracker = {};
                this.missingTests = {};
 
-               this.ignoreFn = undefined === ignoreFn ? function () { return false; } : ignoreFn;
+               this.ignoreFn = ignoreFn === undefined ? function () { return false; } : ignoreFn;
 
                // Lazy limit in case something weird happends (like recurse (part of) ourself).
                this.lazyLimit = 2000;
                 * @param action {Number} What is this function supposed to do (ACTION_INJECT or ACTION_CHECK)
                 */
                walkTheObject: function ( currName, currVar, masterVariable, parentPathArray, action ) {
-
-                       var key, value, tmpPathArray,
+                       var key, value, currPathArray,
                                type = util.type( currVar ),
                                that = this;
 
+                       currPathArray = parentPathArray;
+                       if ( currName ) {
+                               currPathArray.push( currName );
+                       }
+
                        // Hard ignores
-                       if ( this.ignoreFn( currVar, that, parentPathArray ) ) {
+                       if ( this.ignoreFn( currVar, that, currPathArray ) ) {
                                return null;
                        }
 
                        // Handle the lazy limit
                        this.lazyCounter++;
                        if ( this.lazyCounter > this.lazyLimit ) {
-                               log( 'CompletenessTest.fn.walkTheObject> Limit reached: ' + this.lazyCounter, parentPathArray );
+                               log( 'CompletenessTest.fn.walkTheObject> Limit reached: ' + this.lazyCounter, currPathArray );
                                return null;
                        }
 
 
                                        if ( action === CompletenessTest.ACTION_INJECT ) {
 
-                                               that.injectionTracker[ parentPathArray.join( '.' ) ] = true;
-                                               that.injectCheck( masterVariable, parentPathArray, function () {
-                                                       that.methodCallTracker[ parentPathArray.join( '.' ) ] = true;
+                                               that.injectionTracker[ currPathArray.join( '.' ) ] = true;
+                                               that.injectCheck( masterVariable, currPathArray, function () {
+                                                       that.methodCallTracker[ currPathArray.join( '.' ) ] = true;
                                                } );
                                        }
 
                                                                        continue;
                                                                }
 
-                                                               // Clone and break reference to parentPathArray
-                                                               tmpPathArray = util.extend( [], parentPathArray );
-                                                               tmpPathArray.push( 'prototype' );
-                                                               tmpPathArray.push( key );
-
-                                                               that.walkTheObject( key, value, masterVariable, tmpPathArray, action );
+                                                               that.walkTheObject( key, value, masterVariable, currPathArray.concat( 'prototype' ), action );
                                                        }
                                                }
 
                                        if ( hasOwn.call( currVar, key ) ) {
                                                value = currVar[key];
 
-                                               // Clone and break reference to parentPathArray
-                                               tmpPathArray = util.extend( [], parentPathArray );
-                                               tmpPathArray.push( key );
-
-                                               that.walkTheObject( key, value, masterVariable, tmpPathArray, action );
+                                               that.walkTheObject( key, value, masterVariable, currPathArray.slice(), action );
                                        }
                                }
                        }
index e395a51..7a32076 100644 (file)
@@ -215,10 +215,10 @@ $.suggestions = {
                                                        }
 
                                                        if ( expandFrom === 'start' ) {
-                                                               expandFrom = docDir === 'rtl' ? 'right': 'left';
+                                                               expandFrom = docDir === 'rtl' ? 'right' : 'left';
 
                                                        } else if ( expandFrom === 'end' ) {
-                                                               expandFrom = docDir === 'rtl' ? 'left': 'right';
+                                                               expandFrom = docDir === 'rtl' ? 'left' : 'right';
                                                        }
 
                                                        return expandFrom;
@@ -267,10 +267,22 @@ $.suggestions = {
                                                        }
 
                                                        // Widen results box if needed (new width is only calculated here, applied later).
-                                                       // We need this awful hack to calculate the actual pre-ellipsis width.
+
+                                                       // The monstrosity below accomplishes two things:
+                                                       // * Wraps the text contents in a DOM element, so that we can know its width. There is
+                                                       //   no way to directly access the width of a text node, and we can't use the parent
+                                                       //   node width as it has text-overflow: ellipsis; and overflow: hidden; applied to
+                                                       //   it, which trims it to a smaller width.
+                                                       // * Temporarily applies position: absolute; to the wrapper to pull it out of normal
+                                                       //   document flow. Otherwise the CSS text-overflow: ellipsis; and overflow: hidden;
+                                                       //   rules would cause some browsers (at least all versions of IE from 6 to 11) to
+                                                       //   still report the "trimmed" width. This should not be done in regular CSS
+                                                       //   stylesheets as we don't want this rule to apply to other <span> elements, like
+                                                       //   the ones generated by jquery.highlightText.
                                                        $spanForWidth = $result.wrapInner( '<span>' ).children();
-                                                       childrenWidth = $spanForWidth.outerWidth();
+                                                       childrenWidth = $spanForWidth.css( 'position', 'absolute' ).outerWidth();
                                                        $spanForWidth.contents().unwrap();
+
                                                        if ( childrenWidth > $result.width() && childrenWidth > expWidth ) {
                                                                // factor in any padding, margin, or border space on the parent
                                                                expWidth = childrenWidth + ( context.data.$container.width() - $result.width() );
index 405a0e4..5b1e2a7 100644 (file)
        }
 
        function buildParserCache( table, $headers ) {
-               var rows = table.tBodies[0].rows,
-                       sortType,
+               var sortType, cells, len, i, parser,
+                       rows = table.tBodies[0].rows,
                        parsers = [];
 
                if ( rows[0] ) {
 
-                       var cells = rows[0].cells,
-                               len = cells.length,
-                               i, parser;
+                       cells = rows[0].cells;
+                       len = cells.length;
 
                        for ( i = 0; i < len; i++ ) {
                                parser = false;
        /* Other utility functions */
 
        function buildCache( table ) {
-               var totalRows = ( table.tBodies[0] && table.tBodies[0].rows.length ) || 0,
+               var i, j, $row, cols,
+                       totalRows = ( table.tBodies[0] && table.tBodies[0].rows.length ) || 0,
                        totalCells = ( table.tBodies[0].rows[0] && table.tBodies[0].rows[0].cells.length ) || 0,
                        parsers = table.config.parsers,
                        cache = {
                                normalized: []
                        };
 
-               for ( var i = 0; i < totalRows; ++i ) {
+               for ( i = 0; i < totalRows; ++i ) {
 
                        // Add the table data to main data array
-                       var $row = $( table.tBodies[0].rows[i] ),
-                               cols = [];
+                       $row = $( table.tBodies[0].rows[i] );
+                       cols = [];
 
                        // if this is a child row, add it to the last row's children and
                        // continue to the next row
 
                        cache.row.push( $row );
 
-                       for ( var j = 0; j < totalCells; ++j ) {
+                       for ( j = 0; j < totalCells; ++j ) {
                                cols.push( parsers[j].format( getElementSortKey( $row[0].cells[j] ), table, $row[0].cells[j] ) );
                        }
 
                        colspanOffset = 0,
                        columns,
                        i,
+                       rowspan,
+                       colspan,
+                       headerCount,
+                       longestTR,
+                       matrixRowIndex,
+                       matrixColumnIndex,
+                       exploded,
                        $tableHeaders = $( [] ),
                        $tableRows = $( 'thead:eq(0) > tr', table );
                if ( $tableRows.length <= 1 ) {
                        $tableHeaders = $tableRows.children( 'th' );
                } else {
-                       var rowspan,
-                               colspan,
-                               headerCount,
-                               longestTR,
-                               matrixRowIndex,
-                               matrixColumnIndex,
-                               exploded = [];
+                       exploded = [];
 
                        // Loop through all the dom cells of the thead
                        $tableRows.each( function ( rowIndex, row ) {
        }
 
        function isValueInArray( v, a ) {
-               var l = a.length;
-               for ( var i = 0; i < l; i++ ) {
+               var i,
+                       len = a.length;
+               for ( i = 0; i < len; i++ ) {
                        if ( a[i][0] === v ) {
                                return true;
                        }
                                                // Legacy fix of .sortbottoms
                                                // Wrap them inside inside a tfoot (because that's what they actually want to be) &
                                                // and put the <tfoot> at the end of the <table>
-                                               var $sortbottoms = $table.find( '> tbody > tr.sortbottom' );
+                                               var $tfoot,
+                                                       $sortbottoms = $table.find( '> tbody > tr.sortbottom' );
                                                if ( $sortbottoms.length ) {
-                                                       var $tfoot = $table.children( 'tfoot' );
+                                                       $tfoot = $table.children( 'tfoot' );
                                                        if ( $tfoot.length ) {
                                                                $tfoot.eq( 0 ).prepend( $sortbottoms );
                                                        } else {
                                        // Apply event handling to headers
                                        // this is too big, perhaps break it out?
                                        $headers.not( '.' + table.config.unsortableClass ).on( 'keypress click', function ( e ) {
+                                               var cell, columns, newSortList, i,
+                                                       totalRows,
+                                                       j, s, o;
+
                                                if ( e.type === 'click' && e.target.nodeName.toLowerCase() === 'a' ) {
                                                        // The user clicked on a link inside a table header.
                                                        // Do nothing and let the default link click action continue.
                                                // cells get event .change() and bubbles up to the <table> here
                                                cache = buildCache( table );
 
-                                               var totalRows = ( $table[0].tBodies[0] && $table[0].tBodies[0].rows.length ) || 0;
+                                               totalRows = ( $table[0].tBodies[0] && $table[0].tBodies[0].rows.length ) || 0;
                                                if ( !table.sortDisabled && totalRows > 0 ) {
                                                        // Get current column sort order
                                                        this.order = this.count % 2;
                                                        this.count++;
 
-                                                       var cell, columns, newSortList, i;
-
                                                        cell = this;
                                                        // Get current column index
                                                        columns = table.headerToColumns[ this.headerIndex ];
                                                                if ( isValueInArray( i, config.sortList ) ) {
                                                                        // The user has clicked on an already sorted column.
                                                                        // Reverse the sorting direction for all tables.
-                                                                       for ( var j = 0; j < config.sortList.length; j++ ) {
-                                                                               var s = config.sortList[j],
-                                                                                       o = config.headerList[s[0]];
+                                                                       for ( j = 0; j < config.sortList.length; j++ ) {
+                                                                               s = config.sortList[j];
+                                                                               o = config.headerList[s[0]];
                                                                                if ( isValueInArray( s[0], newSortList ) ) {
                                                                                        o.count = s[1];
                                                                                        o.count++;
                        },
 
                        addParser: function ( parser ) {
-                               var l = parsers.length,
+                               var i,
+                                       len = parsers.length,
                                        a = true;
-                               for ( var i = 0; i < l; i++ ) {
+                               for ( i = 0; i < len; i++ ) {
                                        if ( parsers[i].id.toLowerCase() === parser.id.toLowerCase() ) {
                                                a = false;
                                        }
                        return ts.rgx.IPAddress[0].test( s );
                },
                format: function ( s ) {
-                       var a = s.split( '.' ),
+                       var i, item,
+                               a = s.split( '.' ),
                                r = '',
-                               l = a.length;
-                       for ( var i = 0; i < l; i++ ) {
-                               var item = a[i];
+                               len = a.length;
+                       for ( i = 0; i < len; i++ ) {
+                               item = a[i];
                                if ( item.length === 1 ) {
                                        r += '00' + item;
                                } else if ( item.length === 2 ) {
                        return ( ts.dateRegex[0].test( s ) || ts.dateRegex[1].test( s ) || ts.dateRegex[2].test( s ) );
                },
                format: function ( s ) {
-                       var match;
+                       var match, y;
                        s = $.trim( s.toLowerCase() );
 
                        if ( ( match = s.match( ts.dateRegex[0] ) ) !== null ) {
                                s[2] = '0' + s[2];
                        }
 
-                       var y;
                        if ( ( y = parseInt( s[0], 10 ) ) < 100 ) {
                                // Guestimate years without centuries
                                if ( y < 30 ) {
diff --git a/resources/src/mediawiki.action/mediawiki.action.history.css b/resources/src/mediawiki.action/mediawiki.action.history.css
new file mode 100644 (file)
index 0000000..603a965
--- /dev/null
@@ -0,0 +1,4 @@
+#pagehistory li.before input[name="oldid"],
+#pagehistory li.after input[name="diff"] {
+       visibility: hidden;
+}
index 31ca107..afe9246 100644 (file)
@@ -46,12 +46,14 @@ td.diff-marker {
        text-align: right;
        font-weight: bold;
        font-size: 1.25em;
+       line-height: 1.2;
 }
 
 td.diff-addedline,
 td.diff-deletedline,
 td.diff-context {
        font-size: 88%;
+       line-height: 1.6;
        vertical-align: top;
        white-space: -moz-pre-wrap;
        white-space: pre-wrap;
index 8aa5a1f..ac48c59 100644 (file)
@@ -12,54 +12,39 @@ jQuery( function ( $ ) {
         * @param e {jQuery.Event}
         */
        function updateDiffRadios() {
-               var diffLi = false, // the li where the diff radio is checked
-                       oldLi = false; // the li where the oldid radio is checked
+               var nextState = 'before',
+                       $li,
+                       $inputs,
+                       $oldidRadio,
+                       $diffRadio;
 
                if ( !$lis.length ) {
                        return true;
                }
 
                $lis
-               .removeClass( 'selected' )
                .each( function () {
-                       var     $li = $( this ),
-                               $inputs = $li.find( 'input[type="radio"]' ),
-                               $oldidRadio = $inputs.filter( '[name="oldid"]' ).eq( 0 ),
-                               $diffRadio = $inputs.filter( '[name="diff"]' ).eq( 0 );
+                       $li = $( this );
+                       $inputs = $li.find( 'input[type="radio"]' );
+                       $oldidRadio = $inputs.filter( '[name="oldid"]' ).eq( 0 );
+                       $diffRadio = $inputs.filter( '[name="diff"]' ).eq( 0 );
+
+                       $li.removeClass( 'selected between before after' );
 
                        if ( !$oldidRadio.length || !$diffRadio.length ) {
                                return true;
                        }
 
                        if ( $oldidRadio.prop( 'checked' ) ) {
-                               oldLi = true;
-                               $li.addClass( 'selected' );
-                               $oldidRadio.css( 'visibility', 'visible' );
-                               $diffRadio.css( 'visibility', 'hidden' );
-
+                               $li.addClass( 'selected after' );
+                               nextState = 'after';
                        } else if ( $diffRadio.prop( 'checked' ) ) {
-                               diffLi = true;
-                               $li.addClass( 'selected' );
-                               $oldidRadio.css( 'visibility', 'hidden' );
-                               $diffRadio.css( 'visibility', 'visible' );
-
-                       // This list item has neither checked
+                               $li.addClass( 'selected ' + nextState );
+                               nextState = 'between';
                        } else {
-                               // We're below the selected radios
-                               if ( diffLi && oldLi ) {
-                                       $oldidRadio.css( 'visibility', 'visible' );
-                                       $diffRadio.css( 'visibility', 'hidden' );
-
-                               // We're between the selected radios
-                               } else if ( diffLi ) {
-                                       $diffRadio.css( 'visibility', 'visible' );
-                                       $oldidRadio.css( 'visibility', 'visible' );
-
-                               // We're above the selected radios
-                               } else {
-                                       $diffRadio.css( 'visibility', 'visible' );
-                                       $oldidRadio.css( 'visibility', 'hidden' );
-                               }
+                               // This list item has neither checked
+                               // apply the appropriate class following the previous item.
+                               $li.addClass( nextState );
                        }
                } );
 
index af33165..f8dc836 100644 (file)
                        }
                },
                // Keyed by ajax url and symbolic name for the individual request
-               deferreds = {};
+               promises = {};
 
-       // Pre-populate with fake ajax deferreds to save http requests for tokens
+       // Pre-populate with fake ajax promises to save http requests for tokens
        // we already have on the page via the user.tokens module (bug 34733).
-       deferreds[ defaultOptions.ajax.url ] = {};
+       promises[ defaultOptions.ajax.url ] = {};
        $.each( mw.user.tokens.get(), function ( key, value ) {
                // This requires #getToken to use the same key as user.tokens.
                // Format: token-type + "Token" (eg. editToken, patrolToken, watchToken).
-               deferreds[ defaultOptions.ajax.url ][ key ] = $.Deferred()
+               promises[ defaultOptions.ajax.url ][ key ] = $.Deferred()
                        .resolve( value )
                        .promise( { abort: function () {} } );
        } );
                                        function ( code ) {
                                                if ( code === 'badtoken' ) {
                                                        // Clear from cache
-                                                       deferreds[ api.defaults.ajax.url ][ tokenType + 'Token' ] =
+                                                       promises[ api.defaults.ajax.url ][ tokenType + 'Token' ] =
                                                                params.token = undefined;
 
                                                        // Try again, once
                 */
                getToken: function ( type ) {
                        var apiPromise,
-                               deferredGroup = deferreds[ this.defaults.ajax.url ],
-                               d = deferredGroup && deferredGroup[ type + 'Token' ];
+                               promiseGroup = promises[ this.defaults.ajax.url ],
+                               d = promiseGroup && promiseGroup[ type + 'Token' ];
 
                        if ( !d ) {
-                               d = $.Deferred();
+                               apiPromise = this.get( { action: 'tokens', type: type } );
 
-                               apiPromise = this.get( { action: 'tokens', type: type } )
-                                       .done( function ( data ) {
+                               d = apiPromise
+                                       .then( function ( data ) {
                                                // If token type is not available for this user,
-                                               // key '...token' is missing or can contain Boolean false
+                                               // key '...token' is either missing or set to boolean false
                                                if ( data.tokens && data.tokens[type + 'token'] ) {
-                                                       d.resolve( data.tokens[type + 'token'] );
-                                               } else {
-                                                       d.reject( 'token-missing', data );
+                                                       return data.tokens[type + 'token'];
                                                }
-                                       } )
-                                       .fail( d.reject );
 
-                               // Attach abort handler
-                               d.abort = apiPromise.abort;
+                                               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;
+                                       } )
+                                       // Attach abort handler
+                                       .promise( { abort: apiPromise.abort } );
 
-                               // Store deferred now so that we can use this again even if it isn't ready yet
-                               if ( !deferredGroup ) {
-                                       deferredGroup = deferreds[ this.defaults.ajax.url ] = {};
+                               // Store deferred now so that we can use it again even if it isn't ready yet
+                               if ( !promiseGroup ) {
+                                       promiseGroup = promises[ this.defaults.ajax.url ] = {};
                                }
-                               deferredGroup[ type + 'Token' ] = d;
+                               promiseGroup[ type + 'Token' ] = d;
                        }
 
-                       return d.promise( { abort: d.abort } );
+                       return d;
                }
        };
 
index 6556af9..67e2f33 100644 (file)
        list-style-image: url(@url);
 }
 
-.transition(@string) {
-       -webkit-transition: @string;
-       transition: @string;
+.transition(@value) {
+       -webkit-backface-visibility: hidden; // fixes Chrome 1px movement bug
+       -webkit-transition: @value;
+       -moz-transition: @value;
+       -o-transition: @value;
+       transition: @value;
 }
 
 .box-sizing(@value) {
-       -moz-box-sizing: @value;
        -webkit-box-sizing: @value;
+       -moz-box-sizing: @value;
        box-sizing: @value;
 }
+
+.box-shadow(@value) {
+       -webkit-box-shadow: @value; // Android 2.3+, iOS 4.0.2-4.2, Safari 3-4
+       box-shadow: @value; // Chrome 6+, Firefox 4+, IE 9+, iOS 5+, Opera 10.50+
+}
index 3b0aeee..15e9aba 100644 (file)
                        $li.prop( 'id', 'ca-' + action );
                }
 
-               // Special case for vector icon
-               if ( $li.hasClass( 'icon' ) ) {
-                       if ( state === 'loading' ) {
-                               $link.addClass( 'loading' );
-                       } else {
-                               $link.removeClass( 'loading' );
-                       }
+               if ( state === 'loading' ) {
+                       $link.addClass( 'loading' );
+               } else {
+                       $link.removeClass( 'loading' );
                }
        }
 
 
                        $link = $( this );
 
+                       if ( $link.hasClass( 'loading' ) ) {
+                               return;
+                       }
+
                        updateWatchLink( $link, action, 'loading' );
 
                        api = new mw.Api();
diff --git a/resources/src/mediawiki.skinning/content.parsoid.less b/resources/src/mediawiki.skinning/content.parsoid.less
new file mode 100644 (file)
index 0000000..15f53f0
--- /dev/null
@@ -0,0 +1,124 @@
+/**
+ * Style Parsoid HTML+RDFa output consistent with wikitext from PHP parser.
+ */
+
+/*csslint regex-selectors:false */
+
+/*
+ * Auto-numbered external links
+ * Parsoid renders those as link without content, and lets CSS do the
+ * counting. This way the counting style can be customized, and counts update
+ * automatically when content is modified.
+ */
+.mw-body-content {
+       counter-reset: mw-NumberedExtLink;
+}
+
+.mw-body-content a[rel~="mw:ExtLink"]:empty:after {
+       content: "[" counter(mw-NumberedExtLink) "]";
+       counter-increment: mw-NumberedExtLink;
+}
+
+/**
+ * References
+ *
+ * Parser and Extension:Cite output reference numbers for <sup>[1]</sup> for <ref> tags.
+ *
+ * Markup:
+ * Cake is good<sup>[2]</sup>
+ * The cake is a lie<span class="reference">[1]</span>
+ *
+ * Styleguide 1.1.
+ */
+span.reference {
+       font-size: smaller;
+       line-height: normal;
+       vertical-align: super;
+}
+
+/**
+ * Block media items
+ */
+figure[typeof*='mw:Image'] {
+       margin: 0;
+
+       a {
+               border: 0;
+       }
+
+       &.mw-halign-right {
+               /* @noflip */
+               margin: .5em 0 1.3em 1.4em;
+               /* @noflip */
+               clear: right;
+               /* @noflip */
+               float: right;
+       }
+
+       &.mw-halign-left {
+               /* @noflip */
+               margin: .5em 1.4em 1.3em 0;
+               /* @noflip */
+               clear: left;
+               /* @noflip */
+               float: left;
+       }
+
+       &.mw-halign-center {
+               margin: 0 auto .5em auto;
+               clear: none;
+               float: none;
+       }
+
+       > figcaption {
+               display: table-caption;
+               caption-side: bottom;
+               /* In mw-core the font-size is duplicated, 94% in thumbiner
+                  and again 94% in thumbcaption. 88% for font size of the
+                  caption results in the same behavior. */
+               font-size: 88%;
+               line-height: 1.4em;
+               text-align: left;
+
+               border: 1px solid #ccc;
+               border-top: 0;
+
+               /* taken from .thumbcaption, plus .thumbinner */
+               padding: 1px 5px 5px;
+               background-color: #f9f9f9;
+       }
+}
+
+figure[typeof~='mw:Image/Thumb'],
+figure[typeof~='mw:Image/Frame'] {
+       display: table;
+       overflow: auto;
+       text-align: center;
+       padding: 3px;
+       border: 1px solid #ccc;
+       border-bottom: 0; // No border to caption
+       border-collapse: collapse;
+       background-color: #f9f9f9;
+       // Default to right alignment. This is needed since Parsoid only specifies the
+       // alignment class when the alignment is explicitly set.
+       margin: .5em 0 1.3em 1.4em;
+       clear: right;
+       float: right;
+}
+
+figure[typeof~='mw:Image/Thumb'] > *:first-child > img,
+figure[typeof~='mw:Image/Frame'] > *:first-child > img,
+.mw-image-border > *:first-child > img {
+       border: 1px solid #cccccc;
+       margin: 4px;
+}
+
+/*
+ * Finally, some basic styling for Parsoid render testing.
+ * Only Parsoid directly sets .mw-body-content directly on the body, so this
+ * shouldn't affect anything else.
+ */
+body.mw-body-content {
+       background-color: #fff;
+       padding: 0.8em;
+}
index d0569bd..e553f44 100644 (file)
@@ -200,7 +200,7 @@ jQuery( function ( $ ) {
                }
        }
 
-       function updateTimezoneSelection () {
+       function updateTimezoneSelection() {
                var minuteDiff, localTime,
                        type = $tzSelect.val();
 
index a2c2228..8d3e86a 100644 (file)
@@ -7,7 +7,7 @@
                        var promise,
                                api = new mw.Api(),
                                $link = $( this ),
-                               $subjectLink = $link.parents( 'li' ).children( 'a' ).eq( 0 ),
+                               $subjectLink = $link.closest( 'li' ).children( 'a' ).eq( 0 ),
                                title = mw.util.getParamValue( 'title', $link.attr( 'href' ) );
                        // nice format
                        title = mw.Title.newFromText( title ).toText();
index 18661de..d456f86 100644 (file)
@@ -1,10 +1,35 @@
+// FIXME: remove @colorProgressiveShadow (shadows should be generated
+// in LESS by dimming the original colors)
+@colorProgressiveShadow: #4091ed;
+
+// White; for background use, and text use on dark backgrounds
 @colorWhite: #fff;
-@colorGrayLight: #ccc;
+// Off-white; for background use on white backgrounds
+@colorOffWhite: #fafafa;
+// Dark gray; for non-text use
 @colorGrayDark: #898989;
+// Light gray; for non-text use
+@colorGrayLight: #ccc;
+// Very light gray; for non-text use
+@colorGrayLighter: #ddd;
+// Lightest gray; for non-text use
+@colorGrayLightest: #eee;
+
+// Dark gray; for body text
 @colorText: #252525;
+// Light gray; for less important body text and links
+@colorTextLight: #696969;
+
+// Blue; for contextual use of a continuing action
 @colorProgressive: #347bff;
-// FIXME: remove @colorProgressiveShadow (shadows should be generated
-// in LESS by dimming the original colors)
-@colorProgressiveShadow: #4091ed;
+// Orange; for contextual use of returning to a past action
+@colorRegressive: #ff7e1e;
+// Green; for contextual use of a positive finalizing action
 @colorConstructive: #00af89;
+// Red; for contextual use of a negative finalizing action
 @colorDestructive: #d11d13;
+
+// Used in mixins to darken contextual colors by the same amount (eg. focus)
+@colorDarkenPercentage: 13.5%;
+// Used in mixins to lighten contextual colors by the same amount (eg. hover)
+@colorLightenPercentage: 13.5%;
\ No newline at end of file
index b7eea54..61691c7 100644 (file)
@@ -1,26 +1,11 @@
-#Wikimedia projects
+#mediawiki.ui
 
-This is the living style guide for MediaWiki UI used in Wikimedia Projects. It is generated from existing CSS programmatically. Please use it as a reference when developing code for MediaWiki to ensure your design is consistent with others across the site. Note this document is a work in progress and subject to change.
-
-##Brand
-
-Imagine a world in which every single human being can freely share in the sum of all knowledge.
-
-Sharing knowledge is the heart of our movement. Specifically, we care about sharing the “… highest possible quality to every single person on the planet in their own language” (Jimmy Wales). The focus of our identity is being credible and is moving toward being more inviting. We want our contributors to keep contributing while our assuring our readers that the information on any of the Wikimedia projects is reliable and accurate. Our personality should embody both of those traits with a slight sense of rebellion. We are unlike traditional projects (for instance, Encyclopedias that are only created by a few select individuals). We are a global movement, and as Jimmy Wales puts it: “Wikipedia is like rock’n’roll; it’s a cultural shift."
+This is the living style guide for mediawiki.ui.  It is generated from the mediawiki.ui LESS source code programmatically. Please use it as a reference when developing code for MediaWiki to ensure your design is consistent with others across the site. Note this document is a work in progress and subject to change.
 
 ##Design Philosophy
 
-The Wikimedia movement is a global volunteer community that aims to collect and develop the world's knowledge and to make it available to everyone for free, for any purpose. “Imagine a world in which every single human being can freely share in the sum of all knowledge.” 
-
-###Credible
-We strive for the most accurate, high quality and neutral information on all Wikimedia projects. We are fact-based and honest. We do not take sides. We are fair and impartial. 
-
 ###Inviting
-We are geeky about collecting and developing knowledge. We invite and welcome every single human being to share their knowledge with us and the rest of the world. We are open-minded and have a strong sense of community. Our aesthetics should be clean and encourage interaction. 
+Our aesthetics should be clean and encourage interaction.
 
 ###Worldly
-We are thoughtful and are aware of cultural differences. We are careful about words, color usage, and images that might offend. We are also aware of limited connectivity in some areas of the world and are thoughtful of image sizes and loading speed. 
-
-###Humble
-We are respectful of contributors’ effort and knowledge. We have a wealth of knowledge on all projects and many people to thank for that. We are humble. We are helpful and welcome help to expand the sum of all knowledge. 
-
+We are thoughtful and are aware of cultural differences. We are careful about words, color usage, and images that might offend. We are also aware of limited connectivity in some areas of the world and are thoughtful of image sizes and loading speed.  We work to support accessibility.
index 08690a3..04e88e8 100644 (file)
@@ -12,7 +12,7 @@
 //
 // Third choice: Arial
 //
-// Our content is predominantly text, hence visual hierarchy must be clear. Use these recommended type sizes to inform and establish information hierarchy and organization. 
+// Wiki content is often predominantly text; hence, visual hierarchy must be clear. Use these recommended type sizes to inform and establish information hierarchy and organization.
 //
 // Unless if you plan to put extra attention and manually adjust spacing, avoid justifying texts and paragraphs as they are harder to read and create unnecessary visual distractions. Along with centered text, they convey a formal and less friendly environment. 
 //
@@ -20,6 +20,7 @@
 //
 // Styleguide 1.
 
+@import "mediawiki.mixins";
 @import "components/utilities";
 @import "components/vector/forms";
 @import "components/vector/containers";
index 49c88c3..64ec6c3 100644 (file)
                        $container.find( '.mw-debug-profile-period' ).tipsy( {
                                fade: true,
                                gravity: function () {
-                                       return $.fn.tipsy.autoNS.call( this )
-                                               + $.fn.tipsy.autoWE.call( this );
+                                       return $.fn.tipsy.autoNS.call( this ) + $.fn.tipsy.autoWE.call( this );
                                },
                                className: 'mw-debug-profile-tipsy',
                                center: false,
index f7aa7f8..8be1321 100644 (file)
         * @return {jQuery|null}
         */
        function hideIfGetField( $el, name ) {
-               var sel, $found, $p;
+               var $found, $p,
+                       suffix = name.replace( /^([^\[]+)/, '[$1]' );
+
+               function nameFilter() {
+                       return this.name === name ||
+                               ( this.name === ( 'wp' + name ) ) ||
+                               this.name.slice( -suffix.length ) === suffix;
+               }
 
-               sel = '[name="' + name + '"],' +
-                       '[name="wp' + name + '"],' +
-                       '[name$="' + name.replace( /^([^\[]+)/, '[$1]' ) + '"]';
                for ( $p = $el.parent(); $p.length > 0; $p = $p.parent() ) {
-                       $found = $p.find( sel );
-                       if ( $found.length > 0 ) {
+                       $found = $p.find( '[name]' ).filter( nameFilter );
+                       if ( $found.length ) {
                                return $found;
                        }
                }
@@ -43,7 +47,7 @@
         * @return {Array} 2 elements: jQuery of dependent fields, and test function
         */
        function hideIfParse( $el, spec ) {
-               var op, i, l, v, $field, $fields, func, funcs, getVal;
+               var op, i, l, v, $field, $fields, fields, func, funcs, getVal;
 
                op = spec[0];
                l = spec.length;
                        case 'NAND':
                        case 'NOR':
                                funcs = [];
-                               $fields = $();
+                               fields = [];
                                for ( i = 1; i < l; i++ ) {
                                        if ( !$.isArray( spec[i] ) ) {
                                                throw new Error( op + ' parameters must be arrays' );
                                        }
                                        v = hideIfParse( $el, spec[i] );
-                                       $fields = $fields.add( v[0] );
+                                       fields.push( v[0] );
                                        funcs.push( v[1] );
                                }
+                               $fields = $( fields );
 
                                l = funcs.length;
                                switch ( op ) {
                                }
                                v = spec[2];
 
-                               if ( $field.first().attr( 'type' ) === 'radio' ||
-                                       $field.first().attr( 'type' ) === 'checkbox'
+                               if ( $field.first().prop( 'type' ) === 'radio' ||
+                                       $field.first().prop( 'type' ) === 'checkbox'
                                ) {
                                        getVal = function () {
                                                var $selected = $field.filter( ':checked' );
-                                               return $selected.length > 0 ? $selected.val() : '';
+                                               return $selected.length ? $selected.val() : '';
                                        };
                                } else {
                                        getVal = function () {
         */
        $.fn.goIn = function ( instantToggle ) {
                if ( instantToggle === true ) {
-                       return $( this ).show();
+                       return this.show();
                }
-               return $( this ).stop( true, true ).fadeIn();
+               return this.stop( true, true ).fadeIn();
        };
 
        /**
         */
        $.fn.goOut = function ( instantToggle ) {
                if ( instantToggle === true ) {
-                       return $( this ).hide();
+                       return this.hide();
                }
-               return $( this ).stop( true, true ).fadeOut();
+               return this.stop( true, true ).fadeOut();
        };
 
        /**
         * Bind a function to the jQuery object via live(), and also immediately trigger
         * the function on the objects with an 'instant' parameter set to true.
+        *
+        * @method liveAndTestAtStart
+        * @deprecated since 1.24 Use .on() and .each() directly.
         * @param {Function} callback
         * @param {boolean|jQuery.Event} callback.immediate True when the event is called immediately,
         *  an event object when triggered from an event.
+        * @return jQuery
+        * @chainable
         */
-       $.fn.liveAndTestAtStart = function ( callback ) {
-               $( this )
+       mw.log.deprecate( $.fn, 'liveAndTestAtStart', function ( callback ) {
+               this
+                       // Can't really migrate to .on() generically, needs knowledge of
+                       // calling code to know the correct selector. Fix callers and
+                       // get rid of this .liveAndTestAtStart() hack.
                        .live( 'change', callback )
                        .each( function () {
                                callback.call( this, true );
                        } );
-       };
+       } );
 
        function enhance( $root ) {
 
-               // Animate the SelectOrOther fields, to only show the text field when
-               // 'other' is selected.
-               $root.find( '.mw-htmlform-select-or-other' ).liveAndTestAtStart( function ( instant ) {
+               /**
+                * @ignore
+                * @param {boolean|jQuery.Event} instant
+                */
+               function handleSelectOrOther( instant ) {
                        var $other = $root.find( '#' + $( this ).attr( 'id' ) + '-other' );
                        $other = $other.add( $other.siblings( 'br' ) );
                        if ( $( this ).val() === 'other' ) {
                        } else {
                                $other.goOut( instant );
                        }
-               } );
+               }
+
+               // Animate the SelectOrOther fields, to only show the text field when
+               // 'other' is selected.
+               $root
+                       .on( 'change', '.mw-htmlform-select-or-other', handleSelectOrOther )
+                       .each( function () {
+                               handleSelectOrOther.call( this, true );
+                       } );
 
                // Set up hide-if elements
                $root.find( '.mw-htmlform-hide-if' ).each( function () {
-                       var $el = $( this ),
-                               spec = $el.data( 'hideIf' ),
-                               v, $fields, test, func;
+                       var v, $fields, test, func,
+                               $el = $( this ),
+                               spec = $el.data( 'hideIf' );
 
                        if ( !spec ) {
                                return;
                                        $el.show();
                                }
                        };
-                       $fields.change( func );
+                       $fields.on( 'change', func );
                        func();
                } );
 
index 3731771..9d34d62 100644 (file)
                var parser = new mw.jqueryMsg.parser( options );
 
                return function ( args ) {
-                       var key = args[0],
+                       var fallback,
+                               key = args[0],
                                argsArray = $.isArray( args[1] ) ? args[1] : slice.call( args, 1 );
                        try {
                                return parser.parse( key, argsArray );
                        } catch ( e ) {
-                               var fallback = parser.settings.messages.get( key );
+                               fallback = parser.settings.messages.get( key );
                                mw.log.warn( 'mediawiki.jqueryMsg: ' + key + ': ' + e.message );
                                return $( '<span>' ).text( fallback );
                        }
index fc4635a..c1f1844 100644 (file)
                         * @throws {Error} If any unregistered module or a dependency loop is encountered
                         */
                        function sortDependencies( module, resolved, unresolved ) {
-                               var n, deps, len;
+                               var n, deps, len, skip;
 
                                if ( registry[module] === undefined ) {
                                        throw new Error( 'Unknown dependency: ' + module );
                                }
+
+                               if ( registry[module].skip !== null ) {
+                                       /*jshint evil:true */
+                                       skip = new Function( registry[module].skip );
+                                       registry[module].skip = null;
+                                       if ( skip() ) {
+                                               registry[module].dependencies = [];
+                                               registry[module].state = 'ready';
+                                               handlePending( module );
+                                               return;
+                                       }
+                               }
+
                                // Resolves dynamic loader function and replaces it with its own results
                                if ( $.isFunction( registry[module].dependencies ) ) {
                                        registry[module].dependencies = registry[module].dependencies();
                                 *  names on which this module depends, or a function that returns that array.
                                 * @param {string} [group=null] Group which the module is in
                                 * @param {string} [source='local'] Name of the source
+                                * @param {string} [skip=null] Script body of the skip function
                                 */
-                               register: function ( module, version, dependencies, group, source ) {
+                               register: function ( module, version, dependencies, group, source, skip ) {
                                        var m;
                                        // Allow multiple registration
                                        if ( typeof module === 'object' ) {
                                                version: version !== undefined ? parseInt( version, 10 ) : 0,
                                                dependencies: [],
                                                group: typeof group === 'string' ? group : null,
-                                               source: typeof source === 'string' ? source: 'local',
-                                               state: 'registered'
+                                               source: typeof source === 'string' ? source : 'local',
+                                               state: 'registered',
+                                               skip: typeof skip === 'string' ? skip : null
                                        };
                                        if ( typeof dependencies === 'string' ) {
                                                // Allow dependencies to be given as a single module name
index cbdf666..282cf6f 100644 (file)
@@ -3,7 +3,7 @@
  */
 ( function ( mw, $ ) {
        $( function () {
-               var map, resultRenderCache, searchboxesSelectors,
+               var api, map, resultRenderCache, searchboxesSelectors,
                        // Region where the suggestions box will appear directly below
                        // (using the same width). Can be a container element or the input
                        // itself, depending on what suits best in the environment.
@@ -66,6 +66,7 @@
                                .wrap(
                                        $( '<a>' )
                                                .attr( 'href', resultRenderCache.baseHref + $.param( resultRenderCache.linkParams ) )
+                                               .attr( 'title', text )
                                                .addClass( 'mw-searchSuggest-link' )
                                );
                }
                $( searchboxesSelectors.join( ', ' ) )
                        .suggestions( {
                                fetch: function ( query ) {
-                                       var $el;
-
-                                       if ( query.length !== 0 ) {
-                                               $el = $( this );
-                                               $el.data( 'request', ( new mw.Api() ).get( {
-                                                       action: 'opensearch',
-                                                       search: query,
-                                                       namespace: 0,
-                                                       suggest: ''
-                                               } ).done( function ( data ) {
-                                                       $el.suggestions( 'suggestions', data[1] );
-                                               } ) );
-                                       }
+                                       var $textbox = this,
+                                               node = this[0];
+
+                                       api = api || new mw.Api();
+
+                                       $.data( node, 'request', api.get( {
+                                               action: 'opensearch',
+                                               search: query,
+                                               namespace: 0,
+                                               suggest: ''
+                                       } ).done( function ( data ) {
+                                               $textbox.suggestions( 'suggestions', data[1] );
+                                       } ) );
                                },
                                cancel: function () {
-                                       var apiPromise = $( this ).data( 'request' );
-                                       // If the delay setting has caused the fetch to have not even happened
-                                       // yet, the apiPromise object will have never been set.
-                                       if ( apiPromise && $.isFunction( apiPromise.abort ) ) {
-                                               apiPromise.abort();
-                                               $( this ).removeData( 'request' );
+                                       var node = this[0],
+                                               request = $.data( node, 'request' );
+
+                                       if ( request ) {
+                                               request.abort();
+                                               $.removeData( node, 'request' );
                                        }
                                },
                                result: {
                                        render: renderFunction,
                                        select: function () {
-                                               return true; // allow the form to be submitted
+                                               // allow the form to be submitted
+                                               return true;
                                        }
                                },
                                delay: 120,
index 0cf897a..c5694b7 100644 (file)
                        return mw.config.get( 'wgUserName' );
                },
 
-               /**
-                * @inheritdoc #getName
-                * @deprecated since 1.20 Use #getName instead
-                */
-               name: function () {
-                       return user.getName();
-               },
-
                /**
                 * Get date user registered, if available
                 *
                        return user.getName() === null;
                },
 
-               /**
-                * @inheritdoc #isAnon
-                * @deprecated since 1.20 Use #isAnon instead
-                */
-               anonymous: function () {
-                       return user.isAnon();
-               },
-
                /**
                 * Get an automatically generated random ID (stored in a session cookie)
                 *
                }
        };
 
+       /**
+        * @method name
+        * @inheritdoc #getName
+        * @deprecated since 1.20 Use #getName instead
+        */
+       mw.log.deprecate( user, 'name', user.getName, 'Use mw.user.getName instead.' );
+
+       /**
+        * @method anonymous
+        * @inheritdoc #isAnon
+        * @deprecated since 1.20 Use #isAnon instead
+        */
+       mw.log.deprecate( user, 'anonymous', user.isAnon, 'Use mw.user.isAnon instead.' );
+
 }( mediaWiki, jQuery ) );
index e2fa123..887885e 100644 (file)
                                // RegExp is case insensitive
                                'i'
                        );
-                       return ( null !== mailtxt.match( html5EmailRegexp ) );
+                       return ( mailtxt.match( html5EmailRegexp ) !== null );
                },
 
                /**
index 967fd9f..a35670e 100644 (file)
@@ -1,17 +1,9 @@
 */
-!cologneblue/
-!cologneblue/*
 !common/
 !common/*
-!modern/
-!modern/*
 !monobook/
 !monobook/*
 !vector/
 !vector/*
 
 *.php
-!CologneBlue.php
-!Modern.php
-!MonoBook.php
-!Vector.php
diff --git a/skins/CologneBlue.php b/skins/CologneBlue.php
deleted file mode 100644 (file)
index ad500ea..0000000
+++ /dev/null
@@ -1,650 +0,0 @@
-<?php
-/**
- * Cologne Blue: A nicer-looking alternative to Standard.
- *
- * 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
- *
- * @todo document
- * @file
- * @ingroup Skins
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
-       die( -1 );
-}
-
-/**
- * @todo document
- * @ingroup Skins
- */
-class SkinCologneBlue extends SkinTemplate {
-       public $skinname = 'cologneblue';
-       public $stylename = 'cologneblue';
-       public $template = 'CologneBlueTemplate';
-       public $useHeadElement = true;
-
-       /**
-        * @param OutputPage $out
-        */
-       function setupSkinUserCss( OutputPage $out ) {
-               parent::setupSkinUserCss( $out );
-               $out->addModuleStyles( 'mediawiki.legacy.oldshared' );
-               $out->addModuleStyles( 'skins.cologneblue' );
-       }
-
-       /**
-        * Override langlink formatting behavior not to uppercase the language names.
-        * See otherLanguages() in CologneBlueTemplate.
-        * @param string $name
-        * @return string
-        */
-       function formatLanguageName( $name ) {
-               return $name;
-       }
-}
-
-class CologneBlueTemplate extends BaseTemplate {
-       function execute() {
-               // Suppress warnings to prevent notices about missing indexes in $this->data
-               wfSuppressWarnings();
-               $this->html( 'headelement' );
-               echo $this->beforeContent();
-               $this->html( 'bodytext' );
-               echo "\n";
-               echo $this->afterContent();
-               $this->html( 'dataAfterContent' );
-               $this->printTrail();
-               echo "\n</body></html>";
-               wfRestoreWarnings();
-       }
-
-       /**
-        * Language/charset variant links for classic-style skins
-        * @return string
-        */
-       function variantLinks() {
-               $s = array();
-
-               $variants = $this->data['content_navigation']['variants'];
-
-               foreach ( $variants as $key => $link ) {
-                       $s[] = $this->makeListItem( $key, $link, array( 'tag' => 'span' ) );
-               }
-
-               return $this->getSkin()->getLanguage()->pipeList( $s );
-       }
-
-       function otherLanguages() {
-               global $wgHideInterlanguageLinks;
-               if ( $wgHideInterlanguageLinks ) {
-                       return "";
-               }
-
-               $html = '';
-
-               // We override SkinTemplate->formatLanguageName() in SkinCologneBlue
-               // not to capitalize the language names.
-               $language_urls = $this->data['language_urls'];
-               if ( !empty( $language_urls ) ) {
-                       $s = array();
-                       foreach ( $language_urls as $key => $data ) {
-                               $s[] = $this->makeListItem( $key, $data, array( 'tag' => 'span' ) );
-                       }
-
-                       $html = wfMessage( 'otherlanguages' )->text()
-                               . wfMessage( 'colon-separator' )->text()
-                               . $this->getSkin()->getLanguage()->pipeList( $s );
-               }
-
-               $html .= $this->renderAfterPortlet( 'lang' );
-
-               return $html;
-       }
-
-       /**
-        * @param string $name
-        */
-       protected function renderAfterPortlet( $name ) {
-               $content = '';
-               wfRunHooks( 'BaseTemplateAfterPortlet', array( $this, $name, &$content ) );
-
-               $html = $content !== '' ? "<div class='after-portlet after-portlet-$name'>$content</div>" : '';
-
-               return $html;
-       }
-
-       function pageTitleLinks() {
-               $s = array();
-               $footlinks = $this->getFooterLinks();
-
-               foreach ( $footlinks['places'] as $item ) {
-                       $s[] = $this->data[$item];
-               }
-
-               return $this->getSkin()->getLanguage()->pipeList( $s );
-       }
-
-       /**
-        * Used in bottomLinks() to eliminate repetitive code.
-        *
-        * @param string $key Key to be passed to makeListItem()
-        * @param array $navlink Navlink suitable for processNavlinkForDocument()
-        * @param string $message Key of the message to use in place of standard text
-        *
-        * @return string
-        */
-       function processBottomLink( $key, $navlink, $message = null ) {
-               if ( !$navlink ) {
-                       // Empty navlinks might be passed.
-                       return null;
-               }
-
-               if ( $message ) {
-                       $navlink['text'] = wfMessage( $message )->escaped();
-               }
-
-               return $this->makeListItem(
-                       $key,
-                       $this->processNavlinkForDocument( $navlink ),
-                       array( 'tag' => 'span' )
-               );
-       }
-
-       function bottomLinks() {
-               $toolbox = $this->getToolbox();
-               $content_nav = $this->data['content_navigation'];
-
-               $lines = array();
-
-               if ( $this->getSkin()->getOutput()->isArticleRelated() ) {
-                       // First row. Regular actions.
-                       $element = array();
-
-                       $editLinkMessage = $this->getSkin()->getTitle()->exists() ? 'editthispage' : 'create-this-page';
-                       $element[] = $this->processBottomLink( 'edit', $content_nav['views']['edit'], $editLinkMessage );
-                       $element[] = $this->processBottomLink(
-                               'viewsource',
-                               $content_nav['views']['viewsource'],
-                               'viewsource'
-                       );
-
-                       $element[] = $this->processBottomLink(
-                               'watch',
-                               $content_nav['actions']['watch'],
-                               'watchthispage'
-                       );
-                       $element[] = $this->processBottomLink(
-                               'unwatch',
-                               $content_nav['actions']['unwatch'],
-                               'unwatchthispage'
-                       );
-
-                       $element[] = $this->talkLink();
-
-                       $element[] = $this->processBottomLink( 'history', $content_nav['views']['history'], 'history' );
-                       $element[] = $this->processBottomLink( 'info', $toolbox['info'] );
-                       $element[] = $this->processBottomLink( 'whatlinkshere', $toolbox['whatlinkshere'] );
-                       $element[] = $this->processBottomLink( 'recentchangeslinked', $toolbox['recentchangeslinked'] );
-
-                       $element[] = $this->processBottomLink( 'contributions', $toolbox['contributions'] );
-                       $element[] = $this->processBottomLink( 'emailuser', $toolbox['emailuser'] );
-
-                       $lines[] = $this->getSkin()->getLanguage()->pipeList( array_filter( $element ) );
-
-                       // Second row. Privileged actions.
-                       $element = array();
-
-                       $element[] = $this->processBottomLink(
-                               'delete',
-                               $content_nav['actions']['delete'],
-                               'deletethispage'
-                       );
-                       $element[] = $this->processBottomLink(
-                               'undelete',
-                               $content_nav['actions']['undelete'],
-                               'undeletethispage'
-                       );
-
-                       $element[] = $this->processBottomLink(
-                               'protect',
-                               $content_nav['actions']['protect'],
-                               'protectthispage'
-                       );
-                       $element[] = $this->processBottomLink(
-                               'unprotect',
-                               $content_nav['actions']['unprotect'],
-                               'unprotectthispage'
-                       );
-
-                       $element[] = $this->processBottomLink( 'move', $content_nav['actions']['move'], 'movethispage' );
-
-                       $lines[] = $this->getSkin()->getLanguage()->pipeList( array_filter( $element ) );
-
-                       // Third row. Language links.
-                       $lines[] = $this->otherLanguages();
-               }
-
-               return implode( array_filter( $lines ), "<br />\n" ) . "<br />\n";
-       }
-
-       function talkLink() {
-               $title = $this->getSkin()->getTitle();
-
-               if ( $title->getNamespace() == NS_SPECIAL ) {
-                       // No discussion links for special pages
-                       return "";
-               }
-
-               $companionTitle = $title->isTalkPage() ? $title->getSubjectPage() : $title->getTalkPage();
-               $companionNamespace = $companionTitle->getNamespace();
-
-               // TODO these messages are only be used by CologneBlue,
-               // kill and replace with something more sensibly named?
-               $nsToMessage = array(
-                       NS_MAIN => 'articlepage',
-                       NS_USER => 'userpage',
-                       NS_PROJECT => 'projectpage',
-                       NS_FILE => 'imagepage',
-                       NS_MEDIAWIKI => 'mediawikipage',
-                       NS_TEMPLATE => 'templatepage',
-                       NS_HELP => 'viewhelppage',
-                       NS_CATEGORY => 'categorypage',
-                       NS_FILE => 'imagepage',
-               );
-
-               // Find out the message to use for link text. Use either the array above or,
-               // for non-talk pages, a generic "discuss this" message.
-               // Default is the same as for main namespace.
-               if ( isset( $nsToMessage[$companionNamespace] ) ) {
-                       $message = $nsToMessage[$companionNamespace];
-               } else {
-                       $message = $companionTitle->isTalkPage() ? 'talkpage' : 'articlepage';
-               }
-
-               // Obviously this can't be reasonable and just return the key for talk
-               // namespace, only for content ones. Thus we have to mangle it in
-               // exactly the same way SkinTemplate does. (bug 40805)
-               $key = $companionTitle->getNamespaceKey( '' );
-               if ( $companionTitle->isTalkPage() ) {
-                       $key = ( $key == 'main' ? 'talk' : $key . "_talk" );
-               }
-
-               // Use the regular navigational link, but replace its text. Everything else stays unmodified.
-               $namespacesLinks = $this->data['content_navigation']['namespaces'];
-
-               return $this->processBottomLink( $message, $namespacesLinks[$key], $message );
-       }
-
-       /**
-        * Takes a navigational link generated by SkinTemplate in whichever way
-        * and mangles attributes unsuitable for repeated use. In particular, this
-        * modifies the ids and removes the accesskeys. This is necessary to be
-        * able to use the same navlink twice, e.g. in sidebar and in footer.
-        *
-        * @param array $navlink Navigational link generated by SkinTemplate
-        * @param mixed $idPrefix Prefix to add to id of this navlink. If false, id
-        *   is removed entirely. Default is 'cb-'.
-        */
-       function processNavlinkForDocument( $navlink, $idPrefix = 'cb-' ) {
-               if ( $navlink['id'] ) {
-                       $navlink['single-id'] = $navlink['id']; // to allow for tooltip generation
-                       $navlink['tooltiponly'] = true; // but no accesskeys
-
-                       // mangle or remove the id
-                       if ( $idPrefix === false ) {
-                               unset( $navlink['id'] );
-                       } else {
-                               $navlink['id'] = $idPrefix . $navlink['id'];
-                       }
-               }
-
-               return $navlink;
-       }
-
-       /**
-        * @return string
-        */
-       function beforeContent() {
-               ob_start();
-               ?>
-               <div id="content">
-               <div id="topbar">
-                       <p id="sitetitle" role="banner">
-                               <a href="<?php echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] ) ?>">
-                                       <?php echo wfMessage( 'sitetitle' )->escaped() ?>
-                               </a>
-                       </p>
-
-                       <p id="sitesub"><?php echo wfMessage( 'sitesubtitle' )->escaped() ?></p>
-
-                       <div id="linkcollection" role="navigation">
-                               <div id="langlinks"><?php echo str_replace( '<br />', '', $this->otherLanguages() ) ?></div>
-                               <?php echo $this->getSkin()->getCategories() ?>
-                               <div id="titlelinks"><?php echo $this->pageTitleLinks() ?></div>
-                               <?php
-                               if ( $this->data['newtalk'] ) {
-                                       ?>
-                                       <div class="usermessage"><strong><?php echo $this->data['newtalk'] ?></strong></div>
-                               <?php
-                               }
-                               ?>
-                       </div>
-               </div>
-               <div id="article" class="mw-body" role="main">
-               <?php
-               if ( $this->getSkin()->getSiteNotice() ) {
-                       ?>
-                       <div id="siteNotice"><?php echo $this->getSkin()->getSiteNotice() ?></div>
-               <?php
-               }
-               ?>
-               <h1 id="firstHeading" lang="<?php
-               $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
-               $this->text( 'pageLanguage' );
-               ?>"><span dir="auto"><?php echo $this->data['title'] ?></span></h1>
-               <?php
-               if ( $this->translator->translate( 'tagline' ) ) {
-                       ?>
-                       <p class="tagline"><?php
-                               echo htmlspecialchars( $this->translator->translate( 'tagline' ) )
-                               ?></p>
-               <?php
-               }
-               ?>
-               <?php
-               if ( $this->getSkin()->getOutput()->getSubtitle() ) {
-                       ?>
-                       <p class="subtitle"><?php echo $this->getSkin()->getOutput()->getSubtitle() ?></p>
-               <?php
-               }
-               ?>
-               <?php
-               if ( $this->getSkin()->subPageSubtitle() ) {
-                       ?>
-                       <p class="subpages"><?php echo $this->getSkin()->subPageSubtitle() ?></p>
-               <?php
-               }
-               ?>
-               <?php
-               $s = ob_get_contents();
-               ob_end_clean();
-
-               return $s;
-       }
-
-       /**
-        * @return string
-        */
-       function afterContent() {
-               ob_start();
-               ?>
-               </div>
-               <div id="footer">
-                       <div id="footer-navigation" role="navigation">
-                               <?php
-                               // Page-related links
-                               echo $this->bottomLinks();
-                               echo "\n<br />";
-
-                               // Footer and second searchbox
-                               echo $this->getSkin()->getLanguage()->pipeList( array(
-                                       $this->getSkin()->mainPageLink(),
-                                       $this->getSkin()->aboutLink(),
-                                       $this->searchForm( 'footer' )
-                               ) );
-                               ?>
-                       </div>
-                       <div id="footer-info" role="contentinfo">
-                               <?php
-                               // Standard footer info
-                               $footlinks = $this->getFooterLinks();
-                               if ( $footlinks['info'] ) {
-                                       foreach ( $footlinks['info'] as $item ) {
-                                               echo $this->data[$item] . ' ';
-                                       }
-                               }
-                               ?>
-                       </div>
-               </div>
-               </div>
-               <div id="mw-navigation">
-                       <h2><?php echo wfMessage( 'navigation-heading' )->escaped() ?></h2>
-
-                       <div id="toplinks" role="navigation">
-                               <p id="syslinks"><?php echo $this->sysLinks() ?></p>
-
-                               <p id="variantlinks"><?php echo $this->variantLinks() ?></p>
-                       </div>
-                       <?php echo $this->quickBar() ?>
-               </div>
-               <?php
-               $s = ob_get_contents();
-               ob_end_clean();
-
-               return $s;
-       }
-
-       /**
-        * @return string
-        */
-       function sysLinks() {
-               $s = array(
-                       $this->getSkin()->mainPageLink(),
-                       Linker::linkKnown(
-                               Title::newFromText( wfMessage( 'aboutpage' )->inContentLanguage()->text() ),
-                               wfMessage( 'about' )->text()
-                       ),
-                       Linker::makeExternalLink(
-                               Skin::makeInternalOrExternalUrl( wfMessage( 'helppage' )->inContentLanguage()->text() ),
-                               wfMessage( 'help' )->text(),
-                               false
-                       ),
-                       Linker::linkKnown(
-                               Title::newFromText( wfMessage( 'faqpage' )->inContentLanguage()->text() ),
-                               wfMessage( 'faq' )->text()
-                       ),
-               );
-
-               $personalUrls = $this->getPersonalTools();
-               foreach ( array( 'logout', 'createaccount', 'login' ) as $key ) {
-                       if ( $personalUrls[$key] ) {
-                               $s[] = $this->makeListItem( $key, $personalUrls[$key], array( 'tag' => 'span' ) );
-                       }
-               }
-
-               return $this->getSkin()->getLanguage()->pipeList( $s );
-       }
-
-       /**
-        * Adds CologneBlue-specific items to the sidebar: qbedit, qbpageoptions and qbmyoptions menus.
-        *
-        * @param array $bar Sidebar data
-        * @return array Modified sidebar data
-        */
-       function sidebarAdditions( $bar ) {
-               // "This page" and "Edit" menus
-               // We need to do some massaging here... we reuse all of the items,
-               // except for $...['views']['view'], as $...['namespaces']['main'] and
-               // $...['namespaces']['talk'] together serve the same purpose. We also
-               // don't use $...['variants'], these are displayed in the top menu.
-               $content_navigation = $this->data['content_navigation'];
-               $qbpageoptions = array_merge(
-                       $content_navigation['namespaces'],
-                       array(
-                               'history' => $content_navigation['views']['history'],
-                               'watch' => $content_navigation['actions']['watch'],
-                               'unwatch' => $content_navigation['actions']['unwatch'],
-                       )
-               );
-               $content_navigation['actions']['watch'] = null;
-               $content_navigation['actions']['unwatch'] = null;
-               $qbedit = array_merge(
-                       array(
-                               'edit' => $content_navigation['views']['edit'],
-                               'addsection' => $content_navigation['views']['addsection'],
-                       ),
-                       $content_navigation['actions']
-               );
-
-               // Personal tools ("My pages")
-               $qbmyoptions = $this->getPersonalTools();
-               foreach ( array( 'logout', 'createaccount', 'login', ) as $key ) {
-                       $qbmyoptions[$key] = null;
-               }
-
-               // Use the closest reasonable name
-               $bar['cactions'] = $qbedit;
-               $bar['pageoptions'] = $qbpageoptions; // this is a non-standard portlet name, but nothing fits
-               $bar['personal'] = $qbmyoptions;
-
-               return $bar;
-       }
-
-       /**
-        * Compute the sidebar
-        * @access private
-        *
-        * @return string
-        */
-       function quickBar() {
-               // Massage the sidebar. We want to:
-               // * place SEARCH at the beginning
-               // * add new portlets before TOOLBOX (or at the end, if it's missing)
-               // * remove LANGUAGES (langlinks are displayed elsewhere)
-               $orig_bar = $this->data['sidebar'];
-               $bar = array();
-               $hasToolbox = false;
-
-               // Always display search first
-               $bar['SEARCH'] = true;
-               // Copy everything except for langlinks, inserting new items before toolbox
-               foreach ( $orig_bar as $heading => $data ) {
-                       if ( $heading == 'TOOLBOX' ) {
-                               // Insert the stuff
-                               $bar = $this->sidebarAdditions( $bar );
-                               $hasToolbox = true;
-                       }
-
-                       if ( $heading != 'LANGUAGES' ) {
-                               $bar[$heading] = $data;
-                       }
-               }
-               // If toolbox is missing, add our items at the end
-               if ( !$hasToolbox ) {
-                       $bar = $this->sidebarAdditions( $bar );
-               }
-
-               // Fill out special sidebar items with content
-               $orig_bar = $bar;
-               $bar = array();
-               foreach ( $orig_bar as $heading => $data ) {
-                       if ( $heading == 'SEARCH' ) {
-                               $bar['search'] = $this->searchForm( 'sidebar' );
-                       } elseif ( $heading == 'TOOLBOX' ) {
-                               $bar['tb'] = $this->getToolbox();
-                       } else {
-                               $bar[$heading] = $data;
-                       }
-               }
-
-               // Output the sidebar
-               // CologneBlue uses custom messages for some portlets, but we should keep the ids for consistency
-               $idToMessage = array(
-                       'search' => 'qbfind',
-                       'navigation' => 'qbbrowse',
-                       'tb' => 'toolbox',
-                       'cactions' => 'qbedit',
-                       'personal' => 'qbmyoptions',
-                       'pageoptions' => 'qbpageoptions',
-               );
-
-               $s = "<div id='quickbar'>\n";
-
-               foreach ( $bar as $heading => $data ) {
-                       $portletId = Sanitizer::escapeId( "p-$heading" );
-                       $headingMsg = wfMessage( $idToMessage[$heading] ? $idToMessage[$heading] : $heading );
-                       $headingHTML = "<h3>";
-                       $headingHTML .= $headingMsg->exists()
-                               ? $headingMsg->escaped()
-                               : htmlspecialchars( $heading );
-                       $headingHTML .= "</h3>";
-                       $listHTML = "";
-
-                       if ( is_array( $data ) ) {
-                               // $data is an array of links
-                               foreach ( $data as $key => $link ) {
-                                       // Can be empty due to how the sidebar additions are done
-                                       if ( $link ) {
-                                               $listHTML .= $this->makeListItem( $key, $link );
-                                       }
-                               }
-                               if ( $listHTML ) {
-                                       $listHTML = "<ul>$listHTML</ul>";
-                               }
-                       } else {
-                               // $data is a HTML <ul>-list string
-                               $listHTML = $data;
-                       }
-
-                       if ( $listHTML ) {
-                               $role = ( $heading == 'search' ) ? 'search' : 'navigation';
-                               $s .= "<div class=\"portlet\" id=\"$portletId\" "
-                                       . "role=\"$role\">\n$headingHTML\n$listHTML\n</div>\n";
-                       }
-
-                       $s .= $this->renderAfterPortlet( $heading );
-               }
-
-               $s .= "</div>\n";
-
-               return $s;
-       }
-
-       /**
-        * @param string $label
-        * @return string
-        */
-       function searchForm( $which ) {
-               global $wgUseTwoButtonsSearchForm;
-
-               $search = $this->getSkin()->getRequest()->getText( 'search' );
-               $action = $this->data['searchaction'];
-               $s = "<form id=\"searchform-" . htmlspecialchars( $which )
-                       . "\" method=\"get\" class=\"inline\" action=\"$action\">";
-               if ( $which == 'footer' ) {
-                       $s .= wfMessage( 'qbfind' )->text() . ": ";
-               }
-
-               $s .= $this->makeSearchInput( array(
-                       'class' => 'mw-searchInput',
-                       'type' => 'text',
-                       'size' => '14'
-               ) );
-               $s .= ( $which == 'footer' ? " " : "<br />" );
-               $s .= $this->makeSearchButton( 'go', array( 'class' => 'searchButton' ) );
-
-               if ( $wgUseTwoButtonsSearchForm ) {
-                       $s .= $this->makeSearchButton( 'fulltext', array( 'class' => 'searchButton' ) );
-               } else {
-                       $s .= '<div><a href="' . $action . '" rel="search">'
-                               . wfMessage( 'powersearch-legend' )->escaped() . "</a></div>\n";
-               }
-
-               $s .= '</form>';
-
-               return $s;
-       }
-}
diff --git a/skins/Modern.php b/skins/Modern.php
deleted file mode 100644 (file)
index d1d11c3..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-<?php
-/**
- * Modern skin, derived from monobook template.
- *
- * 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
- *
- * @todo document
- * @file
- * @ingroup Skins
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
-       die( -1 );
-}
-
-/**
- * Inherit main code from SkinTemplate, set the CSS and template filter.
- * @todo document
- * @ingroup Skins
- */
-class SkinModern extends SkinTemplate {
-       public $skinname = 'modern';
-       public $stylename = 'modern';
-       public $template = 'ModernTemplate';
-       public $useHeadElement = true;
-
-       /**
-        * @param OutputPage $out
-        */
-       function setupSkinUserCss( OutputPage $out ) {
-               parent::setupSkinUserCss( $out );
-               $out->addModuleStyles( 'skins.modern' );
-       }
-}
-
-/**
- * @todo document
- * @ingroup Skins
- */
-class ModernTemplate extends MonoBookTemplate {
-
-       /**
-        * Template filter callback for Modern skin.
-        * Takes an associative array of data set from a SkinTemplate-based
-        * class, and a wrapper for MediaWiki's localization database, and
-        * outputs a formatted page.
-        *
-        * @access private
-        */
-       function execute() {
-               // Suppress warnings to prevent notices about missing indexes in $this->data
-               wfSuppressWarnings();
-
-               $this->html( 'headelement' );
-               ?>
-
-               <!-- heading -->
-               <div id="mw_header"><h1 id="firstHeading" lang="<?php
-                       $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
-                       $this->text( 'pageLanguage' );
-                       ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1></div>
-
-               <div id="mw_main">
-                       <div id="mw_contentwrapper">
-                               <!-- navigation portlet -->
-                               <?php $this->cactions(); ?>
-
-                               <!-- content -->
-                               <div id="mw_content" role="main">
-                                       <!-- contentholder does nothing by default, but it allows users to style the text inside
-                                                the content area without affecting the meaning of 'em' in #mw_content, which is used
-                                                for the margins -->
-                                       <div id="mw_contentholder" class="mw-body">
-                                               <div class='mw-topboxes'>
-                                                       <div id="mw-js-message"
-                                                               style="display:none;"<?php $this->html( 'userlangattributes' ) ?>></div>
-                                                       <div class="mw-topbox" id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
-                                                       <?php
-                                                       if ( $this->data['newtalk'] ) {
-                                                               ?>
-                                                               <div class="usermessage mw-topbox"><?php $this->html( 'newtalk' ) ?></div>
-                                                       <?php
-                                                       }
-                                                       ?>
-                                                       <?php
-                                                       if ( $this->data['sitenotice'] ) {
-                                                               ?>
-                                                               <div class="mw-topbox" id="siteNotice"><?php $this->html( 'sitenotice' ) ?></div>
-                                                       <?php
-                                                       }
-                                                       ?>
-                                               </div>
-
-                                               <div id="contentSub"<?php
-                                               $this->html( 'userlangattributes' )
-                                               ?>><?php
-                                                       $this->html( 'subtitle' )
-                                                       ?></div>
-
-                                               <?php
-                                               if ( $this->data['undelete'] ) {
-                                                       ?>
-                                                       <div id="contentSub2"><?php $this->html( 'undelete' ) ?></div><?php
-                                               }
-                                               ?>
-                                               <div id="jump-to-nav"><?php $this->msg( 'jumpto' ) ?>
-                                                       <a href="#mw_portlets"><?php
-                                                               $this->msg( 'jumptonavigation' ) ?></a><?php $this->msg( 'comma-separator' )
-                                                       ?>
-                                                       <a href="#searchInput"><?php $this->msg( 'jumptosearch' ) ?></a>
-                                               </div>
-
-                                               <?php $this->html( 'bodytext' ) ?>
-                                               <div class='mw_clear'></div>
-                                               <?php
-                                               if ( $this->data['catlinks'] ) {
-                                                       $this->html( 'catlinks' );
-                                               }
-                                               ?>
-                                               <?php $this->html( 'dataAfterContent' ) ?>
-                                       </div><!-- mw_contentholder -->
-                               </div><!-- mw_content -->
-                       </div><!-- mw_contentwrapper -->
-
-                       <div id="mw_portlets"<?php $this->html( "userlangattributes" ) ?>>
-                               <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
-
-                               <!-- portlets -->
-                               <?php $this->renderPortals( $this->data['sidebar'] ); ?>
-
-                       </div><!-- mw_portlets -->
-
-
-               </div><!-- main -->
-
-               <div class="mw_clear"></div>
-
-               <!-- personal portlet -->
-               <div class="portlet" id="p-personal" role="navigation">
-                       <h3><?php $this->msg( 'personaltools' ) ?></h3>
-
-                       <div class="pBody">
-                               <ul>
-                                       <?php
-                                       foreach ( $this->getPersonalTools() as $key => $item ) {
-                                               ?>
-                                               <?php echo $this->makeListItem( $key, $item ); ?>
-
-                                       <?php
-                                       }
-                                       ?>
-                               </ul>
-                       </div>
-               </div>
-
-
-               <!-- footer -->
-               <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
-                       <ul id="f-list">
-                               <?php
-                               foreach ( $this->getFooterLinks( "flat" ) as $aLink ) {
-                                       if ( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {
-                                               ?>
-                                               <li id="<?php echo $aLink ?>"><?php $this->html( $aLink ) ?></li>
-                                       <?php
-                                       }
-                               }
-                               ?>
-                       </ul>
-                       <?php
-                       foreach ( $this->getFooterIcons( "nocopyright" ) as $blockName => $footerIcons ) {
-                               ?>
-                               <div id="mw_<?php echo htmlspecialchars( $blockName ); ?>">
-                                       <?php
-                                       foreach ( $footerIcons as $icon ) {
-                                               ?>
-                                               <?php echo $this->getSkin()->makeFooterIcon( $icon, 'withoutImage' ); ?>
-
-                                       <?php
-                                       } ?>
-                               </div>
-                       <?php
-                       }
-                       ?>
-               </div>
-
-               <?php $this->printTrail(); ?>
-
-       </body>
-</html>
-               <?php
-               wfRestoreWarnings();
-       } // end of execute() method
-} // end of class
diff --git a/skins/MonoBook.php b/skins/MonoBook.php
deleted file mode 100644 (file)
index 72056b9..0000000
+++ /dev/null
@@ -1,412 +0,0 @@
-<?php
-/**
- * MonoBook nouveau.
- *
- * Translated from gwicke's previous TAL template version to remove
- * dependency on PHPTAL.
- *
- * 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
- *
- * @todo document
- * @file
- * @ingroup Skins
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
-       die( -1 );
-}
-
-/**
- * Inherit main code from SkinTemplate, set the CSS and template filter.
- * @todo document
- * @ingroup Skins
- */
-class SkinMonoBook extends SkinTemplate {
-       /** Using monobook. */
-       public $skinname = 'monobook';
-       public $stylename = 'monobook';
-       public $template = 'MonoBookTemplate';
-       public $useHeadElement = true;
-
-       /**
-        * @param OutputPage $out
-        */
-       function setupSkinUserCss( OutputPage $out ) {
-               parent::setupSkinUserCss( $out );
-
-               $out->addModuleStyles( array( 'mediawiki.skinning.interface', 'skins.monobook.styles' ) );
-
-               // TODO: Migrate all of these
-               $out->addStyle( 'monobook/IE60Fixes.css', 'screen', 'IE 6' );
-               $out->addStyle( 'monobook/IE70Fixes.css', 'screen', 'IE 7' );
-       }
-}
-
-/**
- * @todo document
- * @ingroup Skins
- */
-class MonoBookTemplate extends BaseTemplate {
-
-       /**
-        * Template filter callback for MonoBook skin.
-        * Takes an associative array of data set from a SkinTemplate-based
-        * class, and a wrapper for MediaWiki's localization database, and
-        * outputs a formatted page.
-        *
-        * @access private
-        */
-       function execute() {
-               // Suppress warnings to prevent notices about missing indexes in $this->data
-               wfSuppressWarnings();
-
-               $this->html( 'headelement' );
-               ?><div id="globalWrapper">
-               <div id="column-content">
-                       <div id="content" class="mw-body-primary" role="main">
-                               <a id="top"></a>
-                               <?php
-                               if ( $this->data['sitenotice'] ) {
-                                       ?>
-                                       <div id="siteNotice"><?php
-                                       $this->html( 'sitenotice' )
-                                       ?></div><?php
-                               }
-                               ?>
-
-                               <h1 id="firstHeading" class="firstHeading" lang="<?php
-                               $this->data['pageLanguage'] =
-                                       $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
-                               $this->text( 'pageLanguage' );
-                               ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
-
-                               <div id="bodyContent" class="mw-body">
-                                       <div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
-                                       <div id="contentSub"<?php
-                                       $this->html( 'userlangattributes' ) ?>><?php $this->html( 'subtitle' )
-                                               ?></div>
-                                       <?php if ( $this->data['undelete'] ) { ?>
-                                               <div id="contentSub2"><?php $this->html( 'undelete' ) ?></div>
-                                       <?php
-}
-                                       ?><?php
-                                       if ( $this->data['newtalk'] ) {
-                                               ?>
-                                               <div class="usermessage"><?php $this->html( 'newtalk' ) ?></div>
-                                       <?php
-                                       }
-                                       ?>
-                                       <div id="jump-to-nav" class="mw-jump"><?php
-                                               $this->msg( 'jumpto' )
-                                               ?> <a href="#column-one"><?php
-                                                       $this->msg( 'jumptonavigation' )
-                                                       ?></a><?php
-                                               $this->msg( 'comma-separator' )
-                                               ?><a href="#searchInput"><?php
-                                                       $this->msg( 'jumptosearch' )
-                                                       ?></a></div>
-
-                                       <!-- start content -->
-                                       <?php $this->html( 'bodytext' ) ?>
-                                       <?php
-                                       if ( $this->data['catlinks'] ) {
-                                               $this->html( 'catlinks' );
-                                       }
-                                       ?>
-                                       <!-- end content -->
-                                       <?php
-                                       if ( $this->data['dataAfterContent'] ) {
-                                               $this->html( 'dataAfterContent'
-                                               );
-                                       }
-                                       ?>
-                                       <div class="visualClear"></div>
-                               </div>
-                       </div>
-               </div>
-               <div id="column-one"<?php $this->html( 'userlangattributes' ) ?>>
-                       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
-                       <?php $this->cactions(); ?>
-                       <div class="portlet" id="p-personal" role="navigation">
-                               <h3><?php $this->msg( 'personaltools' ) ?></h3>
-
-                               <div class="pBody">
-                                       <ul<?php $this->html( 'userlangattributes' ) ?>>
-                                               <?php foreach ( $this->getPersonalTools() as $key => $item ) { ?>
-                                                       <?php echo $this->makeListItem( $key, $item ); ?>
-
-                                               <?php
-}
-                                               ?>
-                                       </ul>
-                               </div>
-                       </div>
-                       <div class="portlet" id="p-logo" role="banner">
-                               <?php
-                               echo Html::element( 'a', array(
-                                               'href' => $this->data['nav_urls']['mainpage']['href'],
-                                               'style' => "background-image: url({$this->data['logopath']});" )
-                                       + Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ); ?>
-
-                       </div>
-                       <?php
-                       $this->renderPortals( $this->data['sidebar'] );
-                       ?>
-               </div><!-- end of the left (by default at least) column -->
-               <div class="visualClear"></div>
-               <?php
-               $validFooterIcons = $this->getFooterIcons( "icononly" );
-               $validFooterLinks = $this->getFooterLinks( "flat" ); // Additional footer links
-
-               if ( count( $validFooterIcons ) + count( $validFooterLinks ) > 0 ) {
-                       ?>
-                       <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
-                       <?php
-                       $footerEnd = '</div>';
-               } else {
-                       $footerEnd = '';
-               }
-
-               foreach ( $validFooterIcons as $blockName => $footerIcons ) {
-                       ?>
-                       <div id="f-<?php echo htmlspecialchars( $blockName ); ?>ico">
-                               <?php foreach ( $footerIcons as $icon ) { ?>
-                                       <?php echo $this->getSkin()->makeFooterIcon( $icon ); ?>
-
-                               <?php
-}
-                               ?>
-                       </div>
-               <?php
-               }
-
-               if ( count( $validFooterLinks ) > 0 ) {
-                       ?>
-                       <ul id="f-list">
-                               <?php
-                               foreach ( $validFooterLinks as $aLink ) {
-                                       ?>
-                                       <li id="<?php echo $aLink ?>"><?php $this->html( $aLink ) ?></li>
-                               <?php
-                               }
-                               ?>
-                       </ul>
-               <?php
-               }
-
-               echo $footerEnd;
-               ?>
-
-               </div>
-               <?php
-               $this->printTrail();
-               echo Html::closeElement( 'body' );
-               echo Html::closeElement( 'html' );
-               wfRestoreWarnings();
-       } // end of execute() method
-
-       /*************************************************************************************************/
-
-       /**
-        * @param array $sidebar
-        */
-       protected function renderPortals( $sidebar ) {
-               if ( !isset( $sidebar['SEARCH'] ) ) {
-                       $sidebar['SEARCH'] = true;
-               }
-               if ( !isset( $sidebar['TOOLBOX'] ) ) {
-                       $sidebar['TOOLBOX'] = true;
-               }
-               if ( !isset( $sidebar['LANGUAGES'] ) ) {
-                       $sidebar['LANGUAGES'] = true;
-               }
-
-               foreach ( $sidebar as $boxName => $content ) {
-                       if ( $content === false ) {
-                               continue;
-                       }
-
-                       if ( $boxName == 'SEARCH' ) {
-                               $this->searchBox();
-                       } elseif ( $boxName == 'TOOLBOX' ) {
-                               $this->toolbox();
-                       } elseif ( $boxName == 'LANGUAGES' ) {
-                               $this->languageBox();
-                       } else {
-                               $this->customBox( $boxName, $content );
-                       }
-               }
-       }
-
-       function searchBox() {
-               global $wgUseTwoButtonsSearchForm;
-               ?>
-               <div id="p-search" class="portlet" role="search">
-                       <h3><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h3>
-
-                       <div id="searchBody" class="pBody">
-                               <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
-                                       <input type='hidden' name="title" value="<?php $this->text( 'searchtitle' ) ?>"/>
-                                       <?php echo $this->makeSearchInput( array( "id" => "searchInput" ) ); ?>
-
-                                       <?php
-                                       echo $this->makeSearchButton(
-                                               "go",
-                                               array( "id" => "searchGoButton", "class" => "searchButton" )
-                                       );
-
-                                       if ( $wgUseTwoButtonsSearchForm ) {
-                                               ?>&#160;
-                                               <?php echo $this->makeSearchButton(
-                                                       "fulltext",
-                                                       array( "id" => "mw-searchButton", "class" => "searchButton" )
-                                               );
-                                       } else {
-                                               ?>
-
-                                               <div><a href="<?php
-                                               $this->text( 'searchaction' )
-                                               ?>" rel="search"><?php $this->msg( 'powersearch-legend' ) ?></a></div><?php
-                                       } ?>
-
-                               </form>
-
-                               <?php $this->renderAfterPortlet( 'search' ); ?>
-                       </div>
-               </div>
-       <?php
-       }
-
-       /**
-        * Prints the cactions bar.
-        * Shared between MonoBook and Modern
-        */
-       function cactions() {
-               ?>
-               <div id="p-cactions" class="portlet" role="navigation">
-                       <h3><?php $this->msg( 'views' ) ?></h3>
-
-                       <div class="pBody">
-                               <ul><?php
-                                       foreach ( $this->data['content_actions'] as $key => $tab ) {
-                                               echo '
-                               ' . $this->makeListItem( $key, $tab );
-                                       } ?>
-
-                               </ul>
-                               <?php $this->renderAfterPortlet( 'cactions' ); ?>
-                       </div>
-               </div>
-       <?php
-       }
-
-       /*************************************************************************************************/
-       function toolbox() {
-               ?>
-               <div class="portlet" id="p-tb" role="navigation">
-                       <h3><?php $this->msg( 'toolbox' ) ?></h3>
-
-                       <div class="pBody">
-                               <ul>
-                                       <?php
-                                       foreach ( $this->getToolbox() as $key => $tbitem ) {
-                                               ?>
-                                               <?php echo $this->makeListItem( $key, $tbitem ); ?>
-
-                                       <?php
-                                       }
-                                       wfRunHooks( 'MonoBookTemplateToolboxEnd', array( &$this ) );
-                                       wfRunHooks( 'SkinTemplateToolboxEnd', array( &$this, true ) );
-                                       ?>
-                               </ul>
-                               <?php $this->renderAfterPortlet( 'tb' ); ?>
-                       </div>
-               </div>
-       <?php
-       }
-
-       /*************************************************************************************************/
-       function languageBox() {
-               if ( $this->data['language_urls'] !== false ) {
-                       ?>
-                       <div id="p-lang" class="portlet" role="navigation">
-                               <h3<?php $this->html( 'userlangattributes' ) ?>><?php $this->msg( 'otherlanguages' ) ?></h3>
-
-                               <div class="pBody">
-                                       <ul>
-                                               <?php foreach ( $this->data['language_urls'] as $key => $langlink ) { ?>
-                                                       <?php echo $this->makeListItem( $key, $langlink ); ?>
-
-                                               <?php
-}
-                                               ?>
-                                       </ul>
-
-                                       <?php $this->renderAfterPortlet( 'lang' ); ?>
-                               </div>
-                       </div>
-               <?php
-               }
-       }
-
-       /*************************************************************************************************/
-       /**
-        * @param string $bar
-        * @param array|string $cont
-        */
-       function customBox( $bar, $cont ) {
-               $portletAttribs = array(
-                       'class' => 'generated-sidebar portlet',
-                       'id' => Sanitizer::escapeId( "p-$bar" ),
-                       'role' => 'navigation'
-               );
-
-               $tooltip = Linker::titleAttrib( "p-$bar" );
-               if ( $tooltip !== false ) {
-                       $portletAttribs['title'] = $tooltip;
-               }
-               echo '  ' . Html::openElement( 'div', $portletAttribs );
-               $msgObj = wfMessage( $bar );
-               ?>
-
-               <h3><?php echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $bar ); ?></h3>
-               <div class='pBody'>
-                       <?php
-                       if ( is_array( $cont ) ) {
-                               ?>
-                               <ul>
-                                       <?php
-                                       foreach ( $cont as $key => $val ) {
-                                               ?>
-                                               <?php echo $this->makeListItem( $key, $val ); ?>
-
-                                       <?php
-                                       }
-                                       ?>
-                               </ul>
-                       <?php
-                       } else {
-                               # allow raw HTML block to be defined by extensions
-                               print $cont;
-                       }
-
-                       $this->renderAfterPortlet( $bar );
-                       ?>
-               </div>
-               </div>
-       <?php
-       }
-} // end of class
diff --git a/skins/Vector.php b/skins/Vector.php
deleted file mode 100644 (file)
index 35861c2..0000000
+++ /dev/null
@@ -1,662 +0,0 @@
-<?php
-/**
- * Vector - Modern version of MonoBook with fresh look and many usability
- * improvements.
- *
- * 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
- *
- * @todo document
- * @file
- * @ingroup Skins
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
-       die( -1 );
-}
-
-/**
- * SkinTemplate class for Vector skin
- * @ingroup Skins
- */
-class SkinVector extends SkinTemplate {
-       public $useHeadElement = true;
-       public $skinname = 'vector';
-       public $stylename = 'vector';
-       public $template = 'VectorTemplate';
-
-       protected static $bodyClasses = array( 'vector-animateLayout' );
-
-       /**
-        * Initializes output page and sets up skin-specific parameters
-        * @param OutputPage $out Object to initialize
-        */
-       public function initPage( OutputPage $out ) {
-               global $wgLocalStylePath;
-
-               parent::initPage( $out );
-
-               // Append CSS which includes IE only behavior fixes for hover support -
-               // this is better than including this in a CSS file since it doesn't
-               // wait for the CSS file to load before fetching the HTC file.
-               $min = $this->getRequest()->getFuzzyBool( 'debug' ) ? '' : '.min';
-               $out->addHeadItem( 'csshover',
-                       '<!--[if lt IE 7]><style type="text/css">body{behavior:url("' .
-                               htmlspecialchars( $wgLocalStylePath ) .
-                               "/{$this->stylename}/csshover{$min}.htc\")}</style><![endif]-->"
-               );
-
-               $out->addModules( array( 'skins.vector.js' ) );
-       }
-
-       /**
-        * Loads skin and user CSS files.
-        * @param OutputPage $out
-        */
-       function setupSkinUserCss( OutputPage $out ) {
-               parent::setupSkinUserCss( $out );
-
-               $styles = array( 'mediawiki.skinning.interface', 'skins.vector.styles' );
-               wfRunHooks( 'SkinVectorStyleModules', array( $this, &$styles ) );
-               $out->addModuleStyles( $styles );
-       }
-
-       /**
-        * Adds classes to the body element.
-        *
-        * @param OutputPage $out
-        * @param array &$bodyAttrs Array of attributes that will be set on the body element
-        */
-       function addToBodyAttributes( $out, &$bodyAttrs ) {
-               if ( isset( $bodyAttrs['class'] ) && strlen( $bodyAttrs['class'] ) > 0 ) {
-                       $bodyAttrs['class'] .= ' ' . implode( ' ', static::$bodyClasses );
-               } else {
-                       $bodyAttrs['class'] = implode( ' ', static::$bodyClasses );
-               }
-       }
-}
-
-/**
- * QuickTemplate class for Vector skin
- * @ingroup Skins
- */
-class VectorTemplate extends BaseTemplate {
-       /* Functions */
-
-       /**
-        * Outputs the entire contents of the (X)HTML page
-        */
-       public function execute() {
-               global $wgVectorUseIconWatch;
-
-               // Build additional attributes for navigation urls
-               $nav = $this->data['content_navigation'];
-
-               if ( $wgVectorUseIconWatch ) {
-                       $mode = $this->getSkin()->getUser()->isWatched( $this->getSkin()->getRelevantTitle() )
-                               ? 'unwatch'
-                               : 'watch';
-
-                       if ( isset( $nav['actions'][$mode] ) ) {
-                               $nav['views'][$mode] = $nav['actions'][$mode];
-                               $nav['views'][$mode]['class'] = rtrim( 'icon ' . $nav['views'][$mode]['class'], ' ' );
-                               $nav['views'][$mode]['primary'] = true;
-                               unset( $nav['actions'][$mode] );
-                       }
-               }
-
-               $xmlID = '';
-               foreach ( $nav as $section => $links ) {
-                       foreach ( $links as $key => $link ) {
-                               if ( $section == 'views' && !( isset( $link['primary'] ) && $link['primary'] ) ) {
-                                       $link['class'] = rtrim( 'collapsible ' . $link['class'], ' ' );
-                               }
-
-                               $xmlID = isset( $link['id'] ) ? $link['id'] : 'ca-' . $xmlID;
-                               $nav[$section][$key]['attributes'] =
-                                       ' id="' . Sanitizer::escapeId( $xmlID ) . '"';
-                               if ( $link['class'] ) {
-                                       $nav[$section][$key]['attributes'] .=
-                                               ' class="' . htmlspecialchars( $link['class'] ) . '"';
-                                       unset( $nav[$section][$key]['class'] );
-                               }
-                               if ( isset( $link['tooltiponly'] ) && $link['tooltiponly'] ) {
-                                       $nav[$section][$key]['key'] =
-                                               Linker::tooltip( $xmlID );
-                               } else {
-                                       $nav[$section][$key]['key'] =
-                                               Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( $xmlID ) );
-                               }
-                       }
-               }
-               $this->data['namespace_urls'] = $nav['namespaces'];
-               $this->data['view_urls'] = $nav['views'];
-               $this->data['action_urls'] = $nav['actions'];
-               $this->data['variant_urls'] = $nav['variants'];
-
-               // Reverse horizontally rendered navigation elements
-               if ( $this->data['rtl'] ) {
-                       $this->data['view_urls'] =
-                               array_reverse( $this->data['view_urls'] );
-                       $this->data['namespace_urls'] =
-                               array_reverse( $this->data['namespace_urls'] );
-                       $this->data['personal_urls'] =
-                               array_reverse( $this->data['personal_urls'] );
-               }
-               // Output HTML Page
-               $this->html( 'headelement' );
-               ?>
-               <div id="mw-page-base" class="noprint"></div>
-               <div id="mw-head-base" class="noprint"></div>
-               <div id="content" class="mw-body" role="main">
-                       <a id="top"></a>
-
-                       <div id="mw-js-message" style="display:none;"<?php $this->html( 'userlangattributes' ) ?>></div>
-                       <?php
-                       if ( $this->data['sitenotice'] ) {
-                               ?>
-                               <div id="siteNotice"><?php $this->html( 'sitenotice' ) ?></div>
-                       <?php
-                       }
-                       ?>
-                       <h1 id="firstHeading" class="firstHeading" lang="<?php
-                       $this->data['pageLanguage'] =
-                               $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
-                       $this->text( 'pageLanguage' );
-                       ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
-                       <?php $this->html( 'prebodyhtml' ) ?>
-                       <div id="bodyContent" class="mw-body-content">
-                               <?php
-                               if ( $this->data['isarticle'] ) {
-                                       ?>
-                                       <div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
-                               <?php
-                               }
-                               ?>
-                               <div id="contentSub"<?php
-                               $this->html( 'userlangattributes' )
-                               ?>><?php $this->html( 'subtitle' ) ?></div>
-                               <?php
-                               if ( $this->data['undelete'] ) {
-                                       ?>
-                                       <div id="contentSub2"><?php $this->html( 'undelete' ) ?></div>
-                               <?php
-                               }
-                               ?>
-                               <?php
-                               if ( $this->data['newtalk'] ) {
-                                       ?>
-                                       <div class="usermessage"><?php $this->html( 'newtalk' ) ?></div>
-                               <?php
-                               }
-                               ?>
-                               <div id="jump-to-nav" class="mw-jump">
-                                       <?php $this->msg( 'jumpto' ) ?>
-                                       <a href="#mw-navigation"><?php
-                                               $this->msg( 'jumptonavigation' )
-                                               ?></a><?php
-                                       $this->msg( 'comma-separator' )
-                                       ?>
-                                       <a href="#p-search"><?php $this->msg( 'jumptosearch' ) ?></a>
-                               </div>
-                               <?php $this->html( 'bodycontent' ) ?>
-                               <?php
-                               if ( $this->data['printfooter'] ) {
-                                       ?>
-                                       <div class="printfooter">
-                                               <?php $this->html( 'printfooter' ); ?>
-                                       </div>
-                               <?php
-                               }
-                               ?>
-                               <?php
-                               if ( $this->data['catlinks'] ) {
-                                       ?>
-                                       <?php
-                                       $this->html( 'catlinks' );
-                                       ?>
-                               <?php
-                               }
-                               ?>
-                               <?php
-                               if ( $this->data['dataAfterContent'] ) {
-                                       ?>
-                                       <?php
-                                       $this->html( 'dataAfterContent' );
-                                       ?>
-                               <?php
-                               }
-                               ?>
-                               <div class="visualClear"></div>
-                               <?php $this->html( 'debughtml' ); ?>
-                       </div>
-               </div>
-               <div id="mw-navigation">
-                       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
-
-                       <div id="mw-head">
-                               <?php $this->renderNavigation( 'PERSONAL' ); ?>
-                               <div id="left-navigation">
-                                       <?php $this->renderNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?>
-                               </div>
-                               <div id="right-navigation">
-                                       <?php $this->renderNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?>
-                               </div>
-                       </div>
-                       <div id="mw-panel">
-                               <div id="p-logo" role="banner"><a style="background-image: url(<?php
-                                       $this->text( 'logopath' )
-                                       ?>);" href="<?php
-                                       echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] )
-                                       ?>" <?php
-                                       echo Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) )
-                                       ?>></a></div>
-                               <?php $this->renderPortals( $this->data['sidebar'] ); ?>
-                       </div>
-               </div>
-               <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
-                       <?php
-                       foreach ( $this->getFooterLinks() as $category => $links ) {
-                               ?>
-                               <ul id="footer-<?php
-                               echo $category
-                               ?>">
-                                       <?php
-                                       foreach ( $links as $link ) {
-                                               ?>
-                                               <li id="footer-<?php
-                                               echo $category
-                                               ?>-<?php
-                                               echo $link
-                                               ?>"><?php
-                                                       $this->html( $link )
-                                                       ?></li>
-                                       <?php
-                                       }
-                                       ?>
-                               </ul>
-                       <?php
-                       }
-                       ?>
-                       <?php $footericons = $this->getFooterIcons( "icononly" );
-                       if ( count( $footericons ) > 0 ) {
-                               ?>
-                               <ul id="footer-icons" class="noprint">
-                                       <?php
-                                       foreach ( $footericons as $blockName => $footerIcons ) {
-                                               ?>
-                                               <li id="footer-<?php
-                                               echo htmlspecialchars( $blockName ); ?>ico">
-                                                       <?php
-                                                       foreach ( $footerIcons as $icon ) {
-                                                               ?>
-                                                               <?php
-                                                               echo $this->getSkin()->makeFooterIcon( $icon );
-                                                               ?>
-
-                                                       <?php
-                                                       }
-                                                       ?>
-                                               </li>
-                                       <?php
-                                       }
-                                       ?>
-                               </ul>
-                       <?php
-                       }
-                       ?>
-                       <div style="clear:both"></div>
-               </div>
-               <?php $this->printTrail(); ?>
-
-       </body>
-</html>
-       <?php
-       }
-
-       /**
-        * Render a series of portals
-        *
-        * @param array $portals
-        */
-       protected function renderPortals( $portals ) {
-               // Force the rendering of the following portals
-               if ( !isset( $portals['SEARCH'] ) ) {
-                       $portals['SEARCH'] = true;
-               }
-               if ( !isset( $portals['TOOLBOX'] ) ) {
-                       $portals['TOOLBOX'] = true;
-               }
-               if ( !isset( $portals['LANGUAGES'] ) ) {
-                       $portals['LANGUAGES'] = true;
-               }
-               // Render portals
-               foreach ( $portals as $name => $content ) {
-                       if ( $content === false ) {
-                               continue;
-                       }
-
-                       switch ( $name ) {
-                               case 'SEARCH':
-                                       break;
-                               case 'TOOLBOX':
-                                       $this->renderPortal( 'tb', $this->getToolbox(), 'toolbox', 'SkinTemplateToolboxEnd' );
-                                       break;
-                               case 'LANGUAGES':
-                                       if ( $this->data['language_urls'] !== false ) {
-                                               $this->renderPortal( 'lang', $this->data['language_urls'], 'otherlanguages' );
-                                       }
-                                       break;
-                               default:
-                                       $this->renderPortal( $name, $content );
-                                       break;
-                       }
-               }
-       }
-
-       /**
-        * @param string $name
-        * @param array $content
-        * @param null|string $msg
-        * @param null|string|array $hook
-        */
-       protected function renderPortal( $name, $content, $msg = null, $hook = null ) {
-               if ( $msg === null ) {
-                       $msg = $name;
-               }
-               $msgObj = wfMessage( $msg );
-               ?>
-               <div class="portal" role="navigation" id='<?php
-               echo Sanitizer::escapeId( "p-$name" )
-               ?>'<?php
-               echo Linker::tooltip( 'p-' . $name )
-               ?> aria-labelledby='<?php echo Sanitizer::escapeId( "p-$name-label" ) ?>'>
-                       <h3<?php
-                       $this->html( 'userlangattributes' )
-                       ?> id='<?php
-                       echo Sanitizer::escapeId( "p-$name-label" )
-                       ?>'><?php
-                               echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg );
-                               ?></h3>
-
-                       <div class="body">
-                               <?php
-                               if ( is_array( $content ) ) {
-                                       ?>
-                                       <ul>
-                                               <?php
-                                               foreach ( $content as $key => $val ) {
-                                                       ?>
-                                                       <?php echo $this->makeListItem( $key, $val ); ?>
-
-                                               <?php
-                                               }
-                                               if ( $hook !== null ) {
-                                                       wfRunHooks( $hook, array( &$this, true ) );
-                                               }
-                                               ?>
-                                       </ul>
-                               <?php
-                               } else {
-                                       ?>
-                                       <?php
-                                       echo $content; /* Allow raw HTML block to be defined by extensions */
-                               }
-
-                               $this->renderAfterPortlet( $name );
-                               ?>
-                       </div>
-               </div>
-       <?php
-       }
-
-       /**
-        * Render one or more navigations elements by name, automatically reveresed
-        * when UI is in RTL mode
-        *
-        * @param array $elements
-        */
-       protected function renderNavigation( $elements ) {
-               global $wgVectorUseSimpleSearch;
-
-               // If only one element was given, wrap it in an array, allowing more
-               // flexible arguments
-               if ( !is_array( $elements ) ) {
-                       $elements = array( $elements );
-                       // If there's a series of elements, reverse them when in RTL mode
-               } elseif ( $this->data['rtl'] ) {
-                       $elements = array_reverse( $elements );
-               }
-               // Render elements
-               foreach ( $elements as $name => $element ) {
-                       switch ( $element ) {
-                               case 'NAMESPACES':
-                                       ?>
-                                       <div id="p-namespaces" role="navigation" class="vectorTabs<?php
-                                       if ( count( $this->data['namespace_urls'] ) == 0 ) {
-                                               echo ' emptyPortlet';
-                                       }
-                                       ?>" aria-labelledby="p-namespaces-label">
-                                               <h3 id="p-namespaces-label"><?php $this->msg( 'namespaces' ) ?></h3>
-                                               <ul<?php $this->html( 'userlangattributes' ) ?>>
-                                                       <?php
-                                                       foreach ( $this->data['namespace_urls'] as $link ) {
-                                                               ?>
-                                                               <li <?php
-                                                               echo $link['attributes']
-                                                               ?>><span><a href="<?php
-                                                                               echo htmlspecialchars( $link['href'] )
-                                                                               ?>" <?php
-                                                                               echo $link['key']
-                                                                               ?>><?php
-                                                                                       echo htmlspecialchars( $link['text'] )
-                                                                                       ?></a></span></li>
-                                                       <?php
-                                                       }
-                                                       ?>
-                                               </ul>
-                                       </div>
-                                       <?php
-                                       break;
-                               case 'VARIANTS':
-                                       ?>
-                                       <div id="p-variants" role="navigation" class="vectorMenu<?php
-                                       if ( count( $this->data['variant_urls'] ) == 0 ) {
-                                               echo ' emptyPortlet';
-                                       }
-                                       ?>" aria-labelledby="p-variants-label">
-                                               <h3 id="mw-vector-current-variant">
-                                                       <?php
-                                                       foreach ( $this->data['variant_urls'] as $link ) {
-                                                               ?>
-                                                               <?php
-                                                               if ( stripos( $link['attributes'], 'selected' ) !== false ) {
-                                                                       ?>
-                                                                       <?php
-                                                                       echo htmlspecialchars( $link['text'] )
-                                                                       ?>
-                                                               <?php
-                                                               }
-                                                               ?>
-                                                       <?php
-                                                       }
-                                                       ?>
-                                               </h3>
-
-                                               <h3 id="p-variants-label"><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h3>
-
-                                               <div class="menu">
-                                                       <ul>
-                                                               <?php
-                                                               foreach ( $this->data['variant_urls'] as $link ) {
-                                                                       ?>
-                                                                       <li<?php
-                                                                       echo $link['attributes']
-                                                                       ?>><a href="<?php
-                                                                               echo htmlspecialchars( $link['href'] )
-                                                                               ?>" lang="<?php
-                                                                               echo htmlspecialchars( $link['lang'] )
-                                                                               ?>" hreflang="<?php
-                                                                               echo htmlspecialchars( $link['hreflang'] )
-                                                                               ?>" <?php
-                                                                               echo $link['key']
-                                                                               ?>><?php
-                                                                                       echo htmlspecialchars( $link['text'] )
-                                                                                       ?></a></li>
-                                                               <?php
-                                                               }
-                                                               ?>
-                                                       </ul>
-                                               </div>
-                                       </div>
-                                       <?php
-                                       break;
-                               case 'VIEWS':
-                                       ?>
-                                       <div id="p-views" role="navigation" class="vectorTabs<?php
-                                       if ( count( $this->data['view_urls'] ) == 0 ) {
-                                               echo ' emptyPortlet';
-                                       }
-                                       ?>" aria-labelledby="p-views-label">
-                                               <h3 id="p-views-label"><?php $this->msg( 'views' ) ?></h3>
-                                               <ul<?php
-                                               $this->html( 'userlangattributes' )
-                                               ?>>
-                                                       <?php
-                                                       foreach ( $this->data['view_urls'] as $link ) {
-                                                               ?>
-                                                               <li<?php
-                                                               echo $link['attributes']
-                                                               ?>><span><a href="<?php
-                                                                               echo htmlspecialchars( $link['href'] )
-                                                                               ?>" <?php
-                                                                               echo $link['key']
-                                                                               ?>><?php
-                                                                                       // $link['text'] can be undefined - bug 27764
-                                                                                       if ( array_key_exists( 'text', $link ) ) {
-                                                                                               echo array_key_exists( 'img', $link )
-                                                                                                       ? '<img src="' . $link['img'] . '" alt="' . $link['text'] . '" />'
-                                                                                                       : htmlspecialchars( $link['text'] );
-                                                                                       }
-                                                                                       ?></a></span></li>
-                                                       <?php
-                                                       }
-                                                       ?>
-                                               </ul>
-                                       </div>
-                                       <?php
-                                       break;
-                               case 'ACTIONS':
-                                       ?>
-                                       <div id="p-cactions" role="navigation" class="vectorMenu<?php
-                                       if ( count( $this->data['action_urls'] ) == 0 ) {
-                                               echo ' emptyPortlet';
-                                       }
-                                       ?>" aria-labelledby="p-cactions-label">
-                                               <h3 id="p-cactions-label"><span><?php $this->msg( 'actions' ) ?></span><a href="#"></a></h3>
-
-                                               <div class="menu">
-                                                       <ul<?php $this->html( 'userlangattributes' ) ?>>
-                                                               <?php
-                                                               foreach ( $this->data['action_urls'] as $link ) {
-                                                                       ?>
-                                                                       <li<?php
-                                                                       echo $link['attributes']
-                                                                       ?>>
-                                                                               <a href="<?php
-                                                                               echo htmlspecialchars( $link['href'] )
-                                                                               ?>" <?php
-                                                                               echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] )
-                                                                                       ?></a>
-                                                                       </li>
-                                                               <?php
-                                                               }
-                                                               ?>
-                                                       </ul>
-                                               </div>
-                                       </div>
-                                       <?php
-                                       break;
-                               case 'PERSONAL':
-                                       ?>
-                                       <div id="p-personal" role="navigation" class="<?php
-                                       if ( count( $this->data['personal_urls'] ) == 0 ) {
-                                               echo ' emptyPortlet';
-                                       }
-                                       ?>" aria-labelledby="p-personal-label">
-                                               <h3 id="p-personal-label"><?php $this->msg( 'personaltools' ) ?></h3>
-                                               <ul<?php $this->html( 'userlangattributes' ) ?>>
-                                                       <?php
-                                                       $personalTools = $this->getPersonalTools();
-                                                       foreach ( $personalTools as $key => $item ) {
-                                                               echo $this->makeListItem( $key, $item );
-                                                       }
-                                                       ?>
-                                               </ul>
-                                       </div>
-                                       <?php
-                                       break;
-                               case 'SEARCH':
-                                       ?>
-                                       <div id="p-search" role="search">
-                                               <h3<?php $this->html( 'userlangattributes' ) ?>>
-                                                       <label for="searchInput"><?php $this->msg( 'search' ) ?></label>
-                                               </h3>
-
-                                               <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
-                                                       <?php
-                                                       if ($wgVectorUseSimpleSearch) {
-                                                       ?>
-                                                       <div id="simpleSearch">
-                                                               <?php
-                                                       } else {
-                                                       ?>
-                                                               <div>
-                                                                       <?php
-                                                       }
-                                                       ?>
-                                                       <?php
-                                                       echo $this->makeSearchInput( array( 'id' => 'searchInput' ) );
-                                                       echo Html::hidden( 'title', $this->get( 'searchtitle' ) );
-                                                       // We construct two buttons (for 'go' and 'fulltext' search modes),
-                                                       // but only one will be visible and actionable at a time (they are
-                                                       // overlaid on top of each other in CSS).
-                                                       // * Browsers will use the 'fulltext' one by default (as it's the
-                                                       //   first in tree-order), which is desirable when they are unable
-                                                       //   to show search suggestions (either due to being broken or
-                                                       //   having JavaScript turned off).
-                                                       // * The mediawiki.searchSuggest module, after doing tests for the
-                                                       //   broken browsers, removes the 'fulltext' button and handles
-                                                       //   'fulltext' search itself; this will reveal the 'go' button and
-                                                       //   cause it to be used.
-                                                       echo $this->makeSearchButton(
-                                                               'fulltext',
-                                                               array( 'id' => 'mw-searchButton', 'class' => 'searchButton mw-fallbackSearchButton' )
-                                                       );
-                                                       echo $this->makeSearchButton(
-                                                               'go',
-                                                               array( 'id' => 'searchButton', 'class' => 'searchButton' )
-                                                       );
-                                                       ?>
-                                                               </div>
-                                               </form>
-                                       </div>
-                                       <?php
-
-                                       break;
-                       }
-               }
-       }
-}
diff --git a/skins/cologneblue/print.css b/skins/cologneblue/print.css
deleted file mode 100644 (file)
index d4b0551..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#sitetitle,
-#sitesub,
-#titlelinks,
-#footer-navigation {
-       display: none;
-}
diff --git a/skins/cologneblue/screen.css b/skins/cologneblue/screen.css
deleted file mode 100644 (file)
index 5882396..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-body {
-       margin: 0;
-       padding: 0;
-       color: black;
-       font-family: serif;
-}
-
-#specialform {
-       display: inline;
-}
-
-#content {
-       top: 0;
-       margin: 0;
-       padding: 0;
-}
-
-#mw-data-after-content {
-       font-family: Verdana, Arial, sans-serif;
-       color: black;
-       font-size: 8pt;
-}
-
-#powersearch {
-       background: #DDEEFF;
-       border-style: solid;
-       border-width: 1px;
-       padding: 2px;
-}
-
-#quickbar {
-       width: 140px;
-       top: 18ex;
-       padding: 2px;
-       visibility: visible;
-       z-index: 99;
-}
-
-#article, #article td, #article th, #article p {
-       font-family: Verdana, Arial, sans-serif;
-       font-size: 10pt;
-       color: black;
-}
-
-#article p {
-       padding-top: 0;
-       padding-bottom: 0;
-       margin-top: 1ex;
-       margin-bottom: 0;
-}
-
-p, pre, .mw-code, td, th, li, dd, dt {
-       line-height: 12pt;
-}
-
-textarea {
-       overflow: auto;
-       width: 100%;
-       display: block;
-       -moz-box-sizing: border-box;
-       -webkit-box-sizing: border-box;
-       box-sizing: border-box;
-}
-
-#footer {
-       margin-right: 2%;
-       margin-top: 1em;
-       padding: 4px;
-       font-family: verdana, arial, sans-serif;
-       font-size: 10pt;
-       text-align: center;
-}
-
-#footer form {
-       display: inline;
-}
-
-#cb-ca-edit {
-       font-weight: bold;
-}
-
-#pagestats {
-       font-family: Verdana, Arial, sans-serif;
-       color: black;
-       font-size: 9pt;
-}
-
-#quickbar {
-       font-family: Verdana, Arial, sans-serif;
-       font-size: 8pt;
-       font-weight: bold;
-       line-height: 9.5pt;
-       text-decoration: none;
-       color: black;
-       padding: 0;
-       margin-top: 0;
-}
-
-#quickbar a {
-       color: #446688;
-}
-
-/* Hide, but keep accessible for screen-readers */
-#mw-navigation h2 {
-       position: absolute;
-       top: -9999px;
-}
-
-#quickbar h3 {
-       font-family: Verdana, Arial, sans-serif;
-       font-size: 10pt;
-       font-weight: bold;
-       line-height: 12pt;
-       text-decoration: none;
-       color: #666666;
-       padding: 0;
-       margin-bottom: 2px;
-       margin-top: 6px;
-}
-
-#quickbar form {
-       padding: 0;
-       margin-top: 0;
-}
-
-#quickbar .portlet ul,
-#quickbar .portlet li {
-       list-style-type: none;
-       margin: 0;
-       padding: 0;
-       line-height: inherit;
-}
-
-div.after-portlet {
-       display: inline;
-       padding-left: .5em;
-}
-
-h1 {
-       color: #666666;
-       font-family: Verdana, Arial, sans-serif;
-       font-size: 180%;
-       line-height: 21pt;
-}
-
-h1#firstHeading {
-       padding-bottom: 0;
-       margin-bottom: 0;
-}
-
-#article p.subtitle, #article p.subpages, #article p.tagline {
-       color: #666666;
-       font-size: 11pt;
-       font-weight: bold;
-       padding-top: 0;
-       margin-top: 0;
-       padding-bottom: 1ex;
-}
-
-a {
-       color: #223366;
-}
-
-a.external {
-       color: #336644;
-}
-
-a:visited {
-       color: #8D0749;
-}
-
-a.printable {
-       text-decoration: underline;
-}
-
-a.stub, #quickbar a.stub {
-       color: #772233;
-       text-decoration: none;
-}
-
-a.new, #quickbar span.new a, #footer span.new a {
-       color: #CC2200;
-}
-
-h2, h3, h4, h5, h6 {
-       margin-bottom: 0;
-}
-
-small {
-       font-size: 75%;
-}
-
-input.mw-searchInput {
-       width: 106px;
-}
-
-/* Directionality-specific styles */
-#quickbar {
-       position: absolute;
-       left: 4px;
-}
-
-#article {
-       margin-left: 148px;
-       margin-right: 4px;
-}
-
-#footer {
-       margin-left: 152px;
-}
-
-#sitetitle, #sitesub, #toplinks, #linkcollection {
-       margin-top: 0;
-       margin-bottom: 0;
-}
-
-#sitetitle, #toplinks {
-       color: white;
-       text-transform: uppercase;
-       height: 32pt;
-}
-
-#sitetitle {
-       padding-left: 8px;
-       font-family: Times, serif;
-       font-weight: normal;
-       font-size: 32pt;
-       line-height: 32pt;
-       background-color: #6688AA;
-}
-
-#sitetitle a, #toplinks a {
-       color: white;
-       text-decoration: none;
-}
-
-/* Bring #sitetitle to top. Otherwise #toplinks is overlaid over it, making the link unclickable. */
-#sitetitle a {
-       position: relative;
-       z-index: 10;
-}
-
-#toplinks {
-       font-family: Verdana, Arial, sans-serif;
-       position: absolute;
-       top: 0;
-       right: 8px;
-       width: 100%;
-       font-size: 8pt;
-}
-
-#toplinks a {
-       font-size: 10pt;
-}
-
-#toplinks p {
-       position: absolute;
-       right: 0;
-       margin: 0;
-       width: 100%;
-       text-align: right;
-}
-
-#toplinks #syslinks {
-       bottom: 0;
-}
-
-#toplinks #variantlinks {
-       bottom: 12pt;
-}
-
-#sitesub {
-       float: left;
-       margin-left: 8px;
-       font-family: Verdana, Arial, sans-serif;
-       font-size: 9pt;
-       font-weight: bold;
-       color: black;
-}
-
-#linkcollection {
-       margin-top: 0.5em;
-       font-size: small;
-       margin-right: 8px;
-       text-align: right;
-       padding-left: 140px;
-}
-
-/* Override text justification (user preference), see bug 31990 */
-#linkcollection * {
-       text-align: right;
-}
index c017e3c..6b9464a 100644 (file)
@@ -19,14 +19,15 @@ function debug( text ) {
                return false;
        }
 
-       var e = document.getElementById( 'sajax_debug' );
+       var b, m,
+               e = document.getElementById( 'sajax_debug' );
 
        if ( !e ) {
                e = document.createElement( 'p' );
                e.className = 'sajax_debug';
                e.id = 'sajax_debug';
 
-               var b = document.getElementsByTagName( 'body' )[0];
+               b = document.getElementsByTagName( 'body' )[0];
 
                if ( b.firstChild ) {
                        b.insertBefore( e, b.firstChild );
@@ -35,7 +36,7 @@ function debug( text ) {
                }
        }
 
-       var m = document.createElement( 'div' );
+       m = document.createElement( 'div' );
        m.appendChild( document.createTextNode( text ) );
 
        e.appendChild( m );
index a6d3b55..dda17fb 100644 (file)
  */
 
 /* Thanks to A List Apart (http://alistapart.com/) for useful extras */
-a.stub,
-a.new {
-       color: #ba0000;
-       text-decoration: none;
-}
-
-#toc {
-       border: 1px solid #aaaaaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       display: -moz-inline-block;
-       display: inline-block;
-       display: table;
-       /* IE7 and earlier */
-       zoom: 1;
-       *display: inline;
-}
-
-/* images */
-div.floatright {
-       float: right;
-       clear: right;
-       position: relative;
-       margin: 0.5em 0 0.8em 1.4em;
-}
-
-div.floatright p {
-       font-style: italic;
-}
-
-div.floatleft {
-       float: left;
-       clear: left;
-       position: relative;
-       margin: 0.5em 1.4em 0.8em 0;
-}
-
-div.floatleft p {
-       font-style: italic;
-}
-
-div.center {
-       text-align: center;
-}
-
-/* thumbnails */
-div.thumb {
-       border: none;
-       width: auto;
-       margin-top: 0.5em;
-       margin-bottom: 0.8em;
-       background-color: transparent;
-}
-
-div.thumbinner {
-       border: 1px solid #cccccc;
-       padding: 3px !important;
-       background-color: White;
-       font-size: 94%;
-       text-align: center;
-       overflow: hidden;
-}
-
-html .thumbimage {
-       border: 1px solid #cccccc;
-}
-
-html .thumbcaption {
-       border: none;
-       text-align: left;
-       line-height: 1.4em;
-       padding: 3px !important;
-       font-size: 94%;
-}
-
-div.magnify {
-       display: none;
-}
-
-/* @noflip */
-div.tright {
-       float: right;
-       clear: right;
-       margin: 0.5em 0 0.8em 1.4em;
-}
-
-/* @noflip */
-div.tleft {
-       float: left;
-       clear: left;
-       margin: 0.5em 1.4em 0.8em 0;
-}
-
-img.thumbborder {
-       border: 1px solid #dddddd;
-}
-
-body {
-       background: white;
-       color: black;
-       margin: 0;
-       padding: 0;
-}
 
+/**
+ * Hide all the elements irrelevant for printing
+ */
 .noprint,
 div#jump-to-nav,
 .mw-jump,
@@ -120,7 +20,7 @@ div#column-one,
 .mw-editsection,
 .mw-editsection-like,
 .toctoggle,
-.tochidden,
+#toc.tochidden,
 div#f-poweredbyico,
 div#f-copyrightico,
 li#viewcount,
@@ -135,29 +35,39 @@ span.mw-filepage-other-resolutions,
 #filetoc,
 .usermessage,
 .patrollink,
-#mw-navigation {
-       /* Hides all the elements irrelevant for printing */
+#mw-navigation,
+#siteNotice {
        display: none;
 }
 
-ul {
-       list-style-type: square;
+/**
+ * Pagination
+ */
+.wikitable, .thumb, img {
+       page-break-inside: avoid;
 }
 
-#content {
-       background: none;
-       border: none !important;
-       padding: 0 !important;
-       margin: 0 !important;
-       direction: ltr;
+h2, h3, h4, h5, h6 {
+       page-break-after: avoid;
 }
 
-#footer {
+p {
+       widows: 3;
+       orphans: 3;
+}
+
+/**
+ * Generic HTML elements
+ */
+body {
        background: white;
        color: black;
-       margin-top: 1em;
-       border-top: 1px solid #AAA;
-       direction: ltr;
+       margin: 0;
+       padding: 0;
+}
+
+ul {
+       list-style-type: square;
 }
 
 h1, h2, h3, h4, h5, h6 {
@@ -183,10 +93,69 @@ pre, .mw-code {
        color: black;
 }
 
-table.listing,
-table.listing td {
-       border: 1pt solid black;
-       border-collapse: collapse;
+/**
+ * MediaWiki-specific elements
+ */
+#globalWrapper {
+       width: 100% !important;
+       min-width: 0 !important;
+}
+
+#content {
+       background: white;
+       border: none !important;
+       padding: 0 !important;
+       margin: 0 !important;
+       direction: ltr;
+       color: black;
+}
+
+#column-content {
+       margin: 0 !important;
+}
+
+#column-content #content {
+       padding: 1em;
+       margin: 0 !important;
+}
+
+#toc {
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       display: -moz-inline-block;
+       display: inline-block;
+       display: table;
+       /* IE7 and earlier */
+       zoom: 1;
+       *display: inline;
+}
+
+#footer {
+       background: white;
+       color: black;
+       margin-top: 1em;
+       border-top: 1px solid #AAA;
+       direction: ltr;
+}
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+
+/* math */
+span.texhtml {
+       font-family: serif;
+}
+
+/**
+ * Links
+ */
+a.stub,
+a.new {
+       color: #ba0000;
+       text-decoration: none;
 }
 
 a {
@@ -201,37 +170,18 @@ a:link, a:visited {
        text-decoration: underline;
 }
 
+/* Expand URLs for printing */
 #content a.external.text:after,
 #content a.external.autonumber:after {
-       /* Expand URLs for printing */
        content: " (" attr(href) ")";
 }
 
+/* Expand protocol-relative URLs for printing */
 #content a.external.text[href^='//']:after,
 #content a.external.autonumber[href^='//']:after {
-       /* Expand protocol-relative URLs for printing */
        content: " (https:" attr(href) ")";
 }
 
-#globalWrapper {
-       width: 100% !important;
-       min-width: 0 !important;
-}
-
-#content {
-       background: white;
-       color: black;
-}
-
-#column-content {
-       margin: 0 !important;
-}
-
-#column-content #content {
-       padding: 1em;
-       margin: 0 !important;
-}
-
 /* MSIE/Win doesn't understand 'inherit' */
 a,
 a.external,
@@ -250,21 +200,92 @@ a.stub {
        text-decoration: inherit !important;
 }
 
-img {
+/**
+ * Floating divs
+ */
+div.floatright {
+       float: right;
+       clear: right;
+       position: relative;
+       margin: 0.5em 0 0.8em 1.4em;
+}
+
+div.floatright p {
+       font-style: italic;
+}
+
+div.floatleft {
+       float: left;
+       clear: left;
+       position: relative;
+       margin: 0.5em 1.4em 0.8em 0;
+}
+
+div.floatleft p {
+       font-style: italic;
+}
+
+div.center {
+       text-align: center;
+}
+
+/**
+ * Thumbnails
+ */
+div.thumb {
        border: none;
-       vertical-align: middle;
+       width: auto;
+       margin-top: 0.5em;
+       margin-bottom: 0.8em;
+       background-color: transparent;
 }
 
-/* math */
-span.texhtml {
-       font-family: serif;
+div.thumbinner {
+       border: 1px solid #cccccc;
+       padding: 3px !important;
+       background-color: White;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
 }
 
-#siteNotice {
+html .thumbimage {
+       border: 1px solid #cccccc;
+}
+
+html .thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4em;
+       padding: 3px !important;
+       font-size: 94%;
+}
+
+div.magnify {
        display: none;
 }
 
-/* Galleries (see shared.css for more info) */
+/* @noflip */
+div.tright {
+       float: right;
+       clear: right;
+       margin: 0.5em 0 0.8em 1.4em;
+}
+
+/* @noflip */
+div.tleft {
+       float: left;
+       clear: left;
+       margin: 0.5em 1.4em 0.8em 0;
+}
+
+img.thumbborder {
+       border: 1px solid #dddddd;
+}
+
+/**
+ * Galleries (see shared.css for more info)
+ */
 li.gallerybox {
        vertical-align: top;
        display: inline-block;
@@ -371,22 +392,14 @@ table.wikitable > caption,
        font-weight: bold;
 }
 
-a.sortheader {
-       margin: 0 0.3em;
-}
-
-/* Some pagination options */
-.wikitable, .thumb, img {
-       page-break-inside: avoid;
-}
-
-h2, h3, h4, h5, h6 {
-       page-break-after: avoid;
+table.listing,
+table.listing td {
+       border: 1pt solid black;
+       border-collapse: collapse;
 }
 
-p {
-       widows: 3;
-       orphans: 3;
+a.sortheader {
+       margin: 0 0.3em;
 }
 
 /**
diff --git a/skins/modern/audio.png b/skins/modern/audio.png
deleted file mode 100644 (file)
index 68c8768..0000000
Binary files a/skins/modern/audio.png and /dev/null differ
diff --git a/skins/modern/bullet.gif b/skins/modern/bullet.gif
deleted file mode 100644 (file)
index b43de48..0000000
Binary files a/skins/modern/bullet.gif and /dev/null differ
diff --git a/skins/modern/discussionitem_icon.gif b/skins/modern/discussionitem_icon.gif
deleted file mode 100644 (file)
index e3ca6d9..0000000
Binary files a/skins/modern/discussionitem_icon.gif and /dev/null differ
diff --git a/skins/modern/document.png b/skins/modern/document.png
deleted file mode 100644 (file)
index ee46a50..0000000
Binary files a/skins/modern/document.png and /dev/null differ
diff --git a/skins/modern/external.png b/skins/modern/external.png
deleted file mode 100644 (file)
index 6308383..0000000
Binary files a/skins/modern/external.png and /dev/null differ
diff --git a/skins/modern/file_icon.gif b/skins/modern/file_icon.gif
deleted file mode 100644 (file)
index 69dbeaf..0000000
Binary files a/skins/modern/file_icon.gif and /dev/null differ
diff --git a/skins/modern/footer-grad.png b/skins/modern/footer-grad.png
deleted file mode 100644 (file)
index 72b8724..0000000
Binary files a/skins/modern/footer-grad.png and /dev/null differ
diff --git a/skins/modern/link_icon.gif b/skins/modern/link_icon.gif
deleted file mode 100644 (file)
index 168c1a2..0000000
Binary files a/skins/modern/link_icon.gif and /dev/null differ
diff --git a/skins/modern/lock_icon.gif b/skins/modern/lock_icon.gif
deleted file mode 100644 (file)
index 8284403..0000000
Binary files a/skins/modern/lock_icon.gif and /dev/null differ
diff --git a/skins/modern/mail_icon.gif b/skins/modern/mail_icon.gif
deleted file mode 100644 (file)
index cf5680d..0000000
Binary files a/skins/modern/mail_icon.gif and /dev/null differ
diff --git a/skins/modern/main.css b/skins/modern/main.css
deleted file mode 100644 (file)
index 93f9fbb..0000000
+++ /dev/null
@@ -1,948 +0,0 @@
-body {
-       margin: 0 0 0 0;
-       padding: 0 0 0 0;
-       font-size: x-small;
-
-       font-family: sans-serif;
-       color: black;
-       background-color: #f0f0f0;
-
-       direction: ltr;
-       unicode-bidi: embed;
-}
-
-#mw_main,
-#p-personal,
-#mw_header,
-.os-suggest {
-       font-size: 130%;
-}
-
-#mw_header {
-       position: absolute;
-       top: 0;
-       left: 0;
-       margin: 0 0 0 0;
-       padding: 0 0em 0 0em;
-       border: none;
-       height: 2em;
-       width: 100%;
-
-       background-color: #003366;
-       color: white;
-}
-
-#mw_header h1 {
-       margin: 0 0 0 0.5em;
-       padding: 0 0 0 0;
-       text-decoration: none;
-       font-size: 150%;
-}
-
-#p-personal {
-       position: absolute;
-       top: 2em;
-       left: 0;
-       height: 1.5em;
-       margin: 0 0 0 0;
-       padding: 0 0 0 0;
-       width: 100%;
-
-}
-
-#p-personal div.pBody {
-       margin: 0 0 0 0;
-       padding: 0 0 0 0;
-       height: 1.5em;
-       font-variant: small-caps;
-}
-
-#p-personal h3 {
-       display: none;
-}
-
-#p-personal ul {
-       margin: 0 0 0 0;
-       padding: 0 0 0 0;
-       display: block;
-       height: 1.5em;
-       background-color: #3c78b5;
-}
-
-#p-personal li {
-       display: block;
-       float: left;
-       height: 1.5em;
-       margin: 0 0 0 0;
-       vertical-align: middle;
-
-       font-weight: bold;
-       text-transform: lowercase;
-}
-
-#p-personal li a {
-       text-decoration: none;
-       color: white;
-       padding: 0 1em 0 1em;
-}
-
-#p-personal li a:hover {
-       text-decoration: none;
-       color: white;
-}
-
-#p-personal li:hover {
-       background-color: #003366;
-}
-
-#jump-to-nav {
-       display: none;
-}
-
-#mw_contentwrapper {
-       width: 100%;
-       margin: 0 0 0 -15em;
-       float: right;
-}
-
-#mw_content {
-       margin: 0 0 0 14em;
-
-       background-color: white;
-       border-top: solid 1px #bbbbbb;
-       border-left: solid 1px #bbbbbb;
-       border-bottom: solid 1px #bbbbbb;
-
-       line-height: 1.5em;
-       padding: 0 1em 1em 1em;
-}
-
-#mw_portlets {
-       width: 14em;
-
-       border-right: solid 1px #bbbbbb;
-       background-color: #f0f0f0;
-}
-
-/* Hide, but keep accessible for screen-readers */
-#mw_portlets h2 {
-       position: absolute;
-       top: -9999px;
-}
-
-#mw_main {
-       padding: 0 0 0 0;
-       margin: 0 0 0 0;
-       margin-top: 3.5em;
-}
-
-div.mw_clear {
-       margin: 0 0 0 0;
-       padding: 0 0 0 0;
-       clear: both;
-}
-
-.portlet {
-       padding: 0 0 0 0;
-       margin: 0 0 0 0;
-}
-
-.portlet div.pBody {
-       padding: 0em 0 0.5em 0;
-}
-
-textarea {
-       width: 100%;
-       padding: .1em;
-       display: block;
-       -moz-box-sizing: border-box;
-       -webkit-box-sizing: border-box;
-       box-sizing: border-box;
-}
-
-#searchBody {
-       text-align: center;
-}
-
-#searchInput {
-       width: 85%;
-       margin-left: auto;
-       margin-right: auto;
-}
-
-#p-search #searchform div div {
-       margin-top: .4em;
-}
-
-.portlet h3 {
-       padding: 0.1em 0 0.3em 1em;
-       margin: 0 0 0 0;
-       background-color: #dddddd;
-       font-weight: bold;
-       font-size: 0.83em;
-       border-bottom: solid 1px #3c78b5;
-       height: 1.1em;
-}
-
-.portlet ul {
-       margin: 0 0 0 1.5em;
-       padding: 0 0 0 0;
-}
-
-#mw_portlets .portlet ul {
-       line-height: 1.4em;
-}
-
-ul {
-       /* @embed */
-       list-style-image: url(bullet.gif);
-}
-
-#p-cactions {
-       height: 1.5em;
-       padding: 0 0 0 0;
-       margin: 0 0 0 14em;
-}
-
-#p-cactions div.pBody {
-       margin: 0 0 0 0;
-       padding: 0 0 0 0;
-}
-
-#p-cactions a,
-#p-cactions a:hover {
-       color: black;
-       text-decoration: none;
-}
-
-#p-cactions ul {
-       display: inline;
-       margin: 0 0 0 0;
-       padding: 0 0 0 0;
-}
-
-#p-cactions li {
-       margin: 0 0.5em 0 0.5em;
-       padding: 0 0.2em 0 0.2em;
-       display: block;
-       float: left;
-       height: 1.5em;
-       text-transform: lowercase;
-}
-
-#p-cactions li.selected {
-       background-color: #bbbbbb;
-}
-
-#p-cactions li a,
-#p-cactions li a:hover,
-#p-cactions li a:visited {
-       text-decoration: underline;
-       color: #003366;
-}
-
-#p-cactions li.selected a,
-#p-cactions li.selected a:hover,
-#p-cactions li.selected a:visited {
-       text-decoration: none;
-       color: white;
-}
-
-#p-cactions h3 {
-       display: none;
-}
-
-#siteSub {
-       display: none;
-}
-
-#footer {
-       background-color: #f0f0f0;
-       /* @embed */
-       background: url(footer-grad.png) repeat-x 0 0;
-       padding: 10px 1em 1em 1em;
-       clear: both;
-       color: #444444;
-}
-
-#footer a,
-#footer a:hover,
-#footer a:visited {
-       color: #444444;
-       text-decoration: underline;
-}
-
-img {
-       border: none;
-}
-
-#footer li {
-       display: inline;
-       list-style-type: none;
-       padding: 0 0 0 0;
-       margin: 0 0 0 0;
-}
-
-#footer ul {
-       padding: 0 0 0 0;
-       margin: 0 0 0 0;
-}
-
-p {
-       margin: 1em 0 1em 0;
-}
-
-hr {
-       height: 1px;
-       color: #aaa;
-       background-color: #aaa;
-       border: 0;
-       margin: .2em 0 .2em 0;
-}
-
-#contentSub {
-       color: #545454;
-       font-size: small;
-       padding-left: 2em;
-}
-
-#mw_portlets form {
-       margin: 0 0 0 0;
-       padding: 0 0 0 0;
-}
-
-a {
-       text-decoration: none;
-       color: #003366;
-       background: none;
-}
-
-a:visited {
-       color: #5a3696;
-}
-
-a:active {
-       color: #faa700;
-}
-
-a:hover {
-       text-decoration: underline;
-}
-
-a.stub {
-       color: #772233;
-}
-
-a.new {
-       color: #ba0000;
-}
-
-a.new:visited {
-       color: #a55858;
-}
-
-h1, h2 {
-       border-bottom: solid 1px #003366;
-}
-
-h1, h2, h3, h4, h5, h6 {
-       overflow: hidden;
-}
-
-#preftoc {
-       width: 100%;
-       margin: 0 0 0 0;
-       padding: 0 0 0 0;
-       height: 1.5em;
-       clear: right;
-}
-
-#preftoc li {
-       margin: 0 0.5em 0 0.5em;
-       padding: 0 0.2em 0 0.2em;
-       display: block;
-       float: left;
-       height: 1.5em;
-       text-transform: lowercase;
-}
-
-#preferences {
-       margin: 0 0 0 0;
-       padding: 0em 1em 1em 1em;
-       border: solid 1px #bbbbbb;
-       clear: left; /* Multi-line toc should not push data to horizontally */
-}
-
-#preferences fieldset {
-       margin-top: 0;
-       border: none;
-}
-
-.mainLegend {
-       display: none;
-}
-
-.htmlform-tip {
-       font-size: x-small;
-       padding: .2em 2em;
-       color: #666;
-}
-
-.prefsection legend {
-       font-weight: bold;
-}
-
-#preftoc li.selected {
-       background-color: #bbbbbb;
-}
-
-#preftoc li a,
-#preftoc li a:hover,
-#preftoc li a:visited {
-       text-decoration: underline;
-       color: #003366;
-}
-
-#preftoc li.selected a,
-#preftoc li.selected a:hover,
-#preftoc li.selected a:visited {
-       text-decoration: none;
-       color: white;
-}
-
-#mw_content a.external {
-       /* @embed */
-       background: url(external.png) center right no-repeat;
-       padding-right: 13px;
-}
-
-#mw_content a.external[href ^="https://"],
-.link-https {
-       /* @embed */
-       background: url(lock_icon.gif) center right no-repeat;
-       padding-right: 16px;
-}
-
-#mw_content a.external[href ^="mailto:"],
-.link-mailto {
-       /* @embed */
-       background: url(mail_icon.gif) center right no-repeat;
-       padding-right: 18px;
-}
-
-#mw_content a.external[href ^="news:"] {
-       /* @embed */
-       background: url(news_icon.png) center right no-repeat;
-       padding-right: 18px;
-}
-
-#mw_content a.external[href ^="ftp://"],
-.link-ftp {
-       /* @embed */
-       background: url(file_icon.gif) center right no-repeat;
-       padding-right: 18px;
-}
-
-#mw_content a.external[href ^="irc://"],
-#mw_content a.external[href ^="ircs://"],
-.link-irc {
-       /* @embed */
-       background: url(discussionitem_icon.gif) center right no-repeat;
-       padding-right: 18px;
-}
-
-#mw_content a.external[href $=".ogg"], #mw_content a.external[href $=".OGG"],
-#mw_content a.external[href $=".mid"], #mw_content a.external[href $=".MID"],
-#mw_content a.external[href $=".midi"], #mw_content a.external[href $=".MIDI"],
-#mw_content a.external[href $=".mp3"], #mw_content a.external[href $=".MP3"],
-#mw_content a.external[href $=".wav"], #mw_content a.external[href $=".WAV"],
-#mw_content a.external[href $=".wma"], #mw_content a.external[href $=".WMA"],
-.link-audio {
-       /* @embed */
-       background: url(audio.png) center right no-repeat;
-       padding-right: 13px;
-}
-
-#mw_content a.external[href $=".ogm"], #mw_content a.external[href $=".OGM"],
-#mw_content a.external[href $=".avi"], #mw_content a.external[href $=".AVI"],
-#mw_content a.external[href $=".mpeg"], #mw_content a.external[href $=".MPEG"],
-#mw_content a.external[href $=".mpg"], #mw_content a.external[href $=".MPG"],
-.link-video {
-       /* @embed */
-       background: url(video.png) center right no-repeat;
-       padding-right: 13px;
-}
-
-#mw_content a.external[href $=".pdf"], #mw_content a.external[href $=".PDF"],
-#mw_content a.external[href *=".pdf#"], #mw_content a.external[href *=".PDF#"],
-#mw_content a.external[href *=".pdf?"], #mw_content a.external[href *=".PDF?"],
-.link-document {
-       /* @embed */
-       background: url(document.png) center right no-repeat;
-       padding-right: 12px;
-}
-
-/* images */
-/* @noflip */div.floatright, table.floatright {
-       margin: 0 0 .5em .5em;
-       border: 0;
-}
-
-div.floatright p {
-       font-style: italic;
-}
-
-/* @noflip */div.floatleft, table.floatleft {
-       margin: 0 .5em .5em 0;
-       border: 0;
-}
-
-div.floatleft p {
-       font-style: italic;
-}
-
-/* thumbnails */
-div.thumb {
-       margin-bottom: .5em;
-       width: auto;
-}
-
-div.thumbinner {
-       border: 1px solid #ccc;
-       padding: 3px !important;
-       background-color: #f9f9f9;
-       font-size: 94%;
-       text-align: center;
-       overflow: hidden;
-}
-
-html .thumbimage {
-       border: 1px solid #ccc;
-}
-
-html .thumbcaption {
-       border: none;
-       text-align: left;
-       line-height: 1.4em;
-       padding: 3px !important;
-       font-size: 94%;
-}
-
-div.magnify {
-       float: right;
-       border: none !important;
-       background: none !important;
-       margin-left: 3px;
-}
-
-div.magnify a, div.magnify img {
-       display: block;
-       border: none !important;
-       background: none !important;
-}
-
-/* @noflip */div.tright {
-       margin: .5em 0 .8em 1.4em;
-}
-
-/* @noflip */div.tleft {
-       margin: .5em 1.4em .8em 0;
-}
-
-img.thumbborder {
-       border: 1px solid #dddddd;
-}
-
-.mw-warning {
-       border: 1px solid #aaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       font-size: 95%;
-}
-
-#toc,
-.toc {
-       margin: 0 0 0 0;
-       padding: 0 0 0 0;
-       border-spacing: 0;
-       background-color: #f0f0f0;
-       border: solid 1px #bbbbbb;
-       display: -moz-inline-block;
-       display: inline-block;
-       display: table;
-
-       /* IE7 and earliers */
-       zoom: 1;
-       *display: inline;
-
-       padding: 7px;
-}
-
-/* CSS for backwards-compatibility with cached page renders and creative uses in wikitext */
-table#toc,
-table.toc {
-       border-collapse: collapse;
-}
-
-/* Remove additional paddings inside table-cells that are not present in <div>s */
-table#toc td,
-table.toc td {
-       padding: 0;
-}
-
-#toc tr, #toc td {
-       margin: 0 0 0 0;
-       padding: 0 0 0 0;
-}
-
-#toctitle {
-       border-bottom: solid 1px #3c78b5;
-       background-color: #dddddd;
-       margin: 0 0 0 0;
-}
-
-#toc h2,
-.toc h2 {
-       display: inline;
-       border: none;
-       padding: 0;
-       font-size: 100%;
-       font-weight: bold;
-}
-
-#toc #toctitle,
-.toc #toctitle,
-#toc .toctitle,
-.toc .toctitle {
-       text-align: center;
-}
-
-#toc ul,
-.toc ul {
-       list-style-type: none;
-       list-style-image: none;
-       margin: 0 1em 0 1em;
-       padding: 0;
-       text-align: left;
-}
-
-#toc ul ul,
-.toc ul ul {
-       margin: 0 0 0 2em;
-}
-
-#toc .toctoggle,
-.toc .toctoggle {
-       font-size: 94%;
-}
-
-.mw-warning {
-       margin-left: 50px;
-       margin-right: 50px;
-       text-align: center;
-}
-
-.catlinks {
-       border: solid 1px #bbbbbb;
-       background-color: #f0f0f0;
-       padding: 0.1em 0.3em 0.1em 0.3em;
-       margin: 0 0 0 0;
-}
-
-#mw_header h1,
-#p-personal,
-#p-cactions {
-       overflow: hidden;
-}
-
-/* disable interwiki styling */
-#mw_content a.extiw,
-#mw_content a.extiw:active {
-       color: #36b;
-}
-
-#mw_content a.external {
-       color: #36b;
-}
-
-.redirectText {
-       font-size: 150%;
-       margin: 5px;
-}
-
-.printfooter {
-       display: none;
-}
-
-.sharedUploadNotice {
-       font-style: italic;
-}
-
-span.updatedmarker {
-       color: black;
-       background-color: #0f0;
-}
-
-.previewnote {
-       text-indent: 3em;
-       color: #c00;
-       border-bottom: 1px solid #aaa;
-       padding-bottom: 1em;
-       margin-bottom: 1em;
-}
-
-.previewnote p {
-       margin: 0;
-       padding: 0;
-}
-
-.editExternally {
-       border: 1px solid gray;
-       background-color: #ffffff;
-       padding: 3px;
-       margin-top: 0.5em;
-       float: left;
-       font-size: small;
-       text-align: center;
-}
-
-.editExternallyHelp {
-       font-style: italic;
-       color: gray;
-}
-
-.toggle {
-       margin-left: 2em;
-       text-indent: -2em;
-}
-
-table.collapsed tr.collapsable {
-       display: none;
-}
-
-input#wpSummary {
-       width: 80%;
-}
-
-/* @bug 1714 */
-input#wpSave, input#wpDiff {
-       margin-right: 0.33em;
-}
-
-#wpSave {
-       font-weight: bold;
-}
-
-/* noarticletext */
-div.noarticletext {
-       border: 1px solid #ccc;
-       background: #fff;
-       padding: .2em 1em;
-       color: #000;
-}
-
-div#searchTargetContainer {
-       left: 10px;
-       top: 10px;
-       width: 90%;
-       background: white;
-}
-
-div#searchTarget {
-       padding: 3px;
-       margin: 5px;
-       background: #F0F0F0;
-       border: solid 1px blue;
-}
-
-div#searchTarget ul li {
-       list-style: none;
-}
-
-div#searchTarget ul li:before {
-       color: orange;
-       content: "\00BB \0020";
-}
-
-div#searchTargetHide {
-       float: right;
-       border: solid 1px black;
-       background: #DCDCDC;
-       padding: 2px;
-}
-
-div.multipageimagenavbox {
-       border: solid 1px silver;
-       padding: 4px;
-       margin: 1em;
-       background: #f0f0f0;
-}
-
-div.multipageimagenavbox div.thumb {
-       border: none;
-       margin-left: 2em;
-       margin-right: 2em;
-}
-
-div.multipageimagenavbox hr {
-       margin: 6px;
-}
-
-table.multipageimage td {
-       text-align: center;
-}
-
-.templatesUsed {
-       margin-top: 1.5em;
-}
-
-.mw-summary-preview {
-       margin: 0.1em 0;
-}
-
-/* Friendlier slave lag warnings */
-div.mw-lag-warn-normal,
-div.mw-lag-warn-high {
-       padding: 3px;
-       text-align: center;
-       margin: 3px auto;
-}
-
-div.mw-lag-warn-normal {
-       border: 1px solid #FFCC66;
-       background-color: #FFFFCC;
-}
-
-div.mw-lag-warn-high {
-       font-weight: bold;
-       border: 2px solid #FF0033;
-       background-color: #FFCCCC;
-}
-
-.MediaTransformError {
-       background-color: #ccc;
-       padding: 0.1em;
-}
-
-.MediaTransformError td {
-       text-align: center;
-       vertical-align: middle;
-       font-size: 90%;
-}
-
-ul {
-       line-height: 1.5em;
-       list-style-type: square;
-       margin: .3em 0 0 1.5em;
-       padding: 0;
-       /* @embed */
-       list-style-image: url(bullet.gif);
-}
-
-ol {
-       line-height: 1.5em;
-       margin: .3em 0 0 3.2em;
-       padding: 0;
-       list-style-image: none;
-}
-
-li {
-       margin-bottom: .1em;
-}
-
-dt {
-       font-weight: bold;
-       margin-bottom: .1em;
-}
-
-dl {
-       margin-top: .2em;
-       margin-bottom: .5em;
-}
-
-#p-cactions li.new a {
-       color: #cc2200;
-}
-
-span.subpages {
-       font-size: 80%;
-       display: block;
-}
-
-pre, .mw-code {
-       border: solid 1px #3c78b5;
-       padding: 0.4em;
-       background-color: #f0f0f0;
-}
-
-.usermessage {
-       background-color: #dadaff;
-}
-
-.mw-topboxes {
-       border-collapse: collapse;
-       margin: 0 -1em 1em -1em;
-       padding: 0 0 8px 0;
-       /* @embed */
-       background: url(footer-grad.png) repeat-x bottom left;
-}
-
-.mw-topbox p {
-       padding: 0 0 0 0;
-       margin: 0 0 0 0;
-}
-
-.mw-topbox {
-       color: black;
-       font-weight: bold;
-       margin: 0 0 0 0;
-       padding: 0 1em 0 1em;
-       vertical-align: middle;
-       border-collapse: collapse;
-       border-bottom: solid 1px #bbbbbb;
-}
-
-#siteSub {
-       background-color: #dddddd;
-}
-
-/* emulate center */
-.center {
-       width: 100%;
-       text-align: center;
-}
-
-*.center * {
-       margin-left: auto;
-       margin-right: auto;
-}
-
-/* table standards */
-.toccolours {
-       border: 1px solid #bbbbbb;
-       background-color: #f0f0f0;
-       border-spacing: 0pt;
-       margin: 0pt;
-       padding: 0pt;
-}
-
-/* Tooltips are outside of the normal body code, so this helps make the size of the text sensible */
-.tipsy {
-       font-size: 130%;
-}
-
-/**
- * Lists:
- * The following lines don't have a visible effect on non-Gecko browsers
- * They fix a problem ith Gecko browsers rendering lists to the right of
- * left-floated objects in an RTL layout.
- */
-/* @noflip */
-html > body.rtl div#mw_contentholder ul {
-       display: table;
-}
-
-/* @noflip */
-html > body.rtl div#mw_contentholder ul#filetoc {
-       display: block;
-}
diff --git a/skins/modern/news_icon.png b/skins/modern/news_icon.png
deleted file mode 100644 (file)
index 4d3cb47..0000000
Binary files a/skins/modern/news_icon.png and /dev/null differ
diff --git a/skins/modern/print.css b/skins/modern/print.css
deleted file mode 100644 (file)
index 150d2d2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#mw_portlets,
-#p-cactions,
-#p-personal,
-#jump-to-nav,
-#footer,
-.mw-editsection,
-.mw-editsection-like,
-.noprint {
-       display: none;
-}
diff --git a/skins/modern/video.png b/skins/modern/video.png
deleted file mode 100644 (file)
index e535c0c..0000000
Binary files a/skins/modern/video.png and /dev/null differ
diff --git a/skins/monobook/MonoBook.php b/skins/monobook/MonoBook.php
new file mode 100644 (file)
index 0000000..7385d0e
--- /dev/null
@@ -0,0 +1,411 @@
+<?php
+/**
+ * MonoBook nouveau.
+ *
+ * Translated from gwicke's previous TAL template version to remove
+ * dependency on PHPTAL.
+ *
+ * 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
+ *
+ * @todo document
+ * @file
+ * @ingroup Skins
+ */
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+       die( -1 );
+}
+
+/**
+ * Inherit main code from SkinTemplate, set the CSS and template filter.
+ * @todo document
+ * @ingroup Skins
+ */
+class SkinMonoBook extends SkinTemplate {
+       /** Using monobook. */
+       public $skinname = 'monobook';
+       public $stylename = 'monobook';
+       public $template = 'MonoBookTemplate';
+
+       /**
+        * @param OutputPage $out
+        */
+       function setupSkinUserCss( OutputPage $out ) {
+               parent::setupSkinUserCss( $out );
+
+               $out->addModuleStyles( array( 'mediawiki.skinning.interface', 'skins.monobook.styles' ) );
+
+               // TODO: Migrate all of these
+               $out->addStyle( 'monobook/IE60Fixes.css', 'screen', 'IE 6' );
+               $out->addStyle( 'monobook/IE70Fixes.css', 'screen', 'IE 7' );
+       }
+}
+
+/**
+ * @todo document
+ * @ingroup Skins
+ */
+class MonoBookTemplate extends BaseTemplate {
+
+       /**
+        * Template filter callback for MonoBook skin.
+        * Takes an associative array of data set from a SkinTemplate-based
+        * class, and a wrapper for MediaWiki's localization database, and
+        * outputs a formatted page.
+        *
+        * @access private
+        */
+       function execute() {
+               // Suppress warnings to prevent notices about missing indexes in $this->data
+               wfSuppressWarnings();
+
+               $this->html( 'headelement' );
+               ?><div id="globalWrapper">
+               <div id="column-content">
+                       <div id="content" class="mw-body-primary" role="main">
+                               <a id="top"></a>
+                               <?php
+                               if ( $this->data['sitenotice'] ) {
+                                       ?>
+                                       <div id="siteNotice"><?php
+                                       $this->html( 'sitenotice' )
+                                       ?></div><?php
+                               }
+                               ?>
+
+                               <h1 id="firstHeading" class="firstHeading" lang="<?php
+                               $this->data['pageLanguage'] =
+                                       $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
+                               $this->text( 'pageLanguage' );
+                               ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
+
+                               <div id="bodyContent" class="mw-body">
+                                       <div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
+                                       <div id="contentSub"<?php
+                                       $this->html( 'userlangattributes' ) ?>><?php $this->html( 'subtitle' )
+                                               ?></div>
+                                       <?php if ( $this->data['undelete'] ) { ?>
+                                               <div id="contentSub2"><?php $this->html( 'undelete' ) ?></div>
+                                       <?php
+}
+                                       ?><?php
+                                       if ( $this->data['newtalk'] ) {
+                                               ?>
+                                               <div class="usermessage"><?php $this->html( 'newtalk' ) ?></div>
+                                       <?php
+                                       }
+                                       ?>
+                                       <div id="jump-to-nav" class="mw-jump"><?php
+                                               $this->msg( 'jumpto' )
+                                               ?> <a href="#column-one"><?php
+                                                       $this->msg( 'jumptonavigation' )
+                                                       ?></a><?php
+                                               $this->msg( 'comma-separator' )
+                                               ?><a href="#searchInput"><?php
+                                                       $this->msg( 'jumptosearch' )
+                                                       ?></a></div>
+
+                                       <!-- start content -->
+                                       <?php $this->html( 'bodytext' ) ?>
+                                       <?php
+                                       if ( $this->data['catlinks'] ) {
+                                               $this->html( 'catlinks' );
+                                       }
+                                       ?>
+                                       <!-- end content -->
+                                       <?php
+                                       if ( $this->data['dataAfterContent'] ) {
+                                               $this->html( 'dataAfterContent'
+                                               );
+                                       }
+                                       ?>
+                                       <div class="visualClear"></div>
+                               </div>
+                       </div>
+               </div>
+               <div id="column-one"<?php $this->html( 'userlangattributes' ) ?>>
+                       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
+                       <?php $this->cactions(); ?>
+                       <div class="portlet" id="p-personal" role="navigation">
+                               <h3><?php $this->msg( 'personaltools' ) ?></h3>
+
+                               <div class="pBody">
+                                       <ul<?php $this->html( 'userlangattributes' ) ?>>
+                                               <?php foreach ( $this->getPersonalTools() as $key => $item ) { ?>
+                                                       <?php echo $this->makeListItem( $key, $item ); ?>
+
+                                               <?php
+}
+                                               ?>
+                                       </ul>
+                               </div>
+                       </div>
+                       <div class="portlet" id="p-logo" role="banner">
+                               <?php
+                               echo Html::element( 'a', array(
+                                               'href' => $this->data['nav_urls']['mainpage']['href'],
+                                               'style' => "background-image: url({$this->data['logopath']});" )
+                                       + Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ); ?>
+
+                       </div>
+                       <?php
+                       $this->renderPortals( $this->data['sidebar'] );
+                       ?>
+               </div><!-- end of the left (by default at least) column -->
+               <div class="visualClear"></div>
+               <?php
+               $validFooterIcons = $this->getFooterIcons( "icononly" );
+               $validFooterLinks = $this->getFooterLinks( "flat" ); // Additional footer links
+
+               if ( count( $validFooterIcons ) + count( $validFooterLinks ) > 0 ) {
+                       ?>
+                       <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
+                       <?php
+                       $footerEnd = '</div>';
+               } else {
+                       $footerEnd = '';
+               }
+
+               foreach ( $validFooterIcons as $blockName => $footerIcons ) {
+                       ?>
+                       <div id="f-<?php echo htmlspecialchars( $blockName ); ?>ico">
+                               <?php foreach ( $footerIcons as $icon ) { ?>
+                                       <?php echo $this->getSkin()->makeFooterIcon( $icon ); ?>
+
+                               <?php
+}
+                               ?>
+                       </div>
+               <?php
+               }
+
+               if ( count( $validFooterLinks ) > 0 ) {
+                       ?>
+                       <ul id="f-list">
+                               <?php
+                               foreach ( $validFooterLinks as $aLink ) {
+                                       ?>
+                                       <li id="<?php echo $aLink ?>"><?php $this->html( $aLink ) ?></li>
+                               <?php
+                               }
+                               ?>
+                       </ul>
+               <?php
+               }
+
+               echo $footerEnd;
+               ?>
+
+               </div>
+               <?php
+               $this->printTrail();
+               echo Html::closeElement( 'body' );
+               echo Html::closeElement( 'html' );
+               wfRestoreWarnings();
+       } // end of execute() method
+
+       /*************************************************************************************************/
+
+       /**
+        * @param array $sidebar
+        */
+       protected function renderPortals( $sidebar ) {
+               if ( !isset( $sidebar['SEARCH'] ) ) {
+                       $sidebar['SEARCH'] = true;
+               }
+               if ( !isset( $sidebar['TOOLBOX'] ) ) {
+                       $sidebar['TOOLBOX'] = true;
+               }
+               if ( !isset( $sidebar['LANGUAGES'] ) ) {
+                       $sidebar['LANGUAGES'] = true;
+               }
+
+               foreach ( $sidebar as $boxName => $content ) {
+                       if ( $content === false ) {
+                               continue;
+                       }
+
+                       if ( $boxName == 'SEARCH' ) {
+                               $this->searchBox();
+                       } elseif ( $boxName == 'TOOLBOX' ) {
+                               $this->toolbox();
+                       } elseif ( $boxName == 'LANGUAGES' ) {
+                               $this->languageBox();
+                       } else {
+                               $this->customBox( $boxName, $content );
+                       }
+               }
+       }
+
+       function searchBox() {
+               global $wgUseTwoButtonsSearchForm;
+               ?>
+               <div id="p-search" class="portlet" role="search">
+                       <h3><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h3>
+
+                       <div id="searchBody" class="pBody">
+                               <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
+                                       <input type='hidden' name="title" value="<?php $this->text( 'searchtitle' ) ?>"/>
+                                       <?php echo $this->makeSearchInput( array( "id" => "searchInput" ) ); ?>
+
+                                       <?php
+                                       echo $this->makeSearchButton(
+                                               "go",
+                                               array( "id" => "searchGoButton", "class" => "searchButton" )
+                                       );
+
+                                       if ( $wgUseTwoButtonsSearchForm ) {
+                                               ?>&#160;
+                                               <?php echo $this->makeSearchButton(
+                                                       "fulltext",
+                                                       array( "id" => "mw-searchButton", "class" => "searchButton" )
+                                               );
+                                       } else {
+                                               ?>
+
+                                               <div><a href="<?php
+                                               $this->text( 'searchaction' )
+                                               ?>" rel="search"><?php $this->msg( 'powersearch-legend' ) ?></a></div><?php
+                                       } ?>
+
+                               </form>
+
+                               <?php $this->renderAfterPortlet( 'search' ); ?>
+                       </div>
+               </div>
+       <?php
+       }
+
+       /**
+        * Prints the cactions bar.
+        * Shared between MonoBook and Modern
+        */
+       function cactions() {
+               ?>
+               <div id="p-cactions" class="portlet" role="navigation">
+                       <h3><?php $this->msg( 'views' ) ?></h3>
+
+                       <div class="pBody">
+                               <ul><?php
+                                       foreach ( $this->data['content_actions'] as $key => $tab ) {
+                                               echo '
+                               ' . $this->makeListItem( $key, $tab );
+                                       } ?>
+
+                               </ul>
+                               <?php $this->renderAfterPortlet( 'cactions' ); ?>
+                       </div>
+               </div>
+       <?php
+       }
+
+       /*************************************************************************************************/
+       function toolbox() {
+               ?>
+               <div class="portlet" id="p-tb" role="navigation">
+                       <h3><?php $this->msg( 'toolbox' ) ?></h3>
+
+                       <div class="pBody">
+                               <ul>
+                                       <?php
+                                       foreach ( $this->getToolbox() as $key => $tbitem ) {
+                                               ?>
+                                               <?php echo $this->makeListItem( $key, $tbitem ); ?>
+
+                                       <?php
+                                       }
+                                       wfRunHooks( 'MonoBookTemplateToolboxEnd', array( &$this ) );
+                                       wfRunHooks( 'SkinTemplateToolboxEnd', array( &$this, true ) );
+                                       ?>
+                               </ul>
+                               <?php $this->renderAfterPortlet( 'tb' ); ?>
+                       </div>
+               </div>
+       <?php
+       }
+
+       /*************************************************************************************************/
+       function languageBox() {
+               if ( $this->data['language_urls'] !== false ) {
+                       ?>
+                       <div id="p-lang" class="portlet" role="navigation">
+                               <h3<?php $this->html( 'userlangattributes' ) ?>><?php $this->msg( 'otherlanguages' ) ?></h3>
+
+                               <div class="pBody">
+                                       <ul>
+                                               <?php foreach ( $this->data['language_urls'] as $key => $langlink ) { ?>
+                                                       <?php echo $this->makeListItem( $key, $langlink ); ?>
+
+                                               <?php
+}
+                                               ?>
+                                       </ul>
+
+                                       <?php $this->renderAfterPortlet( 'lang' ); ?>
+                               </div>
+                       </div>
+               <?php
+               }
+       }
+
+       /*************************************************************************************************/
+       /**
+        * @param string $bar
+        * @param array|string $cont
+        */
+       function customBox( $bar, $cont ) {
+               $portletAttribs = array(
+                       'class' => 'generated-sidebar portlet',
+                       'id' => Sanitizer::escapeId( "p-$bar" ),
+                       'role' => 'navigation'
+               );
+
+               $tooltip = Linker::titleAttrib( "p-$bar" );
+               if ( $tooltip !== false ) {
+                       $portletAttribs['title'] = $tooltip;
+               }
+               echo '  ' . Html::openElement( 'div', $portletAttribs );
+               $msgObj = wfMessage( $bar );
+               ?>
+
+               <h3><?php echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $bar ); ?></h3>
+               <div class='pBody'>
+                       <?php
+                       if ( is_array( $cont ) ) {
+                               ?>
+                               <ul>
+                                       <?php
+                                       foreach ( $cont as $key => $val ) {
+                                               ?>
+                                               <?php echo $this->makeListItem( $key, $val ); ?>
+
+                                       <?php
+                                       }
+                                       ?>
+                               </ul>
+                       <?php
+                       } else {
+                               # allow raw HTML block to be defined by extensions
+                               print $cont;
+                       }
+
+                       $this->renderAfterPortlet( $bar );
+                       ?>
+               </div>
+               </div>
+       <?php
+       }
+} // end of class
diff --git a/skins/vector/Vector.php b/skins/vector/Vector.php
new file mode 100644 (file)
index 0000000..650a52b
--- /dev/null
@@ -0,0 +1,660 @@
+<?php
+/**
+ * Vector - Modern version of MonoBook with fresh look and many usability
+ * improvements.
+ *
+ * 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
+ *
+ * @todo document
+ * @file
+ * @ingroup Skins
+ */
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+       die( -1 );
+}
+
+/**
+ * SkinTemplate class for Vector skin
+ * @ingroup Skins
+ */
+class SkinVector extends SkinTemplate {
+       public $skinname = 'vector';
+       public $stylename = 'vector';
+       public $template = 'VectorTemplate';
+
+       protected static $bodyClasses = array( 'vector-animateLayout' );
+
+       /**
+        * Initializes output page and sets up skin-specific parameters
+        * @param OutputPage $out Object to initialize
+        */
+       public function initPage( OutputPage $out ) {
+               global $wgLocalStylePath;
+
+               parent::initPage( $out );
+
+               // Append CSS which includes IE only behavior fixes for hover support -
+               // this is better than including this in a CSS file since it doesn't
+               // wait for the CSS file to load before fetching the HTC file.
+               $min = $this->getRequest()->getFuzzyBool( 'debug' ) ? '' : '.min';
+               $out->addHeadItem( 'csshover',
+                       '<!--[if lt IE 7]><style type="text/css">body{behavior:url("' .
+                               htmlspecialchars( $wgLocalStylePath ) .
+                               "/{$this->stylename}/csshover{$min}.htc\")}</style><![endif]-->"
+               );
+
+               $out->addModules( array( 'skins.vector.js' ) );
+       }
+
+       /**
+        * Loads skin and user CSS files.
+        * @param OutputPage $out
+        */
+       function setupSkinUserCss( OutputPage $out ) {
+               parent::setupSkinUserCss( $out );
+
+               $styles = array( 'mediawiki.skinning.interface', 'skins.vector.styles' );
+               wfRunHooks( 'SkinVectorStyleModules', array( $this, &$styles ) );
+               $out->addModuleStyles( $styles );
+       }
+
+       /**
+        * Adds classes to the body element.
+        *
+        * @param OutputPage $out
+        * @param array &$bodyAttrs Array of attributes that will be set on the body element
+        */
+       function addToBodyAttributes( $out, &$bodyAttrs ) {
+               if ( isset( $bodyAttrs['class'] ) && strlen( $bodyAttrs['class'] ) > 0 ) {
+                       $bodyAttrs['class'] .= ' ' . implode( ' ', static::$bodyClasses );
+               } else {
+                       $bodyAttrs['class'] = implode( ' ', static::$bodyClasses );
+               }
+       }
+}
+
+/**
+ * QuickTemplate class for Vector skin
+ * @ingroup Skins
+ */
+class VectorTemplate extends BaseTemplate {
+       /* Functions */
+
+       /**
+        * Outputs the entire contents of the (X)HTML page
+        */
+       public function execute() {
+               global $wgVectorUseIconWatch;
+
+               // Build additional attributes for navigation urls
+               $nav = $this->data['content_navigation'];
+
+               if ( $wgVectorUseIconWatch ) {
+                       $mode = $this->getSkin()->getUser()->isWatched( $this->getSkin()->getRelevantTitle() )
+                               ? 'unwatch'
+                               : 'watch';
+
+                       if ( isset( $nav['actions'][$mode] ) ) {
+                               $nav['views'][$mode] = $nav['actions'][$mode];
+                               $nav['views'][$mode]['class'] = rtrim( 'icon ' . $nav['views'][$mode]['class'], ' ' );
+                               $nav['views'][$mode]['primary'] = true;
+                               unset( $nav['actions'][$mode] );
+                       }
+               }
+
+               $xmlID = '';
+               foreach ( $nav as $section => $links ) {
+                       foreach ( $links as $key => $link ) {
+                               if ( $section == 'views' && !( isset( $link['primary'] ) && $link['primary'] ) ) {
+                                       $link['class'] = rtrim( 'collapsible ' . $link['class'], ' ' );
+                               }
+
+                               $xmlID = isset( $link['id'] ) ? $link['id'] : 'ca-' . $xmlID;
+                               $nav[$section][$key]['attributes'] =
+                                       ' id="' . Sanitizer::escapeId( $xmlID ) . '"';
+                               if ( $link['class'] ) {
+                                       $nav[$section][$key]['attributes'] .=
+                                               ' class="' . htmlspecialchars( $link['class'] ) . '"';
+                                       unset( $nav[$section][$key]['class'] );
+                               }
+                               if ( isset( $link['tooltiponly'] ) && $link['tooltiponly'] ) {
+                                       $nav[$section][$key]['key'] =
+                                               Linker::tooltip( $xmlID );
+                               } else {
+                                       $nav[$section][$key]['key'] =
+                                               Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( $xmlID ) );
+                               }
+                       }
+               }
+               $this->data['namespace_urls'] = $nav['namespaces'];
+               $this->data['view_urls'] = $nav['views'];
+               $this->data['action_urls'] = $nav['actions'];
+               $this->data['variant_urls'] = $nav['variants'];
+
+               // Reverse horizontally rendered navigation elements
+               if ( $this->data['rtl'] ) {
+                       $this->data['view_urls'] =
+                               array_reverse( $this->data['view_urls'] );
+                       $this->data['namespace_urls'] =
+                               array_reverse( $this->data['namespace_urls'] );
+                       $this->data['personal_urls'] =
+                               array_reverse( $this->data['personal_urls'] );
+               }
+               // Output HTML Page
+               $this->html( 'headelement' );
+               ?>
+               <div id="mw-page-base" class="noprint"></div>
+               <div id="mw-head-base" class="noprint"></div>
+               <div id="content" class="mw-body" role="main">
+                       <a id="top"></a>
+
+                       <?php
+                       if ( $this->data['sitenotice'] ) {
+                               ?>
+                               <div id="siteNotice"><?php $this->html( 'sitenotice' ) ?></div>
+                       <?php
+                       }
+                       ?>
+                       <h1 id="firstHeading" class="firstHeading" lang="<?php
+                       $this->data['pageLanguage'] =
+                               $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
+                       $this->text( 'pageLanguage' );
+                       ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
+                       <?php $this->html( 'prebodyhtml' ) ?>
+                       <div id="bodyContent" class="mw-body-content">
+                               <?php
+                               if ( $this->data['isarticle'] ) {
+                                       ?>
+                                       <div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
+                               <?php
+                               }
+                               ?>
+                               <div id="contentSub"<?php
+                               $this->html( 'userlangattributes' )
+                               ?>><?php $this->html( 'subtitle' ) ?></div>
+                               <?php
+                               if ( $this->data['undelete'] ) {
+                                       ?>
+                                       <div id="contentSub2"><?php $this->html( 'undelete' ) ?></div>
+                               <?php
+                               }
+                               ?>
+                               <?php
+                               if ( $this->data['newtalk'] ) {
+                                       ?>
+                                       <div class="usermessage"><?php $this->html( 'newtalk' ) ?></div>
+                               <?php
+                               }
+                               ?>
+                               <div id="jump-to-nav" class="mw-jump">
+                                       <?php $this->msg( 'jumpto' ) ?>
+                                       <a href="#mw-navigation"><?php
+                                               $this->msg( 'jumptonavigation' )
+                                               ?></a><?php
+                                       $this->msg( 'comma-separator' )
+                                       ?>
+                                       <a href="#p-search"><?php $this->msg( 'jumptosearch' ) ?></a>
+                               </div>
+                               <?php $this->html( 'bodycontent' ) ?>
+                               <?php
+                               if ( $this->data['printfooter'] ) {
+                                       ?>
+                                       <div class="printfooter">
+                                               <?php $this->html( 'printfooter' ); ?>
+                                       </div>
+                               <?php
+                               }
+                               ?>
+                               <?php
+                               if ( $this->data['catlinks'] ) {
+                                       ?>
+                                       <?php
+                                       $this->html( 'catlinks' );
+                                       ?>
+                               <?php
+                               }
+                               ?>
+                               <?php
+                               if ( $this->data['dataAfterContent'] ) {
+                                       ?>
+                                       <?php
+                                       $this->html( 'dataAfterContent' );
+                                       ?>
+                               <?php
+                               }
+                               ?>
+                               <div class="visualClear"></div>
+                               <?php $this->html( 'debughtml' ); ?>
+                       </div>
+               </div>
+               <div id="mw-navigation">
+                       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
+
+                       <div id="mw-head">
+                               <?php $this->renderNavigation( 'PERSONAL' ); ?>
+                               <div id="left-navigation">
+                                       <?php $this->renderNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?>
+                               </div>
+                               <div id="right-navigation">
+                                       <?php $this->renderNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?>
+                               </div>
+                       </div>
+                       <div id="mw-panel">
+                               <div id="p-logo" role="banner"><a style="background-image: url(<?php
+                                       $this->text( 'logopath' )
+                                       ?>);" href="<?php
+                                       echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] )
+                                       ?>" <?php
+                                       echo Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) )
+                                       ?>></a></div>
+                               <?php $this->renderPortals( $this->data['sidebar'] ); ?>
+                       </div>
+               </div>
+               <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
+                       <?php
+                       foreach ( $this->getFooterLinks() as $category => $links ) {
+                               ?>
+                               <ul id="footer-<?php
+                               echo $category
+                               ?>">
+                                       <?php
+                                       foreach ( $links as $link ) {
+                                               ?>
+                                               <li id="footer-<?php
+                                               echo $category
+                                               ?>-<?php
+                                               echo $link
+                                               ?>"><?php
+                                                       $this->html( $link )
+                                                       ?></li>
+                                       <?php
+                                       }
+                                       ?>
+                               </ul>
+                       <?php
+                       }
+                       ?>
+                       <?php $footericons = $this->getFooterIcons( "icononly" );
+                       if ( count( $footericons ) > 0 ) {
+                               ?>
+                               <ul id="footer-icons" class="noprint">
+                                       <?php
+                                       foreach ( $footericons as $blockName => $footerIcons ) {
+                                               ?>
+                                               <li id="footer-<?php
+                                               echo htmlspecialchars( $blockName ); ?>ico">
+                                                       <?php
+                                                       foreach ( $footerIcons as $icon ) {
+                                                               ?>
+                                                               <?php
+                                                               echo $this->getSkin()->makeFooterIcon( $icon );
+                                                               ?>
+
+                                                       <?php
+                                                       }
+                                                       ?>
+                                               </li>
+                                       <?php
+                                       }
+                                       ?>
+                               </ul>
+                       <?php
+                       }
+                       ?>
+                       <div style="clear:both"></div>
+               </div>
+               <?php $this->printTrail(); ?>
+
+       </body>
+</html>
+       <?php
+       }
+
+       /**
+        * Render a series of portals
+        *
+        * @param array $portals
+        */
+       protected function renderPortals( $portals ) {
+               // Force the rendering of the following portals
+               if ( !isset( $portals['SEARCH'] ) ) {
+                       $portals['SEARCH'] = true;
+               }
+               if ( !isset( $portals['TOOLBOX'] ) ) {
+                       $portals['TOOLBOX'] = true;
+               }
+               if ( !isset( $portals['LANGUAGES'] ) ) {
+                       $portals['LANGUAGES'] = true;
+               }
+               // Render portals
+               foreach ( $portals as $name => $content ) {
+                       if ( $content === false ) {
+                               continue;
+                       }
+
+                       switch ( $name ) {
+                               case 'SEARCH':
+                                       break;
+                               case 'TOOLBOX':
+                                       $this->renderPortal( 'tb', $this->getToolbox(), 'toolbox', 'SkinTemplateToolboxEnd' );
+                                       break;
+                               case 'LANGUAGES':
+                                       if ( $this->data['language_urls'] !== false ) {
+                                               $this->renderPortal( 'lang', $this->data['language_urls'], 'otherlanguages' );
+                                       }
+                                       break;
+                               default:
+                                       $this->renderPortal( $name, $content );
+                                       break;
+                       }
+               }
+       }
+
+       /**
+        * @param string $name
+        * @param array $content
+        * @param null|string $msg
+        * @param null|string|array $hook
+        */
+       protected function renderPortal( $name, $content, $msg = null, $hook = null ) {
+               if ( $msg === null ) {
+                       $msg = $name;
+               }
+               $msgObj = wfMessage( $msg );
+               ?>
+               <div class="portal" role="navigation" id='<?php
+               echo Sanitizer::escapeId( "p-$name" )
+               ?>'<?php
+               echo Linker::tooltip( 'p-' . $name )
+               ?> aria-labelledby='<?php echo Sanitizer::escapeId( "p-$name-label" ) ?>'>
+                       <h3<?php
+                       $this->html( 'userlangattributes' )
+                       ?> id='<?php
+                       echo Sanitizer::escapeId( "p-$name-label" )
+                       ?>'><?php
+                               echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg );
+                               ?></h3>
+
+                       <div class="body">
+                               <?php
+                               if ( is_array( $content ) ) {
+                                       ?>
+                                       <ul>
+                                               <?php
+                                               foreach ( $content as $key => $val ) {
+                                                       ?>
+                                                       <?php echo $this->makeListItem( $key, $val ); ?>
+
+                                               <?php
+                                               }
+                                               if ( $hook !== null ) {
+                                                       wfRunHooks( $hook, array( &$this, true ) );
+                                               }
+                                               ?>
+                                       </ul>
+                               <?php
+                               } else {
+                                       ?>
+                                       <?php
+                                       echo $content; /* Allow raw HTML block to be defined by extensions */
+                               }
+
+                               $this->renderAfterPortlet( $name );
+                               ?>
+                       </div>
+               </div>
+       <?php
+       }
+
+       /**
+        * Render one or more navigations elements by name, automatically reveresed
+        * when UI is in RTL mode
+        *
+        * @param array $elements
+        */
+       protected function renderNavigation( $elements ) {
+               global $wgVectorUseSimpleSearch;
+
+               // If only one element was given, wrap it in an array, allowing more
+               // flexible arguments
+               if ( !is_array( $elements ) ) {
+                       $elements = array( $elements );
+                       // If there's a series of elements, reverse them when in RTL mode
+               } elseif ( $this->data['rtl'] ) {
+                       $elements = array_reverse( $elements );
+               }
+               // Render elements
+               foreach ( $elements as $name => $element ) {
+                       switch ( $element ) {
+                               case 'NAMESPACES':
+                                       ?>
+                                       <div id="p-namespaces" role="navigation" class="vectorTabs<?php
+                                       if ( count( $this->data['namespace_urls'] ) == 0 ) {
+                                               echo ' emptyPortlet';
+                                       }
+                                       ?>" aria-labelledby="p-namespaces-label">
+                                               <h3 id="p-namespaces-label"><?php $this->msg( 'namespaces' ) ?></h3>
+                                               <ul<?php $this->html( 'userlangattributes' ) ?>>
+                                                       <?php
+                                                       foreach ( $this->data['namespace_urls'] as $link ) {
+                                                               ?>
+                                                               <li <?php
+                                                               echo $link['attributes']
+                                                               ?>><span><a href="<?php
+                                                                               echo htmlspecialchars( $link['href'] )
+                                                                               ?>" <?php
+                                                                               echo $link['key']
+                                                                               ?>><?php
+                                                                                       echo htmlspecialchars( $link['text'] )
+                                                                                       ?></a></span></li>
+                                                       <?php
+                                                       }
+                                                       ?>
+                                               </ul>
+                                       </div>
+                                       <?php
+                                       break;
+                               case 'VARIANTS':
+                                       ?>
+                                       <div id="p-variants" role="navigation" class="vectorMenu<?php
+                                       if ( count( $this->data['variant_urls'] ) == 0 ) {
+                                               echo ' emptyPortlet';
+                                       }
+                                       ?>" aria-labelledby="p-variants-label">
+                                               <h3 id="mw-vector-current-variant">
+                                                       <?php
+                                                       foreach ( $this->data['variant_urls'] as $link ) {
+                                                               ?>
+                                                               <?php
+                                                               if ( stripos( $link['attributes'], 'selected' ) !== false ) {
+                                                                       ?>
+                                                                       <?php
+                                                                       echo htmlspecialchars( $link['text'] )
+                                                                       ?>
+                                                               <?php
+                                                               }
+                                                               ?>
+                                                       <?php
+                                                       }
+                                                       ?>
+                                               </h3>
+
+                                               <h3 id="p-variants-label"><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h3>
+
+                                               <div class="menu">
+                                                       <ul>
+                                                               <?php
+                                                               foreach ( $this->data['variant_urls'] as $link ) {
+                                                                       ?>
+                                                                       <li<?php
+                                                                       echo $link['attributes']
+                                                                       ?>><a href="<?php
+                                                                               echo htmlspecialchars( $link['href'] )
+                                                                               ?>" lang="<?php
+                                                                               echo htmlspecialchars( $link['lang'] )
+                                                                               ?>" hreflang="<?php
+                                                                               echo htmlspecialchars( $link['hreflang'] )
+                                                                               ?>" <?php
+                                                                               echo $link['key']
+                                                                               ?>><?php
+                                                                                       echo htmlspecialchars( $link['text'] )
+                                                                                       ?></a></li>
+                                                               <?php
+                                                               }
+                                                               ?>
+                                                       </ul>
+                                               </div>
+                                       </div>
+                                       <?php
+                                       break;
+                               case 'VIEWS':
+                                       ?>
+                                       <div id="p-views" role="navigation" class="vectorTabs<?php
+                                       if ( count( $this->data['view_urls'] ) == 0 ) {
+                                               echo ' emptyPortlet';
+                                       }
+                                       ?>" aria-labelledby="p-views-label">
+                                               <h3 id="p-views-label"><?php $this->msg( 'views' ) ?></h3>
+                                               <ul<?php
+                                               $this->html( 'userlangattributes' )
+                                               ?>>
+                                                       <?php
+                                                       foreach ( $this->data['view_urls'] as $link ) {
+                                                               ?>
+                                                               <li<?php
+                                                               echo $link['attributes']
+                                                               ?>><span><a href="<?php
+                                                                               echo htmlspecialchars( $link['href'] )
+                                                                               ?>" <?php
+                                                                               echo $link['key']
+                                                                               ?>><?php
+                                                                                       // $link['text'] can be undefined - bug 27764
+                                                                                       if ( array_key_exists( 'text', $link ) ) {
+                                                                                               echo array_key_exists( 'img', $link )
+                                                                                                       ? '<img src="' . $link['img'] . '" alt="' . $link['text'] . '" />'
+                                                                                                       : htmlspecialchars( $link['text'] );
+                                                                                       }
+                                                                                       ?></a></span></li>
+                                                       <?php
+                                                       }
+                                                       ?>
+                                               </ul>
+                                       </div>
+                                       <?php
+                                       break;
+                               case 'ACTIONS':
+                                       ?>
+                                       <div id="p-cactions" role="navigation" class="vectorMenu<?php
+                                       if ( count( $this->data['action_urls'] ) == 0 ) {
+                                               echo ' emptyPortlet';
+                                       }
+                                       ?>" aria-labelledby="p-cactions-label">
+                                               <h3 id="p-cactions-label"><span><?php $this->msg( 'vector-more-actions' ) ?></span><a href="#"></a></h3>
+
+                                               <div class="menu">
+                                                       <ul<?php $this->html( 'userlangattributes' ) ?>>
+                                                               <?php
+                                                               foreach ( $this->data['action_urls'] as $link ) {
+                                                                       ?>
+                                                                       <li<?php
+                                                                       echo $link['attributes']
+                                                                       ?>>
+                                                                               <a href="<?php
+                                                                               echo htmlspecialchars( $link['href'] )
+                                                                               ?>" <?php
+                                                                               echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] )
+                                                                                       ?></a>
+                                                                       </li>
+                                                               <?php
+                                                               }
+                                                               ?>
+                                                       </ul>
+                                               </div>
+                                       </div>
+                                       <?php
+                                       break;
+                               case 'PERSONAL':
+                                       ?>
+                                       <div id="p-personal" role="navigation" class="<?php
+                                       if ( count( $this->data['personal_urls'] ) == 0 ) {
+                                               echo ' emptyPortlet';
+                                       }
+                                       ?>" aria-labelledby="p-personal-label">
+                                               <h3 id="p-personal-label"><?php $this->msg( 'personaltools' ) ?></h3>
+                                               <ul<?php $this->html( 'userlangattributes' ) ?>>
+                                                       <?php
+                                                       $personalTools = $this->getPersonalTools();
+                                                       foreach ( $personalTools as $key => $item ) {
+                                                               echo $this->makeListItem( $key, $item );
+                                                       }
+                                                       ?>
+                                               </ul>
+                                       </div>
+                                       <?php
+                                       break;
+                               case 'SEARCH':
+                                       ?>
+                                       <div id="p-search" role="search">
+                                               <h3<?php $this->html( 'userlangattributes' ) ?>>
+                                                       <label for="searchInput"><?php $this->msg( 'search' ) ?></label>
+                                               </h3>
+
+                                               <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
+                                                       <?php
+                                                       if ($wgVectorUseSimpleSearch) {
+                                                       ?>
+                                                       <div id="simpleSearch">
+                                                               <?php
+                                                       } else {
+                                                       ?>
+                                                               <div>
+                                                                       <?php
+                                                       }
+                                                       ?>
+                                                       <?php
+                                                       echo $this->makeSearchInput( array( 'id' => 'searchInput' ) );
+                                                       echo Html::hidden( 'title', $this->get( 'searchtitle' ) );
+                                                       // We construct two buttons (for 'go' and 'fulltext' search modes),
+                                                       // but only one will be visible and actionable at a time (they are
+                                                       // overlaid on top of each other in CSS).
+                                                       // * Browsers will use the 'fulltext' one by default (as it's the
+                                                       //   first in tree-order), which is desirable when they are unable
+                                                       //   to show search suggestions (either due to being broken or
+                                                       //   having JavaScript turned off).
+                                                       // * The mediawiki.searchSuggest module, after doing tests for the
+                                                       //   broken browsers, removes the 'fulltext' button and handles
+                                                       //   'fulltext' search itself; this will reveal the 'go' button and
+                                                       //   cause it to be used.
+                                                       echo $this->makeSearchButton(
+                                                               'fulltext',
+                                                               array( 'id' => 'mw-searchButton', 'class' => 'searchButton mw-fallbackSearchButton' )
+                                                       );
+                                                       echo $this->makeSearchButton(
+                                                               'go',
+                                                               array( 'id' => 'searchButton', 'class' => 'searchButton' )
+                                                       );
+                                                       ?>
+                                                               </div>
+                                               </form>
+                                       </div>
+                                       <?php
+
+                                       break;
+                       }
+               }
+       }
+}
index 9344433..e24bea9 100644 (file)
                $.collapsibleTabs.handleResize();
                return this;
        };
-       /**
-        * Returns the amount of horizontal distance between the two tabs groups
-        * (#left-navigation and #right-navigation), in pixels. If negative, this
-        * means that the tabs overlap, and the value is the width of overlapping
-        * parts.
-        *
-        * Used in default expandCondition and collapseCondition.
-        *
-        * @return {Numeric} distance/overlap in pixels
-        */
-       function calculateTabDistance() {
-               var $leftTab, $rightTab, leftEnd, rightStart;
-
-               // In RTL, #right-navigation is actually on the left and vice versa.
-               // Hooray for descriptive naming.
-               if ( !rtl ) {
-                       $leftTab = $( '#left-navigation' );
-                       $rightTab = $( '#right-navigation' );
-               } else {
-                       $leftTab = $( '#right-navigation' );
-                       $rightTab = $( '#left-navigation' );
-               }
-
-               leftEnd = $leftTab.offset().left + $leftTab.width();
-               rightStart = $rightTab.offset().left;
-
-               return rightStart - leftEnd;
-       }
        $.collapsibleTabs = {
                instances: [],
                boundEvent: null,
                        shifting: false,
                        expandCondition: function ( eleWidth ) {
                                // If there are at least eleWidth + 1 pixels of free space, expand.
-                               // We add 1 because .width() will truncate fractional values
-                               // but .offset() will not.
-                               return calculateTabDistance() >= (eleWidth + 1);
+                               // We add 1 because .width() will truncate fractional values but .offset() will not.
+                               return $.collapsibleTabs.calculateTabDistance() >= eleWidth + 1;
                        },
                        collapseCondition: function () {
                                // If there's an overlap, collapse.
-                               return calculateTabDistance() < 0;
+                               return $.collapsibleTabs.calculateTabDistance() < 0;
                        }
                },
                addData: function ( $collapsible ) {
                                        }
                                } )
                        );
+               },
+               /**
+                * Returns the amount of horizontal distance between the two tabs groups
+                * (#left-navigation and #right-navigation), in pixels. If negative, this
+                * means that the tabs overlap, and the value is the width of overlapping
+                * parts.
+                *
+                * Used in default expandCondition and collapseCondition.
+                *
+                * @return {Numeric} distance/overlap in pixels
+                */
+               calculateTabDistance: function () {
+                       var $leftTab, $rightTab, leftEnd, rightStart;
+
+                       // In RTL, #right-navigation is actually on the left and vice versa.
+                       // Hooray for descriptive naming.
+                       if ( !rtl ) {
+                               $leftTab = $( '#left-navigation' );
+                               $rightTab = $( '#right-navigation' );
+                       } else {
+                               $leftTab = $( '#right-navigation' );
+                               $rightTab = $( '#left-navigation' );
+                       }
+
+                       leftEnd = $leftTab.offset().left + $leftTab.width();
+                       rightStart = $rightTab.offset().left;
+
+                       return rightStart - leftEnd;
                }
        };
 
index 7e24ae7..9e39fbb 100644 (file)
@@ -3,8 +3,7 @@ Styling for namespace tabs (page, discussion) and views (read, edit, view histor
 */
 
 /* Navigation Labels */
-div.vectorTabs h3,
-div.vectorMenu h3 span {
+div.vectorTabs h3 {
        display: none;
 }
 
@@ -120,21 +119,8 @@ div.vectorMenu {
        direction: ltr;
        /* @noflip */
        float: left;
-       .background-image-svg('images/arrow-down-icon.svg', 'images/arrow-down-icon.png');
-       /* @noflip */
-       background-position: 100% 60%;
-       background-repeat: no-repeat;
        cursor: pointer;
-       .transition(background-position 250ms);
-}
-
-div.vectorMenu.menuForceShow {
-       background-position: 100% 100%;
-}
-
-div.vectorMenuFocus {
-       .background-image-svg('images/arrow-down-focus-icon.svg', 'images/arrow-down-focus-icon.png');
-       background-position: 100% 60%;
+       position: relative;
 }
 
 body.rtl div.vectorMenu {
@@ -142,73 +128,82 @@ body.rtl div.vectorMenu {
        direction: rtl;
 }
 
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
 div#mw-head div.vectorMenu h3 {
        /* @noflip */
        float: left;
        .background-image('images/tab-break.png');
        background-repeat: no-repeat;
-       background-position: bottom left;
+       background-position: bottom right;
        margin-left: -1px;
+       font-size: 1em;
+       height: 2.5em;
+       // This effectively moves the "background border" outside of the element to act like a real
+       // border. It is necessary for the dropdown (div.vectorMenu div.menu) to align well.
+       padding-right: 1px;
+       margin-right: -1px;
 }
 
-/* IGNORED BY IE6 */
-div#mw-head div.vectorMenu > h3 {
-       background-image: none;
+// The "Variants" menu has a really funny structure
+div#mw-head div.vectorMenu#p-variants {
+       #p-variants-label span {
+               display: none;
+       }
+
+       #mw-vector-current-variant {
+               display: inline-block;
+               float: left;
+               padding-right: 20px;
+               font-size: 0.8em;
+               padding-left: 0.5em;
+               padding-top: 1.375em;
+               font-weight: normal;
+               border: none;
+               background-image: none;
+       }
 }
 
-div#mw-head div.vectorMenu h4,
-div.vectorMenu#p-variants #mw-vector-current-variant {
-       display: inline-block;
-       float: left;
+div.vectorMenu h3 span {
+       display: block;
        font-size: 0.8em;
-       padding-left: 0.5em;
+       padding-left: 0.7em;
        padding-top: 1.375em;
+       margin-right: 20px;
        font-weight: normal;
-       border: none;
+       color: @menu-main-heading-color;
 }
 
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
 div.vectorMenu h3 a {
-       display: inline-block;
-       width: 24px;
-       height: 1.9em;
-       text-decoration: none;
-       .background-image('images/tab-break.png');
+       position: absolute;
+       top: 0;
+       right: 0;
+       width: 20px;
+       height: 2.5em;
+       .background-image-svg('images/arrow-down-icon.svg', 'images/arrow-down-icon.png');
+       background-position: 100% 70%;
        background-repeat: no-repeat;
-       background-position: bottom right;
+       .transition(background-position 250ms);
 }
 
-/* IGNORED BY IE6 */
-div.vectorMenu h3 > a {
-       display: block;
+div.vectorMenu.menuForceShow h3 a {
+       background-position: 100% 100%;
+}
+
+div.vectorMenuFocus h3 a {
+       .background-image-svg('images/arrow-down-focus-icon.svg', 'images/arrow-down-focus-icon.png');
 }
 
 div.vectorMenu div.menu {
-       position: relative;
-       display: none;
+       // Match the width of the dropdown "heading" (the tab)
+       min-width: 100%;
+       position: absolute;
+       top: 2.5em;
+       left: -1px;
+       background-color: white;
+       border: solid 1px silver;
+       border-top-width: 0;
        clear: both;
        text-align: left;
-}
-
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-body.rtl div.vectorMenu div.menu {
-       /* @noflip */
-       margin-left: 24px;
-}
-
-/* IGNORED BY IE6 */
-body.rtl div.vectorMenu > div.menu {
-       /* @noflip */
-       margin-left: auto;
-}
-
-/* IGNORED BY IE6 */
-/* Also fixes old versions of FireFox */
-body.rtl div.vectorMenu > div.menu,
-x:-moz-any-link {
-       /* @noflip */
-       margin-left: 23px;
+       display: none;
 }
 
 /* Enable forcing showing of the menu for accessibility */
@@ -218,15 +213,10 @@ div.vectorMenu.menuForceShow div.menu {
 }
 
 div.vectorMenu ul {
-       position: absolute;
-       background-color: white;
-       border: solid 1px silver;
-       border-top-width: 0;
        list-style-type: none;
        list-style-image: none;
        padding: 0;
        margin: 0;
-       margin-left: -1px;
        text-align: left;
 }
 
index 2c38516..a389ed6 100644 (file)
 #ca-watch.icon a.loading {
        .background-image-svg('images/watch-icon-loading.svg', 'images/watch-icon-loading.png');
        .rotation(700ms);
+       /* Suppress the hilarious rotating focus outline on Firefox */
+       outline: none;
+       cursor: default;
+       pointer-events: none;
        background-position: 50% 60%;
        -webkit-transform-origin: 50% 57%;
        transform-origin: 50% 57%;
index 41cb1da..b17d15c 100644 (file)
@@ -1,4 +1,4 @@
-@html-font-size: 1em;
+@html-font-size: 100%;
 
 // Page content
 // FIXME: Use global variable since Echo and CentralNotice use this variable
index d8ac3c8..7be3535 100644 (file)
@@ -2,6 +2,14 @@
  * Vector-specific scripts
  */
 jQuery( function ( $ ) {
+       /**
+        * Focus search input at the very end
+        */
+       $( '#searchInput' ).attr( 'tabindex', $( document ).lastTabIndex() + 1 );
+
+       /**
+        * Dropdown menu accessibility
+        */
        $( 'div.vectorMenu' ).each( function () {
                var $el = $( this );
                $el.find( '> h3 > a' ).parent()
@@ -31,30 +39,69 @@ jQuery( function ( $ ) {
        $( '#mw-panel > .portal:first' ).addClass( 'first' );
 
        /**
-        * Collapsible tabs for Vector
+        * Collapsible tabs
         */
-       var $cactions = $( '#p-cactions' );
+       var $cactions = $( '#p-cactions' ),
+               $tabContainer = $( '#p-views ul' ),
+               originalDropdownWidth = $cactions.width();
 
        // Bind callback functions to animate our drop down menu in and out
        // and then call the collapsibleTabs function on the menu
-       $( '#p-views ul' )
+       $tabContainer
                .bind( 'beforeTabCollapse', function () {
                        // If the dropdown was hidden, show it
                        if ( $cactions.hasClass( 'emptyPortlet' ) ) {
                                $cactions
                                        .removeClass( 'emptyPortlet' )
                                        .find( 'h3' )
-                                               .css( 'width', '1px' ).animate( { 'width': '24px' }, 390 );
+                                               .css( 'width', '1px' ).animate( { 'width': originalDropdownWidth }, 'normal' );
                        }
                } )
                .bind( 'beforeTabExpand', function () {
                        // If we're removing the last child node right now, hide the dropdown
                        if ( $cactions.find( 'li' ).length === 1 ) {
-                               $cactions.find( 'h3' ).animate( { 'width': '1px' }, 390, function () {
+                               $cactions.find( 'h3' ).animate( { 'width': '1px' }, 'normal', function () {
                                        $( this ).attr( 'style', '' )
                                                .parent().addClass( 'emptyPortlet' );
                                });
                        }
                } )
-               .collapsibleTabs();
+               .collapsibleTabs( {
+                       expandCondition: function ( eleWidth ) {
+                               // (This looks a bit awkward because we're doing expensive queries as late as possible.)
+
+                               var distance = $.collapsibleTabs.calculateTabDistance();
+                               // If there are at least eleWidth + 1 pixels of free space, expand.
+                               // We add 1 because .width() will truncate fractional values but .offset() will not.
+                               if ( distance >= eleWidth + 1 ) {
+                                       return true;
+                               } else {
+                                       // Maybe we can still expand? Account for the width of the "Actions" dropdown if the
+                                       // expansion would hide it.
+                                       if ( $cactions.find( 'li' ).length === 1 ) {
+                                               return distance >= eleWidth + 1 - originalDropdownWidth;
+                                       } else {
+                                               return false;
+                                       }
+                               }
+                       },
+                       collapseCondition: function () {
+                               // (This looks a bit awkward because we're doing expensive queries as late as possible.)
+                               // TODO The dropdown itself should probably "fold" to just the down-arrow (hiding the text)
+                               // if it can't fit on the line?
+
+                               // If there's an overlap, collapse.
+                               if ( $.collapsibleTabs.calculateTabDistance() < 0 ) {
+                                       // But only if the width of the tab to collapse is smaller than the width of the dropdown
+                                       // we would have to insert. An example language where this happens is Lithuanian (lt).
+                                       if ( $cactions.hasClass( 'emptyPortlet' ) ) {
+                                               return $tabContainer.children( 'li.collapsible:last' ).width() > originalDropdownWidth;
+                                       } else {
+                                               return true;
+                                       }
+                               } else {
+                                       return false;
+                               }
+                       }
+               } );
 } );
index a5eb29b..37cf68f 100644 (file)
@@ -86,6 +86,7 @@ $wgAutoloadClasses += array(
 
        # tests/phpunit/media
        'FakeDimensionFile' => "$testDir/phpunit/includes/media/FakeDimensionFile.php",
+       'MediaWikiMediaTestCase' => "$testDir/phpunit/includes/media/MediaWikiMediaTestCase.php",
 
        # tests/phpunit/mocks
        'MockFSFile' => "$testDir/phpunit/mocks/filebackend/MockFSFile.php",
index f18903b..63c3d01 100644 (file)
@@ -5,8 +5,8 @@
 /*jshint node:true */
 module.exports = function ( grunt ) {
        grunt.loadNpmTasks( 'grunt-contrib-jshint' );
-       grunt.loadNpmTasks( 'grunt-banana-checker' );
        grunt.loadNpmTasks( 'grunt-contrib-watch' );
+       grunt.loadNpmTasks( 'grunt-banana-checker' );
        grunt.loadNpmTasks( 'grunt-jscs-checker' );
        grunt.loadNpmTasks( 'grunt-jsonlint' );
 
@@ -16,14 +16,14 @@ module.exports = function ( grunt ) {
                pkg: grunt.file.readJSON( __dirname + '/package.json' ),
                jshint: {
                        options: {
-                               jshintrc: '.jshintrc'
+                               jshintrc: true
                        },
-                       all: [ '*.js', '{includes,languages,resources,skins,tests}/**/*.js' ]
+                       all: [
+                               '*.js',
+                               '{includes,languages,resources,skins,tests}/**/*.js'
+                       ]
                },
                jscs: {
-                       // Known issues:
-                       // - https://github.com/mdevils/node-jscs/issues/277
-                       // - https://github.com/mdevils/node-jscs/issues/278
                        all: [
                                '<%= jshint.all %>',
                                // Auto-generated file with JSON (double quotes)
@@ -56,7 +56,7 @@ module.exports = function ( grunt ) {
                                '.jshintignore',
                                '.jshintrc'
                        ],
-                       tasks: ['test']
+                       tasks: 'test'
                }
        } );
 
index 235ddbf..a398596 100644 (file)
@@ -6,10 +6,10 @@
   },
   "devDependencies": {
     "grunt": "0.4.2",
-    "grunt-contrib-jshint": "0.9.2",
+    "grunt-contrib-jshint": "0.10.0",
     "grunt-contrib-watch": "0.6.1",
     "grunt-banana-checker": "0.1.0",
-    "grunt-jscs-checker": "0.4.1",
+    "grunt-jscs-checker": "0.4.4",
     "grunt-jsonlint": "1.0.4"
   }
 }
index 1875ac5..7e7c42f 100644 (file)
@@ -1007,7 +1007,7 @@ class ParserTest {
                                'size'        => 12345,
                                'width'       => 240,
                                'height'      => 180,
-                               'bits'        => 24,
+                               'bits'        => 0,
                                'media_type'  => MEDIATYPE_DRAWING,
                                'mime'        => 'image/svg+xml',
                                'metadata'    => serialize( array() ),
@@ -1035,6 +1035,7 @@ class ParserTest {
                        'size' => 3249,
                        'width' => 2480,
                        'height' => 3508,
+                       'bits' => 0,
                        'media_type' => MEDIATYPE_BITMAP,
                        'mime' => 'image/vnd.djvu',
                        'metadata' => '<?xml version="1.0" ?>
@@ -1134,18 +1135,18 @@ class ParserTest {
                }
 
                wfMkdirParents( $dir . '/3/3a', null, __METHOD__ );
-               copy( "$IP/skins/monobook/headbg.jpg", "$dir/3/3a/Foobar.jpg" );
+               copy( "$IP/tests/phpunit/data/parser/headbg.jpg", "$dir/3/3a/Foobar.jpg" );
                wfMkdirParents( $dir . '/e/ea', null, __METHOD__ );
-               copy( "$IP/skins/monobook/wiki.png", "$dir/e/ea/Thumb.png" );
+               copy( "$IP/tests/phpunit/data/parser/wiki.png", "$dir/e/ea/Thumb.png" );
                wfMkdirParents( $dir . '/0/09', null, __METHOD__ );
-               copy( "$IP/skins/monobook/headbg.jpg", "$dir/0/09/Bad.jpg" );
+               copy( "$IP/tests/phpunit/data/parser/headbg.jpg", "$dir/0/09/Bad.jpg" );
                wfMkdirParents( $dir . '/f/ff', null, __METHOD__ );
                file_put_contents( "$dir/f/ff/Foobar.svg",
                        '<?xml version="1.0" encoding="utf-8"?>' .
                        '<svg xmlns="http://www.w3.org/2000/svg"' .
                        ' version="1.1" width="240" height="180"/>' );
                wfMkdirParents( $dir . '/5/5f', null, __METHOD__ );
-               copy( "$IP/tests/phpunit/data/media/LoremIpsum.djvu", "$dir/5/5f/LoremIpsum.djvu" );
+               copy( "$IP/tests/phpunit/data/parser/LoremIpsum.djvu", "$dir/5/5f/LoremIpsum.djvu" );
 
                return $dir;
        }
index 569c165..7276349 100644 (file)
@@ -413,12 +413,8 @@ Simple list
 * Item 1
 * Item 2
 !! html
-<ul>
-<li> Item 1
-</li>
-<li> Item 2
-</li>
-</ul>
+<ul><li> Item 1</li>
+<li> Item 2</li></ul>
 
 !! end
 
@@ -441,38 +437,21 @@ Italics and bold
 * plain l'''italic''plain
 * plain l''''bold''' plain
 !! html
-<ul>
-<li> plain
-</li>
-<li> plain<i>italic</i>plain
-</li>
-<li> plain<i>italic</i>plain<i>italic</i>plain
-</li>
-<li> plain<b>bold</b>plain
-</li>
-<li> plain<b>bold</b>plain<b>bold</b>plain
-</li>
-<li> plain<i>italic</i>plain<b>bold</b>plain
-</li>
-<li> plain<b>bold</b>plain<i>italic</i>plain
-</li>
-<li> plain<i>italic<b>bold-italic</b>italic</i>plain
-</li>
-<li> plain<b>bold<i>bold-italic</i>bold</b>plain
-</li>
-<li> plain<i><b>bold-italic</b>italic</i>plain
-</li>
-<li> plain<b><i>bold-italic</i>bold</b>plain
-</li>
-<li> plain<i>italic<b>bold-italic</b></i>plain
-</li>
-<li> plain<b>bold<i>bold-italic</i></b>plain
-</li>
-<li> plain l'<i>italic</i>plain
-</li>
-<li> plain l'<b>bold</b> plain
-</li>
-</ul>
+<ul><li> plain</li>
+<li> plain<i>italic</i>plain</li>
+<li> plain<i>italic</i>plain<i>italic</i>plain</li>
+<li> plain<b>bold</b>plain</li>
+<li> plain<b>bold</b>plain<b>bold</b>plain</li>
+<li> plain<i>italic</i>plain<b>bold</b>plain</li>
+<li> plain<b>bold</b>plain<i>italic</i>plain</li>
+<li> plain<i>italic<b>bold-italic</b>italic</i>plain</li>
+<li> plain<b>bold<i>bold-italic</i>bold</b>plain</li>
+<li> plain<i><b>bold-italic</b>italic</i>plain</li>
+<li> plain<b><i>bold-italic</i>bold</b>plain</li>
+<li> plain<i>italic<b>bold-italic</b></i>plain</li>
+<li> plain<b>bold<i>bold-italic</i></b>plain</li>
+<li> plain l'<i>italic</i>plain</li>
+<li> plain l'<b>bold</b> plain</li></ul>
 
 !! end
 
@@ -1215,24 +1194,12 @@ nowiki 3
 *There is not nowiki.
 *There is <nowiki>nowiki</nowiki>.
 !! html
-<dl>
-<dd>There is not nowiki.
-</dd>
-<dd>There is nowiki.
-</dd>
-</dl>
-<ol>
-<li>There is not nowiki.
-</li>
-<li>There is nowiki.
-</li>
-</ol>
-<ul>
-<li>There is not nowiki.
-</li>
-<li>There is nowiki.
-</li>
-</ul>
+<dl><dd>There is not nowiki.</dd>
+<dd>There is nowiki.</dd></dl>
+<ol><li>There is not nowiki.</li>
+<li>There is nowiki.</li></ol>
+<ul><li>There is not nowiki.</li>
+<li>There is nowiki.</li></ul>
 
 !! end
 
@@ -1992,11 +1959,34 @@ Templates: Indent-Pre: 1f: Wrapping should be based on expanded content
 Things that look like <pre> tags aren't treated as such
 !! wikitext
 Barack Obama <President> of the United States
+<President></President>
 !! html
 <p>Barack Obama &lt;President&gt; of the United States
+&lt;President&gt;&lt;/President&gt;
 </p>
 !! end
 
+## PHP parser discards the "<pre " string
+!! test
+Handle broken pre-like tags (bug 64025)
+!! options
+parsoid=wt2html
+!! wikitext
+{{echo|<pre <pre>x</pre>}}
+
+<table><pre </table>
+!! html/php
+<pre>x</pre>
+<table><pre></pre></table>
+
+!! html/parsoid
+<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>&lt;pre </span>
+<pre>x</pre>
+
+<span>&lt;pre </span>
+<table></table>
+!! end
+
 !! test
 Parsoid: handle pre with space after attribute
 !! options
@@ -2085,10 +2075,7 @@ Templates: Strip leading and trailing whitespace from named-param values
 </p><p>b
 </p><p>c
 </p>
-<ul>
-<li> d
-</li>
-</ul>
+<ul><li> d</li></ul>
 
 !! end
 
@@ -2129,10 +2116,7 @@ Templates: Don't strip whitespace from positional-param values
 </pre>
 <p><br />
 </p>
-<ul>
-<li> f
-</li>
-</ul>
+<ul><li> f</li></ul>
 <p><br />
 </p>
 <pre>g
@@ -2224,6 +2208,16 @@ data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},
 "params":{"1":{"wt":"[http://foo.com/a|b a|b]"}},"i":0}}]}'>a|b</a></p>
 !! end
 
+!! test
+Parsoid: Pipe in template with nested template in external link target in template parameter (seriously)
+!! options
+parsoid
+!! wikitext
+{{echo|[{{fullurl:{{FULLPAGENAME}}|action=edit}} bar]}}
+!! html
+<p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[{{fullurl:{{FULLPAGENAME}}|action=edit}} bar]"}},"i":0}}]}'>[Main Page bar]</p>
+!! end
+
 !! test
 Templates: Don't escape already nowiki-escaped text in template parameters
 !! options
@@ -2372,6 +2366,57 @@ c
 
 !!end
 
+!!test
+2d. Indent-Pre and tables
+!! wikitext
+ a
+ {|
+ | b
+ |}
+!! html/php
+<pre>a
+</pre>
+<table>
+<tr>
+<td> b
+</td></tr></table>
+
+!! html/parsoid
+<pre>a</pre>
+<table>
+<tbody>
+<tr>
+<td> b</td></tr>
+ </tbody></table>
+!!end
+
+!!test
+2e. Indent-Pre and table-line syntax
+!! wikitext
+ a
+ | b
+ | c
+!! html/parsoid
+<pre>a
+| b
+| c</pre>
+!!end
+
+!!test
+2f. Indent-pre started by table-line syntax
+!! wikitext
+a
+ | b
+ | c
+!! html/parsoid
+<p>a</p>
+<pre>
+| b
+| c</pre>
+!!end
+
 !!test
 3a. Indent-Pre and block tags (single-line html)
 !! wikitext
@@ -2689,8 +2734,81 @@ foo
 foo
 </pre>
 
+!! html/parsoid
+<pre data-parsoid='{"stx":"html"}'>foo</pre>
+
+<pre data-parsoid='{"stx":"html","strippedNL":"\n"}'>
+foo
+</pre>
+
+<pre data-parsoid='{"stx":"html"}'>
+
+foo
+</pre>
+
+<pre data-parsoid='{"stx":"html"}'>
+
+
+foo
+</pre>
 !!end
 
+!! test
+HTML-pre: big spaces
+!! wikitext
+<pre>
+
+
+
+
+haha
+
+
+
+
+haha
+
+
+
+
+</pre>
+!! html
+<pre>
+
+
+
+
+haha
+
+
+
+
+haha
+
+
+
+
+</pre>
+
+!! html/parsoid
+<pre data-parsoid='{"stx":"html"}'>
+
+
+
+
+haha
+
+
+
+
+haha
+
+
+
+
+</pre>
+!! end
+
 !!test
 HTML-pre: 2: indented text
 !! wikitext
@@ -2733,11 +2851,8 @@ Simple definition
 !! wikitext
 ; name : Definition
 !! html
-<dl>
-<dt> name&#160;</dt>
-<dd> Definition
-</dd>
-</dl>
+<dl><dt> name&#160;</dt>
+<dd> Definition</dd></dl>
 
 !! end
 
@@ -2746,10 +2861,7 @@ Definition list for indentation only
 !! wikitext
 : Indented text
 !! html
-<dl>
-<dd> Indented text
-</dd>
-</dl>
+<dl><dd> Indented text</dd></dl>
 
 !! end
 
@@ -2758,11 +2870,8 @@ Definition list with no space
 !! wikitext
 ;name:Definition
 !! html
-<dl>
-<dt>name</dt>
-<dd>Definition
-</dd>
-</dl>
+<dl><dt>name</dt>
+<dd>Definition</dd></dl>
 
 !!end
 
@@ -2771,11 +2880,8 @@ Definition list with URL link
 !! wikitext
 ; http://example.com/ : definition
 !! html
-<dl>
-<dt> <a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>&#160;</dt>
-<dd> definition
-</dd>
-</dl>
+<dl><dt> <a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>&#160;</dt>
+<dd> definition</dd></dl>
 
 !! end
 
@@ -2784,11 +2890,8 @@ Definition list with bracketed URL link
 !! wikitext
 ;[http://www.example.com/ Example]:Something about it
 !! html
-<dl>
-<dt><a rel="nofollow" class="external text" href="http://www.example.com/">Example</a></dt>
-<dd>Something about it
-</dd>
-</dl>
+<dl><dt><a rel="nofollow" class="external text" href="http://www.example.com/">Example</a></dt>
+<dd>Something about it</dd></dl>
 
 !! end
 
@@ -2797,11 +2900,8 @@ Definition list with wikilink containing colon
 !! wikitext
 ; [[Help:FAQ]]: The least-read page on Wikipedia
 !! html
-<dl>
-<dt> <a href="/index.php?title=Help:FAQ&amp;action=edit&amp;redlink=1" class="new" title="Help:FAQ (page does not exist)">Help:FAQ</a></dt>
-<dd> The least-read page on Wikipedia
-</dd>
-</dl>
+<dl><dt> <a href="/index.php?title=Help:FAQ&amp;action=edit&amp;redlink=1" class="new" title="Help:FAQ (page does not exist)">Help:FAQ</a></dt>
+<dd> The least-read page on Wikipedia</dd></dl>
 
 !! end
 
@@ -2811,11 +2911,8 @@ Definition list with news link containing colon
 !! wikitext
 ;  news:alt.wikipedia.rox: This isn't even a real newsgroup!
 !! html
-<dl>
-<dt>  <a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a></dt>
-<dd> This isn't even a real newsgroup!
-</dd>
-</dl>
+<dl><dt>  <a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a></dt>
+<dd> This isn't even a real newsgroup!</dd></dl>
 
 !! end
 
@@ -2824,10 +2921,7 @@ Malformed definition list with colon
 !! wikitext
 ;  news:alt.wikipedia.rox -- don't crash or enter an infinite loop
 !! html
-<dl>
-<dt>  <a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a> -- don't crash or enter an infinite loop
-</dt>
-</dl>
+<dl><dt>  <a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a> -- don't crash or enter an infinite loop</dt></dl>
 
 !! end
 
@@ -2836,11 +2930,8 @@ Definition lists: colon in external link text
 !! wikitext
 ; [http://www.wikipedia2.org/ Wikipedia : The Next Generation]: OK, I made that up
 !! html
-<dl>
-<dt> <a rel="nofollow" class="external text" href="http://www.wikipedia2.org/">Wikipedia&#160;: The Next Generation</a></dt>
-<dd> OK, I made that up
-</dd>
-</dl>
+<dl><dt> <a rel="nofollow" class="external text" href="http://www.wikipedia2.org/">Wikipedia&#160;: The Next Generation</a></dt>
+<dd> OK, I made that up</dd></dl>
 
 !! end
 
@@ -2849,10 +2940,7 @@ Definition lists: colon in HTML attribute
 !! wikitext
 ;<b style="display: inline">bold</b>
 !! html
-<dl>
-<dt><b style="display: inline">bold</b>
-</dt>
-</dl>
+<dl><dt><b style="display: inline">bold</b></dt></dl>
 
 !! end
 
@@ -2861,11 +2949,8 @@ Definition lists: self-closed tag
 !! wikitext
 ;one<br/>two : two-line fun
 !! html
-<dl>
-<dt>one<br />two&#160;</dt>
-<dd> two-line fun
-</dd>
-</dl>
+<dl><dt>one<br />two&#160;</dt>
+<dd> two-line fun</dd></dl>
 
 !! end
 
@@ -2897,15 +2982,9 @@ Definition and unordered list using wiki syntax nested in unordered list using h
 </li></ul>
 !! html
 <ul><li>
-<dl>
-<dt> term&#160;</dt>
-<dd> description
-</dd>
-</dl>
-<ul>
-<li> unordered
-</li>
-</ul>
+<dl><dt> term&#160;</dt>
+<dd> description</dd></dl>
+<ul><li> unordered</li></ul>
 </li></ul>
 
 !! end
@@ -2917,11 +2996,8 @@ Definition list with empty definition and following paragraph
 ; term:
 Paragraph text
 !! html
-<dl>
-<dt> term</dt>
-<dd>
-</dd>
-</dl>
+<dl><dt> term</dt>
+<dd></dd></dl>
 <p>Paragraph text
 </p>
 !! end
@@ -2929,17 +3005,9 @@ Paragraph text
 !! test
 Nested definition lists using html syntax
 !! wikitext
-<dl><dd>
-<dl>
-<dd>Foo</dd>
-</dl>
-</dd></dl>
-!! html
-<dl><dd>
-<dl>
-<dd>Foo</dd>
-</dl>
-</dd></dl>
+<dl><dt>x</dt>
+<dd>a</dd>
+<dd>b</dd></dl>
 
 !! end
 
@@ -2950,14 +3018,9 @@ Definition Lists: No nesting: Multiple dd's
 :a
 :b
 !! html
-<dl>
-<dt>x
-</dt>
-<dd>a
-</dd>
-<dd>b
-</dd>
-</dl>
+<dl><dt>x</dt>
+<dd>a</dd>
+<dd>b</dd></dl>
 
 !! end
 
@@ -2968,18 +3031,9 @@ Definition Lists: Indentation: Regular
 ::i2
 :::i3
 !! html
-<dl>
-<dd>i1
-<dl>
-<dd>i2
-<dl>
-<dd>i3
-</dd>
-</dl>
-</dd>
-</dl>
-</dd>
-</dl>
+<dl><dd>i1
+<dl><dd>i2
+<dl><dd>i3</dd></dl></dd></dl></dd></dl>
 
 !! end
 
@@ -2989,17 +3043,8 @@ Definition Lists: Indentation: Missing 1st level
 ::i2
 :::i3
 !! html
-<dl>
-<dd><dl>
-<dd>i2
-<dl>
-<dd>i3
-</dd>
-</dl>
-</dd>
-</dl>
-</dd>
-</dl>
+<dl><dd><dl><dd>i2
+<dl><dd>i3</dd></dl></dd></dl></dd></dl>
 
 !! end
 
@@ -3008,16 +3053,7 @@ Definition Lists: Indentation: Multi-level indent
 !! wikitext
 :::i3
 !! html
-<dl>
-<dd><dl>
-<dd><dl>
-<dd>i3
-</dd>
-</dl>
-</dd>
-</dl>
-</dd>
-</dl>
+<dl><dd><dl><dd><dl><dd>i3</dd></dl></dd></dl></dd></dl>
 
 !! end
 
@@ -3139,17 +3175,11 @@ Table / list interaction: indented table with lists in table contents
 
 <tr>
 <td> a
-<ul>
-<li> b
-</li>
-</ul>
+<ul><li> b</li></ul>
 </td></tr>
 <tr>
 <td> c
-<ul>
-<li> d
-</li>
-</ul>
+<ul><li> d</li></ul>
 </td></tr></table></dd></dl>
 
 !! end
@@ -3172,27 +3202,15 @@ Table / list interaction: lists nested in tables nested in indented lists
 <dl><dd><table>
 <tr>
 <td>
-<dl>
-<dd>a
-</dd>
-<dd>b
-</dd>
-</dl>
+<dl><dd>a</dd>
+<dd>b</dd></dl>
 </td>
 <td>
-<ul>
-<li>c
-</li>
-<li>d
-</li>
-</ul>
+<ul><li>c</li>
+<li>d</li></ul>
 </td></tr></table></dd></dl>
-<ul>
-<li>e
-</li>
-<li>f
-</li>
-</ul>
+<ul><li>e</li>
+<li>f</li></ul>
 
 !!end
 
@@ -3280,18 +3298,8 @@ Definition Lists: Nesting: Test 4
 ::;t3
 :::d3
 !! html
-<dl>
-<dd><dl>
-<dd><dl>
-<dt>t3
-</dt>
-<dd>d3
-</dd>
-</dl>
-</dd>
-</dl>
-</dd>
-</dl>
+<dl><dd><dl><dd><dl><dt>t3</dt>
+<dd>d3</dd></dl></dd></dl></dd></dl>
 
 !! end
 
@@ -3306,22 +3314,9 @@ Definition Lists: Mixed Lists: Test 1
 ::* bar
 :; baz
 !! html/php
-<dl>
-<dd><dl>
-<dt><ul>
-<li> foo
-</li>
-<li> bar
-</li>
-</ul>
-</dt>
-</dl>
-<dl>
-<dt> baz
-</dt>
-</dl>
-</dd>
-</dl>
+<dl><dd><dl><dt><ul><li> foo</li>
+<li> bar</li></ul></dt></dl>
+<dl><dt> baz</dt></dl></dd></dl>
 
 !! html/parsoid
 <dl>
@@ -3345,15 +3340,8 @@ Definition Lists: Mixed Lists: Test 2
 *: d1
 *: d2
 !! html
-<ul>
-<li><dl>
-<dd> d1
-</dd>
-<dd> d2
-</dd>
-</dl>
-</li>
-</ul>
+<ul><li><dl><dd> d1</dd>
+<dd> d2</dd></dl></li></ul>
 
 !! end
 
@@ -3364,21 +3352,8 @@ Definition Lists: Mixed Lists: Test 3
 *::: d1
 *::: d2
 !! html
-<ul>
-<li><dl>
-<dd><dl>
-<dd><dl>
-<dd> d1
-</dd>
-<dd> d2
-</dd>
-</dl>
-</dd>
-</dl>
-</dd>
-</dl>
-</li>
-</ul>
+<ul><li><dl><dd><dl><dd><dl><dd> d1</dd>
+<dd> d2</dd></dl></dd></dl></dd></dl></li></ul>
 
 !! end
 
@@ -3389,17 +3364,10 @@ Definition Lists: Mixed Lists: Test 4
 *;d1 :d2
 *;d3 :d4
 !! html
-<ul>
-<li><dl>
-<dt>d1&#160;</dt>
-<dd>d2
-</dd>
+<ul><li><dl><dt>d1&#160;</dt>
+<dd>d2</dd>
 <dt>d3&#160;</dt>
-<dd>d4
-</dd>
-</dl>
-</li>
-</ul>
+<dd>d4</dd></dl></li></ul>
 
 !! end
 
@@ -3410,17 +3378,8 @@ Definition Lists: Mixed Lists: Test 5
 *:d1
 *:: d2
 !! html
-<ul>
-<li><dl>
-<dd>d1
-<dl>
-<dd> d2
-</dd>
-</dl>
-</dd>
-</dl>
-</li>
-</ul>
+<ul><li><dl><dd>d1
+<dl><dd> d2</dd></dl></dd></dl></li></ul>
 
 !! end
 
@@ -3431,23 +3390,8 @@ Definition Lists: Mixed Lists: Test 6
 #*:d1
 #*::: d3
 !! html
-<ol>
-<li><ul>
-<li><dl>
-<dd>d1
-<dl>
-<dd><dl>
-<dd> d3
-</dd>
-</dl>
-</dd>
-</dl>
-</dd>
-</dl>
-</li>
-</ul>
-</li>
-</ol>
+<ol><li><ul><li><dl><dd>d1
+<dl><dd><dl><dd> d3</dd></dl></dd></dl></dd></dl></li></ul></li></ol>
 
 !! end
 
@@ -3458,15 +3402,8 @@ Definition Lists: Mixed Lists: Test 7
 :* d1
 :* d2
 !! html
-<dl>
-<dd><ul>
-<li> d1
-</li>
-<li> d2
-</li>
-</ul>
-</dd>
-</dl>
+<dl><dd><ul><li> d1</li>
+<li> d2</li></ul></dd></dl>
 
 !! end
 
@@ -3477,20 +3414,8 @@ Definition Lists: Mixed Lists: Test 8
 :* d1
 ::* d2
 !! html
-<dl>
-<dd><ul>
-<li> d1
-</li>
-</ul>
-<dl>
-<dd><ul>
-<li> d2
-</li>
-</ul>
-</dd>
-</dl>
-</dd>
-</dl>
+<dl><dd><ul><li> d1</li></ul>
+<dl><dd><ul><li> d2</li></ul></dd></dl></dd></dl>
 
 !! end
 
@@ -3500,14 +3425,8 @@ Definition Lists: Mixed Lists: Test 9
 !! wikitext
 *;foo :bar
 !! html
-<ul>
-<li><dl>
-<dt>foo&#160;</dt>
-<dd>bar
-</dd>
-</dl>
-</li>
-</ul>
+<ul><li><dl><dt>foo&#160;</dt>
+<dd>bar</dd></dl></li></ul>
 
 !! end
 
@@ -3517,17 +3436,8 @@ Definition Lists: Mixed Lists: Test 10
 !! wikitext
 *#;foo :bar
 !! html
-<ul>
-<li><ol>
-<li><dl>
-<dt>foo&#160;</dt>
-<dd>bar
-</dd>
-</dl>
-</li>
-</ol>
-</li>
-</ul>
+<ul><li><ol><li><dl><dt>foo&#160;</dt>
+<dd>bar</dd></dl></li></ol></li></ul>
 
 !! end
 
@@ -3542,37 +3452,10 @@ Definition Lists: Mixed Lists: Test 11
 *#*#;*;;foo :bar
 *#*#;boo :baz
 !! html/php
-<ul>
-<li><ol>
-<li><ul>
-<li><ol>
-<li><dl>
-<dt>foo&#160;</dt>
-<dd><ul>
-<li><dl>
-<dt><dl>
-<dt>bar
-</dt>
-</dl>
-</dd>
-</dl>
-</li>
-</ul>
-</dd>
-</dl>
-<dl>
-<dt>boo&#160;</dt>
-<dd>baz
-</dd>
-</dl>
-</li>
-</ol>
-</li>
-</ul>
-</li>
-</ol>
-</li>
-</ul>
+<ul><li><ol><li><ul><li><ol><li><dl><dt>foo&#160;</dt>
+<dd><ul><li><dl><dt><dl><dt>bar</dt></dl></dd></dl></li></ul></dd></dl>
+<dl><dt>boo&#160;</dt>
+<dd>baz</dd></dl></li></ol></li></ul></li></ol></li></ul>
 
 !! html/parsoid
 <ul>
@@ -3610,32 +3493,8 @@ Definition Lists: Weird Ones: Test 1
 !! wikitext
 *#;*::;; foo : bar (who uses this?)
 !! html/php
-<ul>
-<li><ol>
-<li><dl>
-<dt> foo&#160;</dt>
-<dd><ul>
-<li><dl>
-<dd><dl>
-<dd><dl>
-<dt><dl>
-<dt> bar (who uses this?)
-</dt>
-</dl>
-</dd>
-</dl>
-</dd>
-</dl>
-</dd>
-</dl>
-</li>
-</ul>
-</dd>
-</dl>
-</li>
-</ol>
-</li>
-</ul>
+<ul><li><ol><li><dl><dt> foo&#160;</dt>
+<dd><ul><li><dl><dd><dl><dd><dl><dt><dl><dt> bar (who uses this?)</dt></dl></dd></dl></dd></dl></dd></dl></li></ul></dd></dl></li></ol></li></ul>
 
 !! html/parsoid
 <ul>
@@ -3839,6 +3698,20 @@ foo//example.com/Foo
 </p>
 !! end
 
+!! test
+External links: with no contents
+!! wikitext
+[http://en.wikipedia.org/wiki/Foo]
+
+[[wikipedia:Foo|Bar]]
+
+[[wikipedia:Foo|<span>Bar</span>]]
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo"></a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo">Bar</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo"><span>Bar</span></a></p>
+!! end
+
 !! test
 External image
 !! wikitext
@@ -4331,19 +4204,37 @@ Bug 4781, 5267: %28, %29 in bracketed URL
 <p><a rel="mw:ExtLink" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">link</a></p>
 !! end
 
-# Note that parsoid does not munge anchor text; all non-space
-# characters are valid in HTML5 ids.
 !! test
-Anchor containing a #. (bug 63430)
+External link containing a period in the anchor. (bug 63947)
 !! wikitext
-[[Main Page#And#Link]]
+[//foo.org/bar#baz. bang]
+
+[//foo.org/bar. bang]
 !! html/php
-<p><a href="/wiki/Main_Page#And.23Link" title="Main Page">Main Page#And#Link</a>
+<p><a rel="nofollow" class="external text" href="//foo.org/bar#baz.">bang</a>
+</p><p><a rel="nofollow" class="external text" href="//foo.org/bar.">bang</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./Main_Page#And%23Link">Main Page#And#Link</a></p>
+<p><a rel="mw:ExtLink" href="//foo.org/bar#baz.">bang</a></p>
+<p><a rel="mw:ExtLink" href="//foo.org/bar.">bang</a></p>
 !! end
 
+!! test
+External link containing a single quote. (bug 63947)
+!! wikitext
+[//foo.org/bar'baz]
+
+[//foo.org/bar'baz bang]
+!! html/php
+<p><a rel="nofollow" class="external autonumber" href="//foo.org/bar'baz">[1]</a>
+</p><p><a rel="nofollow" class="external text" href="//foo.org/bar'baz">bang</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="//foo.org/bar'baz"></a></p>
+<p><a rel="mw:ExtLink" href="//foo.org/bar'baz">bang</a></p>
+!! end
+
+
 !! test
 External link containing a period in the anchor. (bug 63947)
 !! wikitext
@@ -4562,7 +4453,7 @@ Parenthesis in external links, w/ transclusion or comment
 </p><p>(<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
 </p>
 !! html/parsoid
-<p>(<a data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;hi&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[20,31,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\">hi&lt;/span>"}]]}' typeof="mw:ExpandedAttrs" about="#mwt2" rel="mw:ExtLink" href="http://example.com/hi" data-parsoid='{"stx":"url","a":{"href":"http://example.com/hi"},"sa":{"href":"http://example.com/{{echo|hi}}"}}'>http://example.com/hi</a>)</p>
+<p>(<a data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;hi&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[20,31,null,null]}\">hi&lt;/span>"}]]}' typeof="mw:ExpandedAttrs" about="#mwt2" rel="mw:ExtLink" href="http://example.com/hi" data-parsoid='{"stx":"url","a":{"href":"http://example.com/hi"},"sa":{"href":"http://example.com/{{echo|hi}}"}}'>http://example.com/hi</a>)</p>
 
 <p>(<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url","a":{"href":"http://example.com"},"sa":{"href":"http://example.com&lt;!-- hi -->"}}'>http://example.com</a>)</p>
 !! end
@@ -4916,6 +4807,18 @@ Accept "||" in table headings
 
 !! end
 
+!! test
+Accept "!!" in table data
+!! wikitext
+{|
+| Foo!! ||
+|}
+!! html/parsoid
+<table data-parsoid='{}'>
+<tbody data-parsoid='{}'><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'> Foo!! </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'></td></tr>
+</tbody></table>
+!! end
+
 !! test
 Accept "||" in indented table headings
 !! wikitext
@@ -5411,6 +5314,41 @@ parsoid=html2wt
  a<h1>foo</h1>
 !! end
 
+!! test
+Parsoid: Row-syntax table headings followed by comment & table cells
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+{|
+! foo || bar
+<!-- foo -->  || baz || quux
+|}
+!! html/parsoid
+<table>
+<tbody>
+<tr><th>foo </th><th>bar  </th>
+<td>baz </td>
+<td>quux</td></tr></tbody></table>
+!! end
+
+
+!!test
+Parsoid: Recover better from broken table attributes
+!!options
+parsoid=wt2html
+!!wikitext
+{| class="foo
+| class="bar" |
+foo
+|}
+!!html/parsoid
+<table class="foo">
+<tr>
+<td class="bar">
+<p>foo</p></td></tr>
+</tbody></table>
+!!end
+
 ###
 ### Internal links
 ###
@@ -5593,6 +5531,19 @@ Link with multiple pipes
 </p>
 !! end
 
+# Note that parsoid does not munge anchor text; all non-space
+# characters are valid in HTML5 ids.
+!! test
+Anchor containing a #. (bug 63430)
+!! wikitext
+[[Main Page#And#Link]]
+!! html/php
+<p><a href="/wiki/Main_Page#And.23Link" title="Main Page">Main Page#And#Link</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page#And%23Link">Main Page#And#Link</a></p>
+!! end
+
 !! test
 Link to namespaces
 !! wikitext
@@ -5602,6 +5553,15 @@ Link to namespaces
 </p>
 !! end
 
+!! test
+Link with space in namespace
+!! wikitext
+[[User talk:Foo bar]]
+!! html
+<p><a href="/index.php?title=User_talk:Foo_bar&amp;action=edit&amp;redlink=1" class="new" title="User talk:Foo bar (page does not exist)">User talk:Foo bar</a>
+</p>
+!! end
+
 !! article
 MemoryAlpha:AlphaTest
 !! text
@@ -6158,6 +6118,14 @@ parsoid
 <p><a rel="mw:WikiLink" href="Foo"><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span> b <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"c"}},"i":0}}]}'>c</span></a></p>
 !! end
 
+!! test
+Link with angle bracket after anchor
+!! wikitext
+[[Foo#<bar>]]
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Foo#%3Cbar%3E" data-parsoid='{"stx":"simple","a":{"href":"./Foo#%3Cbar%3E"},"sa":{"href":"Foo#&lt;bar>"}}'>Foo#&lt;bar></a></p>
+!! end
+
 ###
 ### Interwiki links (see maintenance/interwiki.sql)
 ###
@@ -6186,12 +6154,8 @@ Interwiki link encoding conversion (bug 1636)
 *[[Wikipedia:ro:Olteni&#0355;a]]
 *[[Wikipedia:ro:Olteni&#355;a]]
 !! html
-<ul>
-<li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteni&#355;a</a>
-</li>
-<li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteni&#355;a</a>
-</li>
-</ul>
+<ul><li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteni&#355;a</a></li>
+<li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteni&#355;a</a></li></ul>
 
 !! end
 
@@ -6356,8 +6320,7 @@ parsoid
 !! wikitext
 [[ko:]]
 !! html
-<p>
-<link rel="mw:PageProp/Language" href="http://ko.wikipedia.org/wiki/"></p>
+<p><link rel="mw:PageProp/Language" href="http://ko.wikipedia.org/wiki/"></p>
 !! end
 
 !! test
@@ -6406,6 +6369,17 @@ parsoid=wt2html,wt2wt
 <link rel="mw:PageProp/redirect" href="./%5B%5BBar%5D%5D">
 !! end
 
+!! test
+Empty redirect
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+#REDIRECT [[]]
+!! html
+<ol>
+<li>REDIRECT [[]]</li></ol>
+!! end
+
 !! test
 Optional colon in #REDIRECT
 !! options
@@ -6567,8 +6541,11 @@ Parsoid: Broken br tag recognition
 parsoid=wt2html
 !! wikitext
 </br>
+
+<br/ >
 !! html/parsoid
 <p><br></p>
+<p><br/></p>
 !! end
 
 !! test
@@ -6705,14 +6682,9 @@ Common list
 * item 2
 *item 3
 !! html
-<ul>
-<li>Common list
-</li>
-<li> item 2
-</li>
-<li>item 3
-</li>
-</ul>
+<ul><li>Common list</li>
+<li> item 2</li>
+<li>item 3</li></ul>
 
 !! end
 
@@ -6723,14 +6695,9 @@ Numbered list
 #item 2
 # item 3
 !! html
-<ol>
-<li>Numbered list
-</li>
-<li>item 2
-</li>
-<li> item 3
-</li>
-</ol>
+<ol><li>Numbered list</li>
+<li>item 2</li>
+<li> item 3</li></ol>
 
 !! end
 
@@ -6753,67 +6720,21 @@ Mixed list
 *** Level 3
 #** Level 3, but ordered
 !! html
-<ul>
-<li>Mixed list
-<ol>
-<li> with numbers
-</li>
-</ol>
-<ul>
-<li> and bullets
-</li>
-</ul>
-<ol>
-<li> and numbers
-</li>
-</ol>
-</li>
+<ul><li>Mixed list
+<ol><li> with numbers</li></ol>
+<ul><li> and bullets</li></ul>
+<ol><li> and numbers</li></ol></li>
 <li>bullets again
-<ul>
-<li>bullet level 2
-<ul>
-<li>bullet level 3
-<ol>
-<li>Number on level 4
-</li>
-</ol>
-</li>
-</ul>
-</li>
+<ul><li>bullet level 2
+<ul><li>bullet level 3
+<ol><li>Number on level 4</li></ol></li></ul></li>
 <li>bullet level 2
-<ol>
-<li>Number on level 3
-</li>
-<li>Number on level 3
-</li>
-</ol>
-</li>
-</ul>
-<ol>
-<li>number level 2
-</li>
-</ol>
-</li>
+<ol><li>Number on level 3</li>
+<li>Number on level 3</li></ol></li></ul>
+<ol><li>number level 2</li></ol></li>
 <li>Level 1
-<ul>
-<li><ul>
-<li> Level 3
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<ol>
-<li><ul>
-<li><ul>
-<li> Level 3, but ordered
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ol>
+<ul><li><ul><li> Level 3</li></ul></li></ul></li></ul>
+<ol><li><ul><li><ul><li> Level 3, but ordered</li></ul></li></ul></li></ol>
 
 !! end
 
@@ -6823,14 +6744,8 @@ Nested lists 1
 *foo
 **bar
 !! html
-<ul>
-<li>foo
-<ul>
-<li>bar
-</li>
-</ul>
-</li>
-</ul>
+<ul><li>foo
+<ul><li>bar</li></ul></li></ul>
 
 !! end
 
@@ -6840,15 +6755,8 @@ Nested lists 2
 **foo
 *bar
 !! html
-<ul>
-<li><ul>
-<li>foo
-</li>
-</ul>
-</li>
-<li>bar
-</li>
-</ul>
+<ul><li><ul><li>foo</li></ul></li>
+<li>bar</li></ul>
 
 !! end
 
@@ -6858,14 +6766,8 @@ Nested lists 3 (first element empty)
 *
 **bar
 !! html
-<ul>
-<li>
-<ul>
-<li>bar
-</li>
-</ul>
-</li>
-</ul>
+<ul><li>
+<ul><li>bar</li></ul></li></ul>
 
 !! end
 
@@ -6875,15 +6777,8 @@ Nested lists 4 (first element empty)
 **
 *bar
 !! html
-<ul>
-<li><ul>
-<li>
-</li>
-</ul>
-</li>
-<li>bar
-</li>
-</ul>
+<ul><li><ul><li></li></ul></li>
+<li>bar</li></ul>
 
 !! end
 
@@ -6893,15 +6788,8 @@ Nested lists 5 (both elements empty)
 **
 *
 !! html
-<ul>
-<li><ul>
-<li>
-</li>
-</ul>
-</li>
-<li>
-</li>
-</ul>
+<ul><li><ul><li></li></ul></li>
+<li></li></ul>
 
 !! end
 
@@ -6911,14 +6799,8 @@ Nested lists 6 (both elements empty)
 *
 **
 !! html
-<ul>
-<li>
-<ul>
-<li>
-</li>
-</ul>
-</li>
-</ul>
+<ul><li>
+<ul><li></li></ul></li></ul>
 
 !! end
 
@@ -6927,16 +6809,7 @@ Nested lists 7 (skip initial nesting levels)
 !! wikitext
 *** foo
 !! html
-<ul>
-<li><ul>
-<li><ul>
-<li> foo
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
+<ul><li><ul><li><ul><li> foo</li></ul></li></ul></li></ul>
 
 !! end
 
@@ -6948,21 +6821,10 @@ Nested lists 8 (multiple nesting transitions)
 ** baz
 * boo
 !! html
-<ul>
-<li> foo
-<ul>
-<li><ul>
-<li> bar
-</li>
-</ul>
-</li>
-<li> baz
-</li>
-</ul>
-</li>
-<li> boo
-</li>
-</ul>
+<ul><li> foo
+<ul><li><ul><li> bar</li></ul></li>
+<li> baz</li></ul></li>
+<li> boo</li></ul>
 
 !! end
 
@@ -6973,14 +6835,9 @@ Nested lists 8 (multiple nesting transitions)
 *<!--cmt-->bar
 <!--cmt-->*baz
 !! html
-<ul>
-<li>foo
-</li>
-<li>bar
-</li>
-<li>baz
-</li>
-</ul>
+<ul><li>foo</li>
+<li>bar</li>
+<li>baz</li></ul>
 
 !! end
 
@@ -6990,12 +6847,8 @@ Nested lists 8 (multiple nesting transitions)
 *foo {{echo|bar
 }}*baz
 !! html
-<ul>
-<li>foo bar
-</li>
-<li>baz
-</li>
-</ul>
+<ul><li>foo bar</li>
+<li>baz</li></ul>
 
 !! end
 
@@ -7006,14 +6859,9 @@ List items are not parsed correctly following a <pre> block (bug 785)
 * <pre>bar</pre>
 * zar
 !! html
-<ul>
-<li> <pre>foo</pre>
-</li>
-<li> <pre>bar</pre>
-</li>
-<li> zar
-</li>
-</ul>
+<ul><li> <pre>foo</pre></li>
+<li> <pre>bar</pre></li>
+<li> zar</li></ul>
 
 !! end
 
@@ -7032,30 +6880,15 @@ List items from template
 * notSOL{{inner list}}
 * item 2
 !! html
-<ul>
-<li> item 1
-</li>
-<li> item 2
-</li>
-</ul>
-<ul>
-<li> item 0
-</li>
-<li> item 1
-</li>
-<li> item 2
-</li>
-</ul>
-<ul>
-<li> item 0
-</li>
-<li> notSOL
-</li>
-<li> item 1
-</li>
-<li> item 2
-</li>
-</ul>
+<ul><li> item 1</li>
+<li> item 2</li></ul>
+<ul><li> item 0</li>
+<li> item 1</li>
+<li> item 2</li></ul>
+<ul><li> item 0</li>
+<li> notSOL</li>
+<li> item 1</li>
+<li> item 2</li></ul>
 
 !! end
 
@@ -7068,22 +6901,10 @@ List interrupted by empty line or heading
 == A heading ==
 * Another list item
 !! html
-<ul>
-<li> foo
-</li>
-</ul>
-<ul>
-<li><ul>
-<li> bar
-</li>
-</ul>
-</li>
-</ul>
+<ul><li> foo</li></ul>
+<ul><li><ul><li> bar</li></ul></li></ul>
 <h2><span class="mw-headline" id="A_heading">A heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: A heading">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<ul>
-<li> Another list item
-</li>
-</ul>
+<ul><li> Another list item</li></ul>
 
 !!end
 
@@ -7113,16 +6934,10 @@ Single-comment whitespace lines dont break lists, and neither do multi-comment w
  <!--foo--> <!----> <!--This line NOT split the list either--> 
 *d
 !! html
-<ul>
-<li>a
-</li>
-<li>b
-</li>
-<li>c
-</li>
-<li>d
-</li>
-</ul>
+<ul><li>a</li>
+<li>b</li>
+<li>c</li>
+<li>d</li></ul>
 
 !!end
 
@@ -7137,17 +6952,11 @@ Replacing whitespace with tabs still doesn't break the list (gerrit 78327)
        <!--foo--> <!---->      <!--This line NOT split the list
         either-->       
 *d
-!! html
-<ul>
-<li>a
-</li>
-<li>b
-</li>
-<li>c
-</li>
-<li>d
-</li>
-</ul>
+!! html
+<ul><li>a</li>
+<li>b</li>
+<li>c</li>
+<li>d</li></ul>
 
 !!end
 
@@ -7465,36 +7274,20 @@ Magic Words LOCAL (UTC)
 * {{LOCALDOW}}
 * {{LOCALTIMESTAMP}}
 !! html
-<ul>
-<li> 01
-</li>
-<li> 1
-</li>
-<li> January
-</li>
-<li> January
-</li>
-<li> Jan
-</li>
-<li> 1
-</li>
-<li> 01
-</li>
-<li> Thursday
-</li>
-<li> 1970
-</li>
-<li> 00:02
-</li>
-<li> 00
-</li>
-<li> 1
-</li>
-<li> 4
-</li>
-<li> 19700101000203
-</li>
-</ul>
+<ul><li> 01</li>
+<li> 1</li>
+<li> January</li>
+<li> January</li>
+<li> Jan</li>
+<li> 1</li>
+<li> 01</li>
+<li> Thursday</li>
+<li> 1970</li>
+<li> 00:02</li>
+<li> 00</li>
+<li> 1</li>
+<li> 4</li>
+<li> 19700101000203</li></ul>
 
 !! end
 
@@ -8871,6 +8664,44 @@ parsoid
 
 !!end
 
+###
+### Token Stream Patcher tests
+###
+### These tests won't always pass wt2wt and other modes because
+### on serialization, the table will be output on a new line.
+### For now, we are blacklisting them, and using this to test selser.
+###
+
+!!test
+1. Table tag in SOL posn. should get reparsed correctly with valid TSR
+!!options
+parsoid=wt2html,wt2wt
+!!wikitext
+{{echo|}}{| width = '100%'
+|foo
+|}
+!!html/parsoid
+<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":""}},"i":0}}]}'></span>
+<table width="100%">
+<tbody>
+<tr>
+<td>foo</td></tr></tbody></table>
+!!end
+
+!!test
+2. Table tag in SOL posn. should get reparsed correctly with valid TSR
+!!options
+parsoid=wt2html,wt2wt
+!!wikitext
+<includeonly>a</includeonly>{| {{{b}}}
+|c
+|}
+!!html/parsoid
+<meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>a&lt;/includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":"&lt;/includeonly>"}'/><span data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true}'>{{{b}}}</span><table about="#mwt1" typeof="mw:Param" data-parsoid='{"a":{" ":null},"sa":{" ":""},"src":"{| {{{b}}}\n|c\n|}"}'>
+<tbody><tr><td>c</td></tr>
+</tbody></table>
+!!end
+
 ###
 ### Testing parsing of templates where a template arg
 ### has the same name as the template itself.
@@ -9362,12 +9193,8 @@ unused}}}}
 *{{echo|b {{nonexistent|
 unused}}}}
 !! html
-<ul>
-<li>a <a href="/index.php?title=Template:Nonexistent&amp;action=edit&amp;redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a>
-</li>
-<li>b <a href="/index.php?title=Template:Nonexistent&amp;action=edit&amp;redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a>
-</li>
-</ul>
+<ul><li>a <a href="/index.php?title=Template:Nonexistent&amp;action=edit&amp;redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a></li>
+<li>b <a href="/index.php?title=Template:Nonexistent&amp;action=edit&amp;redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a></li></ul>
 
 !!end
 
@@ -10361,7 +10188,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:139px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" width="137" height="16" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/274px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is a caption</div></div></div>
 
 !! html/parsoid
-<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[24,38,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\">137px&lt;/span>"}]]}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[24,38,null,null]}\">137px&lt;/span>"}]]}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
 !! end
 
 !! test
@@ -10372,7 +10199,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:139px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" width="137" height="16" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/274px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is a caption</div></div></div>
 
 !! html/parsoid
-<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;thumb&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[18,32,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\">thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[33,47,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\">137px&lt;/span>"}]]}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;thumb&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[18,32,null,null]}\">thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[33,47,null,null]}\">137px&lt;/span>"}]]}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
 !! end
 
 !! test
@@ -10383,7 +10210,7 @@ parsoid=wt2html,wt2wt,html2html
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg 2x" /></a>
 </p>
 !! html/parsoid
-<p><span typeof="mw:Image mw:ExpandedAttrs" about="#mwt2" data-mw='{"attribs":[["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;50px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[18,31,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\">50px&lt;/span>"}]]}' data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span typeof="mw:Image mw:ExpandedAttrs" about="#mwt2" data-mw='{"attribs":[["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;50px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[18,31,null,null]}\">50px&lt;/span>"}]]}' data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
 !! end
 
 ## Parsoid does not provide editing support for images where templates produce multiple image attributes.
@@ -15078,13 +14905,7 @@ Handling of &#x0A; in URLs
 !! wikitext
 ** irc://&#x0A;a
 !! html/php
-<ul>
-<li><ul>
-<li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a>
-</li>
-</ul>
-</li>
-</ul>
+<ul><li><ul><li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
 
 !! html/parsoid
 <ul><li><ul><li> <a rel="mw:ExtLink" href="irc://
@@ -15097,13 +14918,7 @@ Handling of %0A in URLs
 !! wikitext
 ** irc://%0Aa
 !! html/php
-<ul>
-<li><ul>
-<li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a>
-</li>
-</ul>
-</li>
-</ul>
+<ul><li><ul><li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
 
 !! html/parsoid
 <ul><li><ul><li> <a rel="mw:ExtLink" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
@@ -15186,52 +15001,28 @@ title=[[Parser test]]
 * {{SUBJECTSPACEE}}
 * {{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}
 !! html
-<ul>
-<li> Parser test
-</li>
-<li> Parser_test
-</li>
-<li> Parser test
-</li>
-<li> Parser_test
-</li>
-<li> Parser test
-</li>
-<li> Parser_test
-</li>
-<li> Parser test
-</li>
-<li> Parser_test
-</li>
-<li> Parser test
-</li>
-<li> Parser_test
-</li>
-<li> Talk:Parser test
-</li>
-<li> Talk:Parser_test
-</li>
-<li> Parser test
-</li>
-<li> Parser_test
-</li>
-<li> 
-</li>
-<li> 
-</li>
-<li> 0
-</li>
-<li> Talk
-</li>
-<li> Talk
-</li>
-<li> 
-</li>
-<li> 
-</li>
-<li> <a href="/index.php?title=Template:Dynamic&amp;action=edit&amp;redlink=1" class="new" title="Template:Dynamic (page does not exist)">Template:Dynamic</a>
-</li>
-</ul>
+<ul><li> Parser test</li>
+<li> Parser_test</li>
+<li> Parser test</li>
+<li> Parser_test</li>
+<li> Parser test</li>
+<li> Parser_test</li>
+<li> Parser test</li>
+<li> Parser_test</li>
+<li> Parser test</li>
+<li> Parser_test</li>
+<li> Talk:Parser test</li>
+<li> Talk:Parser_test</li>
+<li> Parser test</li>
+<li> Parser_test</li>
+<li> </li>
+<li> </li>
+<li> 0</li>
+<li> Talk</li>
+<li> Talk</li>
+<li> </li>
+<li> </li>
+<li> <a href="/index.php?title=Template:Dynamic&amp;action=edit&amp;redlink=1" class="new" title="Template:Dynamic (page does not exist)">Template:Dynamic</a></li></ul>
 
 !! end
 ### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included.
@@ -15819,17 +15610,12 @@ Definition list code coverage
 ; title : def
 ;title: def
 !! html
-<dl>
-<dt> title  &#160;</dt>
-<dd> def
-</dd>
+<dl><dt> title  &#160;</dt>
+<dd> def</dd>
 <dt> title&#160;</dt>
-<dd> def
-</dd>
+<dd> def</dd>
 <dt>title</dt>
-<dd> def
-</dd>
-</dl>
+<dd> def</dd></dl>
 
 !! end
 
@@ -16565,12 +16351,8 @@ Bug 529: Uncovered bullet
 !! wikitext
 * Foo {{bullet}}
 !! html
-<ul>
-<li> Foo 
-</li>
-<li> Bar
-</li>
-</ul>
+<ul><li> Foo </li>
+<li> Bar</li></ul>
 
 !! end
 
@@ -16585,30 +16367,8 @@ Bug 529: Uncovered bullet leaving empty list, normally removed by tidy
 !! wikitext
 ******* Foo {{bullet}}
 !! html
-<ul>
-<li><ul>
-<li><ul>
-<li><ul>
-<li><ul>
-<li><ul>
-<li><ul>
-<li> Foo 
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-<li> Bar
-</li>
-</ul>
+<ul><li><ul><li><ul><li><ul><li><ul><li><ul><li><ul><li> Foo </li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li>
+<li> Bar</li></ul>
 
 !! end
 
@@ -16640,12 +16400,8 @@ Bug 529: Uncovered bullet in parser function result
 !! wikitext
 * Foo {{lc:{{bullet}} }}
 !! html
-<ul>
-<li> Foo 
-</li>
-<li> bar
-</li>
-</ul>
+<ul><li> Foo </li>
+<li> bar</li></ul>
 
 !! end
 
@@ -18049,7 +17805,7 @@ Lead
 
 
 ###
-### Parsoids-specific tests
+### Parsoid-specific tests
 ### Parsoid-PHP parser incompatibilities
 ###
 !!test
@@ -18072,6 +17828,35 @@ parsoid=wt2html,wt2wt
 </dl>
 !!end
 
+#### -----------------------------------------------------------------
+#### Parsoid-specific functionality tests
+#### -----------------------------------------------------------------
+
+# Bug 63642: Formatting elt fixup is cleaned up.
+# We know wt2wt will fail, but we expect selser to pass.
+# Due to the nature of our testing, wt2wt and selser tests will enter the
+# blacklist and we'll catch selser regressions based on changes to the
+# blacklist entries for selser tests.
+!! test
+Bad treebuilder fixup of formatting elt is cleaned up
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+{|
+|
+<small>
+[[Image:Foobar.jpg|right|Test]]
+</small>
+|}
+!! html/parsoid
+<table>
+<tbody><tr><td>
+<p><small></small></p>
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption><small>Test</small></figcaption></figure>
+<p></p></td></tr>
+</tbody></table>
+!! end
+
 #### ----------------------------------------------------------------
 #### Parsoid-only testing of Parsoid's impl of <ref> and <references>
 #### tags. Parsoid's output for these tags differs from that of the
@@ -18140,7 +17925,7 @@ A <ref>
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"This is a &lt;b data-parsoid=&#39;{\"dsr\":[19,40,3,3]}&#39;>&lt;a rel=\"mw:WikiLink\" href=\"./Bolded_link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Bolded_link\"},\"sa\":{\"href\":\"bolded link\"},\"dsr\":[22,37,2,2]}&#39;>bolded link&lt;/a>&lt;/b> and this is a &lt;span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"transclusion\"}},\"i\":0}}]}&#39; data-parsoid=&#39;{\"dsr\":[55,76,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}&#39;>transclusion&lt;/span>\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"This is a &lt;b data-parsoid=&#39;{\"dsr\":[19,40,3,3]}&#39;>&lt;a rel=\"mw:WikiLink\" href=\"./Bolded_link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Bolded_link\"},\"sa\":{\"href\":\"bolded link\"},\"dsr\":[22,37,2,2]}&#39;>bolded link&lt;/a>&lt;/b> and this is a &lt;span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"transclusion\"}},\"i\":0}}]}&#39; data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[55,76,null,null]}&#39;>transclusion&lt;/span>\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
 
 <ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> This is a <b><a rel="mw:WikiLink" href="./Bolded_link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
@@ -18796,9 +18581,12 @@ Lists: 0. Outside nests
 <nowiki>*</nowiki>foo
 
 <nowiki>#</nowiki>foo
+
+<nowiki>;Foo:</nowiki>bar
 !! html
 <p>*foo
 </p><p>#foo
+</p><p>;Foo:bar
 </p>
 !!end
 
@@ -18821,38 +18609,14 @@ Lists: 1. Nested inside html
 
 #<nowiki>;foo</nowiki>
 !! html
-<ul>
-<li>*foo
-</li>
-</ul>
-<ul>
-<li>#foo
-</li>
-</ul>
-<ul>
-<li>:foo
-</li>
-</ul>
-<ul>
-<li>;foo
-</li>
-</ul>
-<ol>
-<li>*foo
-</li>
-</ol>
-<ol>
-<li>#foo
-</li>
-</ol>
-<ol>
-<li>:foo
-</li>
-</ol>
-<ol>
-<li>;foo
-</li>
-</ol>
+<ul><li>*foo</li></ul>
+<ul><li>#foo</li></ul>
+<ul><li>:foo</li></ul>
+<ul><li>;foo</li></ul>
+<ol><li>*foo</li></ol>
+<ol><li>#foo</li></ol>
+<ol><li>:foo</li></ol>
+<ol><li>;foo</li></ol>
 
 !!end
 
@@ -18868,24 +18632,11 @@ Lists: 2. Inside definition lists
 
 :<nowiki>:foo</nowiki>
 !! html
-<dl>
-<dt>;foo
-</dt>
-</dl>
-<dl>
-<dt>:foo
-</dt>
-</dl>
-<dl>
-<dt>:foo
-</dt>
-<dd>bar
-</dd>
-</dl>
-<dl>
-<dd>:foo
-</dd>
-</dl>
+<dl><dt>;foo</dt></dl>
+<dl><dt>:foo</dt></dl>
+<dl><dt>:foo</dt>
+<dd>bar</dd></dl>
+<dl><dd>:foo</dd></dl>
 
 !!end
 
@@ -18896,14 +18647,8 @@ Lists: 3. Only bullets at start of text should be escaped
 
 *<nowiki>*foo</nowiki>''it''*bar
 !! html
-<ul>
-<li>*foo*bar
-</li>
-</ul>
-<ul>
-<li>*foo<i>it</i>*bar
-</li>
-</ul>
+<ul><li>*foo*bar</li></ul>
+<ul><li>*foo<i>it</i>*bar</li></ul>
 
 !!end
 
@@ -18953,30 +18698,12 @@ Lists: 5. No unnecessary escapes
 
 * <s></s>: a
 !! html
-<ul>
-<li> bar <span>[[foo]]</span>
-</li>
-</ul>
-<ul>
-<li>=bar <span>[[foo]]</span>
-</li>
-</ul>
-<ul>
-<li>[[bar <span>[[foo]]</span>
-</li>
-</ul>
-<ul>
-<li>]]bar <span>[[foo]]</span>
-</li>
-</ul>
-<ul>
-<li>=bar <span>foo]]</span>=
-</li>
-</ul>
-<ul>
-<li> <s></s>: a
-</li>
-</ul>
+<ul><li> bar <span>[[foo]]</span></li></ul>
+<ul><li>=bar <span>[[foo]]</span></li></ul>
+<ul><li>[[bar <span>[[foo]]</span></li></ul>
+<ul><li>]]bar <span>[[foo]]</span></li></ul>
+<ul><li>=bar <span>foo]]</span>=</li></ul>
+<ul><li> <s></s>: a</li></ul>
 
 !!end
 
@@ -19355,6 +19082,138 @@ parsoid
 <a href="http://google.com" rel="mw:ExtLink">[google</a>
 !! end
 
+!! test
+Links 6. Add <nowiki/>s between text-nodes and url-links when required (bug 64300)
+!! html/parsoid
+<p>x<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>y
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>?x
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>&amp;x
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>'x
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>,x
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>.x
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>;x
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>:x
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>;x
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>!x
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>=x
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>(x)
+<a rel="mw:ExtLink" href="http://example.com(x" data-parsoid='{"stx":"url"}'>http://example.com(x</a>)
+</p>
+!! wikitext
+x<nowiki/>http://example.com<nowiki/>y
+http://example.com<nowiki/>?x
+http://example.com<nowiki/>&x
+http://example.com<nowiki/>'x
+http://example.com<nowiki/>,x
+http://example.com<nowiki/>.x
+http://example.com<nowiki/>;x
+http://example.com<nowiki/>:x
+http://example.com<nowiki/>;x
+http://example.com<nowiki/>!x
+http://example.com<nowiki/>=x
+http://example.com<nowiki/>(x)
+http://example.com(x<nowiki/>)
+!! end
+
+!! test
+Links 7a. Don't add spurious <nowiki/>s between text-nodes and url-links (bug 64300)
+!! html/parsoid
+<p>x
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>
+y
+"<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>"
+(<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>)
+(<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>) foo
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>,
+<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>, foo
+</p>
+!! wikitext
+x
+http://example.com
+y
+"http://example.com"
+(http://example.com)
+(http://example.com) foo
+http://example.com,
+http://example.com, foo
+!! end
+
+## Parsoid currently fails wt2html on this one!
+!! test
+Links 7b. Don't add spurious <nowiki/>s between text-nodes and url-links (bug 64300)
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>.,;:!?</p>
+!! wikitext
+http://example.com.,;:!?
+!! end
+
+!! test
+Links 8. Add <nowiki/>s between text-nodes and RFC-links when required (bug 64300)
+!! html/parsoid
+<p><a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>4</p>
+!! wikitext
+RFC 123<nowiki/>4
+!! end
+
+!! test
+Links 9. Don't add spurious <nowiki/>s between text-nodes and RFC-links (bug 64300)
+!! html/parsoid
+<p>x<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y
+X<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y
+<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>?foo
+<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>&amp;foo
+</p>
+!! wikitext
+xRFC 123y
+XRFC 123y
+RFC 123?foo
+RFC 123&foo
+!! end
+
+!! test
+Links 10. Add <nowiki/>s between text-nodes and PMID-links when required (bug 64300)
+!! html/parsoid
+<p><a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>4
+!! wikitext
+PMID 123<nowiki/>4
+!! end
+
+!! test
+Links 11. Don't add spurious <nowiki/>s between text-nodes and PMID-links (bug 64300)
+!! html/parsoid
+<p>x<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
+X<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
+<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>?foo
+<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>&foo
+</p>
+!! wikitext
+xPMID 123y
+XPMID 123y
+PMID 123?foo
+PMID 123&foo
+!! end
+
+!! test
+Links 12. Add <nowiki/>s between text-nodes and ISBN-links when required (bug 64300)
+!! html/parsoid
+<p><a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>1
+<a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>x
+<a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>b
+</p>
+!! wikitext
+ISBN 1234567890<nowiki/>1
+ISBN 1234567890<nowiki/>x
+ISBN 1234567890<nowiki/>b
+!! end
+
+!! test
+Links 12. Don't add spurious <nowiki/>s between text-nodes and ISBN-links (bug 64300)
+!! html/parsoid
+<p><a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>'s
+!! wikitext
+ISBN 1234567890's
+!! end
+
 #### --------------- Quotes ---------------
 #### 1. Quotes inside <b> and <i>
 #### 2. Link fragments separated by <i> and <b> tags
@@ -19891,6 +19750,20 @@ Indented table with an empty td
 
 !!end
 
+!!test
+Indented block & table
+!! wikitext
+ <div>foo</div>
+ {|
+ |foo
+ |}
+!! html/parsoid
+ <div data-parsoid='{"stx":"html"}'>foo</div>
+ <table><tbody>
+ <tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'>foo</td></tr>
+ </tbody></table>
+!!end
+
 !!test
 Empty TR followed by a template-generated TR
 (Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext)
@@ -20235,6 +20108,21 @@ parsoid=wt2html,wt2wt
 </table>
 !!end
 
+# Parsoid only for bug 64747
+!! test
+Properly encapsulate empty-content transclusions in fosterable positions
+!! wikitext
+<table>
+{{#if:|
+<td>foo</td>
+}}
+</table>
+!! html/parsoid
+<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>\n",{"template":{"target":{"wt":"#if:","function":"#if"},"params":{"1":{"wt":"\n&lt;td>foo&lt;/td>\n"}},"i":0}},"\n&lt;/table>"]}' data-parsoid='{"stx":"html","pi":[[{"k":"1","spc":["","","",""]}]],"src":"&lt;table>\n{{#if:|\n&lt;td>foo&lt;/td>\n}}\n&lt;/table>"}'>
+
+</table>
+!! end
+
 !!test
 Support <object> element with .data attribute
 !!options
@@ -20436,7 +20324,7 @@ parsoid
 [[File:Foobar.jpg|thumb|upright=0.5|caption]]
 [[File:Foobar.jpg|thumb|500x500px|upright=0.5|caption]]
 !! html
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="19" width="170"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="19" width="170"/></a><figcaption>caption</figcaption></figure><figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="57" width="500"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="19" width="170"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="12" width="110"/></a><figcaption>caption</figcaption></figure><figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="57" width="500"/></a><figcaption>caption</figcaption></figure>
 !!end
 
 !! test
index f8c4c6c..daf4bd9 100644 (file)
@@ -4,7 +4,6 @@ abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
        protected static function getResourceLoaderContext() {
                $resourceLoader = new ResourceLoader();
                $request = new FauxRequest( array(
-                               'debug' => 'true',
                                'lang' => 'en',
                                'modules' => 'startup',
                                'only' => 'scripts',
@@ -17,6 +16,8 @@ abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
        protected function setUp() {
                parent::setUp();
 
+               ResourceLoader::clearCache();
+
                $this->setMwGlobals( array(
                        // For ResourceLoader::inDebugMode since it doesn't have context
                        'wgResourceLoaderDebug' => true,
@@ -42,6 +43,7 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
        protected $dependencies = array();
        protected $group = null;
        protected $source = 'local';
+       protected $skipFunction = null;
        protected $targets = array( 'test' );
 
        public function __construct( $options = array() ) {
@@ -61,6 +63,10 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
        public function getSource() {
                return $this->source;
        }
+
+       public function getSkipFunction() {
+               return $this->skipFunction;
+       }
 }
 
 class ResourceLoaderFileModuleTestModule extends ResourceLoaderFileModule {
index b2fa7fb..cd9b9e2 100644 (file)
@@ -1,10 +1,20 @@
 == Things To Do ==
-* Most of the tests are named poorly; naming should describe a use case in story-like language, not simply identify the
-unit under test. An example would be the difference between testCalculate and testAddingIntegersTogetherWorks.
-* Many of the tests make multiple assertions, and are thus not unitary tests. By using data-providers and more use-case
-oriented test selection nearly all of these cases can be easily resolved.
-* Some of the test files are either incorrectly named or in the wrong folder. Tests should be organized in a mirrored
-structure to the source they are testing, and named the same, with the exception of the word "Test" at the end.
-* Shared set-up code or base classes are present, but usually named improperly or appear to be poorly factored. Support
-code should share as much of the same naming as the code it's supporting, and test and test-case depenencies should be
-considered to resolve other shared needs.
+
+* Most of the tests are named poorly;
+  naming should describe a use case in story-like language,
+  not simply identify the unit under test.
+  An example would be the difference between "testCalculate"
+  and "testAddingIntegersTogetherWorks".
+
+* Many of the tests make multiple assertions, and are thus not unitary tests.
+  By using data-providers and more use-case oriented test selection
+  nearly all of these cases can be easily resolved.
+
+* Some of the test files are either incorrectly named or in the wrong folder.
+  Tests should be organized in a mirrored structure to the source they are testing,
+  and named the same, with the exception of the word "Test" at the end.
+
+* Shared set-up code or base classes are present,
+  but usually named improperly or appear to be poorly factored.
+  Support code should share as much of the same naming  as the code it's supporting,
+  and test and test-case depenencies should be considered to resolve other shared needs.
diff --git a/tests/phpunit/data/filerepo/video.png b/tests/phpunit/data/filerepo/video.png
new file mode 100644 (file)
index 0000000..d86dbe0
Binary files /dev/null and b/tests/phpunit/data/filerepo/video.png differ
diff --git a/tests/phpunit/data/filerepo/wiki.png b/tests/phpunit/data/filerepo/wiki.png
new file mode 100644 (file)
index 0000000..8c42118
Binary files /dev/null and b/tests/phpunit/data/filerepo/wiki.png differ
diff --git a/tests/phpunit/data/media/Bishzilla_blink.gif b/tests/phpunit/data/media/Bishzilla_blink.gif
new file mode 100644 (file)
index 0000000..13e5536
Binary files /dev/null and b/tests/phpunit/data/media/Bishzilla_blink.gif differ
index 57879f8..ca132a4 100644 (file)
@@ -46,3 +46,12 @@ https://commons.wikimedia.org/wiki/File:Speech_bubbles.svg
 CC BY-SA 3.0
 Jarry1250
 
+Soccer_ball_animated.svg
+https://commons.wikimedia.org/wiki/File:Soccer_ball_animated.svg
+GFDL 1.2 or later, CC-BY-SA 3.0 unported, CC-BY-SA 2.5 generic, CC-BY-SA 2.0 generic, or CC-BY-SA 1.0 generic
+Pumbaa80
+
+Bishzilla_blink.gif
+https://commons.wikimedia.org/wiki/File:Bishzilla_blink.gif
+Public domain
+Bishonen
diff --git a/tests/phpunit/data/media/Soccer_ball_animated.svg b/tests/phpunit/data/media/Soccer_ball_animated.svg
new file mode 100644 (file)
index 0000000..6bd82fc
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE svg>\r
+<svg width="150" height="150" viewBox="-105 -105 210 210" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\r
+   <defs>\r
+      <clipPath id="ball">\r
+         <circle r="100" stroke-width="0"/>\r
+      </clipPath>\r
+      <radialGradient id="shadow1" cx=".4" cy=".3" r=".8">\r
+        <stop offset="0" stop-color="white" stop-opacity="1"/>\r
+        <stop offset=".4" stop-color="white" stop-opacity="1"/>\r
+        <stop offset=".8" stop-color="#EEEEEE" stop-opacity="1"/>\r
+      </radialGradient>\r
+      <radialGradient id="shadow2" cx=".5" cy=".5" r=".5">\r
+        <stop offset="0" stop-color="white" stop-opacity="0"/>\r
+        <stop offset=".8" stop-color="white" stop-opacity="0"/>\r
+        <stop offset=".99" stop-color="black" stop-opacity=".3"/>\r
+        <stop offset="1" stop-color="black" stop-opacity="1"/>\r
+      </radialGradient>\r
+      <g id="black_stuff" stroke-linejoin="round" clip-path="url(#ball)">\r
+         <g fill="black">\r
+            <path d="M 6,-32 Q 26,-28 46,-19 Q 57,-35 64,-47 Q 50,-68 37,-76 Q 17,-75 1,-68 Q 4,-51 6,-32"/>\r
+            <path d="M -26,-2 Q -45,-8 -62,-11 Q -74,5 -76,22 Q -69,40 -50,54 Q -32,47 -17,39 Q -23,15 -26,-2"/>\r
+            <path d="M -95,22 Q -102,12 -102,-8 V 80 H -85 Q -95,45 -95,22"/>\r
+            <path d="M 55,24 Q 41,41 24,52 Q 28,65 31,79 Q 55,78 68,67 Q 78,50 80,35 Q 65,28 55,24"/>\r
+            <path d="M 0,120 L -3,95 Q -25,93 -42,82 Q -50,84 -60,81"/>\r
+            <path d="M -90,-48 Q -80,-52 -68,-49 Q -52,-71 -35,-77 Q -35,-100 -40,-100 H -100"/>\r
+            <path d="M 100,-55 L 87,-37 Q 98,-10 97,5 L 100,6"/>\r
+         </g>\r
+         <g fill="none">\r
+            <path d="M 6,-32 Q -18,-12 -26,-2\r
+                     M 46,-19 Q 54,5 55,24\r
+                     M 64,-47 Q 77,-44 87,-37\r
+                     M 37,-76 Q 39,-90 36,-100\r
+                     M 1,-68 Q -13,-77 -35,-77\r
+                     M -62,-11 Q -67,-25 -68,-49\r
+                     M -76,22 Q -85,24 -95,22\r
+                     M -50,54 Q -49,70 -42,82\r
+                     M -17,39 Q 0,48 24,52\r
+                     M 31,79 Q 20,92 -3,95\r
+                     M 68,67 L 80,80\r
+                     M 80,35 Q 90,25 97,5\r
+            "/>\r
+         </g>\r
+      </g>\r
+   </defs>\r
+   <circle r="100" fill="white" stroke="none"/>\r
+   <circle r="100" fill="url(#shadow1)" stroke="none"/>\r
+   <g><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0" to="360" begin="0s" dur="3s" repeatCount="indefinite"/>\r
+      <use xlink:href="#black_stuff" stroke="#EEE" stroke-width="7"/>\r
+      <use xlink:href="#black_stuff" stroke="#DDD" stroke-width="4"/>\r
+      <use xlink:href="#black_stuff" stroke="#999" stroke-width="2"/>\r
+      <use xlink:href="#black_stuff" stroke="black" stroke-width="1"/>\r
+   </g>\r
+   <circle r="100" fill="url(#shadow2)" stroke="none"/>\r
+</svg>\r
diff --git a/tests/phpunit/data/parser/LoremIpsum.djvu b/tests/phpunit/data/parser/LoremIpsum.djvu
new file mode 100644 (file)
index 0000000..42f47cd
Binary files /dev/null and b/tests/phpunit/data/parser/LoremIpsum.djvu differ
diff --git a/tests/phpunit/data/parser/headbg.jpg b/tests/phpunit/data/parser/headbg.jpg
new file mode 100644 (file)
index 0000000..5491c6e
Binary files /dev/null and b/tests/phpunit/data/parser/headbg.jpg differ
diff --git a/tests/phpunit/data/parser/wiki.png b/tests/phpunit/data/parser/wiki.png
new file mode 100644 (file)
index 0000000..8c42118
Binary files /dev/null and b/tests/phpunit/data/parser/wiki.png differ
diff --git a/tests/phpunit/data/upload/headbg.jpg b/tests/phpunit/data/upload/headbg.jpg
new file mode 100644 (file)
index 0000000..5491c6e
Binary files /dev/null and b/tests/phpunit/data/upload/headbg.jpg differ
index 6335d11..fac9b88 100644 (file)
@@ -87,8 +87,15 @@ class WfTimestampTest extends MediaWikiTestCase {
         * See r74778 and bug 25451
         * @dataProvider provideOldTimestamps
         */
-       public function testOldTimestamps( $input, $format, $output, $desc ) {
-               $this->assertEquals( $output, wfTimestamp( $format, $input ), $desc );
+       public function testOldTimestamps( $input, $outputType, $output, $message ) {
+               $timestamp = wfTimestamp( $outputType, $input );
+               if ( substr( $output, 0, 1 ) === '/' ) {
+                       // Bug 64946: Day of the week calculations for very old
+                       // timestamps varies from system to system.
+                       $this->assertRegExp(  $output, $timestamp, $message );
+               } else {
+                       $this->assertEquals( $output, $timestamp, $message );
+               }
        }
 
        public static function provideOldTimestamps() {
@@ -117,12 +124,12 @@ class WfTimestampTest extends MediaWikiTestCase {
                        array(
                                '0117-08-09 12:34:56',
                                TS_RFC2822,
-                               'Tue, 09 Aug 0117 12:34:56 GMT',
+                               '/, 09 Aug 0117 12:34:56 GMT$/',
                                'Death of Roman Emperor [[Trajan]]'
                        ),
 
                        /* @todo FIXME: 00 to 101 years are taken as being in [1970-2069] */
-                       array( '-58979923200', TS_RFC2822, 'Sun, 01 Jan 0101 00:00:00 GMT', '1/1/101' ),
+                       array( '-58979923200', TS_RFC2822, '/, 01 Jan 0101 00:00:00 GMT$/', '1/1/101' ),
                        array( '-62135596800', TS_RFC2822, 'Mon, 01 Jan 0001 00:00:00 GMT', 'Year 1' ),
 
                        /* It is not clear if we should generate a year 0 or not
diff --git a/tests/phpunit/includes/ImportTest.php b/tests/phpunit/includes/ImportTest.php
new file mode 100644 (file)
index 0000000..8895403
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+
+/**
+ * Test class for Import methods.
+ *
+ * @group Database
+ *
+ * @author Sebastian Brückner < sebastian.brueckner@student.hpi.uni-potsdam.de >
+ */
+class ImportTest extends MediaWikiLangTestCase {
+
+       private function getInputStreamSource( $xml ) {
+               $file = 'data:application/xml,' . $xml;
+               $status = ImportStreamSource::newFromFile( $file );
+               if ( !$status->isGood() ) {
+                       throw new MWException( "Cannot create InputStreamSource." );
+               }
+               return $status->value;
+       }
+
+       /**
+        * @covers WikiImporter::handlePage
+        * @dataProvider getRedirectXML
+        * @param string $xml
+        */
+       public function testHandlePageContainsRedirect( $xml, $redirectTitle ) {
+               $source = $this->getInputStreamSource( $xml );
+
+               $redirect = NULL;
+               $callback = function( $title, $origTitle, $revCount, $sRevCount, $pageInfo ) use ( &$redirect ) {
+                       if ( array_key_exists( 'redirect', $pageInfo ) ) {
+                               $redirect = $pageInfo['redirect'];
+                       }
+               };
+
+               $importer = new WikiImporter( $source );
+               $importer->setPageOutCallback( $callback );
+               $importer->doImport();
+
+               $this->assertEquals( $redirectTitle, $redirect );
+       }
+
+       public function getRedirectXML() {
+               return array(
+                       array(
+                               <<< EOF
+<mediawiki>
+       <page>
+               <title>Test</title>
+               <ns>0</ns>
+               <id>21</id>
+               <redirect title="Test22"/>
+               <revision>
+                       <id>20</id>
+                       <timestamp>2014-05-27T10:00:00Z</timestamp>
+                       <contributor>
+                               <username>Admin</username>
+                               <id>10</id>
+                       </contributor>
+                       <comment>Admin moved page [[Test]] to [[Test22]]</comment>
+                       <text xml:space="preserve" bytes="20">#REDIRECT [[Test22]]</text>
+                       <sha1>tq456o9x3abm7r9ozi6km8yrbbc56o6</sha1>
+                       <model>wikitext</model>
+                       <format>text/x-wiki</format>
+               </revision>
+       </page>
+</mediawiki>
+EOF
+                       ,
+                               'Test22'
+                       ),
+                       array(
+                               <<< EOF
+<mediawiki>
+       <page>
+               <title>Test</title>
+               <ns>0</ns>
+               <id>42</id>
+               <revision>
+                       <id>421</id>
+                       <timestamp>2014-05-27T11:00:00Z</timestamp>
+                       <contributor>
+                               <username>Admin</username>
+                               <id>10</id>
+                       </contributor>
+                       <text xml:space="preserve" bytes="4">Abcd</text>
+                       <sha1>n7uomjq96szt60fy5w3x7ahf7q8m8rh</sha1>
+                       <model>wikitext</model>
+                       <format>text/x-wiki</format>
+               </revision>
+       </page>
+</mediawiki>
+EOF
+                       ,
+                               NULL
+                       ),
+               );
+       }
+
+}
index 110cbac..9889b08 100644 (file)
@@ -82,4 +82,105 @@ class LinkerTest extends MediaWikiLangTestCase {
                        # TODO!
                );
        }
+
+       /**
+        * @dataProvider provideCasesForFormatComment
+        * @covers Linker::formatComment
+        * @covers Linker::formatAutocomments
+        * @covers Linker::formatLinksInComment
+        */
+       public function testFormatComment( $expected, $comment, $title = false, $local = false ) {
+               $this->setMwGlobals( array(
+                       'wgArticlePath' => '/wiki/$1',
+                       'wgWellFormedXml' => true,
+               ) );
+
+               if ( $title === false ) {
+                       // We need a page title that exists
+                       $title = Title::newFromText( 'Special:BlankPage' );
+               }
+
+               $this->assertEquals(
+                       $expected,
+                       Linker::formatComment( $comment, $title, $local )
+               );
+       }
+
+       public static function provideCasesForFormatComment() {
+               return array(
+                       // Linker::formatComment
+                       array(
+                               'a&lt;script&gt;b',
+                               'a<script>b',
+                       ),
+                       array(
+                               'a—b',
+                               'a&mdash;b',
+                       ),
+                       array(
+                               "&#039;&#039;&#039;not bolded&#039;&#039;&#039;",
+                               "'''not bolded'''",
+                       ),
+                       // Linker::formatAutocomments
+                       array(
+                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               "/* autocomment */",
+                       ),
+                       array(
+                               '<a href="/wiki/Special:BlankPage#linkie.3F" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment"><a href="/wiki/index.php?title=Linkie%3F&amp;action=edit&amp;redlink=1" class="new" title="Linkie? (page does not exist)">linkie?</a></span></span>',
+                               "/* [[linkie?]] */",
+                       ),
+                       array(
+                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment: </span> post</span>',
+                               "/* autocomment */ post",
+                       ),
+                       array(
+                               'pre <a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               "pre /* autocomment */",
+                       ),
+                       array(
+                               'pre <a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment: </span> post</span>',
+                               "pre /* autocomment */ post",
+                       ),
+                       array(
+                               '/* autocomment */ multiple? <a href="/wiki/Special:BlankPage#autocomment2" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment2: </span> </span>',
+                               "/* autocomment */ multiple? /* autocomment2 */ ",
+                       ),
+                       array(
+                               '<a href="#autocomment">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               "/* autocomment */",
+                               false, true
+                       ),
+                       array(
+                               '‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               "/* autocomment */",
+                               null
+                       ),
+                       // Linker::formatLinksInComment
+                       array(
+                               'abc <a href="/wiki/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">link</a> def',
+                               "abc [[link]] def",
+                       ),
+                       array(
+                               'abc <a href="/wiki/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">text</a> def',
+                               "abc [[link|text]] def",
+                       ),
+                       array(
+                               'abc <a href="/wiki/Special:BlankPage" title="Special:BlankPage">Special:BlankPage</a> def',
+                               "abc [[Special:BlankPage|]] def",
+                       ),
+                       array(
+                               'abc <a href="/wiki/index.php?title=%C4%84%C5%9B%C5%BC&amp;action=edit&amp;redlink=1" class="new" title="Ąśż (page does not exist)">ąśż</a> def',
+                               "abc [[%C4%85%C5%9B%C5%BC]] def",
+                       ),
+                       array(
+                               'abc <a href="/wiki/Special:BlankPage#section" title="Special:BlankPage">#section</a> def',
+                               "abc [[#section]] def",
+                       ),
+                       array(
+                               'abc <a href="/wiki/index.php?title=/subpage&amp;action=edit&amp;redlink=1" class="new" title="/subpage (page does not exist)">/subpage</a> def',
+                               "abc [[/subpage]] def",
+                       ),
+               );
+       }
 }
index 1a6cfe6..3829f90 100644 (file)
@@ -355,7 +355,7 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases[ '2StringWarnings' ] = array(
                        $status,
                        "* <fooBar!>\n* <fooBar2!>\n",
-                       "<ul>\n<li> &lt;fooBar!&gt;\n</li>\n<li> &lt;fooBar2!&gt;\n</li>\n</ul>\n",
+                       "<ul><li> &lt;fooBar!&gt;</li>\n<li> &lt;fooBar2!&gt;</li></ul>\n",
                );
 
                $status = new Status();
@@ -372,7 +372,7 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases[ '2MessageWarnings' ] = array(
                        $status,
                        "* <fooBar!>\n* <fooBar2!>\n",
-                       "<ul>\n<li> &lt;fooBar!&gt;\n</li>\n<li> &lt;fooBar2!&gt;\n</li>\n</ul>\n",
+                       "<ul><li> &lt;fooBar!&gt;</li>\n<li> &lt;fooBar2!&gt;</li></ul>\n",
                );
 
                return $testCases;
index 0b368c2..f0d4c4d 100644 (file)
@@ -3,8 +3,6 @@
 class TimeAdjustTest extends MediaWikiLangTestCase {
        protected function setUp() {
                parent::setUp();
-
-               $this->iniSet( 'precision', 15 );
        }
 
        /**
@@ -18,7 +16,7 @@ class TimeAdjustTest extends MediaWikiLangTestCase {
                $this->setMwGlobals( 'wgLocalTZoffset', $localTZoffset );
 
                $this->assertEquals(
-                       strval( $expected ),
+                       $expected,
                        strval( $wgContLang->userAdjust( $date, '' ) ),
                        "User adjust {$date} by {$localTZoffset} minutes should give {$expected}"
                );
@@ -26,16 +24,16 @@ class TimeAdjustTest extends MediaWikiLangTestCase {
 
        public static function dataUserAdjust() {
                return array(
-                       array( 20061231235959, 0, 20061231235959 ),
-                       array( 20061231235959, 5, 20070101000459 ),
-                       array( 20061231235959, 15, 20070101001459 ),
-                       array( 20061231235959, 60, 20070101005959 ),
-                       array( 20061231235959, 90, 20070101012959 ),
-                       array( 20061231235959, 120, 20070101015959 ),
-                       array( 20061231235959, 540, 20070101085959 ),
-                       array( 20061231235959, -5, 20061231235459 ),
-                       array( 20061231235959, -30, 20061231232959 ),
-                       array( 20061231235959, -60, 20061231225959 ),
+                       array( '20061231235959', 0, '20061231235959' ),
+                       array( '20061231235959', 5, '20070101000459' ),
+                       array( '20061231235959', 15,'20070101001459' ),
+                       array( '20061231235959', 60, '20070101005959' ),
+                       array( '20061231235959', 90, '20070101012959' ),
+                       array( '20061231235959', 120, '20070101015959' ),
+                       array( '20061231235959', 540, '20070101085959' ),
+                       array( '20061231235959', -5, '20061231235459' ),
+                       array( '20061231235959', -30, '20061231232959' ),
+                       array( '20061231235959', -60, '20061231225959' ),
                );
        }
 }
index 37f1975..78457d2 100644 (file)
@@ -817,6 +817,22 @@ more stuff
                $this->assertEquals( $expected, is_null( $c ) ? null : trim( $c->getNativeData() ) );
        }
 
+       /**
+        * @dataProvider dataReplaceSection
+        * @covers WikiPage::replaceSectionAtRev
+        */
+       public function testReplaceSectionAtRev( $title, $model, $text, $section,
+               $with, $sectionTitle, $expected
+       ) {
+               $page = $this->createPage( $title, $text, $model );
+               $baseRevId = $page->getLatest();
+
+               $content = ContentHandler::makeContent( $with, $page->getTitle(), $page->getContentModel() );
+               $c = $page->replaceSectionAtRev( $section, $content, $sectionTitle, $baseRevId );
+
+               $this->assertEquals( $expected, is_null( $c ) ? null : trim( $c->getNativeData() ) );
+       }
+
        /* @todo FIXME: fix this!
        public function testGetUndoText() {
        $this->checkHasDiff3();
index 2e1c265..9f8c139 100644 (file)
@@ -274,6 +274,100 @@ class ApiEditPageTest extends ApiTestCase {
                $this->assertEquals( "== header ==\n\ntest\n\n== header ==\n\ntest", $text );
        }
 
+       /**
+        * Ensure we can edit through a redirect, if adding a section
+        */
+       public function testEdit_redirect() {
+               static $count = 0;
+               $count++;
+
+               // assume NS_HELP defaults to wikitext
+               $name = "Help:ApiEditPageTest_testEdit_redirect_$count";
+               $title = Title::newFromText( $name );
+               $page = WikiPage::factory( $title );
+
+               $rname = "Help:ApiEditPageTest_testEdit_redirect_r$count";
+               $rtitle = Title::newFromText( $rname );
+               $rpage = WikiPage::factory( $rtitle );
+
+               // base edit for content
+               $page->doEditContent( new WikitextContent( "Foo" ),
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+               $this->forceRevisionDate( $page, '20120101000000' );
+               $baseTime = $page->getRevision()->getTimestamp();
+
+               // base edit for redirect
+               $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]" ),
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+               $this->forceRevisionDate( $rpage, '20120101000000' );
+
+               // conflicting edit to redirect
+               $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]\n\n[[Category:Test]]" ),
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+               $this->forceRevisionDate( $rpage, '20120101020202' );
+
+               // try to save edit, following the redirect
+               list( $re, , ) = $this->doApiRequestWithToken( array(
+                       'action' => 'edit',
+                       'title' => $rname,
+                       'text' => 'nix bar!',
+                       'basetimestamp' => $baseTime,
+                       'section' => 'new',
+                       'redirect' => true,
+               ), null, self::$users['sysop']->user );
+
+               $this->assertEquals( 'Success', $re['edit']['result'],
+                       "no problems expected when following redirect" );
+       }
+
+       /**
+        * Ensure we cannot edit through a redirect, if attempting to overwrite content
+        */
+       public function testEdit_redirectText() {
+               static $count = 0;
+               $count++;
+
+               // assume NS_HELP defaults to wikitext
+               $name = "Help:ApiEditPageTest_testEdit_redirectText_$count";
+               $title = Title::newFromText( $name );
+               $page = WikiPage::factory( $title );
+
+               $rname = "Help:ApiEditPageTest_testEdit_redirectText_r$count";
+               $rtitle = Title::newFromText( $rname );
+               $rpage = WikiPage::factory( $rtitle );
+
+               // base edit for content
+               $page->doEditContent( new WikitextContent( "Foo" ),
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+               $this->forceRevisionDate( $page, '20120101000000' );
+               $baseTime = $page->getRevision()->getTimestamp();
+
+               // base edit for redirect
+               $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]" ),
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+               $this->forceRevisionDate( $rpage, '20120101000000' );
+
+               // conflicting edit to redirect
+               $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]\n\n[[Category:Test]]" ),
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+               $this->forceRevisionDate( $rpage, '20120101020202' );
+
+               // try to save edit, following the redirect but without creating a section
+               try {
+                       $this->doApiRequestWithToken( array(
+                               'action' => 'edit',
+                               'title' => $rname,
+                               'text' => 'nix bar!',
+                               'basetimestamp' => $baseTime,
+                               'redirect' => true,
+                       ), null, self::$users['sysop']->user );
+
+                       $this->fail( 'redirect-appendonly error expected' );
+               } catch ( UsageException $ex ) {
+                       $this->assertEquals( 'redirect-appendonly', $ex->getCodeString() );
+               }
+       }
+
        public function testEditConflict() {
                static $count = 0;
                $count++;
@@ -310,60 +404,41 @@ class ApiEditPageTest extends ApiTestCase {
                }
        }
 
-       public function testEditConflict_redirect() {
+       /**
+        * Ensure that editing using section=new will prevent simple conflicts
+        */
+       public function testEditConflict_newSection() {
                static $count = 0;
                $count++;
 
                // assume NS_HELP defaults to wikitext
-               $name = "Help:ApiEditPageTest_testEditConflict_redirect_$count";
+               $name = "Help:ApiEditPageTest_testEditConflict_newSection_$count";
                $title = Title::newFromText( $name );
-               $page = WikiPage::factory( $title );
 
-               $rname = "Help:ApiEditPageTest_testEditConflict_redirect_r$count";
-               $rtitle = Title::newFromText( $rname );
-               $rpage = WikiPage::factory( $rtitle );
+               $page = WikiPage::factory( $title );
 
-               // base edit for content
+               // base edit
                $page->doEditContent( new WikitextContent( "Foo" ),
                        "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
                $this->forceRevisionDate( $page, '20120101000000' );
                $baseTime = $page->getRevision()->getTimestamp();
 
-               // base edit for redirect
-               $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
-               $this->forceRevisionDate( $rpage, '20120101000000' );
-
-               // conflicting edit to redirect
-               $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]\n\n[[Category:Test]]" ),
+               // conflicting edit
+               $page->doEditContent( new WikitextContent( "Foo bar" ),
                        "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
-               $this->forceRevisionDate( $rpage, '20120101020202' );
+               $this->forceRevisionDate( $page, '20120101020202' );
 
-               // try to save edit; should work, because we follow the redirect
+               // try to save edit, expect no conflict
                list( $re, , ) = $this->doApiRequestWithToken( array(
                        'action' => 'edit',
-                       'title' => $rname,
+                       'title' => $name,
                        'text' => 'nix bar!',
                        'basetimestamp' => $baseTime,
-                       'redirect' => true,
+                       'section' => 'new',
                ), null, self::$users['sysop']->user );
 
                $this->assertEquals( 'Success', $re['edit']['result'],
-                       "no edit conflict expected when following redirect" );
-
-               // try again, without following the redirect. Should fail.
-               try {
-                       $this->doApiRequestWithToken( array(
-                               'action' => 'edit',
-                               'title' => $rname,
-                               'text' => 'nix bar!',
-                               'basetimestamp' => $baseTime,
-                       ), null, self::$users['sysop']->user );
-
-                       $this->fail( 'edit conflict expected' );
-               } catch ( UsageException $ex ) {
-                       $this->assertEquals( 'editconflict', $ex->getCodeString() );
-               }
+                       "no edit conflict expected here" );
        }
 
        public function testEditConflict_bug41990() {
@@ -405,6 +480,7 @@ class ApiEditPageTest extends ApiTestCase {
                        'action' => 'edit',
                        'title' => $rname,
                        'text' => 'nix bar!',
+                       'section' => 'new',
                        'redirect' => true,
                ), null, self::$users['sysop']->user );
 
index 4ed5aa9..8c5f540 100644 (file)
@@ -30,4 +30,43 @@ class ApiMainTest extends ApiTestCase {
                $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) );
        }
 
+       public static function provideAssert() {
+               $anon = new User();
+               $bot = new User();
+               $bot->setName( 'Bot' );
+               $bot->addToDatabase();
+               $bot->addGroup( 'bot' );
+               $user = new User();
+               $user->setName( 'User' );
+               $user->addToDatabase();
+               return array(
+                       array( $anon, 'user', 'assertuserfailed' ),
+                       array( $user, 'user', false ),
+                       array( $user, 'bot', 'assertbotfailed' ),
+                       array( $bot, 'user', false ),
+                       array( $bot, 'bot', false ),
+               );
+       }
+
+       /**
+        * Tests the assert={user|bot} functionality
+        *
+        * @covers ApiMain::checkAsserts
+        * @dataProvider provideAssert
+        * @param User $user
+        * @param string $assert
+        * @param string|bool $error false if no error expected
+        */
+       public function testAssert( $user, $assert, $error ) {
+               try {
+                       $this->doApiRequest( array(
+                               'action' => 'query',
+                               'assert' => $assert,
+                       ), null, null, $user );
+                       $this->assertFalse( $error ); // That no error was expected
+               } catch ( UsageException $e ) {
+                       $this->assertEquals( $e->getCodeString(), $error );
+               }
+       }
+
 }
diff --git a/tests/phpunit/includes/config/ConfigFactoryTest.php b/tests/phpunit/includes/config/ConfigFactoryTest.php
new file mode 100644 (file)
index 0000000..0a6bf72
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+class ConfigFactoryTest extends MediaWikiTestCase {
+
+       /**
+        * @covers ConfigFactory::register
+        */
+       public function testRegister() {
+               $factory = new ConfigFactory();
+               $factory->register( 'unittest', 'GlobalVarConfig::newInstance' );
+               $this->assertTrue( True ); // No exception thrown
+               $this->setExpectedException( 'InvalidArgumentException' );
+               $factory->register( 'invalid', 'Invalid callback' );
+       }
+
+       /**
+        * @covers ConfigFactory::makeConfig
+        */
+       public function testMakeConfig() {
+               $factory = new ConfigFactory();
+               $factory->register( 'unittest', 'GlobalVarConfig::newInstance' );
+               $conf = $factory->makeConfig( 'unittest' );
+               $this->assertInstanceOf( 'Config', $conf );
+       }
+
+       /**
+        * @covers ConfigFactory::makeConfig
+        */
+       public function testMakeConfigWithNoBuilders() {
+               $factory = new ConfigFactory();
+               $this->setExpectedException( 'ConfigException' );
+               $factory->makeConfig( 'nobuilderregistered' );
+       }
+
+       /**
+        * @covers ConfigFactory::makeConfig
+        */
+       public function testMakeConfigWithInvalidCallback() {
+               $factory = new ConfigFactory();
+               $factory->register( 'unittest', function() {
+                       return true; // Not a Config object
+               });
+               $this->setExpectedException( 'UnexpectedValueException' );
+               $factory->makeConfig( 'unittest' );
+       }
+}
diff --git a/tests/phpunit/includes/config/GlobalConfigTest.php b/tests/phpunit/includes/config/GlobalConfigTest.php
deleted file mode 100644 (file)
index b605a46..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-class GlobalConfigTest extends MediaWikiTestCase {
-
-       /** @var GlobalConfig $config */
-       protected $config;
-
-       protected function setUp() {
-               parent::setUp();
-               $this->config = new GlobalConfig;
-       }
-
-       public static function provideGet() {
-               return array(
-                       array( 'wgSitename', array( 'Sitename' ) ),
-                       array( 'wgFoo', array( 'Foo' ) ),
-                       array( 'efVariable', array( 'Variable', 'ef' ) ),
-                       array( 'Foo', array( 'Foo', '' ) ),
-               );
-       }
-
-       /**
-        * @param string $name
-        * @param array $params
-        * @dataProvider provideGet
-        * @covers GlobalConfig::get
-        */
-       public function testGet( $name, $params ) {
-               $rand = wfRandom();
-               $old = isset( $GLOBALS[$name] ) ? $GLOBALS[$name] : null;
-               $GLOBALS[$name] = $rand;
-               $out = call_user_func_array( array( $this->config, 'get' ), $params );
-               $this->assertEquals( $rand, $out );
-               if ( $old ) {
-                       $GLOBALS[$name] = $old;
-               }
-       }
-}
diff --git a/tests/phpunit/includes/config/GlobalVarConfigTest.php b/tests/phpunit/includes/config/GlobalVarConfigTest.php
new file mode 100644 (file)
index 0000000..7080b02
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+
+class GlobalVarConfigTest extends MediaWikiTestCase {
+
+       public function provideGet() {
+               $set = array(
+                       'wgSomething' => 'default1',
+                       'wgFoo' => 'default2',
+                       'efVariable' => 'default3',
+                       'BAR' => 'default4',
+               );
+
+               foreach ( $set as $var => $value ) {
+                       $GLOBALS[$var] = $value;
+               }
+
+               return array(
+                       array( 'Something', 'wg', 'default1' ),
+                       array( 'Foo', 'wg', 'default2' ),
+                       array( 'Variable', 'ef', 'default3' ),
+                       array( 'BAR', '', 'default4' ),
+               );
+       }
+
+       /**
+        * @param string $name
+        * @param string $prefix
+        * @param string $expected
+        * @dataProvider provideGet
+        * @covers GlobalVarConfig::get
+        */
+       public function testGet( $name, $prefix, $expected ) {
+               $config = new GlobalVarConfig( $prefix );
+               $this->assertEquals( $config->get( $name ), $expected );
+       }
+}
index b4c1953..88bf7d9 100644 (file)
@@ -431,4 +431,22 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                $row = $res->fetchRow();
                $this->assertFalse( (bool)$row['a'] );
        }
+
+       /**
+        * @covers DatabaseSqlite::numFields
+        */
+       public function testNumFields() {
+               $db = new DatabaseSqliteStandalone( ':memory:' );
+
+               $databaseCreation = $db->query( 'CREATE TABLE a ( a_1 )', __METHOD__ );
+               $this->assertInstanceOf( 'ResultWrapper', $databaseCreation, "Failed to create table a" );
+               $res = $db->select( 'a' , '*');
+               $this->assertEquals( 0,  $db->numFields($res), "expects to get 0 fields for an empty table" );
+               $insertion = $db->insert( 'a', array( 'a_1' => 10 ), __METHOD__ );
+               $this->assertTrue( $insertion, "Insertion failed" );
+               $res = $db->select( 'a' , '*');
+               $this->assertEquals( 1,  $db->numFields($res), "wrong number of fields" );
+
+               $this->assertTrue( $db->close(), "closing database" );
+       }
 }
index 3276cf9..a79866e 100644 (file)
@@ -132,14 +132,14 @@ class StoreBatchTest extends MediaWikiTestCase {
                global $IP;
                $this->storecohort(
                        "Test1.png",
-                       "$IP/skins/monobook/wiki.png",
-                       "$IP/skins/monobook/video.png",
+                       "$IP/tests/phpunit/data/filerepo/wiki.png",
+                       "$IP/tests/phpunit/data/filerepo/video.png",
                        false
                );
                $this->storecohort(
                        "Test2.png",
-                       "$IP/skins/monobook/wiki.png",
-                       "$IP/skins/monobook/video.png",
+                       "$IP/tests/phpunit/data/filerepo/wiki.png",
+                       "$IP/tests/phpunit/data/filerepo/video.png",
                        true
                );
        }
diff --git a/tests/phpunit/includes/filerepo/files/FileTest.php b/tests/phpunit/includes/filerepo/files/FileTest.php
new file mode 100644 (file)
index 0000000..36b95ea
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+class FileTest extends MediaWikiMediaTestCase {
+
+       function setUp() {
+               $this->setMWGlobals( 'wgMaxAnimatedGifArea', 9000 );
+               parent::setUp();
+       }
+
+       /**
+        * @param $filename String
+        * @param $expected boolean
+        * @dataProvider providerCanAnimate
+        */
+       function testCanAnimateThumbIfAppropriate( $filename, $expected ) {
+               $file = $this->dataFile( $filename );
+               $this->assertEquals( $file->canAnimateThumbIfAppropriate(), $expected );
+       }
+
+       function providerCanAnimate() {
+               return array(
+                       array( 'nonanimated.gif', true ),
+                       array( 'jpeg-comment-utf.jpg', true ),
+                       array( 'test.tiff', true ),
+                       array( 'Animated_PNG_example_bouncing_beach_ball.png', false ),
+                       array( 'greyscale-png.png', true ),
+                       array( 'Toll_Texas_1.svg', true ),
+                       array( 'LoremIpsum.djvu', true ),
+                       array( '80x60-2layers.xcf', true ),
+                       array( 'Soccer_ball_animated.svg', false ),
+                       array( 'Bishzilla_blink.gif', false ),
+                       array( 'animated.gif', true ),
+               );
+       }
+}
index 5475a82..bb5e398 100644 (file)
@@ -202,6 +202,16 @@ class CSSMinTest extends MediaWikiTestCase {
                                'foo { /* @embed */ background: url(red.gif); }',
                                "foo { background: url($red); background: url(http://localhost/w/red.gif?timestamp)!ie; }",
                        ),
+                       array(
+                               'Can not re-embed data: URIs',
+                               "foo { /* @embed */ background: url($red); }",
+                               "foo { background: url($red); }",
+                       ),
+                       array(
+                               'Can not remap data: URIs',
+                               "foo { background: url($red); }",
+                               "foo { background: url($red); }",
+                       ),
                        array(
                                'Can not embed remote URLs',
                                'foo { /* @embed */ background: url(http://example.org/w/foo.png); }',
index 537c124..76cefe5 100644 (file)
@@ -2,17 +2,7 @@
 /**
  * @covers DjVuHandler
  */
-class DjVuTest extends MediaWikiTestCase {
-
-       /**
-        * @var string the directory where test files are
-        */
-       protected $filePath;
-
-       /**
-        * @var FSRepo the repository to use
-        */
-       protected $repo;
+class DjVuTest extends MediaWikiMediaTestCase {
 
        /**
         * @var DjVuHandler
@@ -26,35 +16,13 @@ class DjVuTest extends MediaWikiTestCase {
                $djvuSupport = new DjVuSupport();
 
                if ( !$djvuSupport->isEnabled() ) {
-                       $this->markTestSkipped( 'This test needs the installation of the ddjvu, djvutoxml and djvudump tools' );
+                       $this->markTestSkipped(
+                       'This test needs the installation of the ddjvu, djvutoxml and djvudump tools' );
                }
 
-               //file repo setup
-               $this->filePath = __DIR__ . '/../../data/media/';
-               $backend = new FSFileBackend( array(
-                       'name' => 'localtesting',
-                       'wikiId' => wfWikiId(),
-                       'lockManager' => new NullLockManager( array() ),
-                       'containerPaths' => array( 'data' => $this->filePath )
-               ) );
-               $this->repo = new FSRepo( array(
-                       'name' => 'temp',
-                       'url' => 'http://localhost/thumbtest',
-                       'backend' => $backend
-               ) );
-
                $this->handler = new DjVuHandler();
        }
 
-       protected function dataFile( $name, $type ) {
-               return new UnregisteredLocalFile(
-                       false,
-                       $this->repo,
-                       'mwstore://localtesting/data/' . $name,
-                       $type
-               );
-       }
-
        public function testGetImageSize() {
                $this->assertArrayEquals(
                        array( 2480, 3508, 'DjVu', 'width="2480" height="3508"' ),
@@ -64,7 +32,8 @@ class DjVuTest extends MediaWikiTestCase {
        }
 
        public function testInvalidFile() {
-               $this->assertFalse(
+               $this->assertEquals(
+                       'a:1:{s:5:"error";s:25:"Error extracting metadata";}',
                        $this->handler->getMetadata( null, $this->filePath . '/README' ),
                        'Getting Metadata for an inexistent file should returns false'
                );
index 438dc79..6a1e422 100644 (file)
@@ -6,26 +6,13 @@
  *
  * @todo covers tags
  */
-class ExifRotationTest extends MediaWikiTestCase {
+class ExifRotationTest extends MediaWikiMediaTestCase {
 
        protected function setUp() {
                parent::setUp();
                $this->checkPHPExtension( 'exif' );
 
                $this->handler = new BitmapHandler();
-               $filePath = __DIR__ . '/../../data/media';
-
-               $tmpDir = $this->getNewTempDirectory();
-
-               $this->repo = new FSRepo( array(
-                       'name' => 'temp',
-                       'url' => 'http://localhost/thumbtest',
-                       'backend' => new FSFileBackend( array(
-                               'name' => 'localtesting',
-                               'wikiId' => wfWikiId(),
-                               'containerPaths' => array( 'temp-thumb' => $tmpDir, 'data' => $filePath )
-                       ) )
-               ) );
 
                $this->setMwGlobals( array(
                        'wgShowEXIF' => true,
@@ -33,6 +20,13 @@ class ExifRotationTest extends MediaWikiTestCase {
                ) );
        }
 
+       /**
+        * Mark this test as creating thumbnail files.
+        */
+       protected function createsThumbnails() {
+               return true;
+       }
+
        /**
         * @dataProvider provideFiles
         */
@@ -93,12 +87,6 @@ class ExifRotationTest extends MediaWikiTestCase {
                }
        }
 
-       /* Utility function */
-       private function dataFile( $name, $type ) {
-               return new UnregisteredLocalFile( false, $this->repo,
-                       "mwstore://localtesting/data/$name", $type );
-       }
-
        public static function provideFiles() {
                return array(
                        array(
index a0ab92c..daaefc0 100644 (file)
@@ -1,28 +1,11 @@
 <?php
 
-class FormatMetadataTest extends MediaWikiTestCase {
-
-       /** @var FSFileBackend */
-       protected $backend;
-       /** @var FSRepo */
-       protected $repo;
+class FormatMetadataTest extends MediaWikiMediaTestCase {
 
        protected function setUp() {
                parent::setUp();
 
                $this->checkPHPExtension( 'exif' );
-               $filePath = __DIR__ . '/../../data/media';
-               $this->backend = new FSFileBackend( array(
-                       'name' => 'localtesting',
-                       'wikiId' => wfWikiId(),
-                       'containerPaths' => array( 'data' => $filePath )
-               ) );
-               $this->repo = new FSRepo( array(
-                       'name' => 'temp',
-                       'url' => 'http://localhost/thumbtest',
-                       'backend' => $this->backend
-               ) );
-
                $this->setMwGlobals( 'wgShowEXIF', true );
        }
 
@@ -82,9 +65,4 @@ class FormatMetadataTest extends MediaWikiTestCase {
                        // TODO: more test cases
                );
        }
-
-       private function dataFile( $name, $type ) {
-               return new UnregisteredLocalFile( false, $this->repo,
-                       "mwstore://localtesting/data/$name", $type );
-       }
 }
index 7a7ed21..17b2964 100644 (file)
@@ -1,29 +1,12 @@
 <?php
-class GIFHandlerTest extends MediaWikiTestCase {
+class GIFHandlerTest extends MediaWikiMediaTestCase {
 
-       /** @var FSFileBackend */
-       protected $backend;
        /** @var GIFHandler */
        protected $handler;
-       /** @var FSRepo */
-       protected $repo;
-       /** @var string */
-       protected $filePath;
 
        protected function setUp() {
                parent::setUp();
 
-               $this->filePath = __DIR__ . '/../../data/media';
-               $this->backend = new FSFileBackend( array(
-                       'name' => 'localtesting',
-                       'wikiId' => wfWikiId(),
-                       'containerPaths' => array( 'data' => $this->filePath )
-               ) );
-               $this->repo = new FSRepo( array(
-                       'name' => 'temp',
-                       'url' => 'http://localhost/thumbtest',
-                       'backend' => $this->backend
-               ) );
                $this->handler = new GIFHandler();
        }
 
@@ -152,9 +135,4 @@ class GIFHandlerTest extends MediaWikiTestCase {
                        ),
                );
        }
-
-       private function dataFile( $name, $type ) {
-               return new UnregisteredLocalFile( false, $this->repo,
-                       "mwstore://localtesting/data/$name", $type );
-       }
 }
index b261137..c856b1c 100644 (file)
@@ -2,29 +2,14 @@
 /**
  * @covers JpegHandler
  */
-class JpegTest extends MediaWikiTestCase {
-
-       protected $filePath;
+class JpegTest extends MediaWikiMediaTestCase {
 
        protected function setUp() {
                parent::setUp();
                $this->checkPHPExtension( 'exif' );
 
-               $this->filePath = __DIR__ . '/../../data/media/';
-
                $this->setMwGlobals( 'wgShowEXIF', true );
 
-               $this->backend = new FSFileBackend( array(
-                       'name' => 'localtesting',
-                       'wikiId' => wfWikiId(),
-                       'containerPaths' => array( 'data' => $this->filePath )
-               ) );
-               $this->repo = new FSRepo( array(
-                       'name' => 'temp',
-                       'url' => 'http://localhost/thumbtest',
-                       'backend' => $this->backend
-               ) );
-
                $this->handler = new JpegHandler;
        }
 
@@ -64,9 +49,4 @@ class JpegTest extends MediaWikiTestCase {
 
                $this->assertEquals( $res, $expected );
        }
-
-       private function dataFile( $name, $type ) {
-               return new UnregisteredLocalFile( false, $this->repo,
-                       "mwstore://localtesting/data/$name", $type );
-       }
 }
diff --git a/tests/phpunit/includes/media/MediaWikiMediaTestCase.php b/tests/phpunit/includes/media/MediaWikiMediaTestCase.php
new file mode 100644 (file)
index 0000000..96347d9
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Specificly for testing Media handlers. Sets up a FSFile backend
+ */
+abstract class MediaWikiMediaTestCase extends MediaWikiTestCase {
+
+       /** @var FSRepo */
+       protected $repo;
+       /** @var FSFileBackend */
+       protected $backend;
+       /** @var string */
+       protected $filePath;
+
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->filePath = $this->getFilePath();
+               $containers = array( 'data' => $this->filePath );
+               if ( $this->createsThumbnails() ) {
+                       // We need a temp directory for the thumbnails
+                       // the container is named 'temp-thumb' because it is the
+                       // thumb directory for a FSRepo named "temp".
+                       $containers['temp-thumb'] = $this->getNewTempDirectory();
+               }
+
+               $this->backend = new FSFileBackend( array(
+                       'name' => 'localtesting',
+                       'wikiId' => wfWikiId(),
+                       'containerPaths' => $containers
+               ) );
+               $this->repo = new FSRepo( array(
+                       'name' => 'temp',
+                       'url' => 'http://localhost/thumbtest',
+                       'backend' => $this->backend
+               ) );
+       }
+
+       /**
+        * The result of this method will set the file path to use,
+        * as well as the protected member $filePath
+        *
+        * @return String path where files are
+        */
+       protected function getFilePath() {
+               return __DIR__ . '/../../data/media/';
+       }
+
+       /**
+        * Will the test create thumbnails (and thus do we need to set aside
+        * a temporary directory for them?)
+        *
+        * Override this method if your test case creates thumbnails
+        *
+        * @return boolean
+        */
+       protected function createsThumbnails() {
+               return false;
+       }
+
+       /**
+        * Utility function: Get a new file object for a file on disk but not actually in db.
+        *
+        * File must be in the path returned by getFilePath()
+        * @param $name String File name
+        * @param $type String MIME type [optional]
+        * @return UnregisteredLocalFile
+        */
+       protected function dataFile( $name, $type = null ) {
+               if ( !$type ) {
+                       // Autodetect by file extension for the lazy.
+                       $magic = MimeMagic::singleton();
+                       $parts = explode( $name, '.' );
+                       $type = $magic->guessTypesForExtension( $parts[count( $parts ) - 1]  );
+               }
+               return new UnregisteredLocalFile( false, $this->repo,
+                       "mwstore://localtesting/data/$name", $type );
+       }
+}
index 59d40de..14e4d57 100644 (file)
@@ -1,29 +1,11 @@
 <?php
-class PNGHandlerTest extends MediaWikiTestCase {
+class PNGHandlerTest extends MediaWikiMediaTestCase {
 
        /** @var PNGHandler */
        protected $handler;
-       /** @var FSRepo */
-       protected $repo;
-       /** @var FSFileBackend */
-       protected $backend;
-       /** @var string */
-       protected $filePath;
 
        protected function setUp() {
                parent::setUp();
-
-               $this->filePath = __DIR__ . '/../../data/media';
-               $this->backend = new FSFileBackend( array(
-                       'name' => 'localtesting',
-                       'wikiId' => wfWikiId(),
-                       'containerPaths' => array( 'data' => $this->filePath )
-               ) );
-               $this->repo = new FSRepo( array(
-                       'name' => 'temp',
-                       'url' => 'http://localhost/thumbtest',
-                       'backend' => $this->backend
-               ) );
                $this->handler = new PNGHandler();
        }
 
@@ -142,9 +124,4 @@ class PNGHandlerTest extends MediaWikiTestCase {
                        ),
                );
        }
-
-       private function dataFile( $name, $type ) {
-               return new UnregisteredLocalFile( false, $this->repo,
-                       "mwstore://localtesting/data/$name", $type );
-       }
 }
index fa63fa6..f06bd6f 100644 (file)
@@ -116,6 +116,17 @@ class SVGMetadataExtractorTest extends MediaWikiTestCase {
                                        ),
                                )
                        ),
+                       array(
+                               "$base/Soccer_ball_animated.svg",
+                               array(
+                                       'width' => 150,
+                                       'height' => 150,
+                                       'originalWidth' => '150',
+                                       'originalHeight' => '150',
+                                       'animated' => true,
+                                       'translations' => array()
+                               ),
+                       ),
                );
        }
 
index 8a3d527..e3bb05e 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-class SvgTest extends MediaWikiTestCase {
+class SvgTest extends MediaWikiMediaTestCase {
 
        protected function setUp() {
                parent::setUp();
@@ -9,17 +9,6 @@ class SvgTest extends MediaWikiTestCase {
 
                $this->setMwGlobals( 'wgShowEXIF', true );
 
-               $this->backend = new FSFileBackend( array(
-                       'name' => 'localtesting',
-                       'wikiId' => wfWikiId(),
-                       'containerPaths' => array( 'data' => $this->filePath )
-               ) );
-               $this->repo = new FSRepo( array(
-                       'name' => 'temp',
-                       'url' => 'http://localhost/thumbtest',
-                       'backend' => $this->backend
-               ) );
-
                $this->handler = new SvgHandler;
        }
 
@@ -46,9 +35,4 @@ class SvgTest extends MediaWikiTestCase {
                        array( 'Wikimedia-logo.svg', array() )
                );
        }
-
-       private function dataFile( $name, $type ) {
-               return new UnregisteredLocalFile( false, $this->repo,
-                       "mwstore://localtesting/data/$name", $type );
-       }
 }
index 14bcac0..d322e47 100644 (file)
@@ -277,7 +277,7 @@ class NewParserTest extends MediaWikiTestCase {
                                        'size'        => 12345,
                                        'width'       => 240,
                                        'height'      => 180,
-                                       'bits'        => 24,
+                                       'bits'        => 0,
                                        'media_type'  => MEDIATYPE_DRAWING,
                                        'mime'        => 'image/svg+xml',
                                        'metadata'    => serialize( array() ),
@@ -293,7 +293,7 @@ class NewParserTest extends MediaWikiTestCase {
                                'size' => 3249,
                                'width' => 2480,
                                'height' => 3508,
-                               'bits' => 24,
+                               'bits' => 0,
                                'media_type' => MEDIATYPE_BITMAP,
                                'mime' => 'image/vnd.djvu',
                                'metadata' => '<?xml version="1.0" ?>
@@ -489,19 +489,19 @@ class NewParserTest extends MediaWikiTestCase {
                $backend = RepoGroup::singleton()->getLocalRepo()->getBackend();
                $backend->prepare( array( 'dir' => "$base/local-public/3/3a" ) );
                $backend->store( array(
-                       'src' => "$IP/skins/monobook/headbg.jpg", 'dst' => "$base/local-public/3/3a/Foobar.jpg"
+                       'src' => "$IP/tests/phpunit/data/parser/headbg.jpg", 'dst' => "$base/local-public/3/3a/Foobar.jpg"
                ) );
                $backend->prepare( array( 'dir' => "$base/local-public/e/ea" ) );
                $backend->store( array(
-                       'src' => "$IP/skins/monobook/wiki.png", 'dst' => "$base/local-public/e/ea/Thumb.png"
+                       'src' => "$IP/tests/phpunit/data/parser/wiki.png", 'dst' => "$base/local-public/e/ea/Thumb.png"
                ) );
                $backend->prepare( array( 'dir' => "$base/local-public/0/09" ) );
                $backend->store( array(
-                       'src' => "$IP/skins/monobook/headbg.jpg", 'dst' => "$base/local-public/0/09/Bad.jpg"
+                       'src' => "$IP/tests/phpunit/data/parser/headbg.jpg", 'dst' => "$base/local-public/0/09/Bad.jpg"
                ) );
                $backend->prepare( array( 'dir' => "$base/local-public/5/5f" ) );
                $backend->store( array(
-                       'src' => "$IP/tests/phpunit/data/media/LoremIpsum.djvu", 'dst' => "$base/local-public/5/5f/LoremIpsum.djvu"
+                       'src' => "$IP/tests/phpunit/data/parser/LoremIpsum.djvu", 'dst' => "$base/local-public/5/5f/LoremIpsum.djvu"
                ) );
 
                // No helpful SVG file to copy, so make one ourselves
index c73666d..c024cee 100644 (file)
@@ -56,4 +56,32 @@ class ParserOutputTest extends MediaWikiTestCase {
                $this->assertNull( $po->getExtensionData( "one" ) );
                $this->assertEquals( "Bar", $po->getExtensionData( "two" ) );
        }
+
+       /**
+        * @covers ParserOutput::setProperty
+        * @covers ParserOutput::getProperty
+        * @covers ParserOutput::unsetProperty
+        * @covers ParserOutput::getProperties
+        */
+       public function testProperties() {
+               $po = new ParserOutput();
+
+               $po->setProperty( 'foo', 'val' );
+
+               $properties = $po->getProperties();
+               $this->assertEquals( $po->getProperty( 'foo' ), 'val' );
+               $this->assertEquals( $properties['foo'], 'val' );
+
+               $po->setProperty( 'foo', 'second val' );
+
+               $properties = $po->getProperties();
+               $this->assertEquals( $po->getProperty( 'foo' ), 'second val' );
+               $this->assertEquals( $properties['foo'], 'second val' );
+
+               $po->unsetProperty( 'foo' );
+
+               $properties = $po->getProperties();
+               $this->assertEquals( $po->getProperty( 'foo' ), false );
+               $this->assertArrayNotHasKey( 'foo', $properties );
+       }
 }
diff --git a/tests/phpunit/includes/poolcounter/PoolCounterTest.php b/tests/phpunit/includes/poolcounter/PoolCounterTest.php
new file mode 100644 (file)
index 0000000..2d31d08
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+
+// We will use this class with getMockForAbstractClass to create a concrete mock class. That call will die if the
+// contructor is not public, unless we use disableOriginalConstructor(), in which case we could not test the constructor.
+abstract class PoolCounterAbstractMock extends PoolCounter {
+       public function __construct() {
+               call_user_func_array( 'parent::__construct', func_get_args() );
+       }
+}
+
+class PoolCounterTest extends MediaWikiTestCase {
+       public function testConstruct() {
+               $poolCounterConfig = array(
+                       'class' => 'PoolCounterMock',
+                       'timeout' => 10,
+                       'workers' => 10,
+                       'maxqueue' => 100,
+               );
+
+               $poolCounter = $this->getMockBuilder( 'PoolCounterAbstractMock' )
+                       ->setConstructorArgs( array( $poolCounterConfig, 'testCounter', 'someKey' ) )
+                       // don't mock anything - the proper syntax would be setMethods(null), but due to a PHPUnit bug that
+                       // does not work with getMockForAbstractClass()
+                       ->setMethods( array( 'idontexist' ) )
+                       ->getMockForAbstractClass();
+               $this->assertInstanceOf( 'PoolCounter', $poolCounter );
+       }
+
+       public function testConstructWithSlots() {
+               $poolCounterConfig = array(
+                       'class' => 'PoolCounterMock',
+                       'timeout' => 10,
+                       'workers' => 10,
+                       'slots' => 2,
+                       'maxqueue' => 100,
+               );
+
+               $poolCounter = $this->getMockBuilder( 'PoolCounterAbstractMock' )
+                       ->setConstructorArgs( array( $poolCounterConfig, 'testCounter', 'key' ) )
+                       ->setMethods( array( 'idontexist' ) ) // don't mock anything
+                       ->getMockForAbstractClass();
+               $this->assertInstanceOf( 'PoolCounter', $poolCounter );
+       }
+
+       public function testHashKeyIntoSlots() {
+               $poolCounter = $this->getMockBuilder( 'PoolCounterAbstractMock' )
+                       // don't mock anything - the proper syntax would be setMethods(null), but due to a PHPUnit bug that
+                       // does not work with getMockForAbstractClass()
+                       ->setMethods( array( 'idontexist' ) )
+                       ->disableOriginalConstructor()
+                       ->getMockForAbstractClass();
+
+               $hashKeyIntoSlots = new ReflectionMethod($poolCounter, 'hashKeyIntoSlots' );
+               $hashKeyIntoSlots->setAccessible( true );
+
+
+               $keysWithTwoSlots = $keysWithFiveSlots = array();
+               foreach ( range( 1, 100 ) as $i ) {
+                       $keysWithTwoSlots[] = $hashKeyIntoSlots->invoke( $poolCounter, 'key ' . $i, 2 );
+                       $keysWithFiveSlots[] = $hashKeyIntoSlots->invoke( $poolCounter, 'key ' . $i, 5 );
+               }
+
+               $this->assertArrayEquals( range( 0, 1 ), array_unique( $keysWithTwoSlots ) );
+               $this->assertArrayEquals( range( 0, 4 ), array_unique( $keysWithFiveSlots ) );
+
+               // make sure it is deterministic
+               $this->assertEquals(
+                       $hashKeyIntoSlots->invoke( $poolCounter, 'asdfgh', 1000 ),
+                       $hashKeyIntoSlots->invoke( $poolCounter, 'asdfgh', 1000 )
+               );
+       }
+}
index b25e9b0..fa22d34 100644 (file)
@@ -2,6 +2,52 @@
 
 class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
 
+       /**
+        * @covers ResourceLoaderFileModule::getAllSkinStyleFiles
+        */
+       public function testGetAllSkinStyleFiles() {
+               $context = self::getResourceLoaderContext();
+
+               $baseParams = array(
+                       'scripts' => array(
+                               'foo.js',
+                               'bar.js',
+                       ),
+                       'styles' => array(
+                               'foo.css',
+                               'bar.css' => array( 'media' => 'print' ),
+                               'screen.less' => array( 'media' => 'screen' ),
+                               'screen-query.css' => array( 'media' => 'screen and (min-width: 400px)' ),
+                       ),
+                       'skinStyles' => array(
+                               'default' => 'quux-fallback.less',
+                               'vector' => array(
+                                       'baz-vector.css',
+                                       'quux-vector.less',
+                               ),
+                       ),
+                       'messages' => array(
+                               'hello',
+                               'world',
+                       ),
+               );
+
+               $module = new ResourceLoaderFileModule( $baseParams );
+
+               $this->assertEquals(
+                       array(
+                               'foo.css',
+                               'baz-vector.css',
+                               'quux-vector.less',
+                               'quux-fallback.less',
+                               'bar.css',
+                               'screen.less',
+                               'screen-query.css',
+                       ),
+                       array_map( 'basename', $module->getAllStyleFiles() )
+               );
+       }
+
        /**
         * @covers ResourceLoaderModule::getDefinitionSummary
         * @covers ResourceLoaderFileModule::getDefinitionSummary
index c4412de..df08972 100644 (file)
@@ -114,6 +114,67 @@ mw.loader.addSource( {
         "example"
     ]
 ] );'
+                       ) ),
+                       array( array(
+                               'msg' => 'Conditional dependency function',
+                               'modules' => array(
+                                       'test.x.core' => new ResourceLoaderTestModule(),
+                                       'test.x.polyfill' => new ResourceLoaderTestModule( array(
+                                               'skipFunction' => 'return true;'
+                                       ) ),
+                                       'test.y.polyfill' => new ResourceLoaderTestModule( array(
+                                               'skipFunction' =>
+                                                       'return !!(' .
+                                                       '    window.JSON &&' .
+                                                       '    JSON.parse &&' .
+                                                       '    JSON.stringify' .
+                                                       ');'
+                                       ) ),
+                                       'test.z.foo' => new ResourceLoaderTestModule( array(
+                                               'dependencies' => array(
+                                                       'test.x.core',
+                                                       'test.x.polyfil',
+                                                       'test.y.polyfil',
+                                               ),
+                                       ) ),
+                               ),
+                               'out' => '
+mw.loader.addSource( {
+    "local": {
+        "loadScript": "/w/load.php",
+        "apiScript": "/w/api.php"
+    }
+} );mw.loader.register( [
+    [
+        "test.x.core",
+        "1388534400"
+    ],
+    [
+        "test.x.polyfill",
+        "1388534400",
+        [],
+        null,
+        "local",
+        "return true;"
+    ],
+    [
+        "test.y.polyfill",
+        "1388534400",
+        [],
+        null,
+        "local",
+        "return !!(    window.JSON \u0026\u0026    JSON.parse \u0026\u0026    JSON.stringify);"
+    ],
+    [
+        "test.z.foo",
+        "1388534400",
+        [
+            "test.x.core",
+            "test.x.polyfil",
+            "test.y.polyfil"
+        ]
+    ]
+] );',
                        ) ),
                        array( array(
                                // This may seem like an edge case, but a plain MediaWiki core install
@@ -278,4 +339,77 @@ mw.loader.addSource( {
                );
        }
 
+       public static function provideRegistrations() {
+               return array(
+                       array( array(
+                               'test.blank' => new ResourceLoaderTestModule(),
+                               'test.min' => new ResourceLoaderTestModule( array(
+                                       'skipFunction' =>
+                                               'return !!(' .
+                                               '    window.JSON &&' .
+                                               '    JSON.parse &&' .
+                                               '    JSON.stringify' .
+                                               ');',
+                                       'dependencies' => array(
+                                               'test.blank',
+                                       ),
+                               ) ),
+                       ) )
+               );
+       }
+       /**
+        * @dataProvider provideRegistrations
+        */
+       public function testRegistrationsMinified( $modules ) {
+               $this->setMwGlobals( 'wgResourceLoaderDebug', false );
+
+               $context = self::getResourceLoaderContext();
+               $rl = $context->getResourceLoader();
+               $rl->register( $modules );
+               $this->assertEquals(
+'mw.loader.addSource({"local":{"loadScript":"/w/load.php","apiScript":"/w/api.php"}});'
+. 'mw.loader.register(['
+. '["test.blank","1388534400"],'
+. '["test.min","1388534400",["test.blank"],null,"local",'
+. '"return!!(window.JSON\u0026\u0026JSON.parse\u0026\u0026JSON.stringify);"'
+. ']]);',
+                       ResourceLoaderStartUpModule::getModuleRegistrations( $context ),
+                       'Minified output'
+               );
+       }
+
+       /**
+        * @dataProvider provideRegistrations
+        */
+       public function testRegistrationsUnminified( $modules ) {
+               $context = self::getResourceLoaderContext();
+               $rl = $context->getResourceLoader();
+               $rl->register( $modules );
+               $this->assertEquals(
+'mw.loader.addSource( {
+    "local": {
+        "loadScript": "/w/load.php",
+        "apiScript": "/w/api.php"
+    }
+} );mw.loader.register( [
+    [
+        "test.blank",
+        "1388534400"
+    ],
+    [
+        "test.min",
+        "1388534400",
+        [
+            "test.blank"
+        ],
+        null,
+        "local",
+        "return !!(    window.JSON \u0026\u0026    JSON.parse \u0026\u0026    JSON.stringify);"
+    ]
+] );',
+                       ResourceLoaderStartUpModule::getModuleRegistrations( $context ),
+                       'Unminified output'
+               );
+       }
+
 }
index 1267268..ebe347f 100644 (file)
@@ -278,38 +278,6 @@ class IPTest extends MediaWikiTestCase {
                $this->assertNull( IP::sanitizeIP( ' ' ) );
        }
 
-       /**
-        * @covers IP::toUnsigned
-        * @dataProvider provideToUnsigned
-        */
-       public function testToUnsigned( $expected, $input ) {
-               $result = IP::toUnsigned( $input );
-               $this->assertTrue( $result === false || is_string( $result ) || is_int( $result ) );
-               $this->assertEquals( $expected, $result );
-       }
-
-       /**
-        * Provider for IP::testToUnsigned()
-        */
-       public static function provideToUnsigned() {
-               return array(
-                       array( 1, '0.0.0.1' ),
-                       array( 16909060, '1.2.3.4' ),
-                       array( 2130706433, '127.0.0.1' ),
-                       array( '2147483648', '128.0.0.0' ),
-                       array( 2130706440, '127.0.0.08' ),
-                       array( 2130706441, '127.0.0.09' ),
-                       array( '3735931646', '222.173.202.254' ),
-                       array( pow( 2, 32 ) - 1, '255.255.255.255' ),
-                       array( false, 'IN.VA.LI.D' ),
-                       array( 1, '::1' ),
-                       array( '42540766452641154071740215577757643572', '2001:0db8:85a3:0000:0000:8a2e:0370:7334' ),
-                       array( '42540766452641154071740215577757643572', '2001:db8:85a3::8a2e:0370:7334' ),
-                       array( false, 'IN:VA::LI:D' ),
-                       array( false, ':::1' )
-               );
-       }
-
        /**
         * @covers IP::toHex
         * @dataProvider provideToHex
diff --git a/tests/phpunit/includes/utils/MWCryptHKDFTest.php b/tests/phpunit/includes/utils/MWCryptHKDFTest.php
new file mode 100644 (file)
index 0000000..7e37534
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+/**
+ *
+ * @group HKDF
+ */
+
+class MWCryptHKDFTest extends MediaWikiTestCase {
+
+       /**
+        * Test basic usage works
+        */
+       public function testGenerate() {
+               $a = MWCryptHKDF::generateHex( 64 );
+               $b = MWCryptHKDF::generateHex( 64 );
+
+               $this->assertTrue( strlen( $a ) == 64, "MWCryptHKDF produced fewer bytes than expected" );
+               $this->assertTrue( strlen( $b ) == 64, "MWCryptHKDF produced fewer bytes than expected" );
+               $this->assertFalse( $a == $b, "Two runs of MWCryptHKDF produced the same result." );
+       }
+
+       /**
+        * @dataProvider providerRfc5869
+        */
+       public function testRfc5869( $hash, $ikm, $salt, $info, $L, $prk, $okm ) {
+               $ikm = pack( 'H*', $ikm );
+               $salt = pack( 'H*', $salt );
+               $info = pack( 'H*', $info );
+               $okm = pack( 'H*', $okm );
+               $result = MWCryptHKDF::HKDF( $hash, $ikm, $salt, $info, $L );
+               $this->assertEquals( $okm, $result );
+       }
+
+       /**
+        * Test vectors from Appendix A on http://tools.ietf.org/html/rfc5869
+        */
+       public static function providerRfc5869() {
+
+               return array(
+                       // A.1
+                       array( 'sha256',
+                               '0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', // ikm
+                               '000102030405060708090a0b0c', // salt
+                               'f0f1f2f3f4f5f6f7f8f9', // context
+                               42, // bytes
+                               '077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5', // prk
+                               '3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865' // okm
+                       ),
+                       // A.2
+                       array( 'sha256',
+                               '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f',
+                               '606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf',
+                               'b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff',
+                               82,
+                               '06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244',
+                               'b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87'
+                       ),
+                       // A.3
+                       array( 'sha256',
+                               '0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', // ikm
+                               '', // salt
+                               '', // context
+                               42, // bytes
+                               '19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04', // prk
+                               '8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8' // okm
+                       ),
+                       // A.4
+                       array( 'sha1',
+                               '0b0b0b0b0b0b0b0b0b0b0b', // ikm
+                               '000102030405060708090a0b0c', // salt
+                               'f0f1f2f3f4f5f6f7f8f9', // context
+                               42, // bytes
+                               '9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243', // prk
+                               '085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896' // okm
+                       ),
+                       // A.5
+                       array( 'sha1',
+                               '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f', // ikm
+                               '606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf', // salt
+                               'b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', // context
+                               82, // bytes
+                               '8adae09a2a307059478d309b26c4115a224cfaf6', // prk
+                               '0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4' // okm
+                       ),
+               );
+
+       }
+
+
+}
index 2393299..f5cd892 100644 (file)
@@ -21,6 +21,7 @@ class StructureTest extends MediaWikiTestCase {
                        'ApiQueryTestBase',
                        'ApiQueryContinueTestBase',
                        'MediaWikiLangTestCase',
+                       'MediaWikiMediaTestCase',
                        'MediaWikiTestCase',
                        'ResourceLoaderTestCase',
                        'PHPUnit_Framework_TestCase',
index 4bc29cd..b27337b 100644 (file)
@@ -188,10 +188,10 @@ class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
                }
 
                wfMkdirParents( $dir . '/3/3a', null, __METHOD__ );
-               copy( "$IP/skins/monobook/headbg.jpg", "$dir/3/3a/Foobar.jpg" );
+               copy( "$IP/tests/phpunit/data/upload/headbg.jpg", "$dir/3/3a/Foobar.jpg" );
 
                wfMkdirParents( $dir . '/0/09', null, __METHOD__ );
-               copy( "$IP/skins/monobook/headbg.jpg", "$dir/0/09/Bad.jpg" );
+               copy( "$IP/tests/phpunit/data/upload/headbg.jpg", "$dir/0/09/Bad.jpg" );
 
                return $dir;
        }
index f6eff77..ee729e6 100644 (file)
@@ -30,15 +30,30 @@ require_once __DIR__ . '/../../../includes/Xml.php';
 $moduleImplementations = array(
        'testUsesMissing' => "
 mw.loader.implement( 'testUsesMissing', function () {
-       QUnit.ok( false, 'Module test.usesMissing script should not run.');
+       QUnit.ok( false, 'Module usesMissing script should not run.' );
        QUnit.start();
 }, {}, {});
 ",
 
        'testUsesNestedMissing' => "
 mw.loader.implement( 'testUsesNestedMissing', function () {
-       QUnit.ok( false, 'Module testUsesNestedMissing script should not run.');
+       QUnit.ok( false, 'Module testUsesNestedMissing script should not run.' );
+       QUnit.start();
+}, {}, {});
+",
+
+       'testSkipped' =>"
+mw.loader.implement( 'testSkipped', function () {
+       QUnit.ok( false, 'Module testSkipped was supposed to be skipped.' );
 }, {}, {});
+",
+
+       'testNotSkipped' =>"
+mw.loader.implement( 'testNotSkipped', function () {}, {}, {});
+",
+
+       'testUsesSkippable' =>"
+mw.loader.implement( 'testUsesSkippable', function () {}, {}, {});
 ",
 );
 
index 60a63f9..f6ea1b4 100644 (file)
@@ -30,7 +30,7 @@
                //strings appended to title to make sure updateTooltipAccessKeys handles them correctly
                updateTooltipAccessKeysTestData = [ '', ' [a]', ' [test-a]', ' [alt-b]' ];
 
-       function makeInput ( title, accessKey ) {
+       function makeInput( title, accessKey ) {
                //The properties aren't escaped, so make sure you don't call this function with values that need to be escaped!
                return '<input title="' + title + '" ' + ( accessKey ? 'accessKey="' + accessKey + '" ' : '' ) + ' />';
        }
index e189524..842817f 100644 (file)
@@ -48,7 +48,7 @@
                // Put this text in the span and verify it doesn't fit
                $span.text( spanTextNew );
                // In IE6 width works like min-width, allow IE6's width to be "equal to"
-               if ( $.browser.msie && Number( $.browser.version ) === 6 ) {
+               if ( $.client.test( { 'msie': 6 }, $.client.profile(), true ) ) {
                        assert.gtOrEq( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more) - IE6: Maybe equal to as well due to width behaving like min-width in IE6' );
                } else {
                        assert.gt( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more)' );
index 25d9f73..2191c3b 100644 (file)
@@ -32,7 +32,7 @@
                }, opt.after );
 
                QUnit.test( opt.description, function ( assert ) {
-                       var $textarea, start, end, options, text,
+                       var $textarea, start, end, options, text, selected,
                                tests = 1;
                        if ( opt.after.selected !== null ) {
                                tests++;
@@ -63,7 +63,7 @@
                        assert.equal( text, opt.after.text, 'Checking full text after encapsulation' );
 
                        if ( opt.after.selected !== null ) {
-                               var selected = $textarea.textSelection( 'getSelection' );
+                               selected = $textarea.textSelection( 'getSelection' );
                                assert.equal( selected, opt.after.selected, 'Checking selected text after encapsulation.' );
                        }
 
 
        caretSample = 'Some big text that we like to work with. Nothing fancy... you know what I mean?';
 
-       /*
-        // @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'
-        });
-        */
+/*
+       // @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'
+       });
+*/
 
        caretTest( {
                description: 'set/getCaretPosition with forced empty selection',
index 2cca7c8..f156c72 100644 (file)
@@ -99,7 +99,7 @@
                this.server.respond();
        } );
 
-       QUnit.test( 'getToken( cached )', function ( assert ) {
+       QUnit.test( 'getToken( pre-populated )', function ( assert ) {
                QUnit.expect( 2 );
 
                var api = new mw.Api();
                assert.equal( this.server.requests.length, 0, 'Requests made' );
        } );
 
-       QUnit.test( 'getToken( uncached )', function ( assert ) {
-               QUnit.expect( 2 );
+       QUnit.test( 'getToken()', function ( assert ) {
+               QUnit.expect( 5 );
 
-               var api = new mw.Api();
+               var test = this,
+                       api = new mw.Api();
 
                // Get a token of a type that isn't prepopulated by user.tokens.
                // Could use "block" or "delete" here, but those could in theory
                // be added to user.tokens, use a fake one instead.
                api.getToken( 'testaction' )
                        .done( function ( token ) {
-                               assert.ok( token.length, 'Got a token' );
+                               assert.ok( token.length, 'Got testaction token' );
                        } )
                        .fail( function ( err ) {
-                               assert.equal( '', err, 'API error' );
+                               assert.equal( err, '', 'API error' );
+                       } );
+               api.getToken( 'testaction' )
+                       .done( function ( token ) {
+                               assert.ok( token.length, 'Got testaction token (cached)' );
+                       } )
+                       .fail( function ( err ) {
+                               assert.equal( err, '', 'API error' );
                        } );
 
-               assert.equal( this.server.requests.length, 1, 'Requests made' );
+               // Don't cache error (bug 65268)
+               api.getToken( 'testaction2' )
+                       .fail( function ( err ) {
+                               assert.equal( err, 'bite-me', 'Expected error' );
+                       } )
+                       .always( function () {
+                               // Make this request after the first one has finished.
+                               // If we make it simultaneously we still want it to share
+                               // the cache, but as soon as it is fulfilled as error we
+                               // reject it so that the next one tries fresh.
+                               api.getToken( 'testaction2' )
+                                       .done( function ( token ) {
+                                               assert.ok( token.length, 'Got testaction2 token (error was not be cached)' );
+                                       } )
+                                       .fail( function ( err ) {
+                                               assert.equal( err, '', 'API error' );
+                                       } );
+
+                               assert.equal( test.server.requests.length, 3, 'Requests made' );
+
+                               test.server.requests[2].respond( 200, { 'Content-Type': 'application/json' },
+                                       '{ "tokens": { "testaction2token": "0123abc" } }'
+                               );
+                       } );
 
-               this.server.respond( function ( request ) {
-                       request.respond( 200, { 'Content-Type': 'application/json' },
-                               '{ "tokens": { "testactiontoken": "0123abc" } }'
-                       );
-               } );
+               this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "tokens": { "testactiontoken": "0123abc" } }'
+               );
+
+               this.server.requests[1].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "error": { "code": "bite-me", "info": "Smite me, O Mighty Smiter" } }'
+               );
        } );
 
        QUnit.test( 'postWithToken( tokenType, params )', function ( assert ) {
index 682eb3d..bc4b253 100644 (file)
                        expectedMultipleBars,
                        expectedSpecialCharacters;
 
-               /*
-                The below three are all identical to or based on real messages.  For disambiguations-text,
-                the bold was removed because it is not yet implemented.
-                */
+               // The below three are all identical to or based on real messages.  For disambiguations-text,
+               // the bold was removed because it is not yet implemented.
 
                assert.htmlEqual(
                        formatParse( 'jquerymsg-test-statistics-users' ),
index 90700ca..9681330 100644 (file)
                }
        } ) );
 
+       mw.loader.addSource(
+               'testloader',
+               {
+                       loadScript: QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/load.mock.php' )
+               }
+       );
+
        QUnit.test( 'Initial check', 8, function ( assert ) {
                assert.ok( window.jQuery, 'jQuery defined' );
                assert.ok( window.$, '$ defined' );
                assert.strictEqual( window.$j, window.jQuery, '$j alias to jQuery' );
                this.restoreWarnings();
 
+               // window.mw and window.mediaWiki are not deprecated, but for some reason
+               // PhantomJS is triggerring the accessors on all mw.* properties in this test,
+               // and with that lots of unrelated deprecation notices.
+               this.suppressWarnings();
                assert.ok( window.mediaWiki, 'mediaWiki defined' );
                assert.ok( window.mw, 'mw defined' );
                assert.strictEqual( window.mw, window.mediaWiki, 'mw alias to mediaWiki' );
+               this.restoreWarnings();
        } );
 
        QUnit.test( 'mw.Map', 28, function ( assert ) {
        } );
 
        QUnit.asyncTest( 'mw.loader dependency handling', 5, function ( assert ) {
-               mw.loader.addSource(
-                       'testloader',
-                       {
-                               loadScript: QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/load.mock.php' )
-                       }
-               );
-
                mw.loader.register( [
                        // [module, version, dependencies, group, source]
                        ['testMissing', '1', [], null, 'testloader'],
                );
        } );
 
+       QUnit.asyncTest( 'mw.loader skin-function handling', 5, function ( assert ) {
+               mw.loader.register( [
+                       // [module, version, dependencies, group, source, skip]
+                       ['testSkipped', '1', [], null, 'testloader', 'return true;'],
+                       ['testNotSkipped', '1', [], null, 'testloader', 'return false;'],
+                       ['testUsesSkippable', '1', ['testSkipped', 'testNotSkipped'], null, 'testloader']
+               ] );
+
+               function verifyModuleStates() {
+                       assert.equal( mw.loader.getState( 'testSkipped' ), 'ready', 'Module is ready when skipped' );
+                       assert.equal( mw.loader.getState( 'testNotSkipped' ), 'ready', 'Module is ready when not skipped but loaded' );
+                       assert.equal( mw.loader.getState( 'testUsesSkippable' ), 'ready', 'Module is ready when skippable dependencies are ready' );
+               }
+
+               mw.loader.using( ['testUsesSkippable'],
+                       function () {
+                               assert.ok( true, 'Success handler should be invoked.' );
+                               assert.ok( true ); // Dummy to match error handler and reach QUnit expect()
+
+                               verifyModuleStates();
+
+                               QUnit.start();
+                       },
+                       function ( e, badmodules ) {
+                               assert.ok( false, 'Error handler should not be invoked.' );
+                               assert.deepEqual( badmodules, [], 'Bad modules as expected.' );
+
+                               verifyModuleStates();
+
+                               QUnit.start();
+                       }
+               );
+       } );
+
        QUnit.asyncTest( 'mw.loader( "//protocol-relative" ) (bug 30825)', 2, function ( assert ) {
                // This bug was actually already fixed in 1.18 and later when discovered in 1.17.
                // Test is for regressions!
index 3f856b9..e43516b 100644 (file)
@@ -1,5 +1,10 @@
 ( function ( mw, $ ) {
-       QUnit.module( 'mediawiki.toc', QUnit.newMwEnvironment() );
+       QUnit.module( 'mediawiki.toc', QUnit.newMwEnvironment( {
+               setup: function () {
+                       // Prevent live cookies like mw_hidetoc=1 from interferring with the test
+                       this.stub( $, 'cookie' ).returns( null );
+               }
+       } ) );
 
        QUnit.asyncTest( 'toggleToc', 4, function ( assert ) {
                var tocHtml, $toggleLink, $tocList;
index 0bfd501..91321a2 100644 (file)
@@ -9,16 +9,14 @@
                assert.ok( mw.user.options instanceof mw.Map, 'options instance of mw.Map' );
        } );
 
-       QUnit.test( 'user status', 11, function ( assert ) {
+       QUnit.test( 'user status', 7, function ( assert ) {
 
                // Forge an anonymous user
                mw.config.set( 'wgUserName', null );
                delete mw.config.values.wgUserId;
 
                assert.strictEqual( mw.user.getName(), null, 'user.getName() returns null when anonymous' );
-               assert.strictEqual( mw.user.name(), null, 'user.name() compatibility' );
                assert.assertTrue( mw.user.isAnon(), 'user.isAnon() returns true when anonymous' );
-               assert.assertTrue( mw.user.anonymous(), 'user.anonymous() compatibility' );
                assert.strictEqual( mw.user.getId(), 0, 'user.getId() returns 0 when anonymous' );
 
                // Not part of startUp module
@@ -26,9 +24,7 @@
                mw.config.set( 'wgUserId', 123 );
 
                assert.equal( mw.user.getName(), 'John', 'user.getName() returns username when logged-in' );
-               assert.equal( mw.user.name(), 'John', 'user.name() compatibility' );
                assert.assertFalse( mw.user.isAnon(), 'user.isAnon() returns false when logged-in' );
-               assert.assertFalse( mw.user.anonymous(), 'user.anonymous() compatibility' );
                assert.strictEqual( mw.user.getId(), 123, 'user.getId() returns correct ID when logged-in' );
 
                assert.equal( mw.user.id(), 'John', 'user.id Returns username when logged-in' );
index 1526679..4401ead 100644 (file)
                var a = mw.util.jsMessage( 'MediaWiki is <b>Awesome</b>.' );
                this.restoreWarnings();
                assert.ok( a, 'Basic checking of return value' );
-
-               // Clean up
-               $( '#mw-js-message' ).remove();
        } );
 
        QUnit.test( 'validateEmail', 6, function ( assert ) {
index 818b24e..a034031 100644 (file)
@@ -674,11 +674,12 @@ class DjVuSupport {
         * Initialises DjVu tools global with default values
         */
        public function __construct() {
-               global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML, $wgFileExtensions;
+               global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML, $wgFileExtensions, $wgDjvuTxt;
 
                $wgDjvuRenderer = $wgDjvuRenderer ? $wgDjvuRenderer : '/usr/bin/ddjvu';
                $wgDjvuDump = $wgDjvuDump ? $wgDjvuDump : '/usr/bin/djvudump';
                $wgDjvuToXML = $wgDjvuToXML ? $wgDjvuToXML : '/usr/bin/djvutoxml';
+               $wgDjvuTxt = $wgDjvuTxt ? $wgDjvuTxt : '/usr/bin/djvutxt';
 
                if ( !in_array( 'djvu', $wgFileExtensions ) ) {
                        $wgFileExtensions[] = 'djvu';
@@ -691,10 +692,11 @@ class DjVuSupport {
         * @return bool
         */
        public function isEnabled() {
-               global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML;
+               global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML, $wgDjvuTxt;
 
                return is_executable( $wgDjvuRenderer )
                        && is_executable( $wgDjvuDump )
-                       && is_executable( $wgDjvuToXML );
+                       && is_executable( $wgDjvuToXML )
+                       && is_executable( $wgDjvuTxt );
        }
 }