Merge "Salt the "nsToken" used for Special:Search namespace remembering"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 30 Jun 2014 19:27:58 +0000 (19:27 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 30 Jun 2014 19:27:58 +0000 (19:27 +0000)
943 files changed:
RELEASE-NOTES-1.24
docs/hooks.txt
includes/Article.php [deleted file]
includes/AutoLoader.php
includes/Category.php
includes/CategoryPage.php [deleted file]
includes/CategoryViewer.php
includes/DefaultSettings.php
includes/Defines.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/HtmlFormatter.php
includes/ImagePage.php [deleted file]
includes/ImageQueryPage.php [deleted file]
includes/MagicWord.php
includes/MimeMagic.php
includes/OutputPage.php
includes/PageQueryPage.php [deleted file]
includes/PrefixSearch.php
includes/QueryPage.php [deleted file]
includes/Setup.php
includes/SiteStats.php
includes/Title.php
includes/User.php
includes/UserMailer.php
includes/WikiCategoryPage.php [deleted file]
includes/WikiFilePage.php [deleted file]
includes/WikiPage.php [deleted file]
includes/actions/EditAction.php
includes/actions/InfoAction.php
includes/api/ApiBase.php
includes/api/ApiParse.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQuerySiteinfo.php
includes/cache/MessageCache.php
includes/config/GlobalVarConfig.php
includes/context/DerivativeContext.php
includes/context/RequestContext.php
includes/dao/IDBAccessObject.php
includes/db/CloneDatabase.php
includes/db/Database.php
includes/db/DatabaseMysqlBase.php
includes/db/LoadBalancer.php
includes/debug/Debug.php
includes/deferred/SearchUpdate.php
includes/diff/TableDiffFormatter.php
includes/gallery/ImageGalleryBase.php
includes/htmlform/HTMLCheckField.php [changed mode: 0755->0644]
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLSelectAndOtherField.php
includes/htmlform/HTMLSelectOrOtherField.php
includes/installer/DatabaseUpdater.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MssqlUpdater.php
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/i18n/bar.json
includes/installer/i18n/de.json
includes/installer/i18n/et.json
includes/installer/i18n/it.json
includes/installer/i18n/nan.json
includes/installer/i18n/tr.json
includes/installer/i18n/tyv.json [new file with mode: 0644]
includes/libs/CSSMin.php
includes/logging/LogEventsList.php
includes/logging/PageLangLogFormatter.php [new file with mode: 0644]
includes/objectcache/BagOStuff.php
includes/objectcache/RedisBagOStuff.php
includes/page/Article.php [new file with mode: 0644]
includes/page/CategoryPage.php [new file with mode: 0644]
includes/page/ImagePage.php [new file with mode: 0644]
includes/page/WikiCategoryPage.php [new file with mode: 0644]
includes/page/WikiFilePage.php [new file with mode: 0644]
includes/page/WikiPage.php [new file with mode: 0644]
includes/parser/CoreParserFunctions.php
includes/parser/Parser.php
includes/parser/ParserDiffTest.php [new file with mode: 0644]
includes/parser/Parser_DiffTest.php [deleted file]
includes/poolcounter/PoolWorkArticleView.php [new file with mode: 0644]
includes/profiler/Profiler.php
includes/revisiondelete/RevisionDeleteUser.php
includes/search/SearchDatabase.php
includes/search/SearchEngine.php
includes/specialpage/FormSpecialPage.php
includes/specialpage/ImageQueryPage.php [new file with mode: 0644]
includes/specialpage/PageQueryPage.php [new file with mode: 0644]
includes/specialpage/QueryPage.php [new file with mode: 0644]
includes/specialpage/RedirectSpecialPage.php
includes/specialpage/SpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specialpage/WantedQueryPage.php [new file with mode: 0644]
includes/specials/SpecialAllMessages.php
includes/specials/SpecialAllPages.php
includes/specials/SpecialContributions.php
includes/specials/SpecialCreateAccount.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialExpandTemplates.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialLog.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialPageLanguage.php [new file with mode: 0644]
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialSearch.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWatchlist.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/upload/UploadBase.php
includes/utils/UIDGenerator.php
languages/Language.php
languages/i18n/ace.json
languages/i18n/aeb.json
languages/i18n/af.json
languages/i18n/aln.json
languages/i18n/am.json
languages/i18n/an.json
languages/i18n/ang.json
languages/i18n/ar.json
languages/i18n/arc.json
languages/i18n/arn.json
languages/i18n/ary.json
languages/i18n/arz.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/avk.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/bar.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bho.json
languages/i18n/bjn.json
languages/i18n/bn.json
languages/i18n/bo.json
languages/i18n/bpy.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cdo.json
languages/i18n/ce.json
languages/i18n/ceb.json
languages/i18n/ch.json
languages/i18n/chy.json [new file with mode: 0644]
languages/i18n/ckb.json
languages/i18n/co.json
languages/i18n/cps.json
languages/i18n/cr.json [new file with mode: 0644]
languages/i18n/crh-cyrl.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/csb.json
languages/i18n/cu.json
languages/i18n/cv.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dsb.json
languages/i18n/dtp.json
languages/i18n/dv.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/ext.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fo.json
languages/i18n/fr.json
languages/i18n/frp.json
languages/i18n/frr.json
languages/i18n/fur.json
languages/i18n/fy.json
languages/i18n/ga.json
languages/i18n/gag.json
languages/i18n/gan-hans.json
languages/i18n/gan-hant.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/grc.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/gv.json
languages/i18n/hak.json
languages/i18n/haw.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hil.json
languages/i18n/hr.json
languages/i18n/hrx.json
languages/i18n/hsb.json
languages/i18n/ht.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ie.json
languages/i18n/ig.json
languages/i18n/ilo.json
languages/i18n/inh.json
languages/i18n/io.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jam.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kaa.json
languages/i18n/kab.json
languages/i18n/kbd-cyrl.json
languages/i18n/khw.json
languages/i18n/ki.json [new file with mode: 0644]
languages/i18n/kiu.json
languages/i18n/kk-arab.json
languages/i18n/kk-cyrl.json
languages/i18n/kk-latn.json
languages/i18n/km.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/krc.json
languages/i18n/ksh.json
languages/i18n/ku-latn.json
languages/i18n/kw.json
languages/i18n/ky.json
languages/i18n/la.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/lez.json
languages/i18n/lfn.json
languages/i18n/lg.json
languages/i18n/li.json
languages/i18n/lij.json
languages/i18n/lmo.json
languages/i18n/lo.json
languages/i18n/loz.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/ltg.json
languages/i18n/lus.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/mai.json
languages/i18n/map-bms.json
languages/i18n/mdf.json
languages/i18n/mg.json
languages/i18n/mhr.json
languages/i18n/min.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mn.json
languages/i18n/mr.json
languages/i18n/ms.json
languages/i18n/mt.json
languages/i18n/mwl.json
languages/i18n/my.json
languages/i18n/myv.json
languages/i18n/mzn.json
languages/i18n/nah.json
languages/i18n/nan.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nds.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/nrm.json [new file with mode: 0644]
languages/i18n/nso.json
languages/i18n/oc.json
languages/i18n/or.json
languages/i18n/os.json
languages/i18n/pa.json
languages/i18n/pam.json
languages/i18n/pcd.json
languages/i18n/pdc.json
languages/i18n/pfl.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/pnt.json
languages/i18n/prg.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/qu.json
languages/i18n/qug.json
languages/i18n/rm.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/rw.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/sdc.json
languages/i18n/se.json
languages/i18n/sei.json
languages/i18n/sgs.json
languages/i18n/sh.json
languages/i18n/shi.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sli.json
languages/i18n/so.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/srn.json
languages/i18n/stq.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/sw.json
languages/i18n/szl.json
languages/i18n/ta.json
languages/i18n/tcy.json
languages/i18n/te.json
languages/i18n/tet.json
languages/i18n/tg-cyrl.json
languages/i18n/tg-latn.json
languages/i18n/th.json
languages/i18n/tk.json
languages/i18n/tl.json
languages/i18n/tly.json
languages/i18n/to.json
languages/i18n/tpi.json
languages/i18n/tr.json
languages/i18n/tru.json
languages/i18n/ts.json
languages/i18n/tt-cyrl.json
languages/i18n/tt-latn.json
languages/i18n/tw.json [new file with mode: 0644]
languages/i18n/tyv.json
languages/i18n/tzm.json [new file with mode: 0644]
languages/i18n/ug-arab.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/uz.json
languages/i18n/vec.json
languages/i18n/vep.json
languages/i18n/vi.json
languages/i18n/vmf.json
languages/i18n/vo.json
languages/i18n/vot.json
languages/i18n/vro.json
languages/i18n/wa.json
languages/i18n/war.json
languages/i18n/wo.json
languages/i18n/wuu.json
languages/i18n/xal.json
languages/i18n/xmf.json
languages/i18n/yi.json
languages/i18n/yo.json
languages/i18n/yue.json
languages/i18n/zea.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesEn.php
languages/messages/MessagesKo.php
maintenance/Maintenance.php
maintenance/archives/patch-page_lang.sql [new file with mode: 0644]
maintenance/archives/patch-uploadstash.sql
maintenance/deleteArchivedFiles.inc
maintenance/findHooks.php
maintenance/importImages.php
maintenance/initSiteStats.php
maintenance/mssql/archives/named_constraints.sql [new file with mode: 0644]
maintenance/mssql/archives/patch-page_page_lang.sql [new file with mode: 0644]
maintenance/mssql/tables.sql
maintenance/oracle/archives/patch-page-page_lang.sql [new file with mode: 0644]
maintenance/oracle/tables.sql
maintenance/pageExists.php
maintenance/postgres/tables.sql
maintenance/resources/update-oojs-ui.sh
maintenance/sqlite/archives/patch-page-page_lang.sql [new file with mode: 0644]
maintenance/tables.sql
maintenance/updateSpecialPages.php
mw-config/index.php
resources/Resources.php
resources/lib/es5-shim/es5-shim.js [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png [changed mode: 0755->0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png [changed mode: 0755->0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png [changed mode: 0755->0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png [changed mode: 0755->0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png [changed mode: 0755->0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png [changed mode: 0755->0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png [changed mode: 0755->0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png [changed mode: 0755->0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-icons_222222_256x240.png [changed mode: 0755->0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png [changed mode: 0755->0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-icons_454545_256x240.png [changed mode: 0755->0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-icons_888888_256x240.png [changed mode: 0755->0644]
resources/lib/jquery.ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png [changed mode: 0755->0644]
resources/lib/jquery/jquery.jStorage.js
resources/lib/json2/json2.js [new file with mode: 0644]
resources/lib/moment/lang/ar-sa.js [new file with mode: 0644]
resources/lib/moment/lang/ar.js
resources/lib/moment/lang/az.js [new file with mode: 0644]
resources/lib/moment/lang/bn.js [new file with mode: 0644]
resources/lib/moment/lang/cy.js
resources/lib/moment/lang/da.js
resources/lib/moment/lang/de-at.js [new file with mode: 0644]
resources/lib/moment/lang/el.js
resources/lib/moment/lang/it.js
resources/lib/moment/lang/lt.js
resources/lib/moment/lang/pt.js
resources/lib/moment/lang/ru.js
resources/lib/moment/lang/sr-cyr.js [deleted file]
resources/lib/moment/lang/sr-cyrl.js [new file with mode: 0644]
resources/lib/moment/lang/tzm-la.js [deleted file]
resources/lib/moment/lang/tzm-latn.js [new file with mode: 0644]
resources/lib/moment/moment.js
resources/lib/oojs-ui/oojs-ui-agora.css
resources/lib/oojs-ui/oojs-ui-apex.css
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/oojs-ui.svg.css
resources/lib/oojs/oojs.js
resources/src/es5-skip.js [new file with mode: 0644]
resources/src/jquery.json-deprecate.js [new file with mode: 0644]
resources/src/jquery/jquery.suggestions.js
resources/src/json-skip.js [new file with mode: 0644]
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.page/mediawiki.page.patrol.ajax.js
resources/src/mediawiki.skinning/content.parsoid.less
resources/src/mediawiki.special/mediawiki.special.css
resources/src/mediawiki.special/mediawiki.special.pageLanguage.js [new file with mode: 0644]
resources/src/mediawiki.ui/components/default/buttons.less
resources/src/mediawiki.ui/components/default/forms.less
resources/src/mediawiki.ui/mixins/effects.less
resources/src/mediawiki/mediawiki.inspect.js
resources/src/mediawiki/mediawiki.searchSuggest.js
skins/.gitignore
skins/MonoBook/COPYING [new file with mode: 0644]
skins/MonoBook/MonoBook.php
skins/MonoBook/i18n/aln.json [new file with mode: 0644]
skins/MonoBook/i18n/an.json [new file with mode: 0644]
skins/MonoBook/i18n/ar.json [new file with mode: 0644]
skins/MonoBook/i18n/arz.json [new file with mode: 0644]
skins/MonoBook/i18n/ast.json [new file with mode: 0644]
skins/MonoBook/i18n/az.json [new file with mode: 0644]
skins/MonoBook/i18n/bcc.json [new file with mode: 0644]
skins/MonoBook/i18n/bcl.json [new file with mode: 0644]
skins/MonoBook/i18n/be-tarask.json [new file with mode: 0644]
skins/MonoBook/i18n/be.json [new file with mode: 0644]
skins/MonoBook/i18n/bg.json [new file with mode: 0644]
skins/MonoBook/i18n/bn.json [new file with mode: 0644]
skins/MonoBook/i18n/br.json [new file with mode: 0644]
skins/MonoBook/i18n/bs.json [new file with mode: 0644]
skins/MonoBook/i18n/ca.json [new file with mode: 0644]
skins/MonoBook/i18n/ce.json [new file with mode: 0644]
skins/MonoBook/i18n/ckb.json [new file with mode: 0644]
skins/MonoBook/i18n/crh-cyrl.json [new file with mode: 0644]
skins/MonoBook/i18n/crh-latn.json [new file with mode: 0644]
skins/MonoBook/i18n/cs.json [new file with mode: 0644]
skins/MonoBook/i18n/da.json [new file with mode: 0644]
skins/MonoBook/i18n/de.json [new file with mode: 0644]
skins/MonoBook/i18n/diq.json [new file with mode: 0644]
skins/MonoBook/i18n/dsb.json [new file with mode: 0644]
skins/MonoBook/i18n/el.json [new file with mode: 0644]
skins/MonoBook/i18n/en.json
skins/MonoBook/i18n/eo.json [new file with mode: 0644]
skins/MonoBook/i18n/es.json [new file with mode: 0644]
skins/MonoBook/i18n/et.json [new file with mode: 0644]
skins/MonoBook/i18n/eu.json [new file with mode: 0644]
skins/MonoBook/i18n/ext.json [new file with mode: 0644]
skins/MonoBook/i18n/fa.json [new file with mode: 0644]
skins/MonoBook/i18n/fi.json [new file with mode: 0644]
skins/MonoBook/i18n/fr.json [new file with mode: 0644]
skins/MonoBook/i18n/frp.json [new file with mode: 0644]
skins/MonoBook/i18n/fur.json [new file with mode: 0644]
skins/MonoBook/i18n/ga.json [new file with mode: 0644]
skins/MonoBook/i18n/gan-hans.json [new file with mode: 0644]
skins/MonoBook/i18n/gan-hant.json [new file with mode: 0644]
skins/MonoBook/i18n/gd.json [new file with mode: 0644]
skins/MonoBook/i18n/gl.json [new file with mode: 0644]
skins/MonoBook/i18n/hak.json [new file with mode: 0644]
skins/MonoBook/i18n/he.json [new file with mode: 0644]
skins/MonoBook/i18n/hi.json [new file with mode: 0644]
skins/MonoBook/i18n/hr.json [new file with mode: 0644]
skins/MonoBook/i18n/hsb.json [new file with mode: 0644]
skins/MonoBook/i18n/hu.json [new file with mode: 0644]
skins/MonoBook/i18n/hy.json [new file with mode: 0644]
skins/MonoBook/i18n/ia.json [new file with mode: 0644]
skins/MonoBook/i18n/id.json [new file with mode: 0644]
skins/MonoBook/i18n/is.json [new file with mode: 0644]
skins/MonoBook/i18n/it.json [new file with mode: 0644]
skins/MonoBook/i18n/ja.json [new file with mode: 0644]
skins/MonoBook/i18n/ka.json [new file with mode: 0644]
skins/MonoBook/i18n/kk-arab.json [new file with mode: 0644]
skins/MonoBook/i18n/kk-cyrl.json [new file with mode: 0644]
skins/MonoBook/i18n/kk-latn.json [new file with mode: 0644]
skins/MonoBook/i18n/km.json [new file with mode: 0644]
skins/MonoBook/i18n/ko.json [new file with mode: 0644]
skins/MonoBook/i18n/krc.json [new file with mode: 0644]
skins/MonoBook/i18n/ksh.json [new file with mode: 0644]
skins/MonoBook/i18n/ku-latn.json [new file with mode: 0644]
skins/MonoBook/i18n/lb.json [new file with mode: 0644]
skins/MonoBook/i18n/lt.json [new file with mode: 0644]
skins/MonoBook/i18n/lzh.json [new file with mode: 0644]
skins/MonoBook/i18n/mg.json [new file with mode: 0644]
skins/MonoBook/i18n/min.json [new file with mode: 0644]
skins/MonoBook/i18n/mk.json [new file with mode: 0644]
skins/MonoBook/i18n/ml.json [new file with mode: 0644]
skins/MonoBook/i18n/mr.json [new file with mode: 0644]
skins/MonoBook/i18n/ms.json [new file with mode: 0644]
skins/MonoBook/i18n/mt.json [new file with mode: 0644]
skins/MonoBook/i18n/mwl.json [new file with mode: 0644]
skins/MonoBook/i18n/nb.json [new file with mode: 0644]
skins/MonoBook/i18n/nds-nl.json [new file with mode: 0644]
skins/MonoBook/i18n/nds.json [new file with mode: 0644]
skins/MonoBook/i18n/ne.json [new file with mode: 0644]
skins/MonoBook/i18n/new.json [new file with mode: 0644]
skins/MonoBook/i18n/nl.json [new file with mode: 0644]
skins/MonoBook/i18n/nn.json [new file with mode: 0644]
skins/MonoBook/i18n/nv.json [new file with mode: 0644]
skins/MonoBook/i18n/oc.json [new file with mode: 0644]
skins/MonoBook/i18n/os.json [new file with mode: 0644]
skins/MonoBook/i18n/pa.json [new file with mode: 0644]
skins/MonoBook/i18n/pam.json [new file with mode: 0644]
skins/MonoBook/i18n/pdt.json [new file with mode: 0644]
skins/MonoBook/i18n/pl.json [new file with mode: 0644]
skins/MonoBook/i18n/pms.json [new file with mode: 0644]
skins/MonoBook/i18n/ps.json [new file with mode: 0644]
skins/MonoBook/i18n/pt-br.json [new file with mode: 0644]
skins/MonoBook/i18n/pt.json [new file with mode: 0644]
skins/MonoBook/i18n/qqq.json
skins/MonoBook/i18n/qu.json [new file with mode: 0644]
skins/MonoBook/i18n/rm.json [new file with mode: 0644]
skins/MonoBook/i18n/ro.json [new file with mode: 0644]
skins/MonoBook/i18n/roa-tara.json [new file with mode: 0644]
skins/MonoBook/i18n/ru.json [new file with mode: 0644]
skins/MonoBook/i18n/sa.json [new file with mode: 0644]
skins/MonoBook/i18n/sah.json [new file with mode: 0644]
skins/MonoBook/i18n/scn.json [new file with mode: 0644]
skins/MonoBook/i18n/si.json [new file with mode: 0644]
skins/MonoBook/i18n/sk.json [new file with mode: 0644]
skins/MonoBook/i18n/sq.json [new file with mode: 0644]
skins/MonoBook/i18n/sr-ec.json [new file with mode: 0644]
skins/MonoBook/i18n/sr-el.json [new file with mode: 0644]
skins/MonoBook/i18n/stq.json [new file with mode: 0644]
skins/MonoBook/i18n/su.json [new file with mode: 0644]
skins/MonoBook/i18n/sv.json [new file with mode: 0644]
skins/MonoBook/i18n/te.json [new file with mode: 0644]
skins/MonoBook/i18n/th.json [new file with mode: 0644]
skins/MonoBook/i18n/tl.json [new file with mode: 0644]
skins/MonoBook/i18n/tr.json [new file with mode: 0644]
skins/MonoBook/i18n/tt-cyrl.json [new file with mode: 0644]
skins/MonoBook/i18n/tt-latn.json [new file with mode: 0644]
skins/MonoBook/i18n/tyv.json [new file with mode: 0644]
skins/MonoBook/i18n/ug-arab.json [new file with mode: 0644]
skins/MonoBook/i18n/uk.json [new file with mode: 0644]
skins/MonoBook/i18n/vep.json [new file with mode: 0644]
skins/MonoBook/i18n/vi.json [new file with mode: 0644]
skins/MonoBook/i18n/vmf.json [new file with mode: 0644]
skins/MonoBook/i18n/vo.json [new file with mode: 0644]
skins/MonoBook/i18n/vro.json [new file with mode: 0644]
skins/MonoBook/i18n/wa.json [new file with mode: 0644]
skins/MonoBook/i18n/wo.json [new file with mode: 0644]
skins/MonoBook/i18n/yi.json [new file with mode: 0644]
skins/MonoBook/i18n/yue.json [new file with mode: 0644]
skins/MonoBook/i18n/zh-hans.json [new file with mode: 0644]
skins/MonoBook/i18n/zh-hant.json [new file with mode: 0644]
skins/Vector/COPYING [new file with mode: 0644]
skins/Vector/Vector.php
skins/Vector/i18n/ab.json [new file with mode: 0644]
skins/Vector/i18n/ace.json [new file with mode: 0644]
skins/Vector/i18n/ady-cyrl.json [new file with mode: 0644]
skins/Vector/i18n/aeb.json [new file with mode: 0644]
skins/Vector/i18n/af.json [new file with mode: 0644]
skins/Vector/i18n/aln.json [new file with mode: 0644]
skins/Vector/i18n/am.json [new file with mode: 0644]
skins/Vector/i18n/an.json [new file with mode: 0644]
skins/Vector/i18n/ang.json [new file with mode: 0644]
skins/Vector/i18n/ar.json [new file with mode: 0644]
skins/Vector/i18n/arc.json [new file with mode: 0644]
skins/Vector/i18n/arn.json [new file with mode: 0644]
skins/Vector/i18n/aro.json [new file with mode: 0644]
skins/Vector/i18n/arq.json [new file with mode: 0644]
skins/Vector/i18n/ary.json [new file with mode: 0644]
skins/Vector/i18n/arz.json [new file with mode: 0644]
skins/Vector/i18n/as.json [new file with mode: 0644]
skins/Vector/i18n/ase.json [new file with mode: 0644]
skins/Vector/i18n/ast.json [new file with mode: 0644]
skins/Vector/i18n/av.json [new file with mode: 0644]
skins/Vector/i18n/avk.json [new file with mode: 0644]
skins/Vector/i18n/az.json [new file with mode: 0644]
skins/Vector/i18n/azb.json [new file with mode: 0644]
skins/Vector/i18n/ba.json [new file with mode: 0644]
skins/Vector/i18n/ban.json [new file with mode: 0644]
skins/Vector/i18n/bar.json [new file with mode: 0644]
skins/Vector/i18n/bbc-latn.json [new file with mode: 0644]
skins/Vector/i18n/bcc.json [new file with mode: 0644]
skins/Vector/i18n/bcl.json [new file with mode: 0644]
skins/Vector/i18n/be-tarask.json [new file with mode: 0644]
skins/Vector/i18n/be.json [new file with mode: 0644]
skins/Vector/i18n/bew.json [new file with mode: 0644]
skins/Vector/i18n/bg.json [new file with mode: 0644]
skins/Vector/i18n/bho.json [new file with mode: 0644]
skins/Vector/i18n/bi.json [new file with mode: 0644]
skins/Vector/i18n/bjn.json [new file with mode: 0644]
skins/Vector/i18n/bm.json [new file with mode: 0644]
skins/Vector/i18n/bn.json [new file with mode: 0644]
skins/Vector/i18n/bo.json [new file with mode: 0644]
skins/Vector/i18n/bpy.json [new file with mode: 0644]
skins/Vector/i18n/br.json [new file with mode: 0644]
skins/Vector/i18n/brh.json [new file with mode: 0644]
skins/Vector/i18n/bs.json [new file with mode: 0644]
skins/Vector/i18n/bug.json [new file with mode: 0644]
skins/Vector/i18n/bxr.json [new file with mode: 0644]
skins/Vector/i18n/ca.json [new file with mode: 0644]
skins/Vector/i18n/cdo.json [new file with mode: 0644]
skins/Vector/i18n/ce.json [new file with mode: 0644]
skins/Vector/i18n/ceb.json [new file with mode: 0644]
skins/Vector/i18n/ckb.json [new file with mode: 0644]
skins/Vector/i18n/co.json [new file with mode: 0644]
skins/Vector/i18n/cps.json [new file with mode: 0644]
skins/Vector/i18n/crh-cyrl.json [new file with mode: 0644]
skins/Vector/i18n/crh-latn.json [new file with mode: 0644]
skins/Vector/i18n/cs.json [new file with mode: 0644]
skins/Vector/i18n/csb.json [new file with mode: 0644]
skins/Vector/i18n/cu.json [new file with mode: 0644]
skins/Vector/i18n/cv.json [new file with mode: 0644]
skins/Vector/i18n/cy.json [new file with mode: 0644]
skins/Vector/i18n/da.json [new file with mode: 0644]
skins/Vector/i18n/de.json [new file with mode: 0644]
skins/Vector/i18n/diq.json [new file with mode: 0644]
skins/Vector/i18n/dsb.json [new file with mode: 0644]
skins/Vector/i18n/dtp.json [new file with mode: 0644]
skins/Vector/i18n/dv.json [new file with mode: 0644]
skins/Vector/i18n/ee.json [new file with mode: 0644]
skins/Vector/i18n/egl.json [new file with mode: 0644]
skins/Vector/i18n/el.json [new file with mode: 0644]
skins/Vector/i18n/en.json
skins/Vector/i18n/eo.json [new file with mode: 0644]
skins/Vector/i18n/es-formal.json [new file with mode: 0644]
skins/Vector/i18n/es.json [new file with mode: 0644]
skins/Vector/i18n/esu.json [new file with mode: 0644]
skins/Vector/i18n/et.json [new file with mode: 0644]
skins/Vector/i18n/eu.json [new file with mode: 0644]
skins/Vector/i18n/ext.json [new file with mode: 0644]
skins/Vector/i18n/fa.json [new file with mode: 0644]
skins/Vector/i18n/ff.json [new file with mode: 0644]
skins/Vector/i18n/fi.json [new file with mode: 0644]
skins/Vector/i18n/fit.json [new file with mode: 0644]
skins/Vector/i18n/fo.json [new file with mode: 0644]
skins/Vector/i18n/fr.json [new file with mode: 0644]
skins/Vector/i18n/frc.json [new file with mode: 0644]
skins/Vector/i18n/frp.json [new file with mode: 0644]
skins/Vector/i18n/frr.json [new file with mode: 0644]
skins/Vector/i18n/fur.json [new file with mode: 0644]
skins/Vector/i18n/fy.json [new file with mode: 0644]
skins/Vector/i18n/ga.json [new file with mode: 0644]
skins/Vector/i18n/gag.json [new file with mode: 0644]
skins/Vector/i18n/gan-hans.json [new file with mode: 0644]
skins/Vector/i18n/gan-hant.json [new file with mode: 0644]
skins/Vector/i18n/gd.json [new file with mode: 0644]
skins/Vector/i18n/gl.json [new file with mode: 0644]
skins/Vector/i18n/gom-deva.json [new file with mode: 0644]
skins/Vector/i18n/gom-latn.json [new file with mode: 0644]
skins/Vector/i18n/grc.json [new file with mode: 0644]
skins/Vector/i18n/gsw.json [new file with mode: 0644]
skins/Vector/i18n/gu.json [new file with mode: 0644]
skins/Vector/i18n/guc.json [new file with mode: 0644]
skins/Vector/i18n/gv.json [new file with mode: 0644]
skins/Vector/i18n/ha.json [new file with mode: 0644]
skins/Vector/i18n/hak.json [new file with mode: 0644]
skins/Vector/i18n/haw.json [new file with mode: 0644]
skins/Vector/i18n/he.json [new file with mode: 0644]
skins/Vector/i18n/hi.json [new file with mode: 0644]
skins/Vector/i18n/hif-latn.json [new file with mode: 0644]
skins/Vector/i18n/hil.json [new file with mode: 0644]
skins/Vector/i18n/hr.json [new file with mode: 0644]
skins/Vector/i18n/hrx.json [new file with mode: 0644]
skins/Vector/i18n/hsb.json [new file with mode: 0644]
skins/Vector/i18n/hsn.json [new file with mode: 0644]
skins/Vector/i18n/ht.json [new file with mode: 0644]
skins/Vector/i18n/hu-formal.json [new file with mode: 0644]
skins/Vector/i18n/hu.json [new file with mode: 0644]
skins/Vector/i18n/hy.json [new file with mode: 0644]
skins/Vector/i18n/ia.json [new file with mode: 0644]
skins/Vector/i18n/id.json [new file with mode: 0644]
skins/Vector/i18n/ie.json [new file with mode: 0644]
skins/Vector/i18n/ig.json [new file with mode: 0644]
skins/Vector/i18n/ike-latn.json [new file with mode: 0644]
skins/Vector/i18n/ilo.json [new file with mode: 0644]
skins/Vector/i18n/inh.json [new file with mode: 0644]
skins/Vector/i18n/io.json [new file with mode: 0644]
skins/Vector/i18n/is.json [new file with mode: 0644]
skins/Vector/i18n/it.json [new file with mode: 0644]
skins/Vector/i18n/izh.json [new file with mode: 0644]
skins/Vector/i18n/ja.json [new file with mode: 0644]
skins/Vector/i18n/jam.json [new file with mode: 0644]
skins/Vector/i18n/jbo.json [new file with mode: 0644]
skins/Vector/i18n/jv.json [new file with mode: 0644]
skins/Vector/i18n/ka.json [new file with mode: 0644]
skins/Vector/i18n/kaa.json [new file with mode: 0644]
skins/Vector/i18n/kab.json [new file with mode: 0644]
skins/Vector/i18n/kbd-cyrl.json [new file with mode: 0644]
skins/Vector/i18n/kg.json [new file with mode: 0644]
skins/Vector/i18n/khw.json [new file with mode: 0644]
skins/Vector/i18n/ki.json [new file with mode: 0644]
skins/Vector/i18n/kiu.json [new file with mode: 0644]
skins/Vector/i18n/kk-cyrl.json [new file with mode: 0644]
skins/Vector/i18n/kl.json [new file with mode: 0644]
skins/Vector/i18n/km.json [new file with mode: 0644]
skins/Vector/i18n/kn.json [new file with mode: 0644]
skins/Vector/i18n/ko.json [new file with mode: 0644]
skins/Vector/i18n/koi.json [new file with mode: 0644]
skins/Vector/i18n/krc.json [new file with mode: 0644]
skins/Vector/i18n/kri.json [new file with mode: 0644]
skins/Vector/i18n/ks-arab.json [new file with mode: 0644]
skins/Vector/i18n/ksh.json [new file with mode: 0644]
skins/Vector/i18n/ku-latn.json [new file with mode: 0644]
skins/Vector/i18n/kv.json [new file with mode: 0644]
skins/Vector/i18n/kw.json [new file with mode: 0644]
skins/Vector/i18n/ky.json [new file with mode: 0644]
skins/Vector/i18n/la.json [new file with mode: 0644]
skins/Vector/i18n/lad.json [new file with mode: 0644]
skins/Vector/i18n/lb.json [new file with mode: 0644]
skins/Vector/i18n/lez.json [new file with mode: 0644]
skins/Vector/i18n/lg.json [new file with mode: 0644]
skins/Vector/i18n/li.json [new file with mode: 0644]
skins/Vector/i18n/lij.json [new file with mode: 0644]
skins/Vector/i18n/liv.json [new file with mode: 0644]
skins/Vector/i18n/lmo.json [new file with mode: 0644]
skins/Vector/i18n/ln.json [new file with mode: 0644]
skins/Vector/i18n/lrc.json [new file with mode: 0644]
skins/Vector/i18n/lt.json [new file with mode: 0644]
skins/Vector/i18n/ltg.json [new file with mode: 0644]
skins/Vector/i18n/lus.json [new file with mode: 0644]
skins/Vector/i18n/luz.json [new file with mode: 0644]
skins/Vector/i18n/lv.json [new file with mode: 0644]
skins/Vector/i18n/lzh.json [new file with mode: 0644]
skins/Vector/i18n/lzz.json [new file with mode: 0644]
skins/Vector/i18n/mai.json [new file with mode: 0644]
skins/Vector/i18n/map-bms.json [new file with mode: 0644]
skins/Vector/i18n/mdf.json [new file with mode: 0644]
skins/Vector/i18n/mg.json [new file with mode: 0644]
skins/Vector/i18n/mhr.json [new file with mode: 0644]
skins/Vector/i18n/mi.json [new file with mode: 0644]
skins/Vector/i18n/mic.json [new file with mode: 0644]
skins/Vector/i18n/min.json [new file with mode: 0644]
skins/Vector/i18n/mk.json [new file with mode: 0644]
skins/Vector/i18n/ml.json [new file with mode: 0644]
skins/Vector/i18n/mn.json [new file with mode: 0644]
skins/Vector/i18n/mnc.json [new file with mode: 0644]
skins/Vector/i18n/mr.json [new file with mode: 0644]
skins/Vector/i18n/mrj.json [new file with mode: 0644]
skins/Vector/i18n/ms.json [new file with mode: 0644]
skins/Vector/i18n/mt.json [new file with mode: 0644]
skins/Vector/i18n/mui.json [new file with mode: 0644]
skins/Vector/i18n/my.json [new file with mode: 0644]
skins/Vector/i18n/myv.json [new file with mode: 0644]
skins/Vector/i18n/mzn.json [new file with mode: 0644]
skins/Vector/i18n/nah.json [new file with mode: 0644]
skins/Vector/i18n/nan.json [new file with mode: 0644]
skins/Vector/i18n/nap.json [new file with mode: 0644]
skins/Vector/i18n/nb.json [new file with mode: 0644]
skins/Vector/i18n/nds-nl.json [new file with mode: 0644]
skins/Vector/i18n/nds.json [new file with mode: 0644]
skins/Vector/i18n/ne.json [new file with mode: 0644]
skins/Vector/i18n/new.json [new file with mode: 0644]
skins/Vector/i18n/nl.json [new file with mode: 0644]
skins/Vector/i18n/nn.json [new file with mode: 0644]
skins/Vector/i18n/nov.json [new file with mode: 0644]
skins/Vector/i18n/nrm.json [new file with mode: 0644]
skins/Vector/i18n/nso.json [new file with mode: 0644]
skins/Vector/i18n/oc.json [new file with mode: 0644]
skins/Vector/i18n/or.json [new file with mode: 0644]
skins/Vector/i18n/os.json [new file with mode: 0644]
skins/Vector/i18n/pa.json [new file with mode: 0644]
skins/Vector/i18n/pam.json [new file with mode: 0644]
skins/Vector/i18n/pbb.json [new file with mode: 0644]
skins/Vector/i18n/pcd.json [new file with mode: 0644]
skins/Vector/i18n/pdc.json [new file with mode: 0644]
skins/Vector/i18n/pfl.json [new file with mode: 0644]
skins/Vector/i18n/pi.json [new file with mode: 0644]
skins/Vector/i18n/pih.json [new file with mode: 0644]
skins/Vector/i18n/pl.json [new file with mode: 0644]
skins/Vector/i18n/pms.json [new file with mode: 0644]
skins/Vector/i18n/pnb.json [new file with mode: 0644]
skins/Vector/i18n/pnt.json [new file with mode: 0644]
skins/Vector/i18n/ppl.json [new file with mode: 0644]
skins/Vector/i18n/prg.json [new file with mode: 0644]
skins/Vector/i18n/ps.json [new file with mode: 0644]
skins/Vector/i18n/pt-br.json [new file with mode: 0644]
skins/Vector/i18n/pt.json [new file with mode: 0644]
skins/Vector/i18n/qqq.json
skins/Vector/i18n/qu.json [new file with mode: 0644]
skins/Vector/i18n/qug.json [new file with mode: 0644]
skins/Vector/i18n/rap.json [new file with mode: 0644]
skins/Vector/i18n/rgn.json [new file with mode: 0644]
skins/Vector/i18n/rif.json [new file with mode: 0644]
skins/Vector/i18n/rm.json [new file with mode: 0644]
skins/Vector/i18n/rmf.json [new file with mode: 0644]
skins/Vector/i18n/ro.json [new file with mode: 0644]
skins/Vector/i18n/roa-tara.json [new file with mode: 0644]
skins/Vector/i18n/ru.json [new file with mode: 0644]
skins/Vector/i18n/rue.json [new file with mode: 0644]
skins/Vector/i18n/rup.json [new file with mode: 0644]
skins/Vector/i18n/rw.json [new file with mode: 0644]
skins/Vector/i18n/ryu.json [new file with mode: 0644]
skins/Vector/i18n/sa.json [new file with mode: 0644]
skins/Vector/i18n/sah.json [new file with mode: 0644]
skins/Vector/i18n/sat.json [new file with mode: 0644]
skins/Vector/i18n/saz.json [new file with mode: 0644]
skins/Vector/i18n/sc.json [new file with mode: 0644]
skins/Vector/i18n/scn.json [new file with mode: 0644]
skins/Vector/i18n/sco.json [new file with mode: 0644]
skins/Vector/i18n/sd.json [new file with mode: 0644]
skins/Vector/i18n/sdc.json [new file with mode: 0644]
skins/Vector/i18n/sdh.json [new file with mode: 0644]
skins/Vector/i18n/se.json [new file with mode: 0644]
skins/Vector/i18n/sg.json [new file with mode: 0644]
skins/Vector/i18n/sgs.json [new file with mode: 0644]
skins/Vector/i18n/sh.json [new file with mode: 0644]
skins/Vector/i18n/shi.json [new file with mode: 0644]
skins/Vector/i18n/shn.json [new file with mode: 0644]
skins/Vector/i18n/si.json [new file with mode: 0644]
skins/Vector/i18n/sk.json [new file with mode: 0644]
skins/Vector/i18n/sl.json [new file with mode: 0644]
skins/Vector/i18n/sli.json [new file with mode: 0644]
skins/Vector/i18n/sly.json [new file with mode: 0644]
skins/Vector/i18n/so.json [new file with mode: 0644]
skins/Vector/i18n/sq.json [new file with mode: 0644]
skins/Vector/i18n/sr-ec.json [new file with mode: 0644]
skins/Vector/i18n/sr-el.json [new file with mode: 0644]
skins/Vector/i18n/ss.json [new file with mode: 0644]
skins/Vector/i18n/stq.json [new file with mode: 0644]
skins/Vector/i18n/su.json [new file with mode: 0644]
skins/Vector/i18n/sv.json [new file with mode: 0644]
skins/Vector/i18n/sw.json [new file with mode: 0644]
skins/Vector/i18n/szl.json [new file with mode: 0644]
skins/Vector/i18n/ta.json [new file with mode: 0644]
skins/Vector/i18n/tcy.json [new file with mode: 0644]
skins/Vector/i18n/te.json [new file with mode: 0644]
skins/Vector/i18n/tet.json [new file with mode: 0644]
skins/Vector/i18n/tg-cyrl.json [new file with mode: 0644]
skins/Vector/i18n/tg-latn.json [new file with mode: 0644]
skins/Vector/i18n/th.json [new file with mode: 0644]
skins/Vector/i18n/tk.json [new file with mode: 0644]
skins/Vector/i18n/tl.json [new file with mode: 0644]
skins/Vector/i18n/tly.json [new file with mode: 0644]
skins/Vector/i18n/tpi.json [new file with mode: 0644]
skins/Vector/i18n/tr.json [new file with mode: 0644]
skins/Vector/i18n/tru.json [new file with mode: 0644]
skins/Vector/i18n/ts.json [new file with mode: 0644]
skins/Vector/i18n/tt-cyrl.json [new file with mode: 0644]
skins/Vector/i18n/tt-latn.json [new file with mode: 0644]
skins/Vector/i18n/tyv.json [new file with mode: 0644]
skins/Vector/i18n/tzm.json [new file with mode: 0644]
skins/Vector/i18n/udm.json [new file with mode: 0644]
skins/Vector/i18n/ug-arab.json [new file with mode: 0644]
skins/Vector/i18n/uk.json [new file with mode: 0644]
skins/Vector/i18n/ur.json [new file with mode: 0644]
skins/Vector/i18n/uz.json [new file with mode: 0644]
skins/Vector/i18n/vec.json [new file with mode: 0644]
skins/Vector/i18n/vep.json [new file with mode: 0644]
skins/Vector/i18n/vi.json [new file with mode: 0644]
skins/Vector/i18n/vls.json [new file with mode: 0644]
skins/Vector/i18n/vmf.json [new file with mode: 0644]
skins/Vector/i18n/vo.json [new file with mode: 0644]
skins/Vector/i18n/vot.json [new file with mode: 0644]
skins/Vector/i18n/vro.json [new file with mode: 0644]
skins/Vector/i18n/wa.json [new file with mode: 0644]
skins/Vector/i18n/war.json [new file with mode: 0644]
skins/Vector/i18n/wo.json [new file with mode: 0644]
skins/Vector/i18n/wuu.json [new file with mode: 0644]
skins/Vector/i18n/xal.json [new file with mode: 0644]
skins/Vector/i18n/xh.json [new file with mode: 0644]
skins/Vector/i18n/xmf.json [new file with mode: 0644]
skins/Vector/i18n/yi.json [new file with mode: 0644]
skins/Vector/i18n/yo.json [new file with mode: 0644]
skins/Vector/i18n/yue.json [new file with mode: 0644]
skins/Vector/i18n/za.json [new file with mode: 0644]
skins/Vector/i18n/zea.json [new file with mode: 0644]
skins/Vector/i18n/zh-hans.json [new file with mode: 0644]
skins/Vector/i18n/zh-hant.json [new file with mode: 0644]
tests/.gitignore [new file with mode: 0644]
tests/browser/Gemfile [new file with mode: 0755]
tests/browser/Gemfile.lock [new file with mode: 0644]
tests/browser/README.mediawiki [new file with mode: 0644]
tests/browser/environment_variables [new file with mode: 0644]
tests/browser/features/create_account.feature [new file with mode: 0644]
tests/browser/features/create_and_follow_wiki_link.feature [new file with mode: 0644]
tests/browser/features/edit_page.feature [new file with mode: 0644]
tests/browser/features/main_page_links.feature [new file with mode: 0644]
tests/browser/features/preferences.feature [new file with mode: 0644]
tests/browser/features/step_definitions/create_account_steps.rb [new file with mode: 0644]
tests/browser/features/step_definitions/create_and_follow_wiki_link_steps.rb [new file with mode: 0644]
tests/browser/features/step_definitions/edit_page_steps.rb [new file with mode: 0644]
tests/browser/features/step_definitions/main_page_links_steps.rb [new file with mode: 0644]
tests/browser/features/step_definitions/preferences_appearance_steps.rb [new file with mode: 0644]
tests/browser/features/step_definitions/preferences_editing_steps.rb [new file with mode: 0644]
tests/browser/features/step_definitions/preferences_user_profile_steps.rb [new file with mode: 0644]
tests/browser/features/step_definitions/view_history_steps.rb [new file with mode: 0644]
tests/browser/features/support/env.rb [new file with mode: 0644]
tests/browser/features/support/hooks.rb [new file with mode: 0644]
tests/browser/features/support/modules/url_module.rb [new file with mode: 0644]
tests/browser/features/support/pages/create_account_page.rb [new file with mode: 0644]
tests/browser/features/support/pages/edit_page.rb [new file with mode: 0644]
tests/browser/features/support/pages/main_page.rb [new file with mode: 0644]
tests/browser/features/support/pages/preferences_appearance_page.rb [new file with mode: 0644]
tests/browser/features/support/pages/preferences_editing_page.rb [new file with mode: 0644]
tests/browser/features/support/pages/preferences_page.rb [new file with mode: 0644]
tests/browser/features/support/pages/preferences_user_profile_page.rb [new file with mode: 0644]
tests/browser/features/support/pages/view_history_page.rb [new file with mode: 0644]
tests/browser/features/support/pages/ztargetpage.rb [new file with mode: 0644]
tests/browser/features/view_history.feature [new file with mode: 0644]
tests/frontend/Gruntfile.js
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/ArticleTest.php
tests/phpunit/includes/GlobalFunctions/wfParseUrlTest.php
tests/phpunit/includes/LinkerTest.php
tests/phpunit/includes/RequestContextTest.php
tests/phpunit/includes/debug/MWDebugTest.php
tests/phpunit/includes/libs/CSSMinTest.php
tests/phpunit/includes/parser/MagicVariableTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/specials/SpecialMIMESearchTest.php [new file with mode: 0644]
tests/phpunit/includes/specials/SpecialPreferencesTest.php
tests/phpunit/languages/LanguageTest.php
tests/testHelpers.inc
thumb.php

index 6c381bb..2f41347 100644 (file)
@@ -25,6 +25,7 @@ production.
   contains an array of interwiki prefixes that should be treated as language
   prefixes (i.e. turned into interlanguage links when $wgInterwikiMagic is set
   to true).
+* $wgParserTestRemote has been removed.
 
 === New features in 1.24 ===
 * Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
@@ -82,6 +83,24 @@ production.
 * 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.
+* Added the json2.js polyfill for the ES5 JSON.stringify and JSON.parse methods.
+  Exposed as module "json" with a skip function to optimise loading.
+* Extensions and skins may now use 'namemsg' in $wgExtensionCredits in addition
+  to 'name', to allow for the name to be localizable. 'name' should still be
+  specified for backwards-compatibility and to define the path Special:Version
+  uses to find extension license information.
+* Browser tests are now included to verify basic wiki functionality in developer
+  environments. For details on running tests, see tests/browser/README.mediawiki.
+* Upgrade jStorage to v0.4.10.
+* {{!}} is now a magic word that produces the | character. This removes the need
+  for Template:! for purposes such as passing pipes inside of parameters.
+* (bug 20790) The block log snippet on Special:Contributions and while
+  editing user and user talk pages now works for IP range blocks.
+* (bug 9360) Added ability to change the page language for MediaWiki pages using
+  Special:PageLanguage. All pages are set to wiki language by default.
+  The feature needs to be enabled with $wgPageLanguageUseDB=true and
+  permission needs to be set for 'pagelang'.
+* Upgrade Moment.js to v2.7.0.
 
 === Bug fixes in 1.24 ===
 * (bug 49116) Footer copyright notice is now always displayed in user language
@@ -105,6 +124,9 @@ production.
   however delete the redirect page.
 * (bug 22683) {{msgnw:}} and other uses of PPFrame::RECOVER_ORIG will correctly
   recover the original code of extension tags.
+* (bug 65757) MSSQL: Update script drops unnamed constraints to be prepared
+  for future updates. Because it's doing so heuristically, it may fail or drop
+  wrong constraints.
 
 === Web API changes in 1.24 ===
 * action=parse API now supports prop=modules, which provides the list of
@@ -166,7 +188,21 @@ changes to languages because of Bugzilla reports.
 * ResourceLoaderFileModule#getAllStyleFiles now returns all style files and all
   skin style files used by the module.
 * Removed getLang() from IContextSource and subclasses. (deprecated since 1.19)
+* Removed setLang() from subclasses of IContextSource. (deprecated since 1.19)
 * Removed WebRequest::escapeAppendQuery(). (deprecated since 1.20)
+* Removed info(), purge(), revert() and rollback() from the Article class; they
+  have since become subclasses of the Action class. (deprecated since 1.19)
+* SearchEngineReplacePrefixesComplete hook was removed.
+* The "jquery.json" module has been deprecated. Use the "json" module instead.
+* Removed HTMLForm::addJS(). (deprecated since 1.18)
+* Removed LogEventsList::showHeader(). (deprecated since 1.19)
+* Removed ImageGalleryBase::useSkin(). (deprecated since 1.18)
+* Removed DatabaseMysqlBase::getLagFromProcesslist(). (deprecated since 1.19)
+* Removed LoadBalancer::closeConnecton(). (deprecated since 1.18)
+* Removed ApiBase::createContext(). (deprecated since 1.19)
+* BREAKING CHANGE: The undocumented Special{$this->getName()}BeforeFormDisplay
+  set of hooks has been removed and replaced by a single new hook
+  SpecialPageBeforeFormDisplay.
 
 ==== Renamed classes ====
 * CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
@@ -175,6 +211,7 @@ changes to languages because of Bugzilla reports.
 * CLDRPluralRuleEvaluator_Range to CLDRPluralRuleEvaluatorRange
 * CSSJanus_Tokenizer to CSSJanusTokenizer
 * MediaWiki_I18N to MediaWikiI18N
+* Parser_DiffTest to ParserDiffTest
 * RevDel_ArchiveItem to RevDelArchiveItem
 * RevDel_ArchiveList to RevDelArchiveList
 * RevDel_ArchivedFileItem to RevDelArchivedFileItem
index 80ac174..1673f06 100644 (file)
@@ -1496,7 +1496,7 @@ $result: Change this value to override the result of wfIsTrustedProxy()
 $url: URL used to upload from
 &$allowed: Boolean indicating if uploading is allowed for given URL
 
-'isValidEmailAddr': Override the result of User::isValidEmailAddr(), for
+'isValidEmailAddr': Override the result of Sanitizer::validateEmail(), for
 instance to return false if the domain name doesn't match your organization.
 $addr: The e-mail address entered by the user
 &$result: Set this and return false to override the internal checks
@@ -2095,7 +2095,7 @@ $article: the page the form is shown for
 $out: OutputPage object
 
 'RawPageViewBeforeOutput': Right before the text is blown out in action=raw.
-&$obj: RawPage object
+&$obj: RawAction object
 &$text: The text that's going to be the output
 
 'RecentChange_save': Called at the end of RecentChange::save().
@@ -2182,12 +2182,6 @@ searches.
 $term : Search term string
 &$title : Current Title object that is being returned (null if none found).
 
-'SearchEngineReplacePrefixesComplete': Run after SearchEngine::replacePrefixes().
-$searchEngine : The SearchEngine object. Users of this hooks will be interested
-in the $searchEngine->namespaces array.
-$query : Original query.
-&$parsed : Resultant query with the prefixes stripped.
-
 'SearchResultInitFromTitle': Set the revision used when displaying a page in
 search results.
 $title : Current Title object being displayed in search results.
@@ -2360,6 +2354,10 @@ software.
 $software: The array of software in format 'name' => 'version'. See
   SpecialVersion::softwareInformation().
 
+'SpecialPageBeforeFormDisplay': Before executing the HTMLForm object.
+$name: name of the special page
+&$form: HTMLForm object
+
 'SpecialBlockModifyFormFields': Add more fields to Special:Block
 $sp: SpecialPage object, for context
 &$fields: Current HTMLForm fields
diff --git a/includes/Article.php b/includes/Article.php
deleted file mode 100644 (file)
index 04972bc..0000000
+++ /dev/null
@@ -1,2136 +0,0 @@
-<?php
-/**
- * User interface for page actions.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * Class for viewing MediaWiki article and history.
- *
- * This maintains WikiPage functions for backwards compatibility.
- *
- * @todo Move and rewrite code to an Action class
- *
- * See design.txt for an overview.
- * Note: edit user interface and cache support functions have been
- * moved to separate EditPage and HTMLFileCache classes.
- *
- * @internal documentation reviewed 15 Mar 2010
- */
-class Article implements Page {
-       /** @var IContextSource The context this Article is executed in */
-       protected $mContext;
-
-       /** @var WikiPage The WikiPage object of this instance */
-       protected $mPage;
-
-       /** @var ParserOptions ParserOptions object for $wgUser articles */
-       public $mParserOptions;
-
-       /**
-        * @var string Text of the revision we are working on
-        * @todo BC cruft
-        */
-       public $mContent;
-
-       /**
-        * @var Content Content of the revision we are working on
-        * @since 1.21
-        */
-       protected $mContentObject;
-
-       /** @var bool Is the content ($mContent) already loaded? */
-       protected $mContentLoaded = false;
-
-       /** @var int|null The oldid of the article that is to be shown, 0 for the current revision */
-       protected $mOldId;
-
-       /** @var Title Title from which we were redirected here */
-       protected $mRedirectedFrom = null;
-
-       /** @var string|bool URL to redirect to or false if none */
-       protected $mRedirectUrl = false;
-
-       /** @var int Revision ID of revision we are working on */
-       protected $mRevIdFetched = 0;
-
-       /** @var Revision Revision we are working on */
-       protected $mRevision = null;
-
-       /** @var ParserOutput */
-       public $mParserOutput;
-
-       /**
-        * Constructor and clear the article
-        * @param Title $title Reference to a Title object.
-        * @param int $oldId Revision ID, null to fetch from request, zero for current
-        */
-       public function __construct( Title $title, $oldId = null ) {
-               $this->mOldId = $oldId;
-               $this->mPage = $this->newPage( $title );
-       }
-
-       /**
-        * @param Title $title
-        * @return WikiPage
-        */
-       protected function newPage( Title $title ) {
-               return new WikiPage( $title );
-       }
-
-       /**
-        * Constructor from a page id
-        * @param int $id Article ID to load
-        * @return Article|null
-        */
-       public static function newFromID( $id ) {
-               $t = Title::newFromID( $id );
-               # @todo FIXME: Doesn't inherit right
-               return $t == null ? null : new self( $t );
-               # return $t == null ? null : new static( $t ); // PHP 5.3
-       }
-
-       /**
-        * Create an Article object of the appropriate class for the given page.
-        *
-        * @param Title $title
-        * @param IContextSource $context
-        * @return Article
-        */
-       public static function newFromTitle( $title, IContextSource $context ) {
-               if ( NS_MEDIA == $title->getNamespace() ) {
-                       // FIXME: where should this go?
-                       $title = Title::makeTitle( NS_FILE, $title->getDBkey() );
-               }
-
-               $page = null;
-               wfRunHooks( 'ArticleFromTitle', array( &$title, &$page, $context ) );
-               if ( !$page ) {
-                       switch ( $title->getNamespace() ) {
-                               case NS_FILE:
-                                       $page = new ImagePage( $title );
-                                       break;
-                               case NS_CATEGORY:
-                                       $page = new CategoryPage( $title );
-                                       break;
-                               default:
-                                       $page = new Article( $title );
-                       }
-               }
-               $page->setContext( $context );
-
-               return $page;
-       }
-
-       /**
-        * Create an Article object of the appropriate class for the given page.
-        *
-        * @param WikiPage $page
-        * @param IContextSource $context
-        * @return Article
-        */
-       public static function newFromWikiPage( WikiPage $page, IContextSource $context ) {
-               $article = self::newFromTitle( $page->getTitle(), $context );
-               $article->mPage = $page; // override to keep process cached vars
-               return $article;
-       }
-
-       /**
-        * Tell the page view functions that this view was redirected
-        * from another page on the wiki.
-        * @param Title $from
-        */
-       public function setRedirectedFrom( Title $from ) {
-               $this->mRedirectedFrom = $from;
-       }
-
-       /**
-        * Get the title object of the article
-        *
-        * @return Title Title object of this page
-        */
-       public function getTitle() {
-               return $this->mPage->getTitle();
-       }
-
-       /**
-        * Get the WikiPage object of this instance
-        *
-        * @since 1.19
-        * @return WikiPage
-        */
-       public function getPage() {
-               return $this->mPage;
-       }
-
-       /**
-        * Clear the object
-        */
-       public function clear() {
-               $this->mContentLoaded = false;
-
-               $this->mRedirectedFrom = null; # Title object if set
-               $this->mRevIdFetched = 0;
-               $this->mRedirectUrl = false;
-
-               $this->mPage->clear();
-       }
-
-       /**
-        * Note that getContent/loadContent do not follow redirects anymore.
-        * If you need to fetch redirectable content easily, try
-        * the shortcut in WikiPage::getRedirectTarget()
-        *
-        * This function has side effects! Do not use this function if you
-        * only want the real revision text if any.
-        *
-        * @deprecated since 1.21; use WikiPage::getContent() instead
-        *
-        * @return string Return the text of this revision
-        */
-       public function getContent() {
-               ContentHandler::deprecated( __METHOD__, '1.21' );
-               $content = $this->getContentObject();
-               return ContentHandler::getContentText( $content );
-       }
-
-       /**
-        * Returns a Content object representing the pages effective display content,
-        * not necessarily the revision's content!
-        *
-        * Note that getContent/loadContent do not follow redirects anymore.
-        * If you need to fetch redirectable content easily, try
-        * the shortcut in WikiPage::getRedirectTarget()
-        *
-        * This function has side effects! Do not use this function if you
-        * only want the real revision text if any.
-        *
-        * @return Content Return the content of this revision
-        *
-        * @since 1.21
-        */
-       protected function getContentObject() {
-               wfProfileIn( __METHOD__ );
-
-               if ( $this->mPage->getID() === 0 ) {
-                       # If this is a MediaWiki:x message, then load the messages
-                       # and return the message value for x.
-                       if ( $this->getTitle()->getNamespace() == NS_MEDIAWIKI ) {
-                               $text = $this->getTitle()->getDefaultMessageText();
-                               if ( $text === false ) {
-                                       $text = '';
-                               }
-
-                               $content = ContentHandler::makeContent( $text, $this->getTitle() );
-                       } else {
-                               $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
-                               $content = new MessageContent( $message, null, 'parsemag' );
-                       }
-               } else {
-                       $this->fetchContentObject();
-                       $content = $this->mContentObject;
-               }
-
-               wfProfileOut( __METHOD__ );
-               return $content;
-       }
-
-       /**
-        * @return int The oldid of the article that is to be shown, 0 for the current revision
-        */
-       public function getOldID() {
-               if ( is_null( $this->mOldId ) ) {
-                       $this->mOldId = $this->getOldIDFromRequest();
-               }
-
-               return $this->mOldId;
-       }
-
-       /**
-        * Sets $this->mRedirectUrl to a correct URL if the query parameters are incorrect
-        *
-        * @return int The old id for the request
-        */
-       public function getOldIDFromRequest() {
-               $this->mRedirectUrl = false;
-
-               $request = $this->getContext()->getRequest();
-               $oldid = $request->getIntOrNull( 'oldid' );
-
-               if ( $oldid === null ) {
-                       return 0;
-               }
-
-               if ( $oldid !== 0 ) {
-                       # Load the given revision and check whether the page is another one.
-                       # In that case, update this instance to reflect the change.
-                       if ( $oldid === $this->mPage->getLatest() ) {
-                               $this->mRevision = $this->mPage->getRevision();
-                       } else {
-                               $this->mRevision = Revision::newFromId( $oldid );
-                               if ( $this->mRevision !== null ) {
-                                       // Revision title doesn't match the page title given?
-                                       if ( $this->mPage->getID() != $this->mRevision->getPage() ) {
-                                               $function = array( get_class( $this->mPage ), 'newFromID' );
-                                               $this->mPage = call_user_func( $function, $this->mRevision->getPage() );
-                                       }
-                               }
-                       }
-               }
-
-               if ( $request->getVal( 'direction' ) == 'next' ) {
-                       $nextid = $this->getTitle()->getNextRevisionID( $oldid );
-                       if ( $nextid ) {
-                               $oldid = $nextid;
-                               $this->mRevision = null;
-                       } else {
-                               $this->mRedirectUrl = $this->getTitle()->getFullURL( 'redirect=no' );
-                       }
-               } elseif ( $request->getVal( 'direction' ) == 'prev' ) {
-                       $previd = $this->getTitle()->getPreviousRevisionID( $oldid );
-                       if ( $previd ) {
-                               $oldid = $previd;
-                               $this->mRevision = null;
-                       }
-               }
-
-               return $oldid;
-       }
-
-       /**
-        * Load the revision (including text) into this object
-        *
-        * @deprecated since 1.19; use fetchContent()
-        */
-       function loadContent() {
-               wfDeprecated( __METHOD__, '1.19' );
-               $this->fetchContent();
-       }
-
-       /**
-        * Get text of an article from database
-        * Does *NOT* follow redirects.
-        *
-        * @protected
-        * @note This is really internal functionality that should really NOT be
-        * used by other functions. For accessing article content, use the WikiPage
-        * class, especially WikiBase::getContent(). However, a lot of legacy code
-        * uses this method to retrieve page text from the database, so the function
-        * has to remain public for now.
-        *
-        * @return string|bool String containing article contents, or false if null
-        * @deprecated since 1.21, use WikiPage::getContent() instead
-        */
-       function fetchContent() { #BC cruft!
-               ContentHandler::deprecated( __METHOD__, '1.21' );
-
-               if ( $this->mContentLoaded && $this->mContent ) {
-                       return $this->mContent;
-               }
-
-               wfProfileIn( __METHOD__ );
-
-               $content = $this->fetchContentObject();
-
-               if ( !$content ) {
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               // @todo Get rid of mContent everywhere!
-               $this->mContent = ContentHandler::getContentText( $content );
-               ContentHandler::runLegacyHooks( 'ArticleAfterFetchContent', array( &$this, &$this->mContent ) );
-
-               wfProfileOut( __METHOD__ );
-
-               return $this->mContent;
-       }
-
-       /**
-        * Get text content object
-        * Does *NOT* follow redirects.
-        * @todo When is this null?
-        *
-        * @note Code that wants to retrieve page content from the database should
-        * use WikiPage::getContent().
-        *
-        * @return Content|null|bool
-        *
-        * @since 1.21
-        */
-       protected function fetchContentObject() {
-               if ( $this->mContentLoaded ) {
-                       return $this->mContentObject;
-               }
-
-               wfProfileIn( __METHOD__ );
-
-               $this->mContentLoaded = true;
-               $this->mContent = null;
-
-               $oldid = $this->getOldID();
-
-               # Pre-fill content with error message so that if something
-               # fails we'll have something telling us what we intended.
-               //XXX: this isn't page content but a UI message. horrible.
-               $this->mContentObject = new MessageContent( 'missing-revision', array( $oldid ), array() );
-
-               if ( $oldid ) {
-                       # $this->mRevision might already be fetched by getOldIDFromRequest()
-                       if ( !$this->mRevision ) {
-                               $this->mRevision = Revision::newFromId( $oldid );
-                               if ( !$this->mRevision ) {
-                                       wfDebug( __METHOD__ . " failed to retrieve specified revision, id $oldid\n" );
-                                       wfProfileOut( __METHOD__ );
-                                       return false;
-                               }
-                       }
-               } else {
-                       if ( !$this->mPage->getLatest() ) {
-                               wfDebug( __METHOD__ . " failed to find page data for title " .
-                                       $this->getTitle()->getPrefixedText() . "\n" );
-                               wfProfileOut( __METHOD__ );
-                               return false;
-                       }
-
-                       $this->mRevision = $this->mPage->getRevision();
-
-                       if ( !$this->mRevision ) {
-                               wfDebug( __METHOD__ . " failed to retrieve current page, rev_id " .
-                                       $this->mPage->getLatest() . "\n" );
-                               wfProfileOut( __METHOD__ );
-                               return false;
-                       }
-               }
-
-               // @todo FIXME: Horrible, horrible! This content-loading interface just plain sucks.
-               // We should instead work with the Revision object when we need it...
-               // Loads if user is allowed
-               $this->mContentObject = $this->mRevision->getContent(
-                       Revision::FOR_THIS_USER,
-                       $this->getContext()->getUser()
-               );
-               $this->mRevIdFetched = $this->mRevision->getId();
-
-               wfRunHooks( 'ArticleAfterFetchContentObject', array( &$this, &$this->mContentObject ) );
-
-               wfProfileOut( __METHOD__ );
-
-               return $this->mContentObject;
-       }
-
-       /**
-        * Returns true if the currently-referenced revision is the current edit
-        * to this page (and it exists).
-        * @return bool
-        */
-       public function isCurrent() {
-               # If no oldid, this is the current version.
-               if ( $this->getOldID() == 0 ) {
-                       return true;
-               }
-
-               return $this->mPage->exists() && $this->mRevision && $this->mRevision->isCurrent();
-       }
-
-       /**
-        * Get the fetched Revision object depending on request parameters or null
-        * on failure.
-        *
-        * @since 1.19
-        * @return Revision|null
-        */
-       public function getRevisionFetched() {
-               $this->fetchContentObject();
-
-               return $this->mRevision;
-       }
-
-       /**
-        * Use this to fetch the rev ID used on page views
-        *
-        * @return int Revision ID of last article revision
-        */
-       public function getRevIdFetched() {
-               if ( $this->mRevIdFetched ) {
-                       return $this->mRevIdFetched;
-               } else {
-                       return $this->mPage->getLatest();
-               }
-       }
-
-       /**
-        * This is the default action of the index.php entry point: just view the
-        * page of the given title.
-        */
-       public function view() {
-               global $wgUseFileCache, $wgUseETag, $wgDebugToolbar;
-
-               wfProfileIn( __METHOD__ );
-
-               # Get variables from query string
-               # As side effect this will load the revision and update the title
-               # in a revision ID is passed in the request, so this should remain
-               # the first call of this method even if $oldid is used way below.
-               $oldid = $this->getOldID();
-
-               $user = $this->getContext()->getUser();
-               # Another whitelist check in case getOldID() is altering the title
-               $permErrors = $this->getTitle()->getUserPermissionsErrors( 'read', $user );
-               if ( count( $permErrors ) ) {
-                       wfDebug( __METHOD__ . ": denied on secondary read check\n" );
-                       wfProfileOut( __METHOD__ );
-                       throw new PermissionsError( 'read', $permErrors );
-               }
-
-               $outputPage = $this->getContext()->getOutput();
-               # getOldID() may as well want us to redirect somewhere else
-               if ( $this->mRedirectUrl ) {
-                       $outputPage->redirect( $this->mRedirectUrl );
-                       wfDebug( __METHOD__ . ": redirecting due to oldid\n" );
-                       wfProfileOut( __METHOD__ );
-
-                       return;
-               }
-
-               # If we got diff in the query, we want to see a diff page instead of the article.
-               if ( $this->getContext()->getRequest()->getCheck( 'diff' ) ) {
-                       wfDebug( __METHOD__ . ": showing diff page\n" );
-                       $this->showDiffPage();
-                       wfProfileOut( __METHOD__ );
-
-                       return;
-               }
-
-               # Set page title (may be overridden by DISPLAYTITLE)
-               $outputPage->setPageTitle( $this->getTitle()->getPrefixedText() );
-
-               $outputPage->setArticleFlag( true );
-               # Allow frames by default
-               $outputPage->allowClickjacking();
-
-               $parserCache = ParserCache::singleton();
-
-               $parserOptions = $this->getParserOptions();
-               # Render printable version, use printable version cache
-               if ( $outputPage->isPrintable() ) {
-                       $parserOptions->setIsPrintable( true );
-                       $parserOptions->setEditSection( false );
-               } elseif ( !$this->isCurrent() || !$this->getTitle()->quickUserCan( 'edit', $user ) ) {
-                       $parserOptions->setEditSection( false );
-               }
-
-               # Try client and file cache
-               if ( !$wgDebugToolbar && $oldid === 0 && $this->mPage->checkTouched() ) {
-                       if ( $wgUseETag ) {
-                               $outputPage->setETag( $parserCache->getETag( $this, $parserOptions ) );
-                       }
-
-                       # Is it client cached?
-                       if ( $outputPage->checkLastModified( $this->mPage->getTouched() ) ) {
-                               wfDebug( __METHOD__ . ": done 304\n" );
-                               wfProfileOut( __METHOD__ );
-
-                               return;
-                       # Try file cache
-                       } elseif ( $wgUseFileCache && $this->tryFileCache() ) {
-                               wfDebug( __METHOD__ . ": done file cache\n" );
-                               # tell wgOut that output is taken care of
-                               $outputPage->disable();
-                               $this->mPage->doViewUpdates( $user, $oldid );
-                               wfProfileOut( __METHOD__ );
-
-                               return;
-                       }
-               }
-
-               # Should the parser cache be used?
-               $useParserCache = $this->mPage->isParserCacheUsed( $parserOptions, $oldid );
-               wfDebug( 'Article::view using parser cache: ' . ( $useParserCache ? 'yes' : 'no' ) . "\n" );
-               if ( $user->getStubThreshold() ) {
-                       wfIncrStats( 'pcache_miss_stub' );
-               }
-
-               $this->showRedirectedFromHeader();
-               $this->showNamespaceHeader();
-
-               # Iterate through the possible ways of constructing the output text.
-               # Keep going until $outputDone is set, or we run out of things to do.
-               $pass = 0;
-               $outputDone = false;
-               $this->mParserOutput = false;
-
-               while ( !$outputDone && ++$pass ) {
-                       switch ( $pass ) {
-                               case 1:
-                                       wfRunHooks( 'ArticleViewHeader', array( &$this, &$outputDone, &$useParserCache ) );
-                                       break;
-                               case 2:
-                                       # Early abort if the page doesn't exist
-                                       if ( !$this->mPage->exists() ) {
-                                               wfDebug( __METHOD__ . ": showing missing article\n" );
-                                               $this->showMissingArticle();
-                                               $this->mPage->doViewUpdates( $user );
-                                               wfProfileOut( __METHOD__ );
-                                               return;
-                                       }
-
-                                       # Try the parser cache
-                                       if ( $useParserCache ) {
-                                               $this->mParserOutput = $parserCache->get( $this, $parserOptions );
-
-                                               if ( $this->mParserOutput !== false ) {
-                                                       if ( $oldid ) {
-                                                               wfDebug( __METHOD__ . ": showing parser cache contents for current rev permalink\n" );
-                                                               $this->setOldSubtitle( $oldid );
-                                                       } else {
-                                                               wfDebug( __METHOD__ . ": showing parser cache contents\n" );
-                                                       }
-                                                       $outputPage->addParserOutput( $this->mParserOutput );
-                                                       # Ensure that UI elements requiring revision ID have
-                                                       # the correct version information.
-                                                       $outputPage->setRevisionId( $this->mPage->getLatest() );
-                                                       # Preload timestamp to avoid a DB hit
-                                                       $cachedTimestamp = $this->mParserOutput->getTimestamp();
-                                                       if ( $cachedTimestamp !== null ) {
-                                                               $outputPage->setRevisionTimestamp( $cachedTimestamp );
-                                                               $this->mPage->setTimestamp( $cachedTimestamp );
-                                                       }
-                                                       $outputDone = true;
-                                               }
-                                       }
-                                       break;
-                               case 3:
-                                       # This will set $this->mRevision if needed
-                                       $this->fetchContentObject();
-
-                                       # Are we looking at an old revision
-                                       if ( $oldid && $this->mRevision ) {
-                                               $this->setOldSubtitle( $oldid );
-
-                                               if ( !$this->showDeletedRevisionHeader() ) {
-                                                       wfDebug( __METHOD__ . ": cannot view deleted revision\n" );
-                                                       wfProfileOut( __METHOD__ );
-                                                       return;
-                                               }
-                                       }
-
-                                       # Ensure that UI elements requiring revision ID have
-                                       # the correct version information.
-                                       $outputPage->setRevisionId( $this->getRevIdFetched() );
-                                       # Preload timestamp to avoid a DB hit
-                                       $outputPage->setRevisionTimestamp( $this->getTimestamp() );
-
-                                       # Pages containing custom CSS or JavaScript get special treatment
-                                       if ( $this->getTitle()->isCssOrJsPage() || $this->getTitle()->isCssJsSubpage() ) {
-                                               wfDebug( __METHOD__ . ": showing CSS/JS source\n" );
-                                               $this->showCssOrJsPage();
-                                               $outputDone = true;
-                                       } elseif ( !wfRunHooks( 'ArticleContentViewCustom',
-                                                       array( $this->fetchContentObject(), $this->getTitle(), $outputPage ) ) ) {
-
-                                               # Allow extensions do their own custom view for certain pages
-                                               $outputDone = true;
-                                       } elseif ( !ContentHandler::runLegacyHooks( 'ArticleViewCustom',
-                                                       array( $this->fetchContentObject(), $this->getTitle(), $outputPage ) ) ) {
-
-                                               # Allow extensions do their own custom view for certain pages
-                                               $outputDone = true;
-                                       }
-                                       break;
-                               case 4:
-                                       # Run the parse, protected by a pool counter
-                                       wfDebug( __METHOD__ . ": doing uncached parse\n" );
-
-                                       $content = $this->getContentObject();
-                                       $poolArticleView = new PoolWorkArticleView( $this->getPage(), $parserOptions,
-                                               $this->getRevIdFetched(), $useParserCache, $content );
-
-                                       if ( !$poolArticleView->execute() ) {
-                                               $error = $poolArticleView->getError();
-                                               if ( $error ) {
-                                                       $outputPage->clearHTML(); // for release() errors
-                                                       $outputPage->enableClientCache( false );
-                                                       $outputPage->setRobotPolicy( 'noindex,nofollow' );
-
-                                                       $errortext = $error->getWikiText( false, 'view-pool-error' );
-                                                       $outputPage->addWikiText( '<div class="errorbox">' . $errortext . '</div>' );
-                                               }
-                                               # Connection or timeout error
-                                               wfProfileOut( __METHOD__ );
-                                               return;
-                                       }
-
-                                       $this->mParserOutput = $poolArticleView->getParserOutput();
-                                       $outputPage->addParserOutput( $this->mParserOutput );
-                                       if ( $content->getRedirectTarget() ) {
-                                               $outputPage->addSubtitle( wfMessage( 'redirectpagesub' )->parse() );
-                                       }
-
-                                       # Don't cache a dirty ParserOutput object
-                                       if ( $poolArticleView->getIsDirty() ) {
-                                               $outputPage->setSquidMaxage( 0 );
-                                               $outputPage->addHTML( "<!-- parser cache is expired, " .
-                                                       "sending anyway due to pool overload-->\n" );
-                                       }
-
-                                       $outputDone = true;
-                                       break;
-                               # Should be unreachable, but just in case...
-                               default:
-                                       break 2;
-                       }
-               }
-
-               # Get the ParserOutput actually *displayed* here.
-               # Note that $this->mParserOutput is the *current* version output.
-               $pOutput = ( $outputDone instanceof ParserOutput )
-                       ? $outputDone // object fetched by hook
-                       : $this->mParserOutput;
-
-               # Adjust title for main page & pages with displaytitle
-               if ( $pOutput ) {
-                       $this->adjustDisplayTitle( $pOutput );
-               }
-
-               # For the main page, overwrite the <title> element with the con-
-               # tents of 'pagetitle-view-mainpage' instead of the default (if
-               # that's not empty).
-               # This message always exists because it is in the i18n files
-               if ( $this->getTitle()->isMainPage() ) {
-                       $msg = wfMessage( 'pagetitle-view-mainpage' )->inContentLanguage();
-                       if ( !$msg->isDisabled() ) {
-                               $outputPage->setHTMLTitle( $msg->title( $this->getTitle() )->text() );
-                       }
-               }
-
-               # Check for any __NOINDEX__ tags on the page using $pOutput
-               $policy = $this->getRobotPolicy( 'view', $pOutput );
-               $outputPage->setIndexPolicy( $policy['index'] );
-               $outputPage->setFollowPolicy( $policy['follow'] );
-
-               $this->showViewFooter();
-               $this->mPage->doViewUpdates( $user, $oldid );
-
-               $outputPage->addModules( 'mediawiki.action.view.postEdit' );
-
-               wfProfileOut( __METHOD__ );
-       }
-
-       /**
-        * Adjust title for pages with displaytitle, -{T|}- or language conversion
-        * @param ParserOutput $pOutput
-        */
-       public function adjustDisplayTitle( ParserOutput $pOutput ) {
-               # Adjust the title if it was set by displaytitle, -{T|}- or language conversion
-               $titleText = $pOutput->getTitleText();
-               if ( strval( $titleText ) !== '' ) {
-                       $this->getContext()->getOutput()->setPageTitle( $titleText );
-               }
-       }
-
-       /**
-        * Show a diff page according to current request variables. For use within
-        * Article::view() only, other callers should use the DifferenceEngine class.
-        *
-        * @todo Make protected
-        */
-       public function showDiffPage() {
-               $request = $this->getContext()->getRequest();
-               $user = $this->getContext()->getUser();
-               $diff = $request->getVal( 'diff' );
-               $rcid = $request->getVal( 'rcid' );
-               $diffOnly = $request->getBool( 'diffonly', $user->getOption( 'diffonly' ) );
-               $purge = $request->getVal( 'action' ) == 'purge';
-               $unhide = $request->getInt( 'unhide' ) == 1;
-               $oldid = $this->getOldID();
-
-               $rev = $this->getRevisionFetched();
-
-               if ( !$rev ) {
-                       $this->getContext()->getOutput()->setPageTitle( wfMessage( 'errorpagetitle' ) );
-                       $this->getContext()->getOutput()->addWikiMsg( 'difference-missing-revision', $oldid, 1 );
-                       return;
-               }
-
-               $contentHandler = $rev->getContentHandler();
-               $de = $contentHandler->createDifferenceEngine(
-                       $this->getContext(),
-                       $oldid,
-                       $diff,
-                       $rcid,
-                       $purge,
-                       $unhide
-               );
-
-               // DifferenceEngine directly fetched the revision:
-               $this->mRevIdFetched = $de->mNewid;
-               $de->showDiffPage( $diffOnly );
-
-               // Run view updates for the newer revision being diffed (and shown
-               // below the diff if not $diffOnly).
-               list( $old, $new ) = $de->mapDiffPrevNext( $oldid, $diff );
-               // New can be false, convert it to 0 - this conveniently means the latest revision
-               $this->mPage->doViewUpdates( $user, (int)$new );
-       }
-
-       /**
-        * Show a page view for a page formatted as CSS or JavaScript. To be called by
-        * Article::view() only.
-        *
-        * This exists mostly to serve the deprecated ShowRawCssJs hook (used to customize these views).
-        * It has been replaced by the ContentGetParserOutput hook, which lets you do the same but with
-        * more flexibility.
-        *
-        * @param bool $showCacheHint Whether to show a message telling the user
-        *   to clear the browser cache (default: true).
-        */
-       protected function showCssOrJsPage( $showCacheHint = true ) {
-               $outputPage = $this->getContext()->getOutput();
-
-               if ( $showCacheHint ) {
-                       $dir = $this->getContext()->getLanguage()->getDir();
-                       $lang = $this->getContext()->getLanguage()->getCode();
-
-                       $outputPage->wrapWikiMsg(
-                               "<div id='mw-clearyourcache' lang='$lang' dir='$dir' class='mw-content-$dir'>\n$1\n</div>",
-                               'clearyourcache'
-                       );
-               }
-
-               $this->fetchContentObject();
-
-               if ( $this->mContentObject ) {
-                       // Give hooks a chance to customise the output
-                       if ( ContentHandler::runLegacyHooks(
-                               'ShowRawCssJs',
-                               array( $this->mContentObject, $this->getTitle(), $outputPage ) )
-                       ) {
-                               // If no legacy hooks ran, display the content of the parser output, including RL modules,
-                               // but excluding metadata like categories and language links
-                               $po = $this->mContentObject->getParserOutput( $this->getTitle() );
-                               $outputPage->addParserOutputContent( $po );
-                       }
-               }
-       }
-
-       /**
-        * Get the robot policy to be used for the current view
-        * @param string $action The action= GET parameter
-        * @param ParserOutput|null $pOutput
-        * @return array The policy that should be set
-        * @todo: actions other than 'view'
-        */
-       public function getRobotPolicy( $action, $pOutput = null ) {
-               global $wgArticleRobotPolicies, $wgNamespaceRobotPolicies, $wgDefaultRobotPolicy;
-
-               $ns = $this->getTitle()->getNamespace();
-
-               # Don't index user and user talk pages for blocked users (bug 11443)
-               if ( ( $ns == NS_USER || $ns == NS_USER_TALK ) && !$this->getTitle()->isSubpage() ) {
-                       $specificTarget = null;
-                       $vagueTarget = null;
-                       $titleText = $this->getTitle()->getText();
-                       if ( IP::isValid( $titleText ) ) {
-                               $vagueTarget = $titleText;
-                       } else {
-                               $specificTarget = $titleText;
-                       }
-                       if ( Block::newFromTarget( $specificTarget, $vagueTarget ) instanceof Block ) {
-                               return array(
-                                       'index' => 'noindex',
-                                       'follow' => 'nofollow'
-                               );
-                       }
-               }
-
-               if ( $this->mPage->getID() === 0 || $this->getOldID() ) {
-                       # Non-articles (special pages etc), and old revisions
-                       return array(
-                               'index' => 'noindex',
-                               'follow' => 'nofollow'
-                       );
-               } elseif ( $this->getContext()->getOutput()->isPrintable() ) {
-                       # Discourage indexing of printable versions, but encourage following
-                       return array(
-                               'index' => 'noindex',
-                               'follow' => 'follow'
-                       );
-               } elseif ( $this->getContext()->getRequest()->getInt( 'curid' ) ) {
-                       # For ?curid=x urls, disallow indexing
-                       return array(
-                               'index' => 'noindex',
-                               'follow' => 'follow'
-                       );
-               }
-
-               # Otherwise, construct the policy based on the various config variables.
-               $policy = self::formatRobotPolicy( $wgDefaultRobotPolicy );
-
-               if ( isset( $wgNamespaceRobotPolicies[$ns] ) ) {
-                       # Honour customised robot policies for this namespace
-                       $policy = array_merge(
-                               $policy,
-                               self::formatRobotPolicy( $wgNamespaceRobotPolicies[$ns] )
-                       );
-               }
-               if ( $this->getTitle()->canUseNoindex() && is_object( $pOutput ) && $pOutput->getIndexPolicy() ) {
-                       # __INDEX__ and __NOINDEX__ magic words, if allowed. Incorporates
-                       # a final sanity check that we have really got the parser output.
-                       $policy = array_merge(
-                               $policy,
-                               array( 'index' => $pOutput->getIndexPolicy() )
-                       );
-               }
-
-               if ( isset( $wgArticleRobotPolicies[$this->getTitle()->getPrefixedText()] ) ) {
-                       # (bug 14900) site config can override user-defined __INDEX__ or __NOINDEX__
-                       $policy = array_merge(
-                               $policy,
-                               self::formatRobotPolicy( $wgArticleRobotPolicies[$this->getTitle()->getPrefixedText()] )
-                       );
-               }
-
-               return $policy;
-       }
-
-       /**
-        * Converts a String robot policy into an associative array, to allow
-        * merging of several policies using array_merge().
-        * @param array|string $policy Returns empty array on null/false/'', transparent
-        *   to already-converted arrays, converts string.
-        * @return array 'index' => \<indexpolicy\>, 'follow' => \<followpolicy\>
-        */
-       public static function formatRobotPolicy( $policy ) {
-               if ( is_array( $policy ) ) {
-                       return $policy;
-               } elseif ( !$policy ) {
-                       return array();
-               }
-
-               $policy = explode( ',', $policy );
-               $policy = array_map( 'trim', $policy );
-
-               $arr = array();
-               foreach ( $policy as $var ) {
-                       if ( in_array( $var, array( 'index', 'noindex' ) ) ) {
-                               $arr['index'] = $var;
-                       } elseif ( in_array( $var, array( 'follow', 'nofollow' ) ) ) {
-                               $arr['follow'] = $var;
-                       }
-               }
-
-               return $arr;
-       }
-
-       /**
-        * If this request is a redirect view, send "redirected from" subtitle to
-        * the output. Returns true if the header was needed, false if this is not
-        * a redirect view. Handles both local and remote redirects.
-        *
-        * @return bool
-        */
-       public function showRedirectedFromHeader() {
-               global $wgRedirectSources;
-               $outputPage = $this->getContext()->getOutput();
-
-               $rdfrom = $this->getContext()->getRequest()->getVal( 'rdfrom' );
-
-               if ( isset( $this->mRedirectedFrom ) ) {
-                       // This is an internally redirected page view.
-                       // We'll need a backlink to the source page for navigation.
-                       if ( wfRunHooks( 'ArticleViewRedirect', array( &$this ) ) ) {
-                               $redir = Linker::linkKnown(
-                                       $this->mRedirectedFrom,
-                                       null,
-                                       array(),
-                                       array( 'redirect' => 'no' )
-                               );
-
-                               $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
-
-                               // Set the fragment if one was specified in the redirect
-                               if ( $this->getTitle()->hasFragment() ) {
-                                       $outputPage->addJsConfigVars( 'wgRedirectToFragment', $this->getTitle()->getFragmentForURL() );
-                                       $outputPage->addModules( 'mediawiki.action.view.redirectToFragment' );
-                               }
-
-                               // Add a <link rel="canonical"> tag
-                               $outputPage->setCanonicalUrl( $this->getTitle()->getLocalURL() );
-
-                               // Tell the output object that the user arrived at this article through a redirect
-                               $outputPage->setRedirectedFrom( $this->mRedirectedFrom );
-
-                               return true;
-                       }
-               } elseif ( $rdfrom ) {
-                       // This is an externally redirected view, from some other wiki.
-                       // If it was reported from a trusted site, supply a backlink.
-                       if ( $wgRedirectSources && preg_match( $wgRedirectSources, $rdfrom ) ) {
-                               $redir = Linker::makeExternalLink( $rdfrom, $rdfrom );
-                               $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
-
-                               return true;
-                       }
-               }
-
-               return false;
-       }
-
-       /**
-        * Show a header specific to the namespace currently being viewed, like
-        * [[MediaWiki:Talkpagetext]]. For Article::view().
-        */
-       public function showNamespaceHeader() {
-               if ( $this->getTitle()->isTalkPage() ) {
-                       if ( !wfMessage( 'talkpageheader' )->isDisabled() ) {
-                               $this->getContext()->getOutput()->wrapWikiMsg(
-                                       "<div class=\"mw-talkpageheader\">\n$1\n</div>",
-                                       array( 'talkpageheader' )
-                               );
-                       }
-               }
-       }
-
-       /**
-        * Show the footer section of an ordinary page view
-        */
-       public function showViewFooter() {
-               # check if we're displaying a [[User talk:x.x.x.x]] anonymous talk page
-               if ( $this->getTitle()->getNamespace() == NS_USER_TALK
-                       && IP::isValid( $this->getTitle()->getText() )
-               ) {
-                       $this->getContext()->getOutput()->addWikiMsg( 'anontalkpagetext' );
-               }
-
-               // Show a footer allowing the user to patrol the shown revision or page if possible
-               $patrolFooterShown = $this->showPatrolFooter();
-
-               wfRunHooks( 'ArticleViewFooter', array( $this, $patrolFooterShown ) );
-       }
-
-       /**
-        * If patrol is possible, output a patrol UI box. This is called from the
-        * footer section of ordinary page views. If patrol is not possible or not
-        * desired, does nothing.
-        * Side effect: When the patrol link is build, this method will call
-        * OutputPage::preventClickjacking() and load mediawiki.page.patrol.ajax.
-        *
-        * @return bool
-        */
-       public function showPatrolFooter() {
-               global $wgUseNPPatrol, $wgUseRCPatrol, $wgEnableAPI, $wgEnableWriteAPI;
-
-               $outputPage = $this->getContext()->getOutput();
-               $user = $this->getContext()->getUser();
-               $cache = wfGetMainCache();
-               $rc = false;
-
-               if ( !$this->getTitle()->quickUserCan( 'patrol', $user )
-                       || !( $wgUseRCPatrol || $wgUseNPPatrol )
-               ) {
-                       // Patrolling is disabled or the user isn't allowed to
-                       return false;
-               }
-
-               wfProfileIn( __METHOD__ );
-
-               // New page patrol: Get the timestamp of the oldest revison which
-               // the revision table holds for the given page. Then we look
-               // whether it's within the RC lifespan and if it is, we try
-               // to get the recentchanges row belonging to that entry
-               // (with rc_new = 1).
-
-               // Check for cached results
-               if ( $cache->get( wfMemcKey( 'NotPatrollablePage', $this->getTitle()->getArticleID() ) ) ) {
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               if ( $this->mRevision
-                       && !RecentChange::isInRCLifespan( $this->mRevision->getTimestamp(), 21600 )
-               ) {
-                       // The current revision is already older than what could be in the RC table
-                       // 6h tolerance because the RC might not be cleaned out regularly
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               $dbr = wfGetDB( DB_SLAVE );
-               $oldestRevisionTimestamp = $dbr->selectField(
-                       'revision',
-                       'MIN( rev_timestamp )',
-                       array( 'rev_page' => $this->getTitle()->getArticleID() ),
-                       __METHOD__
-               );
-
-               if ( $oldestRevisionTimestamp
-                       && RecentChange::isInRCLifespan( $oldestRevisionTimestamp, 21600 )
-               ) {
-                       // 6h tolerance because the RC might not be cleaned out regularly
-                       $rc = RecentChange::newFromConds(
-                               array(
-                                       'rc_new' => 1,
-                                       'rc_timestamp' => $oldestRevisionTimestamp,
-                                       'rc_namespace' => $this->getTitle()->getNamespace(),
-                                       'rc_cur_id' => $this->getTitle()->getArticleID(),
-                                       'rc_patrolled' => 0
-                               ),
-                               __METHOD__,
-                               array( 'USE INDEX' => 'new_name_timestamp' )
-                       );
-               }
-
-               if ( !$rc ) {
-                       // No RC entry around
-
-                       // Cache the information we gathered above in case we can't patrol
-                       // Don't cache in case we can patrol as this could change
-                       $cache->set( wfMemcKey( 'NotPatrollablePage', $this->getTitle()->getArticleID() ), '1' );
-
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               if ( $rc->getPerformer()->getName() == $user->getName() ) {
-                       // Don't show a patrol link for own creations. If the user could
-                       // patrol them, they already would be patrolled
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               $rcid = $rc->getAttribute( 'rc_id' );
-
-               $token = $user->getEditToken( $rcid );
-
-               $outputPage->preventClickjacking();
-               if ( $wgEnableAPI && $wgEnableWriteAPI && $user->isAllowed( 'writeapi' ) ) {
-                       $outputPage->addModules( 'mediawiki.page.patrol.ajax' );
-               }
-
-               $link = Linker::linkKnown(
-                       $this->getTitle(),
-                       wfMessage( 'markaspatrolledtext' )->escaped(),
-                       array(),
-                       array(
-                               'action' => 'markpatrolled',
-                               'rcid' => $rcid,
-                               'token' => $token,
-                       )
-               );
-
-               $outputPage->addHTML(
-                       "<div class='patrollink'>" .
-                               wfMessage( 'markaspatrolledlink' )->rawParams( $link )->escaped() .
-                       '</div>'
-               );
-
-               wfProfileOut( __METHOD__ );
-               return true;
-       }
-
-       /**
-        * Show the error text for a missing article. For articles in the MediaWiki
-        * namespace, show the default message text. To be called from Article::view().
-        */
-       public function showMissingArticle() {
-               global $wgSend404Code;
-               $outputPage = $this->getContext()->getOutput();
-               // Whether the page is a root user page of an existing user (but not a subpage)
-               $validUserPage = false;
-
-               # Show info in user (talk) namespace. Does the user exist? Is he blocked?
-               if ( $this->getTitle()->getNamespace() == NS_USER
-                       || $this->getTitle()->getNamespace() == NS_USER_TALK
-               ) {
-                       $parts = explode( '/', $this->getTitle()->getText() );
-                       $rootPart = $parts[0];
-                       $user = User::newFromName( $rootPart, false /* allow IP users*/ );
-                       $ip = User::isIP( $rootPart );
-
-                       if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist
-                               $outputPage->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n\$1\n</div>",
-                                       array( 'userpage-userdoesnotexist-view', wfEscapeWikiText( $rootPart ) ) );
-                       } elseif ( $user->isBlocked() ) { # Show log extract if the user is currently blocked
-                               LogEventsList::showLogExtract(
-                                       $outputPage,
-                                       'block',
-                                       $user->getUserPage(),
-                                       '',
-                                       array(
-                                               'lim' => 1,
-                                               'showIfEmpty' => false,
-                                               'msgKey' => array(
-                                                       'blocked-notice-logextract',
-                                                       $user->getName() # Support GENDER in notice
-                                               )
-                                       )
-                               );
-                               $validUserPage = !$this->getTitle()->isSubpage();
-                       } else {
-                               $validUserPage = !$this->getTitle()->isSubpage();
-                       }
-               }
-
-               wfRunHooks( 'ShowMissingArticle', array( $this ) );
-
-               // Give extensions a chance to hide their (unrelated) log entries
-               $logTypes = array( 'delete', 'move' );
-               $conds = array( "log_action != 'revision'" );
-               wfRunHooks( 'Article::MissingArticleConditions', array( &$conds, $logTypes ) );
-
-               # Show delete and move logs
-               LogEventsList::showLogExtract( $outputPage, $logTypes, $this->getTitle(), '',
-                       array( 'lim' => 10,
-                               'conds' => $conds,
-                               'showIfEmpty' => false,
-                               'msgKey' => array( 'moveddeleted-notice' ) )
-               );
-
-               if ( !$this->mPage->hasViewableContent() && $wgSend404Code && !$validUserPage ) {
-                       // If there's no backing content, send a 404 Not Found
-                       // for better machine handling of broken links.
-                       $this->getContext()->getRequest()->response()->header( "HTTP/1.1 404 Not Found" );
-               }
-
-               if ( $validUserPage ) {
-                       // Also apply the robot policy for nonexisting user pages (as those aren't served as 404)
-                       $policy = $this->getRobotPolicy( 'view' );
-                       $outputPage->setIndexPolicy( $policy['index'] );
-                       $outputPage->setFollowPolicy( $policy['follow'] );
-               }
-
-               $hookResult = wfRunHooks( 'BeforeDisplayNoArticleText', array( $this ) );
-
-               if ( ! $hookResult ) {
-                       return;
-               }
-
-               # Show error message
-               $oldid = $this->getOldID();
-               if ( $oldid ) {
-                       $text = wfMessage( 'missing-revision', $oldid )->plain();
-               } elseif ( $this->getTitle()->getNamespace() === NS_MEDIAWIKI ) {
-                       // Use the default message text
-                       $text = $this->getTitle()->getDefaultMessageText();
-               } elseif ( $this->getTitle()->quickUserCan( 'create', $this->getContext()->getUser() )
-                       && $this->getTitle()->quickUserCan( 'edit', $this->getContext()->getUser() )
-               ) {
-                       $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
-                       $text = wfMessage( $message )->plain();
-               } else {
-                       $text = wfMessage( 'noarticletext-nopermission' )->plain();
-               }
-               $text = "<div class='noarticletext'>\n$text\n</div>";
-
-               $outputPage->addWikiText( $text );
-       }
-
-       /**
-        * If the revision requested for view is deleted, check permissions.
-        * Send either an error message or a warning header to the output.
-        *
-        * @return bool true if the view is allowed, false if not.
-        */
-       public function showDeletedRevisionHeader() {
-               if ( !$this->mRevision->isDeleted( Revision::DELETED_TEXT ) ) {
-                       // Not deleted
-                       return true;
-               }
-
-               $outputPage = $this->getContext()->getOutput();
-               $user = $this->getContext()->getUser();
-               // If the user is not allowed to see it...
-               if ( !$this->mRevision->userCan( Revision::DELETED_TEXT, $user ) ) {
-                       $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
-                               'rev-deleted-text-permission' );
-
-                       return false;
-               // If the user needs to confirm that they want to see it...
-               } elseif ( $this->getContext()->getRequest()->getInt( 'unhide' ) != 1 ) {
-                       # Give explanation and add a link to view the revision...
-                       $oldid = intval( $this->getOldID() );
-                       $link = $this->getTitle()->getFullURL( "oldid={$oldid}&unhide=1" );
-                       $msg = $this->mRevision->isDeleted( Revision::DELETED_RESTRICTED ) ?
-                               'rev-suppressed-text-unhide' : 'rev-deleted-text-unhide';
-                       $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
-                               array( $msg, $link ) );
-
-                       return false;
-               // We are allowed to see...
-               } else {
-                       $msg = $this->mRevision->isDeleted( Revision::DELETED_RESTRICTED ) ?
-                               'rev-suppressed-text-view' : 'rev-deleted-text-view';
-                       $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", $msg );
-
-                       return true;
-               }
-       }
-
-       /**
-        * Generate the navigation links when browsing through an article revisions
-        * It shows the information as:
-        *   Revision as of \<date\>; view current revision
-        *   \<- Previous version | Next Version -\>
-        *
-        * @param int $oldid Revision ID of this article revision
-        */
-       public function setOldSubtitle( $oldid = 0 ) {
-               if ( !wfRunHooks( 'DisplayOldSubtitle', array( &$this, &$oldid ) ) ) {
-                       return;
-               }
-
-               $unhide = $this->getContext()->getRequest()->getInt( 'unhide' ) == 1;
-
-               # Cascade unhide param in links for easy deletion browsing
-               $extraParams = array();
-               if ( $unhide ) {
-                       $extraParams['unhide'] = 1;
-               }
-
-               if ( $this->mRevision && $this->mRevision->getId() === $oldid ) {
-                       $revision = $this->mRevision;
-               } else {
-                       $revision = Revision::newFromId( $oldid );
-               }
-
-               $timestamp = $revision->getTimestamp();
-
-               $current = ( $oldid == $this->mPage->getLatest() );
-               $language = $this->getContext()->getLanguage();
-               $user = $this->getContext()->getUser();
-
-               $td = $language->userTimeAndDate( $timestamp, $user );
-               $tddate = $language->userDate( $timestamp, $user );
-               $tdtime = $language->userTime( $timestamp, $user );
-
-               # Show user links if allowed to see them. If hidden, then show them only if requested...
-               $userlinks = Linker::revUserTools( $revision, !$unhide );
-
-               $infomsg = $current && !wfMessage( 'revision-info-current' )->isDisabled()
-                       ? 'revision-info-current'
-                       : 'revision-info';
-
-               $outputPage = $this->getContext()->getOutput();
-               $outputPage->addSubtitle( "<div id=\"mw-{$infomsg}\">" . wfMessage( $infomsg,
-                       $td )->rawParams( $userlinks )->params( $revision->getID(), $tddate,
-                       $tdtime, $revision->getUser() )->rawParams( Linker::revComment( $revision, true, true ) )->parse() . "</div>" );
-
-               $lnk = $current
-                       ? wfMessage( 'currentrevisionlink' )->escaped()
-                       : Linker::linkKnown(
-                               $this->getTitle(),
-                               wfMessage( 'currentrevisionlink' )->escaped(),
-                               array(),
-                               $extraParams
-                       );
-               $curdiff = $current
-                       ? wfMessage( 'diff' )->escaped()
-                       : Linker::linkKnown(
-                               $this->getTitle(),
-                               wfMessage( 'diff' )->escaped(),
-                               array(),
-                               array(
-                                       'diff' => 'cur',
-                                       'oldid' => $oldid
-                               ) + $extraParams
-                       );
-               $prev = $this->getTitle()->getPreviousRevisionID( $oldid );
-               $prevlink = $prev
-                       ? Linker::linkKnown(
-                               $this->getTitle(),
-                               wfMessage( 'previousrevision' )->escaped(),
-                               array(),
-                               array(
-                                       'direction' => 'prev',
-                                       'oldid' => $oldid
-                               ) + $extraParams
-                       )
-                       : wfMessage( 'previousrevision' )->escaped();
-               $prevdiff = $prev
-                       ? Linker::linkKnown(
-                               $this->getTitle(),
-                               wfMessage( 'diff' )->escaped(),
-                               array(),
-                               array(
-                                       'diff' => 'prev',
-                                       'oldid' => $oldid
-                               ) + $extraParams
-                       )
-                       : wfMessage( 'diff' )->escaped();
-               $nextlink = $current
-                       ? wfMessage( 'nextrevision' )->escaped()
-                       : Linker::linkKnown(
-                               $this->getTitle(),
-                               wfMessage( 'nextrevision' )->escaped(),
-                               array(),
-                               array(
-                                       'direction' => 'next',
-                                       'oldid' => $oldid
-                               ) + $extraParams
-                       );
-               $nextdiff = $current
-                       ? wfMessage( 'diff' )->escaped()
-                       : Linker::linkKnown(
-                               $this->getTitle(),
-                               wfMessage( 'diff' )->escaped(),
-                               array(),
-                               array(
-                                       'diff' => 'next',
-                                       'oldid' => $oldid
-                               ) + $extraParams
-                       );
-
-               $cdel = Linker::getRevDeleteLink( $user, $revision, $this->getTitle() );
-               if ( $cdel !== '' ) {
-                       $cdel .= ' ';
-               }
-
-               $outputPage->addSubtitle( "<div id=\"mw-revision-nav\">" . $cdel .
-                       wfMessage( 'revision-nav' )->rawParams(
-                               $prevdiff, $prevlink, $lnk, $curdiff, $nextlink, $nextdiff
-                       )->escaped() . "</div>" );
-       }
-
-       /**
-        * Return the HTML for the top of a redirect page
-        *
-        * Chances are you should just be using the ParserOutput from
-        * WikitextContent::getParserOutput instead of calling this for redirects.
-        *
-        * @param Title|array $target Destination(s) to redirect
-        * @param bool $appendSubtitle [optional]
-        * @param bool $forceKnown Should the image be shown as a bluelink regardless of existence?
-        * @return string Containing HMTL with redirect link
-        */
-       public function viewRedirect( $target, $appendSubtitle = true, $forceKnown = false ) {
-               $lang = $this->getTitle()->getPageLanguage();
-               if ( $appendSubtitle ) {
-                       $out = $this->getContext()->getOutput();
-                       $out->addSubtitle( wfMessage( 'redirectpagesub' )->parse() );
-               }
-               return static::getRedirectHeaderHtml( $lang, $target, $forceKnown );
-       }
-
-       /**
-        * Return the HTML for the top of a redirect page
-        *
-        * Chances are you should just be using the ParserOutput from
-        * WikitextContent::getParserOutput instead of calling this for redirects.
-        *
-        * @since 1.23
-        * @param Language $lang
-        * @param Title|array $target Destination(s) to redirect
-        * @param bool $forceKnown Should the image be shown as a bluelink regardless of existence?
-        * @return string Containing HMTL with redirect link
-        */
-       public static function getRedirectHeaderHtml( Language $lang, $target, $forceKnown = false ) {
-               global $wgStylePath;
-
-               if ( !is_array( $target ) ) {
-                       $target = array( $target );
-               }
-
-               $imageDir = $lang->getDir();
-
-               // the loop prepends the arrow image before the link, so the first case needs to be outside
-
-               /** @var $title Title */
-               $title = array_shift( $target );
-
-               if ( $forceKnown ) {
-                       $link = Linker::linkKnown( $title, htmlspecialchars( $title->getFullText() ) );
-               } else {
-                       $link = Linker::link( $title, htmlspecialchars( $title->getFullText() ) );
-               }
-
-               $nextRedirect = $wgStylePath . '/common/images/nextredirect' . $imageDir . '.png';
-               $alt = $lang->isRTL() ? '←' : '→';
-
-               // Automatically append redirect=no to each link, since most of them are
-               // redirect pages themselves.
-               /** @var Title $rt */
-               foreach ( $target as $rt ) {
-                       $link .= Html::element( 'img', array( 'src' => $nextRedirect, 'alt' => $alt ) );
-                       if ( $forceKnown ) {
-                               $link .= Linker::linkKnown(
-                                       $rt,
-                                       htmlspecialchars( $rt->getFullText(),
-                                       array(),
-                                       array( 'redirect' => 'no' )
-                               )
-                               );
-                       } else {
-                               $link .= Linker::link(
-                                       $rt,
-                                       htmlspecialchars( $rt->getFullText() ),
-                                       array(),
-                                       array( 'redirect' => 'no' )
-                               );
-                       }
-               }
-
-               $imageUrl = $wgStylePath . '/common/images/redirect' . $imageDir . '.png';
-               return '<div class="redirectMsg">' .
-                       Html::element( 'img', array( 'src' => $imageUrl, 'alt' => '#REDIRECT' ) ) .
-                       '<span class="redirectText">' . $link . '</span></div>';
-       }
-
-       /**
-        * 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();
-       }
-
-       /**
-        * action=protect handler
-        */
-       public function protect() {
-               $form = new ProtectionForm( $this );
-               $form->execute();
-       }
-
-       /**
-        * action=unprotect handler (alias)
-        */
-       public function unprotect() {
-               $this->protect();
-       }
-
-       /**
-        * UI entry point for page deletion
-        */
-       public function delete() {
-               # This code desperately needs to be totally rewritten
-
-               $title = $this->getTitle();
-               $user = $this->getContext()->getUser();
-
-               # Check permissions
-               $permission_errors = $title->getUserPermissionsErrors( 'delete', $user );
-               if ( count( $permission_errors ) ) {
-                       throw new PermissionsError( 'delete', $permission_errors );
-               }
-
-               # Read-only check...
-               if ( wfReadOnly() ) {
-                       throw new ReadOnlyError;
-               }
-
-               # Better double-check that it hasn't been deleted yet!
-               $this->mPage->loadPageData( 'fromdbmaster' );
-               if ( !$this->mPage->exists() ) {
-                       $deleteLogPage = new LogPage( 'delete' );
-                       $outputPage = $this->getContext()->getOutput();
-                       $outputPage->setPageTitle( wfMessage( 'cannotdelete-title', $title->getPrefixedText() ) );
-                       $outputPage->wrapWikiMsg( "<div class=\"error mw-error-cannotdelete\">\n$1\n</div>",
-                                       array( 'cannotdelete', wfEscapeWikiText( $title->getPrefixedText() ) )
-                               );
-                       $outputPage->addHTML(
-                               Xml::element( 'h2', null, $deleteLogPage->getName()->text() )
-                       );
-                       LogEventsList::showLogExtract(
-                               $outputPage,
-                               'delete',
-                               $title
-                       );
-
-                       return;
-               }
-
-               $request = $this->getContext()->getRequest();
-               $deleteReasonList = $request->getText( 'wpDeleteReasonList', 'other' );
-               $deleteReason = $request->getText( 'wpReason' );
-
-               if ( $deleteReasonList == 'other' ) {
-                       $reason = $deleteReason;
-               } elseif ( $deleteReason != '' ) {
-                       // Entry from drop down menu + additional comment
-                       $colonseparator = wfMessage( 'colon-separator' )->inContentLanguage()->text();
-                       $reason = $deleteReasonList . $colonseparator . $deleteReason;
-               } else {
-                       $reason = $deleteReasonList;
-               }
-
-               if ( $request->wasPosted() && $user->matchEditToken( $request->getVal( 'wpEditToken' ),
-                       array( 'delete', $this->getTitle()->getPrefixedText() ) )
-               ) {
-                       # Flag to hide all contents of the archived revisions
-                       $suppress = $request->getVal( 'wpSuppress' ) && $user->isAllowed( 'suppressrevision' );
-
-                       $this->doDelete( $reason, $suppress );
-
-                       WatchAction::doWatchOrUnwatch( $request->getCheck( 'wpWatch' ), $title, $user );
-
-                       return;
-               }
-
-               // Generate deletion reason
-               $hasHistory = false;
-               if ( !$reason ) {
-                       try {
-                               $reason = $this->generateReason( $hasHistory );
-                       } catch ( MWException $e ) {
-                               # if a page is horribly broken, we still want to be able to
-                               # delete it. So be lenient about errors here.
-                               wfDebug( "Error while building auto delete summary: $e" );
-                               $reason = '';
-                       }
-               }
-
-               // If the page has a history, insert a warning
-               if ( $hasHistory ) {
-                       $revisions = $this->mTitle->estimateRevisionCount();
-                       // @todo FIXME: i18n issue/patchwork message
-                       $this->getContext()->getOutput()->addHTML( '<strong class="mw-delete-warning-revisions">' .
-                               wfMessage( 'historywarning' )->numParams( $revisions )->parse() .
-                               wfMessage( 'word-separator' )->plain() . Linker::linkKnown( $title,
-                                       wfMessage( 'history' )->escaped(),
-                                       array( 'rel' => 'archives' ),
-                                       array( 'action' => 'history' ) ) .
-                               '</strong>'
-                       );
-
-                       if ( $this->mTitle->isBigDeletion() ) {
-                               global $wgDeleteRevisionsLimit;
-                               $this->getContext()->getOutput()->wrapWikiMsg( "<div class='error'>\n$1\n</div>\n",
-                                       array(
-                                               'delete-warning-toobig',
-                                               $this->getContext()->getLanguage()->formatNum( $wgDeleteRevisionsLimit )
-                                       )
-                               );
-                       }
-               }
-
-               $this->confirmDelete( $reason );
-       }
-
-       /**
-        * Output deletion confirmation dialog
-        * @todo FIXME: Move to another file?
-        * @param string $reason Prefilled reason
-        */
-       public function confirmDelete( $reason ) {
-               wfDebug( "Article::confirmDelete\n" );
-
-               $outputPage = $this->getContext()->getOutput();
-               $outputPage->setPageTitle( wfMessage( 'delete-confirm', $this->getTitle()->getPrefixedText() ) );
-               $outputPage->addBacklinkSubtitle( $this->getTitle() );
-               $outputPage->setRobotPolicy( 'noindex,nofollow' );
-               $backlinkCache = $this->getTitle()->getBacklinkCache();
-               if ( $backlinkCache->hasLinks( 'pagelinks' ) || $backlinkCache->hasLinks( 'templatelinks' ) ) {
-                       $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
-                               'deleting-backlinks-warning' );
-               }
-               $outputPage->addWikiMsg( 'confirmdeletetext' );
-
-               wfRunHooks( 'ArticleConfirmDelete', array( $this, $outputPage, &$reason ) );
-
-               $user = $this->getContext()->getUser();
-
-               if ( $user->isAllowed( 'suppressrevision' ) ) {
-                       $suppress = "<tr id=\"wpDeleteSuppressRow\">
-                                       <td></td>
-                                       <td class='mw-input'><strong>" .
-                                               Xml::checkLabel( wfMessage( 'revdelete-suppress' )->text(),
-                                                       'wpSuppress', 'wpSuppress', false, array( 'tabindex' => '4' ) ) .
-                                       "</strong></td>
-                               </tr>";
-               } else {
-                       $suppress = '';
-               }
-               $checkWatch = $user->getBoolOption( 'watchdeletion' ) || $user->isWatched( $this->getTitle() );
-
-               $form = Xml::openElement( 'form', array( 'method' => 'post',
-                       'action' => $this->getTitle()->getLocalURL( 'action=delete' ), 'id' => 'deleteconfirm' ) ) .
-                       Xml::openElement( 'fieldset', array( 'id' => 'mw-delete-table' ) ) .
-                       Xml::tags( 'legend', null, wfMessage( 'delete-legend' )->escaped() ) .
-                       Xml::openElement( 'table', array( 'id' => 'mw-deleteconfirm-table' ) ) .
-                       "<tr id=\"wpDeleteReasonListRow\">
-                               <td class='mw-label'>" .
-                                       Xml::label( wfMessage( 'deletecomment' )->text(), 'wpDeleteReasonList' ) .
-                               "</td>
-                               <td class='mw-input'>" .
-                                       Xml::listDropDown(
-                                               'wpDeleteReasonList',
-                                               wfMessage( 'deletereason-dropdown' )->inContentLanguage()->text(),
-                                               wfMessage( 'deletereasonotherlist' )->inContentLanguage()->text(),
-                                               '',
-                                               'wpReasonDropDown',
-                                               1
-                                       ) .
-                               "</td>
-                       </tr>
-                       <tr id=\"wpDeleteReasonRow\">
-                               <td class='mw-label'>" .
-                                       Xml::label( wfMessage( 'deleteotherreason' )->text(), 'wpReason' ) .
-                               "</td>
-                               <td class='mw-input'>" .
-                               Html::input( 'wpReason', $reason, 'text', array(
-                                       'size' => '60',
-                                       'maxlength' => '255',
-                                       'tabindex' => '2',
-                                       'id' => 'wpReason',
-                                       'autofocus'
-                               ) ) .
-                               "</td>
-                       </tr>";
-
-               # Disallow watching if user is not logged in
-               if ( $user->isLoggedIn() ) {
-                       $form .= "
-                       <tr>
-                               <td></td>
-                               <td class='mw-input'>" .
-                                       Xml::checkLabel( wfMessage( 'watchthis' )->text(),
-                                               'wpWatch', 'wpWatch', $checkWatch, array( 'tabindex' => '3' ) ) .
-                               "</td>
-                       </tr>";
-               }
-
-               $form .= "
-                       $suppress
-                       <tr>
-                               <td></td>
-                               <td class='mw-submit'>" .
-                                       Xml::submitButton( wfMessage( 'deletepage' )->text(),
-                                               array( 'name' => 'wpConfirmB', 'id' => 'wpConfirmB', 'tabindex' => '5' ) ) .
-                               "</td>
-                       </tr>" .
-                       Xml::closeElement( 'table' ) .
-                       Xml::closeElement( 'fieldset' ) .
-                       Html::hidden(
-                               'wpEditToken',
-                               $user->getEditToken( array( 'delete', $this->getTitle()->getPrefixedText() ) )
-                       ) .
-                       Xml::closeElement( 'form' );
-
-                       if ( $user->isAllowed( 'editinterface' ) ) {
-                               $title = Title::makeTitle( NS_MEDIAWIKI, 'Deletereason-dropdown' );
-                               $link = Linker::link(
-                                       $title,
-                                       wfMessage( 'delete-edit-reasonlist' )->escaped(),
-                                       array(),
-                                       array( 'action' => 'edit' )
-                               );
-                               $form .= '<p class="mw-delete-editreasons">' . $link . '</p>';
-                       }
-
-               $outputPage->addHTML( $form );
-
-               $deleteLogPage = new LogPage( 'delete' );
-               $outputPage->addHTML( Xml::element( 'h2', null, $deleteLogPage->getName()->text() ) );
-               LogEventsList::showLogExtract( $outputPage, 'delete',
-                       $this->getTitle()
-               );
-       }
-
-       /**
-        * Perform a deletion and output success or failure messages
-        * @param string $reason
-        * @param bool $suppress
-        */
-       public function doDelete( $reason, $suppress = false ) {
-               $error = '';
-               $outputPage = $this->getContext()->getOutput();
-               $status = $this->mPage->doDeleteArticleReal( $reason, $suppress, 0, true, $error );
-
-               if ( $status->isGood() ) {
-                       $deleted = $this->getTitle()->getPrefixedText();
-
-                       $outputPage->setPageTitle( wfMessage( 'actioncomplete' ) );
-                       $outputPage->setRobotPolicy( 'noindex,nofollow' );
-
-                       $loglink = '[[Special:Log/delete|' . wfMessage( 'deletionlog' )->text() . ']]';
-
-                       $outputPage->addWikiMsg( 'deletedtext', wfEscapeWikiText( $deleted ), $loglink );
-                       $outputPage->returnToMain( false );
-               } else {
-                       $outputPage->setPageTitle(
-                               wfMessage( 'cannotdelete-title',
-                                       $this->getTitle()->getPrefixedText() )
-                       );
-
-                       if ( $error == '' ) {
-                               $outputPage->addWikiText(
-                                       "<div class=\"error mw-error-cannotdelete\">\n" . $status->getWikiText() . "\n</div>"
-                               );
-                               $deleteLogPage = new LogPage( 'delete' );
-                               $outputPage->addHTML( Xml::element( 'h2', null, $deleteLogPage->getName()->text() ) );
-
-                               LogEventsList::showLogExtract(
-                                       $outputPage,
-                                       'delete',
-                                       $this->getTitle()
-                               );
-                       } else {
-                               $outputPage->addHTML( $error );
-                       }
-               }
-       }
-
-       /* Caching functions */
-
-       /**
-        * checkLastModified returns true if it has taken care of all
-        * output to the client that is necessary for this request.
-        * (that is, it has sent a cached version of the page)
-        *
-        * @return bool true if cached version send, false otherwise
-        */
-       protected function tryFileCache() {
-               static $called = false;
-
-               if ( $called ) {
-                       wfDebug( "Article::tryFileCache(): called twice!?\n" );
-                       return false;
-               }
-
-               $called = true;
-               if ( $this->isFileCacheable() ) {
-                       $cache = HTMLFileCache::newFromTitle( $this->getTitle(), 'view' );
-                       if ( $cache->isCacheGood( $this->mPage->getTouched() ) ) {
-                               wfDebug( "Article::tryFileCache(): about to load file\n" );
-                               $cache->loadFromFileCache( $this->getContext() );
-                               return true;
-                       } else {
-                               wfDebug( "Article::tryFileCache(): starting buffer\n" );
-                               ob_start( array( &$cache, 'saveToFileCache' ) );
-                       }
-               } else {
-                       wfDebug( "Article::tryFileCache(): not cacheable\n" );
-               }
-
-               return false;
-       }
-
-       /**
-        * Check if the page can be cached
-        * @return bool
-        */
-       public function isFileCacheable() {
-               $cacheable = false;
-
-               if ( HTMLFileCache::useFileCache( $this->getContext() ) ) {
-                       $cacheable = $this->mPage->getID()
-                               && !$this->mRedirectedFrom && !$this->getTitle()->isRedirect();
-                       // Extension may have reason to disable file caching on some pages.
-                       if ( $cacheable ) {
-                               $cacheable = wfRunHooks( 'IsFileCacheable', array( &$this ) );
-                       }
-               }
-
-               return $cacheable;
-       }
-
-       /**#@-*/
-
-       /**
-        * Lightweight method to get the parser output for a page, checking the parser cache
-        * and so on. Doesn't consider most of the stuff that WikiPage::view is forced to
-        * consider, so it's not appropriate to use there.
-        *
-        * @since 1.16 (r52326) for LiquidThreads
-        *
-        * @param int|null $oldid Revision ID or null
-        * @param User $user The relevant user
-        * @return ParserOutput|bool ParserOutput or false if the given revision ID is not found
-        */
-       public function getParserOutput( $oldid = null, User $user = null ) {
-               //XXX: bypasses mParserOptions and thus setParserOptions()
-
-               if ( $user === null ) {
-                       $parserOptions = $this->getParserOptions();
-               } else {
-                       $parserOptions = $this->mPage->makeParserOptions( $user );
-               }
-
-               return $this->mPage->getParserOutput( $parserOptions, $oldid );
-       }
-
-       /**
-        * Override the ParserOptions used to render the primary article wikitext.
-        *
-        * @param ParserOptions $options
-        * @throws MWException if the parser options where already initialized.
-        */
-       public function setParserOptions( ParserOptions $options ) {
-               if ( $this->mParserOptions ) {
-                       throw new MWException( "can't change parser options after they have already been set" );
-               }
-
-               // clone, so if $options is modified later, it doesn't confuse the parser cache.
-               $this->mParserOptions = clone $options;
-       }
-
-       /**
-        * Get parser options suitable for rendering the primary article wikitext
-        * @return ParserOptions
-        */
-       public function getParserOptions() {
-               if ( !$this->mParserOptions ) {
-                       $this->mParserOptions = $this->mPage->makeParserOptions( $this->getContext() );
-               }
-               // Clone to allow modifications of the return value without affecting cache
-               return clone $this->mParserOptions;
-       }
-
-       /**
-        * Sets the context this Article is executed in
-        *
-        * @param IContextSource $context
-        * @since 1.18
-        */
-       public function setContext( $context ) {
-               $this->mContext = $context;
-       }
-
-       /**
-        * Gets the context this Article is executed in
-        *
-        * @return IContextSource
-        * @since 1.18
-        */
-       public function getContext() {
-               if ( $this->mContext instanceof IContextSource ) {
-                       return $this->mContext;
-               } else {
-                       wfDebug( __METHOD__ . " called and \$mContext is null. " .
-                               "Return RequestContext::getMain(); for sanity\n" );
-                       return RequestContext::getMain();
-               }
-       }
-
-       /**
-        * Info about this page
-        * @deprecated since 1.19
-        */
-       public function info() {
-               wfDeprecated( __METHOD__, '1.19' );
-               Action::factory( 'info', $this )->show();
-       }
-
-       /**
-        * Handle action=purge
-        * @deprecated since 1.19
-        * @return Action|bool|null false if the action is disabled, null if it is not recognised
-        */
-       public function purge() {
-               return Action::factory( 'purge', $this )->show();
-       }
-
-       /**
-        * Handle action=revert
-        * @deprecated since 1.19
-        */
-       public function revert() {
-               wfDeprecated( __METHOD__, '1.19' );
-               Action::factory( 'revert', $this )->show();
-       }
-
-       /**
-        * Handle action=rollback
-        * @deprecated since 1.19
-        */
-       public function rollback() {
-               wfDeprecated( __METHOD__, '1.19' );
-               Action::factory( 'rollback', $this )->show();
-       }
-
-       /**
-        * Use PHP's magic __get handler to handle accessing of
-        * raw WikiPage fields for backwards compatibility.
-        *
-        * @param string $fname Field name
-        */
-       public function __get( $fname ) {
-               if ( property_exists( $this->mPage, $fname ) ) {
-                       #wfWarn( "Access to raw $fname field " . __CLASS__ );
-                       return $this->mPage->$fname;
-               }
-               trigger_error( 'Inaccessible property via __get(): ' . $fname, E_USER_NOTICE );
-       }
-
-       /**
-        * Use PHP's magic __set handler to handle setting of
-        * raw WikiPage fields for backwards compatibility.
-        *
-        * @param string $fname Field name
-        * @param mixed $fvalue New value
-        */
-       public function __set( $fname, $fvalue ) {
-               if ( property_exists( $this->mPage, $fname ) ) {
-                       #wfWarn( "Access to raw $fname field of " . __CLASS__ );
-                       $this->mPage->$fname = $fvalue;
-               // Note: extensions may want to toss on new fields
-               } elseif ( !in_array( $fname, array( 'mContext', 'mPage' ) ) ) {
-                       $this->mPage->$fname = $fvalue;
-               } else {
-                       trigger_error( 'Inaccessible property via __set(): ' . $fname, E_USER_NOTICE );
-               }
-       }
-
-       /**
-        * Use PHP's magic __call handler to transform instance calls to
-        * WikiPage functions for backwards compatibility.
-        *
-        * @param string $fname Name of called method
-        * @param array $args Arguments to the method
-        * @return mixed
-        */
-       public function __call( $fname, $args ) {
-               if ( is_callable( array( $this->mPage, $fname ) ) ) {
-                       #wfWarn( "Call to " . __CLASS__ . "::$fname; please use WikiPage instead" );
-                       return call_user_func_array( array( $this->mPage, $fname ), $args );
-               }
-               trigger_error( 'Inaccessible function via __call(): ' . $fname, E_USER_ERROR );
-       }
-
-       // ****** B/C functions to work-around PHP silliness with __call and references ****** //
-
-       /**
-        * @param array $limit
-        * @param array $expiry
-        * @param bool $cascade
-        * @param string $reason
-        * @param User $user
-        * @return Status
-        */
-       public function doUpdateRestrictions( array $limit, array $expiry, &$cascade,
-               $reason, User $user
-       ) {
-               return $this->mPage->doUpdateRestrictions( $limit, $expiry, $cascade, $reason, $user );
-       }
-
-       /**
-        * @param array $limit
-        * @param string $reason
-        * @param int $cascade
-        * @param array $expiry
-        * @return bool
-        */
-       public function updateRestrictions( $limit = array(), $reason = '',
-               &$cascade = 0, $expiry = array()
-       ) {
-               return $this->mPage->doUpdateRestrictions(
-                       $limit,
-                       $expiry,
-                       $cascade,
-                       $reason,
-                       $this->getContext()->getUser()
-               );
-       }
-
-       /**
-        * @param string $reason
-        * @param bool $suppress
-        * @param int $id
-        * @param bool $commit
-        * @param string $error
-        * @return bool
-        */
-       public function doDeleteArticle( $reason, $suppress = false, $id = 0,
-               $commit = true, &$error = ''
-       ) {
-               return $this->mPage->doDeleteArticle( $reason, $suppress, $id, $commit, $error );
-       }
-
-       /**
-        * @param string $fromP
-        * @param string $summary
-        * @param string $token
-        * @param bool $bot
-        * @param array $resultDetails
-        * @param User|null $user
-        * @return array
-        */
-       public function doRollback( $fromP, $summary, $token, $bot, &$resultDetails, User $user = null ) {
-               $user = is_null( $user ) ? $this->getContext()->getUser() : $user;
-               return $this->mPage->doRollback( $fromP, $summary, $token, $bot, $resultDetails, $user );
-       }
-
-       /**
-        * @param string $fromP
-        * @param string $summary
-        * @param bool $bot
-        * @param array $resultDetails
-        * @param User|null $guser
-        * @return array
-        */
-       public function commitRollback( $fromP, $summary, $bot, &$resultDetails, User $guser = null ) {
-               $guser = is_null( $guser ) ? $this->getContext()->getUser() : $guser;
-               return $this->mPage->commitRollback( $fromP, $summary, $bot, $resultDetails, $guser );
-       }
-
-       /**
-        * @param bool $hasHistory
-        * @return mixed
-        */
-       public function generateReason( &$hasHistory ) {
-               $title = $this->mPage->getTitle();
-               $handler = ContentHandler::getForTitle( $title );
-               return $handler->getAutoDeleteReason( $title, $hasHistory );
-       }
-
-       // ****** B/C functions for static methods ( __callStatic is PHP>=5.3 ) ****** //
-
-       /**
-        * @return array
-        */
-       public static function selectFields() {
-               return WikiPage::selectFields();
-       }
-
-       /**
-        * @param Title $title
-        */
-       public static function onArticleCreate( $title ) {
-               WikiPage::onArticleCreate( $title );
-       }
-
-       /**
-        * @param Title $title
-        */
-       public static function onArticleDelete( $title ) {
-               WikiPage::onArticleDelete( $title );
-       }
-
-       /**
-        * @param Title $title
-        */
-       public static function onArticleEdit( $title ) {
-               WikiPage::onArticleEdit( $title );
-       }
-
-       /**
-        * @param string $oldtext
-        * @param string $newtext
-        * @param int $flags
-        * @return string
-        * @deprecated since 1.21, use ContentHandler::getAutosummary() instead
-        */
-       public static function getAutosummary( $oldtext, $newtext, $flags ) {
-               return WikiPage::getAutosummary( $oldtext, $newtext, $flags );
-       }
-       // ******
-}
index 5442507..1417db0 100644 (file)
@@ -32,7 +32,6 @@ $wgAutoloadLocalClasses = array(
        'AjaxDispatcher' => 'includes/AjaxDispatcher.php',
        'AjaxResponse' => 'includes/AjaxResponse.php',
        'AlphabeticPager' => 'includes/Pager.php',
-       'Article' => 'includes/Article.php',
        'AtomFeed' => 'includes/Feed.php',
        'AuthPlugin' => 'includes/AuthPlugin.php',
        'AuthPluginUser' => 'includes/AuthPlugin.php',
@@ -42,7 +41,6 @@ $wgAutoloadLocalClasses = array(
        'CacheHelper' => 'includes/CacheHelper.php',
        'Category' => 'includes/Category.php',
        'Categoryfinder' => 'includes/Categoryfinder.php',
-       'CategoryPage' => 'includes/CategoryPage.php',
        'CategoryViewer' => 'includes/CategoryViewer.php',
        'ChangesFeed' => 'includes/ChangesFeed.php',
        'ChangeTags' => 'includes/ChangeTags.php',
@@ -112,10 +110,6 @@ $wgAutoloadLocalClasses = array(
        'ICacheHelper' => 'includes/CacheHelper.php',
        'IcuCollation' => 'includes/Collation.php',
        'IdentityCollation' => 'includes/Collation.php',
-       'ImageHistoryList' => 'includes/ImagePage.php',
-       'ImageHistoryPseudoPager' => 'includes/ImagePage.php',
-       'ImagePage' => 'includes/ImagePage.php',
-       'ImageQueryPage' => 'includes/ImageQueryPage.php',
        'ImportStreamSource' => 'includes/Import.php',
        'ImportStringSource' => 'includes/Import.php',
        'IndexPager' => 'includes/Pager.php',
@@ -145,8 +139,6 @@ $wgAutoloadLocalClasses = array(
        'MWInit' => 'includes/Init.php',
        'MWNamespace' => 'includes/Namespace.php',
        'OutputPage' => 'includes/OutputPage.php',
-       'Page' => 'includes/WikiPage.php',
-       'PageQueryPage' => 'includes/PageQueryPage.php',
        'Pager' => 'includes/Pager.php',
        'PasswordError' => 'includes/User.php',
        'PathRouter' => 'includes/PathRouter.php',
@@ -157,12 +149,11 @@ $wgAutoloadLocalClasses = array(
        'PoolCounterRedis' => 'includes/poolcounter/PoolCounterRedis.php',
        'PoolCounterWork' => 'includes/poolcounter/PoolCounterWork.php',
        'PoolCounterWorkViaCallback' => 'includes/poolcounter/PoolCounterWork.php',
-       'PoolWorkArticleView' => 'includes/WikiPage.php',
+       'PoolWorkArticleView' => 'includes/poolcounter/PoolWorkArticleView.php',
        'Preferences' => 'includes/Preferences.php',
        'PreferencesForm' => 'includes/Preferences.php',
        'PrefixSearch' => 'includes/PrefixSearch.php',
        'ProtectionForm' => 'includes/ProtectionForm.php',
-       'QueryPage' => 'includes/QueryPage.php',
        'QuickTemplate' => 'includes/SkinTemplate.php',
        'RawMessage' => 'includes/Message.php',
        'ReverseChronologicalPager' => 'includes/Pager.php',
@@ -202,16 +193,12 @@ $wgAutoloadLocalClasses = array(
        'UserCache' => 'includes/cache/UserCache.php',
        'UserMailer' => 'includes/UserMailer.php',
        'UserRightsProxy' => 'includes/UserRightsProxy.php',
-       'WantedQueryPage' => 'includes/QueryPage.php',
        'WatchedItem' => 'includes/WatchedItem.php',
        'WebRequest' => 'includes/WebRequest.php',
        'WebRequestUpload' => 'includes/WebRequest.php',
        'WebResponse' => 'includes/WebResponse.php',
-       'WikiCategoryPage' => 'includes/WikiCategoryPage.php',
        'WikiExporter' => 'includes/Export.php',
-       'WikiFilePage' => 'includes/WikiFilePage.php',
        'WikiImporter' => 'includes/Import.php',
-       'WikiPage' => 'includes/WikiPage.php',
        'WikiRevision' => 'includes/Import.php',
        'WikiMap' => 'includes/WikiMap.php',
        'WikiReference' => 'includes/WikiMap.php',
@@ -726,6 +713,7 @@ $wgAutoloadLocalClasses = array(
        'ManualLogEntry' => 'includes/logging/LogEntry.php',
        'MoveLogFormatter' => 'includes/logging/MoveLogFormatter.php',
        'NewUsersLogFormatter' => 'includes/logging/NewUsersLogFormatter.php',
+       'PageLangLogFormatter' => 'includes/logging/PageLangLogFormatter.php',
        'PatrolLog' => 'includes/logging/PatrolLog.php',
        'PatrolLogFormatter' => 'includes/logging/PatrolLogFormatter.php',
        'RCDatabaseLogEntry' => 'includes/logging/LogEntry.php',
@@ -796,6 +784,17 @@ $wgAutoloadLocalClasses = array(
        'WinCacheBagOStuff' => 'includes/objectcache/WinCacheBagOStuff.php',
        'XCacheBagOStuff' => 'includes/objectcache/XCacheBagOStuff.php',
 
+       # includes/page
+       'Article' => 'includes/page/Article.php',
+       'CategoryPage' => 'includes/page/CategoryPage.php',
+       'ImageHistoryList' => 'includes/page/ImagePage.php',
+       'ImageHistoryPseudoPager' => 'includes/page/ImagePage.php',
+       'ImagePage' => 'includes/page/ImagePage.php',
+       'Page' => 'includes/page/WikiPage.php',
+       'WikiCategoryPage' => 'includes/page/WikiCategoryPage.php',
+       'WikiFilePage' => 'includes/page/WikiFilePage.php',
+       'WikiPage' => 'includes/page/WikiPage.php',
+
        # includes/parser
        'CacheTime' => 'includes/parser/CacheTime.php',
        'CoreParserFunctions' => 'includes/parser/CoreParserFunctions.php',
@@ -828,7 +827,7 @@ $wgAutoloadLocalClasses = array(
        'ParserCache' => 'includes/parser/ParserCache.php',
        'ParserOptions' => 'includes/parser/ParserOptions.php',
        'ParserOutput' => 'includes/parser/ParserOutput.php',
-       'Parser_DiffTest' => 'includes/parser/Parser_DiffTest.php',
+       'ParserDiffTest' => 'includes/parser/ParserDiffTest.php',
        'Preprocessor' => 'includes/parser/Preprocessor.php',
        'Preprocessor_DOM' => 'includes/parser/Preprocessor_DOM.php',
        'Preprocessor_Hash' => 'includes/parser/Preprocessor_Hash.php',
@@ -925,13 +924,17 @@ $wgAutoloadLocalClasses = array(
        # includes/specialpage
        'ChangesListSpecialPage' => 'includes/specialpage/ChangesListSpecialPage.php',
        'FormSpecialPage' => 'includes/specialpage/FormSpecialPage.php',
+       'ImageQueryPage' => 'includes/specialpage/ImageQueryPage.php',
        'IncludableSpecialPage' => 'includes/specialpage/IncludableSpecialPage.php',
+       'PageQueryPage' => 'includes/specialpage/PageQueryPage.php',
+       'QueryPage' => 'includes/specialpage/QueryPage.php',
        'RedirectSpecialArticle' => 'includes/specialpage/RedirectSpecialPage.php',
        'RedirectSpecialPage' => 'includes/specialpage/RedirectSpecialPage.php',
        'SpecialPage' => 'includes/specialpage/SpecialPage.php',
        'SpecialPageFactory' => 'includes/specialpage/SpecialPageFactory.php',
        'SpecialRedirectToSpecial' => 'includes/specialpage/RedirectSpecialPage.php',
        'UnlistedSpecialPage' => 'includes/specialpage/UnlistedSpecialPage.php',
+       'WantedQueryPage' => 'includes/specialpage/WantedQueryPage.php',
 
        # includes/specials
        'ActiveUsersPager' => 'includes/specials/SpecialActiveusers.php',
@@ -1015,6 +1018,7 @@ $wgAutoloadLocalClasses = array(
        'SpecialMyuploads' => 'includes/specials/SpecialMyRedirectPages.php',
        'SpecialNewFiles' => 'includes/specials/SpecialNewimages.php',
        'SpecialNewpages' => 'includes/specials/SpecialNewpages.php',
+       'SpecialPageLanguage' => 'includes/specials/SpecialPageLanguage.php',
        'SpecialPasswordReset' => 'includes/specials/SpecialPasswordReset.php',
        'SpecialPagesWithProp' => 'includes/specials/SpecialPagesWithProp.php',
        'SpecialPermanentLink' => 'includes/specials/SpecialPermanentLink.php',
index e235e4e..7bab464 100644 (file)
@@ -320,7 +320,7 @@ class Category {
                wfProfileIn( __METHOD__ );
 
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->begin( __METHOD__ );
+               $dbw->startAtomic( __METHOD__ );
 
                # Insert the row if it doesn't exist yet (e.g., this is being run via
                # update.php from a pre-1.16 schema).  TODO: This will cause lots and
@@ -360,7 +360,7 @@ class Category {
                        array( 'cat_title' => $this->mName ),
                        __METHOD__
                );
-               $dbw->commit( __METHOD__ );
+               $dbw->endAtomic( __METHOD__ );
 
                wfProfileOut( __METHOD__ );
 
diff --git a/includes/CategoryPage.php b/includes/CategoryPage.php
deleted file mode 100644 (file)
index 9abc6a8..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-/**
- * Special handling for category description pages.
- * Modelled after ImagePage.php.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * Special handling for category description pages, showing pages,
- * subcategories and file that belong to the category
- */
-class CategoryPage extends Article {
-       # Subclasses can change this to override the viewer class.
-       protected $mCategoryViewerClass = 'CategoryViewer';
-
-       /**
-        * @param Title $title
-        * @return WikiCategoryPage
-        */
-       protected function newPage( Title $title ) {
-               // Overload mPage with a category-specific page
-               return new WikiCategoryPage( $title );
-       }
-
-       /**
-        * Constructor from a page id
-        * @param int $id Article ID to load
-        * @return CategoryPage|null
-        */
-       public static function newFromID( $id ) {
-               $t = Title::newFromID( $id );
-               # @todo FIXME: Doesn't inherit right
-               return $t == null ? null : new self( $t );
-               # return $t == null ? null : new static( $t ); // PHP 5.3
-       }
-
-       function view() {
-               $request = $this->getContext()->getRequest();
-               $diff = $request->getVal( 'diff' );
-               $diffOnly = $request->getBool( 'diffonly',
-                       $this->getContext()->getUser()->getOption( 'diffonly' ) );
-
-               if ( $diff !== null && $diffOnly ) {
-                       parent::view();
-                       return;
-               }
-
-               if ( !wfRunHooks( 'CategoryPageView', array( &$this ) ) ) {
-                       return;
-               }
-
-               $title = $this->getTitle();
-               if ( NS_CATEGORY == $title->getNamespace() ) {
-                       $this->openShowCategory();
-               }
-
-               parent::view();
-
-               if ( NS_CATEGORY == $title->getNamespace() ) {
-                       $this->closeShowCategory();
-               }
-       }
-
-       function openShowCategory() {
-               # For overloading
-       }
-
-       function closeShowCategory() {
-               // Use these as defaults for back compat --catrope
-               $request = $this->getContext()->getRequest();
-               $oldFrom = $request->getVal( 'from' );
-               $oldUntil = $request->getVal( 'until' );
-
-               $reqArray = $request->getValues();
-
-               $from = $until = array();
-               foreach ( array( 'page', 'subcat', 'file' ) as $type ) {
-                       $from[$type] = $request->getVal( "{$type}from", $oldFrom );
-                       $until[$type] = $request->getVal( "{$type}until", $oldUntil );
-
-                       // Do not want old-style from/until propagating in nav links.
-                       if ( !isset( $reqArray["{$type}from"] ) && isset( $reqArray["from"] ) ) {
-                               $reqArray["{$type}from"] = $reqArray["from"];
-                       }
-                       if ( !isset( $reqArray["{$type}to"] ) && isset( $reqArray["to"] ) ) {
-                               $reqArray["{$type}to"] = $reqArray["to"];
-                       }
-               }
-
-               unset( $reqArray["from"] );
-               unset( $reqArray["to"] );
-
-               $viewer = new $this->mCategoryViewerClass(
-                       $this->getContext()->getTitle(),
-                       $this->getContext(),
-                       $from,
-                       $until,
-                       $reqArray
-               );
-               $this->getContext()->getOutput()->addHTML( $viewer->getHTML() );
-       }
-}
index 49818e6..cd9eaa9 100644 (file)
@@ -707,7 +707,10 @@ class CategoryViewer extends ContextSource {
                        // to refresh the incorrect category table entry -- which should be
                        // quick due to the small number of entries.
                        $totalcnt = $rescnt;
-                       $this->cat->refreshCounts();
+                       $category = $this->cat;
+                       wfGetDB( DB_MASTER )->onTransactionIdle( function() use ( $category ) {
+                               $category->refreshCounts();
+                       } );
                } else {
                        // Case 3: hopeless.  Don't give a total count at all.
                        // Messages: category-subcat-count-limited, category-article-count-limited,
index bc7959b..4f170f3 100644 (file)
@@ -4352,6 +4352,7 @@ $wgGroupPermissions['sysop']['noratelimit'] = true;
 $wgGroupPermissions['sysop']['movefile'] = true;
 $wgGroupPermissions['sysop']['unblockself'] = true;
 $wgGroupPermissions['sysop']['suppressredirect'] = true;
+#$wgGroupPermissions['sysop']['pagelang'] = true;
 #$wgGroupPermissions['sysop']['upload_by_url'] = true;
 #$wgGroupPermissions['sysop']['mergehistory'] = true;
 
@@ -5199,21 +5200,6 @@ $wgParserTestFiles = array(
        "$IP/tests/parser/extraParserTests.txt"
 );
 
-/**
- * If configured, specifies target CodeReview installation to send test
- * result data from 'parserTests.php --upload'
- *
- * Something like this:
- * $wgParserTestRemote = array(
- *     'api-url' => 'https://www.mediawiki.org/w/api.php',
- *     'repo'    => 'MediaWiki',
- *     'suite'   => 'ParserTests',
- *     'path'    => '/trunk/phase3', // not used client-side; for reference
- *     'secret'  => 'qmoicj3mc4mcklmqw', // Shared secret used in HMAC validation
- * );
- */
-$wgParserTestRemote = false;
-
 /**
  * Allow running of javascript test suites via [[Special:JavaScriptTest]] (such as QUnit).
  */
@@ -6083,6 +6069,7 @@ $wgAutoloadAttemptLowercase = true;
  * $wgExtensionCredits[$type][] = array(
  *     'path' => __FILE__,
  *     'name' => 'Example extension',
+ *     'namemsg' => 'exampleextension-name',
  *     'author' => array(
  *         'Foo Barstein',
  *     ),
@@ -6102,15 +6089,24 @@ $wgAutoloadAttemptLowercase = true;
  *    'skin', 'api', or 'other', or any additional types as specified through the
  *    ExtensionTypes hook as used in SpecialVersion::getExtensionTypes().
  *
+ * - name: Name of extension as an inline string instead of localizable message.
+ *    Do not omit this even if 'namemsg' is provided, as it is used to override
+ *    the path Special:Version uses to find extension's license info, and is
+ *    required for backwards-compatibility with MediaWiki 1.23 and older.
+ *
+ * - namemsg (since MW 1.24): A message key for a message containing the
+ *    extension's name, if the name is localizable. (For example, skin names
+ *    usually are.)
+ *
  * - author: A string or an array of strings. Authors can be linked using
  *    the regular wikitext link syntax. To have an internationalized version of
  *    "and others" show, add an element "...". This element can also be linked,
  *    for instance "[http://example ...]".
  *
  * - descriptionmsg: A message key or an an array with message key and parameters:
- *    `'descriptionmsg' => array( 'exampleextension-desc', param1, param2, ... ),`
+ *    `'descriptionmsg' => 'exampleextension-desc',`
  *
- * - description: Description of extension as inline string instead of
+ * - description: Description of extension as an inline string instead of
  *    localizable message (omit in favour of 'descriptionmsg').
  *
  * - license-name: Short name of the license (used as label for the link), such
@@ -7103,6 +7099,14 @@ $wgHttpsPort = 443;
 $wgHKDFSecret = false;
 $wgHKDFAlgorithm = 'sha256';
 
+/**
+ * Enable page language feature
+ * Allows setting page language in database
+ * @var bool
+ * @since 1.24
+ */
+$wgPageLanguageUseDB = false;
+
 /**
  * For really cool vim folding this needs to be at the end:
  * vim: foldmarker=@{,@} foldmethod=marker
index ce4ede3..e0579cb 100644 (file)
@@ -59,7 +59,6 @@ define( 'DB_MASTER', -2 );    # Write to master (or only server)
 # Obsolete aliases
 define( 'DB_READ', -1 );
 define( 'DB_WRITE', -2 );
-define( 'DB_LAST', -3 ); # deprecated since 2008, usage throws exception
 
 /**@{
  * Virtual namespaces; don't appear in the page database
index 98e0ec4..3d57e95 100644 (file)
@@ -2236,14 +2236,15 @@ class EditPage {
                        $username = $parts[0];
                        $user = User::newFromName( $username, false /* allow IP users*/ );
                        $ip = User::isIP( $username );
+                       $block = Block::newFromTarget( $user, $user );
                        if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist
                                $wgOut->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n$1\n</div>",
                                        array( 'userpage-userdoesnotexist', wfEscapeWikiText( $username ) ) );
-                       } elseif ( $user->isBlocked() ) { # Show log extract if the user is currently blocked
+                       } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) { # Show log extract if the user is currently blocked
                                LogEventsList::showLogExtract(
                                        $wgOut,
                                        'block',
-                                       $user->getUserPage(),
+                                       MWNamespace::getCanonicalName( NS_USER ) . ':' . $block->getTarget(),
                                        '',
                                        array(
                                                'lim' => 1,
@@ -2621,6 +2622,7 @@ class EditPage {
         */
        protected function showHeader() {
                global $wgOut, $wgUser, $wgMaxArticleSize, $wgLang;
+               global $wgAllowUserCss, $wgAllowUserJs;
 
                if ( $this->mTitle->isTalkPage() ) {
                        $wgOut->addWikiMsg( 'talkpagetext' );
@@ -2721,14 +2723,14 @@ class EditPage {
                                        );
                                }
                                if ( $this->formtype !== 'preview' ) {
-                                       if ( $this->isCssSubpage ) {
+                                       if ( $this->isCssSubpage && $wgAllowUserCss ) {
                                                $wgOut->wrapWikiMsg(
                                                        "<div id='mw-usercssyoucanpreview'>\n$1\n</div>",
                                                        array( 'usercssyoucanpreview' )
                                                );
                                        }
 
-                                       if ( $this->isJsSubpage ) {
+                                       if ( $this->isJsSubpage && $wgAllowUserJs ) {
                                                $wgOut->wrapWikiMsg(
                                                        "<div id='mw-userjsyoucanpreview'>\n$1\n</div>",
                                                        array( 'userjsyoucanpreview' )
@@ -3451,6 +3453,7 @@ HTML
         */
        function getPreviewText() {
                global $wgOut, $wgUser, $wgRawHtml, $wgLang;
+               global $wgAllowUserCss, $wgAllowUserJs;
 
                wfProfileIn( __METHOD__ );
 
@@ -3516,8 +3519,14 @@ HTML
 
                                if ( $content->getModel() == CONTENT_MODEL_CSS ) {
                                        $format = 'css';
+                                       if ( $level === 'user' && !$wgAllowUserCss ) {
+                                               $format = false;
+                                       }
                                } elseif ( $content->getModel() == CONTENT_MODEL_JAVASCRIPT ) {
                                        $format = 'js';
+                                       if ( $level === 'user' && !$wgAllowUserJs ) {
+                                               $format = false;
+                                       }
                                } else {
                                        $format = false;
                                }
@@ -3555,7 +3564,7 @@ HTML
 
                        $previewHTML = $parserOutput->getText();
                        $this->mParserOutput = $parserOutput;
-                       $wgOut->addParserOutputNoText( $parserOutput );
+                       $wgOut->addParserOutputMetadata( $parserOutput );
 
                        if ( count( $parserOutput->getWarnings() ) ) {
                                $note .= "\n\n" . implode( "\n\n", $parserOutput->getWarnings() );
@@ -3830,46 +3839,34 @@ HTML
        public function getEditButtons( &$tabindex ) {
                $buttons = array();
 
-               // @todo FIXME: Hardcoded square brackets.
-               $temp = array(
+               $attribs = array(
                        'id' => 'wpSave',
                        'name' => 'wpSave',
                        'type' => 'submit',
                        'tabindex' => ++$tabindex,
                        'value' => wfMessage( 'savearticle' )->text(),
-                       'accesskey' => wfMessage( 'accesskey-save' )->text(),
-                       'title' => wfMessage( 'tooltip-save' )->text()
-                               . ' [' . wfMessage( 'accesskey-save' )->text() . ']',
-               );
-               $buttons['save'] = Xml::element( 'input', $temp, '' );
+               ) + Linker::tooltipAndAccesskeyAttribs( 'save' );
+               $buttons['save'] = Xml::element( 'input', $attribs, '' );
 
                ++$tabindex; // use the same for preview and live preview
-               // @todo FIXME: Hardcoded square brackets.
-               $temp = array(
+               $attribs = array(
                        'id' => 'wpPreview',
                        'name' => 'wpPreview',
                        'type' => 'submit',
                        'tabindex' => $tabindex,
                        'value' => wfMessage( 'showpreview' )->text(),
-                       'accesskey' => wfMessage( 'accesskey-preview' )->text(),
-                       'title' => wfMessage( 'tooltip-preview' )->text()
-                               . ' [' . wfMessage( 'accesskey-preview' )->text() . ']',
-               );
-               $buttons['preview'] = Xml::element( 'input', $temp, '' );
+               ) + Linker::tooltipAndAccesskeyAttribs( 'preview' );
+               $buttons['preview'] = Xml::element( 'input', $attribs, '' );
                $buttons['live'] = '';
 
-               // @todo FIXME: Hardcoded square brackets.
-               $temp = array(
+               $attribs = array(
                        'id' => 'wpDiff',
                        'name' => 'wpDiff',
                        'type' => 'submit',
                        'tabindex' => ++$tabindex,
                        'value' => wfMessage( 'showdiff' )->text(),
-                       'accesskey' => wfMessage( 'accesskey-diff' )->text(),
-                       'title' => wfMessage( 'tooltip-diff' )->text()
-                               . ' [' . wfMessage( 'accesskey-diff' )->text() . ']',
-               );
-               $buttons['diff'] = Xml::element( 'input', $temp, '' );
+               ) + Linker::tooltipAndAccesskeyAttribs( 'diff' );
+               $buttons['diff'] = Xml::element( 'input', $attribs, '' );
 
                wfRunHooks( 'EditPageBeforeEditButtons', array( &$this, &$buttons, &$tabindex ) );
                return $buttons;
index 49d07b6..c1908af 100644 (file)
@@ -1891,13 +1891,8 @@ function wfReportTime() {
 /**
  * Safety wrapper for debug_backtrace().
  *
- * With Zend Optimizer 3.2.0 loaded, this causes segfaults under somewhat
- * murky circumstances, which may be triggered in part by stub objects
- * or other fancy talking'.
- *
- * Will return an empty array if Zend Optimizer is detected or if
- * debug_backtrace is disabled, otherwise the output from
- * debug_backtrace() (trimmed).
+ * Will return an empty array if debug_backtrace is disabled, otherwise
+ * the output from debug_backtrace() (trimmed).
  *
  * @param int $limit This parameter can be used to limit the number of stack frames returned
  *
@@ -1906,19 +1901,10 @@ function wfReportTime() {
 function wfDebugBacktrace( $limit = 0 ) {
        static $disabled = null;
 
-       if ( extension_loaded( 'Zend Optimizer' ) ) {
-               wfDebug( "Zend Optimizer detected; skipping debug_backtrace for safety.\n" );
-               return array();
-       }
-
        if ( is_null( $disabled ) ) {
-               $disabled = false;
-               $functions = explode( ',', ini_get( 'disable_functions' ) );
-               $functions = array_map( 'trim', $functions );
-               $functions = array_map( 'strtolower', $functions );
-               if ( in_array( 'debug_backtrace', $functions ) ) {
-                       wfDebug( "debug_backtrace is in disabled_functions\n" );
-                       $disabled = true;
+               $disabled = !function_exists( 'debug_backtrace' );
+               if ( $disabled ) {
+                       wfDebug( "debug_backtrace() is disabled\n" );
                }
        }
        if ( $disabled ) {
@@ -2111,9 +2097,11 @@ function wfClientAcceptsGzip( $force = false ) {
  * @param int $deflimit Default limit if none supplied
  * @param string $optionname Name of a user preference to check against
  * @return array
+ * @deprecated since 1.24, just call WebRequest::getLimitOffset() directly
  */
 function wfCheckLimits( $deflimit = 50, $optionname = 'rclimit' ) {
        global $wgRequest;
+       wfDeprecated( __METHOD__, '1.24' );
        return $wgRequest->getLimitOffset( $deflimit, $optionname );
 }
 
@@ -2818,18 +2806,14 @@ function wfEscapeShellArg( /*...*/ ) {
 function wfShellExecDisabled() {
        static $disabled = null;
        if ( is_null( $disabled ) ) {
-               $disabled = false;
                if ( wfIniGetBool( 'safe_mode' ) ) {
                        wfDebug( "wfShellExec can't run in safe_mode, PHP's exec functions are too broken.\n" );
                        $disabled = 'safemode';
+               } elseif ( !function_exists( 'proc_open' ) ) {
+                       wfDebug( "proc_open() is disabled\n" );
+                       $disabled = 'disabled';
                } else {
-                       $functions = explode( ',', ini_get( 'disable_functions' ) );
-                       $functions = array_map( 'trim', $functions );
-                       $functions = array_map( 'strtolower', $functions );
-                       if ( in_array( 'proc_open', $functions ) ) {
-                               wfDebug( "proc_open is in disabled_functions\n" );
-                               $disabled = 'disabled';
-                       }
+                       $disabled = false;
                }
        }
        return $disabled;
@@ -2891,7 +2875,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
        $cmd = $envcmd . $cmd;
 
        $useLogPipe = false;
-       if ( php_uname( 's' ) == 'Linux' ) {
+       if ( is_executable( '/bin/bash' ) ) {
                $time = intval ( isset( $limits['time'] ) ? $limits['time'] : $wgMaxShellTime );
                if ( isset( $limits['walltime'] ) ) {
                        $wallTime = intval( $limits['walltime'] );
@@ -3068,7 +3052,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
  * @param array $environ optional environment variables which should be
  *   added to the executed command environment.
  * @param array $limits Optional array with limits(filesize, memory, time, walltime)
- *   this overwrites the global wgShellMax* limits.
+ *   this overwrites the global wgMaxShell* limits.
  * @return string Collected stdout and stderr as a string
  */
 function wfShellExecWithStderr( $cmd, &$retval = null, $environ = array(), $limits = array() ) {
index b2209c3..38aa392 100644 (file)
@@ -314,9 +314,13 @@ class HtmlFormatter {
        }
 
        /**
+        * Helper function for parseItemsToRemove(). This function extracts the selector type
+        * and the raw name of a selector from a CSS-style selector string and assigns those
+        * values to parameters passed by reference. For example, if given '#toc' as the
+        * $selector parameter, it will assign 'ID' as the $type and 'toc' as the $rawName.
         * @param string $selector CSS selector to parse
-        * @param string $type
-        * @param string $rawName
+        * @param string $type The type of selector (ID, CLASS, TAG_CLASS, or TAG)
+        * @param string $rawName The raw name of the selector
         * @return bool Whether the selector was successfully recognised
         */
        protected function parseSelector( $selector, &$type, &$rawName ) {
@@ -340,7 +344,8 @@ class HtmlFormatter {
        }
 
        /**
-        * Transforms CSS selectors into an internal representation suitable for processing
+        * Transforms CSS-style selectors into an internal representation suitable for
+        * processing by filterContent()
         * @return array
         */
        protected function parseItemsToRemove() {
diff --git a/includes/ImagePage.php b/includes/ImagePage.php
deleted file mode 100644 (file)
index 60db202..0000000
+++ /dev/null
@@ -1,1567 +0,0 @@
-<?php
-/**
- * Special handling for file description pages.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * Class for viewing MediaWiki file description pages
- *
- * @ingroup Media
- */
-class ImagePage extends Article {
-       /** @var File */
-       private $displayImg;
-
-       /** @var FileRepo */
-       private $repo;
-
-       /** @var bool */
-       private $fileLoaded;
-
-       /** @var bool */
-       protected $mExtraDescription = false;
-
-       /**
-        * @param Title $title
-        * @return WikiFilePage
-        */
-       protected function newPage( Title $title ) {
-               // Overload mPage with a file-specific page
-               return new WikiFilePage( $title );
-       }
-
-       /**
-        * Constructor from a page id
-        * @param int $id Article ID to load
-        * @return ImagePage|null
-        */
-       public static function newFromID( $id ) {
-               $t = Title::newFromID( $id );
-               # @todo FIXME: Doesn't inherit right
-               return $t == null ? null : new self( $t );
-               # return $t == null ? null : new static( $t ); // PHP 5.3
-       }
-
-       /**
-        * @param File $file
-        * @return void
-        */
-       public function setFile( $file ) {
-               $this->mPage->setFile( $file );
-               $this->displayImg = $file;
-               $this->fileLoaded = true;
-       }
-
-       protected function loadFile() {
-               if ( $this->fileLoaded ) {
-                       return;
-               }
-               $this->fileLoaded = true;
-
-               $this->displayImg = $img = false;
-               wfRunHooks( 'ImagePageFindFile', array( $this, &$img, &$this->displayImg ) );
-               if ( !$img ) { // not set by hook?
-                       $img = wfFindFile( $this->getTitle() );
-                       if ( !$img ) {
-                               $img = wfLocalFile( $this->getTitle() );
-                       }
-               }
-               $this->mPage->setFile( $img );
-               if ( !$this->displayImg ) { // not set by hook?
-                       $this->displayImg = $img;
-               }
-               $this->repo = $img->getRepo();
-       }
-
-       /**
-        * Handler for action=render
-        * Include body text only; none of the image extras
-        */
-       public function render() {
-               $this->getContext()->getOutput()->setArticleBodyOnly( true );
-               parent::view();
-       }
-
-       public function view() {
-               global $wgShowEXIF;
-
-               $out = $this->getContext()->getOutput();
-               $request = $this->getContext()->getRequest();
-               $diff = $request->getVal( 'diff' );
-               $diffOnly = $request->getBool(
-                       'diffonly',
-                       $this->getContext()->getUser()->getOption( 'diffonly' )
-               );
-
-               if ( $this->getTitle()->getNamespace() != NS_FILE || ( $diff !== null && $diffOnly ) ) {
-                       parent::view();
-                       return;
-               }
-
-               $this->loadFile();
-
-               if ( $this->getTitle()->getNamespace() == NS_FILE && $this->mPage->getFile()->getRedirected() ) {
-                       if ( $this->getTitle()->getDBkey() == $this->mPage->getFile()->getName() || $diff !== null ) {
-                               // mTitle is the same as the redirect target so ask Article
-                               // to perform the redirect for us.
-                               $request->setVal( 'diffonly', 'true' );
-                               parent::view();
-                               return;
-                       } else {
-                               // mTitle is not the same as the redirect target so it is
-                               // probably the redirect page itself. Fake the redirect symbol
-                               $out->setPageTitle( $this->getTitle()->getPrefixedText() );
-                               $out->addHTML( $this->viewRedirect(
-                                       Title::makeTitle( NS_FILE, $this->mPage->getFile()->getName() ),
-                                       /* $appendSubtitle */ true,
-                                       /* $forceKnown */ true )
-                               );
-                               $this->mPage->doViewUpdates( $this->getContext()->getUser(), $this->getOldID() );
-                               return;
-                       }
-               }
-
-               if ( $wgShowEXIF && $this->displayImg->exists() ) {
-                       // @todo FIXME: Bad interface, see note on MediaHandler::formatMetadata().
-                       $formattedMetadata = $this->displayImg->formatMetadata();
-                       $showmeta = $formattedMetadata !== false;
-               } else {
-                       $showmeta = false;
-               }
-
-               if ( !$diff && $this->displayImg->exists() ) {
-                       $out->addHTML( $this->showTOC( $showmeta ) );
-               }
-
-               if ( !$diff ) {
-                       $this->openShowImage();
-               }
-
-               # No need to display noarticletext, we use our own message, output in openShowImage()
-               if ( $this->mPage->getID() ) {
-                       # NS_FILE is in the user language, but this section (the actual wikitext)
-                       # should be in page content language
-                       $pageLang = $this->getTitle()->getPageViewLanguage();
-                       $out->addHTML( Xml::openElement( 'div', array( 'id' => 'mw-imagepage-content',
-                               'lang' => $pageLang->getHtmlCode(), 'dir' => $pageLang->getDir(),
-                               'class' => 'mw-content-' . $pageLang->getDir() ) ) );
-
-                       parent::view();
-
-                       $out->addHTML( Xml::closeElement( 'div' ) );
-               } else {
-                       # Just need to set the right headers
-                       $out->setArticleFlag( true );
-                       $out->setPageTitle( $this->getTitle()->getPrefixedText() );
-                       $this->mPage->doViewUpdates( $this->getContext()->getUser(), $this->getOldID() );
-               }
-
-               # Show shared description, if needed
-               if ( $this->mExtraDescription ) {
-                       $fol = wfMessage( 'shareddescriptionfollows' );
-                       if ( !$fol->isDisabled() ) {
-                               $out->addWikiText( $fol->plain() );
-                       }
-                       $out->addHTML( '<div id="shared-image-desc">' . $this->mExtraDescription . "</div>\n" );
-               }
-
-               $this->closeShowImage();
-               $this->imageHistory();
-               // TODO: Cleanup the following
-
-               $out->addHTML( Xml::element( 'h2',
-                       array( 'id' => 'filelinks' ),
-                       wfMessage( 'imagelinks' )->text() ) . "\n" );
-               $this->imageDupes();
-               # @todo FIXME: For some freaky reason, we can't redirect to foreign images.
-               # Yet we return metadata about the target. Definitely an issue in the FileRepo
-               $this->imageLinks();
-
-               # Allow extensions to add something after the image links
-               $html = '';
-               wfRunHooks( 'ImagePageAfterImageLinks', array( $this, &$html ) );
-               if ( $html ) {
-                       $out->addHTML( $html );
-               }
-
-               if ( $showmeta ) {
-                       $out->addHTML( Xml::element(
-                               'h2',
-                               array( 'id' => 'metadata' ),
-                               wfMessage( 'metadata' )->text() ) . "\n" );
-                       $out->addWikiText( $this->makeMetadataTable( $formattedMetadata ) );
-                       $out->addModules( array( 'mediawiki.action.view.metadata' ) );
-               }
-
-               // Add remote Filepage.css
-               if ( !$this->repo->isLocal() ) {
-                       $css = $this->repo->getDescriptionStylesheetUrl();
-                       if ( $css ) {
-                               $out->addStyle( $css );
-                       }
-               }
-               // always show the local local Filepage.css, bug 29277
-               $out->addModuleStyles( 'filepage' );
-       }
-
-       /**
-        * @return File
-        */
-       public function getDisplayedFile() {
-               $this->loadFile();
-               return $this->displayImg;
-       }
-
-       /**
-        * Create the TOC
-        *
-        * @param bool $metadata Whether or not to show the metadata link
-        * @return string
-        */
-       protected function showTOC( $metadata ) {
-               $r = array(
-                       '<li><a href="#file">' . wfMessage( 'file-anchor-link' )->escaped() . '</a></li>',
-                       '<li><a href="#filehistory">' . wfMessage( 'filehist' )->escaped() . '</a></li>',
-                       '<li><a href="#filelinks">' . wfMessage( 'imagelinks' )->escaped() . '</a></li>',
-               );
-               if ( $metadata ) {
-                       $r[] = '<li><a href="#metadata">' . wfMessage( 'metadata' )->escaped() . '</a></li>';
-               }
-
-               wfRunHooks( 'ImagePageShowTOC', array( $this, &$r ) );
-
-               return '<ul id="filetoc">' . implode( "\n", $r ) . '</ul>';
-       }
-
-       /**
-        * Make a table with metadata to be shown in the output page.
-        *
-        * @todo FIXME: Bad interface, see note on MediaHandler::formatMetadata().
-        *
-        * @param array $metadata The array containing the Exif data
-        * @return string The metadata table. This is treated as Wikitext (!)
-        */
-       protected function makeMetadataTable( $metadata ) {
-               $r = "<div class=\"mw-imagepage-section-metadata\">";
-               $r .= wfMessage( 'metadata-help' )->plain();
-               $r .= "<table id=\"mw_metadata\" class=\"mw_metadata\">\n";
-               foreach ( $metadata as $type => $stuff ) {
-                       foreach ( $stuff as $v ) {
-                               # @todo FIXME: Why is this using escapeId for a class?!
-                               $class = Sanitizer::escapeId( $v['id'] );
-                               if ( $type == 'collapsed' ) {
-                                       // Handled by mediawiki.action.view.metadata module
-                                       // and skins/common/shared.css.
-                                       $class .= ' collapsable';
-                               }
-                               $r .= "<tr class=\"$class\">\n";
-                               $r .= "<th>{$v['name']}</th>\n";
-                               $r .= "<td>{$v['value']}</td>\n</tr>";
-                       }
-               }
-               $r .= "</table>\n</div>\n";
-               return $r;
-       }
-
-       /**
-        * Overloading Article's getContentObject method.
-        *
-        * Omit noarticletext if sharedupload; text will be fetched from the
-        * shared upload server if possible.
-        * @return string
-        */
-       public function getContentObject() {
-               $this->loadFile();
-               if ( $this->mPage->getFile() && !$this->mPage->getFile()->isLocal() && 0 == $this->getID() ) {
-                       return null;
-               }
-               return parent::getContentObject();
-       }
-
-       protected function openShowImage() {
-               global $wgImageLimits, $wgEnableUploads, $wgSend404Code;
-
-               $this->loadFile();
-               $out = $this->getContext()->getOutput();
-               $user = $this->getContext()->getUser();
-               $lang = $this->getContext()->getLanguage();
-               $dirmark = $lang->getDirMarkEntity();
-               $request = $this->getContext()->getRequest();
-
-               $max = $this->getImageLimitsFromOption( $user, 'imagesize' );
-               $maxWidth = $max[0];
-               $maxHeight = $max[1];
-
-               if ( $this->displayImg->exists() ) {
-                       # image
-                       $page = $request->getIntOrNull( 'page' );
-                       if ( is_null( $page ) ) {
-                               $params = array();
-                               $page = 1;
-                       } else {
-                               $params = array( 'page' => $page );
-                       }
-
-                       $renderLang = $request->getVal( 'lang' );
-                       if ( !is_null( $renderLang ) ) {
-                               $handler = $this->displayImg->getHandler();
-                               if ( $handler && $handler->validateParam( 'lang', $renderLang ) ) {
-                                       $params['lang'] = $renderLang;
-                               } else {
-                                       $renderLang = null;
-                               }
-                       }
-
-                       $width_orig = $this->displayImg->getWidth( $page );
-                       $width = $width_orig;
-                       $height_orig = $this->displayImg->getHeight( $page );
-                       $height = $height_orig;
-
-                       $filename = wfEscapeWikiText( $this->displayImg->getName() );
-                       $linktext = $filename;
-
-                       wfRunHooks( 'ImageOpenShowImageInlineBefore', array( &$this, &$out ) );
-
-                       if ( $this->displayImg->allowInlineDisplay() ) {
-                               # image
-
-                               # "Download high res version" link below the image
-                               # $msgsize = wfMessage( 'file-info-size', $width_orig, $height_orig,
-                               #   Linker::formatSize( $this->displayImg->getSize() ), $mime )->escaped();
-                               # We'll show a thumbnail of this image
-                               if ( $width > $maxWidth || $height > $maxHeight ) {
-                                       # Calculate the thumbnail size.
-                                       # First case, the limiting factor is the width, not the height.
-                                       /** @todo // FIXME: Possible division by 0. bug 36911 */
-                                       if ( $width / $height >= $maxWidth / $maxHeight ) {
-                                               /** @todo // FIXME: Possible division by 0. bug 36911 */
-                                               $height = round( $height * $maxWidth / $width );
-                                               $width = $maxWidth;
-                                               # Note that $height <= $maxHeight now.
-                                       } else {
-                                               /** @todo // FIXME: Possible division by 0. bug 36911 */
-                                               $newwidth = floor( $width * $maxHeight / $height );
-                                               /** @todo // FIXME: Possible division by 0. bug 36911 */
-                                               $height = round( $height * $newwidth / $width );
-                                               $width = $newwidth;
-                                               # Note that $height <= $maxHeight now, but might not be identical
-                                               # because of rounding.
-                                       }
-                                       $linktext = wfMessage( 'show-big-image' )->escaped();
-                                       if ( $this->displayImg->getRepo()->canTransformVia404() ) {
-                                               $thumbSizes = $wgImageLimits;
-                                               // Also include the full sized resolution in the list, so
-                                               // that users know they can get it. This will link to the
-                                               // original file asset if mustRender() === false. In the case
-                                               // that we mustRender, some users have indicated that they would
-                                               // find it useful to have the full size image in the rendered
-                                               // image format.
-                                               $thumbSizes[] = array( $width_orig, $height_orig );
-                                       } else {
-                                               # Creating thumb links triggers thumbnail generation.
-                                               # Just generate the thumb for the current users prefs.
-                                               $thumbSizes = array( $this->getImageLimitsFromOption( $user, 'thumbsize' ) );
-                                               if ( !$this->displayImg->mustRender() ) {
-                                                       // We can safely include a link to the "full-size" preview,
-                                                       // without actually rendering.
-                                                       $thumbSizes[] = array( $width_orig, $height_orig );
-                                               }
-                                       }
-                                       # Generate thumbnails or thumbnail links as needed...
-                                       $otherSizes = array();
-                                       foreach ( $thumbSizes as $size ) {
-                                               // We include a thumbnail size in the list, if it is
-                                               // less than or equal to the original size of the image
-                                               // asset ($width_orig/$height_orig). We also exclude
-                                               // the current thumbnail's size ($width/$height)
-                                               // since that is added to the message separately, so
-                                               // it can be denoted as the current size being shown.
-                                               if ( $size[0] <= $width_orig && $size[1] <= $height_orig
-                                                       && $size[0] != $width && $size[1] != $height
-                                               ) {
-                                                       $sizeLink = $this->makeSizeLink( $params, $size[0], $size[1] );
-                                                       if ( $sizeLink ) {
-                                                               $otherSizes[] = $sizeLink;
-                                                       }
-                                               }
-                                       }
-                                       $otherSizes = array_unique( $otherSizes );
-                                       $msgsmall = '';
-                                       $sizeLinkBigImagePreview = $this->makeSizeLink( $params, $width, $height );
-                                       if ( $sizeLinkBigImagePreview ) {
-                                               $msgsmall .= wfMessage( 'show-big-image-preview' )->
-                                                       rawParams( $sizeLinkBigImagePreview )->
-                                                       parse();
-                                       }
-                                       if ( count( $otherSizes ) ) {
-                                               $msgsmall .= ' ' .
-                                               Html::rawElement( 'span', array( 'class' => 'mw-filepage-other-resolutions' ),
-                                                       wfMessage( 'show-big-image-other' )->rawParams( $lang->pipeList( $otherSizes ) )->
-                                                       params( count( $otherSizes ) )->parse()
-                                               );
-                                       }
-                               } elseif ( $width == 0 && $height == 0 ) {
-                                       # Some sort of audio file that doesn't have dimensions
-                                       # Don't output a no hi res message for such a file
-                                       $msgsmall = '';
-                               } elseif ( $this->displayImg->isVectorized() ) {
-                                       # For vectorized images, full size is just the frame size
-                                       $msgsmall = '';
-                               } else {
-                                       # Image is small enough to show full size on image page
-                                       $msgsmall = wfMessage( 'file-nohires' )->parse();
-                               }
-
-                               $params['width'] = $width;
-                               $params['height'] = $height;
-                               $thumbnail = $this->displayImg->transform( $params );
-                               Linker::processResponsiveImages( $this->displayImg, $thumbnail, $params );
-
-                               $anchorclose = Html::rawElement(
-                                       'div',
-                                       array( 'class' => 'mw-filepage-resolutioninfo' ),
-                                       $msgsmall
-                               );
-
-                               $isMulti = $this->displayImg->isMultipage() && $this->displayImg->pageCount() > 1;
-                               if ( $isMulti ) {
-                                       $out->addModules( 'mediawiki.page.image.pagination' );
-                                       $out->addHTML( '<table class="multipageimage"><tr><td>' );
-                               }
-
-                               if ( $thumbnail ) {
-                                       $options = array(
-                                               'alt' => $this->displayImg->getTitle()->getPrefixedText(),
-                                               'file-link' => true,
-                                       );
-                                       $out->addHTML( '<div class="fullImageLink" id="file">' .
-                                               $thumbnail->toHtml( $options ) .
-                                               $anchorclose . "</div>\n" );
-                               }
-
-                               if ( $isMulti ) {
-                                       $count = $this->displayImg->pageCount();
-
-                                       if ( $page > 1 ) {
-                                               $label = $out->parse( wfMessage( 'imgmultipageprev' )->text(), false );
-                                               $link = Linker::linkKnown(
-                                                       $this->getTitle(),
-                                                       $label,
-                                                       array(),
-                                                       array( 'page' => $page - 1 )
-                                               );
-                                               $thumb1 = Linker::makeThumbLinkObj(
-                                                       $this->getTitle(),
-                                                       $this->displayImg,
-                                                       $link,
-                                                       $label,
-                                                       'none',
-                                                       array( 'page' => $page - 1 )
-                                               );
-                                       } else {
-                                               $thumb1 = '';
-                                       }
-
-                                       if ( $page < $count ) {
-                                               $label = wfMessage( 'imgmultipagenext' )->text();
-                                               $link = Linker::linkKnown(
-                                                       $this->getTitle(),
-                                                       $label,
-                                                       array(),
-                                                       array( 'page' => $page + 1 )
-                                               );
-                                               $thumb2 = Linker::makeThumbLinkObj(
-                                                       $this->getTitle(),
-                                                       $this->displayImg,
-                                                       $link,
-                                                       $label,
-                                                       'none',
-                                                       array( 'page' => $page + 1 )
-                                               );
-                                       } else {
-                                               $thumb2 = '';
-                                       }
-
-                                       global $wgScript;
-
-                                       $formParams = array(
-                                               'name' => 'pageselector',
-                                               'action' => $wgScript,
-                                       );
-                                       $options = array();
-                                       for ( $i = 1; $i <= $count; $i++ ) {
-                                               $options[] = Xml::option( $lang->formatNum( $i ), $i, $i == $page );
-                                       }
-                                       $select = Xml::tags( 'select',
-                                               array( 'id' => 'pageselector', 'name' => 'page' ),
-                                               implode( "\n", $options ) );
-
-                                       $out->addHTML(
-                                               '</td><td><div class="multipageimagenavbox">' .
-                                               Xml::openElement( 'form', $formParams ) .
-                                               Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) .
-                                                       wfMessage( 'imgmultigoto' )->rawParams( $select )->parse() .
-                                               Xml::submitButton( wfMessage( 'imgmultigo' )->text() ) .
-                                               Xml::closeElement( 'form' ) .
-                                               "<hr />$thumb1\n$thumb2<br style=\"clear: both\" /></div></td></tr></table>"
-                                       );
-                               }
-                       } elseif ( $this->displayImg->isSafeFile() ) {
-                               # if direct link is allowed but it's not a renderable image, show an icon.
-                               $icon = $this->displayImg->iconThumb();
-
-                               $out->addHTML( '<div class="fullImageLink" id="file">' .
-                                       $icon->toHtml( array( 'file-link' => true ) ) .
-                                       "</div>\n" );
-                       }
-
-                       $longDesc = wfMessage( 'parentheses', $this->displayImg->getLongDesc() )->text();
-
-                       $medialink = "[[Media:$filename|$linktext]]";
-
-                       if ( !$this->displayImg->isSafeFile() ) {
-                               $warning = wfMessage( 'mediawarning' )->plain();
-                               // dirmark is needed here to separate the file name, which
-                               // most likely ends in Latin characters, from the description,
-                               // which may begin with the file type. In RTL environment
-                               // this will get messy.
-                               // The dirmark, however, must not be immediately adjacent
-                               // to the filename, because it can get copied with it.
-                               // See bug 25277.
-                               // @codingStandardsIgnoreStart Ignore long line
-                               $out->addWikiText( <<<EOT
-<div class="fullMedia"><span class="dangerousLink">{$medialink}</span> $dirmark<span class="fileInfo">$longDesc</span></div>
-<div class="mediaWarning">$warning</div>
-EOT
-                               );
-                               // @codingStandardsIgnoreEnd
-                       } else {
-                               $out->addWikiText( <<<EOT
-<div class="fullMedia">{$medialink} {$dirmark}<span class="fileInfo">$longDesc</span>
-</div>
-EOT
-                               );
-                       }
-
-                       $renderLangOptions = $this->displayImg->getAvailableLanguages();
-                       if ( count( $renderLangOptions ) >= 1 ) {
-                               $currentLanguage = $renderLang;
-                               $defaultLang = $this->displayImg->getDefaultRenderLanguage();
-                               if ( is_null( $currentLanguage ) ) {
-                                       $currentLanguage = $defaultLang;
-                               }
-                               $out->addHtml( $this->doRenderLangOpt( $renderLangOptions, $currentLanguage, $defaultLang ) );
-                       }
-
-                       // Add cannot animate thumbnail warning
-                       if ( !$this->displayImg->canAnimateThumbIfAppropriate() ) {
-                               // Include the extension so wiki admins can
-                               // customize it on a per file-type basis
-                               // (aka say things like use format X instead).
-                               // additionally have a specific message for
-                               // file-no-thumb-animation-gif
-                               $ext = $this->displayImg->getExtension();
-                               $noAnimMesg = wfMessageFallback(
-                                       'file-no-thumb-animation-' . $ext,
-                                       'file-no-thumb-animation'
-                               )->plain();
-
-                               $out->addWikiText( <<<EOT
-<div class="mw-noanimatethumb">{$noAnimMesg}</div>
-EOT
-                               );
-                       }
-
-                       if ( !$this->displayImg->isLocal() ) {
-                               $this->printSharedImageText();
-                       }
-               } else {
-                       # Image does not exist
-                       if ( !$this->getID() ) {
-                               # No article exists either
-                               # Show deletion log to be consistent with normal articles
-                               LogEventsList::showLogExtract(
-                                       $out,
-                                       array( 'delete', 'move' ),
-                                       $this->getTitle()->getPrefixedText(),
-                                       '',
-                                       array( 'lim' => 10,
-                                               'conds' => array( "log_action != 'revision'" ),
-                                               'showIfEmpty' => false,
-                                               'msgKey' => array( 'moveddeleted-notice' )
-                                       )
-                               );
-                       }
-
-                       if ( $wgEnableUploads && $user->isAllowed( 'upload' ) ) {
-                               // Only show an upload link if the user can upload
-                               $uploadTitle = SpecialPage::getTitleFor( 'Upload' );
-                               $nofile = array(
-                                       'filepage-nofile-link',
-                                       $uploadTitle->getFullURL( array( 'wpDestFile' => $this->mPage->getFile()->getName() ) )
-                               );
-                       } else {
-                               $nofile = 'filepage-nofile';
-                       }
-                       // Note, if there is an image description page, but
-                       // no image, then this setRobotPolicy is overridden
-                       // by Article::View().
-                       $out->setRobotPolicy( 'noindex,nofollow' );
-                       $out->wrapWikiMsg( "<div id='mw-imagepage-nofile' class='plainlinks'>\n$1\n</div>", $nofile );
-                       if ( !$this->getID() && $wgSend404Code ) {
-                               // If there is no image, no shared image, and no description page,
-                               // output a 404, to be consistent with articles.
-                               $request->response()->header( 'HTTP/1.1 404 Not Found' );
-                       }
-               }
-               $out->setFileVersion( $this->displayImg );
-       }
-
-       /**
-        * Creates an thumbnail of specified size and returns an HTML link to it
-        * @param array $params Scaler parameters
-        * @param int $width
-        * @param int $height
-        * @return string
-        */
-       private function makeSizeLink( $params, $width, $height ) {
-               $params['width'] = $width;
-               $params['height'] = $height;
-               $thumbnail = $this->displayImg->transform( $params );
-               if ( $thumbnail && !$thumbnail->isError() ) {
-                       return Html::rawElement( 'a', array(
-                               'href' => $thumbnail->getUrl(),
-                               'class' => 'mw-thumbnail-link'
-                               ), wfMessage( 'show-big-image-size' )->numParams(
-                                       $thumbnail->getWidth(), $thumbnail->getHeight()
-                               )->parse() );
-               } else {
-                       return '';
-               }
-       }
-
-       /**
-        * Show a notice that the file is from a shared repository
-        */
-       protected function printSharedImageText() {
-               $out = $this->getContext()->getOutput();
-               $this->loadFile();
-
-               $descUrl = $this->mPage->getFile()->getDescriptionUrl();
-               $descText = $this->mPage->getFile()->getDescriptionText( $this->getContext()->getLanguage() );
-
-               /* Add canonical to head if there is no local page for this shared file */
-               if ( $descUrl && $this->mPage->getID() == 0 ) {
-                       $out->setCanonicalUrl( $descUrl );
-               }
-
-               $wrap = "<div class=\"sharedUploadNotice\">\n$1\n</div>\n";
-               $repo = $this->mPage->getFile()->getRepo()->getDisplayName();
-
-               if ( $descUrl && $descText && wfMessage( 'sharedupload-desc-here' )->plain() !== '-' ) {
-                       $out->wrapWikiMsg( $wrap, array( 'sharedupload-desc-here', $repo, $descUrl ) );
-               } elseif ( $descUrl && wfMessage( 'sharedupload-desc-there' )->plain() !== '-' ) {
-                       $out->wrapWikiMsg( $wrap, array( 'sharedupload-desc-there', $repo, $descUrl ) );
-               } else {
-                       $out->wrapWikiMsg( $wrap, array( 'sharedupload', $repo ), ''/*BACKCOMPAT*/ );
-               }
-
-               if ( $descText ) {
-                       $this->mExtraDescription = $descText;
-               }
-       }
-
-       public function getUploadUrl() {
-               $this->loadFile();
-               $uploadTitle = SpecialPage::getTitleFor( 'Upload' );
-               return $uploadTitle->getFullURL( array(
-                       'wpDestFile' => $this->mPage->getFile()->getName(),
-                       'wpForReUpload' => 1
-               ) );
-       }
-
-       /**
-        * Print out the various links at the bottom of the image page, e.g. reupload,
-        * external editing (and instructions link) etc.
-        */
-       protected function uploadLinksBox() {
-               global $wgEnableUploads;
-
-               if ( !$wgEnableUploads ) {
-                       return;
-               }
-
-               $this->loadFile();
-               if ( !$this->mPage->getFile()->isLocal() ) {
-                       return;
-               }
-
-               $out = $this->getContext()->getOutput();
-               $out->addHTML( "<ul>\n" );
-
-               # "Upload a new version of this file" link
-               $canUpload = $this->getTitle()->userCan( 'upload', $this->getContext()->getUser() );
-               if ( $canUpload && UploadBase::userCanReUpload(
-                               $this->getContext()->getUser(),
-                               $this->mPage->getFile()->name )
-               ) {
-                       $ulink = Linker::makeExternalLink(
-                               $this->getUploadUrl(),
-                               wfMessage( 'uploadnewversion-linktext' )->text()
-                       );
-                       $out->addHTML( "<li id=\"mw-imagepage-reupload-link\">"
-                               . "<div class=\"plainlinks\">{$ulink}</div></li>\n" );
-               } else {
-                       $out->addHTML( "<li id=\"mw-imagepage-upload-disallowed\">"
-                               . $this->getContext()->msg( 'upload-disallowed-here' )->escaped() . "</li>\n" );
-               }
-
-               $out->addHTML( "</ul>\n" );
-       }
-
-       /**
-        * For overloading
-        */
-       protected function closeShowImage() {
-       }
-
-       /**
-        * If the page we've just displayed is in the "Image" namespace,
-        * we follow it with an upload history of the image and its usage.
-        */
-       protected function imageHistory() {
-               $this->loadFile();
-               $out = $this->getContext()->getOutput();
-               $pager = new ImageHistoryPseudoPager( $this );
-               $out->addHTML( $pager->getBody() );
-               $out->preventClickjacking( $pager->getPreventClickjacking() );
-
-               $this->mPage->getFile()->resetHistory(); // free db resources
-
-               # Exist check because we don't want to show this on pages where an image
-               # doesn't exist along with the noimage message, that would suck. -ævar
-               if ( $this->mPage->getFile()->exists() ) {
-                       $this->uploadLinksBox();
-               }
-       }
-
-       /**
-        * @param string $target
-        * @param int $limit
-        * @return ResultWrapper
-        */
-       protected function queryImageLinks( $target, $limit ) {
-               $dbr = wfGetDB( DB_SLAVE );
-
-               return $dbr->select(
-                       array( 'imagelinks', 'page' ),
-                       array( 'page_namespace', 'page_title', 'il_to' ),
-                       array( 'il_to' => $target, 'il_from = page_id' ),
-                       __METHOD__,
-                       array( 'LIMIT' => $limit + 1, 'ORDER BY' => 'il_from', )
-               );
-       }
-
-       protected function imageLinks() {
-               $limit = 100;
-
-               $out = $this->getContext()->getOutput();
-
-               $rows = array();
-               $redirects = array();
-               foreach ( $this->getTitle()->getRedirectsHere( NS_FILE ) as $redir ) {
-                       $redirects[$redir->getDBkey()] = array();
-                       $rows[] = (object)array(
-                               'page_namespace' => NS_FILE,
-                               'page_title' => $redir->getDBkey(),
-                       );
-               }
-
-               $res = $this->queryImageLinks( $this->getTitle()->getDBkey(), $limit + 1 );
-               foreach ( $res as $row ) {
-                       $rows[] = $row;
-               }
-               $count = count( $rows );
-
-               $hasMore = $count > $limit;
-               if ( !$hasMore && count( $redirects ) ) {
-                       $res = $this->queryImageLinks( array_keys( $redirects ),
-                               $limit - count( $rows ) + 1 );
-                       foreach ( $res as $row ) {
-                               $redirects[$row->il_to][] = $row;
-                               $count++;
-                       }
-                       $hasMore = ( $res->numRows() + count( $rows ) ) > $limit;
-               }
-
-               if ( $count == 0 ) {
-                       $out->wrapWikiMsg(
-                               Html::rawElement( 'div',
-                                       array( 'id' => 'mw-imagepage-nolinkstoimage' ), "\n$1\n" ),
-                               'nolinkstoimage'
-                       );
-                       return;
-               }
-
-               $out->addHTML( "<div id='mw-imagepage-section-linkstoimage'>\n" );
-               if ( !$hasMore ) {
-                       $out->addWikiMsg( 'linkstoimage', $count );
-               } else {
-                       // More links than the limit. Add a link to [[Special:Whatlinkshere]]
-                       $out->addWikiMsg( 'linkstoimage-more',
-                               $this->getContext()->getLanguage()->formatNum( $limit ),
-                               $this->getTitle()->getPrefixedDBkey()
-                       );
-               }
-
-               $out->addHTML(
-                       Html::openElement( 'ul',
-                               array( 'class' => 'mw-imagepage-linkstoimage' ) ) . "\n"
-               );
-               $count = 0;
-
-               // Sort the list by namespace:title
-               usort( $rows, array( $this, 'compare' ) );
-
-               // Create links for every element
-               $currentCount = 0;
-               foreach ( $rows as $element ) {
-                       $currentCount++;
-                       if ( $currentCount > $limit ) {
-                               break;
-                       }
-
-                       $query = array();
-                       # Add a redirect=no to make redirect pages reachable
-                       if ( isset( $redirects[$element->page_title] ) ) {
-                               $query['redirect'] = 'no';
-                       }
-                       $link = Linker::linkKnown(
-                               Title::makeTitle( $element->page_namespace, $element->page_title ),
-                               null, array(), $query
-                       );
-                       if ( !isset( $redirects[$element->page_title] ) ) {
-                               # No redirects
-                               $liContents = $link;
-                       } elseif ( count( $redirects[$element->page_title] ) === 0 ) {
-                               # Redirect without usages
-                               $liContents = wfMessage( 'linkstoimage-redirect' )->rawParams( $link, '' )->parse();
-                       } else {
-                               # Redirect with usages
-                               $li = '';
-                               foreach ( $redirects[$element->page_title] as $row ) {
-                                       $currentCount++;
-                                       if ( $currentCount > $limit ) {
-                                               break;
-                                       }
-
-                                       $link2 = Linker::linkKnown( Title::makeTitle( $row->page_namespace, $row->page_title ) );
-                                       $li .= Html::rawElement(
-                                               'li',
-                                               array( 'class' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
-                                               $link2
-                                               ) . "\n";
-                               }
-
-                               $ul = Html::rawElement(
-                                       'ul',
-                                       array( 'class' => 'mw-imagepage-redirectstofile' ),
-                                       $li
-                                       ) . "\n";
-                               $liContents = wfMessage( 'linkstoimage-redirect' )->rawParams(
-                                       $link, $ul )->parse();
-                       }
-                       $out->addHTML( Html::rawElement(
-                                       'li',
-                                       array( 'class' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
-                                       $liContents
-                               ) . "\n"
-                       );
-
-               };
-               $out->addHTML( Html::closeElement( 'ul' ) . "\n" );
-               $res->free();
-
-               // Add a links to [[Special:Whatlinkshere]]
-               if ( $count > $limit ) {
-                       $out->addWikiMsg( 'morelinkstoimage', $this->getTitle()->getPrefixedDBkey() );
-               }
-               $out->addHTML( Html::closeElement( 'div' ) . "\n" );
-       }
-
-       protected function imageDupes() {
-               $this->loadFile();
-               $out = $this->getContext()->getOutput();
-
-               $dupes = $this->mPage->getDuplicates();
-               if ( count( $dupes ) == 0 ) {
-                       return;
-               }
-
-               $out->addHTML( "<div id='mw-imagepage-section-duplicates'>\n" );
-               $out->addWikiMsg( 'duplicatesoffile',
-                       $this->getContext()->getLanguage()->formatNum( count( $dupes ) ), $this->getTitle()->getDBkey()
-               );
-               $out->addHTML( "<ul class='mw-imagepage-duplicates'>\n" );
-
-               /**
-                * @var $file File
-                */
-               foreach ( $dupes as $file ) {
-                       $fromSrc = '';
-                       if ( $file->isLocal() ) {
-                               $link = Linker::linkKnown( $file->getTitle() );
-                       } else {
-                               $link = Linker::makeExternalLink( $file->getDescriptionUrl(),
-                                       $file->getTitle()->getPrefixedText() );
-                               $fromSrc = wfMessage( 'shared-repo-from', $file->getRepo()->getDisplayName() )->text();
-                       }
-                       $out->addHTML( "<li>{$link} {$fromSrc}</li>\n" );
-               }
-               $out->addHTML( "</ul></div>\n" );
-       }
-
-       /**
-        * Delete the file, or an earlier version of it
-        */
-       public function delete() {
-               $file = $this->mPage->getFile();
-               if ( !$file->exists() || !$file->isLocal() || $file->getRedirected() ) {
-                       // Standard article deletion
-                       parent::delete();
-                       return;
-               }
-
-               $deleter = new FileDeleteForm( $file );
-               $deleter->execute();
-       }
-
-       /**
-        * Display an error with a wikitext description
-        *
-        * @param string $description
-        */
-       function showError( $description ) {
-               $out = $this->getContext()->getOutput();
-               $out->setPageTitle( wfMessage( 'internalerror' ) );
-               $out->setRobotPolicy( 'noindex,nofollow' );
-               $out->setArticleRelated( false );
-               $out->enableClientCache( false );
-               $out->addWikiText( $description );
-       }
-
-       /**
-        * Callback for usort() to do link sorts by (namespace, title)
-        * Function copied from Title::compare()
-        *
-        * @param object $a Object page to compare with
-        * @param object $b Object page to compare with
-        * @return int Result of string comparison, or namespace comparison
-        */
-       protected function compare( $a, $b ) {
-               if ( $a->page_namespace == $b->page_namespace ) {
-                       return strcmp( $a->page_title, $b->page_title );
-               } else {
-                       return $a->page_namespace - $b->page_namespace;
-               }
-       }
-
-       /**
-        * Returns the corresponding $wgImageLimits entry for the selected user option
-        *
-        * @param User $user
-        * @param string $optionName Name of a option to check, typically imagesize or thumbsize
-        * @return array
-        * @since 1.21
-        */
-       public function getImageLimitsFromOption( $user, $optionName ) {
-               global $wgImageLimits;
-
-               $option = $user->getIntOption( $optionName );
-               if ( !isset( $wgImageLimits[$option] ) ) {
-                       $option = User::getDefaultOption( $optionName );
-               }
-
-               // The user offset might still be incorrect, specially if
-               // $wgImageLimits got changed (see bug #8858).
-               if ( !isset( $wgImageLimits[$option] ) ) {
-                       // Default to the first offset in $wgImageLimits
-                       $option = 0;
-               }
-
-               return isset( $wgImageLimits[$option] )
-                       ? $wgImageLimits[$option]
-                       : array( 800, 600 ); // if nothing is set, fallback to a hardcoded default
-       }
-
-       /**
-        * Output a drop-down box for language options for the file
-        *
-        * @param array $langChoices Array of string language codes
-        * @param string $curLang Language code file is being viewed in.
-        * @param string $defaultLang Language code that image is rendered in by default
-        * @return string HTML to insert underneath image.
-        */
-       protected function doRenderLangOpt( array $langChoices, $curLang, $defaultLang ) {
-               global $wgScript;
-               sort( $langChoices );
-               $curLang = wfBCP47( $curLang );
-               $defaultLang = wfBCP47( $defaultLang );
-               $opts = '';
-               $haveCurrentLang = false;
-               $haveDefaultLang = false;
-
-               // We make a list of all the language choices in the file.
-               // Additionally if the default language to render this file
-               // is not included as being in this file (for example, in svgs
-               // usually the fallback content is the english content) also
-               // include a choice for that. Last of all, if we're viewing
-               // the file in a language not on the list, add it as a choice.
-               foreach ( $langChoices as $lang ) {
-                       $code = wfBCP47( $lang );
-                       $name = Language::fetchLanguageName( $code, $this->getContext()->getLanguage()->getCode() );
-                       if ( $name !== '' ) {
-                               $display = wfMessage( 'img-lang-opt', $code, $name )->text();
-                       } else {
-                               $display = $code;
-                       }
-                       $opts .= "\n" . Xml::option( $display, $code, $curLang === $code );
-                       if ( $curLang === $code ) {
-                               $haveCurrentLang = true;
-                       }
-                       if ( $defaultLang === $code ) {
-                               $haveDefaultLang = true;
-                       }
-               }
-               if ( !$haveDefaultLang ) {
-                       // Its hard to know if the content is really in the default language, or
-                       // if its just unmarked content that could be in any language.
-                       $opts = Xml::option(
-                               wfMessage( 'img-lang-default' )->text(),
-                               $defaultLang,
-                               $defaultLang === $curLang
-                       ) . $opts;
-               }
-               if ( !$haveCurrentLang && $defaultLang !== $curLang ) {
-                       $name = Language::fetchLanguageName( $curLang, $this->getContext()->getLanguage()->getCode() );
-                       if ( $name !== '' ) {
-                               $display = wfMessage( 'img-lang-opt', $curLang, $name )->text();
-                       } else {
-                               $display = $curLang;
-                       }
-                       $opts = Xml::option( $display, $curLang, true ) . $opts;
-               }
-
-               $select = Html::rawElement(
-                       'select',
-                       array( 'id' => 'mw-imglangselector', 'name' => 'lang' ),
-                       $opts
-               );
-               $submit = Xml::submitButton( wfMessage( 'img-lang-go' )->text() );
-
-               $formContents = wfMessage( 'img-lang-info' )->rawParams( $select, $submit )->parse()
-                       . Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() );
-
-               $langSelectLine = Html::rawElement( 'div', array( 'id' => 'mw-imglangselector-line' ),
-                       Html::rawElement( 'form', array( 'action' => $wgScript ), $formContents )
-               );
-               return $langSelectLine;
-       }
-}
-
-/**
- * Builds the image revision log shown on image pages
- *
- * @ingroup Media
- */
-class ImageHistoryList extends ContextSource {
-
-       /**
-        * @var Title
-        */
-       protected $title;
-
-       /**
-        * @var File
-        */
-       protected $img;
-
-       /**
-        * @var ImagePage
-        */
-       protected $imagePage;
-
-       /**
-        * @var File
-        */
-       protected $current;
-
-       protected $repo, $showThumb;
-       protected $preventClickjacking = false;
-
-       /**
-        * @param ImagePage $imagePage
-        */
-       public function __construct( $imagePage ) {
-               global $wgShowArchiveThumbnails;
-               $this->current = $imagePage->getFile();
-               $this->img = $imagePage->getDisplayedFile();
-               $this->title = $imagePage->getTitle();
-               $this->imagePage = $imagePage;
-               $this->showThumb = $wgShowArchiveThumbnails && $this->img->canRender();
-               $this->setContext( $imagePage->getContext() );
-       }
-
-       /**
-        * @return ImagePage
-        */
-       public function getImagePage() {
-               return $this->imagePage;
-       }
-
-       /**
-        * @return File
-        */
-       public function getFile() {
-               return $this->img;
-       }
-
-       /**
-        * @param string $navLinks
-        * @return string
-        */
-       public function beginImageHistoryList( $navLinks = '' ) {
-               return Xml::element( 'h2', array( 'id' => 'filehistory' ), $this->msg( 'filehist' )->text() )
-                       . "\n"
-                       . "<div id=\"mw-imagepage-section-filehistory\">\n"
-                       . $this->msg( 'filehist-help' )->parseAsBlock()
-                       . $navLinks . "\n"
-                       . Xml::openElement( 'table', array( 'class' => 'wikitable filehistory' ) ) . "\n"
-                       . '<tr><td></td>'
-                       . ( $this->current->isLocal()
-                               && ( $this->getUser()->isAllowedAny( 'delete', 'deletedhistory' ) ) ? '<td></td>' : '' )
-                       . '<th>' . $this->msg( 'filehist-datetime' )->escaped() . '</th>'
-                       . ( $this->showThumb ? '<th>' . $this->msg( 'filehist-thumb' )->escaped() . '</th>' : '' )
-                       . '<th>' . $this->msg( 'filehist-dimensions' )->escaped() . '</th>'
-                       . '<th>' . $this->msg( 'filehist-user' )->escaped() . '</th>'
-                       . '<th>' . $this->msg( 'filehist-comment' )->escaped() . '</th>'
-                       . "</tr>\n";
-       }
-
-       /**
-        * @param string $navLinks
-        * @return string
-        */
-       public function endImageHistoryList( $navLinks = '' ) {
-               return "</table>\n$navLinks\n</div>\n";
-       }
-
-       /**
-        * @param bool $iscur
-        * @param File $file
-        * @return string
-        */
-       public function imageHistoryLine( $iscur, $file ) {
-               global $wgContLang;
-
-               $user = $this->getUser();
-               $lang = $this->getLanguage();
-               $timestamp = wfTimestamp( TS_MW, $file->getTimestamp() );
-               $img = $iscur ? $file->getName() : $file->getArchiveName();
-               $userId = $file->getUser( 'id' );
-               $userText = $file->getUser( 'text' );
-               $description = $file->getDescription( File::FOR_THIS_USER, $user );
-
-               $local = $this->current->isLocal();
-               $row = $selected = '';
-
-               // Deletion link
-               if ( $local && ( $user->isAllowedAny( 'delete', 'deletedhistory' ) ) ) {
-                       $row .= '<td>';
-                       # Link to remove from history
-                       if ( $user->isAllowed( 'delete' ) ) {
-                               $q = array( 'action' => 'delete' );
-                               if ( !$iscur ) {
-                                       $q['oldimage'] = $img;
-                               }
-                               $row .= Linker::linkKnown(
-                                       $this->title,
-                                       $this->msg( $iscur ? 'filehist-deleteall' : 'filehist-deleteone' )->escaped(),
-                                       array(), $q
-                               );
-                       }
-                       # Link to hide content. Don't show useless link to people who cannot hide revisions.
-                       $canHide = $user->isAllowed( 'deleterevision' );
-                       if ( $canHide || ( $user->isAllowed( 'deletedhistory' ) && $file->getVisibility() ) ) {
-                               if ( $user->isAllowed( 'delete' ) ) {
-                                       $row .= '<br />';
-                               }
-                               // If file is top revision or locked from this user, don't link
-                               if ( $iscur || !$file->userCan( File::DELETED_RESTRICTED, $user ) ) {
-                                       $del = Linker::revDeleteLinkDisabled( $canHide );
-                               } else {
-                                       list( $ts, ) = explode( '!', $img, 2 );
-                                       $query = array(
-                                               'type' => 'oldimage',
-                                               'target' => $this->title->getPrefixedText(),
-                                               'ids' => $ts,
-                                       );
-                                       $del = Linker::revDeleteLink( $query,
-                                               $file->isDeleted( File::DELETED_RESTRICTED ), $canHide );
-                               }
-                               $row .= $del;
-                       }
-                       $row .= '</td>';
-               }
-
-               // Reversion link/current indicator
-               $row .= '<td>';
-               if ( $iscur ) {
-                       $row .= $this->msg( 'filehist-current' )->escaped();
-               } elseif ( $local && $this->title->quickUserCan( 'edit', $user )
-                       && $this->title->quickUserCan( 'upload', $user )
-               ) {
-                       if ( $file->isDeleted( File::DELETED_FILE ) ) {
-                               $row .= $this->msg( 'filehist-revert' )->escaped();
-                       } else {
-                               $row .= Linker::linkKnown(
-                                       $this->title,
-                                       $this->msg( 'filehist-revert' )->escaped(),
-                                       array(),
-                                       array(
-                                               'action' => 'revert',
-                                               'oldimage' => $img,
-                                               'wpEditToken' => $user->getEditToken( $img )
-                                       )
-                               );
-                       }
-               }
-               $row .= '</td>';
-
-               // Date/time and image link
-               if ( $file->getTimestamp() === $this->img->getTimestamp() ) {
-                       $selected = "class='filehistory-selected'";
-               }
-               $row .= "<td $selected style='white-space: nowrap;'>";
-               if ( !$file->userCan( File::DELETED_FILE, $user ) ) {
-                       # Don't link to unviewable files
-                       $row .= '<span class="history-deleted">'
-                               . $lang->userTimeAndDate( $timestamp, $user ) . '</span>';
-               } elseif ( $file->isDeleted( File::DELETED_FILE ) ) {
-                       if ( $local ) {
-                               $this->preventClickjacking();
-                               $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
-                               # Make a link to review the image
-                               $url = Linker::linkKnown(
-                                       $revdel,
-                                       $lang->userTimeAndDate( $timestamp, $user ),
-                                       array(),
-                                       array(
-                                               'target' => $this->title->getPrefixedText(),
-                                               'file' => $img,
-                                               'token' => $user->getEditToken( $img )
-                                       )
-                               );
-                       } else {
-                               $url = $lang->userTimeAndDate( $timestamp, $user );
-                       }
-                       $row .= '<span class="history-deleted">' . $url . '</span>';
-               } else {
-                       $url = $iscur ? $this->current->getUrl() : $this->current->getArchiveUrl( $img );
-                       $row .= Xml::element(
-                               'a',
-                               array( 'href' => $url ),
-                               $lang->userTimeAndDate( $timestamp, $user )
-                       );
-               }
-               $row .= "</td>";
-
-               // Thumbnail
-               if ( $this->showThumb ) {
-                       $row .= '<td>' . $this->getThumbForLine( $file ) . '</td>';
-               }
-
-               // Image dimensions + size
-               $row .= '<td>';
-               $row .= htmlspecialchars( $file->getDimensionsString() );
-               $row .= $this->msg( 'word-separator' )->escaped();
-               $row .= '<span style="white-space: nowrap;">';
-               $row .= $this->msg( 'parentheses' )->sizeParams( $file->getSize() )->escaped();
-               $row .= '</span>';
-               $row .= '</td>';
-
-               // Uploading user
-               $row .= '<td>';
-               // Hide deleted usernames
-               if ( $file->isDeleted( File::DELETED_USER ) ) {
-                       $row .= '<span class="history-deleted">'
-                               . $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
-               } else {
-                       if ( $local ) {
-                               $row .= Linker::userLink( $userId, $userText );
-                               $row .= $this->msg( 'word-separator' )->escaped();
-                               $row .= '<span style="white-space: nowrap;">';
-                               $row .= Linker::userToolLinks( $userId, $userText );
-                               $row .= '</span>';
-                       } else {
-                               $row .= htmlspecialchars( $userText );
-                       }
-               }
-               $row .= '</td>';
-
-               // Don't show deleted descriptions
-               if ( $file->isDeleted( File::DELETED_COMMENT ) ) {
-                       $row .= '<td><span class="history-deleted">' .
-                               $this->msg( 'rev-deleted-comment' )->escaped() . '</span></td>';
-               } else {
-                       $row .= '<td dir="' . $wgContLang->getDir() . '">' .
-                               Linker::formatComment( $description, $this->title ) . '</td>';
-               }
-
-               $rowClass = null;
-               wfRunHooks( 'ImagePageFileHistoryLine', array( $this, $file, &$row, &$rowClass ) );
-               $classAttr = $rowClass ? " class='$rowClass'" : '';
-
-               return "<tr{$classAttr}>{$row}</tr>\n";
-       }
-
-       /**
-        * @param File $file
-        * @return string
-        */
-       protected function getThumbForLine( $file ) {
-               $lang = $this->getLanguage();
-               $user = $this->getUser();
-               if ( $file->allowInlineDisplay() && $file->userCan( File::DELETED_FILE, $user )
-                       && !$file->isDeleted( File::DELETED_FILE )
-               ) {
-                       $params = array(
-                               'width' => '120',
-                               'height' => '120',
-                       );
-                       $timestamp = wfTimestamp( TS_MW, $file->getTimestamp() );
-
-                       $thumbnail = $file->transform( $params );
-                       $options = array(
-                               'alt' => $this->msg( 'filehist-thumbtext',
-                                       $lang->userTimeAndDate( $timestamp, $user ),
-                                       $lang->userDate( $timestamp, $user ),
-                                       $lang->userTime( $timestamp, $user ) )->text(),
-                               'file-link' => true,
-                       );
-
-                       if ( !$thumbnail ) {
-                               return $this->msg( 'filehist-nothumb' )->escaped();
-                       }
-
-                       return $thumbnail->toHtml( $options );
-               } else {
-                       return $this->msg( 'filehist-nothumb' )->escaped();
-               }
-       }
-
-       /**
-        * @param bool $enable
-        */
-       protected function preventClickjacking( $enable = true ) {
-               $this->preventClickjacking = $enable;
-       }
-
-       /**
-        * @return bool
-        */
-       public function getPreventClickjacking() {
-               return $this->preventClickjacking;
-       }
-}
-
-class ImageHistoryPseudoPager extends ReverseChronologicalPager {
-       protected $preventClickjacking = false;
-
-       /**
-        * @var File
-        */
-       protected $mImg;
-
-       /**
-        * @var Title
-        */
-       protected $mTitle;
-
-       /**
-        * @param ImagePage $imagePage
-        */
-       function __construct( $imagePage ) {
-               parent::__construct( $imagePage->getContext() );
-               $this->mImagePage = $imagePage;
-               $this->mTitle = clone ( $imagePage->getTitle() );
-               $this->mTitle->setFragment( '#filehistory' );
-               $this->mImg = null;
-               $this->mHist = array();
-               $this->mRange = array( 0, 0 ); // display range
-       }
-
-       /**
-        * @return Title
-        */
-       function getTitle() {
-               return $this->mTitle;
-       }
-
-       function getQueryInfo() {
-               return false;
-       }
-
-       /**
-        * @return string
-        */
-       function getIndexField() {
-               return '';
-       }
-
-       /**
-        * @param object $row
-        * @return string
-        */
-       function formatRow( $row ) {
-               return '';
-       }
-
-       /**
-        * @return string
-        */
-       function getBody() {
-               $s = '';
-               $this->doQuery();
-               if ( count( $this->mHist ) ) {
-                       $list = new ImageHistoryList( $this->mImagePage );
-                       # Generate prev/next links
-                       $navLink = $this->getNavigationBar();
-                       $s = $list->beginImageHistoryList( $navLink );
-                       // Skip rows there just for paging links
-                       for ( $i = $this->mRange[0]; $i <= $this->mRange[1]; $i++ ) {
-                               $file = $this->mHist[$i];
-                               $s .= $list->imageHistoryLine( !$file->isOld(), $file );
-                       }
-                       $s .= $list->endImageHistoryList( $navLink );
-
-                       if ( $list->getPreventClickjacking() ) {
-                               $this->preventClickjacking();
-                       }
-               }
-               return $s;
-       }
-
-       function doQuery() {
-               if ( $this->mQueryDone ) {
-                       return;
-               }
-               $this->mImg = $this->mImagePage->getFile(); // ensure loading
-               if ( !$this->mImg->exists() ) {
-                       return;
-               }
-               $queryLimit = $this->mLimit + 1; // limit plus extra row
-               if ( $this->mIsBackwards ) {
-                       // Fetch the file history
-                       $this->mHist = $this->mImg->getHistory( $queryLimit, null, $this->mOffset, false );
-                       // The current rev may not meet the offset/limit
-                       $numRows = count( $this->mHist );
-                       if ( $numRows <= $this->mLimit && $this->mImg->getTimestamp() > $this->mOffset ) {
-                               $this->mHist = array_merge( array( $this->mImg ), $this->mHist );
-                       }
-               } else {
-                       // The current rev may not meet the offset
-                       if ( !$this->mOffset || $this->mImg->getTimestamp() < $this->mOffset ) {
-                               $this->mHist[] = $this->mImg;
-                       }
-                       // Old image versions (fetch extra row for nav links)
-                       $oiLimit = count( $this->mHist ) ? $this->mLimit : $this->mLimit + 1;
-                       // Fetch the file history
-                       $this->mHist = array_merge( $this->mHist,
-                               $this->mImg->getHistory( $oiLimit, $this->mOffset, null, false ) );
-               }
-               $numRows = count( $this->mHist ); // Total number of query results
-               if ( $numRows ) {
-                       # Index value of top item in the list
-                       $firstIndex = $this->mIsBackwards ?
-                               $this->mHist[$numRows - 1]->getTimestamp() : $this->mHist[0]->getTimestamp();
-                       # Discard the extra result row if there is one
-                       if ( $numRows > $this->mLimit && $numRows > 1 ) {
-                               if ( $this->mIsBackwards ) {
-                                       # Index value of item past the index
-                                       $this->mPastTheEndIndex = $this->mHist[0]->getTimestamp();
-                                       # Index value of bottom item in the list
-                                       $lastIndex = $this->mHist[1]->getTimestamp();
-                                       # Display range
-                                       $this->mRange = array( 1, $numRows - 1 );
-                               } else {
-                                       # Index value of item past the index
-                                       $this->mPastTheEndIndex = $this->mHist[$numRows - 1]->getTimestamp();
-                                       # Index value of bottom item in the list
-                                       $lastIndex = $this->mHist[$numRows - 2]->getTimestamp();
-                                       # Display range
-                                       $this->mRange = array( 0, $numRows - 2 );
-                               }
-                       } else {
-                               # Setting indexes to an empty string means that they will be
-                               # omitted if they would otherwise appear in URLs. It just so
-                               # happens that this  is the right thing to do in the standard
-                               # UI, in all the relevant cases.
-                               $this->mPastTheEndIndex = '';
-                               # Index value of bottom item in the list
-                               $lastIndex = $this->mIsBackwards ?
-                                       $this->mHist[0]->getTimestamp() : $this->mHist[$numRows - 1]->getTimestamp();
-                               # Display range
-                               $this->mRange = array( 0, $numRows - 1 );
-                       }
-               } else {
-                       $firstIndex = '';
-                       $lastIndex = '';
-                       $this->mPastTheEndIndex = '';
-               }
-               if ( $this->mIsBackwards ) {
-                       $this->mIsFirst = ( $numRows < $queryLimit );
-                       $this->mIsLast = ( $this->mOffset == '' );
-                       $this->mLastShown = $firstIndex;
-                       $this->mFirstShown = $lastIndex;
-               } else {
-                       $this->mIsFirst = ( $this->mOffset == '' );
-                       $this->mIsLast = ( $numRows < $queryLimit );
-                       $this->mLastShown = $lastIndex;
-                       $this->mFirstShown = $firstIndex;
-               }
-               $this->mQueryDone = true;
-       }
-
-       /**
-        * @param bool $enable
-        */
-       protected function preventClickjacking( $enable = true ) {
-               $this->preventClickjacking = $enable;
-       }
-
-       /**
-        * @return bool
-        */
-       public function getPreventClickjacking() {
-               return $this->preventClickjacking;
-       }
-
-}
diff --git a/includes/ImageQueryPage.php b/includes/ImageQueryPage.php
deleted file mode 100644 (file)
index b0266cb..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Variant of QueryPage which uses a gallery to output results.
- *
- * 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
- */
-
-/**
- * Variant of QueryPage which uses a gallery to output results, thus
- * suited for reports generating images
- *
- * @ingroup SpecialPage
- * @author Rob Church <robchur@gmail.com>
- */
-abstract class ImageQueryPage extends QueryPage {
-       /**
-        * Format and output report results using the given information plus
-        * OutputPage
-        *
-        * @param OutputPage $out OutputPage to print to
-        * @param Skin $skin User skin to use [unused]
-        * @param DatabaseBase $dbr (read) connection to use
-        * @param int $res Result pointer
-        * @param int $num Number of available result rows
-        * @param int $offset Paging offset
-        */
-       protected function outputResults( $out, $skin, $dbr, $res, $num, $offset ) {
-               if ( $num > 0 ) {
-                       $gallery = ImageGalleryBase::factory();
-                       $gallery->setContext( $this->getContext() );
-
-                       # $res might contain the whole 1,000 rows, so we read up to
-                       # $num [should update this to use a Pager]
-                       $i = 0;
-                       foreach ( $res as $row ) {
-                               $i++;
-                               $namespace = isset( $row->namespace ) ? $row->namespace : NS_FILE;
-                               $title = Title::makeTitleSafe( $namespace, $row->title );
-                               if ( $title instanceof Title && $title->getNamespace() == NS_FILE ) {
-                                       $gallery->add( $title, $this->getCellHtml( $row ) );
-                               }
-                               if ( $i === $num ) {
-                                       break;
-                               }
-                       }
-
-                       $out->addHTML( $gallery->toHtml() );
-               }
-       }
-
-       // Gotta override this since it's abstract
-       function formatResult( $skin, $result ) {
-       }
-
-       /**
-        * Get additional HTML to be shown in a results' cell
-        *
-        * @param object $row Result row
-        * @return string
-        */
-       protected function getCellHtml( $row ) {
-               return '';
-       }
-}
index 3e327c3..7decbee 100644 (file)
@@ -96,6 +96,7 @@ class MagicWord {
 
        static public $mVariableIDsInitialised = false;
        static public $mVariableIDs = array(
+               '!',
                'currentmonth',
                'currentmonth1',
                'currentmonthname',
index f4d4697..c2ac186 100644 (file)
@@ -994,7 +994,7 @@ class MimeMagic {
                        $head = fread( $f, 256 );
                        fclose( $f );
 
-                       $head = strtolower( $head );
+                       $head = str_replace( 'ffmpeg2theora', '', strtolower( $head ) );
 
                        // This is an UGLY HACK, file should be parsed correctly
                        if ( strpos( $head, 'theora' ) !== false ) {
index 612dc32..2a96891 100644 (file)
@@ -1608,7 +1608,7 @@ class OutputPage extends ContextSource {
                $oldTidy = $popts->setTidy( $tidy );
                $popts->setInterfaceMessage( (bool)$interface );
 
-               $parserOutput = $wgParser->parse(
+               $parserOutput = $wgParser->getFreshParser()->parse(
                        $text, $title, $popts,
                        $linestart, true, $this->mRevisionId
                );
@@ -1627,7 +1627,6 @@ class OutputPage extends ContextSource {
         * @param ParserOutput $parserOutput
         */
        public function addParserOutputNoText( &$parserOutput ) {
-               wfDeprecated( __METHOD__, '1.24' );
                $this->addParserOutputMetadata( $parserOutput );
        }
 
@@ -1769,7 +1768,7 @@ class OutputPage extends ContextSource {
                        $oldLang = $popts->setTargetLanguage( $language );
                }
 
-               $parserOutput = $wgParser->parse(
+               $parserOutput = $wgParser->getFreshParser()->parse(
                        $text, $this->getTitle(), $popts,
                        $linestart, true, $this->mRevisionId
                );
diff --git a/includes/PageQueryPage.php b/includes/PageQueryPage.php
deleted file mode 100644 (file)
index afc0227..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-/**
- * Variant of QueryPage which formats the result as a simple link to the page.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup SpecialPage
- */
-
-/**
- * Variant of QueryPage which formats the result as a simple link to the page
- *
- * @ingroup SpecialPage
- */
-abstract class PageQueryPage extends QueryPage {
-       /**
-        * Run a LinkBatch to pre-cache LinkCache information,
-        * like page existence and information for stub color and redirect hints.
-        * This should be done for live data and cached data.
-        *
-        * @param DatabaseBase $db
-        * @param ResultWrapper $res
-        */
-       public function preprocessResults( $db, $res ) {
-               if ( !$res->numRows() ) {
-                       return;
-               }
-
-               $batch = new LinkBatch();
-               foreach ( $res as $row ) {
-                       $batch->add( $row->namespace, $row->title );
-               }
-               $batch->execute();
-
-               $res->seek( 0 );
-       }
-
-       /**
-        * Format the result as a simple link to the page
-        *
-        * @param Skin $skin
-        * @param object $row Result row
-        * @return string
-        */
-       public function formatResult( $skin, $row ) {
-               global $wgContLang;
-
-               $title = Title::makeTitleSafe( $row->namespace, $row->title );
-
-               if ( $title instanceof Title ) {
-                       $text = $wgContLang->convert( $title->getPrefixedText() );
-                       return Linker::link( $title, htmlspecialchars( $text ) );
-               } else {
-                       return Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
-                               Linker::getInvalidTitleDescription( $this->getContext(), $row->namespace, $row->title ) );
-               }
-       }
-}
index 31bc600..13696ad 100644 (file)
@@ -51,33 +51,32 @@ abstract class PrefixSearch {
         */
        public function search( $search, $limit, $namespaces = array() ) {
                $search = trim( $search );
-               if ( $search === '' ) {
-                       return array();
+               if ( $search == '' ) {
+                       return array(); // Return empty result
                }
-
                $namespaces = $this->validateNamespaces( $namespaces );
 
-               // Is this a namespace prefix? Start listing all pages in it.
-               $title = Title::newFromText( $search . 'Dummy' );
-               if ( $title
-                       && $title->getText() === 'Dummy'
-                       && !$title->inNamespace( NS_MAIN )
-                       && !$title->isExternal()
-               ) {
-                       $this->searchBackend( array( $title->getNamespace() ), '', $limit );
+               // Find a Title which is not an interwiki and is in NS_MAIN
+               $title = Title::newFromText( $search );
+               if ( $title && !$title->isExternal() ) {
+                       $ns = array( $title->getNamespace() );
+                       if ( $ns[0] == NS_MAIN ) {
+                               $ns = $namespaces; // no explicit prefix, use default namespaces
+                       }
+                       return $this->searchBackend(
+                               $ns, $title->getText(), $limit );
                }
 
-               // Explicit namespace prefix? Limit search to that namespace.
-               $title = Title::newFromText( $search );
-               if ( $title
-                       && !$title->isExternal()
-                       && !$title->inNamespace( NS_MAIN )
-               {
-                       // This will convert first letter to uppercase if appropriate for the namespace
-                       $this->searchBackend( array( $title->getNamespace() ), $title->getText(), $limit );
+               // Is this a namespace prefix?
+               $title = Title::newFromText( $search . 'Dummy' );
+               if ( $title && $title->getText() == 'Dummy'
+                       && $title->getNamespace() != NS_MAIN
+                       && !$title->isExternal() )
+               {
+                       $namespaces = array( $title->getNamespace() );
+                       $search = '';
                }
 
-               // Search in all requested namespaces
                return $this->searchBackend( $namespaces, $search, $limit );
        }
 
@@ -236,33 +235,28 @@ abstract class PrefixSearch {
         * @return array Array of Title objects
         */
        protected function defaultSearchBackend( $namespaces, $search, $limit ) {
-               $dbr = wfGetDB( DB_SLAVE );
-
-               // Construct suitable prefix for each namespace, they might differ
-               $prefixes = array();
-               foreach ( $namespaces as $ns ) {
-                       $title = Title::makeTitleSafe( $ns, $search );
-                       $prefix = $title ? $title->getDBkey() : '';
-                       $prefixes[$prefix][] = $ns;
-               }
-
-               $conds = array();
-               foreach ( $prefixes as $prefix => $nss ) {
-                       $conds[] = $dbr->makeList( array(
-                               'page_namespace' => $nss,
-                               'page_title' . $dbr->buildLike( $prefix, $dbr->anyString() ),
-                       ), LIST_AND );
+               $ns = array_shift( $namespaces ); // support only one namespace
+               if ( in_array( NS_MAIN, $namespaces ) ) {
+                       $ns = NS_MAIN; // if searching on many always default to main
                }
 
+               $t = Title::newFromText( $search, $ns );
+               $prefix = $t ? $t->getDBkey() : '';
+               $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'page',
                        array( 'page_id', 'page_namespace', 'page_title' ),
-                       $dbr->makeList( $conds, LIST_OR ),
+                       array(
+                               'page_namespace' => $ns,
+                               'page_title ' . $dbr->buildLike( $prefix, $dbr->anyString() )
+                       ),
                        __METHOD__,
                        array( 'LIMIT' => $limit, 'ORDER BY' => 'page_title' )
                );
-
-               // Shorter than a loop, and doesn't break class api
-               return iterator_to_array( TitleArray::newFromResult( $res ) );
+               $srchres = array();
+               foreach ( $res as $row ) {
+                       $srchres[] = Title::newFromRow( $row );
+               }
+               return $srchres;
        }
 
        /**
diff --git a/includes/QueryPage.php b/includes/QueryPage.php
deleted file mode 100644 (file)
index 82dea0d..0000000
+++ /dev/null
@@ -1,855 +0,0 @@
-<?php
-/**
- * Base code for "query" special pages.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup SpecialPage
- */
-
-/**
- * This is a class for doing query pages; since they're almost all the same,
- * we factor out some of the functionality into a superclass, and let
- * subclasses derive from it.
- * @ingroup SpecialPage
- */
-abstract class QueryPage extends SpecialPage {
-       /** @var bool Whether or not we want plain listoutput rather than an ordered list */
-       protected $listoutput = false;
-
-       /** @var int The offset and limit in use, as passed to the query() function */
-       protected $offset = 0;
-
-       /** @var int */
-       protected $limit = 0;
-
-       /**
-        * The number of rows returned by the query. Reading this variable
-        * only makes sense in functions that are run after the query has been
-        * done, such as preprocessResults() and formatRow().
-        */
-       protected $numRows;
-
-       protected $cachedTimestamp = null;
-
-       /**
-        * Whether to show prev/next links
-        */
-       protected $shownavigation = true;
-
-       /**
-        * Get a list of query page classes and their associated special pages,
-        * for periodic updates.
-        *
-        * DO NOT CHANGE THIS LIST without testing that
-        * maintenance/updateSpecialPages.php still works.
-        * @return array
-        */
-       public static function getPages() {
-               global $wgDisableCounters;
-               static $qp = null;
-
-               if ( $qp === null ) {
-                       // QueryPage subclass, Special page name
-                       $qp = array(
-                               array( 'AncientPagesPage', 'Ancientpages' ),
-                               array( 'BrokenRedirectsPage', 'BrokenRedirects' ),
-                               array( 'DeadendPagesPage', 'Deadendpages' ),
-                               array( 'DoubleRedirectsPage', 'DoubleRedirects' ),
-                               array( 'FileDuplicateSearchPage', 'FileDuplicateSearch' ),
-                               array( 'ListDuplicatedFilesPage', 'ListDuplicatedFiles'),
-                               array( 'LinkSearchPage', 'LinkSearch' ),
-                               array( 'ListredirectsPage', 'Listredirects' ),
-                               array( 'LonelyPagesPage', 'Lonelypages' ),
-                               array( 'LongPagesPage', 'Longpages' ),
-                               array( 'MIMEsearchPage', 'MIMEsearch' ),
-                               array( 'MostcategoriesPage', 'Mostcategories' ),
-                               array( 'MostimagesPage', 'Mostimages' ),
-                               array( 'MostinterwikisPage', 'Mostinterwikis' ),
-                               array( 'MostlinkedCategoriesPage', 'Mostlinkedcategories' ),
-                               array( 'MostlinkedtemplatesPage', 'Mostlinkedtemplates' ),
-                               array( 'MostlinkedPage', 'Mostlinked' ),
-                               array( 'MostrevisionsPage', 'Mostrevisions' ),
-                               array( 'FewestrevisionsPage', 'Fewestrevisions' ),
-                               array( 'ShortPagesPage', 'Shortpages' ),
-                               array( 'UncategorizedCategoriesPage', 'Uncategorizedcategories' ),
-                               array( 'UncategorizedPagesPage', 'Uncategorizedpages' ),
-                               array( 'UncategorizedImagesPage', 'Uncategorizedimages' ),
-                               array( 'UncategorizedTemplatesPage', 'Uncategorizedtemplates' ),
-                               array( 'UnusedCategoriesPage', 'Unusedcategories' ),
-                               array( 'UnusedimagesPage', 'Unusedimages' ),
-                               array( 'WantedCategoriesPage', 'Wantedcategories' ),
-                               array( 'WantedFilesPage', 'Wantedfiles' ),
-                               array( 'WantedPagesPage', 'Wantedpages' ),
-                               array( 'WantedTemplatesPage', 'Wantedtemplates' ),
-                               array( 'UnwatchedPagesPage', 'Unwatchedpages' ),
-                               array( 'UnusedtemplatesPage', 'Unusedtemplates' ),
-                               array( 'WithoutInterwikiPage', 'Withoutinterwiki' ),
-                       );
-                       wfRunHooks( 'wgQueryPages', array( &$qp ) );
-
-                       if ( !$wgDisableCounters ) {
-                               $qp[] = array( 'PopularPagesPage', 'Popularpages' );
-                       }
-               }
-
-               return $qp;
-       }
-
-       /**
-        * A mutator for $this->listoutput;
-        *
-        * @param bool $bool
-        */
-       function setListoutput( $bool ) {
-               $this->listoutput = $bool;
-       }
-
-       /**
-        * Subclasses return an SQL query here, formatted as an array with the
-        * following keys:
-        *    tables => Table(s) for passing to Database::select()
-        *    fields => Field(s) for passing to Database::select(), may be *
-        *    conds => WHERE conditions
-        *    options => options
-        *    join_conds => JOIN conditions
-        *
-        * Note that the query itself should return the following three columns:
-        * 'namespace', 'title', and 'value'. 'value' is used for sorting.
-        *
-        * These may be stored in the querycache table for expensive queries,
-        * and that cached data will be returned sometimes, so the presence of
-        * extra fields can't be relied upon. The cached 'value' column will be
-        * an integer; non-numeric values are useful only for sorting the
-        * initial query (except if they're timestamps, see usesTimestamps()).
-        *
-        * Don't include an ORDER or LIMIT clause, they will be added.
-        *
-        * If this function is not overridden or returns something other than
-        * an array, getSQL() will be used instead. This is for backwards
-        * compatibility only and is strongly deprecated.
-        * @return array
-        * @since 1.18
-        */
-       function getQueryInfo() {
-               return null;
-       }
-
-       /**
-        * For back-compat, subclasses may return a raw SQL query here, as a string.
-        * This is strongly deprecated; getQueryInfo() should be overridden instead.
-        * @throws MWException
-        * @return string
-        */
-       function getSQL() {
-               /* Implement getQueryInfo() instead */
-               throw new MWException( "Bug in a QueryPage: doesn't implement getQueryInfo() nor "
-                       . "getQuery() properly" );
-       }
-
-       /**
-        * Subclasses return an array of fields to order by here. Don't append
-        * DESC to the field names, that'll be done automatically if
-        * sortDescending() returns true.
-        * @return array
-        * @since 1.18
-        */
-       function getOrderFields() {
-               return array( 'value' );
-       }
-
-       /**
-        * Does this query return timestamps rather than integers in its
-        * 'value' field? If true, this class will convert 'value' to a
-        * UNIX timestamp for caching.
-        * NOTE: formatRow() may get timestamps in TS_MW (mysql), TS_DB (pgsql)
-        *       or TS_UNIX (querycache) format, so be sure to always run them
-        *       through wfTimestamp()
-        * @return bool
-        * @since 1.18
-        */
-       function usesTimestamps() {
-               return false;
-       }
-
-       /**
-        * Override to sort by increasing values
-        *
-        * @return bool
-        */
-       function sortDescending() {
-               return true;
-       }
-
-       /**
-        * Is this query expensive (for some definition of expensive)? Then we
-        * don't let it run in miser mode. $wgDisableQueryPages causes all query
-        * pages to be declared expensive. Some query pages are always expensive.
-        *
-        * @return bool
-        */
-       function isExpensive() {
-               global $wgDisableQueryPages;
-               return $wgDisableQueryPages;
-       }
-
-       /**
-        * Is the output of this query cacheable? Non-cacheable expensive pages
-        * will be disabled in miser mode and will not have their results written
-        * to the querycache table.
-        * @return bool
-        * @since 1.18
-        */
-       public function isCacheable() {
-               return true;
-       }
-
-       /**
-        * Whether or not the output of the page in question is retrieved from
-        * the database cache.
-        *
-        * @return bool
-        */
-       function isCached() {
-               global $wgMiserMode;
-
-               return $this->isExpensive() && $wgMiserMode;
-       }
-
-       /**
-        * Sometime we don't want to build rss / atom feeds.
-        *
-        * @return bool
-        */
-       function isSyndicated() {
-               return true;
-       }
-
-       /**
-        * Formats the results of the query for display. The skin is the current
-        * skin; you can use it for making links. The result is a single row of
-        * result data. You should be able to grab SQL results off of it.
-        * If the function returns false, the line output will be skipped.
-        * @param Skin $skin
-        * @param object $result Result row
-        * @return string|bool String or false to skip
-        */
-       abstract function formatResult( $skin, $result );
-
-       /**
-        * The content returned by this function will be output before any result
-        *
-        * @return string
-        */
-       function getPageHeader() {
-               return '';
-       }
-
-       /**
-        * If using extra form wheely-dealies, return a set of parameters here
-        * as an associative array. They will be encoded and added to the paging
-        * links (prev/next/lengths).
-        *
-        * @return array
-        */
-       function linkParameters() {
-               return array();
-       }
-
-       /**
-        * Some special pages (for example SpecialListusers) might not return the
-        * current object formatted, but return the previous one instead.
-        * Setting this to return true will ensure formatResult() is called
-        * one more time to make sure that the very last result is formatted
-        * as well.
-        * @return bool
-        */
-       function tryLastResult() {
-               return false;
-       }
-
-       /**
-        * Clear the cache and save new results
-        *
-        * @param int|bool $limit Limit for SQL statement
-        * @param bool $ignoreErrors Whether to ignore database errors
-        * @throws DBError|Exception
-        * @return bool|int
-        */
-       function recache( $limit, $ignoreErrors = true ) {
-               if ( !$this->isCacheable() ) {
-                       return 0;
-               }
-
-               $fname = get_class( $this ) . '::recache';
-               $dbw = wfGetDB( DB_MASTER );
-               if ( !$dbw ) {
-                       return false;
-               }
-
-               try {
-                       # Do query
-                       $res = $this->reallyDoQuery( $limit, false );
-                       $num = false;
-                       if ( $res ) {
-                               $num = $res->numRows();
-                               # Fetch results
-                               $vals = array();
-                               foreach ( $res as $row ) {
-                                       if ( isset( $row->value ) ) {
-                                               if ( $this->usesTimestamps() ) {
-                                                       $value = wfTimestamp( TS_UNIX,
-                                                               $row->value );
-                                               } else {
-                                                       $value = intval( $row->value ); // @bug 14414
-                                               }
-                                       } else {
-                                               $value = 0;
-                                       }
-
-                                       $vals[] = array( 'qc_type' => $this->getName(),
-                                                       'qc_namespace' => $row->namespace,
-                                                       'qc_title' => $row->title,
-                                                       'qc_value' => $value );
-                               }
-
-                               $dbw->begin( __METHOD__ );
-                               # Clear out any old cached data
-                               $dbw->delete( 'querycache', array( 'qc_type' => $this->getName() ), $fname );
-                               # Save results into the querycache table on the master
-                               if ( count( $vals ) ) {
-                                       $dbw->insert( 'querycache', $vals, __METHOD__ );
-                               }
-                               # Update the querycache_info record for the page
-                               $dbw->delete( 'querycache_info', array( 'qci_type' => $this->getName() ), $fname );
-                               $dbw->insert( 'querycache_info',
-                                       array( 'qci_type' => $this->getName(), 'qci_timestamp' => $dbw->timestamp() ),
-                                       $fname );
-                               $dbw->commit( __METHOD__ );
-                       }
-               } catch ( DBError $e ) {
-                       if ( !$ignoreErrors ) {
-                               throw $e; // report query error
-                       }
-                       $num = false; // set result to false to indicate error
-               }
-
-               return $num;
-       }
-
-       /**
-        * Get a DB connection to be used for slow recache queries
-        * @return DatabaseBase
-        */
-       function getRecacheDB() {
-               return wfGetDB( DB_SLAVE, array( $this->getName(), 'QueryPage::recache', 'vslow' ) );
-       }
-
-       /**
-        * Run the query and return the result
-        * @param int|bool $limit Numerical limit or false for no limit
-        * @param int|bool $offset Numerical offset or false for no offset
-        * @return ResultWrapper
-        * @since 1.18
-        */
-       function reallyDoQuery( $limit, $offset = false ) {
-               $fname = get_class( $this ) . "::reallyDoQuery";
-               $dbr = $this->getRecacheDB();
-               $query = $this->getQueryInfo();
-               $order = $this->getOrderFields();
-
-               if ( $this->sortDescending() ) {
-                       foreach ( $order as &$field ) {
-                               $field .= ' DESC';
-                       }
-               }
-
-               if ( is_array( $query ) ) {
-                       $tables = isset( $query['tables'] ) ? (array)$query['tables'] : array();
-                       $fields = isset( $query['fields'] ) ? (array)$query['fields'] : array();
-                       $conds = isset( $query['conds'] ) ? (array)$query['conds'] : array();
-                       $options = isset( $query['options'] ) ? (array)$query['options'] : array();
-                       $join_conds = isset( $query['join_conds'] ) ? (array)$query['join_conds'] : array();
-
-                       if ( count( $order ) ) {
-                               $options['ORDER BY'] = $order;
-                       }
-
-                       if ( $limit !== false ) {
-                               $options['LIMIT'] = intval( $limit );
-                       }
-
-                       if ( $offset !== false ) {
-                               $options['OFFSET'] = intval( $offset );
-                       }
-
-                       $res = $dbr->select( $tables, $fields, $conds, $fname,
-                                       $options, $join_conds
-                       );
-               } else {
-                       // Old-fashioned raw SQL style, deprecated
-                       $sql = $this->getSQL();
-                       $sql .= ' ORDER BY ' . implode( ', ', $order );
-                       $sql = $dbr->limitResult( $sql, $limit, $offset );
-                       $res = $dbr->query( $sql, $fname );
-               }
-
-               return $dbr->resultObject( $res );
-       }
-
-       /**
-        * Somewhat deprecated, you probably want to be using execute()
-        * @param int|bool $offset
-        * @param int|bool $limit
-        * @return ResultWrapper
-        */
-       function doQuery( $offset = false, $limit = false ) {
-               if ( $this->isCached() && $this->isCacheable() ) {
-                       return $this->fetchFromCache( $limit, $offset );
-               } else {
-                       return $this->reallyDoQuery( $limit, $offset );
-               }
-       }
-
-       /**
-        * Fetch the query results from the query cache
-        * @param int|bool $limit Numerical limit or false for no limit
-        * @param int|bool $offset Numerical offset or false for no offset
-        * @return ResultWrapper
-        * @since 1.18
-        */
-       function fetchFromCache( $limit, $offset = false ) {
-               $dbr = wfGetDB( DB_SLAVE );
-               $options = array();
-               if ( $limit !== false ) {
-                       $options['LIMIT'] = intval( $limit );
-               }
-               if ( $offset !== false ) {
-                       $options['OFFSET'] = intval( $offset );
-               }
-               if ( $this->sortDescending() ) {
-                       $options['ORDER BY'] = 'qc_value DESC';
-               } else {
-                       $options['ORDER BY'] = 'qc_value ASC';
-               }
-               $res = $dbr->select( 'querycache', array( 'qc_type',
-                               'namespace' => 'qc_namespace',
-                               'title' => 'qc_title',
-                               'value' => 'qc_value' ),
-                               array( 'qc_type' => $this->getName() ),
-                               __METHOD__, $options
-               );
-               return $dbr->resultObject( $res );
-       }
-
-       public function getCachedTimestamp() {
-               if ( is_null( $this->cachedTimestamp ) ) {
-                       $dbr = wfGetDB( DB_SLAVE );
-                       $fname = get_class( $this ) . '::getCachedTimestamp';
-                       $this->cachedTimestamp = $dbr->selectField( 'querycache_info', 'qci_timestamp',
-                               array( 'qci_type' => $this->getName() ), $fname );
-               }
-               return $this->cachedTimestamp;
-       }
-
-       /**
-        * This is the actual workhorse. It does everything needed to make a
-        * real, honest-to-gosh query page.
-        * @param string $par
-        * @return int
-        */
-       function execute( $par ) {
-               global $wgQueryCacheLimit, $wgDisableQueryPageUpdate;
-
-               $user = $this->getUser();
-               if ( !$this->userCanExecute( $user ) ) {
-                       $this->displayRestrictionError();
-                       return;
-               }
-
-               $this->setHeaders();
-               $this->outputHeader();
-
-               $out = $this->getOutput();
-
-               if ( $this->isCached() && !$this->isCacheable() ) {
-                       $out->addWikiMsg( 'querypage-disabled' );
-                       return 0;
-               }
-
-               $out->setSyndicated( $this->isSyndicated() );
-
-               if ( $this->limit == 0 && $this->offset == 0 ) {
-                       list( $this->limit, $this->offset ) = $this->getRequest()->getLimitOffset();
-               }
-
-               // @todo Use doQuery()
-               if ( !$this->isCached() ) {
-                       # select one extra row for navigation
-                       $res = $this->reallyDoQuery( $this->limit + 1, $this->offset );
-               } else {
-                       # Get the cached result, select one extra row for navigation
-                       $res = $this->fetchFromCache( $this->limit + 1, $this->offset );
-                       if ( !$this->listoutput ) {
-
-                               # Fetch the timestamp of this update
-                               $ts = $this->getCachedTimestamp();
-                               $lang = $this->getLanguage();
-                               $maxResults = $lang->formatNum( $wgQueryCacheLimit );
-
-                               if ( $ts ) {
-                                       $updated = $lang->userTimeAndDate( $ts, $user );
-                                       $updateddate = $lang->userDate( $ts, $user );
-                                       $updatedtime = $lang->userTime( $ts, $user );
-                                       $out->addMeta( 'Data-Cache-Time', $ts );
-                                       $out->addJsConfigVars( 'dataCacheTime', $ts );
-                                       $out->addWikiMsg( 'perfcachedts', $updated, $updateddate, $updatedtime, $maxResults );
-                               } else {
-                                       $out->addWikiMsg( 'perfcached', $maxResults );
-                               }
-
-                               # If updates on this page have been disabled, let the user know
-                               # that the data set won't be refreshed for now
-                               if ( is_array( $wgDisableQueryPageUpdate )
-                                       && in_array( $this->getName(), $wgDisableQueryPageUpdate )
-                               ) {
-                                       $out->wrapWikiMsg(
-                                               "<div class=\"mw-querypage-no-updates\">\n$1\n</div>",
-                                               'querypage-no-updates'
-                                       );
-                               }
-                       }
-               }
-
-               $this->numRows = $res->numRows();
-
-               $dbr = wfGetDB( DB_SLAVE );
-               $this->preprocessResults( $dbr, $res );
-
-               $out->addHTML( Xml::openElement( 'div', array( 'class' => 'mw-spcontent' ) ) );
-
-               # Top header and navigation
-               if ( $this->shownavigation ) {
-                       $out->addHTML( $this->getPageHeader() );
-                       if ( $this->numRows > 0 ) {
-                               $out->addHTML( $this->msg( 'showingresultsinrange' )->numParams(
-                                       min( $this->numRows, $this->limit ), # do not show the one extra row, if exist
-                                       $this->offset + 1, ( min( $this->numRows, $this->limit ) + $this->offset ) )->parseAsBlock() );
-                               # Disable the "next" link when we reach the end
-                               $paging = $this->getLanguage()->viewPrevNext( $this->getPageTitle( $par ), $this->offset,
-                                       $this->limit, $this->linkParameters(), ( $this->numRows <= $this->limit ) );
-                               $out->addHTML( '<p>' . $paging . '</p>' );
-                       } else {
-                               # No results to show, so don't bother with "showing X of Y" etc.
-                               # -- just let the user know and give up now
-                               $out->addWikiMsg( 'specialpage-empty' );
-                               $out->addHTML( Xml::closeElement( 'div' ) );
-                               return;
-                       }
-               }
-
-               # The actual results; specialist subclasses will want to handle this
-               # with more than a straight list, so we hand them the info, plus
-               # an OutputPage, and let them get on with it
-               $this->outputResults( $out,
-                       $this->getSkin(),
-                       $dbr, # Should use a ResultWrapper for this
-                       $res,
-                       min( $this->numRows, $this->limit ), # do not format the one extra row, if exist
-                       $this->offset );
-
-               # Repeat the paging links at the bottom
-               if ( $this->shownavigation ) {
-                       $out->addHTML( '<p>' . $paging . '</p>' );
-               }
-
-               $out->addHTML( Xml::closeElement( 'div' ) );
-
-               return min( $this->numRows, $this->limit ); # do not return the one extra row, if exist
-       }
-
-       /**
-        * Format and output report results using the given information plus
-        * OutputPage
-        *
-        * @param OutputPage $out OutputPage to print to
-        * @param Skin $skin User skin to use
-        * @param DatabaseBase $dbr Database (read) connection to use
-        * @param ResultWrapper $res Result pointer
-        * @param int $num Number of available result rows
-        * @param int $offset Paging offset
-        */
-       protected function outputResults( $out, $skin, $dbr, $res, $num, $offset ) {
-               global $wgContLang;
-
-               if ( $num > 0 ) {
-                       $html = array();
-                       if ( !$this->listoutput ) {
-                               $html[] = $this->openList( $offset );
-                       }
-
-                       # $res might contain the whole 1,000 rows, so we read up to
-                       # $num [should update this to use a Pager]
-                       // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
-                       for ( $i = 0; $i < $num && $row = $res->fetchObject(); $i++ ) {
-                               // @codingStandardsIgnoreEnd
-                               $line = $this->formatResult( $skin, $row );
-                               if ( $line ) {
-                                       $attr = ( isset( $row->usepatrol ) && $row->usepatrol && $row->patrolled == 0 )
-                                               ? ' class="not-patrolled"'
-                                               : '';
-                                       $html[] = $this->listoutput
-                                               ? $line
-                                               : "<li{$attr}>{$line}</li>\n";
-                               }
-                       }
-
-                       # Flush the final result
-                       if ( $this->tryLastResult() ) {
-                               $row = null;
-                               $line = $this->formatResult( $skin, $row );
-                               if ( $line ) {
-                                       $attr = ( isset( $row->usepatrol ) && $row->usepatrol && $row->patrolled == 0 )
-                                               ? ' class="not-patrolled"'
-                                               : '';
-                                       $html[] = $this->listoutput
-                                               ? $line
-                                               : "<li{$attr}>{$line}</li>\n";
-                               }
-                       }
-
-                       if ( !$this->listoutput ) {
-                               $html[] = $this->closeList();
-                       }
-
-                       $html = $this->listoutput
-                               ? $wgContLang->listToText( $html )
-                               : implode( '', $html );
-
-                       $out->addHTML( $html );
-               }
-       }
-
-       /**
-        * @param int $offset
-        * @return string
-        */
-       function openList( $offset ) {
-               return "\n<ol start='" . ( $offset + 1 ) . "' class='special'>\n";
-       }
-
-       /**
-        * @return string
-        */
-       function closeList() {
-               return "</ol>\n";
-       }
-
-       /**
-        * Do any necessary preprocessing of the result object.
-        * @param DatabaseBase $db
-        * @param ResultWrapper $res
-        */
-       function preprocessResults( $db, $res ) {
-       }
-
-       /**
-        * Similar to above, but packaging in a syndicated feed instead of a web page
-        * @param string $class
-        * @param int $limit
-        * @return bool
-        */
-       function doFeed( $class = '', $limit = 50 ) {
-               global $wgFeed, $wgFeedClasses, $wgFeedLimit;
-
-               if ( !$wgFeed ) {
-                       $this->getOutput()->addWikiMsg( 'feed-unavailable' );
-                       return false;
-               }
-
-               $limit = min( $limit, $wgFeedLimit );
-
-               if ( isset( $wgFeedClasses[$class] ) ) {
-                       /** @var RSSFeed|AtomFeed $feed */
-                       $feed = new $wgFeedClasses[$class](
-                               $this->feedTitle(),
-                               $this->feedDesc(),
-                               $this->feedUrl() );
-                       $feed->outHeader();
-
-                       $res = $this->reallyDoQuery( $limit, 0 );
-                       foreach ( $res as $obj ) {
-                               $item = $this->feedResult( $obj );
-                               if ( $item ) {
-                                       $feed->outItem( $item );
-                               }
-                       }
-
-                       $feed->outFooter();
-                       return true;
-               } else {
-                       return false;
-               }
-       }
-
-       /**
-        * Override for custom handling. If the titles/links are ok, just do
-        * feedItemDesc()
-        * @param object $row
-        * @return FeedItem|null
-        */
-       function feedResult( $row ) {
-               if ( !isset( $row->title ) ) {
-                       return null;
-               }
-               $title = Title::makeTitle( intval( $row->namespace ), $row->title );
-               if ( $title ) {
-                       $date = isset( $row->timestamp ) ? $row->timestamp : '';
-                       $comments = '';
-                       if ( $title ) {
-                               $talkpage = $title->getTalkPage();
-                               $comments = $talkpage->getFullURL();
-                       }
-
-                       return new FeedItem(
-                               $title->getPrefixedText(),
-                               $this->feedItemDesc( $row ),
-                               $title->getFullURL(),
-                               $date,
-                               $this->feedItemAuthor( $row ),
-                               $comments );
-               } else {
-                       return null;
-               }
-       }
-
-       function feedItemDesc( $row ) {
-               return isset( $row->comment ) ? htmlspecialchars( $row->comment ) : '';
-       }
-
-       function feedItemAuthor( $row ) {
-               return isset( $row->user_text ) ? $row->user_text : '';
-       }
-
-       function feedTitle() {
-               global $wgLanguageCode, $wgSitename;
-               $desc = $this->getDescription();
-               return "$wgSitename - $desc [$wgLanguageCode]";
-       }
-
-       function feedDesc() {
-               return $this->msg( 'tagline' )->text();
-       }
-
-       function feedUrl() {
-               return $this->getPageTitle()->getFullURL();
-       }
-}
-
-/**
- * Class definition for a wanted query page like
- * WantedPages, WantedTemplates, etc
- */
-abstract class WantedQueryPage extends QueryPage {
-       function isExpensive() {
-               return true;
-       }
-
-       function isSyndicated() {
-               return false;
-       }
-
-       /**
-        * Cache page existence for performance
-        * @param DatabaseBase $db
-        * @param ResultWrapper $res
-        */
-       function preprocessResults( $db, $res ) {
-               if ( !$res->numRows() ) {
-                       return;
-               }
-
-               $batch = new LinkBatch;
-               foreach ( $res as $row ) {
-                       $batch->add( $row->namespace, $row->title );
-               }
-               $batch->execute();
-
-               // Back to start for display
-               $res->seek( 0 );
-       }
-
-       /**
-        * Should formatResult() always check page existence, even if
-        * the results are fresh?  This is a (hopefully temporary)
-        * kluge for Special:WantedFiles, which may contain false
-        * positives for files that exist e.g. in a shared repo (bug
-        * 6220).
-        * @return bool
-        */
-       function forceExistenceCheck() {
-               return false;
-       }
-
-       /**
-        * Format an individual result
-        *
-        * @param Skin $skin Skin to use for UI elements
-        * @param object $result Result row
-        * @return string
-        */
-       public function formatResult( $skin, $result ) {
-               $title = Title::makeTitleSafe( $result->namespace, $result->title );
-               if ( $title instanceof Title ) {
-                       if ( $this->isCached() || $this->forceExistenceCheck() ) {
-                               $pageLink = $title->isKnown()
-                                       ? '<del>' . Linker::link( $title ) . '</del>'
-                                       : Linker::link(
-                                               $title,
-                                               null,
-                                               array(),
-                                               array(),
-                                               array( 'broken' )
-                                       );
-                       } else {
-                               $pageLink = Linker::link(
-                                       $title,
-                                       null,
-                                       array(),
-                                       array(),
-                                       array( 'broken' )
-                               );
-                       }
-                       return $this->getLanguage()->specialList( $pageLink, $this->makeWlhLink( $title, $result ) );
-               } else {
-                       return $this->msg( 'wantedpages-badtitle', $result->title )->escaped();
-               }
-       }
-
-       /**
-        * Make a "what links here" link for a given title
-        *
-        * @param Title $title Title to make the link for
-        * @param object $result Result row
-        * @return string
-        */
-       private function makeWlhLink( $title, $result ) {
-               $wlh = SpecialPage::getTitleFor( 'Whatlinkshere', $title->getPrefixedText() );
-               $label = $this->msg( 'nlinks' )->numParams( $result->value )->escaped();
-               return Linker::link( $wlh, $label );
-       }
-}
index ccb3a15..783ef3f 100644 (file)
@@ -388,6 +388,11 @@ if ( $wgNewUserLog ) {
        $wgLogActionsHandlers['newusers/autocreate'] = 'NewUsersLogFormatter';
 }
 
+if ( $wgPageLanguageUseDB ) {
+       $wgLogTypes[] = 'pagelang';
+       $wgLogActionsHandlers['pagelang/pagelang'] = 'PageLangLogFormatter';
+}
+
 if ( $wgCookieSecure === 'detect' ) {
        $wgCookieSecure = ( WebRequest::detectProtocol() === 'https' );
 }
@@ -602,9 +607,8 @@ $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.
+// This is hacky and bad, the require_once calls should eventually be generated by the installer
+// and placed in LocalSettings.php.
 require_once "$wgStyleDirectory/MonoBook/MonoBook.php";
 require_once "$wgStyleDirectory/Vector/Vector.php";
 
index 4e737d1..e5c1e17 100644 (file)
@@ -273,7 +273,8 @@ class SiteStatsInit {
        private $db;
 
        // Various stats
-       private $mEdits, $mArticles, $mPages, $mUsers, $mViews, $mFiles = 0;
+       private $mEdits = null, $mArticles = null, $mPages = null;
+       private $mUsers = null, $mViews = null, $mFiles = null;
 
        /**
         * Constructor
@@ -402,16 +403,17 @@ class SiteStatsInit {
        }
 
        /**
-        * Refresh site_stats.
+        * Refresh site_stats. If you want ss_total_views to be updated, be sure to
+        * call views() first.
         */
-       protected function refresh() {
+       public function refresh() {
                $values = array(
                        'ss_row_id' => 1,
-                       'ss_total_edits' => $this->mEdits,
-                       'ss_good_articles' => $this->mArticles,
-                       'ss_total_pages' => $this->mPages,
-                       'ss_users' => $this->mUsers,
-                       'ss_images' => $this->mFiles,
+                       'ss_total_edits' => ( $this->mEdits === null ? $this->edits() : $this->mEdits ),
+                       'ss_good_articles' => ( $this->mArticles === null ? $this->articles() : $this->mArticles ),
+                       'ss_total_pages' => ( $this->mPages === null ? $this->pages() : $this->mPages ),
+                       'ss_users' => ( $this->mUsers === null ? $this->users() : $this->mUsers ),
+                       'ss_images' => ( $this->mFiles === null ? $this->files() : $this->mFiles ),
                ) + (
                        $this->mViews ? array( 'ss_total_views' => $this->mViews ) : array()
                );
index 9d8614d..e038cc7 100644 (file)
@@ -150,6 +150,9 @@ class Title {
        /** @var bool The (string) language code of the page's language and content code. */
        private $mPageLanguage = false;
 
+       /** @var string The page language code from the database */
+       private $mDbPageLanguage = null;
+
        /** @var TitleValue A corresponding TitleValue object */
        private $mTitleValue = null;
        // @}
@@ -439,6 +442,9 @@ class Title {
                        } else {
                                $this->mContentModel = false; # initialized lazily in getContentModel()
                        }
+                       if ( isset( $row->page_lang ) ) {
+                               $this->mDbPageLanguage = (string)$row->page_lang;
+                       }
                } else { // page not found
                        $this->mArticleID = 0;
                        $this->mLength = 0;
@@ -3320,6 +3326,7 @@ class Title {
                $this->mContentModel = false;
                $this->mEstimateRevisions = null;
                $this->mPageLanguage = false;
+               $this->mDbPageLanguage = null;
        }
 
        /**
@@ -4977,6 +4984,12 @@ class Title {
                        return $wgLang;
                }
 
+               // Checking if DB language is set
+               if ( $this->mDbPageLanguage ) {
+                       wfProfileOut( __METHOD__ );
+                       return wfGetLangObj( $this->mDbPageLanguage );
+               }
+
                if ( !$this->mPageLanguage || $this->mPageLanguage[1] !== $wgLanguageCode ) {
                        // Note that this may depend on user settings, so the cache should
                        // be only per-request.
@@ -4990,6 +5003,7 @@ class Title {
                } else {
                        $langObj = wfGetLangObj( $this->mPageLanguage[0] );
                }
+
                wfProfileOut( __METHOD__ );
                return $langObj;
        }
index f2d3d9b..67ee7f9 100644 (file)
@@ -56,7 +56,7 @@ class PasswordError extends MWException {
  * for rendering normal pages are set in the cookie to minimize use
  * of the database.
  */
-class User {
+class User implements IDBAccessObject {
        /**
         * Global constants made accessible as class constants so that autoloader
         * magic can be used.
@@ -149,6 +149,7 @@ class User {
                'nominornewtalk',
                'noratelimit',
                'override-export-depth',
+               'pagelang',
                'passwordreset',
                'patrol',
                'patrolmarks',
@@ -1169,9 +1170,10 @@ class User {
         * Load user and user_group data from the database.
         * $this->mId must be set, this is how the user is identified.
         *
+        * @param integer $flags Supports User::READ_LOCKING
         * @return bool True if the user exists, false if the user is anonymous
         */
-       public function loadFromDatabase() {
+       public function loadFromDatabase( $flags = 0 ) {
                // Paranoia
                $this->mId = intval( $this->mId );
 
@@ -1186,7 +1188,10 @@ class User {
                        'user',
                        self::selectFields(),
                        array( 'user_id' => $this->mId ),
-                       __METHOD__
+                       __METHOD__,
+                       ( $flags & self::READ_LOCKING == self::READ_LOCKING )
+                               ? array( 'LOCK IN SHARE MODE' )
+                               : array()
                );
 
                wfRunHooks( 'UserLoadFromDatabase', array( $this, &$s ) );
@@ -3605,17 +3610,25 @@ class User {
                        array( 'IGNORE' )
                );
                if ( !$dbw->affectedRows() ) {
-                       if ( !$inWrite ) {
-                               // XXX: Get out of REPEATABLE-READ so the SELECT below works.
-                               // Often this case happens early in views before any writes.
-                               // This shows up at least with CentralAuth.
+                       // The queries below cannot happen in the same REPEATABLE-READ snapshot.
+                       // Handle this by COMMIT, if possible, or by LOCK IN SHARE MODE otherwise.
+                       if ( $inWrite ) {
+                               // Can't commit due to pending writes that may need atomicity.
+                               // This may cause some lock contention unlike the case below.
+                               $options = array( 'LOCK IN SHARE MODE' );
+                               $flags = self::READ_LOCKING;
+                       } else {
+                               // Often, this case happens early in views before any writes when
+                               // using CentralAuth. It's should be OK to commit and break the snapshot.
                                $dbw->commit( __METHOD__, 'flush' );
+                               $options = array();
+                               $flags = 0;
                        }
                        $this->mId = $dbw->selectField( 'user', 'user_id',
-                               array( 'user_name' => $this->mName ), __METHOD__ );
+                               array( 'user_name' => $this->mName ), __METHOD__, $options );
                        $loaded = false;
                        if ( $this->mId ) {
-                               if ( $this->loadFromDatabase() ) {
+                               if ( $this->loadFromDatabase( $flags ) ) {
                                        $loaded = true;
                                }
                        }
index d3e8cb8..d73f6b4 100644 (file)
@@ -544,7 +544,6 @@ class EmailNotification {
                                $fname = __METHOD__;
                                $dbw->onTransactionIdle(
                                        function() use ( $dbw, $timestamp, $watchers, $title, $fname ) {
-                                               $dbw->begin( $fname );
                                                $dbw->update( 'watchlist',
                                                        array( /* SET */
                                                                'wl_notificationtimestamp' => $dbw->timestamp( $timestamp )
@@ -554,7 +553,6 @@ class EmailNotification {
                                                                'wl_title' => $title->getDBkey(),
                                                        ), $fname
                                                );
-                                               $dbw->commit( $fname );
                                        }
                                );
                        }
diff --git a/includes/WikiCategoryPage.php b/includes/WikiCategoryPage.php
deleted file mode 100644 (file)
index d382001..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * Special handling for category pages.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * Special handling for category pages
- */
-class WikiCategoryPage extends WikiPage {
-
-       /**
-        * Don't return a 404 for categories in use.
-        * In use defined as: either the actual page exists
-        * or the category currently has members.
-        *
-        * @return bool
-        */
-       public function hasViewableContent() {
-               if ( parent::hasViewableContent() ) {
-                       return true;
-               } else {
-                       $cat = Category::newFromTitle( $this->mTitle );
-                       // If any of these are not 0, then has members
-                       if ( $cat->getPageCount()
-                               || $cat->getSubcatCount()
-                               || $cat->getFileCount()
-                       ) {
-                               return true;
-                       }
-               }
-               return false;
-       }
-}
diff --git a/includes/WikiFilePage.php b/includes/WikiFilePage.php
deleted file mode 100644 (file)
index 34f15c3..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-<?php
-/**
- * Special handling for file pages.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * Special handling for file pages
- *
- * @ingroup Media
- */
-class WikiFilePage extends WikiPage {
-       /**
-        * @var File
-        */
-       protected $mFile = false;                               // !< File object
-       protected $mRepo = null;                            // !<
-       protected $mFileLoaded = false;             // !<
-       protected $mDupes = null;                               // !<
-
-       public function __construct( $title ) {
-               parent::__construct( $title );
-               $this->mDupes = null;
-               $this->mRepo = null;
-       }
-
-       public function getActionOverrides() {
-               $overrides = parent::getActionOverrides();
-               $overrides['revert'] = 'RevertFileAction';
-               return $overrides;
-       }
-
-       /**
-        * @param File $file
-        */
-       public function setFile( $file ) {
-               $this->mFile = $file;
-               $this->mFileLoaded = true;
-       }
-
-       /**
-        * @return bool
-        */
-       protected function loadFile() {
-               if ( $this->mFileLoaded ) {
-                       return true;
-               }
-               $this->mFileLoaded = true;
-
-               $this->mFile = wfFindFile( $this->mTitle );
-               if ( !$this->mFile ) {
-                       $this->mFile = wfLocalFile( $this->mTitle ); // always a File
-               }
-               $this->mRepo = $this->mFile->getRepo();
-               return true;
-       }
-
-       /**
-        * @return mixed|null|Title
-        */
-       public function getRedirectTarget() {
-               $this->loadFile();
-               if ( $this->mFile->isLocal() ) {
-                       return parent::getRedirectTarget();
-               }
-               // Foreign image page
-               $from = $this->mFile->getRedirected();
-               $to = $this->mFile->getName();
-               if ( $from == $to ) {
-                       return null;
-               }
-               $this->mRedirectTarget = Title::makeTitle( NS_FILE, $to );
-               return $this->mRedirectTarget;
-       }
-
-       /**
-        * @return bool|mixed|Title
-        */
-       public function followRedirect() {
-               $this->loadFile();
-               if ( $this->mFile->isLocal() ) {
-                       return parent::followRedirect();
-               }
-               $from = $this->mFile->getRedirected();
-               $to = $this->mFile->getName();
-               if ( $from == $to ) {
-                       return false;
-               }
-               return Title::makeTitle( NS_FILE, $to );
-       }
-
-       /**
-        * @return bool
-        */
-       public function isRedirect() {
-               $this->loadFile();
-               if ( $this->mFile->isLocal() ) {
-                       return parent::isRedirect();
-               }
-
-               return (bool)$this->mFile->getRedirected();
-       }
-
-       /**
-        * @return bool
-        */
-       public function isLocal() {
-               $this->loadFile();
-               return $this->mFile->isLocal();
-       }
-
-       /**
-        * @return bool|File
-        */
-       public function getFile() {
-               $this->loadFile();
-               return $this->mFile;
-       }
-
-       /**
-        * @return array|null
-        */
-       public function getDuplicates() {
-               $this->loadFile();
-               if ( !is_null( $this->mDupes ) ) {
-                       return $this->mDupes;
-               }
-               $hash = $this->mFile->getSha1();
-               if ( !( $hash ) ) {
-                       $this->mDupes = array();
-                       return $this->mDupes;
-               }
-               $dupes = RepoGroup::singleton()->findBySha1( $hash );
-               // Remove duplicates with self and non matching file sizes
-               $self = $this->mFile->getRepoName() . ':' . $this->mFile->getName();
-               $size = $this->mFile->getSize();
-
-               /**
-                * @var $file File
-                */
-               foreach ( $dupes as $index => $file ) {
-                       $key = $file->getRepoName() . ':' . $file->getName();
-                       if ( $key == $self ) {
-                               unset( $dupes[$index] );
-                       }
-                       if ( $file->getSize() != $size ) {
-                               unset( $dupes[$index] );
-                       }
-               }
-               $this->mDupes = $dupes;
-               return $this->mDupes;
-       }
-
-       /**
-        * Override handling of action=purge
-        * @return bool
-        */
-       public function doPurge() {
-               $this->loadFile();
-               if ( $this->mFile->exists() ) {
-                       wfDebug( 'ImagePage::doPurge purging ' . $this->mFile->getName() . "\n" );
-                       $update = new HTMLCacheUpdate( $this->mTitle, 'imagelinks' );
-                       $update->doUpdate();
-                       $this->mFile->upgradeRow();
-                       $this->mFile->purgeCache( array( 'forThumbRefresh' => true ) );
-               } else {
-                       wfDebug( 'ImagePage::doPurge no image for '
-                               . $this->mFile->getName() . "; limiting purge to cache only\n" );
-                       // even if the file supposedly doesn't exist, force any cached information
-                       // to be updated (in case the cached information is wrong)
-                       $this->mFile->purgeCache( array( 'forThumbRefresh' => true ) );
-               }
-               if ( $this->mRepo ) {
-                       // Purge redirect cache
-                       $this->mRepo->invalidateImageRedirect( $this->mTitle );
-               }
-               return parent::doPurge();
-       }
-
-       /**
-        * Get the categories this file is a member of on the wiki where it was uploaded.
-        * For local files, this is the same as getCategories().
-        * For foreign API files (InstantCommons), this is not supported currently.
-        * Results will include hidden categories.
-        *
-        * @return TitleArray|Title[]
-        * @since 1.23
-        */
-       public function getForeignCategories() {
-               $this->loadFile();
-               $title = $this->mTitle;
-               $file = $this->mFile;
-
-               if ( ! $file instanceof LocalFile ) {
-                       wfDebug( __CLASS__ . '::' . __METHOD__ . " is not supported for this file\n" );
-                       return TitleArray::newFromResult( new FakeResultWrapper( array() ) );
-               }
-
-               /** @var LocalRepo $repo */
-               $repo = $file->getRepo();
-               $dbr = $repo->getSlaveDB();
-
-               $res = $dbr->select(
-                       array( 'page', 'categorylinks' ),
-                       array(
-                               'page_title' => 'cl_to',
-                               'page_namespace' => NS_CATEGORY,
-                       ),
-                       array(
-                               'page_namespace' => $title->getNamespace(),
-                               'page_title' => $title->getDBkey(),
-                       ),
-                       __METHOD__,
-                       array(),
-                       array( 'categorylinks' => array( 'INNER JOIN', 'page_id = cl_from' ) )
-               );
-
-               return TitleArray::newFromResult( $res );
-       }
-}
diff --git a/includes/WikiPage.php b/includes/WikiPage.php
deleted file mode 100644 (file)
index c4d1bf3..0000000
+++ /dev/null
@@ -1,3760 +0,0 @@
-<?php
-/**
- * Base representation for a MediaWiki page.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * Abstract class for type hinting (accepts WikiPage, Article, ImagePage, CategoryPage)
- */
-interface Page {
-}
-
-/**
- * Class representing a MediaWiki article and history.
- *
- * Some fields are public only for backwards-compatibility. Use accessors.
- * In the past, this class was part of Article.php and everything was public.
- *
- * @internal documentation reviewed 15 Mar 2010
- */
-class WikiPage implements Page, IDBAccessObject {
-       // Constants for $mDataLoadedFrom and related
-
-       /**
-        * @var Title
-        */
-       public $mTitle = null;
-
-       /**@{{
-        * @protected
-        */
-       public $mDataLoaded = false;         // !< Boolean
-       public $mIsRedirect = false;         // !< Boolean
-       public $mLatest = false;             // !< Integer (false means "not loaded")
-       /**@}}*/
-
-       /** @var stdclass Map of cache fields (text, parser output, ect) for a proposed/new edit */
-       public $mPreparedEdit = false;
-
-       /**
-        * @var int
-        */
-       protected $mId = null;
-
-       /**
-        * @var int One of the READ_* constants
-        */
-       protected $mDataLoadedFrom = self::READ_NONE;
-
-       /**
-        * @var Title
-        */
-       protected $mRedirectTarget = null;
-
-       /**
-        * @var Revision
-        */
-       protected $mLastRevision = null;
-
-       /**
-        * @var string Timestamp of the current revision or empty string if not loaded
-        */
-       protected $mTimestamp = '';
-
-       /**
-        * @var string
-        */
-       protected $mTouched = '19700101000000';
-
-       /**
-        * @var string
-        */
-       protected $mLinksUpdated = '19700101000000';
-
-       /**
-        * @var int|null
-        */
-       protected $mCounter = null;
-
-       /**
-        * Constructor and clear the article
-        * @param Title $title Reference to a Title object.
-        */
-       public function __construct( Title $title ) {
-               $this->mTitle = $title;
-       }
-
-       /**
-        * Create a WikiPage object of the appropriate class for the given title.
-        *
-        * @param Title $title
-        *
-        * @throws MWException
-        * @return WikiPage Object of the appropriate type
-        */
-       public static function factory( Title $title ) {
-               $ns = $title->getNamespace();
-
-               if ( $ns == NS_MEDIA ) {
-                       throw new MWException( "NS_MEDIA is a virtual namespace; use NS_FILE." );
-               } elseif ( $ns < 0 ) {
-                       throw new MWException( "Invalid or virtual namespace $ns given." );
-               }
-
-               switch ( $ns ) {
-                       case NS_FILE:
-                               $page = new WikiFilePage( $title );
-                               break;
-                       case NS_CATEGORY:
-                               $page = new WikiCategoryPage( $title );
-                               break;
-                       default:
-                               $page = new WikiPage( $title );
-               }
-
-               return $page;
-       }
-
-       /**
-        * Constructor from a page id
-        *
-        * @param int $id Article ID to load
-        * @param string|int $from One of the following values:
-        *        - "fromdb" or WikiPage::READ_NORMAL to select from a slave database
-        *        - "fromdbmaster" or WikiPage::READ_LATEST to select from the master database
-        *
-        * @return WikiPage|null
-        */
-       public static function newFromID( $id, $from = 'fromdb' ) {
-               // page id's are never 0 or negative, see bug 61166
-               if ( $id < 1 ) {
-                       return null;
-               }
-
-               $from = self::convertSelectType( $from );
-               $db = wfGetDB( $from === self::READ_LATEST ? DB_MASTER : DB_SLAVE );
-               $row = $db->selectRow( 'page', self::selectFields(), array( 'page_id' => $id ), __METHOD__ );
-               if ( !$row ) {
-                       return null;
-               }
-               return self::newFromRow( $row, $from );
-       }
-
-       /**
-        * Constructor from a database row
-        *
-        * @since 1.20
-        * @param object $row Database row containing at least fields returned by selectFields().
-        * @param string|int $from Source of $data:
-        *        - "fromdb" or WikiPage::READ_NORMAL: from a slave DB
-        *        - "fromdbmaster" or WikiPage::READ_LATEST: from the master DB
-        *        - "forupdate" or WikiPage::READ_LOCKING: from the master DB using SELECT FOR UPDATE
-        * @return WikiPage
-        */
-       public static function newFromRow( $row, $from = 'fromdb' ) {
-               $page = self::factory( Title::newFromRow( $row ) );
-               $page->loadFromRow( $row, $from );
-               return $page;
-       }
-
-       /**
-        * Convert 'fromdb', 'fromdbmaster' and 'forupdate' to READ_* constants.
-        *
-        * @param object|string|int $type
-        * @return mixed
-        */
-       private static function convertSelectType( $type ) {
-               switch ( $type ) {
-               case 'fromdb':
-                       return self::READ_NORMAL;
-               case 'fromdbmaster':
-                       return self::READ_LATEST;
-               case 'forupdate':
-                       return self::READ_LOCKING;
-               default:
-                       // It may already be an integer or whatever else
-                       return $type;
-               }
-       }
-
-       /**
-        * Returns overrides for action handlers.
-        * Classes listed here will be used instead of the default one when
-        * (and only when) $wgActions[$action] === true. This allows subclasses
-        * to override the default behavior.
-        *
-        * @todo Move this UI stuff somewhere else
-        *
-        * @return array
-        */
-       public function getActionOverrides() {
-               $content_handler = $this->getContentHandler();
-               return $content_handler->getActionOverrides();
-       }
-
-       /**
-        * Returns the ContentHandler instance to be used to deal with the content of this WikiPage.
-        *
-        * Shorthand for ContentHandler::getForModelID( $this->getContentModel() );
-        *
-        * @return ContentHandler
-        *
-        * @since 1.21
-        */
-       public function getContentHandler() {
-               return ContentHandler::getForModelID( $this->getContentModel() );
-       }
-
-       /**
-        * Get the title object of the article
-        * @return Title Title object of this page
-        */
-       public function getTitle() {
-               return $this->mTitle;
-       }
-
-       /**
-        * Clear the object
-        * @return void
-        */
-       public function clear() {
-               $this->mDataLoaded = false;
-               $this->mDataLoadedFrom = self::READ_NONE;
-
-               $this->clearCacheFields();
-       }
-
-       /**
-        * Clear the object cache fields
-        * @return void
-        */
-       protected function clearCacheFields() {
-               $this->mId = null;
-               $this->mCounter = null;
-               $this->mRedirectTarget = null; // Title object if set
-               $this->mLastRevision = null; // Latest revision
-               $this->mTouched = '19700101000000';
-               $this->mLinksUpdated = '19700101000000';
-               $this->mTimestamp = '';
-               $this->mIsRedirect = false;
-               $this->mLatest = false;
-               // Bug 57026: do not clear mPreparedEdit since prepareTextForEdit() already checks
-               // the requested rev ID and content against the cached one for equality. For most
-               // content types, the output should not change during the lifetime of this cache.
-               // Clearing it can cause extra parses on edit for no reason.
-       }
-
-       /**
-        * Clear the mPreparedEdit cache field, as may be needed by mutable content types
-        * @return void
-        * @since 1.23
-        */
-       public function clearPreparedEdit() {
-               $this->mPreparedEdit = false;
-       }
-
-       /**
-        * Return the list of revision fields that should be selected to create
-        * a new page.
-        *
-        * @return array
-        */
-       public static function selectFields() {
-               global $wgContentHandlerUseDB;
-
-               $fields = array(
-                       'page_id',
-                       'page_namespace',
-                       'page_title',
-                       'page_restrictions',
-                       'page_counter',
-                       'page_is_redirect',
-                       'page_is_new',
-                       'page_random',
-                       'page_touched',
-                       'page_links_updated',
-                       'page_latest',
-                       'page_len',
-               );
-
-               if ( $wgContentHandlerUseDB ) {
-                       $fields[] = 'page_content_model';
-               }
-
-               return $fields;
-       }
-
-       /**
-        * Fetch a page record with the given conditions
-        * @param DatabaseBase $dbr
-        * @param array $conditions
-        * @param array $options
-        * @return object|bool Database result resource, or false on failure
-        */
-       protected function pageData( $dbr, $conditions, $options = array() ) {
-               $fields = self::selectFields();
-
-               wfRunHooks( 'ArticlePageDataBefore', array( &$this, &$fields ) );
-
-               $row = $dbr->selectRow( 'page', $fields, $conditions, __METHOD__, $options );
-
-               wfRunHooks( 'ArticlePageDataAfter', array( &$this, &$row ) );
-
-               return $row;
-       }
-
-       /**
-        * Fetch a page record matching the Title object's namespace and title
-        * using a sanitized title string
-        *
-        * @param DatabaseBase $dbr
-        * @param Title $title
-        * @param array $options
-        * @return object|bool Database result resource, or false on failure
-        */
-       public function pageDataFromTitle( $dbr, $title, $options = array() ) {
-               return $this->pageData( $dbr, array(
-                       'page_namespace' => $title->getNamespace(),
-                       'page_title' => $title->getDBkey() ), $options );
-       }
-
-       /**
-        * Fetch a page record matching the requested ID
-        *
-        * @param DatabaseBase $dbr
-        * @param int $id
-        * @param array $options
-        * @return object|bool Database result resource, or false on failure
-        */
-       public function pageDataFromId( $dbr, $id, $options = array() ) {
-               return $this->pageData( $dbr, array( 'page_id' => $id ), $options );
-       }
-
-       /**
-        * Set the general counter, title etc data loaded from
-        * some source.
-        *
-        * @param object|string|int $from One of the following:
-        *   - A DB query result object.
-        *   - "fromdb" or WikiPage::READ_NORMAL to get from a slave DB.
-        *   - "fromdbmaster" or WikiPage::READ_LATEST to get from the master DB.
-        *   - "forupdate"  or WikiPage::READ_LOCKING to get from the master DB
-        *     using SELECT FOR UPDATE.
-        *
-        * @return void
-        */
-       public function loadPageData( $from = 'fromdb' ) {
-               $from = self::convertSelectType( $from );
-               if ( is_int( $from ) && $from <= $this->mDataLoadedFrom ) {
-                       // We already have the data from the correct location, no need to load it twice.
-                       return;
-               }
-
-               if ( $from === self::READ_LOCKING ) {
-                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle, array( 'FOR UPDATE' ) );
-               } elseif ( $from === self::READ_LATEST ) {
-                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
-               } elseif ( $from === self::READ_NORMAL ) {
-                       $data = $this->pageDataFromTitle( wfGetDB( DB_SLAVE ), $this->mTitle );
-                       // Use a "last rev inserted" timestamp key to diminish the issue of slave lag.
-                       // Note that DB also stores the master position in the session and checks it.
-                       $touched = $this->getCachedLastEditTime();
-                       if ( $touched ) { // key set
-                               if ( !$data || $touched > wfTimestamp( TS_MW, $data->page_touched ) ) {
-                                       $from = self::READ_LATEST;
-                                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
-                               }
-                       }
-               } else {
-                       // No idea from where the caller got this data, assume slave database.
-                       $data = $from;
-                       $from = self::READ_NORMAL;
-               }
-
-               $this->loadFromRow( $data, $from );
-       }
-
-       /**
-        * Load the object from a database row
-        *
-        * @since 1.20
-        * @param object $data Database row containing at least fields returned by selectFields()
-        * @param string|int $from One of the following:
-        *        - "fromdb" or WikiPage::READ_NORMAL if the data comes from a slave DB
-        *        - "fromdbmaster" or WikiPage::READ_LATEST if the data comes from the master DB
-        *        - "forupdate"  or WikiPage::READ_LOCKING if the data comes from from
-        *          the master DB using SELECT FOR UPDATE
-        */
-       public function loadFromRow( $data, $from ) {
-               $lc = LinkCache::singleton();
-               $lc->clearLink( $this->mTitle );
-
-               if ( $data ) {
-                       $lc->addGoodLinkObjFromRow( $this->mTitle, $data );
-
-                       $this->mTitle->loadFromRow( $data );
-
-                       // Old-fashioned restrictions
-                       $this->mTitle->loadRestrictions( $data->page_restrictions );
-
-                       $this->mId = intval( $data->page_id );
-                       $this->mCounter = intval( $data->page_counter );
-                       $this->mTouched = wfTimestamp( TS_MW, $data->page_touched );
-                       $this->mLinksUpdated = wfTimestampOrNull( TS_MW, $data->page_links_updated );
-                       $this->mIsRedirect = intval( $data->page_is_redirect );
-                       $this->mLatest = intval( $data->page_latest );
-                       // Bug 37225: $latest may no longer match the cached latest Revision object.
-                       // Double-check the ID of any cached latest Revision object for consistency.
-                       if ( $this->mLastRevision && $this->mLastRevision->getId() != $this->mLatest ) {
-                               $this->mLastRevision = null;
-                               $this->mTimestamp = '';
-                       }
-               } else {
-                       $lc->addBadLinkObj( $this->mTitle );
-
-                       $this->mTitle->loadFromRow( false );
-
-                       $this->clearCacheFields();
-
-                       $this->mId = 0;
-               }
-
-               $this->mDataLoaded = true;
-               $this->mDataLoadedFrom = self::convertSelectType( $from );
-       }
-
-       /**
-        * @return int Page ID
-        */
-       public function getId() {
-               if ( !$this->mDataLoaded ) {
-                       $this->loadPageData();
-               }
-               return $this->mId;
-       }
-
-       /**
-        * @return bool Whether or not the page exists in the database
-        */
-       public function exists() {
-               if ( !$this->mDataLoaded ) {
-                       $this->loadPageData();
-               }
-               return $this->mId > 0;
-       }
-
-       /**
-        * Check if this page is something we're going to be showing
-        * some sort of sensible content for. If we return false, page
-        * views (plain action=view) will return an HTTP 404 response,
-        * so spiders and robots can know they're following a bad link.
-        *
-        * @return bool
-        */
-       public function hasViewableContent() {
-               return $this->exists() || $this->mTitle->isAlwaysKnown();
-       }
-
-       /**
-        * @return int The view count for the page
-        */
-       public function getCount() {
-               if ( !$this->mDataLoaded ) {
-                       $this->loadPageData();
-               }
-
-               return $this->mCounter;
-       }
-
-       /**
-        * Tests if the article content represents a redirect
-        *
-        * @return bool
-        */
-       public function isRedirect() {
-               $content = $this->getContent();
-               if ( !$content ) {
-                       return false;
-               }
-
-               return $content->isRedirect();
-       }
-
-       /**
-        * Returns the page's content model id (see the CONTENT_MODEL_XXX constants).
-        *
-        * Will use the revisions actual content model if the page exists,
-        * and the page's default if the page doesn't exist yet.
-        *
-        * @return string
-        *
-        * @since 1.21
-        */
-       public function getContentModel() {
-               if ( $this->exists() ) {
-                       // look at the revision's actual content model
-                       $rev = $this->getRevision();
-
-                       if ( $rev !== null ) {
-                               return $rev->getContentModel();
-                       } else {
-                               $title = $this->mTitle->getPrefixedDBkey();
-                               wfWarn( "Page $title exists but has no (visible) revisions!" );
-                       }
-               }
-
-               // use the default model for this page
-               return $this->mTitle->getContentModel();
-       }
-
-       /**
-        * Loads page_touched and returns a value indicating if it should be used
-        * @return bool true if not a redirect
-        */
-       public function checkTouched() {
-               if ( !$this->mDataLoaded ) {
-                       $this->loadPageData();
-               }
-               return !$this->mIsRedirect;
-       }
-
-       /**
-        * Get the page_touched field
-        * @return string Containing GMT timestamp
-        */
-       public function getTouched() {
-               if ( !$this->mDataLoaded ) {
-                       $this->loadPageData();
-               }
-               return $this->mTouched;
-       }
-
-       /**
-        * Get the page_links_updated field
-        * @return string|null Containing GMT timestamp
-        */
-       public function getLinksTimestamp() {
-               if ( !$this->mDataLoaded ) {
-                       $this->loadPageData();
-               }
-               return $this->mLinksUpdated;
-       }
-
-       /**
-        * Get the page_latest field
-        * @return int rev_id of current revision
-        */
-       public function getLatest() {
-               if ( !$this->mDataLoaded ) {
-                       $this->loadPageData();
-               }
-               return (int)$this->mLatest;
-       }
-
-       /**
-        * Get the Revision object of the oldest revision
-        * @return Revision|null
-        */
-       public function getOldestRevision() {
-               wfProfileIn( __METHOD__ );
-
-               // Try using the slave database first, then try the master
-               $continue = 2;
-               $db = wfGetDB( DB_SLAVE );
-               $revSelectFields = Revision::selectFields();
-
-               $row = null;
-               while ( $continue ) {
-                       $row = $db->selectRow(
-                               array( 'page', 'revision' ),
-                               $revSelectFields,
-                               array(
-                                       'page_namespace' => $this->mTitle->getNamespace(),
-                                       'page_title' => $this->mTitle->getDBkey(),
-                                       'rev_page = page_id'
-                               ),
-                               __METHOD__,
-                               array(
-                                       'ORDER BY' => 'rev_timestamp ASC'
-                               )
-                       );
-
-                       if ( $row ) {
-                               $continue = 0;
-                       } else {
-                               $db = wfGetDB( DB_MASTER );
-                               $continue--;
-                       }
-               }
-
-               wfProfileOut( __METHOD__ );
-               return $row ? Revision::newFromRow( $row ) : null;
-       }
-
-       /**
-        * Loads everything except the text
-        * This isn't necessary for all uses, so it's only done if needed.
-        */
-       protected function loadLastEdit() {
-               if ( $this->mLastRevision !== null ) {
-                       return; // already loaded
-               }
-
-               $latest = $this->getLatest();
-               if ( !$latest ) {
-                       return; // page doesn't exist or is missing page_latest info
-               }
-
-               // Bug 37225: if session S1 loads the page row FOR UPDATE, the result always includes the
-               // latest changes committed. This is true even within REPEATABLE-READ transactions, where
-               // S1 normally only sees changes committed before the first S1 SELECT. Thus we need S1 to
-               // also gets the revision row FOR UPDATE; otherwise, it may not find it since a page row
-               // UPDATE and revision row INSERT by S2 may have happened after the first S1 SELECT.
-               // http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html#isolevel_repeatable-read.
-               $flags = ( $this->mDataLoadedFrom == self::READ_LOCKING ) ? Revision::READ_LOCKING : 0;
-               $revision = Revision::newFromPageId( $this->getId(), $latest, $flags );
-               if ( $revision ) { // sanity
-                       $this->setLastEdit( $revision );
-               }
-       }
-
-       /**
-        * Set the latest revision
-        * @param Revision $revision
-        */
-       protected function setLastEdit( Revision $revision ) {
-               $this->mLastRevision = $revision;
-               $this->mTimestamp = $revision->getTimestamp();
-       }
-
-       /**
-        * Get the latest revision
-        * @return Revision|null
-        */
-       public function getRevision() {
-               $this->loadLastEdit();
-               if ( $this->mLastRevision ) {
-                       return $this->mLastRevision;
-               }
-               return null;
-       }
-
-       /**
-        * Get the content of the current revision. No side-effects...
-        *
-        * @param int $audience int One of:
-        *   Revision::FOR_PUBLIC       to be displayed to all users
-        *   Revision::FOR_THIS_USER    to be displayed to $wgUser
-        *   Revision::RAW              get the text regardless of permissions
-        * @param User $user User object to check for, only if FOR_THIS_USER is passed
-        *   to the $audience parameter
-        * @return Content|null The content of the current revision
-        *
-        * @since 1.21
-        */
-       public function getContent( $audience = Revision::FOR_PUBLIC, User $user = null ) {
-               $this->loadLastEdit();
-               if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getContent( $audience, $user );
-               }
-               return null;
-       }
-
-       /**
-        * Get the text of the current revision. No side-effects...
-        *
-        * @param int $audience One of:
-        *   Revision::FOR_PUBLIC       to be displayed to all users
-        *   Revision::FOR_THIS_USER    to be displayed to the given user
-        *   Revision::RAW              get the text regardless of permissions
-        * @param User $user User object to check for, only if FOR_THIS_USER is passed
-        *   to the $audience parameter
-        * @return string|bool The text of the current revision
-        * @deprecated since 1.21, getContent() should be used instead.
-        */
-       public function getText( $audience = Revision::FOR_PUBLIC, User $user = null ) {
-               ContentHandler::deprecated( __METHOD__, '1.21' );
-
-               $this->loadLastEdit();
-               if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getText( $audience, $user );
-               }
-               return false;
-       }
-
-       /**
-        * Get the text of the current revision. No side-effects...
-        *
-        * @return string|bool The text of the current revision. False on failure
-        * @deprecated since 1.21, getContent() should be used instead.
-        */
-       public function getRawText() {
-               ContentHandler::deprecated( __METHOD__, '1.21' );
-
-               return $this->getText( Revision::RAW );
-       }
-
-       /**
-        * @return string MW timestamp of last article revision
-        */
-       public function getTimestamp() {
-               // Check if the field has been filled by WikiPage::setTimestamp()
-               if ( !$this->mTimestamp ) {
-                       $this->loadLastEdit();
-               }
-
-               return wfTimestamp( TS_MW, $this->mTimestamp );
-       }
-
-       /**
-        * Set the page timestamp (use only to avoid DB queries)
-        * @param string $ts MW timestamp of last article revision
-        * @return void
-        */
-       public function setTimestamp( $ts ) {
-               $this->mTimestamp = wfTimestamp( TS_MW, $ts );
-       }
-
-       /**
-        * @param int $audience One of:
-        *   Revision::FOR_PUBLIC       to be displayed to all users
-        *   Revision::FOR_THIS_USER    to be displayed to the given user
-        *   Revision::RAW              get the text regardless of permissions
-        * @param User $user User object to check for, only if FOR_THIS_USER is passed
-        *   to the $audience parameter
-        * @return int user ID for the user that made the last article revision
-        */
-       public function getUser( $audience = Revision::FOR_PUBLIC, User $user = null ) {
-               $this->loadLastEdit();
-               if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getUser( $audience, $user );
-               } else {
-                       return -1;
-               }
-       }
-
-       /**
-        * Get the User object of the user who created the page
-        * @param int $audience One of:
-        *   Revision::FOR_PUBLIC       to be displayed to all users
-        *   Revision::FOR_THIS_USER    to be displayed to the given user
-        *   Revision::RAW              get the text regardless of permissions
-        * @param User $user User object to check for, only if FOR_THIS_USER is passed
-        *   to the $audience parameter
-        * @return User|null
-        */
-       public function getCreator( $audience = Revision::FOR_PUBLIC, User $user = null ) {
-               $revision = $this->getOldestRevision();
-               if ( $revision ) {
-                       $userName = $revision->getUserText( $audience, $user );
-                       return User::newFromName( $userName, false );
-               } else {
-                       return null;
-               }
-       }
-
-       /**
-        * @param int $audience One of:
-        *   Revision::FOR_PUBLIC       to be displayed to all users
-        *   Revision::FOR_THIS_USER    to be displayed to the given user
-        *   Revision::RAW              get the text regardless of permissions
-        * @param User $user User object to check for, only if FOR_THIS_USER is passed
-        *   to the $audience parameter
-        * @return string username of the user that made the last article revision
-        */
-       public function getUserText( $audience = Revision::FOR_PUBLIC, User $user = null ) {
-               $this->loadLastEdit();
-               if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getUserText( $audience, $user );
-               } else {
-                       return '';
-               }
-       }
-
-       /**
-        * @param int $audience One of:
-        *   Revision::FOR_PUBLIC       to be displayed to all users
-        *   Revision::FOR_THIS_USER    to be displayed to the given user
-        *   Revision::RAW              get the text regardless of permissions
-        * @param User $user User object to check for, only if FOR_THIS_USER is passed
-        *   to the $audience parameter
-        * @return string Comment stored for the last article revision
-        */
-       public function getComment( $audience = Revision::FOR_PUBLIC, User $user = null ) {
-               $this->loadLastEdit();
-               if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getComment( $audience, $user );
-               } else {
-                       return '';
-               }
-       }
-
-       /**
-        * Returns true if last revision was marked as "minor edit"
-        *
-        * @return bool Minor edit indicator for the last article revision.
-        */
-       public function getMinorEdit() {
-               $this->loadLastEdit();
-               if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->isMinor();
-               } else {
-                       return false;
-               }
-       }
-
-       /**
-        * Get the cached timestamp for the last time the page changed.
-        * This is only used to help handle slave lag by comparing to page_touched.
-        * @return string MW timestamp
-        */
-       protected function getCachedLastEditTime() {
-               global $wgMemc;
-               $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) );
-               return $wgMemc->get( $key );
-       }
-
-       /**
-        * Set the cached timestamp for the last time the page changed.
-        * This is only used to help handle slave lag by comparing to page_touched.
-        * @param string $timestamp
-        * @return void
-        */
-       public function setCachedLastEditTime( $timestamp ) {
-               global $wgMemc;
-               $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) );
-               $wgMemc->set( $key, wfTimestamp( TS_MW, $timestamp ), 60 * 15 );
-       }
-
-       /**
-        * Determine whether a page would be suitable for being counted as an
-        * article in the site_stats table based on the title & its content
-        *
-        * @param object|bool $editInfo (false): object returned by prepareTextForEdit(),
-        *   if false, the current database state will be used
-        * @return bool
-        */
-       public function isCountable( $editInfo = false ) {
-               global $wgArticleCountMethod;
-
-               if ( !$this->mTitle->isContentPage() ) {
-                       return false;
-               }
-
-               if ( $editInfo ) {
-                       $content = $editInfo->pstContent;
-               } else {
-                       $content = $this->getContent();
-               }
-
-               if ( !$content || $content->isRedirect() ) {
-                       return false;
-               }
-
-               $hasLinks = null;
-
-               if ( $wgArticleCountMethod === 'link' ) {
-                       // nasty special case to avoid re-parsing to detect links
-
-                       if ( $editInfo ) {
-                               // ParserOutput::getLinks() is a 2D array of page links, so
-                               // to be really correct we would need to recurse in the array
-                               // but the main array should only have items in it if there are
-                               // links.
-                               $hasLinks = (bool)count( $editInfo->output->getLinks() );
-                       } else {
-                               $hasLinks = (bool)wfGetDB( DB_SLAVE )->selectField( 'pagelinks', 1,
-                                       array( 'pl_from' => $this->getId() ), __METHOD__ );
-                       }
-               }
-
-               return $content->isCountable( $hasLinks );
-       }
-
-       /**
-        * If this page is a redirect, get its target
-        *
-        * The target will be fetched from the redirect table if possible.
-        * If this page doesn't have an entry there, call insertRedirect()
-        * @return Title|null Title object, or null if this page is not a redirect
-        */
-       public function getRedirectTarget() {
-               if ( !$this->mTitle->isRedirect() ) {
-                       return null;
-               }
-
-               if ( $this->mRedirectTarget !== null ) {
-                       return $this->mRedirectTarget;
-               }
-
-               // Query the redirect table
-               $dbr = wfGetDB( DB_SLAVE );
-               $row = $dbr->selectRow( 'redirect',
-                       array( 'rd_namespace', 'rd_title', 'rd_fragment', 'rd_interwiki' ),
-                       array( 'rd_from' => $this->getId() ),
-                       __METHOD__
-               );
-
-               // rd_fragment and rd_interwiki were added later, populate them if empty
-               if ( $row && !is_null( $row->rd_fragment ) && !is_null( $row->rd_interwiki ) ) {
-                       $this->mRedirectTarget = Title::makeTitle(
-                               $row->rd_namespace, $row->rd_title,
-                               $row->rd_fragment, $row->rd_interwiki );
-                       return $this->mRedirectTarget;
-               }
-
-               // This page doesn't have an entry in the redirect table
-               $this->mRedirectTarget = $this->insertRedirect();
-               return $this->mRedirectTarget;
-       }
-
-       /**
-        * Insert an entry for this page into the redirect table.
-        *
-        * Don't call this function directly unless you know what you're doing.
-        * @return Title|null Title object or null if not a redirect
-        */
-       public function insertRedirect() {
-               // recurse through to only get the final target
-               $content = $this->getContent();
-               $retval = $content ? $content->getUltimateRedirectTarget() : null;
-               if ( !$retval ) {
-                       return null;
-               }
-               $this->insertRedirectEntry( $retval );
-               return $retval;
-       }
-
-       /**
-        * Insert or update the redirect table entry for this page to indicate
-        * it redirects to $rt .
-        * @param Title $rt Redirect target
-        */
-       public function insertRedirectEntry( $rt ) {
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->replace( 'redirect', array( 'rd_from' ),
-                       array(
-                               'rd_from' => $this->getId(),
-                               'rd_namespace' => $rt->getNamespace(),
-                               'rd_title' => $rt->getDBkey(),
-                               'rd_fragment' => $rt->getFragment(),
-                               'rd_interwiki' => $rt->getInterwiki(),
-                       ),
-                       __METHOD__
-               );
-       }
-
-       /**
-        * Get the Title object or URL this page redirects to
-        *
-        * @return bool|Title|string false, Title of in-wiki target, or string with URL
-        */
-       public function followRedirect() {
-               return $this->getRedirectURL( $this->getRedirectTarget() );
-       }
-
-       /**
-        * Get the Title object or URL to use for a redirect. We use Title
-        * objects for same-wiki, non-special redirects and URLs for everything
-        * else.
-        * @param Title $rt Redirect target
-        * @return bool|Title|string false, Title object of local target, or string with URL
-        */
-       public function getRedirectURL( $rt ) {
-               if ( !$rt ) {
-                       return false;
-               }
-
-               if ( $rt->isExternal() ) {
-                       if ( $rt->isLocal() ) {
-                               // Offsite wikis need an HTTP redirect.
-                               //
-                               // This can be hard to reverse and may produce loops,
-                               // so they may be disabled in the site configuration.
-                               $source = $this->mTitle->getFullURL( 'redirect=no' );
-                               return $rt->getFullURL( array( 'rdfrom' => $source ) );
-                       } else {
-                               // External pages pages without "local" bit set are not valid
-                               // redirect targets
-                               return false;
-                       }
-               }
-
-               if ( $rt->isSpecialPage() ) {
-                       // Gotta handle redirects to special pages differently:
-                       // Fill the HTTP response "Location" header and ignore
-                       // the rest of the page we're on.
-                       //
-                       // Some pages are not valid targets
-                       if ( $rt->isValidRedirectTarget() ) {
-                               return $rt->getFullURL();
-                       } else {
-                               return false;
-                       }
-               }
-
-               return $rt;
-       }
-
-       /**
-        * Get a list of users who have edited this article, not including the user who made
-        * the most recent revision, which you can get from $article->getUser() if you want it
-        * @return UserArrayFromResult
-        */
-       public function getContributors() {
-               // @todo FIXME: This is expensive; cache this info somewhere.
-
-               $dbr = wfGetDB( DB_SLAVE );
-
-               if ( $dbr->implicitGroupby() ) {
-                       $realNameField = 'user_real_name';
-               } else {
-                       $realNameField = 'MIN(user_real_name) AS user_real_name';
-               }
-
-               $tables = array( 'revision', 'user' );
-
-               $fields = array(
-                       'user_id' => 'rev_user',
-                       'user_name' => 'rev_user_text',
-                       $realNameField,
-                       'timestamp' => 'MAX(rev_timestamp)',
-               );
-
-               $conds = array( 'rev_page' => $this->getId() );
-
-               // The user who made the top revision gets credited as "this page was last edited by
-               // John, based on contributions by Tom, Dick and Harry", so don't include them twice.
-               $user = $this->getUser();
-               if ( $user ) {
-                       $conds[] = "rev_user != $user";
-               } else {
-                       $conds[] = "rev_user_text != {$dbr->addQuotes( $this->getUserText() )}";
-               }
-
-               $conds[] = "{$dbr->bitAnd( 'rev_deleted', Revision::DELETED_USER )} = 0"; // username hidden?
-
-               $jconds = array(
-                       'user' => array( 'LEFT JOIN', 'rev_user = user_id' ),
-               );
-
-               $options = array(
-                       'GROUP BY' => array( 'rev_user', 'rev_user_text' ),
-                       'ORDER BY' => 'timestamp DESC',
-               );
-
-               $res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options, $jconds );
-               return new UserArrayFromResult( $res );
-       }
-
-       /**
-        * Get the last N authors
-        * @param int $num Number of revisions to get
-        * @param int|string $revLatest The latest rev_id, selected from the master (optional)
-        * @return array Array of authors, duplicates not removed
-        */
-       public function getLastNAuthors( $num, $revLatest = 0 ) {
-               wfProfileIn( __METHOD__ );
-               // First try the slave
-               // If that doesn't have the latest revision, try the master
-               $continue = 2;
-               $db = wfGetDB( DB_SLAVE );
-
-               do {
-                       $res = $db->select( array( 'page', 'revision' ),
-                               array( 'rev_id', 'rev_user_text' ),
-                               array(
-                                       'page_namespace' => $this->mTitle->getNamespace(),
-                                       'page_title' => $this->mTitle->getDBkey(),
-                                       'rev_page = page_id'
-                               ), __METHOD__,
-                               array(
-                                       'ORDER BY' => 'rev_timestamp DESC',
-                                       'LIMIT' => $num
-                               )
-                       );
-
-                       if ( !$res ) {
-                               wfProfileOut( __METHOD__ );
-                               return array();
-                       }
-
-                       $row = $db->fetchObject( $res );
-
-                       if ( $continue == 2 && $revLatest && $row->rev_id != $revLatest ) {
-                               $db = wfGetDB( DB_MASTER );
-                               $continue--;
-                       } else {
-                               $continue = 0;
-                       }
-               } while ( $continue );
-
-               $authors = array( $row->rev_user_text );
-
-               foreach ( $res as $row ) {
-                       $authors[] = $row->rev_user_text;
-               }
-
-               wfProfileOut( __METHOD__ );
-               return $authors;
-       }
-
-       /**
-        * Should the parser cache be used?
-        *
-        * @param ParserOptions $parserOptions ParserOptions to check
-        * @param int $oldid
-        * @return bool
-        */
-       public function isParserCacheUsed( ParserOptions $parserOptions, $oldid ) {
-               global $wgEnableParserCache;
-
-               return $wgEnableParserCache
-                       && $parserOptions->getStubThreshold() == 0
-                       && $this->exists()
-                       && ( $oldid === null || $oldid === 0 || $oldid === $this->getLatest() )
-                       && $this->getContentHandler()->isParserCacheSupported();
-       }
-
-       /**
-        * Get a ParserOutput for the given ParserOptions and revision ID.
-        * The parser cache will be used if possible.
-        *
-        * @since 1.19
-        * @param ParserOptions $parserOptions ParserOptions to use for the parse operation
-        * @param null|int $oldid Revision ID to get the text from, passing null or 0 will
-        *   get the current revision (default value)
-        *
-        * @return ParserOutput|bool ParserOutput or false if the revision was not found
-        */
-       public function getParserOutput( ParserOptions $parserOptions, $oldid = null ) {
-               wfProfileIn( __METHOD__ );
-
-               $useParserCache = $this->isParserCacheUsed( $parserOptions, $oldid );
-               wfDebug( __METHOD__ . ': using parser cache: ' . ( $useParserCache ? 'yes' : 'no' ) . "\n" );
-               if ( $parserOptions->getStubThreshold() ) {
-                       wfIncrStats( 'pcache_miss_stub' );
-               }
-
-               if ( $useParserCache ) {
-                       $parserOutput = ParserCache::singleton()->get( $this, $parserOptions );
-                       if ( $parserOutput !== false ) {
-                               wfProfileOut( __METHOD__ );
-                               return $parserOutput;
-                       }
-               }
-
-               if ( $oldid === null || $oldid === 0 ) {
-                       $oldid = $this->getLatest();
-               }
-
-               $pool = new PoolWorkArticleView( $this, $parserOptions, $oldid, $useParserCache );
-               $pool->execute();
-
-               wfProfileOut( __METHOD__ );
-
-               return $pool->getParserOutput();
-       }
-
-       /**
-        * Do standard deferred updates after page view (existing or missing page)
-        * @param User $user The relevant user
-        * @param int $oldid The revision id being viewed. If not given or 0, latest revision is assumed.
-        */
-       public function doViewUpdates( User $user, $oldid = 0 ) {
-               global $wgDisableCounters;
-               if ( wfReadOnly() ) {
-                       return;
-               }
-
-               // Don't update page view counters on views from bot users (bug 14044)
-               if ( !$wgDisableCounters && !$user->isAllowed( 'bot' ) && $this->exists() ) {
-                       DeferredUpdates::addUpdate( new ViewCountUpdate( $this->getId() ) );
-                       DeferredUpdates::addUpdate( new SiteStatsUpdate( 1, 0, 0 ) );
-               }
-
-               // Update newtalk / watchlist notification status
-               $user->clearNotification( $this->mTitle, $oldid );
-       }
-
-       /**
-        * Perform the actions of a page purging
-        * @return bool
-        */
-       public function doPurge() {
-               global $wgUseSquid;
-
-               if ( !wfRunHooks( 'ArticlePurge', array( &$this ) ) ) {
-                       return false;
-               }
-
-               // Invalidate the cache
-               $this->mTitle->invalidateCache();
-
-               if ( $wgUseSquid ) {
-                       // Commit the transaction before the purge is sent
-                       $dbw = wfGetDB( DB_MASTER );
-                       $dbw->commit( __METHOD__ );
-
-                       // Send purge
-                       $update = SquidUpdate::newSimplePurge( $this->mTitle );
-                       $update->doUpdate();
-               }
-
-               if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
-                       // @todo move this logic to MessageCache
-
-                       if ( $this->exists() ) {
-                               // NOTE: use transclusion text for messages.
-                               //       This is consistent with  MessageCache::getMsgFromNamespace()
-
-                               $content = $this->getContent();
-                               $text = $content === null ? null : $content->getWikitextForTransclusion();
-
-                               if ( $text === null ) {
-                                       $text = false;
-                               }
-                       } else {
-                               $text = false;
-                       }
-
-                       MessageCache::singleton()->replace( $this->mTitle->getDBkey(), $text );
-               }
-               return true;
-       }
-
-       /**
-        * Insert a new empty page record for this article.
-        * This *must* be followed up by creating a revision
-        * and running $this->updateRevisionOn( ... );
-        * or else the record will be left in a funky state.
-        * Best if all done inside a transaction.
-        *
-        * @param DatabaseBase $dbw
-        * @return int The newly created page_id key, or false if the title already existed
-        */
-       public function insertOn( $dbw ) {
-               wfProfileIn( __METHOD__ );
-
-               $page_id = $dbw->nextSequenceValue( 'page_page_id_seq' );
-               $dbw->insert( 'page', array(
-                       'page_id'           => $page_id,
-                       'page_namespace'    => $this->mTitle->getNamespace(),
-                       'page_title'        => $this->mTitle->getDBkey(),
-                       'page_counter'      => 0,
-                       'page_restrictions' => '',
-                       'page_is_redirect'  => 0, // Will set this shortly...
-                       'page_is_new'       => 1,
-                       'page_random'       => wfRandom(),
-                       'page_touched'      => $dbw->timestamp(),
-                       'page_latest'       => 0, // Fill this in shortly...
-                       'page_len'          => 0, // Fill this in shortly...
-               ), __METHOD__, 'IGNORE' );
-
-               $affected = $dbw->affectedRows();
-
-               if ( $affected ) {
-                       $newid = $dbw->insertId();
-                       $this->mId = $newid;
-                       $this->mTitle->resetArticleID( $newid );
-               }
-               wfProfileOut( __METHOD__ );
-
-               return $affected ? $newid : false;
-       }
-
-       /**
-        * Update the page record to point to a newly saved revision.
-        *
-        * @param DatabaseBase $dbw
-        * @param Revision $revision For ID number, and text used to set
-        *   length and redirect status fields
-        * @param int $lastRevision If given, will not overwrite the page field
-        *   when different from the currently set value.
-        *   Giving 0 indicates the new page flag should be set on.
-        * @param bool $lastRevIsRedirect If given, will optimize adding and
-        *   removing rows in redirect table.
-        * @return bool true on success, false on failure
-        */
-       public function updateRevisionOn( $dbw, $revision, $lastRevision = null,
-               $lastRevIsRedirect = null
-       ) {
-               global $wgContentHandlerUseDB;
-
-               wfProfileIn( __METHOD__ );
-
-               $content = $revision->getContent();
-               $len = $content ? $content->getSize() : 0;
-               $rt = $content ? $content->getUltimateRedirectTarget() : null;
-
-               $conditions = array( 'page_id' => $this->getId() );
-
-               if ( !is_null( $lastRevision ) ) {
-                       // An extra check against threads stepping on each other
-                       $conditions['page_latest'] = $lastRevision;
-               }
-
-               $now = wfTimestampNow();
-               $row = array( /* SET */
-                       'page_latest'      => $revision->getId(),
-                       'page_touched'     => $dbw->timestamp( $now ),
-                       'page_is_new'      => ( $lastRevision === 0 ) ? 1 : 0,
-                       'page_is_redirect' => $rt !== null ? 1 : 0,
-                       'page_len'         => $len,
-               );
-
-               if ( $wgContentHandlerUseDB ) {
-                       $row['page_content_model'] = $revision->getContentModel();
-               }
-
-               $dbw->update( 'page',
-                       $row,
-                       $conditions,
-                       __METHOD__ );
-
-               $result = $dbw->affectedRows() > 0;
-               if ( $result ) {
-                       $this->updateRedirectOn( $dbw, $rt, $lastRevIsRedirect );
-                       $this->setLastEdit( $revision );
-                       $this->setCachedLastEditTime( $now );
-                       $this->mLatest = $revision->getId();
-                       $this->mIsRedirect = (bool)$rt;
-                       // Update the LinkCache.
-                       LinkCache::singleton()->addGoodLinkObj( $this->getId(), $this->mTitle, $len, $this->mIsRedirect,
-                                                                                                       $this->mLatest, $revision->getContentModel() );
-               }
-
-               wfProfileOut( __METHOD__ );
-               return $result;
-       }
-
-       /**
-        * Add row to the redirect table if this is a redirect, remove otherwise.
-        *
-        * @param DatabaseBase $dbw
-        * @param Title $redirectTitle Title object pointing to the redirect target,
-        *   or NULL if this is not a redirect
-        * @param null|bool $lastRevIsRedirect If given, will optimize adding and
-        *   removing rows in redirect table.
-        * @return bool true on success, false on failure
-        * @private
-        */
-       public function updateRedirectOn( $dbw, $redirectTitle, $lastRevIsRedirect = null ) {
-               // Always update redirects (target link might have changed)
-               // Update/Insert if we don't know if the last revision was a redirect or not
-               // Delete if changing from redirect to non-redirect
-               $isRedirect = !is_null( $redirectTitle );
-
-               if ( !$isRedirect && $lastRevIsRedirect === false ) {
-                       return true;
-               }
-
-               wfProfileIn( __METHOD__ );
-               if ( $isRedirect ) {
-                       $this->insertRedirectEntry( $redirectTitle );
-               } else {
-                       // This is not a redirect, remove row from redirect table
-                       $where = array( 'rd_from' => $this->getId() );
-                       $dbw->delete( 'redirect', $where, __METHOD__ );
-               }
-
-               if ( $this->getTitle()->getNamespace() == NS_FILE ) {
-                       RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect( $this->getTitle() );
-               }
-               wfProfileOut( __METHOD__ );
-
-               return ( $dbw->affectedRows() != 0 );
-       }
-
-       /**
-        * 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
-        */
-       public function updateIfNewerOn( $dbw, $revision ) {
-               wfProfileIn( __METHOD__ );
-
-               $row = $dbw->selectRow(
-                       array( 'revision', 'page' ),
-                       array( 'rev_id', 'rev_timestamp', 'page_is_redirect' ),
-                       array(
-                               'page_id' => $this->getId(),
-                               'page_latest=rev_id' ),
-                       __METHOD__ );
-
-               if ( $row ) {
-                       if ( wfTimestamp( TS_MW, $row->rev_timestamp ) >= $revision->getTimestamp() ) {
-                               wfProfileOut( __METHOD__ );
-                               return false;
-                       }
-                       $prev = $row->rev_id;
-                       $lastRevIsRedirect = (bool)$row->page_is_redirect;
-               } else {
-                       // No or missing previous revision; mark the page as new
-                       $prev = 0;
-                       $lastRevIsRedirect = null;
-               }
-
-               $ret = $this->updateRevisionOn( $dbw, $revision, $prev, $lastRevIsRedirect );
-
-               wfProfileOut( __METHOD__ );
-               return $ret;
-       }
-
-       /**
-        * Get the content that needs to be saved in order to undo all revisions
-        * between $undo and $undoafter. Revisions must belong to the same page,
-        * must exist and must not be deleted
-        * @param Revision $undo
-        * @param Revision $undoafter Must be an earlier revision than $undo
-        * @return mixed string on success, false on failure
-        * @since 1.21
-        * Before we had the Content object, this was done in getUndoText
-        */
-       public function getUndoContent( Revision $undo, Revision $undoafter = null ) {
-               $handler = $undo->getContentHandler();
-               return $handler->getUndoContent( $this->getRevision(), $undo, $undoafter );
-       }
-
-       /**
-        * Get the text that needs to be saved in order to undo all revisions
-        * between $undo and $undoafter. Revisions must belong to the same page,
-        * must exist and must not be deleted
-        * @param Revision $undo
-        * @param Revision $undoafter Must be an earlier revision than $undo
-        * @return string|bool string on success, false on failure
-        * @deprecated since 1.21: use ContentHandler::getUndoContent() instead.
-        */
-       public function getUndoText( Revision $undo, Revision $undoafter = null ) {
-               ContentHandler::deprecated( __METHOD__, '1.21' );
-
-               $this->loadLastEdit();
-
-               if ( $this->mLastRevision ) {
-                       if ( is_null( $undoafter ) ) {
-                               $undoafter = $undo->getPrevious();
-                       }
-
-                       $handler = $this->getContentHandler();
-                       $undone = $handler->getUndoContent( $this->mLastRevision, $undo, $undoafter );
-
-                       if ( !$undone ) {
-                               return false;
-                       } else {
-                               return ContentHandler::getContentText( $undone );
-                       }
-               }
-
-               return false;
-       }
-
-       /**
-        * @param string|number|null|bool $sectionId Section identifier as a number or string
-        * (e.g. 0, 1 or 'T-1'), null/false or an empty string for the whole page
-        * or 'new' for a new section.
-        * @param string $text New text of the section.
-        * @param string $sectionTitle New section's subject, only if $section is "new".
-        * @param string $edittime Revision timestamp or null to use the current revision.
-        *
-        * @throws MWException
-        * @return string New complete article text, or null if error.
-        *
-        * @deprecated since 1.21, use replaceSectionAtRev() instead
-        */
-       public function replaceSection( $sectionId, $text, $sectionTitle = '',
-               $edittime = null
-       ) {
-               ContentHandler::deprecated( __METHOD__, '1.21' );
-
-               //NOTE: keep condition in sync with condition in replaceSectionContent!
-               if ( strval( $sectionId ) === '' ) {
-                       // Whole-page edit; let the whole text through
-                       return $text;
-               }
-
-               if ( !$this->supportsSections() ) {
-                       throw new MWException( "sections not supported for content model " .
-                               $this->getContentHandler()->getModelID() );
-               }
-
-               // could even make section title, but that's not required.
-               $sectionContent = ContentHandler::makeContent( $text, $this->getTitle() );
-
-               $newContent = $this->replaceSectionContent( $sectionId, $sectionContent, $sectionTitle,
-                       $edittime );
-
-               return ContentHandler::getContentText( $newContent );
-       }
-
-       /**
-        * Returns true if this page's content model supports sections.
-        *
-        * @return bool
-        *
-        * @todo The skin should check this and not offer section functionality if
-        *   sections are not supported.
-        * @todo The EditPage should check this and not offer section functionality
-        *   if sections are not supported.
-        */
-       public function supportsSections() {
-               return $this->getContentHandler()->supportsSections();
-       }
-
-       /**
-        * @param string|number|null|bool $sectionId Section identifier as a number or string
-        * (e.g. 0, 1 or 'T-1'), null/false or an empty string for the whole page
-        * or 'new' for a new section.
-        * @param Content $sectionContent New content of the section.
-        * @param string $sectionTitle New section's subject, only if $section is "new".
-        * @param string $edittime Revision timestamp or null to use the current revision.
-        *
-        * @throws MWException
-        * @return Content New complete article content, or null if error.
-        *
-        * @since 1.21
-        * @deprecated since 1.24, use replaceSectionAtRev instead
-        */
-       public function replaceSectionContent( $sectionId, Content $sectionContent, $sectionTitle = '',
-               $edittime = null ) {
-               wfProfileIn( __METHOD__ );
-
-               $baseRevId = null;
-               if ( $edittime && $sectionId !== 'new' ) {
-                       $dbw = wfGetDB( DB_MASTER );
-                       $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
-                       if ( $rev ) {
-                               $baseRevId = $rev->getId();
-                       }
-               }
-
-               wfProfileOut( __METHOD__ );
-               return $this->replaceSectionAtRev( $sectionId, $sectionContent, $sectionTitle, $baseRevId );
-       }
-
-       /**
-        * @param string|number|null|bool $sectionId Section identifier as a number or string
-        * (e.g. 0, 1 or 'T-1'), null/false or an empty string for the whole page
-        * or 'new' for a new section.
-        * @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( $sectionId, Content $sectionContent,
-               $sectionTitle = '', $baseRevId = null
-       ) {
-               wfProfileIn( __METHOD__ );
-
-               if ( strval( $sectionId ) === '' ) {
-                       // Whole-page edit; let the whole text through
-                       $newContent = $sectionContent;
-               } else {
-                       if ( !$this->supportsSections() ) {
-                               wfProfileOut( __METHOD__ );
-                               throw new MWException( "sections not supported for content model " .
-                                       $this->getContentHandler()->getModelID() );
-                       }
-
-                       // Bug 30711: always use current version when adding a new section
-                       if ( is_null( $baseRevId ) || $sectionId === 'new' ) {
-                               $oldContent = $this->getContent();
-                       } else {
-                               // TODO: try DB_SLAVE first
-                               $dbw = wfGetDB( DB_MASTER );
-                               $rev = Revision::loadFromId( $dbw, $baseRevId );
-
-                               if ( !$rev ) {
-                                       wfDebug( __METHOD__ . " asked for bogus section (page: " .
-                                               $this->getId() . "; section: $sectionId)\n" );
-                                       wfProfileOut( __METHOD__ );
-                                       return null;
-                               }
-
-                               $oldContent = $rev->getContent();
-                       }
-
-                       if ( ! $oldContent ) {
-                               wfDebug( __METHOD__ . ": no page text\n" );
-                               wfProfileOut( __METHOD__ );
-                               return null;
-                       }
-
-                       $newContent = $oldContent->replaceSection( $sectionId, $sectionContent, $sectionTitle );
-               }
-
-               wfProfileOut( __METHOD__ );
-               return $newContent;
-       }
-
-       /**
-        * Check flags and add EDIT_NEW or EDIT_UPDATE to them as needed.
-        * @param int $flags
-        * @return int Updated $flags
-        */
-       public function checkFlags( $flags ) {
-               if ( !( $flags & EDIT_NEW ) && !( $flags & EDIT_UPDATE ) ) {
-                       if ( $this->exists() ) {
-                               $flags |= EDIT_UPDATE;
-                       } else {
-                               $flags |= EDIT_NEW;
-                       }
-               }
-
-               return $flags;
-       }
-
-       /**
-        * Change an existing article or create a new article. Updates RC and all necessary caches,
-        * optionally via the deferred update array.
-        *
-        * @param string $text New text
-        * @param string $summary Edit summary
-        * @param int $flags Bitfield:
-        *      EDIT_NEW
-        *          Article is known or assumed to be non-existent, create a new one
-        *      EDIT_UPDATE
-        *          Article is known or assumed to be pre-existing, update it
-        *      EDIT_MINOR
-        *          Mark this edit minor, if the user is allowed to do so
-        *      EDIT_SUPPRESS_RC
-        *          Do not log the change in recentchanges
-        *      EDIT_FORCE_BOT
-        *          Mark the edit a "bot" edit regardless of user rights
-        *      EDIT_DEFER_UPDATES
-        *          Defer some of the updates until the end of index.php
-        *      EDIT_AUTOSUMMARY
-        *          Fill in blank summaries with generated text where possible
-        *
-        * If neither EDIT_NEW nor EDIT_UPDATE is specified, the status of the
-        * article will be detected. If EDIT_UPDATE is specified and the article
-        * doesn't exist, the function will return an edit-gone-missing error. If
-        * EDIT_NEW is specified and the article does exist, an edit-already-exists
-        * error will be returned. These two conditions are also possible with
-        * auto-detection due to MediaWiki's performance-optimised locking strategy.
-        *
-        * @param bool|int $baseRevId The revision ID this edit was based off, if any
-        * @param User $user The user doing the edit
-        *
-        * @throws MWException
-        * @return Status object. Possible errors:
-        *   edit-hook-aborted: The ArticleSave hook aborted the edit but didn't
-        *     set the fatal flag of $status
-        *   edit-gone-missing: In update mode, but the article didn't exist.
-        *   edit-conflict: In update mode, the article changed unexpectedly.
-        *   edit-no-change: Warning that the text was the same as before.
-        *   edit-already-exists: In creation mode, but the article already exists.
-        *
-        * Extensions may define additional errors.
-        *
-        * $return->value will contain an associative array with members as follows:
-        *     new: Boolean indicating if the function attempted to create a new article.
-        *     revision: The revision object for the inserted revision, or null.
-        *
-        * Compatibility note: this function previously returned a boolean value
-        * indicating success/failure
-        *
-        * @deprecated since 1.21: use doEditContent() instead.
-        */
-       public function doEdit( $text, $summary, $flags = 0, $baseRevId = false, $user = null ) {
-               ContentHandler::deprecated( __METHOD__, '1.21' );
-
-               $content = ContentHandler::makeContent( $text, $this->getTitle() );
-
-               return $this->doEditContent( $content, $summary, $flags, $baseRevId, $user );
-       }
-
-       /**
-        * Change an existing article or create a new article. Updates RC and all necessary caches,
-        * optionally via the deferred update array.
-        *
-        * @param Content $content New content
-        * @param string $summary Edit summary
-        * @param int $flags Bitfield:
-        *      EDIT_NEW
-        *          Article is known or assumed to be non-existent, create a new one
-        *      EDIT_UPDATE
-        *          Article is known or assumed to be pre-existing, update it
-        *      EDIT_MINOR
-        *          Mark this edit minor, if the user is allowed to do so
-        *      EDIT_SUPPRESS_RC
-        *          Do not log the change in recentchanges
-        *      EDIT_FORCE_BOT
-        *          Mark the edit a "bot" edit regardless of user rights
-        *      EDIT_DEFER_UPDATES
-        *          Defer some of the updates until the end of index.php
-        *      EDIT_AUTOSUMMARY
-        *          Fill in blank summaries with generated text where possible
-        *
-        * If neither EDIT_NEW nor EDIT_UPDATE is specified, the status of the
-        * article will be detected. If EDIT_UPDATE is specified and the article
-        * doesn't exist, the function will return an edit-gone-missing error. If
-        * EDIT_NEW is specified and the article does exist, an edit-already-exists
-        * error will be returned. These two conditions are also possible with
-        * auto-detection due to MediaWiki's performance-optimised locking strategy.
-        *
-        * @param bool|int $baseRevId The revision ID this edit was based off, if any
-        * @param User $user The user doing the edit
-        * @param string $serialisation_format Format for storing the content in the
-        *   database.
-        *
-        * @throws MWException
-        * @return Status object. Possible errors:
-        *     edit-hook-aborted: The ArticleSave hook aborted the edit but didn't
-        *       set the fatal flag of $status.
-        *     edit-gone-missing: In update mode, but the article didn't exist.
-        *     edit-conflict: In update mode, the article changed unexpectedly.
-        *     edit-no-change: Warning that the text was the same as before.
-        *     edit-already-exists: In creation mode, but the article already exists.
-        *
-        *  Extensions may define additional errors.
-        *
-        *  $return->value will contain an associative array with members as follows:
-        *     new: Boolean indicating if the function attempted to create a new article.
-        *     revision: The revision object for the inserted revision, or null.
-        *
-        * @since 1.21
-        */
-       public function doEditContent( Content $content, $summary, $flags = 0, $baseRevId = false,
-               User $user = null, $serialisation_format = null
-       ) {
-               global $wgUser, $wgUseAutomaticEditSummaries, $wgUseRCPatrol, $wgUseNPPatrol;
-
-               // Low-level sanity check
-               if ( $this->mTitle->getText() === '' ) {
-                       throw new MWException( 'Something is trying to edit an article with an empty title' );
-               }
-
-               wfProfileIn( __METHOD__ );
-
-               if ( !$content->getContentHandler()->canBeUsedOn( $this->getTitle() ) ) {
-                       wfProfileOut( __METHOD__ );
-                       return Status::newFatal( 'content-not-allowed-here',
-                               ContentHandler::getLocalizedName( $content->getModel() ),
-                               $this->getTitle()->getPrefixedText() );
-               }
-
-               $user = is_null( $user ) ? $wgUser : $user;
-               $status = Status::newGood( array() );
-
-               // Load the data from the master database if needed.
-               // The caller may already loaded it from the master or even loaded it using
-               // SELECT FOR UPDATE, so do not override that using clear().
-               $this->loadPageData( 'fromdbmaster' );
-
-               $flags = $this->checkFlags( $flags );
-
-               // handle hook
-               $hook_args = array( &$this, &$user, &$content, &$summary,
-                                                       $flags & EDIT_MINOR, null, null, &$flags, &$status );
-
-               if ( !wfRunHooks( 'PageContentSave', $hook_args )
-                       || !ContentHandler::runLegacyHooks( 'ArticleSave', $hook_args ) ) {
-
-                       wfDebug( __METHOD__ . ": ArticleSave or ArticleSaveContent hook aborted save!\n" );
-
-                       if ( $status->isOK() ) {
-                               $status->fatal( 'edit-hook-aborted' );
-                       }
-
-                       wfProfileOut( __METHOD__ );
-                       return $status;
-               }
-
-               // Silently ignore EDIT_MINOR if not allowed
-               $isminor = ( $flags & EDIT_MINOR ) && $user->isAllowed( 'minoredit' );
-               $bot = $flags & EDIT_FORCE_BOT;
-
-               $old_content = $this->getContent( Revision::RAW ); // current revision's content
-
-               $oldsize = $old_content ? $old_content->getSize() : 0;
-               $oldid = $this->getLatest();
-               $oldIsRedirect = $this->isRedirect();
-               $oldcountable = $this->isCountable();
-
-               $handler = $content->getContentHandler();
-
-               // Provide autosummaries if one is not provided and autosummaries are enabled.
-               if ( $wgUseAutomaticEditSummaries && $flags & EDIT_AUTOSUMMARY && $summary == '' ) {
-                       if ( !$old_content ) {
-                               $old_content = null;
-                       }
-                       $summary = $handler->getAutosummary( $old_content, $content, $flags );
-               }
-
-               $editInfo = $this->prepareContentForEdit( $content, null, $user, $serialisation_format );
-               $serialized = $editInfo->pst;
-
-               /**
-                * @var Content $content
-                */
-               $content = $editInfo->pstContent;
-               $newsize = $content->getSize();
-
-               $dbw = wfGetDB( DB_MASTER );
-               $now = wfTimestampNow();
-               $this->mTimestamp = $now;
-
-               if ( $flags & EDIT_UPDATE ) {
-                       // Update article, but only if changed.
-                       $status->value['new'] = false;
-
-                       if ( !$oldid ) {
-                               // Article gone missing
-                               wfDebug( __METHOD__ . ": EDIT_UPDATE specified but article doesn't exist\n" );
-                               $status->fatal( 'edit-gone-missing' );
-
-                               wfProfileOut( __METHOD__ );
-                               return $status;
-                       } elseif ( !$old_content ) {
-                               // Sanity check for bug 37225
-                               wfProfileOut( __METHOD__ );
-                               throw new MWException( "Could not find text for current revision {$oldid}." );
-                       }
-
-                       $revision = new Revision( array(
-                               'page'       => $this->getId(),
-                               'title'      => $this->getTitle(), // for determining the default content model
-                               'comment'    => $summary,
-                               'minor_edit' => $isminor,
-                               'text'       => $serialized,
-                               'len'        => $newsize,
-                               'parent_id'  => $oldid,
-                               'user'       => $user->getId(),
-                               'user_text'  => $user->getName(),
-                               'timestamp'  => $now,
-                               'content_model' => $content->getModel(),
-                               'content_format' => $serialisation_format,
-                       ) ); // XXX: pass content object?!
-
-                       $changed = !$content->equals( $old_content );
-
-                       if ( $changed ) {
-                               if ( !$content->isValid() ) {
-                                       wfProfileOut( __METHOD__ );
-                                       throw new MWException( "New content failed validity check!" );
-                               }
-
-                               $dbw->begin( __METHOD__ );
-                               try {
-
-                                       $prepStatus = $content->prepareSave( $this, $flags, $baseRevId, $user );
-                                       $status->merge( $prepStatus );
-
-                                       if ( !$status->isOK() ) {
-                                               $dbw->rollback( __METHOD__ );
-
-                                               wfProfileOut( __METHOD__ );
-                                               return $status;
-                                       }
-                                       $revisionId = $revision->insertOn( $dbw );
-
-                                       // Update page
-                                       //
-                                       // We check for conflicts by comparing $oldid with the current latest revision ID.
-                                       $ok = $this->updateRevisionOn( $dbw, $revision, $oldid, $oldIsRedirect );
-
-                                       if ( !$ok ) {
-                                               // Belated edit conflict! Run away!!
-                                               $status->fatal( 'edit-conflict' );
-
-                                               $dbw->rollback( __METHOD__ );
-
-                                               wfProfileOut( __METHOD__ );
-                                               return $status;
-                                       }
-
-                                       wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, $baseRevId, $user ) );
-                                       // Update recentchanges
-                                       if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
-                                               // Mark as patrolled if the user can do so
-                                               $patrolled = $wgUseRCPatrol && !count(
-                                               $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
-                                               // Add RC row to the DB
-                                               $rc = RecentChange::notifyEdit( $now, $this->mTitle, $isminor, $user, $summary,
-                                                       $oldid, $this->getTimestamp(), $bot, '', $oldsize, $newsize,
-                                                       $revisionId, $patrolled
-                                               );
-
-                                               // Log auto-patrolled edits
-                                               if ( $patrolled ) {
-                                                       PatrolLog::record( $rc, true, $user );
-                                               }
-                                       }
-                                       $user->incEditCount();
-                               } catch ( MWException $e ) {
-                                       $dbw->rollback( __METHOD__ );
-                                       // Question: Would it perhaps be better if this method turned all
-                                       // exceptions into $status's?
-                                       throw $e;
-                               }
-                               $dbw->commit( __METHOD__ );
-                       } else {
-                               // Bug 32948: revision ID must be set to page {{REVISIONID}} and
-                               // related variables correctly
-                               $revision->setId( $this->getLatest() );
-                       }
-
-                       // Update links tables, site stats, etc.
-                       $this->doEditUpdates(
-                               $revision,
-                               $user,
-                               array(
-                                       'changed' => $changed,
-                                       'oldcountable' => $oldcountable
-                               )
-                       );
-
-                       if ( !$changed ) {
-                               $status->warning( 'edit-no-change' );
-                               $revision = null;
-                               // Update page_touched, this is usually implicit in the page update
-                               // Other cache updates are done in onArticleEdit()
-                               $this->mTitle->invalidateCache();
-                       }
-               } else {
-                       // Create new article
-                       $status->value['new'] = true;
-
-                       $dbw->begin( __METHOD__ );
-                       try {
-
-                               $prepStatus = $content->prepareSave( $this, $flags, $baseRevId, $user );
-                               $status->merge( $prepStatus );
-
-                               if ( !$status->isOK() ) {
-                                       $dbw->rollback( __METHOD__ );
-
-                                       wfProfileOut( __METHOD__ );
-                                       return $status;
-                               }
-
-                               $status->merge( $prepStatus );
-
-                               // Add the page record; stake our claim on this title!
-                               // This will return false if the article already exists
-                               $newid = $this->insertOn( $dbw );
-
-                               if ( $newid === false ) {
-                                       $dbw->rollback( __METHOD__ );
-                                       $status->fatal( 'edit-already-exists' );
-
-                                       wfProfileOut( __METHOD__ );
-                                       return $status;
-                               }
-
-                               // Save the revision text...
-                               $revision = new Revision( array(
-                                       'page'       => $newid,
-                                       'title'      => $this->getTitle(), // for determining the default content model
-                                       'comment'    => $summary,
-                                       'minor_edit' => $isminor,
-                                       'text'       => $serialized,
-                                       'len'        => $newsize,
-                                       'user'       => $user->getId(),
-                                       'user_text'  => $user->getName(),
-                                       'timestamp'  => $now,
-                                       'content_model' => $content->getModel(),
-                                       'content_format' => $serialisation_format,
-                               ) );
-                               $revisionId = $revision->insertOn( $dbw );
-
-                               // Bug 37225: use accessor to get the text as Revision may trim it
-                               $content = $revision->getContent(); // sanity; get normalized version
-
-                               if ( $content ) {
-                                       $newsize = $content->getSize();
-                               }
-
-                               // Update the page record with revision data
-                               $this->updateRevisionOn( $dbw, $revision, 0 );
-
-                               wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) );
-
-                               // Update recentchanges
-                               if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
-                                       // Mark as patrolled if the user can do so
-                                       $patrolled = ( $wgUseRCPatrol || $wgUseNPPatrol ) && !count(
-                                               $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
-                                       // Add RC row to the DB
-                                       $rc = RecentChange::notifyNew( $now, $this->mTitle, $isminor, $user, $summary, $bot,
-                                               '', $newsize, $revisionId, $patrolled );
-
-                                       // Log auto-patrolled edits
-                                       if ( $patrolled ) {
-                                               PatrolLog::record( $rc, true, $user );
-                                       }
-                               }
-                               $user->incEditCount();
-
-                       } catch ( MWException $e ) {
-                               $dbw->rollback( __METHOD__ );
-                               throw $e;
-                       }
-                       $dbw->commit( __METHOD__ );
-
-                       // Update links, etc.
-                       $this->doEditUpdates( $revision, $user, array( 'created' => true ) );
-
-                       $hook_args = array( &$this, &$user, $content, $summary,
-                                                               $flags & EDIT_MINOR, null, null, &$flags, $revision );
-
-                       ContentHandler::runLegacyHooks( 'ArticleInsertComplete', $hook_args );
-                       wfRunHooks( 'PageContentInsertComplete', $hook_args );
-               }
-
-               // Do updates right now unless deferral was requested
-               if ( !( $flags & EDIT_DEFER_UPDATES ) ) {
-                       DeferredUpdates::doUpdates();
-               }
-
-               // Return the new revision (or null) to the caller
-               $status->value['revision'] = $revision;
-
-               $hook_args = array( &$this, &$user, $content, $summary,
-                                                       $flags & EDIT_MINOR, null, null, &$flags, $revision, &$status, $baseRevId );
-
-               ContentHandler::runLegacyHooks( 'ArticleSaveComplete', $hook_args );
-               wfRunHooks( 'PageContentSaveComplete', $hook_args );
-
-               // Promote user to any groups they meet the criteria for
-               $user->addAutopromoteOnceGroups( 'onEdit' );
-
-               wfProfileOut( __METHOD__ );
-               return $status;
-       }
-
-       /**
-        * Get parser options suitable for rendering the primary article wikitext
-        *
-        * @see ContentHandler::makeParserOptions
-        *
-        * @param IContextSource|User|string $context One of the following:
-        *        - IContextSource: Use the User and the Language of the provided
-        *          context
-        *        - User: Use the provided User object and $wgLang for the language,
-        *          so use an IContextSource object if possible.
-        *        - 'canonical': Canonical options (anonymous user with default
-        *          preferences and content language).
-        * @return ParserOptions
-        */
-       public function makeParserOptions( $context ) {
-               $options = $this->getContentHandler()->makeParserOptions( $context );
-
-               if ( $this->getTitle()->isConversionTable() ) {
-                       // @todo ConversionTable should become a separate content model, so
-                       // we don't need special cases like this one.
-                       $options->disableContentConversion();
-               }
-
-               return $options;
-       }
-
-       /**
-        * Prepare text which is about to be saved.
-        * Returns a stdclass with source, pst and output members
-        *
-        * @deprecated since 1.21: use prepareContentForEdit instead.
-        * @return object
-        */
-       public function prepareTextForEdit( $text, $revid = null, User $user = null ) {
-               ContentHandler::deprecated( __METHOD__, '1.21' );
-               $content = ContentHandler::makeContent( $text, $this->getTitle() );
-               return $this->prepareContentForEdit( $content, $revid, $user );
-       }
-
-       /**
-        * Prepare content which is about to be saved.
-        * Returns a stdclass with source, pst and output members
-        *
-        * @param Content $content
-        * @param int|null $revid
-        * @param User|null $user
-        * @param string|null $serialization_format
-        *
-        * @return bool|object
-        *
-        * @since 1.21
-        */
-       public function prepareContentForEdit( Content $content, $revid = null, User $user = null,
-               $serialization_format = null
-       ) {
-               global $wgContLang, $wgUser;
-               $user = is_null( $user ) ? $wgUser : $user;
-               //XXX: check $user->getId() here???
-
-               // Use a sane default for $serialization_format, see bug 57026
-               if ( $serialization_format === null ) {
-                       $serialization_format = $content->getContentHandler()->getDefaultFormat();
-               }
-
-               if ( $this->mPreparedEdit
-                       && $this->mPreparedEdit->newContent
-                       && $this->mPreparedEdit->newContent->equals( $content )
-                       && $this->mPreparedEdit->revid == $revid
-                       && $this->mPreparedEdit->format == $serialization_format
-                       // XXX: also check $user here?
-               ) {
-                       // Already prepared
-                       return $this->mPreparedEdit;
-               }
-
-               $popts = ParserOptions::newFromUserAndLang( $user, $wgContLang );
-               wfRunHooks( 'ArticlePrepareTextForEdit', array( $this, $popts ) );
-
-               $edit = (object)array();
-               $edit->revid = $revid;
-               $edit->timestamp = wfTimestampNow();
-
-               $edit->pstContent = $content ? $content->preSaveTransform( $this->mTitle, $user, $popts ) : null;
-
-               $edit->format = $serialization_format;
-               $edit->popts = $this->makeParserOptions( 'canonical' );
-               $edit->output = $edit->pstContent
-                       ? $edit->pstContent->getParserOutput( $this->mTitle, $revid, $edit->popts )
-                       : null;
-
-               $edit->newContent = $content;
-               $edit->oldContent = $this->getContent( Revision::RAW );
-
-               // NOTE: B/C for hooks! don't use these fields!
-               $edit->newText = $edit->newContent ? ContentHandler::getContentText( $edit->newContent ) : '';
-               $edit->oldText = $edit->oldContent ? ContentHandler::getContentText( $edit->oldContent ) : '';
-               $edit->pst = $edit->pstContent ? $edit->pstContent->serialize( $serialization_format ) : '';
-
-               $this->mPreparedEdit = $edit;
-               return $edit;
-       }
-
-       /**
-        * Do standard deferred updates after page edit.
-        * Update links tables, site stats, search index and message cache.
-        * Purges pages that include this page if the text was changed here.
-        * Every 100th edit, prune the recent changes table.
-        *
-        * @param Revision $revision
-        * @param User $user User object that did the revision
-        * @param array $options Array of options, following indexes are used:
-        * - changed: boolean, whether the revision changed the content (default true)
-        * - created: boolean, whether the revision created the page (default false)
-        * - oldcountable: boolean or null (default null):
-        *   - boolean: whether the page was counted as an article before that
-        *     revision, only used in changed is true and created is false
-        *   - null: don't change the article count
-        */
-       public function doEditUpdates( Revision $revision, User $user, array $options = array() ) {
-               global $wgEnableParserCache;
-
-               wfProfileIn( __METHOD__ );
-
-               $options += array( 'changed' => true, 'created' => false, 'oldcountable' => null );
-               $content = $revision->getContent();
-
-               // Parse the text
-               // Be careful not to do pre-save transform twice: $text is usually
-               // already pre-save transformed once.
-               if ( !$this->mPreparedEdit || $this->mPreparedEdit->output->getFlag( 'vary-revision' ) ) {
-                       wfDebug( __METHOD__ . ": No prepared edit or vary-revision is set...\n" );
-                       $editInfo = $this->prepareContentForEdit( $content, $revision->getId(), $user );
-               } else {
-                       wfDebug( __METHOD__ . ": No vary-revision, using prepared edit...\n" );
-                       $editInfo = $this->mPreparedEdit;
-               }
-
-               // Save it to the parser cache
-               if ( $wgEnableParserCache ) {
-                       $parserCache = ParserCache::singleton();
-                       $parserCache->save(
-                               $editInfo->output, $this, $editInfo->popts, $editInfo->timestamp, $editInfo->revid
-                       );
-               }
-
-               // Update the links tables and other secondary data
-               if ( $content ) {
-                       $recursive = $options['changed']; // bug 50785
-                       $updates = $content->getSecondaryDataUpdates(
-                               $this->getTitle(), null, $recursive, $editInfo->output );
-                       DataUpdate::runUpdates( $updates );
-               }
-
-               wfRunHooks( 'ArticleEditUpdates', array( &$this, &$editInfo, $options['changed'] ) );
-
-               if ( wfRunHooks( 'ArticleEditUpdatesDeleteFromRecentchanges', array( &$this ) ) ) {
-                       if ( 0 == mt_rand( 0, 99 ) ) {
-                               // Flush old entries from the `recentchanges` table; we do this on
-                               // random requests so as to avoid an increase in writes for no good reason
-                               RecentChange::purgeExpiredChanges();
-                       }
-               }
-
-               if ( !$this->exists() ) {
-                       wfProfileOut( __METHOD__ );
-                       return;
-               }
-
-               $id = $this->getId();
-               $title = $this->mTitle->getPrefixedDBkey();
-               $shortTitle = $this->mTitle->getDBkey();
-
-               if ( !$options['changed'] ) {
-                       $good = 0;
-               } elseif ( $options['created'] ) {
-                       $good = (int)$this->isCountable( $editInfo );
-               } elseif ( $options['oldcountable'] !== null ) {
-                       $good = (int)$this->isCountable( $editInfo ) - (int)$options['oldcountable'];
-               } else {
-                       $good = 0;
-               }
-               $edits = $options['changed'] ? 1 : 0;
-               $total = $options['created'] ? 1 : 0;
-
-               DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, $edits, $good, $total ) );
-               DeferredUpdates::addUpdate( new SearchUpdate( $id, $title, $content ) );
-
-               // If this is another user's talk page, update newtalk.
-               // Don't do this if $options['changed'] = false (null-edits) nor if
-               // it's a minor edit and the user doesn't want notifications for those.
-               if ( $options['changed']
-                       && $this->mTitle->getNamespace() == NS_USER_TALK
-                       && $shortTitle != $user->getTitleKey()
-                       && !( $revision->isMinor() && $user->isAllowed( 'nominornewtalk' ) )
-               ) {
-                       $recipient = User::newFromName( $shortTitle, false );
-                       if ( !$recipient ) {
-                               wfDebug( __METHOD__ . ": invalid username\n" );
-                       } else {
-                               // Allow extensions to prevent user notification when a new message is added to their talk page
-                               if ( wfRunHooks( 'ArticleEditUpdateNewTalk', array( &$this, $recipient ) ) ) {
-                                       if ( User::isIP( $shortTitle ) ) {
-                                               // An anonymous user
-                                               $recipient->setNewtalk( true, $revision );
-                                       } elseif ( $recipient->isLoggedIn() ) {
-                                               $recipient->setNewtalk( true, $revision );
-                                       } else {
-                                               wfDebug( __METHOD__ . ": don't need to notify a nonexistent user\n" );
-                                       }
-                               }
-                       }
-               }
-
-               if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
-                       // XXX: could skip pseudo-messages like js/css here, based on content model.
-                       $msgtext = $content ? $content->getWikitextForTransclusion() : null;
-                       if ( $msgtext === false || $msgtext === null ) {
-                               $msgtext = '';
-                       }
-
-                       MessageCache::singleton()->replace( $shortTitle, $msgtext );
-               }
-
-               if ( $options['created'] ) {
-                       self::onArticleCreate( $this->mTitle );
-               } elseif ( $options['changed'] ) { // bug 50785
-                       self::onArticleEdit( $this->mTitle );
-               }
-
-               wfProfileOut( __METHOD__ );
-       }
-
-       /**
-        * Edit an article without doing all that other stuff
-        * The article must already exist; link tables etc
-        * are not updated, caches are not flushed.
-        *
-        * @param string $text Text submitted
-        * @param User $user The relevant user
-        * @param string $comment Comment submitted
-        * @param bool $minor Whereas it's a minor modification
-        *
-        * @deprecated since 1.21, use doEditContent() instead.
-        */
-       public function doQuickEdit( $text, User $user, $comment = '', $minor = 0 ) {
-               ContentHandler::deprecated( __METHOD__, "1.21" );
-
-               $content = ContentHandler::makeContent( $text, $this->getTitle() );
-               $this->doQuickEditContent( $content, $user, $comment, $minor );
-       }
-
-       /**
-        * Edit an article without doing all that other stuff
-        * The article must already exist; link tables etc
-        * are not updated, caches are not flushed.
-        *
-        * @param Content $content Content submitted
-        * @param User $user The relevant user
-        * @param string $comment comment submitted
-        * @param string $serialisation_format Format for storing the content in the database
-        * @param bool $minor Whereas it's a minor modification
-        */
-       public function doQuickEditContent( Content $content, User $user, $comment = '', $minor = false,
-               $serialisation_format = null
-       ) {
-               wfProfileIn( __METHOD__ );
-
-               $serialized = $content->serialize( $serialisation_format );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $revision = new Revision( array(
-                       'title'      => $this->getTitle(), // for determining the default content model
-                       'page'       => $this->getId(),
-                       'user_text'  => $user->getName(),
-                       'user'       => $user->getId(),
-                       'text'       => $serialized,
-                       'length'     => $content->getSize(),
-                       'comment'    => $comment,
-                       'minor_edit' => $minor ? 1 : 0,
-               ) ); // XXX: set the content object?
-               $revision->insertOn( $dbw );
-               $this->updateRevisionOn( $dbw, $revision );
-
-               wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) );
-
-               wfProfileOut( __METHOD__ );
-       }
-
-       /**
-        * Update the article's restriction field, and leave a log entry.
-        * This works for protection both existing and non-existing pages.
-        *
-        * @param array $limit Set of restriction keys
-        * @param array $expiry Per restriction type expiration
-        * @param int &$cascade Set to false if cascading protection isn't allowed.
-        * @param string $reason
-        * @param User $user The user updating the restrictions
-        * @return Status
-        */
-       public function doUpdateRestrictions( array $limit, array $expiry,
-               &$cascade, $reason, User $user
-       ) {
-               global $wgCascadingRestrictionLevels, $wgContLang;
-
-               if ( wfReadOnly() ) {
-                       return Status::newFatal( 'readonlytext', wfReadOnlyReason() );
-               }
-
-               $this->loadPageData( 'fromdbmaster' );
-               $restrictionTypes = $this->mTitle->getRestrictionTypes();
-               $id = $this->getId();
-
-               if ( !$cascade ) {
-                       $cascade = false;
-               }
-
-               // Take this opportunity to purge out expired restrictions
-               Title::purgeExpiredRestrictions();
-
-               // @todo FIXME: Same limitations as described in ProtectionForm.php (line 37);
-               // we expect a single selection, but the schema allows otherwise.
-               $isProtected = false;
-               $protect = false;
-               $changed = false;
-
-               $dbw = wfGetDB( DB_MASTER );
-
-               foreach ( $restrictionTypes as $action ) {
-                       if ( !isset( $expiry[$action] ) ) {
-                               $expiry[$action] = $dbw->getInfinity();
-                       }
-                       if ( !isset( $limit[$action] ) ) {
-                               $limit[$action] = '';
-                       } elseif ( $limit[$action] != '' ) {
-                               $protect = true;
-                       }
-
-                       // Get current restrictions on $action
-                       $current = implode( '', $this->mTitle->getRestrictions( $action ) );
-                       if ( $current != '' ) {
-                               $isProtected = true;
-                       }
-
-                       if ( $limit[$action] != $current ) {
-                               $changed = true;
-                       } elseif ( $limit[$action] != '' ) {
-                               // Only check expiry change if the action is actually being
-                               // protected, since expiry does nothing on an not-protected
-                               // action.
-                               if ( $this->mTitle->getRestrictionExpiry( $action ) != $expiry[$action] ) {
-                                       $changed = true;
-                               }
-                       }
-               }
-
-               if ( !$changed && $protect && $this->mTitle->areRestrictionsCascading() != $cascade ) {
-                       $changed = true;
-               }
-
-               // If nothing has changed, do nothing
-               if ( !$changed ) {
-                       return Status::newGood();
-               }
-
-               if ( !$protect ) { // No protection at all means unprotection
-                       $revCommentMsg = 'unprotectedarticle';
-                       $logAction = 'unprotect';
-               } elseif ( $isProtected ) {
-                       $revCommentMsg = 'modifiedarticleprotection';
-                       $logAction = 'modify';
-               } else {
-                       $revCommentMsg = 'protectedarticle';
-                       $logAction = 'protect';
-               }
-
-               // Truncate for whole multibyte characters
-               $reason = $wgContLang->truncate( $reason, 255 );
-
-               $logRelationsValues = array();
-               $logRelationsField = null;
-
-               if ( $id ) { // Protection of existing page
-                       if ( !wfRunHooks( 'ArticleProtect', array( &$this, &$user, $limit, $reason ) ) ) {
-                               return Status::newGood();
-                       }
-
-                       // Only certain restrictions can cascade...
-                       $editrestriction = isset( $limit['edit'] )
-                               ? array( $limit['edit'] )
-                               : $this->mTitle->getRestrictions( 'edit' );
-                       foreach ( array_keys( $editrestriction, 'sysop' ) as $key ) {
-                               $editrestriction[$key] = 'editprotected'; // backwards compatibility
-                       }
-                       foreach ( array_keys( $editrestriction, 'autoconfirmed' ) as $key ) {
-                               $editrestriction[$key] = 'editsemiprotected'; // backwards compatibility
-                       }
-
-                       $cascadingRestrictionLevels = $wgCascadingRestrictionLevels;
-                       foreach ( array_keys( $cascadingRestrictionLevels, 'sysop' ) as $key ) {
-                               $cascadingRestrictionLevels[$key] = 'editprotected'; // backwards compatibility
-                       }
-                       foreach ( array_keys( $cascadingRestrictionLevels, 'autoconfirmed' ) as $key ) {
-                               $cascadingRestrictionLevels[$key] = 'editsemiprotected'; // backwards compatibility
-                       }
-
-                       // The schema allows multiple restrictions
-                       if ( !array_intersect( $editrestriction, $cascadingRestrictionLevels ) ) {
-                               $cascade = false;
-                       }
-
-                       // insert null revision to identify the page protection change as edit summary
-                       $latest = $this->getLatest();
-                       $nullRevision = $this->insertProtectNullRevision(
-                               $revCommentMsg,
-                               $limit,
-                               $expiry,
-                               $cascade,
-                               $reason,
-                               $user
-                       );
-
-                       if ( $nullRevision === null ) {
-                               return Status::newFatal( 'no-null-revision', $this->mTitle->getPrefixedText() );
-                       }
-
-                       $logRelationsField = 'pr_id';
-
-                       // Update restrictions table
-                       foreach ( $limit as $action => $restrictions ) {
-                               $dbw->delete(
-                                       'page_restrictions',
-                                       array(
-                                               'pr_page' => $id,
-                                               'pr_type' => $action
-                                       ),
-                                       __METHOD__
-                               );
-                               if ( $restrictions != '' ) {
-                                       $dbw->insert(
-                                               'page_restrictions',
-                                               array(
-                                                       'pr_id' => $dbw->nextSequenceValue( 'page_restrictions_pr_id_seq' ),
-                                                       'pr_page' => $id,
-                                                       'pr_type' => $action,
-                                                       'pr_level' => $restrictions,
-                                                       'pr_cascade' => ( $cascade && $action == 'edit' ) ? 1 : 0,
-                                                       'pr_expiry' => $dbw->encodeExpiry( $expiry[$action] )
-                                               ),
-                                               __METHOD__
-                                       );
-                                       $logRelationsValues[] = $dbw->insertId();
-                               }
-                       }
-
-                       // Clear out legacy restriction fields
-                       $dbw->update(
-                               'page',
-                               array( 'page_restrictions' => '' ),
-                               array( 'page_id' => $id ),
-                               __METHOD__
-                       );
-
-                       wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $nullRevision, $latest, $user ) );
-                       wfRunHooks( 'ArticleProtectComplete', array( &$this, &$user, $limit, $reason ) );
-               } else { // Protection of non-existing page (also known as "title protection")
-                       // Cascade protection is meaningless in this case
-                       $cascade = false;
-
-                       if ( $limit['create'] != '' ) {
-                               $dbw->replace( 'protected_titles',
-                                       array( array( 'pt_namespace', 'pt_title' ) ),
-                                       array(
-                                               'pt_namespace' => $this->mTitle->getNamespace(),
-                                               'pt_title' => $this->mTitle->getDBkey(),
-                                               'pt_create_perm' => $limit['create'],
-                                               'pt_timestamp' => $dbw->timestamp(),
-                                               'pt_expiry' => $dbw->encodeExpiry( $expiry['create'] ),
-                                               'pt_user' => $user->getId(),
-                                               'pt_reason' => $reason,
-                                       ), __METHOD__
-                               );
-                       } else {
-                               $dbw->delete( 'protected_titles',
-                                       array(
-                                               'pt_namespace' => $this->mTitle->getNamespace(),
-                                               'pt_title' => $this->mTitle->getDBkey()
-                                       ), __METHOD__
-                               );
-                       }
-               }
-
-               $this->mTitle->flushRestrictions();
-               InfoAction::invalidateCache( $this->mTitle );
-
-               if ( $logAction == 'unprotect' ) {
-                       $params = array();
-               } else {
-                       $protectDescriptionLog = $this->protectDescriptionLog( $limit, $expiry );
-                       $params = array( $protectDescriptionLog, $cascade ? 'cascade' : '' );
-               }
-
-               // Update the protection log
-               $log = new LogPage( 'protect' );
-               $logId = $log->addEntry( $logAction, $this->mTitle, $reason, $params, $user );
-               if ( $logRelationsField !== null && count( $logRelationsValues ) ) {
-                       $log->addRelations( $logRelationsField, $logRelationsValues, $logId );
-               }
-
-               return Status::newGood();
-       }
-
-       /**
-        * Insert a new null revision for this page.
-        *
-        * @param string $revCommentMsg Comment message key for the revision
-        * @param array $limit Set of restriction keys
-        * @param array $expiry Per restriction type expiration
-        * @param int $cascade Set to false if cascading protection isn't allowed.
-        * @param string $reason
-        * @param User|null $user
-        * @return Revision|null Null on error
-        */
-       public function insertProtectNullRevision( $revCommentMsg, array $limit,
-               array $expiry, $cascade, $reason, $user = null
-       ) {
-               global $wgContLang;
-               $dbw = wfGetDB( DB_MASTER );
-
-               // Prepare a null revision to be added to the history
-               $editComment = $wgContLang->ucfirst(
-                       wfMessage(
-                               $revCommentMsg,
-                               $this->mTitle->getPrefixedText()
-                       )->inContentLanguage()->text()
-               );
-               if ( $reason ) {
-                       $editComment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
-               }
-               $protectDescription = $this->protectDescription( $limit, $expiry );
-               if ( $protectDescription ) {
-                       $editComment .= wfMessage( 'word-separator' )->inContentLanguage()->text();
-                       $editComment .= wfMessage( 'parentheses' )->params( $protectDescription )
-                               ->inContentLanguage()->text();
-               }
-               if ( $cascade ) {
-                       $editComment .= wfMessage( 'word-separator' )->inContentLanguage()->text();
-                       $editComment .= wfMessage( 'brackets' )->params(
-                               wfMessage( 'protect-summary-cascade' )->inContentLanguage()->text()
-                       )->inContentLanguage()->text();
-               }
-
-               $nullRev = Revision::newNullRevision( $dbw, $this->getId(), $editComment, true, $user );
-               if ( $nullRev ) {
-                       $nullRev->insertOn( $dbw );
-
-                       // Update page record and touch page
-                       $oldLatest = $nullRev->getParentId();
-                       $this->updateRevisionOn( $dbw, $nullRev, $oldLatest );
-               }
-
-               return $nullRev;
-       }
-
-       /**
-        * @param string $expiry 14-char timestamp or "infinity", or false if the input was invalid
-        * @return string
-        */
-       protected function formatExpiry( $expiry ) {
-               global $wgContLang;
-               $dbr = wfGetDB( DB_SLAVE );
-
-               $encodedExpiry = $dbr->encodeExpiry( $expiry );
-               if ( $encodedExpiry != 'infinity' ) {
-                       return wfMessage(
-                               'protect-expiring',
-                               $wgContLang->timeanddate( $expiry, false, false ),
-                               $wgContLang->date( $expiry, false, false ),
-                               $wgContLang->time( $expiry, false, false )
-                       )->inContentLanguage()->text();
-               } else {
-                       return wfMessage( 'protect-expiry-indefinite' )
-                               ->inContentLanguage()->text();
-               }
-       }
-
-       /**
-        * Builds the description to serve as comment for the edit.
-        *
-        * @param array $limit Set of restriction keys
-        * @param array $expiry Per restriction type expiration
-        * @return string
-        */
-       public function protectDescription( array $limit, array $expiry ) {
-               $protectDescription = '';
-
-               foreach ( array_filter( $limit ) as $action => $restrictions ) {
-                       # $action is one of $wgRestrictionTypes = array( 'create', 'edit', 'move', 'upload' ).
-                       # All possible message keys are listed here for easier grepping:
-                       # * restriction-create
-                       # * restriction-edit
-                       # * restriction-move
-                       # * restriction-upload
-                       $actionText = wfMessage( 'restriction-' . $action )->inContentLanguage()->text();
-                       # $restrictions is one of $wgRestrictionLevels = array( '', 'autoconfirmed', 'sysop' ),
-                       # with '' filtered out. All possible message keys are listed below:
-                       # * protect-level-autoconfirmed
-                       # * protect-level-sysop
-                       $restrictionsText = wfMessage( 'protect-level-' . $restrictions )->inContentLanguage()->text();
-
-                       $expiryText = $this->formatExpiry( $expiry[$action] );
-
-                       if ( $protectDescription !== '' ) {
-                               $protectDescription .= wfMessage( 'word-separator' )->inContentLanguage()->text();
-                       }
-                       $protectDescription .= wfMessage( 'protect-summary-desc' )
-                               ->params( $actionText, $restrictionsText, $expiryText )
-                               ->inContentLanguage()->text();
-               }
-
-               return $protectDescription;
-       }
-
-       /**
-        * Builds the description to serve as comment for the log entry.
-        *
-        * Some bots may parse IRC lines, which are generated from log entries which contain plain
-        * protect description text. Keep them in old format to avoid breaking compatibility.
-        * TODO: Fix protection log to store structured description and format it on-the-fly.
-        *
-        * @param array $limit Set of restriction keys
-        * @param array $expiry Per restriction type expiration
-        * @return string
-        */
-       public function protectDescriptionLog( array $limit, array $expiry ) {
-               global $wgContLang;
-
-               $protectDescriptionLog = '';
-
-               foreach ( array_filter( $limit ) as $action => $restrictions ) {
-                       $expiryText = $this->formatExpiry( $expiry[$action] );
-                       $protectDescriptionLog .= $wgContLang->getDirMark() . "[$action=$restrictions] ($expiryText)";
-               }
-
-               return trim( $protectDescriptionLog );
-       }
-
-       /**
-        * Take an array of page restrictions and flatten it to a string
-        * suitable for insertion into the page_restrictions field.
-        *
-        * @param string[] $limit
-        *
-        * @throws MWException
-        * @return string
-        */
-       protected static function flattenRestrictions( $limit ) {
-               if ( !is_array( $limit ) ) {
-                       throw new MWException( 'WikiPage::flattenRestrictions given non-array restriction set' );
-               }
-
-               $bits = array();
-               ksort( $limit );
-
-               foreach ( array_filter( $limit ) as $action => $restrictions ) {
-                       $bits[] = "$action=$restrictions";
-               }
-
-               return implode( ':', $bits );
-       }
-
-       /**
-        * Same as doDeleteArticleReal(), but returns a simple boolean. This is kept around for
-        * backwards compatibility, if you care about error reporting you should use
-        * doDeleteArticleReal() instead.
-        *
-        * Deletes the article with database consistency, writes logs, purges caches
-        *
-        * @param string $reason Delete reason for deletion log
-        * @param bool $suppress Suppress all revisions and log the deletion in
-        *        the suppression log instead of the deletion log
-        * @param int $id Article ID
-        * @param bool $commit Defaults to true, triggers transaction end
-        * @param array &$error Array of errors to append to
-        * @param User $user The deleting user
-        * @return bool true if successful
-        */
-       public function doDeleteArticle(
-               $reason, $suppress = false, $id = 0, $commit = true, &$error = '', User $user = null
-       ) {
-               $status = $this->doDeleteArticleReal( $reason, $suppress, $id, $commit, $error, $user );
-               return $status->isGood();
-       }
-
-       /**
-        * Back-end article deletion
-        * Deletes the article with database consistency, writes logs, purges caches
-        *
-        * @since 1.19
-        *
-        * @param string $reason Delete reason for deletion log
-        * @param bool $suppress Suppress all revisions and log the deletion in
-        *   the suppression log instead of the deletion log
-        * @param int $id Article ID
-        * @param bool $commit Defaults to true, triggers transaction end
-        * @param array &$error Array of errors to append to
-        * @param User $user The deleting user
-        * @return Status Status object; if successful, $status->value is the log_id of the
-        *   deletion log entry. If the page couldn't be deleted because it wasn't
-        *   found, $status is a non-fatal 'cannotdelete' error
-        */
-       public function doDeleteArticleReal(
-               $reason, $suppress = false, $id = 0, $commit = true, &$error = '', User $user = null
-       ) {
-               global $wgUser, $wgContentHandlerUseDB;
-
-               wfDebug( __METHOD__ . "\n" );
-
-               $status = Status::newGood();
-
-               if ( $this->mTitle->getDBkey() === '' ) {
-                       $status->error( 'cannotdelete', wfEscapeWikiText( $this->getTitle()->getPrefixedText() ) );
-                       return $status;
-               }
-
-               $user = is_null( $user ) ? $wgUser : $user;
-               if ( ! wfRunHooks( 'ArticleDelete', array( &$this, &$user, &$reason, &$error, &$status ) ) ) {
-                       if ( $status->isOK() ) {
-                               // Hook aborted but didn't set a fatal status
-                               $status->fatal( 'delete-hook-aborted' );
-                       }
-                       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;
-                       // This should be 15...
-                       $bitfield |= Revision::DELETED_TEXT;
-                       $bitfield |= Revision::DELETED_COMMENT;
-                       $bitfield |= Revision::DELETED_USER;
-                       $bitfield |= Revision::DELETED_RESTRICTED;
-               } else {
-                       $bitfield = 'rev_deleted';
-               }
-
-               // 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
-               // immutable storage schemes.
-               //
-               // For backwards compatibility, note that some older archive
-               // table entries will have ar_text and ar_flags fields still.
-               //
-               // In the future, we may keep revisions and mark them with
-               // the rev_deleted field, which is reserved for this purpose.
-
-               $row = array(
-                       'ar_namespace'  => 'page_namespace',
-                       'ar_title'      => 'page_title',
-                       'ar_comment'    => 'rev_comment',
-                       'ar_user'       => 'rev_user',
-                       'ar_user_text'  => 'rev_user_text',
-                       'ar_timestamp'  => 'rev_timestamp',
-                       'ar_minor_edit' => 'rev_minor_edit',
-                       'ar_rev_id'     => 'rev_id',
-                       'ar_parent_id'  => 'rev_parent_id',
-                       'ar_text_id'    => 'rev_text_id',
-                       'ar_text'       => '\'\'', // Be explicit to appease
-                       'ar_flags'      => '\'\'', // MySQL's "strict mode"...
-                       'ar_len'        => 'rev_len',
-                       'ar_page_id'    => 'page_id',
-                       'ar_deleted'    => $bitfield,
-                       'ar_sha1'       => 'rev_sha1',
-               );
-
-               if ( $wgContentHandlerUseDB ) {
-                       $row['ar_content_model'] = 'rev_content_model';
-                       $row['ar_content_format'] = 'rev_content_format';
-               }
-
-               $dbw->insertSelect( 'archive', array( 'page', 'revision' ),
-                       $row,
-                       array(
-                               'page_id' => $id,
-                               'page_id = rev_page'
-                       ), __METHOD__
-               );
-
-               // Now that it's safely backed up, delete it
-               $dbw->delete( 'page', array( 'page_id' => $id ), __METHOD__ );
-               $ok = ( $dbw->affectedRows() > 0 ); // $id could be laggy
-
-               if ( !$ok ) {
-                       $dbw->rollback( __METHOD__ );
-                       $status->error( 'cannotdelete', wfEscapeWikiText( $this->getTitle()->getPrefixedText() ) );
-                       return $status;
-               }
-
-               if ( !$dbw->cascadingDeletes() ) {
-                       $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
-               $logtype = $suppress ? 'suppress' : 'delete';
-
-               $logEntry = new ManualLogEntry( $logtype, 'delete' );
-               $logEntry->setPerformer( $user );
-               $logEntry->setTarget( $logTitle );
-               $logEntry->setComment( $reason );
-               $logid = $logEntry->insert();
-
-               $dbw->onTransactionPreCommitOrIdle( function() use ( $dbw, $logEntry, $logid ) {
-                       // Bug 56776: avoid deadlocks (especially from FileDeleteForm)
-                       $logEntry->publish( $logid );
-               } );
-
-               if ( $commit ) {
-                       $dbw->commit( __METHOD__ );
-               }
-
-               wfRunHooks( 'ArticleDeleteComplete', array( &$this, &$user, $reason, $id, $content, $logEntry ) );
-               $status->value = $logid;
-               return $status;
-       }
-
-       /**
-        * Do some database updates after deletion
-        *
-        * @param int $id page_id value of the page being deleted
-        * @param Content $content Optional page content to be used when determining
-        *   the required updates. This may be needed because $this->getContent()
-        *   may already return null when the page proper was deleted.
-        */
-       public function doDeleteUpdates( $id, Content $content = null ) {
-               // update site status
-               DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 1, - (int)$this->isCountable(), -1 ) );
-
-               // remove secondary indexes, etc
-               $updates = $this->getDeletionUpdates( $content );
-               DataUpdate::runUpdates( $updates );
-
-               // Reparse any pages transcluding this page
-               LinksUpdate::queueRecursiveJobsForTable( $this->mTitle, 'templatelinks' );
-
-               // Reparse any pages including this image
-               if ( $this->mTitle->getNamespace() == NS_FILE ) {
-                       LinksUpdate::queueRecursiveJobsForTable( $this->mTitle, 'imagelinks' );
-               }
-
-               // Clear caches
-               WikiPage::onArticleDelete( $this->mTitle );
-
-               // Reset this object and the Title object
-               $this->loadFromRow( false, self::READ_LATEST );
-
-               // Search engine
-               DeferredUpdates::addUpdate( new SearchUpdate( $id, $this->mTitle ) );
-       }
-
-       /**
-        * Roll back the most recent consecutive set of edits to a page
-        * from the same user; fails if there are no eligible edits to
-        * roll back to, e.g. user is the sole contributor. This function
-        * performs permissions checks on $user, then calls commitRollback()
-        * to do the dirty work
-        *
-        * @todo Separate the business/permission stuff out from backend code
-        *
-        * @param string $fromP Name of the user whose edits to rollback.
-        * @param string $summary Custom summary. Set to default summary if empty.
-        * @param string $token Rollback token.
-        * @param bool $bot If true, mark all reverted edits as bot.
-        *
-        * @param array $resultDetails contains result-specific array of additional values
-        *    'alreadyrolled' : 'current' (rev)
-        *    success        : 'summary' (str), 'current' (rev), 'target' (rev)
-        *
-        * @param User $user The user performing the rollback
-        * @return array Array of errors, each error formatted as
-        *   array(messagekey, param1, param2, ...).
-        * On success, the array is empty.  This array can also be passed to
-        * OutputPage::showPermissionsErrorPage().
-        */
-       public function doRollback(
-               $fromP, $summary, $token, $bot, &$resultDetails, User $user
-       ) {
-               $resultDetails = null;
-
-               // Check permissions
-               $editErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $user );
-               $rollbackErrors = $this->mTitle->getUserPermissionsErrors( 'rollback', $user );
-               $errors = array_merge( $editErrors, wfArrayDiff2( $rollbackErrors, $editErrors ) );
-
-               if ( !$user->matchEditToken( $token, array( $this->mTitle->getPrefixedText(), $fromP ) ) ) {
-                       $errors[] = array( 'sessionfailure' );
-               }
-
-               if ( $user->pingLimiter( 'rollback' ) || $user->pingLimiter() ) {
-                       $errors[] = array( 'actionthrottledtext' );
-               }
-
-               // If there were errors, bail out now
-               if ( !empty( $errors ) ) {
-                       return $errors;
-               }
-
-               return $this->commitRollback( $fromP, $summary, $bot, $resultDetails, $user );
-       }
-
-       /**
-        * Backend implementation of doRollback(), please refer there for parameter
-        * and return value documentation
-        *
-        * NOTE: This function does NOT check ANY permissions, it just commits the
-        * rollback to the DB. Therefore, you should only call this function direct-
-        * ly if you want to use custom permissions checks. If you don't, use
-        * doRollback() instead.
-        * @param string $fromP Name of the user whose edits to rollback.
-        * @param string $summary Custom summary. Set to default summary if empty.
-        * @param bool $bot If true, mark all reverted edits as bot.
-        *
-        * @param array $resultDetails Contains result-specific array of additional values
-        * @param User $guser The user performing the rollback
-        * @return array
-        */
-       public function commitRollback( $fromP, $summary, $bot, &$resultDetails, User $guser ) {
-               global $wgUseRCPatrol, $wgContLang;
-
-               $dbw = wfGetDB( DB_MASTER );
-
-               if ( wfReadOnly() ) {
-                       return array( array( 'readonlytext' ) );
-               }
-
-               // Get the last editor
-               $current = $this->getRevision();
-               if ( is_null( $current ) ) {
-                       // Something wrong... no page?
-                       return array( array( 'notanarticle' ) );
-               }
-
-               $from = str_replace( '_', ' ', $fromP );
-               // User name given should match up with the top revision.
-               // If the user was deleted then $from should be empty.
-               if ( $from != $current->getUserText() ) {
-                       $resultDetails = array( 'current' => $current );
-                       return array( array( 'alreadyrolled',
-                               htmlspecialchars( $this->mTitle->getPrefixedText() ),
-                               htmlspecialchars( $fromP ),
-                               htmlspecialchars( $current->getUserText() )
-                       ) );
-               }
-
-               // Get the last edit not by this guy...
-               // Note: these may not be public values
-               $user = intval( $current->getRawUser() );
-               $user_text = $dbw->addQuotes( $current->getRawUserText() );
-               $s = $dbw->selectRow( 'revision',
-                       array( 'rev_id', 'rev_timestamp', 'rev_deleted' ),
-                       array( 'rev_page' => $current->getPage(),
-                               "rev_user != {$user} OR rev_user_text != {$user_text}"
-                       ), __METHOD__,
-                       array( 'USE INDEX' => 'page_timestamp',
-                               'ORDER BY' => 'rev_timestamp DESC' )
-                       );
-               if ( $s === false ) {
-                       // No one else ever edited this page
-                       return array( array( 'cantrollback' ) );
-               } elseif ( $s->rev_deleted & Revision::DELETED_TEXT
-                       || $s->rev_deleted & Revision::DELETED_USER
-               ) {
-                       // Only admins can see this text
-                       return array( array( 'notvisiblerev' ) );
-               }
-
-               // Set patrolling and bot flag on the edits, which gets rollbacked.
-               // This is done before the rollback edit to have patrolling also on failure (bug 62157).
-               $set = array();
-               if ( $bot && $guser->isAllowed( 'markbotedits' ) ) {
-                       // Mark all reverted edits as bot
-                       $set['rc_bot'] = 1;
-               }
-
-               if ( $wgUseRCPatrol ) {
-                       // Mark all reverted edits as patrolled
-                       $set['rc_patrolled'] = 1;
-               }
-
-               if ( count( $set ) ) {
-                       $dbw->update( 'recentchanges', $set,
-                               array( /* WHERE */
-                                       'rc_cur_id' => $current->getPage(),
-                                       'rc_user_text' => $current->getUserText(),
-                                       'rc_timestamp > ' . $dbw->addQuotes( $s->rev_timestamp ),
-                               ), __METHOD__
-                       );
-               }
-
-               // Generate the edit summary if necessary
-               $target = Revision::newFromId( $s->rev_id );
-               if ( empty( $summary ) ) {
-                       if ( $from == '' ) { // no public user name
-                               $summary = wfMessage( 'revertpage-nouser' );
-                       } else {
-                               $summary = wfMessage( 'revertpage' );
-                       }
-               }
-
-               // Allow the custom summary to use the same args as the default message
-               $args = array(
-                       $target->getUserText(), $from, $s->rev_id,
-                       $wgContLang->timeanddate( wfTimestamp( TS_MW, $s->rev_timestamp ) ),
-                       $current->getId(), $wgContLang->timeanddate( $current->getTimestamp() )
-               );
-               if ( $summary instanceof Message ) {
-                       $summary = $summary->params( $args )->inContentLanguage()->text();
-               } else {
-                       $summary = wfMsgReplaceArgs( $summary, $args );
-               }
-
-               // Trim spaces on user supplied text
-               $summary = trim( $summary );
-
-               // Truncate for whole multibyte characters.
-               $summary = $wgContLang->truncate( $summary, 255 );
-
-               // Save
-               $flags = EDIT_UPDATE;
-
-               if ( $guser->isAllowed( 'minoredit' ) ) {
-                       $flags |= EDIT_MINOR;
-               }
-
-               if ( $bot && ( $guser->isAllowedAny( 'markbotedits', 'bot' ) ) ) {
-                       $flags |= EDIT_FORCE_BOT;
-               }
-
-               // Actually store the edit
-               $status = $this->doEditContent(
-                       $target->getContent(),
-                       $summary,
-                       $flags,
-                       $target->getId(),
-                       $guser
-               );
-
-               if ( !$status->isOK() ) {
-                       return $status->getErrorsArray();
-               }
-
-               // raise error, when the edit is an edit without a new version
-               if ( empty( $status->value['revision'] ) ) {
-                       $resultDetails = array( 'current' => $current );
-                       return array( array( 'alreadyrolled',
-                                       htmlspecialchars( $this->mTitle->getPrefixedText() ),
-                                       htmlspecialchars( $fromP ),
-                                       htmlspecialchars( $current->getUserText() )
-                       ) );
-               }
-
-               $revId = $status->value['revision']->getId();
-
-               wfRunHooks( 'ArticleRollbackComplete', array( $this, $guser, $target, $current ) );
-
-               $resultDetails = array(
-                       'summary' => $summary,
-                       'current' => $current,
-                       'target' => $target,
-                       'newid' => $revId
-               );
-
-               return array();
-       }
-
-       /**
-        * The onArticle*() functions are supposed to be a kind of hooks
-        * which should be called whenever any of the specified actions
-        * are done.
-        *
-        * This is a good place to put code to clear caches, for instance.
-        *
-        * This is called on page move and undelete, as well as edit
-        *
-        * @param Title $title
-        */
-       public static function onArticleCreate( $title ) {
-               // Update existence markers on article/talk tabs...
-               if ( $title->isTalkPage() ) {
-                       $other = $title->getSubjectPage();
-               } else {
-                       $other = $title->getTalkPage();
-               }
-
-               $other->invalidateCache();
-               $other->purgeSquid();
-
-               $title->touchLinks();
-               $title->purgeSquid();
-               $title->deleteTitleProtection();
-       }
-
-       /**
-        * Clears caches when article is deleted
-        *
-        * @param Title $title
-        */
-       public static function onArticleDelete( $title ) {
-               // Update existence markers on article/talk tabs...
-               if ( $title->isTalkPage() ) {
-                       $other = $title->getSubjectPage();
-               } else {
-                       $other = $title->getTalkPage();
-               }
-
-               $other->invalidateCache();
-               $other->purgeSquid();
-
-               $title->touchLinks();
-               $title->purgeSquid();
-
-               // File cache
-               HTMLFileCache::clearFileCache( $title );
-               InfoAction::invalidateCache( $title );
-
-               // Messages
-               if ( $title->getNamespace() == NS_MEDIAWIKI ) {
-                       MessageCache::singleton()->replace( $title->getDBkey(), false );
-               }
-
-               // Images
-               if ( $title->getNamespace() == NS_FILE ) {
-                       $update = new HTMLCacheUpdate( $title, 'imagelinks' );
-                       $update->doUpdate();
-               }
-
-               // User talk pages
-               if ( $title->getNamespace() == NS_USER_TALK ) {
-                       $user = User::newFromName( $title->getText(), false );
-                       if ( $user ) {
-                               $user->setNewtalk( false );
-                       }
-               }
-
-               // Image redirects
-               RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect( $title );
-       }
-
-       /**
-        * Purge caches on page update etc
-        *
-        * @param Title $title
-        * @todo Verify that $title is always a Title object (and never false or
-        *   null), add Title hint to parameter $title.
-        */
-       public static function onArticleEdit( $title ) {
-               // Invalidate caches of articles which include this page
-               DeferredUpdates::addHTMLCacheUpdate( $title, 'templatelinks' );
-
-               // Invalidate the caches of all pages which redirect here
-               DeferredUpdates::addHTMLCacheUpdate( $title, 'redirect' );
-
-               // Purge squid for this page only
-               $title->purgeSquid();
-
-               // Clear file cache for this page only
-               HTMLFileCache::clearFileCache( $title );
-               InfoAction::invalidateCache( $title );
-       }
-
-       /**#@-*/
-
-       /**
-        * Returns a list of categories this page is a member of.
-        * Results will include hidden categories
-        *
-        * @return TitleArray
-        */
-       public function getCategories() {
-               $id = $this->getId();
-               if ( $id == 0 ) {
-                       return TitleArray::newFromResult( new FakeResultWrapper( array() ) );
-               }
-
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( 'categorylinks',
-                       array( 'cl_to AS page_title, ' . NS_CATEGORY . ' AS page_namespace' ),
-                       // Have to do that since DatabaseBase::fieldNamesWithAlias treats numeric indexes
-                       // as not being aliases, and NS_CATEGORY is numeric
-                       array( 'cl_from' => $id ),
-                       __METHOD__ );
-
-               return TitleArray::newFromResult( $res );
-       }
-
-       /**
-        * Returns a list of hidden categories this page is a member of.
-        * Uses the page_props and categorylinks tables.
-        *
-        * @return array Array of Title objects
-        */
-       public function getHiddenCategories() {
-               $result = array();
-               $id = $this->getId();
-
-               if ( $id == 0 ) {
-                       return array();
-               }
-
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( array( 'categorylinks', 'page_props', 'page' ),
-                       array( 'cl_to' ),
-                       array( 'cl_from' => $id, 'pp_page=page_id', 'pp_propname' => 'hiddencat',
-                               'page_namespace' => NS_CATEGORY, 'page_title=cl_to' ),
-                       __METHOD__ );
-
-               if ( $res !== false ) {
-                       foreach ( $res as $row ) {
-                               $result[] = Title::makeTitle( NS_CATEGORY, $row->cl_to );
-                       }
-               }
-
-               return $result;
-       }
-
-       /**
-        * Return an applicable autosummary if one exists for the given edit.
-        * @param string|null $oldtext The previous text of the page.
-        * @param string|null $newtext The submitted text of the page.
-        * @param int $flags Bitmask: a bitmask of flags submitted for the edit.
-        * @return string An appropriate autosummary, or an empty string.
-        *
-        * @deprecated since 1.21, use ContentHandler::getAutosummary() instead
-        */
-       public static function getAutosummary( $oldtext, $newtext, $flags ) {
-               // NOTE: stub for backwards-compatibility. assumes the given text is
-               // wikitext. will break horribly if it isn't.
-
-               ContentHandler::deprecated( __METHOD__, '1.21' );
-
-               $handler = ContentHandler::getForModelID( CONTENT_MODEL_WIKITEXT );
-               $oldContent = is_null( $oldtext ) ? null : $handler->unserializeContent( $oldtext );
-               $newContent = is_null( $newtext ) ? null : $handler->unserializeContent( $newtext );
-
-               return $handler->getAutosummary( $oldContent, $newContent, $flags );
-       }
-
-       /**
-        * Auto-generates a deletion reason
-        *
-        * @param bool &$hasHistory Whether the page has a history
-        * @return string|bool String containing deletion reason or empty string, or boolean false
-        *    if no revision occurred
-        */
-       public function getAutoDeleteReason( &$hasHistory ) {
-               return $this->getContentHandler()->getAutoDeleteReason( $this->getTitle(), $hasHistory );
-       }
-
-       /**
-        * Update all the appropriate counts in the category table, given that
-        * we've added the categories $added and deleted the categories $deleted.
-        *
-        * @param array $added The names of categories that were added
-        * @param array $deleted The names of categories that were deleted
-        */
-       public function updateCategoryCounts( array $added, array $deleted ) {
-               $that = $this;
-               $method = __METHOD__;
-               $dbw = wfGetDB( DB_MASTER );
-
-               // Do this at the end of the commit to reduce lock wait timeouts
-               $dbw->onTransactionPreCommitOrIdle(
-                       function() use ( $dbw, $that, $method, $added, $deleted ) {
-                               $ns = $that->getTitle()->getNamespace();
-
-                               $addFields = array( 'cat_pages = cat_pages + 1' );
-                               $removeFields = array( 'cat_pages = cat_pages - 1' );
-                               if ( $ns == NS_CATEGORY ) {
-                                       $addFields[] = 'cat_subcats = cat_subcats + 1';
-                                       $removeFields[] = 'cat_subcats = cat_subcats - 1';
-                               } elseif ( $ns == NS_FILE ) {
-                                       $addFields[] = 'cat_files = cat_files + 1';
-                                       $removeFields[] = 'cat_files = cat_files - 1';
-                               }
-
-                               if ( count( $added ) ) {
-                                       $insertRows = array();
-                                       foreach ( $added as $cat ) {
-                                               $insertRows[] = array(
-                                                       'cat_title'   => $cat,
-                                                       'cat_pages'   => 1,
-                                                       'cat_subcats' => ( $ns == NS_CATEGORY ) ? 1 : 0,
-                                                       'cat_files'   => ( $ns == NS_FILE ) ? 1 : 0,
-                                               );
-                                       }
-                                       $dbw->upsert(
-                                               'category',
-                                               $insertRows,
-                                               array( 'cat_title' ),
-                                               $addFields,
-                                               $method
-                                       );
-                               }
-
-                               if ( count( $deleted ) ) {
-                                       $dbw->update(
-                                               'category',
-                                               $removeFields,
-                                               array( 'cat_title' => $deleted ),
-                                               $method
-                                       );
-                               }
-
-                               foreach ( $added as $catName ) {
-                                       $cat = Category::newFromName( $catName );
-                                       wfRunHooks( 'CategoryAfterPageAdded', array( $cat, $that ) );
-                               }
-
-                               foreach ( $deleted as $catName ) {
-                                       $cat = Category::newFromName( $catName );
-                                       wfRunHooks( 'CategoryAfterPageRemoved', array( $cat, $that ) );
-                               }
-                       }
-               );
-       }
-
-       /**
-        * Updates cascading protections
-        *
-        * @param ParserOutput $parserOutput ParserOutput object for the current version
-        */
-       public function doCascadeProtectionUpdates( ParserOutput $parserOutput ) {
-               if ( wfReadOnly() || !$this->mTitle->areRestrictionsCascading() ) {
-                       return;
-               }
-
-               // templatelinks or imagelinks tables may have become out of sync,
-               // especially if using variable-based transclusions.
-               // For paranoia, check if things have changed and if
-               // so apply updates to the database. This will ensure
-               // that cascaded protections apply as soon as the changes
-               // are visible.
-
-               // Get templates from templatelinks and images from imagelinks
-               $id = $this->getId();
-
-               $dbLinks = array();
-
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( array( 'templatelinks' ),
-                       array( 'tl_namespace', 'tl_title' ),
-                       array( 'tl_from' => $id ),
-                       __METHOD__
-               );
-
-               foreach ( $res as $row ) {
-                       $dbLinks["{$row->tl_namespace}:{$row->tl_title}"] = true;
-               }
-
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( array( 'imagelinks' ),
-                       array( 'il_to' ),
-                       array( 'il_from' => $id ),
-                       __METHOD__
-               );
-
-               foreach ( $res as $row ) {
-                       $dbLinks[NS_FILE . ":{$row->il_to}"] = true;
-               }
-
-               // Get templates and images from parser output.
-               $poLinks = array();
-               foreach ( $parserOutput->getTemplates() as $ns => $templates ) {
-                       foreach ( $templates as $dbk => $id ) {
-                               $poLinks["$ns:$dbk"] = true;
-                       }
-               }
-               foreach ( $parserOutput->getImages() as $dbk => $id ) {
-                       $poLinks[NS_FILE . ":$dbk"] = true;
-               }
-
-               // Get the diff
-               $links_diff = array_diff_key( $poLinks, $dbLinks );
-
-               if ( count( $links_diff ) > 0 ) {
-                       // Whee, link updates time.
-                       // Note: we are only interested in links here. We don't need to get
-                       // other DataUpdate items from the parser output.
-                       $u = new LinksUpdate( $this->mTitle, $parserOutput, false );
-                       $u->doUpdate();
-               }
-       }
-
-       /**
-        * Return a list of templates used by this article.
-        * Uses the templatelinks table
-        *
-        * @deprecated since 1.19; use Title::getTemplateLinksFrom()
-        * @return array Array of Title objects
-        */
-       public function getUsedTemplates() {
-               return $this->mTitle->getTemplateLinksFrom();
-       }
-
-       /**
-        * This function is called right before saving the wikitext,
-        * so we can do things like signatures and links-in-context.
-        *
-        * @deprecated since 1.19; use Parser::preSaveTransform() instead
-        * @param string $text Article contents
-        * @param User $user User doing the edit
-        * @param ParserOptions $popts Parser options, default options for
-        *   the user loaded if null given
-        * @return string Article contents with altered wikitext markup (signatures
-        *      converted, {{subst:}}, templates, etc.)
-        */
-       public function preSaveTransform( $text, User $user = null, ParserOptions $popts = null ) {
-               global $wgParser, $wgUser;
-
-               wfDeprecated( __METHOD__, '1.19' );
-
-               $user = is_null( $user ) ? $wgUser : $user;
-
-               if ( $popts === null ) {
-                       $popts = ParserOptions::newFromUser( $user );
-               }
-
-               return $wgParser->preSaveTransform( $text, $this->mTitle, $user, $popts );
-       }
-
-       /**
-        * Check whether the number of revisions of this page surpasses $wgDeleteRevisionsLimit
-        *
-        * @deprecated since 1.19; use Title::isBigDeletion() instead.
-        * @return bool
-        */
-       public function isBigDeletion() {
-               wfDeprecated( __METHOD__, '1.19' );
-               return $this->mTitle->isBigDeletion();
-       }
-
-       /**
-        * Get the  approximate revision count of this page.
-        *
-        * @deprecated since 1.19; use Title::estimateRevisionCount() instead.
-        * @return int
-        */
-       public function estimateRevisionCount() {
-               wfDeprecated( __METHOD__, '1.19' );
-               return $this->mTitle->estimateRevisionCount();
-       }
-
-       /**
-        * Update the article's restriction field, and leave a log entry.
-        *
-        * @deprecated since 1.19
-        * @param array $limit Set of restriction keys
-        * @param string $reason
-        * @param int &$cascade Set to false if cascading protection isn't allowed.
-        * @param array $expiry Per restriction type expiration
-        * @param User $user The user updating the restrictions
-        * @return bool true on success
-        */
-       public function updateRestrictions(
-               $limit = array(), $reason = '', &$cascade = 0, $expiry = array(), User $user = null
-       ) {
-               global $wgUser;
-
-               $user = is_null( $user ) ? $wgUser : $user;
-
-               return $this->doUpdateRestrictions( $limit, $expiry, $cascade, $reason, $user )->isOK();
-       }
-
-       /**
-        * Returns a list of updates to be performed when this page is deleted. The
-        * updates should remove any information about this page from secondary data
-        * stores such as links tables.
-        *
-        * @param Content|null $content Optional Content object for determining the
-        *   necessary updates.
-        * @return array An array of DataUpdates objects
-        */
-       public function getDeletionUpdates( Content $content = null ) {
-               if ( !$content ) {
-                       // load content object, which may be used to determine the necessary updates
-                       // XXX: the content may not be needed to determine the updates, then this would be overhead.
-                       $content = $this->getContent( Revision::RAW );
-               }
-
-               if ( !$content ) {
-                       $updates = array();
-               } else {
-                       $updates = $content->getDeletionUpdates( $this );
-               }
-
-               wfRunHooks( 'WikiPageDeletionUpdates', array( $this, $content, &$updates ) );
-               return $updates;
-       }
-
-}
-
-class PoolWorkArticleView extends PoolCounterWork {
-       /** @var Page */
-       private $page;
-
-       /** @var string */
-       private $cacheKey;
-
-       /** @var int */
-       private $revid;
-
-       /** @var ParserOptions */
-       private $parserOptions;
-
-       /** @var Content|null */
-       private $content = null;
-
-       /** @var ParserOutput|bool */
-       private $parserOutput = false;
-
-       /** @var bool */
-       private $isDirty = false;
-
-       /** @var Status|bool */
-       private $error = false;
-
-       /**
-        * @param Page $page
-        * @param int $revid ID of the revision being parsed.
-        * @param bool $useParserCache Whether to use the parser cache.
-        * @param ParserOptions $parserOptions ParserOptions to use for the parse
-        *   operation.
-        * @param Content|string $content Content to parse or null to load it; may
-        *   also be given as a wikitext string, for BC.
-        */
-       public function __construct( Page $page, ParserOptions $parserOptions,
-               $revid, $useParserCache, $content = null
-       ) {
-               if ( is_string( $content ) ) { // BC: old style call
-                       $modelId = $page->getRevision()->getContentModel();
-                       $format = $page->getRevision()->getContentFormat();
-                       $content = ContentHandler::makeContent( $content, $page->getTitle(), $modelId, $format );
-               }
-
-               $this->page = $page;
-               $this->revid = $revid;
-               $this->cacheable = $useParserCache;
-               $this->parserOptions = $parserOptions;
-               $this->content = $content;
-               $this->cacheKey = ParserCache::singleton()->getKey( $page, $parserOptions );
-               parent::__construct( 'ArticleView', $this->cacheKey . ':revid:' . $revid );
-       }
-
-       /**
-        * Get the ParserOutput from this object, or false in case of failure
-        *
-        * @return ParserOutput
-        */
-       public function getParserOutput() {
-               return $this->parserOutput;
-       }
-
-       /**
-        * Get whether the ParserOutput is a dirty one (i.e. expired)
-        *
-        * @return bool
-        */
-       public function getIsDirty() {
-               return $this->isDirty;
-       }
-
-       /**
-        * Get a Status object in case of error or false otherwise
-        *
-        * @return Status|bool
-        */
-       public function getError() {
-               return $this->error;
-       }
-
-       /**
-        * @return bool
-        */
-       public function doWork() {
-               global $wgUseFileCache;
-
-               // @todo several of the methods called on $this->page are not declared in Page, but present
-               //        in WikiPage and delegated by Article.
-
-               $isCurrent = $this->revid === $this->page->getLatest();
-
-               if ( $this->content !== null ) {
-                       $content = $this->content;
-               } elseif ( $isCurrent ) {
-                       // XXX: why use RAW audience here, and PUBLIC (default) below?
-                       $content = $this->page->getContent( Revision::RAW );
-               } else {
-                       $rev = Revision::newFromTitle( $this->page->getTitle(), $this->revid );
-
-                       if ( $rev === null ) {
-                               $content = null;
-                       } else {
-                               // XXX: why use PUBLIC audience here (default), and RAW above?
-                               $content = $rev->getContent();
-                       }
-               }
-
-               if ( $content === null ) {
-                       return false;
-               }
-
-               // Reduce effects of race conditions for slow parses (bug 46014)
-               $cacheTime = wfTimestampNow();
-
-               $time = - microtime( true );
-               $this->parserOutput = $content->getParserOutput(
-                       $this->page->getTitle(),
-                       $this->revid,
-                       $this->parserOptions
-               );
-               $time += microtime( true );
-
-               // Timing hack
-               if ( $time > 3 ) {
-                       wfDebugLog( 'slow-parse', sprintf( "%-5.2f %s", $time,
-                               $this->page->getTitle()->getPrefixedDBkey() ) );
-               }
-
-               if ( $this->cacheable && $this->parserOutput->isCacheable() && $isCurrent ) {
-                       ParserCache::singleton()->save(
-                               $this->parserOutput, $this->page, $this->parserOptions, $cacheTime, $this->revid );
-               }
-
-               // Make sure file cache is not used on uncacheable content.
-               // Output that has magic words in it can still use the parser cache
-               // (if enabled), though it will generally expire sooner.
-               if ( !$this->parserOutput->isCacheable() || $this->parserOutput->containsOldMagic() ) {
-                       $wgUseFileCache = false;
-               }
-
-               if ( $isCurrent ) {
-                       $this->page->doCascadeProtectionUpdates( $this->parserOutput );
-               }
-
-               return true;
-       }
-
-       /**
-        * @return bool
-        */
-       public function getCachedWork() {
-               $this->parserOutput = ParserCache::singleton()->get( $this->page, $this->parserOptions );
-
-               if ( $this->parserOutput === false ) {
-                       wfDebug( __METHOD__ . ": parser cache miss\n" );
-                       return false;
-               } else {
-                       wfDebug( __METHOD__ . ": parser cache hit\n" );
-                       return true;
-               }
-       }
-
-       /**
-        * @return bool
-        */
-       public function fallback() {
-               $this->parserOutput = ParserCache::singleton()->getDirty( $this->page, $this->parserOptions );
-
-               if ( $this->parserOutput === false ) {
-                       wfDebugLog( 'dirty', 'dirty missing' );
-                       wfDebug( __METHOD__ . ": no dirty cache\n" );
-                       return false;
-               } else {
-                       wfDebug( __METHOD__ . ": sending dirty output\n" );
-                       wfDebugLog( 'dirty', "dirty output {$this->cacheKey}" );
-                       $this->isDirty = true;
-                       return true;
-               }
-       }
-
-       /**
-        * @param Status $status
-        * @return bool
-        */
-       public function error( $status ) {
-               $this->error = $status;
-               return false;
-       }
-}
index 72210a9..31f58b8 100644 (file)
@@ -26,8 +26,7 @@
 /**
  * Page edition handler
  *
- * This is a wrapper that will call the EditPage class, or ExternalEdit
- * if $wgUseExternalEditor is set to true and requested by the user.
+ * This is a wrapper that will call the EditPage class or a custom editor from an extension.
  *
  * @ingroup Actions
  */
index 6b25460..c2c1ff5 100644 (file)
@@ -194,7 +194,7 @@ class InfoAction extends FormlessAction {
         */
        protected function pageInfo() {
                global $wgContLang, $wgRCMaxAge, $wgMemc, $wgMiserMode,
-                       $wgUnwatchedPageThreshold, $wgPageInfoTransclusionLimit;
+                       $wgUnwatchedPageThreshold, $wgPageInfoTransclusionLimit, $wgPageLanguageUseDB;
 
                $user = $this->getUser();
                $lang = $this->getLanguage();
@@ -275,7 +275,20 @@ class InfoAction extends FormlessAction {
 
                // Language in which the page content is (supposed to be) written
                $pageLang = $title->getPageLanguage()->getCode();
-               $pageInfo['header-basic'][] = array( $this->msg( 'pageinfo-language' ),
+
+               if ( $wgPageLanguageUseDB && $this->getTitle()->userCan( 'pagelang' ) ) {
+                       // Link to Special:PageLanguage with pre-filled page title if user has permissions
+                       $titleObj = SpecialPage::getTitleFor( 'PageLanguage', $title->getPrefixedText() );
+                       $langDisp = Linker::link(
+                               $titleObj,
+                               $this->msg( 'pageinfo-language' )->escaped()
+                       );
+               } else {
+                       // Display just the message
+                       $langDisp = $this->msg( 'pageinfo-language' )->escaped();
+               }
+
+               $pageInfo['header-basic'][] = array( $langDisp,
                        Language::fetchLanguageName( $pageLang, $lang->getCode() )
                        . ' ' . $this->msg( 'parentheses', $pageLang ) );
 
index 25a1714..d221799 100644 (file)
@@ -223,21 +223,6 @@ abstract class ApiBase extends ContextSource {
                return $this->getResult()->getData();
        }
 
-       /**
-        * Create a new RequestContext object to use e.g. for calls to other parts
-        * the software.
-        * The object will have the WebRequest and the User object set to the ones
-        * used in this instance.
-        *
-        * @deprecated since 1.19 use getContext to get the current context
-        * @return DerivativeContext
-        */
-       public function createContext() {
-               wfDeprecated( __METHOD__, '1.19' );
-
-               return new DerivativeContext( $this->getContext() );
-       }
-
        /**
         * Set warning section for this module. Users should monitor this
         * section to notice any changes in API. Multiple calls to this
index a276117..9dc4d03 100644 (file)
@@ -325,7 +325,7 @@ class ApiParse extends ApiBase {
                if ( isset( $prop['headitems'] ) || isset( $prop['headhtml'] ) ) {
                        $context = $this->getContext();
                        $context->setTitle( $titleObj );
-                       $context->getOutput()->addParserOutputNoText( $p_result );
+                       $context->getOutput()->addParserOutputMetadata( $p_result );
 
                        if ( isset( $prop['headitems'] ) ) {
                                $headItems = $this->formatHeadItems( $p_result->getHeadItems() );
@@ -436,6 +436,7 @@ class ApiParse extends ApiBase {
                $popts->enableLimitReport( !$params['disablepp'] );
                $popts->setIsPreview( $params['preview'] || $params['sectionpreview'] );
                $popts->setIsSectionPreview( $params['sectionpreview'] );
+               $popts->setEditSection( !$params['disableeditsection'] );
 
                wfProfileOut( __METHOD__ );
 
@@ -748,6 +749,7 @@ class ApiParse extends ApiBase {
                        'uselang' => null,
                        'section' => null,
                        'disablepp' => false,
+                       'disableeditsection' => false,
                        'generatexml' => false,
                        'preview' => false,
                        'sectionpreview' => false,
@@ -816,6 +818,7 @@ class ApiParse extends ApiBase {
                        'uselang' => 'Which language to parse the request in',
                        'section' => 'Only retrieve the content of this section number',
                        'disablepp' => 'Disable the PP Report from the parser output',
+                       'disableeditsection' => 'Disable edit section links from the parser output',
                        'generatexml' => "Generate XML parse tree (requires contentmodel=$wikitext)",
                        'preview' => 'Parse in preview mode',
                        'sectionpreview' => 'Parse in section preview mode (enables preview mode too)',
index 3067006..e4078d5 100644 (file)
@@ -813,7 +813,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                        ApiBase::PROP_NULLABLE => true
                                ),
                                'logtype' => array(
-                                       ApiBase::PROP_TYPE => $config->get( 'LogTypes' ),
+                                       ApiBase::PROP_TYPE => $this->getConfig()->get( 'LogTypes' ),
                                        ApiBase::PROP_NULLABLE => true
                                ),
                                'logaction' => array(
index 48a4ef4..aacf091 100644 (file)
@@ -385,6 +385,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
                $getPrefixes = Interwiki::getAllPrefixes( $local );
                $extraLangPrefixes = $this->getConfig()->get( 'ExtraInterlanguageLinkPrefixes' );
+               $localInterwikis = $this->getConfig()->get( 'LocalInterwikis' );
                $data = array();
 
                foreach ( $getPrefixes as $row ) {
@@ -401,6 +402,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        if ( isset( $langNames[$prefix] ) ) {
                                $val['language'] = $langNames[$prefix];
                        }
+                       if ( in_array( $prefix, $localInterwikis ) ) {
+                               $val['localinterwiki'] = '';
+                       }
                        if ( in_array( $prefix, $extraLangPrefixes ) ) {
                                $val['extralanglink'] = '';
 
@@ -552,6 +556,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                if ( isset( $ext['name'] ) ) {
                                        $ret['name'] = $ext['name'];
                                }
+                               if ( isset( $ext['namemsg'] ) ) {
+                                       $ret['namemsg'] = $ext['namemsg'];
+                               }
                                if ( isset( $ext['description'] ) ) {
                                        $ret['description'] = $ext['description'];
                                }
index a3cf87e..e5afd21 100644 (file)
@@ -1025,7 +1025,7 @@ class MessageCache {
                        $wgParser->firstCallInit();
                        # Clone it and store it
                        $class = $wgParserConf['class'];
-                       if ( $class == 'Parser_DiffTest' ) {
+                       if ( $class == 'ParserDiffTest' ) {
                                # Uncloneable
                                $this->mParser = new $class( $wgParserConf );
                        } else {
index 61a76b7..0d7f3f0 100644 (file)
@@ -69,7 +69,7 @@ class GlobalVarConfig implements Config {
         */
        protected function getWithPrefix( $prefix, $name ) {
                $var = $prefix . $name;
-               if ( !isset( $GLOBALS[ $var ] ) ) {
+               if ( !array_key_exists( $var, $GLOBALS ) ) {
                        throw new ConfigException( __METHOD__ . ": undefined variable: '$var'" );
                }
                return $GLOBALS[ $var ];
index edf9e1d..f550e9e 100644 (file)
@@ -237,17 +237,6 @@ class DerivativeContext extends ContextSource {
                }
        }
 
-       /**
-        * Set the Language object
-        *
-        * @deprecated since 1.19 Use setLanguage instead
-        * @param Language|string $l Language instance or language code
-        */
-       public function setLang( $l ) {
-               wfDeprecated( __METHOD__, '1.19' );
-               $this->setLanguage( $l );
-       }
-
        /**
         * Set the Language object
         *
index 1754a9d..d4bf0b4 100644 (file)
@@ -68,6 +68,11 @@ class RequestContext implements IContextSource {
         */
        private $config;
 
+       /**
+        * @var RequestContext
+        */
+       private static $instance = null;
+
        /**
         * Set the Config object
         *
@@ -268,17 +273,6 @@ class RequestContext implements IContextSource {
                return $code;
        }
 
-       /**
-        * Set the Language object
-        *
-        * @deprecated since 1.19 Use setLanguage instead
-        * @param Language|string $l Language instance or language code
-        */
-       public function setLang( $l ) {
-               wfDeprecated( __METHOD__, '1.19' );
-               $this->setLanguage( $l );
-       }
-
        /**
         * Set the Language object
         *
@@ -319,22 +313,28 @@ class RequestContext implements IContextSource {
 
                        global $wgLanguageCode, $wgContLang;
 
-                       $request = $this->getRequest();
-                       $user = $this->getUser();
+                       try {
+                               $request = $this->getRequest();
+                               $user = $this->getUser();
 
-                       $code = $request->getVal( 'uselang', $user->getOption( 'language' ) );
-                       $code = self::sanitizeLangCode( $code );
+                               $code = $request->getVal( 'uselang', $user->getOption( 'language' ) );
+                               $code = self::sanitizeLangCode( $code );
 
-                       wfRunHooks( 'UserGetLanguageObject', array( $user, &$code, $this ) );
+                               wfRunHooks( 'UserGetLanguageObject', array( $user, &$code, $this ) );
 
-                       if ( $code === $wgLanguageCode ) {
-                               $this->lang = $wgContLang;
-                       } else {
-                               $obj = Language::factory( $code );
-                               $this->lang = $obj;
-                       }
+                               if ( $code === $wgLanguageCode ) {
+                                       $this->lang = $wgContLang;
+                               } else {
+                                       $obj = Language::factory( $code );
+                                       $this->lang = $obj;
+                               }
 
-                       unset( $this->recursion );
+                               unset( $this->recursion );
+                       }
+                       catch ( Exception $ex ) {
+                               unset( $this->recursion );
+                               throw $ex;
+                       }
                }
 
                return $this->lang;
@@ -416,12 +416,21 @@ class RequestContext implements IContextSource {
         * @return RequestContext
         */
        public static function getMain() {
-               static $instance = null;
-               if ( $instance === null ) {
-                       $instance = new self;
+               if ( self::$instance === null ) {
+                       self::$instance = new self;
                }
 
-               return $instance;
+               return self::$instance;
+       }
+
+       /**
+        * Resets singleton returned by getMain(). Should be called only from unit tests.
+        */
+       public static function resetMain() {
+               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+                       throw new MWException( __METHOD__ . '() should be called only from unit tests!' );
+               }
+               self::$instance = null;
        }
 
        /**
index 4eb6ff3..3690735 100644 (file)
  * functions. In general, objects should assume READ_NORMAL if no flags are explicitly given,
  * though certain objects may assume READ_LATEST for common use case or legacy reasons.
  *
- * There are three types of reads:
- *   - READ_NORMAL  : Potentially cached read of data (e.g. from a slave or stale replica)
- *   - READ_LATEST  : Up-to-date read as of transaction start (e.g. from master or a quorum read)
- *   - READ_LOCKING : Up-to-date read as of now, that locks the records for the transaction
+ * There are four types of reads:
+ *   - READ_NORMAL    : Potentially cached read of data (e.g. from a slave or stale replica)
+ *   - READ_LATEST    : Up-to-date read as of transaction start (e.g. from master or a quorum read)
+ *   - READ_LOCKING   : Up-to-date read as of now, that locks (shared) the records
+ *   - READ_EXCLUSIVE : Up-to-date read as of now, that locks (exclusive) the records
+ * All record locks persist for the duration of the transaction.
  *
  * Callers should use READ_NORMAL (or pass in no flags) unless the read determines a write.
  * In theory, such cases may require READ_LOCKING, though to avoid contention, READ_LATEST is
@@ -47,7 +49,8 @@
 interface IDBAccessObject {
        // Constants for object loading bitfield flags (higher => higher QoS)
        const READ_LATEST = 1; // read from the master
-       const READ_LOCKING = 3; // READ_LATEST and "FOR UPDATE"
+       const READ_LOCKING = 3; // READ_LATEST (1) and "LOCK IN SHARE MODE" (2)
+       const READ_EXCLUSIVE = 7; // READ_LOCKING (3) and "FOR UPDATE" (4)
 
        // Convenience constant for callers to explicitly request slave data
        const READ_NORMAL = 0; // read from the slave
index 3017ea8..9eb3e2f 100644 (file)
@@ -91,6 +91,11 @@ class CloneDatabase {
                        if ( $this->dropCurrentTables
                                && !in_array( $this->db->getType(), array( 'postgres', 'oracle' ) )
                        ) {
+                               if ( $oldTableName === $newTableName ) {
+                                       // Last ditch check to avoid data loss
+                                       throw new MWException( "Not dropping new table, as '$newTableName'"
+                                               . " is name of both the old and the new table." );
+                               }
                                $this->db->dropTable( $tbl, __METHOD__ );
                                wfDebug( __METHOD__ . " dropping {$newTableName}\n" );
                                //Dropping the oldTable because the prefix was changed
index 7bbcc2f..699ab71 100644 (file)
@@ -268,6 +268,13 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         */
        protected $mTrxLevel = 0;
 
+       /**
+        * Either a short hexidecimal string if a transaction is active or ""
+        *
+        * @var string
+        */
+       protected $mTrxShortId = '';
+
        /**
         * Remembers the function name given for starting the most recent transaction via begin().
         * Used to provide additional context for error reporting.
@@ -1054,8 +1061,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                # Keep track of whether the transaction has write queries pending
                if ( $this->mTrxLevel && !$this->mTrxDoneWrites && $this->isWriteQuery( $sql ) ) {
                        $this->mTrxDoneWrites = true;
-                       $id = spl_object_hash( $this );
-                       Profiler::instance()->transactionWritingIn( $this->mServer, $this->mDBname, $id );
+                       Profiler::instance()->transactionWritingIn(
+                               $this->mServer, $this->mDBname, $this->mTrxShortId );
                }
 
                $queryProf = '';
@@ -1072,6 +1079,10 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                $queryProf = 'query: ' . substr( DatabaseBase::generalizeSQL( $sql ), 0, 255 );
                                $totalProf = 'DatabaseBase::query';
                        }
+                       # Include query transaction state
+                       $queryProf .= $this->mTrxShortId ? " [TRX#{$this->mTrxShortId}]" : "";
+
+                       $trx = $this->mTrxLevel ? 'TRX=yes' : 'TRX=no';
                        wfProfileIn( $totalProf );
                        wfProfileIn( $queryProf );
                }
@@ -3412,8 +3423,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        $this->runOnTransactionPreCommitCallbacks();
                        $this->doCommit( $fname );
                        if ( $this->mTrxDoneWrites ) {
-                               $id = spl_object_hash( $this );
-                               Profiler::instance()->transactionWritingOut( $this->mServer, $this->mDBname, $id );
+                               Profiler::instance()->transactionWritingOut(
+                                       $this->mServer, $this->mDBname, $this->mTrxShortId );
                        }
                        $this->runOnTransactionIdleCallbacks();
                }
@@ -3431,6 +3442,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                $this->mTrxAtomicLevels = new SplStack;
                $this->mTrxIdleCallbacks = array();
                $this->mTrxPreCommitCallbacks = array();
+               $this->mTrxShortId = wfRandomString( 12 );
        }
 
        /**
@@ -3467,17 +3479,18 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        );
                }
 
-               if ( $flush !== 'flush' ) {
+               if ( $flush === 'flush' ) {
                        if ( !$this->mTrxLevel ) {
-                               wfWarn( "$fname: No transaction to commit, something got out of sync!" );
-                       } elseif ( $this->mTrxAutomatic ) {
-                               wfWarn( "$fname: Explicit commit of implicit transaction. Something may be out of sync!" );
+                               return; // nothing to do
+                       } elseif ( !$this->mTrxAutomatic ) {
+                               wfWarn( "$fname: Flushing an explicit transaction, getting out of sync!" );
                        }
                } else {
                        if ( !$this->mTrxLevel ) {
+                               wfWarn( "$fname: No transaction to commit, something got out of sync!" );
                                return; // nothing to do
-                       } elseif ( !$this->mTrxAutomatic ) {
-                               wfWarn( "$fname: Flushing an explicit transaction, getting out of sync!" );
+                       } elseif ( $this->mTrxAutomatic ) {
+                               wfWarn( "$fname: Explicit commit of implicit transaction. Something may be out of sync!" );
                        }
                }
 
@@ -3489,8 +3502,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                $this->runOnTransactionPreCommitCallbacks();
                $this->doCommit( $fname );
                if ( $this->mTrxDoneWrites ) {
-                       $id = spl_object_hash( $this );
-                       Profiler::instance()->transactionWritingOut( $this->mServer, $this->mDBname, $id );
+                       Profiler::instance()->transactionWritingOut(
+                               $this->mServer, $this->mDBname, $this->mTrxShortId );
                }
                $this->runOnTransactionIdleCallbacks();
        }
@@ -3525,6 +3538,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                if ( $flush !== 'flush' ) {
                        if ( !$this->mTrxLevel ) {
                                wfWarn( "$fname: No transaction to rollback, something got out of sync!" );
+                               return; // nothing to do
                        } elseif ( $this->mTrxAutomatic ) {
                                wfWarn( "$fname: Explicit rollback of implicit transaction. Something may be out of sync!" );
                        }
@@ -3546,8 +3560,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                $this->mTrxPreCommitCallbacks = array(); // cancel
                $this->mTrxAtomicLevels = new SplStack;
                if ( $this->mTrxDoneWrites ) {
-                       $id = spl_object_hash( $this );
-                       Profiler::instance()->transactionWritingOut( $this->mServer, $this->mDBname, $id );
+                       Profiler::instance()->transactionWritingOut(
+                               $this->mServer, $this->mDBname, $this->mTrxShortId );
                }
        }
 
index 837d094..cf37736 100644 (file)
@@ -637,47 +637,6 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                }
        }
 
-       /**
-        * @deprecated since 1.19, use getLagFromSlaveStatus
-        *
-        * @return bool|int
-        */
-       function getLagFromProcesslist() {
-               wfDeprecated( __METHOD__, '1.19' );
-               $res = $this->query( 'SHOW PROCESSLIST', __METHOD__ );
-               if ( !$res ) {
-                       return false;
-               }
-               # Find slave SQL thread
-               foreach ( $res as $row ) {
-                       /* This should work for most situations - when default db
-                        * for thread is not specified, it had no events executed,
-                        * and therefore it doesn't know yet how lagged it is.
-                        *
-                        * Relay log I/O thread does not select databases.
-                        */
-                       if ( $row->User == 'system user' &&
-                               $row->State != 'Waiting for master to send event' &&
-                               $row->State != 'Connecting to master' &&
-                               $row->State != 'Queueing master event to the relay log' &&
-                               $row->State != 'Waiting for master update' &&
-                               $row->State != 'Requesting binlog dump' &&
-                               $row->State != 'Waiting to reconnect after a failed master event read' &&
-                               $row->State != 'Reconnecting after a failed master event read' &&
-                               $row->State != 'Registering slave on master'
-                       ) {
-                               # This is it, return the time (except -ve)
-                               if ( $row->Time > 0x7fffffff ) {
-                                       return false;
-                               } else {
-                                       return $row->Time;
-                               }
-                       }
-               }
-
-               return false;
-       }
-
        /**
         * Wait for the slave to catch up to a given master position.
         * @todo Return values for this and base class are rubbish
index ee35c13..b3f9210 100644 (file)
@@ -414,11 +414,7 @@ class LoadBalancer {
        public function &getConnection( $i, $groups = array(), $wiki = false ) {
                wfProfileIn( __METHOD__ );
 
-               if ( $i == DB_LAST ) {
-                       wfProfileOut( __METHOD__ );
-                       throw new MWException( 'Attempt to call ' . __METHOD__ .
-                               ' with deprecated server index DB_LAST' );
-               } elseif ( $i === null || $i === false ) {
+               if ( $i === null || $i === false ) {
                        wfProfileOut( __METHOD__ );
                        throw new MWException( 'Attempt to call ' . __METHOD__ .
                                ' with invalid server index' );
@@ -872,17 +868,6 @@ class LoadBalancer {
                );
        }
 
-       /**
-        * Deprecated function, typo in function name
-        *
-        * @deprecated since 1.18
-        * @param DatabaseBase $conn
-        */
-       function closeConnecton( $conn ) {
-               wfDeprecated( __METHOD__, '1.18' );
-               $this->closeConnection( $conn );
-       }
-
        /**
         * Close a connection
         * Using this function makes sure the LoadBalancer knows the connection is closed.
index 2117010..0cea658 100644 (file)
@@ -513,6 +513,7 @@ class MWDebug {
                $result->setIndexedTagName( $debugInfo['debugLog'], 'msg' );
                $result->setIndexedTagName( $debugInfo['queries'], 'query' );
                $result->setIndexedTagName( $debugInfo['includes'], 'queries' );
+               $result->setIndexedTagName( $debugInfo['profile'], 'function' );
                $result->addValue( null, 'debuginfo', $debugInfo );
        }
 
index 9ae9034..20f348a 100644 (file)
@@ -81,10 +81,10 @@ class SearchUpdate implements DeferrableUpdate {
                wfProfileIn( __METHOD__ );
 
                $page = WikiPage::newFromId( $this->id, WikiPage::READ_LATEST );
-               $indexTitle = $this->indexTitle();
 
                foreach ( SearchEngine::getSearchTypes() as $type ) {
                        $search = SearchEngine::create( $type );
+                       $indexTitle = $this->indexTitle( $search );
                        if ( !$search->supports( 'search-update' ) ) {
                                continue;
                        }
@@ -181,13 +181,13 @@ class SearchUpdate implements DeferrableUpdate {
         *
         * @return string A stripped-down title string ready for the search index
         */
-       private function indexTitle() {
+       private function indexTitle( SearchEngine $search ) {
                global $wgContLang;
 
                $ns = $this->title->getNamespace();
                $title = $this->title->getText();
 
-               $lc = SearchEngine::legalSearchChars() . '&#;';
+               $lc = $search->legalSearchChars() . '&#;';
                $t = $wgContLang->normalizeForSearch( $title );
                $t = preg_replace( "/[^{$lc}]+/", ' ', $t );
                $t = $wgContLang->lc( $t );
index ac8f758..db7318f 100644 (file)
@@ -60,6 +60,8 @@ class TableDiffFormatter extends DiffFormatter {
         * @return string
         */
        protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
+               // '<!--LINE \d+ -->' get replaced by a localised line number
+               // in DifferenceEngine::localiseLineNumbers
                $r = '<tr><td colspan="2" class="diff-lineno"><!--LINE ' . $xbeg . "--></td>\n" .
                        '<td colspan="2" class="diff-lineno"><!--LINE ' . $ybeg . "--></td></tr>\n";
 
index 39da597..8d2b949 100644 (file)
@@ -221,17 +221,6 @@ abstract class ImageGalleryBase extends ContextSource {
        public function setAdditionalOptions( $options ) {
        }
 
-       /**
-        * Instruct the class to use a specific skin for rendering
-        *
-        * @param Skin $skin
-        * @deprecated since 1.18 Not used anymore
-        */
-       function useSkin( $skin ) {
-               wfDeprecated( __METHOD__, '1.18' );
-               /* no op */
-       }
-
        /**
         * Add an image to the gallery.
         *
old mode 100755 (executable)
new mode 100644 (file)
index 175088d..296de96 100644 (file)
@@ -304,15 +304,6 @@ class HTMLForm extends ContextSource {
                return $this->displayFormat === 'vform';
        }
 
-       /**
-        * Add the HTMLForm-specific JavaScript, if it hasn't been
-        * done already.
-        * @deprecated since 1.18 load modules with ResourceLoader instead
-        */
-       static function addJS() {
-               wfDeprecated( __METHOD__, '1.18' );
-       }
-
        /**
         * Get the HTMLFormField subclass for this descriptor.
         *
index 0e1860b..8076e8a 100644 (file)
@@ -504,7 +504,7 @@ abstract class HTMLFormField {
                );
                $divCssClasses = array( "mw-htmlform-field-$fieldType", $this->mClass, $errorClass );
                if ( $this->mParent->isVForm() ) {
-                       $divCssClasses[] = 'mw-ui-vform-div';
+                       $divCssClasses[] = 'mw-ui-vform-field';
                }
 
                $wrapperAttributes = array(
index 19b2f7c..65176dd 100644 (file)
@@ -26,7 +26,8 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
                        throw new MWException( 'HTMLSelectAndOtherField called without any options' );
                }
                if ( !in_array( 'other', $this->mOptions, true ) ) {
-                       $this->mOptions[$params['other']] = 'other';
+                       // Have 'other' always as first element
+                       $this->mOptions = array( $params['other'] => 'other' ) + $this->mOptions;
                }
                $this->mFlatOptions = self::flattenOptions( $this->getOptions() );
 
index a001c43..cbf7d12 100644 (file)
@@ -12,7 +12,8 @@ class HTMLSelectOrOtherField extends HTMLTextField {
                                isset( $params['other'] )
                                        ? $params['other']
                                        : wfMessage( 'htmlform-selectorother-other' )->text();
-                       $this->mOptions[$msg] = 'other';
+                       // Have 'other' always as first element
+                       $this->mOptions = array( $msg => 'other' ) + $this->mOptions;
                }
 
        }
index 82a358e..28dac46 100644 (file)
@@ -476,7 +476,8 @@ abstract class DatabaseUpdater {
        public function updateRowExists( $key ) {
                $row = $this->db->selectRow(
                        'updatelog',
-                       '1',
+                       # Bug 65813
+                       '1 AS X',
                        array( 'ul_key' => $key ),
                        __METHOD__
                );
index 5e89ca4..3c8a5b1 100644 (file)
@@ -221,9 +221,12 @@ class LocalSettingsGenerator {
                                                wfBoolToStr( $perm ) . ";\n";
                                }
                        }
-                       if ( $this->groupPermissions['*']['edit'] === false
-                               && $this->groupPermissions['*']['createaccount'] === false
-                               && $this->groupPermissions['*']['read'] !== false
+                       if ( ( isset( $this->groupPermissions['*']['edit'] ) &&
+                                       $this->groupPermissions['*']['edit'] === false )
+                               && ( isset( $this->groupPermissions['*']['createaccount'] ) &&
+                                       $this->groupPermissions['*']['createaccount'] === false )
+                               && ( isset( $this->groupPermissions['*']['read'] ) &&
+                                       $this->groupPermissions['*']['read'] !== false )
                        ) {
                                $noFollow = "\n# Set \$wgNoFollowLinks to true if you open up your wiki to editing by\n"
                                        . "# the general public and wish to apply nofollow to external links as a\n"
index f9c4287..d590a70 100644 (file)
@@ -41,6 +41,89 @@ class MssqlUpdater extends DatabaseUpdater {
                        array( 'addField', 'mwuser', 'user_password_expires', 'patch-user_password_expires.sql' ),
 
                        // 1.24
+                       array( 'addField', 'page', 'page_lang', 'patch-page-page_lang.sql'),
+                       // Constraint updates
+                       array( 'updateConstraints', 'category_types', 'categorylinks', 'cl_type' ),
+                       array( 'updateConstraints', 'major_mime', 'filearchive', 'fa_major_mime' ),
+                       array( 'updateConstraints', 'media_type', 'filearchive', 'fa_media_type' ),
+                       array( 'updateConstraints', 'major_mime', 'oldimage', 'oi_major_mime' ),
+                       array( 'updateConstraints', 'media_type', 'oldimage', 'oi_media_type' ),
+                       array( 'updateConstraints', 'major_mime', 'image', 'img_major_mime' ),
+                       array( 'updateConstraints', 'media_type', 'image', 'img_media_type' ),
+                       array( 'updateConstraints', 'media_type', 'uploadstash', 'us_media_type' ),
+                       // END: Constraint updates
                );
        }
+
+       /**
+        * Drops unnamed and creates named constraints following the pattern
+        * <column>_ckc
+        *
+        * @param string $constraintType
+        * @param string $table Name of the table to which the field belongs
+        * @param string $field Name of the field to modify
+        * @return bool False if patch is skipped.
+        */
+       protected function updateConstraints( $constraintType, $table, $field ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
+               $this->output( "...updating constraints on [$table].[$field] ..." );
+               $updateKey = "$field-$constraintType-ck";
+               if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
+                       $this->output( "...$table table does not exist, skipping modify field patch.\n" );
+                       return true;
+               } elseif ( !$this->db->fieldExists( $table, $field, __METHOD__ ) ) {
+                       $this->output( "...$field field does not exist in $table table, " .
+                               "skipping modify field patch.\n" );
+                       return true;
+               } elseif ( $this->updateRowExists( $updateKey ) ) {
+                       $this->output( "...$field in table $table already patched.\n" );
+                       return true;
+               }
+
+               # After all checks passed, start the update
+               $this->insertUpdateRow( $updateKey );
+               $path = 'named_constraints.sql';
+               $constraintMap = array(
+                       'category_types' =>
+                               "($field in('page', 'subcat', 'file'))",
+                       'major_mime'     =>
+                               "($field in('unknown', 'application', 'audio', 'image', 'text', 'video'," .
+                               " 'message', 'model', 'multipart'))",
+                       'media_type'     =>
+                               "($field in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA'," .
+                               "'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))"
+               );
+               $constraint = $constraintMap[$constraintType];
+
+               # and hack-in those variables that should be replaced
+               # in our template file right now
+               $this->db->setSchemaVars( array(
+                       'tableName'       => $table,
+                       'fieldName'       => $field,
+                       'checkConstraint' => $constraint,
+                       'wgDBname'        => $wgDBname,
+                       'wgDBmwschema'    => $wgDBmwschema,
+               ) );
+
+               # Full path from file name
+               $path = $this->db->patchPath( $path );
+
+               # No need for a cursor allowing result-iteration; just apply a patch
+               # store old value for re-setting later
+               $wasScrollable = $this->db->scrollableCursor( false );
+
+               # Apply patch
+               $this->db->sourceFile( $path );
+
+               # Reset DB instance to have original state
+               $this->db->setSchemaVars( false );
+               $this->db->scrollableCursor( $wasScrollable );
+
+               $this->output( "done.\n" );
+
+               return true;
+       }
 }
index 2f77021..853ee0b 100644 (file)
@@ -255,6 +255,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        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' ),
+                       array( 'addField', 'page', 'page_lang', 'patch-page_lang.sql' ),
                );
        }
 
index 0ef41fa..1846854 100644 (file)
@@ -49,13 +49,13 @@ class OracleUpdater extends DatabaseUpdater {
                        array( 'doRemoveNotNullEmptyDefaults' ),
                        array( 'addTable', 'user_former_groups', 'patch-user_former_groups.sql' ),
 
-                       //1.18
+                       // 1.18
                        array( 'addIndex', 'user', 'i02', 'patch-user_email_index.sql' ),
                        array( 'modifyField', 'user_properties', 'up_property', 'patch-up_property.sql' ),
                        array( 'addTable', 'uploadstash', 'patch-uploadstash.sql' ),
                        array( 'doRecentchangesFK2Cascade' ),
 
-                       //1.19
+                       // 1.19
                        array( 'addIndex', 'logging', 'i05', 'patch-logging_type_action_index.sql' ),
                        array( 'addField', 'revision', 'rev_sha1', 'patch-rev_sha1_field.sql' ),
                        array( 'addField', 'archive', 'ar_sha1', 'patch-ar_sha1_field.sql' ),
@@ -66,12 +66,12 @@ class OracleUpdater extends DatabaseUpdater {
                        array( 'addIndex', 'job', 'i02', 'patch-job_timestamp_index.sql' ),
                        array( 'doPageRestrictionsPKUKFix' ),
 
-                       //1.20
+                       // 1.20
                        array( 'addIndex', 'ipblocks', 'i05', 'patch-ipblocks_i05_index.sql' ),
                        array( 'addIndex', 'revision', 'i05', 'patch-revision_i05_index.sql' ),
                        array( 'dropField', 'category', 'cat_hidden', 'patch-cat_hidden.sql' ),
 
-                       //1.21
+                       // 1.21
                        array( 'addField', 'revision', 'rev_content_format',
                                'patch-revision-rev_content_format.sql' ),
                        array( 'addField', 'revision', 'rev_content_model',
@@ -93,14 +93,15 @@ class OracleUpdater extends DatabaseUpdater {
                        array( 'modifyField', 'user_former_groups', 'ufg_group',
                                'patch-ufg_group-length-increase-255.sql' ),
 
-                       //1.23
+                       // 1.23
                        array( 'addIndex', 'logging', 'i06', 'patch-logging_user_text_type_time_index.sql' ),
                        array( 'addIndex', 'logging', 'i07', 'patch-logging_user_text_time_index.sql' ),
                        array( 'addField', 'user', 'user_password_expires', 'patch-user_password_expire.sql' ),
                        array( 'addField', 'page', 'page_links_updated', 'patch-page_links_updated.sql' ),
                        array( 'addField', 'recentchanges', 'rc_source', 'patch-rc_source.sql' ),
 
-                       //1.24
+                       // 1.24
+                       array( 'addField', 'page', 'page_lang', 'patch-page-page_lang.sql' ),
 
                        // KEEP THIS AT THE BOTTOM!!
                        array( 'doRebuildDuplicateFunction' ),
index e8de7de..8404c2d 100644 (file)
@@ -414,6 +414,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addPgField', 'page_props', 'pp_sortkey', 'float NULL' ),
                        array( 'addPgIndex', 'page_props', 'pp_propname_sortkey_page',
                                        '( pp_propname, pp_sortkey, pp_page ) WHERE ( pp_sortkey IS NOT NULL )' ),
+                       array( 'addPgField', 'page', 'page_lang', 'TEXT default NULL' ),
                );
        }
 
index 111d654..cf3f065 100644 (file)
@@ -133,6 +133,7 @@ class SqliteUpdater extends DatabaseUpdater {
                        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' ),
+                       array( 'addField', 'page', 'page_lang', 'patch-page-page_lang.sql' ),
                );
        }
 
index 86db20f..d949a8d 100644 (file)
@@ -1,9 +1,13 @@
 {
        "@metadata": {
                "authors": [
-                       "Mucalexx"
+                       "Mucalexx",
+                       "Matthias Klostermayr"
                ]
        },
+       "config-desc": "As Installationsprogramm vo MediaWiki",
+       "config-title": "Installation vo MediaWiki $1",
+       "config-information": "Information",
        "mainpagetext": "'''MediaWiki is erfoigreich installird worn.'''",
        "mainpagedocfooter": "A Hüf zur da Benützung und Konfigurazion voh da Wiki-Software findst auf [//meta.wikimedia.org/wiki/Help:Contents Benützerhåndbuach].\n\n== Starthüfe ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Listen voh de Konfigurazionsvariaablen]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki-FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglisten voh de neichen MediaWiki-Versionen]"
 }
index 837cc0f..cd18c92 100644 (file)
        "config-license-none": "Keine Lizenzangabe in der Fußzeile",
        "config-license-cc-by-sa": "''Creative Commons'' „Namensnennung – Weitergabe unter gleichen Bedingungen“",
        "config-license-cc-by": "''Creative Commons'' „Namensnennung“",
-       "config-license-cc-by-nc-sa": "''Creative Commons'' „Namensnennung, nicht kommerziell – Weitergabe unter gleichen Bedingungen“",
+       "config-license-cc-by-nc-sa": "''Creative Commons'' „Namensnennung – nicht kommerziell – Weitergabe unter gleichen Bedingungen“",
        "config-license-cc-0": "''Creative Commons'' „Zero“ (Gemeinfreiheit)",
        "config-license-gfdl": "GNU-Lizenz für freie Dokumentation 1.3 oder höher",
        "config-license-pd": "Gemeinfreiheit",
index 1c46557..13b61ed 100644 (file)
@@ -32,7 +32,7 @@
        "config-db-port": "Andmebaasi port:",
        "config-invalid-db-type": "Vigane andmebaasi tüüp",
        "config-site-name": "Viki nimi:",
-       "config-site-name-blank": "Sisestage lehekülje nimi.",
+       "config-site-name-blank": "Sisesta võrgukoha nimi.",
        "config-project-namespace": "Projekti nimeruum:",
        "config-ns-generic": "Projekt",
        "config-admin-box": "Administraatorikonto",
index e0b9c11..101c19a 100644 (file)
        "config-install-done": "<strong>Complimenti!</strong>\nHai installato correttamente MediaWiki.\n\nIl programma di installazione ha generato un file <code>LocalSettings.php</code> che contiene tutte le impostazioni.\n\nDevi scaricarlo ed inserirlo nella directory base del tuo wiki (la stessa dove è presente index.php). Il download dovrebbe partire automaticamente.\n\nSe il download non si avvia, o se è stato annullato, puoi riavviarlo cliccando sul collegamento di seguito:\n\n$3\n\n<strong>Nota:</strong> se esci ora dall'installazione senza scaricare il file di configurazione che è stato generato, questo poi non sarà più disponibile in seguito.\n\nQuando hai fatto, puoi <strong>[$2 entrare nel tuo wiki]</strong>.",
        "config-download-localsettings": "Scarica <code>LocalSettings.php</code>",
        "config-help": "aiuto",
+       "config-help-tooltip": "fai clic per espandere",
        "config-nofile": "Il file \"$1\" non può essere trovato. È stato eliminato?",
        "config-extension-link": "Sapevi che il tuo wiki supporta le  [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions estensioni]?\n\nPuoi navigare tra le [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category estensioni per categoria].",
        "mainpagetext": "'''Installazione di MediaWiki completata correttamente.'''",
index 2b80e15..fbc2bbc 100644 (file)
        "config-help-restart": "你敢欲共你拍的佮保存的資料攏清掉,並且重開始安裝的動作?",
        "config-restart": "是,重來",
        "config-welcome": "=== 環境檢測 ===\n這馬欲做基本的檢測,看環境是毋是適合裝 MediaWiki。\n若你愛有支援,才裝會起來,請共遮的資訊記起來。",
+       "config-copyright": "=== 版權聲明佮授權條款 ===\n\n$1\n\n本程式是自由軟體;你會當照自由軟體基金會所發表的 GNU 通用公共授權條款規定,共本程式重新發佈抑是修改;無論你是照本授權條款的第二版抑第二版以後的任何版本(你會當家己選) 。\n\n本程式發佈的目的是希望會當提供幫助,但是 <strong>無負任何擔保責任</strong>;抑無表示講對 <strong>販賣性</strong> 抑 <strong>特定用途的適用性</strong> 的情形擔保。詳情請參照 GNU 通用公共授權。\n\n你應該已隨本程式收著 <doclink href=\"Copying\">GNU 通用公共授權條款的副本</doclink>;若無,請寫批通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [http://www.gnu.org/copyleft/gpl.html 線頂看]。",
+       "config-sidebar": "* [www.mediawiki.org/wiki/MediaWiki/zh-hant MediaWiki 頭頁]\n* [www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/zh 使用者指南]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/zh 管理者指南]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hant 四常問題集]\n----\n* <doclink href=Readme>讀我說明</doclink>\n* <doclink href=ReleaseNotes>發行說明</doclink>\n* <doclink href=Copying>版權聲明</doclink>\n* <doclink href=UpgradeDoc>升級</doclink>",
+       "config-env-good": "環境檢查已完成。\n你會當安裝 MediaWiki。",
+       "config-env-bad": "環境檢查已完成。\n你無法度安裝 MediaWiki。",
+       "config-env-php": "PHP $1 已經安裝。",
+       "config-env-php-toolow": "已經安裝 PHP $1。\n但是 MediaWiki 愛 PHP $2 抑較新的版本。",
+       "config-unicode-using-utf8": "用 Brion Vibber 的 utf8_normalize.so 做 Unicode 正規化。",
+       "config-unicode-using-intl": "用 [http://pecl.php.net/intl intl PECL 擴充套件] 做 Unicode 正規化。",
+       "config-unicode-pure-php-warning": "<strong>警告:</strong> 無法度用 [http://pecl.php.net/intl intl PECL 擴充套件] 處理 Unicode 正規化,所以退回用純 PHP 實作的正規化程式,這種方式處理速度較慢。\n\n若你的網站瀏覽人數誠濟,你應該先看 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/zh Unicode 正規化]。",
+       "config-unicode-update-warning": "<strong>警告</strong>:這馬安裝的 Unicode 正規化包裝程式用舊版 [http://site.icu-project.org/ ICU 計劃] 的程式庫。\n若你需要用 Unicode,你應該先進行 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 升級]。",
+       "config-no-db": "揣無適合的資料庫驅動程式!你需要安裝 PHP 資料庫驅動程式。\n這馬支援下跤類型的資料庫: $1 。\n\n若你是家己編譯 PHP,你需要重新設定並且開資料庫客戶端,譬如:用 <code>./configure --with-mysqli</code> 指令參數。\n如你是用 Debian 或 Ubuntu 的套件安裝,你著需要閣另外安裝,例:<code>php5-mysql</code> 套件。",
+       "config-outdated-sqlite": "<strong>警告:</strong>你已經安裝 SQLite $1,毋閣伊的版本比會當裝的版本 $2閣較舊。所以你無法度用 SQLite。",
+       "config-no-fts3": "<strong>警告:</strong> SQLite 佇編譯的時陣無包括 [//sqlite.org/fts3.html FTS3 模組],後台搜揣功能就會無法度用。",
        "mainpagetext": "'''MediaWiki已經裝好矣。'''",
        "mainpagedocfooter": "請查看[//meta.wikimedia.org/wiki/Help:Contents 用者說明書]的資料通使用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的公布列單]"
 }
index 2ff58ab..6ec8860 100644 (file)
@@ -72,6 +72,7 @@
        "config-db-install-account": "Yükleme için kullanıcı hesabı",
        "config-db-username": "Veritabanı kullanıcı adı:",
        "config-db-password": "Veritabanı parolası:",
+       "config-db-username-empty": "\"{{int:config-db-username}}\" için bir değer girmelisiniz.",
        "config-db-install-username": "Yükleme sırasında veritabanına bağlanmak için kullanılan kullanıcı adını girin.\nBu MediaWiki hesabının kullanıcı adı değildir; Bu veritabanın kullanıcı adıdır.",
        "config-db-wiki-account": "Kullanıcı hesabı için normal işlem",
        "config-db-prefix": "Veritabanı Tablo öneki:",
        "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-usertalk": "Kullanıcı mesaj sayfası bildirimlerini etkinleştir",
        "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",
diff --git a/includes/installer/i18n/tyv.json b/includes/installer/i18n/tyv.json
new file mode 100644 (file)
index 0000000..1652bcf
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Agilight"
+               ]
+       },
+       "config-page-welcome": "MediaWiki-же кирип моорлаңар!"
+}
index 10277e6..6b10ae4 100644 (file)
@@ -40,6 +40,7 @@ class CSSMin {
        const EMBED_SIZE_LIMIT = 24576;
        const URL_REGEX = 'url\(\s*[\'"]?(?P<file>[^\?\)\'"]*?)(?P<query>\?[^\)\'"]*?|)[\'"]?\s*\)';
        const EMBED_REGEX = '\/\*\s*\@embed\s*\*\/';
+       const COMMENT_REGEX = '\/\*.*?\*\/';
 
        /* Protected Static Members */
 
@@ -203,13 +204,31 @@ class CSSMin {
                        $remote = substr( $remote, 0, -1 );
                }
 
+               // Replace all comments by a placeholder so they will not interfere
+               // with the remapping
+               // Warning: This will also catch on anything looking like the start of
+               // a comment between quotation marks (e.g. "foo /* bar").
+               $comments = array();
+               $placeholder = uniqid( '', true );
+
+               $pattern = '/(?!' . CSSMin::EMBED_REGEX . ')(' . CSSMin::COMMENT_REGEX . ')/s';
+
+               $source = preg_replace_callback(
+                       $pattern,
+                       function ( $match ) use ( &$comments, $placeholder ) {
+                               $comments[] = $match[ 0 ];
+                               return $placeholder . ( count( $comments ) - 1 ) . 'x';
+                       },
+                       $source
+               );
+
                // Note: This will not correctly handle cases where ';', '{' or '}'
                // appears in the rule itself, e.g. in a quoted string. You are advised
                // not to use such characters in file names. We also match start/end of
                // the string to be consistent in edge-cases ('@import url(…)').
                $pattern = '/(?:^|[;{])\K[^;{}]*' . CSSMin::URL_REGEX . '[^;}]*(?=[;}]|$)/';
 
-               return preg_replace_callback(
+               $source = preg_replace_callback(
                        $pattern,
                        function ( $matchOuter ) use ( $local, $remote, $embedData ) {
                                $rule = $matchOuter[0];
@@ -262,6 +281,15 @@ class CSSMin {
                                        return $ruleWithRemapped;
                                }
                        }, $source );
+
+               // Re-insert comments
+               $pattern = '/' . $placeholder . '(\d+)x/';
+               $source = preg_replace_callback( $pattern, function( $match ) use ( &$comments ) {
+                       return $comments[ $match[1] ];
+               }, $source );
+
+               return $source;
+
        }
 
        /**
index fda9a20..4ce8070 100644 (file)
@@ -68,25 +68,6 @@ class LogEventsList extends ContextSource {
                return $this->getTitle();
        }
 
-       /**
-        * Set page title and show header for this log type
-        * @param array $type
-        * @deprecated since 1.19
-        */
-       public function showHeader( $type ) {
-               wfDeprecated( __METHOD__, '1.19' );
-               // If only one log type is used, then show a special message...
-               $headerType = count( $type ) == 1 ? $type[0] : '';
-               $out = $this->getOutput();
-               if ( LogPage::isLogType( $headerType ) ) {
-                       $page = new LogPage( $headerType );
-                       $out->setPageTitle( $page->getName()->text() );
-                       $out->addHTML( $page->getDescription()->parseAsBlock() );
-               } else {
-                       $out->addHTML( $this->msg( 'alllogstext' )->parse() );
-               }
-       }
-
        /**
         * Show options for the log list
         *
diff --git a/includes/logging/PageLangLogFormatter.php b/includes/logging/PageLangLogFormatter.php
new file mode 100644 (file)
index 0000000..694fa7f
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Formatter for changelang log entries.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Kunal Grover
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.24
+ */
+
+/**
+ * This class formats language change log entries.
+ *
+ * @since 1.24
+ */
+class PageLangLogFormatter extends LogFormatter {
+       protected function getMessageParameters() {
+               // Get the user language for displaying language names
+               $userLang = $this->context->getLanguage()->getCode();
+               $params = parent::getMessageParameters();
+
+               // Get the language codes from log
+               $oldLang = $params[3];
+               $kOld = strrpos( $oldLang, '[' );
+               if ( $kOld ) {
+                       $oldLang = substr( $oldLang, 0, $kOld );
+               }
+
+               $newLang = $params[4];
+               $kNew = strrpos( $newLang, '[' );
+               if ( $kNew ) {
+                       $newLang = substr( $newLang, 0, $kNew );
+               }
+
+               // Convert language codes to names in user language
+               $logOld = Language::fetchLanguageName( $oldLang, $userLang )
+                       . ' (' . $oldLang . ')';
+               $logNew = Language::fetchLanguageName( $newLang, $userLang )
+                       . ' (' . $newLang . ')';
+
+               // Add the default message to languages if required
+               $params[3] = !$kOld ? $logOld : $logOld . ' [' . $this->msg( 'default' ) . ']';
+               $params[4] = !$kNew ? $logNew : $logNew . ' [' . $this->msg( 'default' ) . ']';
+               return $params;
+       }
+}
index 56f1be2..dca5f32 100644 (file)
@@ -338,7 +338,7 @@ abstract class BagOStuff {
         */
        public function incrWithInit( $key, $ttl, $value = 1, $init = 1 ) {
                return $this->incr( $key, $value ) ||
-                       $this->add( $key, $init, $ttl ) || $this->incr( $key, $value );
+                       $this->add( $key, (int)$init, $ttl ) || $this->incr( $key, $value );
        }
 
        /**
index e770b73..c7d2f13 100644 (file)
@@ -298,9 +298,9 @@ class RedisBagOStuff extends BagOStuff {
         * command. But we are constrained by the memcached-like interface to
         * return null in that case. Once the key exists, further increments are
         * atomic.
-        * @param string $key
-        * @param int $value
-        * @param bool|mixed
+        * @param string $key Key to increase
+        * @param int $value Value to add to $key (Default 1)
+        * @return int|bool New value or false on failure
         */
        public function incr( $key, $value = 1 ) {
                $section = new ProfileSection( __METHOD__ );
@@ -313,7 +313,7 @@ class RedisBagOStuff extends BagOStuff {
                        return null;
                }
                try {
-                       $result = $this->unserialize( $conn->incrBy( $key, $value ) );
+                       $result = $conn->incrBy( $key, $value );
                } catch ( RedisException $e ) {
                        $result = false;
                        $this->handleException( $conn, $e );
@@ -322,14 +322,14 @@ class RedisBagOStuff extends BagOStuff {
                $this->logRequest( 'incr', $key, $server, $result );
                return $result;
        }
-
        /**
         * @param mixed $data
         * @return string
         */
        protected function serialize( $data ) {
-               // Ignore digit strings and ints so INCR/DECR work
-               return ( is_int( $data ) || ctype_digit( $data ) ) ? $data : serialize( $data );
+               // Serialize anything but integers so INCR/DECR work
+               // Do not store integer-like strings as integers to avoid type confusion (bug 60563)
+               return is_int( $data ) ? $data : serialize( $data );
        }
 
        /**
@@ -337,8 +337,7 @@ class RedisBagOStuff extends BagOStuff {
         * @return mixed
         */
        protected function unserialize( $data ) {
-               // Ignore digit strings and ints so INCR/DECR work
-               return ( is_int( $data ) || ctype_digit( $data ) ) ? $data : unserialize( $data );
+               return ctype_digit( $data ) ? intval( $data ) : unserialize( $data );
        }
 
        /**
diff --git a/includes/page/Article.php b/includes/page/Article.php
new file mode 100644 (file)
index 0000000..0e989d3
--- /dev/null
@@ -0,0 +1,2111 @@
+<?php
+/**
+ * User interface for page actions.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Class for viewing MediaWiki article and history.
+ *
+ * This maintains WikiPage functions for backwards compatibility.
+ *
+ * @todo Move and rewrite code to an Action class
+ *
+ * See design.txt for an overview.
+ * Note: edit user interface and cache support functions have been
+ * moved to separate EditPage and HTMLFileCache classes.
+ *
+ * @internal documentation reviewed 15 Mar 2010
+ */
+class Article implements Page {
+       /** @var IContextSource The context this Article is executed in */
+       protected $mContext;
+
+       /** @var WikiPage The WikiPage object of this instance */
+       protected $mPage;
+
+       /** @var ParserOptions ParserOptions object for $wgUser articles */
+       public $mParserOptions;
+
+       /**
+        * @var string Text of the revision we are working on
+        * @todo BC cruft
+        */
+       public $mContent;
+
+       /**
+        * @var Content Content of the revision we are working on
+        * @since 1.21
+        */
+       protected $mContentObject;
+
+       /** @var bool Is the content ($mContent) already loaded? */
+       protected $mContentLoaded = false;
+
+       /** @var int|null The oldid of the article that is to be shown, 0 for the current revision */
+       protected $mOldId;
+
+       /** @var Title Title from which we were redirected here */
+       protected $mRedirectedFrom = null;
+
+       /** @var string|bool URL to redirect to or false if none */
+       protected $mRedirectUrl = false;
+
+       /** @var int Revision ID of revision we are working on */
+       protected $mRevIdFetched = 0;
+
+       /** @var Revision Revision we are working on */
+       protected $mRevision = null;
+
+       /** @var ParserOutput */
+       public $mParserOutput;
+
+       /**
+        * Constructor and clear the article
+        * @param Title $title Reference to a Title object.
+        * @param int $oldId Revision ID, null to fetch from request, zero for current
+        */
+       public function __construct( Title $title, $oldId = null ) {
+               $this->mOldId = $oldId;
+               $this->mPage = $this->newPage( $title );
+       }
+
+       /**
+        * @param Title $title
+        * @return WikiPage
+        */
+       protected function newPage( Title $title ) {
+               return new WikiPage( $title );
+       }
+
+       /**
+        * Constructor from a page id
+        * @param int $id Article ID to load
+        * @return Article|null
+        */
+       public static function newFromID( $id ) {
+               $t = Title::newFromID( $id );
+               # @todo FIXME: Doesn't inherit right
+               return $t == null ? null : new self( $t );
+               # return $t == null ? null : new static( $t ); // PHP 5.3
+       }
+
+       /**
+        * Create an Article object of the appropriate class for the given page.
+        *
+        * @param Title $title
+        * @param IContextSource $context
+        * @return Article
+        */
+       public static function newFromTitle( $title, IContextSource $context ) {
+               if ( NS_MEDIA == $title->getNamespace() ) {
+                       // FIXME: where should this go?
+                       $title = Title::makeTitle( NS_FILE, $title->getDBkey() );
+               }
+
+               $page = null;
+               wfRunHooks( 'ArticleFromTitle', array( &$title, &$page, $context ) );
+               if ( !$page ) {
+                       switch ( $title->getNamespace() ) {
+                               case NS_FILE:
+                                       $page = new ImagePage( $title );
+                                       break;
+                               case NS_CATEGORY:
+                                       $page = new CategoryPage( $title );
+                                       break;
+                               default:
+                                       $page = new Article( $title );
+                       }
+               }
+               $page->setContext( $context );
+
+               return $page;
+       }
+
+       /**
+        * Create an Article object of the appropriate class for the given page.
+        *
+        * @param WikiPage $page
+        * @param IContextSource $context
+        * @return Article
+        */
+       public static function newFromWikiPage( WikiPage $page, IContextSource $context ) {
+               $article = self::newFromTitle( $page->getTitle(), $context );
+               $article->mPage = $page; // override to keep process cached vars
+               return $article;
+       }
+
+       /**
+        * Tell the page view functions that this view was redirected
+        * from another page on the wiki.
+        * @param Title $from
+        */
+       public function setRedirectedFrom( Title $from ) {
+               $this->mRedirectedFrom = $from;
+       }
+
+       /**
+        * Get the title object of the article
+        *
+        * @return Title Title object of this page
+        */
+       public function getTitle() {
+               return $this->mPage->getTitle();
+       }
+
+       /**
+        * Get the WikiPage object of this instance
+        *
+        * @since 1.19
+        * @return WikiPage
+        */
+       public function getPage() {
+               return $this->mPage;
+       }
+
+       /**
+        * Clear the object
+        */
+       public function clear() {
+               $this->mContentLoaded = false;
+
+               $this->mRedirectedFrom = null; # Title object if set
+               $this->mRevIdFetched = 0;
+               $this->mRedirectUrl = false;
+
+               $this->mPage->clear();
+       }
+
+       /**
+        * Note that getContent/loadContent do not follow redirects anymore.
+        * If you need to fetch redirectable content easily, try
+        * the shortcut in WikiPage::getRedirectTarget()
+        *
+        * This function has side effects! Do not use this function if you
+        * only want the real revision text if any.
+        *
+        * @deprecated since 1.21; use WikiPage::getContent() instead
+        *
+        * @return string Return the text of this revision
+        */
+       public function getContent() {
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+               $content = $this->getContentObject();
+               return ContentHandler::getContentText( $content );
+       }
+
+       /**
+        * Returns a Content object representing the pages effective display content,
+        * not necessarily the revision's content!
+        *
+        * Note that getContent/loadContent do not follow redirects anymore.
+        * If you need to fetch redirectable content easily, try
+        * the shortcut in WikiPage::getRedirectTarget()
+        *
+        * This function has side effects! Do not use this function if you
+        * only want the real revision text if any.
+        *
+        * @return Content Return the content of this revision
+        *
+        * @since 1.21
+        */
+       protected function getContentObject() {
+               wfProfileIn( __METHOD__ );
+
+               if ( $this->mPage->getID() === 0 ) {
+                       # If this is a MediaWiki:x message, then load the messages
+                       # and return the message value for x.
+                       if ( $this->getTitle()->getNamespace() == NS_MEDIAWIKI ) {
+                               $text = $this->getTitle()->getDefaultMessageText();
+                               if ( $text === false ) {
+                                       $text = '';
+                               }
+
+                               $content = ContentHandler::makeContent( $text, $this->getTitle() );
+                       } else {
+                               $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
+                               $content = new MessageContent( $message, null, 'parsemag' );
+                       }
+               } else {
+                       $this->fetchContentObject();
+                       $content = $this->mContentObject;
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $content;
+       }
+
+       /**
+        * @return int The oldid of the article that is to be shown, 0 for the current revision
+        */
+       public function getOldID() {
+               if ( is_null( $this->mOldId ) ) {
+                       $this->mOldId = $this->getOldIDFromRequest();
+               }
+
+               return $this->mOldId;
+       }
+
+       /**
+        * Sets $this->mRedirectUrl to a correct URL if the query parameters are incorrect
+        *
+        * @return int The old id for the request
+        */
+       public function getOldIDFromRequest() {
+               $this->mRedirectUrl = false;
+
+               $request = $this->getContext()->getRequest();
+               $oldid = $request->getIntOrNull( 'oldid' );
+
+               if ( $oldid === null ) {
+                       return 0;
+               }
+
+               if ( $oldid !== 0 ) {
+                       # Load the given revision and check whether the page is another one.
+                       # In that case, update this instance to reflect the change.
+                       if ( $oldid === $this->mPage->getLatest() ) {
+                               $this->mRevision = $this->mPage->getRevision();
+                       } else {
+                               $this->mRevision = Revision::newFromId( $oldid );
+                               if ( $this->mRevision !== null ) {
+                                       // Revision title doesn't match the page title given?
+                                       if ( $this->mPage->getID() != $this->mRevision->getPage() ) {
+                                               $function = array( get_class( $this->mPage ), 'newFromID' );
+                                               $this->mPage = call_user_func( $function, $this->mRevision->getPage() );
+                                       }
+                               }
+                       }
+               }
+
+               if ( $request->getVal( 'direction' ) == 'next' ) {
+                       $nextid = $this->getTitle()->getNextRevisionID( $oldid );
+                       if ( $nextid ) {
+                               $oldid = $nextid;
+                               $this->mRevision = null;
+                       } else {
+                               $this->mRedirectUrl = $this->getTitle()->getFullURL( 'redirect=no' );
+                       }
+               } elseif ( $request->getVal( 'direction' ) == 'prev' ) {
+                       $previd = $this->getTitle()->getPreviousRevisionID( $oldid );
+                       if ( $previd ) {
+                               $oldid = $previd;
+                               $this->mRevision = null;
+                       }
+               }
+
+               return $oldid;
+       }
+
+       /**
+        * Load the revision (including text) into this object
+        *
+        * @deprecated since 1.19; use fetchContent()
+        */
+       function loadContent() {
+               wfDeprecated( __METHOD__, '1.19' );
+               $this->fetchContent();
+       }
+
+       /**
+        * Get text of an article from database
+        * Does *NOT* follow redirects.
+        *
+        * @protected
+        * @note This is really internal functionality that should really NOT be
+        * used by other functions. For accessing article content, use the WikiPage
+        * class, especially WikiBase::getContent(). However, a lot of legacy code
+        * uses this method to retrieve page text from the database, so the function
+        * has to remain public for now.
+        *
+        * @return string|bool String containing article contents, or false if null
+        * @deprecated since 1.21, use WikiPage::getContent() instead
+        */
+       function fetchContent() { #BC cruft!
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+
+               if ( $this->mContentLoaded && $this->mContent ) {
+                       return $this->mContent;
+               }
+
+               wfProfileIn( __METHOD__ );
+
+               $content = $this->fetchContentObject();
+
+               if ( !$content ) {
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               // @todo Get rid of mContent everywhere!
+               $this->mContent = ContentHandler::getContentText( $content );
+               ContentHandler::runLegacyHooks( 'ArticleAfterFetchContent', array( &$this, &$this->mContent ) );
+
+               wfProfileOut( __METHOD__ );
+
+               return $this->mContent;
+       }
+
+       /**
+        * Get text content object
+        * Does *NOT* follow redirects.
+        * @todo When is this null?
+        *
+        * @note Code that wants to retrieve page content from the database should
+        * use WikiPage::getContent().
+        *
+        * @return Content|null|bool
+        *
+        * @since 1.21
+        */
+       protected function fetchContentObject() {
+               if ( $this->mContentLoaded ) {
+                       return $this->mContentObject;
+               }
+
+               wfProfileIn( __METHOD__ );
+
+               $this->mContentLoaded = true;
+               $this->mContent = null;
+
+               $oldid = $this->getOldID();
+
+               # Pre-fill content with error message so that if something
+               # fails we'll have something telling us what we intended.
+               //XXX: this isn't page content but a UI message. horrible.
+               $this->mContentObject = new MessageContent( 'missing-revision', array( $oldid ), array() );
+
+               if ( $oldid ) {
+                       # $this->mRevision might already be fetched by getOldIDFromRequest()
+                       if ( !$this->mRevision ) {
+                               $this->mRevision = Revision::newFromId( $oldid );
+                               if ( !$this->mRevision ) {
+                                       wfDebug( __METHOD__ . " failed to retrieve specified revision, id $oldid\n" );
+                                       wfProfileOut( __METHOD__ );
+                                       return false;
+                               }
+                       }
+               } else {
+                       if ( !$this->mPage->getLatest() ) {
+                               wfDebug( __METHOD__ . " failed to find page data for title " .
+                                       $this->getTitle()->getPrefixedText() . "\n" );
+                               wfProfileOut( __METHOD__ );
+                               return false;
+                       }
+
+                       $this->mRevision = $this->mPage->getRevision();
+
+                       if ( !$this->mRevision ) {
+                               wfDebug( __METHOD__ . " failed to retrieve current page, rev_id " .
+                                       $this->mPage->getLatest() . "\n" );
+                               wfProfileOut( __METHOD__ );
+                               return false;
+                       }
+               }
+
+               // @todo FIXME: Horrible, horrible! This content-loading interface just plain sucks.
+               // We should instead work with the Revision object when we need it...
+               // Loads if user is allowed
+               $this->mContentObject = $this->mRevision->getContent(
+                       Revision::FOR_THIS_USER,
+                       $this->getContext()->getUser()
+               );
+               $this->mRevIdFetched = $this->mRevision->getId();
+
+               wfRunHooks( 'ArticleAfterFetchContentObject', array( &$this, &$this->mContentObject ) );
+
+               wfProfileOut( __METHOD__ );
+
+               return $this->mContentObject;
+       }
+
+       /**
+        * Returns true if the currently-referenced revision is the current edit
+        * to this page (and it exists).
+        * @return bool
+        */
+       public function isCurrent() {
+               # If no oldid, this is the current version.
+               if ( $this->getOldID() == 0 ) {
+                       return true;
+               }
+
+               return $this->mPage->exists() && $this->mRevision && $this->mRevision->isCurrent();
+       }
+
+       /**
+        * Get the fetched Revision object depending on request parameters or null
+        * on failure.
+        *
+        * @since 1.19
+        * @return Revision|null
+        */
+       public function getRevisionFetched() {
+               $this->fetchContentObject();
+
+               return $this->mRevision;
+       }
+
+       /**
+        * Use this to fetch the rev ID used on page views
+        *
+        * @return int Revision ID of last article revision
+        */
+       public function getRevIdFetched() {
+               if ( $this->mRevIdFetched ) {
+                       return $this->mRevIdFetched;
+               } else {
+                       return $this->mPage->getLatest();
+               }
+       }
+
+       /**
+        * This is the default action of the index.php entry point: just view the
+        * page of the given title.
+        */
+       public function view() {
+               global $wgUseFileCache, $wgUseETag, $wgDebugToolbar;
+
+               wfProfileIn( __METHOD__ );
+
+               # Get variables from query string
+               # As side effect this will load the revision and update the title
+               # in a revision ID is passed in the request, so this should remain
+               # the first call of this method even if $oldid is used way below.
+               $oldid = $this->getOldID();
+
+               $user = $this->getContext()->getUser();
+               # Another whitelist check in case getOldID() is altering the title
+               $permErrors = $this->getTitle()->getUserPermissionsErrors( 'read', $user );
+               if ( count( $permErrors ) ) {
+                       wfDebug( __METHOD__ . ": denied on secondary read check\n" );
+                       wfProfileOut( __METHOD__ );
+                       throw new PermissionsError( 'read', $permErrors );
+               }
+
+               $outputPage = $this->getContext()->getOutput();
+               # getOldID() may as well want us to redirect somewhere else
+               if ( $this->mRedirectUrl ) {
+                       $outputPage->redirect( $this->mRedirectUrl );
+                       wfDebug( __METHOD__ . ": redirecting due to oldid\n" );
+                       wfProfileOut( __METHOD__ );
+
+                       return;
+               }
+
+               # If we got diff in the query, we want to see a diff page instead of the article.
+               if ( $this->getContext()->getRequest()->getCheck( 'diff' ) ) {
+                       wfDebug( __METHOD__ . ": showing diff page\n" );
+                       $this->showDiffPage();
+                       wfProfileOut( __METHOD__ );
+
+                       return;
+               }
+
+               # Set page title (may be overridden by DISPLAYTITLE)
+               $outputPage->setPageTitle( $this->getTitle()->getPrefixedText() );
+
+               $outputPage->setArticleFlag( true );
+               # Allow frames by default
+               $outputPage->allowClickjacking();
+
+               $parserCache = ParserCache::singleton();
+
+               $parserOptions = $this->getParserOptions();
+               # Render printable version, use printable version cache
+               if ( $outputPage->isPrintable() ) {
+                       $parserOptions->setIsPrintable( true );
+                       $parserOptions->setEditSection( false );
+               } elseif ( !$this->isCurrent() || !$this->getTitle()->quickUserCan( 'edit', $user ) ) {
+                       $parserOptions->setEditSection( false );
+               }
+
+               # Try client and file cache
+               if ( !$wgDebugToolbar && $oldid === 0 && $this->mPage->checkTouched() ) {
+                       if ( $wgUseETag ) {
+                               $outputPage->setETag( $parserCache->getETag( $this, $parserOptions ) );
+                       }
+
+                       # Is it client cached?
+                       if ( $outputPage->checkLastModified( $this->mPage->getTouched() ) ) {
+                               wfDebug( __METHOD__ . ": done 304\n" );
+                               wfProfileOut( __METHOD__ );
+
+                               return;
+                       # Try file cache
+                       } elseif ( $wgUseFileCache && $this->tryFileCache() ) {
+                               wfDebug( __METHOD__ . ": done file cache\n" );
+                               # tell wgOut that output is taken care of
+                               $outputPage->disable();
+                               $this->mPage->doViewUpdates( $user, $oldid );
+                               wfProfileOut( __METHOD__ );
+
+                               return;
+                       }
+               }
+
+               # Should the parser cache be used?
+               $useParserCache = $this->mPage->isParserCacheUsed( $parserOptions, $oldid );
+               wfDebug( 'Article::view using parser cache: ' . ( $useParserCache ? 'yes' : 'no' ) . "\n" );
+               if ( $user->getStubThreshold() ) {
+                       wfIncrStats( 'pcache_miss_stub' );
+               }
+
+               $this->showRedirectedFromHeader();
+               $this->showNamespaceHeader();
+
+               # Iterate through the possible ways of constructing the output text.
+               # Keep going until $outputDone is set, or we run out of things to do.
+               $pass = 0;
+               $outputDone = false;
+               $this->mParserOutput = false;
+
+               while ( !$outputDone && ++$pass ) {
+                       switch ( $pass ) {
+                               case 1:
+                                       wfRunHooks( 'ArticleViewHeader', array( &$this, &$outputDone, &$useParserCache ) );
+                                       break;
+                               case 2:
+                                       # Early abort if the page doesn't exist
+                                       if ( !$this->mPage->exists() ) {
+                                               wfDebug( __METHOD__ . ": showing missing article\n" );
+                                               $this->showMissingArticle();
+                                               $this->mPage->doViewUpdates( $user );
+                                               wfProfileOut( __METHOD__ );
+                                               return;
+                                       }
+
+                                       # Try the parser cache
+                                       if ( $useParserCache ) {
+                                               $this->mParserOutput = $parserCache->get( $this, $parserOptions );
+
+                                               if ( $this->mParserOutput !== false ) {
+                                                       if ( $oldid ) {
+                                                               wfDebug( __METHOD__ . ": showing parser cache contents for current rev permalink\n" );
+                                                               $this->setOldSubtitle( $oldid );
+                                                       } else {
+                                                               wfDebug( __METHOD__ . ": showing parser cache contents\n" );
+                                                       }
+                                                       $outputPage->addParserOutput( $this->mParserOutput );
+                                                       # Ensure that UI elements requiring revision ID have
+                                                       # the correct version information.
+                                                       $outputPage->setRevisionId( $this->mPage->getLatest() );
+                                                       # Preload timestamp to avoid a DB hit
+                                                       $cachedTimestamp = $this->mParserOutput->getTimestamp();
+                                                       if ( $cachedTimestamp !== null ) {
+                                                               $outputPage->setRevisionTimestamp( $cachedTimestamp );
+                                                               $this->mPage->setTimestamp( $cachedTimestamp );
+                                                       }
+                                                       $outputDone = true;
+                                               }
+                                       }
+                                       break;
+                               case 3:
+                                       # This will set $this->mRevision if needed
+                                       $this->fetchContentObject();
+
+                                       # Are we looking at an old revision
+                                       if ( $oldid && $this->mRevision ) {
+                                               $this->setOldSubtitle( $oldid );
+
+                                               if ( !$this->showDeletedRevisionHeader() ) {
+                                                       wfDebug( __METHOD__ . ": cannot view deleted revision\n" );
+                                                       wfProfileOut( __METHOD__ );
+                                                       return;
+                                               }
+                                       }
+
+                                       # Ensure that UI elements requiring revision ID have
+                                       # the correct version information.
+                                       $outputPage->setRevisionId( $this->getRevIdFetched() );
+                                       # Preload timestamp to avoid a DB hit
+                                       $outputPage->setRevisionTimestamp( $this->getTimestamp() );
+
+                                       # Pages containing custom CSS or JavaScript get special treatment
+                                       if ( $this->getTitle()->isCssOrJsPage() || $this->getTitle()->isCssJsSubpage() ) {
+                                               wfDebug( __METHOD__ . ": showing CSS/JS source\n" );
+                                               $this->showCssOrJsPage();
+                                               $outputDone = true;
+                                       } elseif ( !wfRunHooks( 'ArticleContentViewCustom',
+                                                       array( $this->fetchContentObject(), $this->getTitle(), $outputPage ) ) ) {
+
+                                               # Allow extensions do their own custom view for certain pages
+                                               $outputDone = true;
+                                       } elseif ( !ContentHandler::runLegacyHooks( 'ArticleViewCustom',
+                                                       array( $this->fetchContentObject(), $this->getTitle(), $outputPage ) ) ) {
+
+                                               # Allow extensions do their own custom view for certain pages
+                                               $outputDone = true;
+                                       }
+                                       break;
+                               case 4:
+                                       # Run the parse, protected by a pool counter
+                                       wfDebug( __METHOD__ . ": doing uncached parse\n" );
+
+                                       $content = $this->getContentObject();
+                                       $poolArticleView = new PoolWorkArticleView( $this->getPage(), $parserOptions,
+                                               $this->getRevIdFetched(), $useParserCache, $content );
+
+                                       if ( !$poolArticleView->execute() ) {
+                                               $error = $poolArticleView->getError();
+                                               if ( $error ) {
+                                                       $outputPage->clearHTML(); // for release() errors
+                                                       $outputPage->enableClientCache( false );
+                                                       $outputPage->setRobotPolicy( 'noindex,nofollow' );
+
+                                                       $errortext = $error->getWikiText( false, 'view-pool-error' );
+                                                       $outputPage->addWikiText( '<div class="errorbox">' . $errortext . '</div>' );
+                                               }
+                                               # Connection or timeout error
+                                               wfProfileOut( __METHOD__ );
+                                               return;
+                                       }
+
+                                       $this->mParserOutput = $poolArticleView->getParserOutput();
+                                       $outputPage->addParserOutput( $this->mParserOutput );
+                                       if ( $content->getRedirectTarget() ) {
+                                               $outputPage->addSubtitle( wfMessage( 'redirectpagesub' )->parse() );
+                                       }
+
+                                       # Don't cache a dirty ParserOutput object
+                                       if ( $poolArticleView->getIsDirty() ) {
+                                               $outputPage->setSquidMaxage( 0 );
+                                               $outputPage->addHTML( "<!-- parser cache is expired, " .
+                                                       "sending anyway due to pool overload-->\n" );
+                                       }
+
+                                       $outputDone = true;
+                                       break;
+                               # Should be unreachable, but just in case...
+                               default:
+                                       break 2;
+                       }
+               }
+
+               # Get the ParserOutput actually *displayed* here.
+               # Note that $this->mParserOutput is the *current* version output.
+               $pOutput = ( $outputDone instanceof ParserOutput )
+                       ? $outputDone // object fetched by hook
+                       : $this->mParserOutput;
+
+               # Adjust title for main page & pages with displaytitle
+               if ( $pOutput ) {
+                       $this->adjustDisplayTitle( $pOutput );
+               }
+
+               # For the main page, overwrite the <title> element with the con-
+               # tents of 'pagetitle-view-mainpage' instead of the default (if
+               # that's not empty).
+               # This message always exists because it is in the i18n files
+               if ( $this->getTitle()->isMainPage() ) {
+                       $msg = wfMessage( 'pagetitle-view-mainpage' )->inContentLanguage();
+                       if ( !$msg->isDisabled() ) {
+                               $outputPage->setHTMLTitle( $msg->title( $this->getTitle() )->text() );
+                       }
+               }
+
+               # Check for any __NOINDEX__ tags on the page using $pOutput
+               $policy = $this->getRobotPolicy( 'view', $pOutput );
+               $outputPage->setIndexPolicy( $policy['index'] );
+               $outputPage->setFollowPolicy( $policy['follow'] );
+
+               $this->showViewFooter();
+               $this->mPage->doViewUpdates( $user, $oldid );
+
+               $outputPage->addModules( 'mediawiki.action.view.postEdit' );
+
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * Adjust title for pages with displaytitle, -{T|}- or language conversion
+        * @param ParserOutput $pOutput
+        */
+       public function adjustDisplayTitle( ParserOutput $pOutput ) {
+               # Adjust the title if it was set by displaytitle, -{T|}- or language conversion
+               $titleText = $pOutput->getTitleText();
+               if ( strval( $titleText ) !== '' ) {
+                       $this->getContext()->getOutput()->setPageTitle( $titleText );
+               }
+       }
+
+       /**
+        * Show a diff page according to current request variables. For use within
+        * Article::view() only, other callers should use the DifferenceEngine class.
+        *
+        * @todo Make protected
+        */
+       public function showDiffPage() {
+               $request = $this->getContext()->getRequest();
+               $user = $this->getContext()->getUser();
+               $diff = $request->getVal( 'diff' );
+               $rcid = $request->getVal( 'rcid' );
+               $diffOnly = $request->getBool( 'diffonly', $user->getOption( 'diffonly' ) );
+               $purge = $request->getVal( 'action' ) == 'purge';
+               $unhide = $request->getInt( 'unhide' ) == 1;
+               $oldid = $this->getOldID();
+
+               $rev = $this->getRevisionFetched();
+
+               if ( !$rev ) {
+                       $this->getContext()->getOutput()->setPageTitle( wfMessage( 'errorpagetitle' ) );
+                       $this->getContext()->getOutput()->addWikiMsg( 'difference-missing-revision', $oldid, 1 );
+                       return;
+               }
+
+               $contentHandler = $rev->getContentHandler();
+               $de = $contentHandler->createDifferenceEngine(
+                       $this->getContext(),
+                       $oldid,
+                       $diff,
+                       $rcid,
+                       $purge,
+                       $unhide
+               );
+
+               // DifferenceEngine directly fetched the revision:
+               $this->mRevIdFetched = $de->mNewid;
+               $de->showDiffPage( $diffOnly );
+
+               // Run view updates for the newer revision being diffed (and shown
+               // below the diff if not $diffOnly).
+               list( $old, $new ) = $de->mapDiffPrevNext( $oldid, $diff );
+               // New can be false, convert it to 0 - this conveniently means the latest revision
+               $this->mPage->doViewUpdates( $user, (int)$new );
+       }
+
+       /**
+        * Show a page view for a page formatted as CSS or JavaScript. To be called by
+        * Article::view() only.
+        *
+        * This exists mostly to serve the deprecated ShowRawCssJs hook (used to customize these views).
+        * It has been replaced by the ContentGetParserOutput hook, which lets you do the same but with
+        * more flexibility.
+        *
+        * @param bool $showCacheHint Whether to show a message telling the user
+        *   to clear the browser cache (default: true).
+        */
+       protected function showCssOrJsPage( $showCacheHint = true ) {
+               $outputPage = $this->getContext()->getOutput();
+
+               if ( $showCacheHint ) {
+                       $dir = $this->getContext()->getLanguage()->getDir();
+                       $lang = $this->getContext()->getLanguage()->getCode();
+
+                       $outputPage->wrapWikiMsg(
+                               "<div id='mw-clearyourcache' lang='$lang' dir='$dir' class='mw-content-$dir'>\n$1\n</div>",
+                               'clearyourcache'
+                       );
+               }
+
+               $this->fetchContentObject();
+
+               if ( $this->mContentObject ) {
+                       // Give hooks a chance to customise the output
+                       if ( ContentHandler::runLegacyHooks(
+                               'ShowRawCssJs',
+                               array( $this->mContentObject, $this->getTitle(), $outputPage ) )
+                       ) {
+                               // If no legacy hooks ran, display the content of the parser output, including RL modules,
+                               // but excluding metadata like categories and language links
+                               $po = $this->mContentObject->getParserOutput( $this->getTitle() );
+                               $outputPage->addParserOutputContent( $po );
+                       }
+               }
+       }
+
+       /**
+        * Get the robot policy to be used for the current view
+        * @param string $action The action= GET parameter
+        * @param ParserOutput|null $pOutput
+        * @return array The policy that should be set
+        * @todo: actions other than 'view'
+        */
+       public function getRobotPolicy( $action, $pOutput = null ) {
+               global $wgArticleRobotPolicies, $wgNamespaceRobotPolicies, $wgDefaultRobotPolicy;
+
+               $ns = $this->getTitle()->getNamespace();
+
+               # Don't index user and user talk pages for blocked users (bug 11443)
+               if ( ( $ns == NS_USER || $ns == NS_USER_TALK ) && !$this->getTitle()->isSubpage() ) {
+                       $specificTarget = null;
+                       $vagueTarget = null;
+                       $titleText = $this->getTitle()->getText();
+                       if ( IP::isValid( $titleText ) ) {
+                               $vagueTarget = $titleText;
+                       } else {
+                               $specificTarget = $titleText;
+                       }
+                       if ( Block::newFromTarget( $specificTarget, $vagueTarget ) instanceof Block ) {
+                               return array(
+                                       'index' => 'noindex',
+                                       'follow' => 'nofollow'
+                               );
+                       }
+               }
+
+               if ( $this->mPage->getID() === 0 || $this->getOldID() ) {
+                       # Non-articles (special pages etc), and old revisions
+                       return array(
+                               'index' => 'noindex',
+                               'follow' => 'nofollow'
+                       );
+               } elseif ( $this->getContext()->getOutput()->isPrintable() ) {
+                       # Discourage indexing of printable versions, but encourage following
+                       return array(
+                               'index' => 'noindex',
+                               'follow' => 'follow'
+                       );
+               } elseif ( $this->getContext()->getRequest()->getInt( 'curid' ) ) {
+                       # For ?curid=x urls, disallow indexing
+                       return array(
+                               'index' => 'noindex',
+                               'follow' => 'follow'
+                       );
+               }
+
+               # Otherwise, construct the policy based on the various config variables.
+               $policy = self::formatRobotPolicy( $wgDefaultRobotPolicy );
+
+               if ( isset( $wgNamespaceRobotPolicies[$ns] ) ) {
+                       # Honour customised robot policies for this namespace
+                       $policy = array_merge(
+                               $policy,
+                               self::formatRobotPolicy( $wgNamespaceRobotPolicies[$ns] )
+                       );
+               }
+               if ( $this->getTitle()->canUseNoindex() && is_object( $pOutput ) && $pOutput->getIndexPolicy() ) {
+                       # __INDEX__ and __NOINDEX__ magic words, if allowed. Incorporates
+                       # a final sanity check that we have really got the parser output.
+                       $policy = array_merge(
+                               $policy,
+                               array( 'index' => $pOutput->getIndexPolicy() )
+                       );
+               }
+
+               if ( isset( $wgArticleRobotPolicies[$this->getTitle()->getPrefixedText()] ) ) {
+                       # (bug 14900) site config can override user-defined __INDEX__ or __NOINDEX__
+                       $policy = array_merge(
+                               $policy,
+                               self::formatRobotPolicy( $wgArticleRobotPolicies[$this->getTitle()->getPrefixedText()] )
+                       );
+               }
+
+               return $policy;
+       }
+
+       /**
+        * Converts a String robot policy into an associative array, to allow
+        * merging of several policies using array_merge().
+        * @param array|string $policy Returns empty array on null/false/'', transparent
+        *   to already-converted arrays, converts string.
+        * @return array 'index' => \<indexpolicy\>, 'follow' => \<followpolicy\>
+        */
+       public static function formatRobotPolicy( $policy ) {
+               if ( is_array( $policy ) ) {
+                       return $policy;
+               } elseif ( !$policy ) {
+                       return array();
+               }
+
+               $policy = explode( ',', $policy );
+               $policy = array_map( 'trim', $policy );
+
+               $arr = array();
+               foreach ( $policy as $var ) {
+                       if ( in_array( $var, array( 'index', 'noindex' ) ) ) {
+                               $arr['index'] = $var;
+                       } elseif ( in_array( $var, array( 'follow', 'nofollow' ) ) ) {
+                               $arr['follow'] = $var;
+                       }
+               }
+
+               return $arr;
+       }
+
+       /**
+        * If this request is a redirect view, send "redirected from" subtitle to
+        * the output. Returns true if the header was needed, false if this is not
+        * a redirect view. Handles both local and remote redirects.
+        *
+        * @return bool
+        */
+       public function showRedirectedFromHeader() {
+               global $wgRedirectSources;
+               $outputPage = $this->getContext()->getOutput();
+
+               $rdfrom = $this->getContext()->getRequest()->getVal( 'rdfrom' );
+
+               if ( isset( $this->mRedirectedFrom ) ) {
+                       // This is an internally redirected page view.
+                       // We'll need a backlink to the source page for navigation.
+                       if ( wfRunHooks( 'ArticleViewRedirect', array( &$this ) ) ) {
+                               $redir = Linker::linkKnown(
+                                       $this->mRedirectedFrom,
+                                       null,
+                                       array(),
+                                       array( 'redirect' => 'no' )
+                               );
+
+                               $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
+
+                               // Set the fragment if one was specified in the redirect
+                               if ( $this->getTitle()->hasFragment() ) {
+                                       $outputPage->addJsConfigVars( 'wgRedirectToFragment', $this->getTitle()->getFragmentForURL() );
+                                       $outputPage->addModules( 'mediawiki.action.view.redirectToFragment' );
+                               }
+
+                               // Add a <link rel="canonical"> tag
+                               $outputPage->setCanonicalUrl( $this->getTitle()->getLocalURL() );
+
+                               // Tell the output object that the user arrived at this article through a redirect
+                               $outputPage->setRedirectedFrom( $this->mRedirectedFrom );
+
+                               return true;
+                       }
+               } elseif ( $rdfrom ) {
+                       // This is an externally redirected view, from some other wiki.
+                       // If it was reported from a trusted site, supply a backlink.
+                       if ( $wgRedirectSources && preg_match( $wgRedirectSources, $rdfrom ) ) {
+                               $redir = Linker::makeExternalLink( $rdfrom, $rdfrom );
+                               $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
+
+                               return true;
+                       }
+               }
+
+               return false;
+       }
+
+       /**
+        * Show a header specific to the namespace currently being viewed, like
+        * [[MediaWiki:Talkpagetext]]. For Article::view().
+        */
+       public function showNamespaceHeader() {
+               if ( $this->getTitle()->isTalkPage() ) {
+                       if ( !wfMessage( 'talkpageheader' )->isDisabled() ) {
+                               $this->getContext()->getOutput()->wrapWikiMsg(
+                                       "<div class=\"mw-talkpageheader\">\n$1\n</div>",
+                                       array( 'talkpageheader' )
+                               );
+                       }
+               }
+       }
+
+       /**
+        * Show the footer section of an ordinary page view
+        */
+       public function showViewFooter() {
+               # check if we're displaying a [[User talk:x.x.x.x]] anonymous talk page
+               if ( $this->getTitle()->getNamespace() == NS_USER_TALK
+                       && IP::isValid( $this->getTitle()->getText() )
+               ) {
+                       $this->getContext()->getOutput()->addWikiMsg( 'anontalkpagetext' );
+               }
+
+               // Show a footer allowing the user to patrol the shown revision or page if possible
+               $patrolFooterShown = $this->showPatrolFooter();
+
+               wfRunHooks( 'ArticleViewFooter', array( $this, $patrolFooterShown ) );
+       }
+
+       /**
+        * If patrol is possible, output a patrol UI box. This is called from the
+        * footer section of ordinary page views. If patrol is not possible or not
+        * desired, does nothing.
+        * Side effect: When the patrol link is build, this method will call
+        * OutputPage::preventClickjacking() and load mediawiki.page.patrol.ajax.
+        *
+        * @return bool
+        */
+       public function showPatrolFooter() {
+               global $wgUseNPPatrol, $wgUseRCPatrol, $wgEnableAPI, $wgEnableWriteAPI;
+
+               $outputPage = $this->getContext()->getOutput();
+               $user = $this->getContext()->getUser();
+               $cache = wfGetMainCache();
+               $rc = false;
+
+               if ( !$this->getTitle()->quickUserCan( 'patrol', $user )
+                       || !( $wgUseRCPatrol || $wgUseNPPatrol )
+               ) {
+                       // Patrolling is disabled or the user isn't allowed to
+                       return false;
+               }
+
+               wfProfileIn( __METHOD__ );
+
+               // New page patrol: Get the timestamp of the oldest revison which
+               // the revision table holds for the given page. Then we look
+               // whether it's within the RC lifespan and if it is, we try
+               // to get the recentchanges row belonging to that entry
+               // (with rc_new = 1).
+
+               // Check for cached results
+               if ( $cache->get( wfMemcKey( 'NotPatrollablePage', $this->getTitle()->getArticleID() ) ) ) {
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               if ( $this->mRevision
+                       && !RecentChange::isInRCLifespan( $this->mRevision->getTimestamp(), 21600 )
+               ) {
+                       // The current revision is already older than what could be in the RC table
+                       // 6h tolerance because the RC might not be cleaned out regularly
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               $dbr = wfGetDB( DB_SLAVE );
+               $oldestRevisionTimestamp = $dbr->selectField(
+                       'revision',
+                       'MIN( rev_timestamp )',
+                       array( 'rev_page' => $this->getTitle()->getArticleID() ),
+                       __METHOD__
+               );
+
+               if ( $oldestRevisionTimestamp
+                       && RecentChange::isInRCLifespan( $oldestRevisionTimestamp, 21600 )
+               ) {
+                       // 6h tolerance because the RC might not be cleaned out regularly
+                       $rc = RecentChange::newFromConds(
+                               array(
+                                       'rc_new' => 1,
+                                       'rc_timestamp' => $oldestRevisionTimestamp,
+                                       'rc_namespace' => $this->getTitle()->getNamespace(),
+                                       'rc_cur_id' => $this->getTitle()->getArticleID(),
+                                       'rc_patrolled' => 0
+                               ),
+                               __METHOD__,
+                               array( 'USE INDEX' => 'new_name_timestamp' )
+                       );
+               }
+
+               if ( !$rc ) {
+                       // No RC entry around
+
+                       // Cache the information we gathered above in case we can't patrol
+                       // Don't cache in case we can patrol as this could change
+                       $cache->set( wfMemcKey( 'NotPatrollablePage', $this->getTitle()->getArticleID() ), '1' );
+
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               if ( $rc->getPerformer()->getName() == $user->getName() ) {
+                       // Don't show a patrol link for own creations. If the user could
+                       // patrol them, they already would be patrolled
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               $rcid = $rc->getAttribute( 'rc_id' );
+
+               $token = $user->getEditToken( $rcid );
+
+               $outputPage->preventClickjacking();
+               if ( $wgEnableAPI && $wgEnableWriteAPI && $user->isAllowed( 'writeapi' ) ) {
+                       $outputPage->addModules( 'mediawiki.page.patrol.ajax' );
+               }
+
+               $link = Linker::linkKnown(
+                       $this->getTitle(),
+                       wfMessage( 'markaspatrolledtext' )->escaped(),
+                       array(),
+                       array(
+                               'action' => 'markpatrolled',
+                               'rcid' => $rcid,
+                               'token' => $token,
+                       )
+               );
+
+               $outputPage->addHTML(
+                       "<div class='patrollink'>" .
+                               wfMessage( 'markaspatrolledlink' )->rawParams( $link )->escaped() .
+                       '</div>'
+               );
+
+               wfProfileOut( __METHOD__ );
+               return true;
+       }
+
+       /**
+        * Show the error text for a missing article. For articles in the MediaWiki
+        * namespace, show the default message text. To be called from Article::view().
+        */
+       public function showMissingArticle() {
+               global $wgSend404Code;
+               $outputPage = $this->getContext()->getOutput();
+               // Whether the page is a root user page of an existing user (but not a subpage)
+               $validUserPage = false;
+
+               # Show info in user (talk) namespace. Does the user exist? Is he blocked?
+               if ( $this->getTitle()->getNamespace() == NS_USER
+                       || $this->getTitle()->getNamespace() == NS_USER_TALK
+               ) {
+                       $parts = explode( '/', $this->getTitle()->getText() );
+                       $rootPart = $parts[0];
+                       $user = User::newFromName( $rootPart, false /* allow IP users*/ );
+                       $ip = User::isIP( $rootPart );
+                       $block = Block::newFromTarget( $user, $user );
+
+                       if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist
+                               $outputPage->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n\$1\n</div>",
+                                       array( 'userpage-userdoesnotexist-view', wfEscapeWikiText( $rootPart ) ) );
+                       } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) { # Show log extract if the user is currently blocked
+                               LogEventsList::showLogExtract(
+                                       $outputPage,
+                                       'block',
+                                       MWNamespace::getCanonicalName( NS_USER ) . ':' . $block->getTarget(),
+                                       '',
+                                       array(
+                                               'lim' => 1,
+                                               'showIfEmpty' => false,
+                                               'msgKey' => array(
+                                                       'blocked-notice-logextract',
+                                                       $user->getName() # Support GENDER in notice
+                                               )
+                                       )
+                               );
+                               $validUserPage = !$this->getTitle()->isSubpage();
+                       } else {
+                               $validUserPage = !$this->getTitle()->isSubpage();
+                       }
+               }
+
+               wfRunHooks( 'ShowMissingArticle', array( $this ) );
+
+               // Give extensions a chance to hide their (unrelated) log entries
+               $logTypes = array( 'delete', 'move' );
+               $conds = array( "log_action != 'revision'" );
+               wfRunHooks( 'Article::MissingArticleConditions', array( &$conds, $logTypes ) );
+
+               # Show delete and move logs
+               LogEventsList::showLogExtract( $outputPage, $logTypes, $this->getTitle(), '',
+                       array( 'lim' => 10,
+                               'conds' => $conds,
+                               'showIfEmpty' => false,
+                               'msgKey' => array( 'moveddeleted-notice' ) )
+               );
+
+               if ( !$this->mPage->hasViewableContent() && $wgSend404Code && !$validUserPage ) {
+                       // If there's no backing content, send a 404 Not Found
+                       // for better machine handling of broken links.
+                       $this->getContext()->getRequest()->response()->header( "HTTP/1.1 404 Not Found" );
+               }
+
+               // Also apply the robot policy for nonexisting pages (even if a 404 was used for sanity)
+               $policy = $this->getRobotPolicy( 'view' );
+               $outputPage->setIndexPolicy( $policy['index'] );
+               $outputPage->setFollowPolicy( $policy['follow'] );
+
+               $hookResult = wfRunHooks( 'BeforeDisplayNoArticleText', array( $this ) );
+
+               if ( ! $hookResult ) {
+                       return;
+               }
+
+               # Show error message
+               $oldid = $this->getOldID();
+               if ( $oldid ) {
+                       $text = wfMessage( 'missing-revision', $oldid )->plain();
+               } elseif ( $this->getTitle()->getNamespace() === NS_MEDIAWIKI ) {
+                       // Use the default message text
+                       $text = $this->getTitle()->getDefaultMessageText();
+               } elseif ( $this->getTitle()->quickUserCan( 'create', $this->getContext()->getUser() )
+                       && $this->getTitle()->quickUserCan( 'edit', $this->getContext()->getUser() )
+               ) {
+                       $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
+                       $text = wfMessage( $message )->plain();
+               } else {
+                       $text = wfMessage( 'noarticletext-nopermission' )->plain();
+               }
+               $text = "<div class='noarticletext'>\n$text\n</div>";
+
+               $outputPage->addWikiText( $text );
+       }
+
+       /**
+        * If the revision requested for view is deleted, check permissions.
+        * Send either an error message or a warning header to the output.
+        *
+        * @return bool true if the view is allowed, false if not.
+        */
+       public function showDeletedRevisionHeader() {
+               if ( !$this->mRevision->isDeleted( Revision::DELETED_TEXT ) ) {
+                       // Not deleted
+                       return true;
+               }
+
+               $outputPage = $this->getContext()->getOutput();
+               $user = $this->getContext()->getUser();
+               // If the user is not allowed to see it...
+               if ( !$this->mRevision->userCan( Revision::DELETED_TEXT, $user ) ) {
+                       $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
+                               'rev-deleted-text-permission' );
+
+                       return false;
+               // If the user needs to confirm that they want to see it...
+               } elseif ( $this->getContext()->getRequest()->getInt( 'unhide' ) != 1 ) {
+                       # Give explanation and add a link to view the revision...
+                       $oldid = intval( $this->getOldID() );
+                       $link = $this->getTitle()->getFullURL( "oldid={$oldid}&unhide=1" );
+                       $msg = $this->mRevision->isDeleted( Revision::DELETED_RESTRICTED ) ?
+                               'rev-suppressed-text-unhide' : 'rev-deleted-text-unhide';
+                       $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
+                               array( $msg, $link ) );
+
+                       return false;
+               // We are allowed to see...
+               } else {
+                       $msg = $this->mRevision->isDeleted( Revision::DELETED_RESTRICTED ) ?
+                               'rev-suppressed-text-view' : 'rev-deleted-text-view';
+                       $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", $msg );
+
+                       return true;
+               }
+       }
+
+       /**
+        * Generate the navigation links when browsing through an article revisions
+        * It shows the information as:
+        *   Revision as of \<date\>; view current revision
+        *   \<- Previous version | Next Version -\>
+        *
+        * @param int $oldid Revision ID of this article revision
+        */
+       public function setOldSubtitle( $oldid = 0 ) {
+               if ( !wfRunHooks( 'DisplayOldSubtitle', array( &$this, &$oldid ) ) ) {
+                       return;
+               }
+
+               $unhide = $this->getContext()->getRequest()->getInt( 'unhide' ) == 1;
+
+               # Cascade unhide param in links for easy deletion browsing
+               $extraParams = array();
+               if ( $unhide ) {
+                       $extraParams['unhide'] = 1;
+               }
+
+               if ( $this->mRevision && $this->mRevision->getId() === $oldid ) {
+                       $revision = $this->mRevision;
+               } else {
+                       $revision = Revision::newFromId( $oldid );
+               }
+
+               $timestamp = $revision->getTimestamp();
+
+               $current = ( $oldid == $this->mPage->getLatest() );
+               $language = $this->getContext()->getLanguage();
+               $user = $this->getContext()->getUser();
+
+               $td = $language->userTimeAndDate( $timestamp, $user );
+               $tddate = $language->userDate( $timestamp, $user );
+               $tdtime = $language->userTime( $timestamp, $user );
+
+               # Show user links if allowed to see them. If hidden, then show them only if requested...
+               $userlinks = Linker::revUserTools( $revision, !$unhide );
+
+               $infomsg = $current && !wfMessage( 'revision-info-current' )->isDisabled()
+                       ? 'revision-info-current'
+                       : 'revision-info';
+
+               $outputPage = $this->getContext()->getOutput();
+               $outputPage->addSubtitle( "<div id=\"mw-{$infomsg}\">" . wfMessage( $infomsg,
+                       $td )->rawParams( $userlinks )->params( $revision->getID(), $tddate,
+                       $tdtime, $revision->getUserText() )->rawParams( Linker::revComment( $revision, true, true ) )->parse() . "</div>" );
+
+               $lnk = $current
+                       ? wfMessage( 'currentrevisionlink' )->escaped()
+                       : Linker::linkKnown(
+                               $this->getTitle(),
+                               wfMessage( 'currentrevisionlink' )->escaped(),
+                               array(),
+                               $extraParams
+                       );
+               $curdiff = $current
+                       ? wfMessage( 'diff' )->escaped()
+                       : Linker::linkKnown(
+                               $this->getTitle(),
+                               wfMessage( 'diff' )->escaped(),
+                               array(),
+                               array(
+                                       'diff' => 'cur',
+                                       'oldid' => $oldid
+                               ) + $extraParams
+                       );
+               $prev = $this->getTitle()->getPreviousRevisionID( $oldid );
+               $prevlink = $prev
+                       ? Linker::linkKnown(
+                               $this->getTitle(),
+                               wfMessage( 'previousrevision' )->escaped(),
+                               array(),
+                               array(
+                                       'direction' => 'prev',
+                                       'oldid' => $oldid
+                               ) + $extraParams
+                       )
+                       : wfMessage( 'previousrevision' )->escaped();
+               $prevdiff = $prev
+                       ? Linker::linkKnown(
+                               $this->getTitle(),
+                               wfMessage( 'diff' )->escaped(),
+                               array(),
+                               array(
+                                       'diff' => 'prev',
+                                       'oldid' => $oldid
+                               ) + $extraParams
+                       )
+                       : wfMessage( 'diff' )->escaped();
+               $nextlink = $current
+                       ? wfMessage( 'nextrevision' )->escaped()
+                       : Linker::linkKnown(
+                               $this->getTitle(),
+                               wfMessage( 'nextrevision' )->escaped(),
+                               array(),
+                               array(
+                                       'direction' => 'next',
+                                       'oldid' => $oldid
+                               ) + $extraParams
+                       );
+               $nextdiff = $current
+                       ? wfMessage( 'diff' )->escaped()
+                       : Linker::linkKnown(
+                               $this->getTitle(),
+                               wfMessage( 'diff' )->escaped(),
+                               array(),
+                               array(
+                                       'diff' => 'next',
+                                       'oldid' => $oldid
+                               ) + $extraParams
+                       );
+
+               $cdel = Linker::getRevDeleteLink( $user, $revision, $this->getTitle() );
+               if ( $cdel !== '' ) {
+                       $cdel .= ' ';
+               }
+
+               $outputPage->addSubtitle( "<div id=\"mw-revision-nav\">" . $cdel .
+                       wfMessage( 'revision-nav' )->rawParams(
+                               $prevdiff, $prevlink, $lnk, $curdiff, $nextlink, $nextdiff
+                       )->escaped() . "</div>" );
+       }
+
+       /**
+        * Return the HTML for the top of a redirect page
+        *
+        * Chances are you should just be using the ParserOutput from
+        * WikitextContent::getParserOutput instead of calling this for redirects.
+        *
+        * @param Title|array $target Destination(s) to redirect
+        * @param bool $appendSubtitle [optional]
+        * @param bool $forceKnown Should the image be shown as a bluelink regardless of existence?
+        * @return string Containing HMTL with redirect link
+        */
+       public function viewRedirect( $target, $appendSubtitle = true, $forceKnown = false ) {
+               $lang = $this->getTitle()->getPageLanguage();
+               if ( $appendSubtitle ) {
+                       $out = $this->getContext()->getOutput();
+                       $out->addSubtitle( wfMessage( 'redirectpagesub' )->parse() );
+               }
+               return static::getRedirectHeaderHtml( $lang, $target, $forceKnown );
+       }
+
+       /**
+        * Return the HTML for the top of a redirect page
+        *
+        * Chances are you should just be using the ParserOutput from
+        * WikitextContent::getParserOutput instead of calling this for redirects.
+        *
+        * @since 1.23
+        * @param Language $lang
+        * @param Title|array $target Destination(s) to redirect
+        * @param bool $forceKnown Should the image be shown as a bluelink regardless of existence?
+        * @return string Containing HMTL with redirect link
+        */
+       public static function getRedirectHeaderHtml( Language $lang, $target, $forceKnown = false ) {
+               global $wgStylePath;
+
+               if ( !is_array( $target ) ) {
+                       $target = array( $target );
+               }
+
+               $imageDir = $lang->getDir();
+
+               // the loop prepends the arrow image before the link, so the first case needs to be outside
+
+               /** @var $title Title */
+               $title = array_shift( $target );
+
+               if ( $forceKnown ) {
+                       $link = Linker::linkKnown( $title, htmlspecialchars( $title->getFullText() ) );
+               } else {
+                       $link = Linker::link( $title, htmlspecialchars( $title->getFullText() ) );
+               }
+
+               $nextRedirect = $wgStylePath . '/common/images/nextredirect' . $imageDir . '.png';
+               $alt = $lang->isRTL() ? '←' : '→';
+
+               // Automatically append redirect=no to each link, since most of them are
+               // redirect pages themselves.
+               /** @var Title $rt */
+               foreach ( $target as $rt ) {
+                       $link .= Html::element( 'img', array( 'src' => $nextRedirect, 'alt' => $alt ) );
+                       if ( $forceKnown ) {
+                               $link .= Linker::linkKnown(
+                                       $rt,
+                                       htmlspecialchars( $rt->getFullText(),
+                                       array(),
+                                       array( 'redirect' => 'no' )
+                               )
+                               );
+                       } else {
+                               $link .= Linker::link(
+                                       $rt,
+                                       htmlspecialchars( $rt->getFullText() ),
+                                       array(),
+                                       array( 'redirect' => 'no' )
+                               );
+                       }
+               }
+
+               $imageUrl = $wgStylePath . '/common/images/redirect' . $imageDir . '.png';
+               return '<div class="redirectMsg">' .
+                       Html::element( 'img', array( 'src' => $imageUrl, 'alt' => '#REDIRECT' ) ) .
+                       '<span class="redirectText">' . $link . '</span></div>';
+       }
+
+       /**
+        * 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();
+       }
+
+       /**
+        * action=protect handler
+        */
+       public function protect() {
+               $form = new ProtectionForm( $this );
+               $form->execute();
+       }
+
+       /**
+        * action=unprotect handler (alias)
+        */
+       public function unprotect() {
+               $this->protect();
+       }
+
+       /**
+        * UI entry point for page deletion
+        */
+       public function delete() {
+               # This code desperately needs to be totally rewritten
+
+               $title = $this->getTitle();
+               $user = $this->getContext()->getUser();
+
+               # Check permissions
+               $permission_errors = $title->getUserPermissionsErrors( 'delete', $user );
+               if ( count( $permission_errors ) ) {
+                       throw new PermissionsError( 'delete', $permission_errors );
+               }
+
+               # Read-only check...
+               if ( wfReadOnly() ) {
+                       throw new ReadOnlyError;
+               }
+
+               # Better double-check that it hasn't been deleted yet!
+               $this->mPage->loadPageData( 'fromdbmaster' );
+               if ( !$this->mPage->exists() ) {
+                       $deleteLogPage = new LogPage( 'delete' );
+                       $outputPage = $this->getContext()->getOutput();
+                       $outputPage->setPageTitle( wfMessage( 'cannotdelete-title', $title->getPrefixedText() ) );
+                       $outputPage->wrapWikiMsg( "<div class=\"error mw-error-cannotdelete\">\n$1\n</div>",
+                                       array( 'cannotdelete', wfEscapeWikiText( $title->getPrefixedText() ) )
+                               );
+                       $outputPage->addHTML(
+                               Xml::element( 'h2', null, $deleteLogPage->getName()->text() )
+                       );
+                       LogEventsList::showLogExtract(
+                               $outputPage,
+                               'delete',
+                               $title
+                       );
+
+                       return;
+               }
+
+               $request = $this->getContext()->getRequest();
+               $deleteReasonList = $request->getText( 'wpDeleteReasonList', 'other' );
+               $deleteReason = $request->getText( 'wpReason' );
+
+               if ( $deleteReasonList == 'other' ) {
+                       $reason = $deleteReason;
+               } elseif ( $deleteReason != '' ) {
+                       // Entry from drop down menu + additional comment
+                       $colonseparator = wfMessage( 'colon-separator' )->inContentLanguage()->text();
+                       $reason = $deleteReasonList . $colonseparator . $deleteReason;
+               } else {
+                       $reason = $deleteReasonList;
+               }
+
+               if ( $request->wasPosted() && $user->matchEditToken( $request->getVal( 'wpEditToken' ),
+                       array( 'delete', $this->getTitle()->getPrefixedText() ) )
+               ) {
+                       # Flag to hide all contents of the archived revisions
+                       $suppress = $request->getVal( 'wpSuppress' ) && $user->isAllowed( 'suppressrevision' );
+
+                       $this->doDelete( $reason, $suppress );
+
+                       WatchAction::doWatchOrUnwatch( $request->getCheck( 'wpWatch' ), $title, $user );
+
+                       return;
+               }
+
+               // Generate deletion reason
+               $hasHistory = false;
+               if ( !$reason ) {
+                       try {
+                               $reason = $this->generateReason( $hasHistory );
+                       } catch ( MWException $e ) {
+                               # if a page is horribly broken, we still want to be able to
+                               # delete it. So be lenient about errors here.
+                               wfDebug( "Error while building auto delete summary: $e" );
+                               $reason = '';
+                       }
+               }
+
+               // If the page has a history, insert a warning
+               if ( $hasHistory ) {
+                       $revisions = $this->mTitle->estimateRevisionCount();
+                       // @todo FIXME: i18n issue/patchwork message
+                       $this->getContext()->getOutput()->addHTML( '<strong class="mw-delete-warning-revisions">' .
+                               wfMessage( 'historywarning' )->numParams( $revisions )->parse() .
+                               wfMessage( 'word-separator' )->plain() . Linker::linkKnown( $title,
+                                       wfMessage( 'history' )->escaped(),
+                                       array( 'rel' => 'archives' ),
+                                       array( 'action' => 'history' ) ) .
+                               '</strong>'
+                       );
+
+                       if ( $this->mTitle->isBigDeletion() ) {
+                               global $wgDeleteRevisionsLimit;
+                               $this->getContext()->getOutput()->wrapWikiMsg( "<div class='error'>\n$1\n</div>\n",
+                                       array(
+                                               'delete-warning-toobig',
+                                               $this->getContext()->getLanguage()->formatNum( $wgDeleteRevisionsLimit )
+                                       )
+                               );
+                       }
+               }
+
+               $this->confirmDelete( $reason );
+       }
+
+       /**
+        * Output deletion confirmation dialog
+        * @todo FIXME: Move to another file?
+        * @param string $reason Prefilled reason
+        */
+       public function confirmDelete( $reason ) {
+               wfDebug( "Article::confirmDelete\n" );
+
+               $outputPage = $this->getContext()->getOutput();
+               $outputPage->setPageTitle( wfMessage( 'delete-confirm', $this->getTitle()->getPrefixedText() ) );
+               $outputPage->addBacklinkSubtitle( $this->getTitle() );
+               $outputPage->setRobotPolicy( 'noindex,nofollow' );
+               $backlinkCache = $this->getTitle()->getBacklinkCache();
+               if ( $backlinkCache->hasLinks( 'pagelinks' ) || $backlinkCache->hasLinks( 'templatelinks' ) ) {
+                       $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
+                               'deleting-backlinks-warning' );
+               }
+               $outputPage->addWikiMsg( 'confirmdeletetext' );
+
+               wfRunHooks( 'ArticleConfirmDelete', array( $this, $outputPage, &$reason ) );
+
+               $user = $this->getContext()->getUser();
+
+               if ( $user->isAllowed( 'suppressrevision' ) ) {
+                       $suppress = "<tr id=\"wpDeleteSuppressRow\">
+                                       <td></td>
+                                       <td class='mw-input'><strong>" .
+                                               Xml::checkLabel( wfMessage( 'revdelete-suppress' )->text(),
+                                                       'wpSuppress', 'wpSuppress', false, array( 'tabindex' => '4' ) ) .
+                                       "</strong></td>
+                               </tr>";
+               } else {
+                       $suppress = '';
+               }
+               $checkWatch = $user->getBoolOption( 'watchdeletion' ) || $user->isWatched( $this->getTitle() );
+
+               $form = Xml::openElement( 'form', array( 'method' => 'post',
+                       'action' => $this->getTitle()->getLocalURL( 'action=delete' ), 'id' => 'deleteconfirm' ) ) .
+                       Xml::openElement( 'fieldset', array( 'id' => 'mw-delete-table' ) ) .
+                       Xml::tags( 'legend', null, wfMessage( 'delete-legend' )->escaped() ) .
+                       Xml::openElement( 'table', array( 'id' => 'mw-deleteconfirm-table' ) ) .
+                       "<tr id=\"wpDeleteReasonListRow\">
+                               <td class='mw-label'>" .
+                                       Xml::label( wfMessage( 'deletecomment' )->text(), 'wpDeleteReasonList' ) .
+                               "</td>
+                               <td class='mw-input'>" .
+                                       Xml::listDropDown(
+                                               'wpDeleteReasonList',
+                                               wfMessage( 'deletereason-dropdown' )->inContentLanguage()->text(),
+                                               wfMessage( 'deletereasonotherlist' )->inContentLanguage()->text(),
+                                               '',
+                                               'wpReasonDropDown',
+                                               1
+                                       ) .
+                               "</td>
+                       </tr>
+                       <tr id=\"wpDeleteReasonRow\">
+                               <td class='mw-label'>" .
+                                       Xml::label( wfMessage( 'deleteotherreason' )->text(), 'wpReason' ) .
+                               "</td>
+                               <td class='mw-input'>" .
+                               Html::input( 'wpReason', $reason, 'text', array(
+                                       'size' => '60',
+                                       'maxlength' => '255',
+                                       'tabindex' => '2',
+                                       'id' => 'wpReason',
+                                       'autofocus'
+                               ) ) .
+                               "</td>
+                       </tr>";
+
+               # Disallow watching if user is not logged in
+               if ( $user->isLoggedIn() ) {
+                       $form .= "
+                       <tr>
+                               <td></td>
+                               <td class='mw-input'>" .
+                                       Xml::checkLabel( wfMessage( 'watchthis' )->text(),
+                                               'wpWatch', 'wpWatch', $checkWatch, array( 'tabindex' => '3' ) ) .
+                               "</td>
+                       </tr>";
+               }
+
+               $form .= "
+                       $suppress
+                       <tr>
+                               <td></td>
+                               <td class='mw-submit'>" .
+                                       Xml::submitButton( wfMessage( 'deletepage' )->text(),
+                                               array( 'name' => 'wpConfirmB', 'id' => 'wpConfirmB', 'tabindex' => '5' ) ) .
+                               "</td>
+                       </tr>" .
+                       Xml::closeElement( 'table' ) .
+                       Xml::closeElement( 'fieldset' ) .
+                       Html::hidden(
+                               'wpEditToken',
+                               $user->getEditToken( array( 'delete', $this->getTitle()->getPrefixedText() ) )
+                       ) .
+                       Xml::closeElement( 'form' );
+
+                       if ( $user->isAllowed( 'editinterface' ) ) {
+                               $title = Title::makeTitle( NS_MEDIAWIKI, 'Deletereason-dropdown' );
+                               $link = Linker::link(
+                                       $title,
+                                       wfMessage( 'delete-edit-reasonlist' )->escaped(),
+                                       array(),
+                                       array( 'action' => 'edit' )
+                               );
+                               $form .= '<p class="mw-delete-editreasons">' . $link . '</p>';
+                       }
+
+               $outputPage->addHTML( $form );
+
+               $deleteLogPage = new LogPage( 'delete' );
+               $outputPage->addHTML( Xml::element( 'h2', null, $deleteLogPage->getName()->text() ) );
+               LogEventsList::showLogExtract( $outputPage, 'delete',
+                       $this->getTitle()
+               );
+       }
+
+       /**
+        * Perform a deletion and output success or failure messages
+        * @param string $reason
+        * @param bool $suppress
+        */
+       public function doDelete( $reason, $suppress = false ) {
+               $error = '';
+               $outputPage = $this->getContext()->getOutput();
+               $status = $this->mPage->doDeleteArticleReal( $reason, $suppress, 0, true, $error );
+
+               if ( $status->isGood() ) {
+                       $deleted = $this->getTitle()->getPrefixedText();
+
+                       $outputPage->setPageTitle( wfMessage( 'actioncomplete' ) );
+                       $outputPage->setRobotPolicy( 'noindex,nofollow' );
+
+                       $loglink = '[[Special:Log/delete|' . wfMessage( 'deletionlog' )->text() . ']]';
+
+                       $outputPage->addWikiMsg( 'deletedtext', wfEscapeWikiText( $deleted ), $loglink );
+                       $outputPage->returnToMain( false );
+               } else {
+                       $outputPage->setPageTitle(
+                               wfMessage( 'cannotdelete-title',
+                                       $this->getTitle()->getPrefixedText() )
+                       );
+
+                       if ( $error == '' ) {
+                               $outputPage->addWikiText(
+                                       "<div class=\"error mw-error-cannotdelete\">\n" . $status->getWikiText() . "\n</div>"
+                               );
+                               $deleteLogPage = new LogPage( 'delete' );
+                               $outputPage->addHTML( Xml::element( 'h2', null, $deleteLogPage->getName()->text() ) );
+
+                               LogEventsList::showLogExtract(
+                                       $outputPage,
+                                       'delete',
+                                       $this->getTitle()
+                               );
+                       } else {
+                               $outputPage->addHTML( $error );
+                       }
+               }
+       }
+
+       /* Caching functions */
+
+       /**
+        * checkLastModified returns true if it has taken care of all
+        * output to the client that is necessary for this request.
+        * (that is, it has sent a cached version of the page)
+        *
+        * @return bool true if cached version send, false otherwise
+        */
+       protected function tryFileCache() {
+               static $called = false;
+
+               if ( $called ) {
+                       wfDebug( "Article::tryFileCache(): called twice!?\n" );
+                       return false;
+               }
+
+               $called = true;
+               if ( $this->isFileCacheable() ) {
+                       $cache = HTMLFileCache::newFromTitle( $this->getTitle(), 'view' );
+                       if ( $cache->isCacheGood( $this->mPage->getTouched() ) ) {
+                               wfDebug( "Article::tryFileCache(): about to load file\n" );
+                               $cache->loadFromFileCache( $this->getContext() );
+                               return true;
+                       } else {
+                               wfDebug( "Article::tryFileCache(): starting buffer\n" );
+                               ob_start( array( &$cache, 'saveToFileCache' ) );
+                       }
+               } else {
+                       wfDebug( "Article::tryFileCache(): not cacheable\n" );
+               }
+
+               return false;
+       }
+
+       /**
+        * Check if the page can be cached
+        * @return bool
+        */
+       public function isFileCacheable() {
+               $cacheable = false;
+
+               if ( HTMLFileCache::useFileCache( $this->getContext() ) ) {
+                       $cacheable = $this->mPage->getID()
+                               && !$this->mRedirectedFrom && !$this->getTitle()->isRedirect();
+                       // Extension may have reason to disable file caching on some pages.
+                       if ( $cacheable ) {
+                               $cacheable = wfRunHooks( 'IsFileCacheable', array( &$this ) );
+                       }
+               }
+
+               return $cacheable;
+       }
+
+       /**#@-*/
+
+       /**
+        * Lightweight method to get the parser output for a page, checking the parser cache
+        * and so on. Doesn't consider most of the stuff that WikiPage::view is forced to
+        * consider, so it's not appropriate to use there.
+        *
+        * @since 1.16 (r52326) for LiquidThreads
+        *
+        * @param int|null $oldid Revision ID or null
+        * @param User $user The relevant user
+        * @return ParserOutput|bool ParserOutput or false if the given revision ID is not found
+        */
+       public function getParserOutput( $oldid = null, User $user = null ) {
+               //XXX: bypasses mParserOptions and thus setParserOptions()
+
+               if ( $user === null ) {
+                       $parserOptions = $this->getParserOptions();
+               } else {
+                       $parserOptions = $this->mPage->makeParserOptions( $user );
+               }
+
+               return $this->mPage->getParserOutput( $parserOptions, $oldid );
+       }
+
+       /**
+        * Override the ParserOptions used to render the primary article wikitext.
+        *
+        * @param ParserOptions $options
+        * @throws MWException if the parser options where already initialized.
+        */
+       public function setParserOptions( ParserOptions $options ) {
+               if ( $this->mParserOptions ) {
+                       throw new MWException( "can't change parser options after they have already been set" );
+               }
+
+               // clone, so if $options is modified later, it doesn't confuse the parser cache.
+               $this->mParserOptions = clone $options;
+       }
+
+       /**
+        * Get parser options suitable for rendering the primary article wikitext
+        * @return ParserOptions
+        */
+       public function getParserOptions() {
+               if ( !$this->mParserOptions ) {
+                       $this->mParserOptions = $this->mPage->makeParserOptions( $this->getContext() );
+               }
+               // Clone to allow modifications of the return value without affecting cache
+               return clone $this->mParserOptions;
+       }
+
+       /**
+        * Sets the context this Article is executed in
+        *
+        * @param IContextSource $context
+        * @since 1.18
+        */
+       public function setContext( $context ) {
+               $this->mContext = $context;
+       }
+
+       /**
+        * Gets the context this Article is executed in
+        *
+        * @return IContextSource
+        * @since 1.18
+        */
+       public function getContext() {
+               if ( $this->mContext instanceof IContextSource ) {
+                       return $this->mContext;
+               } else {
+                       wfDebug( __METHOD__ . " called and \$mContext is null. " .
+                               "Return RequestContext::getMain(); for sanity\n" );
+                       return RequestContext::getMain();
+               }
+       }
+
+       /**
+        * Use PHP's magic __get handler to handle accessing of
+        * raw WikiPage fields for backwards compatibility.
+        *
+        * @param string $fname Field name
+        */
+       public function __get( $fname ) {
+               if ( property_exists( $this->mPage, $fname ) ) {
+                       #wfWarn( "Access to raw $fname field " . __CLASS__ );
+                       return $this->mPage->$fname;
+               }
+               trigger_error( 'Inaccessible property via __get(): ' . $fname, E_USER_NOTICE );
+       }
+
+       /**
+        * Use PHP's magic __set handler to handle setting of
+        * raw WikiPage fields for backwards compatibility.
+        *
+        * @param string $fname Field name
+        * @param mixed $fvalue New value
+        */
+       public function __set( $fname, $fvalue ) {
+               if ( property_exists( $this->mPage, $fname ) ) {
+                       #wfWarn( "Access to raw $fname field of " . __CLASS__ );
+                       $this->mPage->$fname = $fvalue;
+               // Note: extensions may want to toss on new fields
+               } elseif ( !in_array( $fname, array( 'mContext', 'mPage' ) ) ) {
+                       $this->mPage->$fname = $fvalue;
+               } else {
+                       trigger_error( 'Inaccessible property via __set(): ' . $fname, E_USER_NOTICE );
+               }
+       }
+
+       /**
+        * Use PHP's magic __call handler to transform instance calls to
+        * WikiPage functions for backwards compatibility.
+        *
+        * @param string $fname Name of called method
+        * @param array $args Arguments to the method
+        * @return mixed
+        */
+       public function __call( $fname, $args ) {
+               if ( is_callable( array( $this->mPage, $fname ) ) ) {
+                       #wfWarn( "Call to " . __CLASS__ . "::$fname; please use WikiPage instead" );
+                       return call_user_func_array( array( $this->mPage, $fname ), $args );
+               }
+               trigger_error( 'Inaccessible function via __call(): ' . $fname, E_USER_ERROR );
+       }
+
+       // ****** B/C functions to work-around PHP silliness with __call and references ****** //
+
+       /**
+        * @param array $limit
+        * @param array $expiry
+        * @param bool $cascade
+        * @param string $reason
+        * @param User $user
+        * @return Status
+        */
+       public function doUpdateRestrictions( array $limit, array $expiry, &$cascade,
+               $reason, User $user
+       ) {
+               return $this->mPage->doUpdateRestrictions( $limit, $expiry, $cascade, $reason, $user );
+       }
+
+       /**
+        * @param array $limit
+        * @param string $reason
+        * @param int $cascade
+        * @param array $expiry
+        * @return bool
+        */
+       public function updateRestrictions( $limit = array(), $reason = '',
+               &$cascade = 0, $expiry = array()
+       ) {
+               return $this->mPage->doUpdateRestrictions(
+                       $limit,
+                       $expiry,
+                       $cascade,
+                       $reason,
+                       $this->getContext()->getUser()
+               );
+       }
+
+       /**
+        * @param string $reason
+        * @param bool $suppress
+        * @param int $id
+        * @param bool $commit
+        * @param string $error
+        * @return bool
+        */
+       public function doDeleteArticle( $reason, $suppress = false, $id = 0,
+               $commit = true, &$error = ''
+       ) {
+               return $this->mPage->doDeleteArticle( $reason, $suppress, $id, $commit, $error );
+       }
+
+       /**
+        * @param string $fromP
+        * @param string $summary
+        * @param string $token
+        * @param bool $bot
+        * @param array $resultDetails
+        * @param User|null $user
+        * @return array
+        */
+       public function doRollback( $fromP, $summary, $token, $bot, &$resultDetails, User $user = null ) {
+               $user = is_null( $user ) ? $this->getContext()->getUser() : $user;
+               return $this->mPage->doRollback( $fromP, $summary, $token, $bot, $resultDetails, $user );
+       }
+
+       /**
+        * @param string $fromP
+        * @param string $summary
+        * @param bool $bot
+        * @param array $resultDetails
+        * @param User|null $guser
+        * @return array
+        */
+       public function commitRollback( $fromP, $summary, $bot, &$resultDetails, User $guser = null ) {
+               $guser = is_null( $guser ) ? $this->getContext()->getUser() : $guser;
+               return $this->mPage->commitRollback( $fromP, $summary, $bot, $resultDetails, $guser );
+       }
+
+       /**
+        * @param bool $hasHistory
+        * @return mixed
+        */
+       public function generateReason( &$hasHistory ) {
+               $title = $this->mPage->getTitle();
+               $handler = ContentHandler::getForTitle( $title );
+               return $handler->getAutoDeleteReason( $title, $hasHistory );
+       }
+
+       // ****** B/C functions for static methods ( __callStatic is PHP>=5.3 ) ****** //
+
+       /**
+        * @return array
+        *
+        * @deprecated since 1.24, use WikiPage::selectFields() instead
+        */
+       public static function selectFields() {
+               wfDeprecated( __METHOD__, '1.24' );
+               return WikiPage::selectFields();
+       }
+
+       /**
+        * @param Title $title
+        *
+        * @deprecated since 1.24, use WikiPage::onArticleCreate() instead
+        */
+       public static function onArticleCreate( $title ) {
+               wfDeprecated( __METHOD__, '1.24' );
+               WikiPage::onArticleCreate( $title );
+       }
+
+       /**
+        * @param Title $title
+        *
+        * @deprecated since 1.24, use WikiPage::onArticleDelete() instead
+        */
+       public static function onArticleDelete( $title ) {
+               wfDeprecated( __METHOD__, '1.24' );
+               WikiPage::onArticleDelete( $title );
+       }
+
+       /**
+        * @param Title $title
+        *
+        * @deprecated since 1.24, use WikiPage::onArticleEdit() instead
+        */
+       public static function onArticleEdit( $title ) {
+               wfDeprecated( __METHOD__, '1.24' );
+               WikiPage::onArticleEdit( $title );
+       }
+
+       /**
+        * @param string $oldtext
+        * @param string $newtext
+        * @param int $flags
+        * @return string
+        * @deprecated since 1.21, use ContentHandler::getAutosummary() instead
+        */
+       public static function getAutosummary( $oldtext, $newtext, $flags ) {
+               return WikiPage::getAutosummary( $oldtext, $newtext, $flags );
+       }
+       // ******
+}
diff --git a/includes/page/CategoryPage.php b/includes/page/CategoryPage.php
new file mode 100644 (file)
index 0000000..9abc6a8
--- /dev/null
@@ -0,0 +1,118 @@
+<?php
+/**
+ * Special handling for category description pages.
+ * Modelled after ImagePage.php.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Special handling for category description pages, showing pages,
+ * subcategories and file that belong to the category
+ */
+class CategoryPage extends Article {
+       # Subclasses can change this to override the viewer class.
+       protected $mCategoryViewerClass = 'CategoryViewer';
+
+       /**
+        * @param Title $title
+        * @return WikiCategoryPage
+        */
+       protected function newPage( Title $title ) {
+               // Overload mPage with a category-specific page
+               return new WikiCategoryPage( $title );
+       }
+
+       /**
+        * Constructor from a page id
+        * @param int $id Article ID to load
+        * @return CategoryPage|null
+        */
+       public static function newFromID( $id ) {
+               $t = Title::newFromID( $id );
+               # @todo FIXME: Doesn't inherit right
+               return $t == null ? null : new self( $t );
+               # return $t == null ? null : new static( $t ); // PHP 5.3
+       }
+
+       function view() {
+               $request = $this->getContext()->getRequest();
+               $diff = $request->getVal( 'diff' );
+               $diffOnly = $request->getBool( 'diffonly',
+                       $this->getContext()->getUser()->getOption( 'diffonly' ) );
+
+               if ( $diff !== null && $diffOnly ) {
+                       parent::view();
+                       return;
+               }
+
+               if ( !wfRunHooks( 'CategoryPageView', array( &$this ) ) ) {
+                       return;
+               }
+
+               $title = $this->getTitle();
+               if ( NS_CATEGORY == $title->getNamespace() ) {
+                       $this->openShowCategory();
+               }
+
+               parent::view();
+
+               if ( NS_CATEGORY == $title->getNamespace() ) {
+                       $this->closeShowCategory();
+               }
+       }
+
+       function openShowCategory() {
+               # For overloading
+       }
+
+       function closeShowCategory() {
+               // Use these as defaults for back compat --catrope
+               $request = $this->getContext()->getRequest();
+               $oldFrom = $request->getVal( 'from' );
+               $oldUntil = $request->getVal( 'until' );
+
+               $reqArray = $request->getValues();
+
+               $from = $until = array();
+               foreach ( array( 'page', 'subcat', 'file' ) as $type ) {
+                       $from[$type] = $request->getVal( "{$type}from", $oldFrom );
+                       $until[$type] = $request->getVal( "{$type}until", $oldUntil );
+
+                       // Do not want old-style from/until propagating in nav links.
+                       if ( !isset( $reqArray["{$type}from"] ) && isset( $reqArray["from"] ) ) {
+                               $reqArray["{$type}from"] = $reqArray["from"];
+                       }
+                       if ( !isset( $reqArray["{$type}to"] ) && isset( $reqArray["to"] ) ) {
+                               $reqArray["{$type}to"] = $reqArray["to"];
+                       }
+               }
+
+               unset( $reqArray["from"] );
+               unset( $reqArray["to"] );
+
+               $viewer = new $this->mCategoryViewerClass(
+                       $this->getContext()->getTitle(),
+                       $this->getContext(),
+                       $from,
+                       $until,
+                       $reqArray
+               );
+               $this->getContext()->getOutput()->addHTML( $viewer->getHTML() );
+       }
+}
diff --git a/includes/page/ImagePage.php b/includes/page/ImagePage.php
new file mode 100644 (file)
index 0000000..60db202
--- /dev/null
@@ -0,0 +1,1567 @@
+<?php
+/**
+ * Special handling for file description pages.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Class for viewing MediaWiki file description pages
+ *
+ * @ingroup Media
+ */
+class ImagePage extends Article {
+       /** @var File */
+       private $displayImg;
+
+       /** @var FileRepo */
+       private $repo;
+
+       /** @var bool */
+       private $fileLoaded;
+
+       /** @var bool */
+       protected $mExtraDescription = false;
+
+       /**
+        * @param Title $title
+        * @return WikiFilePage
+        */
+       protected function newPage( Title $title ) {
+               // Overload mPage with a file-specific page
+               return new WikiFilePage( $title );
+       }
+
+       /**
+        * Constructor from a page id
+        * @param int $id Article ID to load
+        * @return ImagePage|null
+        */
+       public static function newFromID( $id ) {
+               $t = Title::newFromID( $id );
+               # @todo FIXME: Doesn't inherit right
+               return $t == null ? null : new self( $t );
+               # return $t == null ? null : new static( $t ); // PHP 5.3
+       }
+
+       /**
+        * @param File $file
+        * @return void
+        */
+       public function setFile( $file ) {
+               $this->mPage->setFile( $file );
+               $this->displayImg = $file;
+               $this->fileLoaded = true;
+       }
+
+       protected function loadFile() {
+               if ( $this->fileLoaded ) {
+                       return;
+               }
+               $this->fileLoaded = true;
+
+               $this->displayImg = $img = false;
+               wfRunHooks( 'ImagePageFindFile', array( $this, &$img, &$this->displayImg ) );
+               if ( !$img ) { // not set by hook?
+                       $img = wfFindFile( $this->getTitle() );
+                       if ( !$img ) {
+                               $img = wfLocalFile( $this->getTitle() );
+                       }
+               }
+               $this->mPage->setFile( $img );
+               if ( !$this->displayImg ) { // not set by hook?
+                       $this->displayImg = $img;
+               }
+               $this->repo = $img->getRepo();
+       }
+
+       /**
+        * Handler for action=render
+        * Include body text only; none of the image extras
+        */
+       public function render() {
+               $this->getContext()->getOutput()->setArticleBodyOnly( true );
+               parent::view();
+       }
+
+       public function view() {
+               global $wgShowEXIF;
+
+               $out = $this->getContext()->getOutput();
+               $request = $this->getContext()->getRequest();
+               $diff = $request->getVal( 'diff' );
+               $diffOnly = $request->getBool(
+                       'diffonly',
+                       $this->getContext()->getUser()->getOption( 'diffonly' )
+               );
+
+               if ( $this->getTitle()->getNamespace() != NS_FILE || ( $diff !== null && $diffOnly ) ) {
+                       parent::view();
+                       return;
+               }
+
+               $this->loadFile();
+
+               if ( $this->getTitle()->getNamespace() == NS_FILE && $this->mPage->getFile()->getRedirected() ) {
+                       if ( $this->getTitle()->getDBkey() == $this->mPage->getFile()->getName() || $diff !== null ) {
+                               // mTitle is the same as the redirect target so ask Article
+                               // to perform the redirect for us.
+                               $request->setVal( 'diffonly', 'true' );
+                               parent::view();
+                               return;
+                       } else {
+                               // mTitle is not the same as the redirect target so it is
+                               // probably the redirect page itself. Fake the redirect symbol
+                               $out->setPageTitle( $this->getTitle()->getPrefixedText() );
+                               $out->addHTML( $this->viewRedirect(
+                                       Title::makeTitle( NS_FILE, $this->mPage->getFile()->getName() ),
+                                       /* $appendSubtitle */ true,
+                                       /* $forceKnown */ true )
+                               );
+                               $this->mPage->doViewUpdates( $this->getContext()->getUser(), $this->getOldID() );
+                               return;
+                       }
+               }
+
+               if ( $wgShowEXIF && $this->displayImg->exists() ) {
+                       // @todo FIXME: Bad interface, see note on MediaHandler::formatMetadata().
+                       $formattedMetadata = $this->displayImg->formatMetadata();
+                       $showmeta = $formattedMetadata !== false;
+               } else {
+                       $showmeta = false;
+               }
+
+               if ( !$diff && $this->displayImg->exists() ) {
+                       $out->addHTML( $this->showTOC( $showmeta ) );
+               }
+
+               if ( !$diff ) {
+                       $this->openShowImage();
+               }
+
+               # No need to display noarticletext, we use our own message, output in openShowImage()
+               if ( $this->mPage->getID() ) {
+                       # NS_FILE is in the user language, but this section (the actual wikitext)
+                       # should be in page content language
+                       $pageLang = $this->getTitle()->getPageViewLanguage();
+                       $out->addHTML( Xml::openElement( 'div', array( 'id' => 'mw-imagepage-content',
+                               'lang' => $pageLang->getHtmlCode(), 'dir' => $pageLang->getDir(),
+                               'class' => 'mw-content-' . $pageLang->getDir() ) ) );
+
+                       parent::view();
+
+                       $out->addHTML( Xml::closeElement( 'div' ) );
+               } else {
+                       # Just need to set the right headers
+                       $out->setArticleFlag( true );
+                       $out->setPageTitle( $this->getTitle()->getPrefixedText() );
+                       $this->mPage->doViewUpdates( $this->getContext()->getUser(), $this->getOldID() );
+               }
+
+               # Show shared description, if needed
+               if ( $this->mExtraDescription ) {
+                       $fol = wfMessage( 'shareddescriptionfollows' );
+                       if ( !$fol->isDisabled() ) {
+                               $out->addWikiText( $fol->plain() );
+                       }
+                       $out->addHTML( '<div id="shared-image-desc">' . $this->mExtraDescription . "</div>\n" );
+               }
+
+               $this->closeShowImage();
+               $this->imageHistory();
+               // TODO: Cleanup the following
+
+               $out->addHTML( Xml::element( 'h2',
+                       array( 'id' => 'filelinks' ),
+                       wfMessage( 'imagelinks' )->text() ) . "\n" );
+               $this->imageDupes();
+               # @todo FIXME: For some freaky reason, we can't redirect to foreign images.
+               # Yet we return metadata about the target. Definitely an issue in the FileRepo
+               $this->imageLinks();
+
+               # Allow extensions to add something after the image links
+               $html = '';
+               wfRunHooks( 'ImagePageAfterImageLinks', array( $this, &$html ) );
+               if ( $html ) {
+                       $out->addHTML( $html );
+               }
+
+               if ( $showmeta ) {
+                       $out->addHTML( Xml::element(
+                               'h2',
+                               array( 'id' => 'metadata' ),
+                               wfMessage( 'metadata' )->text() ) . "\n" );
+                       $out->addWikiText( $this->makeMetadataTable( $formattedMetadata ) );
+                       $out->addModules( array( 'mediawiki.action.view.metadata' ) );
+               }
+
+               // Add remote Filepage.css
+               if ( !$this->repo->isLocal() ) {
+                       $css = $this->repo->getDescriptionStylesheetUrl();
+                       if ( $css ) {
+                               $out->addStyle( $css );
+                       }
+               }
+               // always show the local local Filepage.css, bug 29277
+               $out->addModuleStyles( 'filepage' );
+       }
+
+       /**
+        * @return File
+        */
+       public function getDisplayedFile() {
+               $this->loadFile();
+               return $this->displayImg;
+       }
+
+       /**
+        * Create the TOC
+        *
+        * @param bool $metadata Whether or not to show the metadata link
+        * @return string
+        */
+       protected function showTOC( $metadata ) {
+               $r = array(
+                       '<li><a href="#file">' . wfMessage( 'file-anchor-link' )->escaped() . '</a></li>',
+                       '<li><a href="#filehistory">' . wfMessage( 'filehist' )->escaped() . '</a></li>',
+                       '<li><a href="#filelinks">' . wfMessage( 'imagelinks' )->escaped() . '</a></li>',
+               );
+               if ( $metadata ) {
+                       $r[] = '<li><a href="#metadata">' . wfMessage( 'metadata' )->escaped() . '</a></li>';
+               }
+
+               wfRunHooks( 'ImagePageShowTOC', array( $this, &$r ) );
+
+               return '<ul id="filetoc">' . implode( "\n", $r ) . '</ul>';
+       }
+
+       /**
+        * Make a table with metadata to be shown in the output page.
+        *
+        * @todo FIXME: Bad interface, see note on MediaHandler::formatMetadata().
+        *
+        * @param array $metadata The array containing the Exif data
+        * @return string The metadata table. This is treated as Wikitext (!)
+        */
+       protected function makeMetadataTable( $metadata ) {
+               $r = "<div class=\"mw-imagepage-section-metadata\">";
+               $r .= wfMessage( 'metadata-help' )->plain();
+               $r .= "<table id=\"mw_metadata\" class=\"mw_metadata\">\n";
+               foreach ( $metadata as $type => $stuff ) {
+                       foreach ( $stuff as $v ) {
+                               # @todo FIXME: Why is this using escapeId for a class?!
+                               $class = Sanitizer::escapeId( $v['id'] );
+                               if ( $type == 'collapsed' ) {
+                                       // Handled by mediawiki.action.view.metadata module
+                                       // and skins/common/shared.css.
+                                       $class .= ' collapsable';
+                               }
+                               $r .= "<tr class=\"$class\">\n";
+                               $r .= "<th>{$v['name']}</th>\n";
+                               $r .= "<td>{$v['value']}</td>\n</tr>";
+                       }
+               }
+               $r .= "</table>\n</div>\n";
+               return $r;
+       }
+
+       /**
+        * Overloading Article's getContentObject method.
+        *
+        * Omit noarticletext if sharedupload; text will be fetched from the
+        * shared upload server if possible.
+        * @return string
+        */
+       public function getContentObject() {
+               $this->loadFile();
+               if ( $this->mPage->getFile() && !$this->mPage->getFile()->isLocal() && 0 == $this->getID() ) {
+                       return null;
+               }
+               return parent::getContentObject();
+       }
+
+       protected function openShowImage() {
+               global $wgImageLimits, $wgEnableUploads, $wgSend404Code;
+
+               $this->loadFile();
+               $out = $this->getContext()->getOutput();
+               $user = $this->getContext()->getUser();
+               $lang = $this->getContext()->getLanguage();
+               $dirmark = $lang->getDirMarkEntity();
+               $request = $this->getContext()->getRequest();
+
+               $max = $this->getImageLimitsFromOption( $user, 'imagesize' );
+               $maxWidth = $max[0];
+               $maxHeight = $max[1];
+
+               if ( $this->displayImg->exists() ) {
+                       # image
+                       $page = $request->getIntOrNull( 'page' );
+                       if ( is_null( $page ) ) {
+                               $params = array();
+                               $page = 1;
+                       } else {
+                               $params = array( 'page' => $page );
+                       }
+
+                       $renderLang = $request->getVal( 'lang' );
+                       if ( !is_null( $renderLang ) ) {
+                               $handler = $this->displayImg->getHandler();
+                               if ( $handler && $handler->validateParam( 'lang', $renderLang ) ) {
+                                       $params['lang'] = $renderLang;
+                               } else {
+                                       $renderLang = null;
+                               }
+                       }
+
+                       $width_orig = $this->displayImg->getWidth( $page );
+                       $width = $width_orig;
+                       $height_orig = $this->displayImg->getHeight( $page );
+                       $height = $height_orig;
+
+                       $filename = wfEscapeWikiText( $this->displayImg->getName() );
+                       $linktext = $filename;
+
+                       wfRunHooks( 'ImageOpenShowImageInlineBefore', array( &$this, &$out ) );
+
+                       if ( $this->displayImg->allowInlineDisplay() ) {
+                               # image
+
+                               # "Download high res version" link below the image
+                               # $msgsize = wfMessage( 'file-info-size', $width_orig, $height_orig,
+                               #   Linker::formatSize( $this->displayImg->getSize() ), $mime )->escaped();
+                               # We'll show a thumbnail of this image
+                               if ( $width > $maxWidth || $height > $maxHeight ) {
+                                       # Calculate the thumbnail size.
+                                       # First case, the limiting factor is the width, not the height.
+                                       /** @todo // FIXME: Possible division by 0. bug 36911 */
+                                       if ( $width / $height >= $maxWidth / $maxHeight ) {
+                                               /** @todo // FIXME: Possible division by 0. bug 36911 */
+                                               $height = round( $height * $maxWidth / $width );
+                                               $width = $maxWidth;
+                                               # Note that $height <= $maxHeight now.
+                                       } else {
+                                               /** @todo // FIXME: Possible division by 0. bug 36911 */
+                                               $newwidth = floor( $width * $maxHeight / $height );
+                                               /** @todo // FIXME: Possible division by 0. bug 36911 */
+                                               $height = round( $height * $newwidth / $width );
+                                               $width = $newwidth;
+                                               # Note that $height <= $maxHeight now, but might not be identical
+                                               # because of rounding.
+                                       }
+                                       $linktext = wfMessage( 'show-big-image' )->escaped();
+                                       if ( $this->displayImg->getRepo()->canTransformVia404() ) {
+                                               $thumbSizes = $wgImageLimits;
+                                               // Also include the full sized resolution in the list, so
+                                               // that users know they can get it. This will link to the
+                                               // original file asset if mustRender() === false. In the case
+                                               // that we mustRender, some users have indicated that they would
+                                               // find it useful to have the full size image in the rendered
+                                               // image format.
+                                               $thumbSizes[] = array( $width_orig, $height_orig );
+                                       } else {
+                                               # Creating thumb links triggers thumbnail generation.
+                                               # Just generate the thumb for the current users prefs.
+                                               $thumbSizes = array( $this->getImageLimitsFromOption( $user, 'thumbsize' ) );
+                                               if ( !$this->displayImg->mustRender() ) {
+                                                       // We can safely include a link to the "full-size" preview,
+                                                       // without actually rendering.
+                                                       $thumbSizes[] = array( $width_orig, $height_orig );
+                                               }
+                                       }
+                                       # Generate thumbnails or thumbnail links as needed...
+                                       $otherSizes = array();
+                                       foreach ( $thumbSizes as $size ) {
+                                               // We include a thumbnail size in the list, if it is
+                                               // less than or equal to the original size of the image
+                                               // asset ($width_orig/$height_orig). We also exclude
+                                               // the current thumbnail's size ($width/$height)
+                                               // since that is added to the message separately, so
+                                               // it can be denoted as the current size being shown.
+                                               if ( $size[0] <= $width_orig && $size[1] <= $height_orig
+                                                       && $size[0] != $width && $size[1] != $height
+                                               ) {
+                                                       $sizeLink = $this->makeSizeLink( $params, $size[0], $size[1] );
+                                                       if ( $sizeLink ) {
+                                                               $otherSizes[] = $sizeLink;
+                                                       }
+                                               }
+                                       }
+                                       $otherSizes = array_unique( $otherSizes );
+                                       $msgsmall = '';
+                                       $sizeLinkBigImagePreview = $this->makeSizeLink( $params, $width, $height );
+                                       if ( $sizeLinkBigImagePreview ) {
+                                               $msgsmall .= wfMessage( 'show-big-image-preview' )->
+                                                       rawParams( $sizeLinkBigImagePreview )->
+                                                       parse();
+                                       }
+                                       if ( count( $otherSizes ) ) {
+                                               $msgsmall .= ' ' .
+                                               Html::rawElement( 'span', array( 'class' => 'mw-filepage-other-resolutions' ),
+                                                       wfMessage( 'show-big-image-other' )->rawParams( $lang->pipeList( $otherSizes ) )->
+                                                       params( count( $otherSizes ) )->parse()
+                                               );
+                                       }
+                               } elseif ( $width == 0 && $height == 0 ) {
+                                       # Some sort of audio file that doesn't have dimensions
+                                       # Don't output a no hi res message for such a file
+                                       $msgsmall = '';
+                               } elseif ( $this->displayImg->isVectorized() ) {
+                                       # For vectorized images, full size is just the frame size
+                                       $msgsmall = '';
+                               } else {
+                                       # Image is small enough to show full size on image page
+                                       $msgsmall = wfMessage( 'file-nohires' )->parse();
+                               }
+
+                               $params['width'] = $width;
+                               $params['height'] = $height;
+                               $thumbnail = $this->displayImg->transform( $params );
+                               Linker::processResponsiveImages( $this->displayImg, $thumbnail, $params );
+
+                               $anchorclose = Html::rawElement(
+                                       'div',
+                                       array( 'class' => 'mw-filepage-resolutioninfo' ),
+                                       $msgsmall
+                               );
+
+                               $isMulti = $this->displayImg->isMultipage() && $this->displayImg->pageCount() > 1;
+                               if ( $isMulti ) {
+                                       $out->addModules( 'mediawiki.page.image.pagination' );
+                                       $out->addHTML( '<table class="multipageimage"><tr><td>' );
+                               }
+
+                               if ( $thumbnail ) {
+                                       $options = array(
+                                               'alt' => $this->displayImg->getTitle()->getPrefixedText(),
+                                               'file-link' => true,
+                                       );
+                                       $out->addHTML( '<div class="fullImageLink" id="file">' .
+                                               $thumbnail->toHtml( $options ) .
+                                               $anchorclose . "</div>\n" );
+                               }
+
+                               if ( $isMulti ) {
+                                       $count = $this->displayImg->pageCount();
+
+                                       if ( $page > 1 ) {
+                                               $label = $out->parse( wfMessage( 'imgmultipageprev' )->text(), false );
+                                               $link = Linker::linkKnown(
+                                                       $this->getTitle(),
+                                                       $label,
+                                                       array(),
+                                                       array( 'page' => $page - 1 )
+                                               );
+                                               $thumb1 = Linker::makeThumbLinkObj(
+                                                       $this->getTitle(),
+                                                       $this->displayImg,
+                                                       $link,
+                                                       $label,
+                                                       'none',
+                                                       array( 'page' => $page - 1 )
+                                               );
+                                       } else {
+                                               $thumb1 = '';
+                                       }
+
+                                       if ( $page < $count ) {
+                                               $label = wfMessage( 'imgmultipagenext' )->text();
+                                               $link = Linker::linkKnown(
+                                                       $this->getTitle(),
+                                                       $label,
+                                                       array(),
+                                                       array( 'page' => $page + 1 )
+                                               );
+                                               $thumb2 = Linker::makeThumbLinkObj(
+                                                       $this->getTitle(),
+                                                       $this->displayImg,
+                                                       $link,
+                                                       $label,
+                                                       'none',
+                                                       array( 'page' => $page + 1 )
+                                               );
+                                       } else {
+                                               $thumb2 = '';
+                                       }
+
+                                       global $wgScript;
+
+                                       $formParams = array(
+                                               'name' => 'pageselector',
+                                               'action' => $wgScript,
+                                       );
+                                       $options = array();
+                                       for ( $i = 1; $i <= $count; $i++ ) {
+                                               $options[] = Xml::option( $lang->formatNum( $i ), $i, $i == $page );
+                                       }
+                                       $select = Xml::tags( 'select',
+                                               array( 'id' => 'pageselector', 'name' => 'page' ),
+                                               implode( "\n", $options ) );
+
+                                       $out->addHTML(
+                                               '</td><td><div class="multipageimagenavbox">' .
+                                               Xml::openElement( 'form', $formParams ) .
+                                               Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) .
+                                                       wfMessage( 'imgmultigoto' )->rawParams( $select )->parse() .
+                                               Xml::submitButton( wfMessage( 'imgmultigo' )->text() ) .
+                                               Xml::closeElement( 'form' ) .
+                                               "<hr />$thumb1\n$thumb2<br style=\"clear: both\" /></div></td></tr></table>"
+                                       );
+                               }
+                       } elseif ( $this->displayImg->isSafeFile() ) {
+                               # if direct link is allowed but it's not a renderable image, show an icon.
+                               $icon = $this->displayImg->iconThumb();
+
+                               $out->addHTML( '<div class="fullImageLink" id="file">' .
+                                       $icon->toHtml( array( 'file-link' => true ) ) .
+                                       "</div>\n" );
+                       }
+
+                       $longDesc = wfMessage( 'parentheses', $this->displayImg->getLongDesc() )->text();
+
+                       $medialink = "[[Media:$filename|$linktext]]";
+
+                       if ( !$this->displayImg->isSafeFile() ) {
+                               $warning = wfMessage( 'mediawarning' )->plain();
+                               // dirmark is needed here to separate the file name, which
+                               // most likely ends in Latin characters, from the description,
+                               // which may begin with the file type. In RTL environment
+                               // this will get messy.
+                               // The dirmark, however, must not be immediately adjacent
+                               // to the filename, because it can get copied with it.
+                               // See bug 25277.
+                               // @codingStandardsIgnoreStart Ignore long line
+                               $out->addWikiText( <<<EOT
+<div class="fullMedia"><span class="dangerousLink">{$medialink}</span> $dirmark<span class="fileInfo">$longDesc</span></div>
+<div class="mediaWarning">$warning</div>
+EOT
+                               );
+                               // @codingStandardsIgnoreEnd
+                       } else {
+                               $out->addWikiText( <<<EOT
+<div class="fullMedia">{$medialink} {$dirmark}<span class="fileInfo">$longDesc</span>
+</div>
+EOT
+                               );
+                       }
+
+                       $renderLangOptions = $this->displayImg->getAvailableLanguages();
+                       if ( count( $renderLangOptions ) >= 1 ) {
+                               $currentLanguage = $renderLang;
+                               $defaultLang = $this->displayImg->getDefaultRenderLanguage();
+                               if ( is_null( $currentLanguage ) ) {
+                                       $currentLanguage = $defaultLang;
+                               }
+                               $out->addHtml( $this->doRenderLangOpt( $renderLangOptions, $currentLanguage, $defaultLang ) );
+                       }
+
+                       // Add cannot animate thumbnail warning
+                       if ( !$this->displayImg->canAnimateThumbIfAppropriate() ) {
+                               // Include the extension so wiki admins can
+                               // customize it on a per file-type basis
+                               // (aka say things like use format X instead).
+                               // additionally have a specific message for
+                               // file-no-thumb-animation-gif
+                               $ext = $this->displayImg->getExtension();
+                               $noAnimMesg = wfMessageFallback(
+                                       'file-no-thumb-animation-' . $ext,
+                                       'file-no-thumb-animation'
+                               )->plain();
+
+                               $out->addWikiText( <<<EOT
+<div class="mw-noanimatethumb">{$noAnimMesg}</div>
+EOT
+                               );
+                       }
+
+                       if ( !$this->displayImg->isLocal() ) {
+                               $this->printSharedImageText();
+                       }
+               } else {
+                       # Image does not exist
+                       if ( !$this->getID() ) {
+                               # No article exists either
+                               # Show deletion log to be consistent with normal articles
+                               LogEventsList::showLogExtract(
+                                       $out,
+                                       array( 'delete', 'move' ),
+                                       $this->getTitle()->getPrefixedText(),
+                                       '',
+                                       array( 'lim' => 10,
+                                               'conds' => array( "log_action != 'revision'" ),
+                                               'showIfEmpty' => false,
+                                               'msgKey' => array( 'moveddeleted-notice' )
+                                       )
+                               );
+                       }
+
+                       if ( $wgEnableUploads && $user->isAllowed( 'upload' ) ) {
+                               // Only show an upload link if the user can upload
+                               $uploadTitle = SpecialPage::getTitleFor( 'Upload' );
+                               $nofile = array(
+                                       'filepage-nofile-link',
+                                       $uploadTitle->getFullURL( array( 'wpDestFile' => $this->mPage->getFile()->getName() ) )
+                               );
+                       } else {
+                               $nofile = 'filepage-nofile';
+                       }
+                       // Note, if there is an image description page, but
+                       // no image, then this setRobotPolicy is overridden
+                       // by Article::View().
+                       $out->setRobotPolicy( 'noindex,nofollow' );
+                       $out->wrapWikiMsg( "<div id='mw-imagepage-nofile' class='plainlinks'>\n$1\n</div>", $nofile );
+                       if ( !$this->getID() && $wgSend404Code ) {
+                               // If there is no image, no shared image, and no description page,
+                               // output a 404, to be consistent with articles.
+                               $request->response()->header( 'HTTP/1.1 404 Not Found' );
+                       }
+               }
+               $out->setFileVersion( $this->displayImg );
+       }
+
+       /**
+        * Creates an thumbnail of specified size and returns an HTML link to it
+        * @param array $params Scaler parameters
+        * @param int $width
+        * @param int $height
+        * @return string
+        */
+       private function makeSizeLink( $params, $width, $height ) {
+               $params['width'] = $width;
+               $params['height'] = $height;
+               $thumbnail = $this->displayImg->transform( $params );
+               if ( $thumbnail && !$thumbnail->isError() ) {
+                       return Html::rawElement( 'a', array(
+                               'href' => $thumbnail->getUrl(),
+                               'class' => 'mw-thumbnail-link'
+                               ), wfMessage( 'show-big-image-size' )->numParams(
+                                       $thumbnail->getWidth(), $thumbnail->getHeight()
+                               )->parse() );
+               } else {
+                       return '';
+               }
+       }
+
+       /**
+        * Show a notice that the file is from a shared repository
+        */
+       protected function printSharedImageText() {
+               $out = $this->getContext()->getOutput();
+               $this->loadFile();
+
+               $descUrl = $this->mPage->getFile()->getDescriptionUrl();
+               $descText = $this->mPage->getFile()->getDescriptionText( $this->getContext()->getLanguage() );
+
+               /* Add canonical to head if there is no local page for this shared file */
+               if ( $descUrl && $this->mPage->getID() == 0 ) {
+                       $out->setCanonicalUrl( $descUrl );
+               }
+
+               $wrap = "<div class=\"sharedUploadNotice\">\n$1\n</div>\n";
+               $repo = $this->mPage->getFile()->getRepo()->getDisplayName();
+
+               if ( $descUrl && $descText && wfMessage( 'sharedupload-desc-here' )->plain() !== '-' ) {
+                       $out->wrapWikiMsg( $wrap, array( 'sharedupload-desc-here', $repo, $descUrl ) );
+               } elseif ( $descUrl && wfMessage( 'sharedupload-desc-there' )->plain() !== '-' ) {
+                       $out->wrapWikiMsg( $wrap, array( 'sharedupload-desc-there', $repo, $descUrl ) );
+               } else {
+                       $out->wrapWikiMsg( $wrap, array( 'sharedupload', $repo ), ''/*BACKCOMPAT*/ );
+               }
+
+               if ( $descText ) {
+                       $this->mExtraDescription = $descText;
+               }
+       }
+
+       public function getUploadUrl() {
+               $this->loadFile();
+               $uploadTitle = SpecialPage::getTitleFor( 'Upload' );
+               return $uploadTitle->getFullURL( array(
+                       'wpDestFile' => $this->mPage->getFile()->getName(),
+                       'wpForReUpload' => 1
+               ) );
+       }
+
+       /**
+        * Print out the various links at the bottom of the image page, e.g. reupload,
+        * external editing (and instructions link) etc.
+        */
+       protected function uploadLinksBox() {
+               global $wgEnableUploads;
+
+               if ( !$wgEnableUploads ) {
+                       return;
+               }
+
+               $this->loadFile();
+               if ( !$this->mPage->getFile()->isLocal() ) {
+                       return;
+               }
+
+               $out = $this->getContext()->getOutput();
+               $out->addHTML( "<ul>\n" );
+
+               # "Upload a new version of this file" link
+               $canUpload = $this->getTitle()->userCan( 'upload', $this->getContext()->getUser() );
+               if ( $canUpload && UploadBase::userCanReUpload(
+                               $this->getContext()->getUser(),
+                               $this->mPage->getFile()->name )
+               ) {
+                       $ulink = Linker::makeExternalLink(
+                               $this->getUploadUrl(),
+                               wfMessage( 'uploadnewversion-linktext' )->text()
+                       );
+                       $out->addHTML( "<li id=\"mw-imagepage-reupload-link\">"
+                               . "<div class=\"plainlinks\">{$ulink}</div></li>\n" );
+               } else {
+                       $out->addHTML( "<li id=\"mw-imagepage-upload-disallowed\">"
+                               . $this->getContext()->msg( 'upload-disallowed-here' )->escaped() . "</li>\n" );
+               }
+
+               $out->addHTML( "</ul>\n" );
+       }
+
+       /**
+        * For overloading
+        */
+       protected function closeShowImage() {
+       }
+
+       /**
+        * If the page we've just displayed is in the "Image" namespace,
+        * we follow it with an upload history of the image and its usage.
+        */
+       protected function imageHistory() {
+               $this->loadFile();
+               $out = $this->getContext()->getOutput();
+               $pager = new ImageHistoryPseudoPager( $this );
+               $out->addHTML( $pager->getBody() );
+               $out->preventClickjacking( $pager->getPreventClickjacking() );
+
+               $this->mPage->getFile()->resetHistory(); // free db resources
+
+               # Exist check because we don't want to show this on pages where an image
+               # doesn't exist along with the noimage message, that would suck. -ævar
+               if ( $this->mPage->getFile()->exists() ) {
+                       $this->uploadLinksBox();
+               }
+       }
+
+       /**
+        * @param string $target
+        * @param int $limit
+        * @return ResultWrapper
+        */
+       protected function queryImageLinks( $target, $limit ) {
+               $dbr = wfGetDB( DB_SLAVE );
+
+               return $dbr->select(
+                       array( 'imagelinks', 'page' ),
+                       array( 'page_namespace', 'page_title', 'il_to' ),
+                       array( 'il_to' => $target, 'il_from = page_id' ),
+                       __METHOD__,
+                       array( 'LIMIT' => $limit + 1, 'ORDER BY' => 'il_from', )
+               );
+       }
+
+       protected function imageLinks() {
+               $limit = 100;
+
+               $out = $this->getContext()->getOutput();
+
+               $rows = array();
+               $redirects = array();
+               foreach ( $this->getTitle()->getRedirectsHere( NS_FILE ) as $redir ) {
+                       $redirects[$redir->getDBkey()] = array();
+                       $rows[] = (object)array(
+                               'page_namespace' => NS_FILE,
+                               'page_title' => $redir->getDBkey(),
+                       );
+               }
+
+               $res = $this->queryImageLinks( $this->getTitle()->getDBkey(), $limit + 1 );
+               foreach ( $res as $row ) {
+                       $rows[] = $row;
+               }
+               $count = count( $rows );
+
+               $hasMore = $count > $limit;
+               if ( !$hasMore && count( $redirects ) ) {
+                       $res = $this->queryImageLinks( array_keys( $redirects ),
+                               $limit - count( $rows ) + 1 );
+                       foreach ( $res as $row ) {
+                               $redirects[$row->il_to][] = $row;
+                               $count++;
+                       }
+                       $hasMore = ( $res->numRows() + count( $rows ) ) > $limit;
+               }
+
+               if ( $count == 0 ) {
+                       $out->wrapWikiMsg(
+                               Html::rawElement( 'div',
+                                       array( 'id' => 'mw-imagepage-nolinkstoimage' ), "\n$1\n" ),
+                               'nolinkstoimage'
+                       );
+                       return;
+               }
+
+               $out->addHTML( "<div id='mw-imagepage-section-linkstoimage'>\n" );
+               if ( !$hasMore ) {
+                       $out->addWikiMsg( 'linkstoimage', $count );
+               } else {
+                       // More links than the limit. Add a link to [[Special:Whatlinkshere]]
+                       $out->addWikiMsg( 'linkstoimage-more',
+                               $this->getContext()->getLanguage()->formatNum( $limit ),
+                               $this->getTitle()->getPrefixedDBkey()
+                       );
+               }
+
+               $out->addHTML(
+                       Html::openElement( 'ul',
+                               array( 'class' => 'mw-imagepage-linkstoimage' ) ) . "\n"
+               );
+               $count = 0;
+
+               // Sort the list by namespace:title
+               usort( $rows, array( $this, 'compare' ) );
+
+               // Create links for every element
+               $currentCount = 0;
+               foreach ( $rows as $element ) {
+                       $currentCount++;
+                       if ( $currentCount > $limit ) {
+                               break;
+                       }
+
+                       $query = array();
+                       # Add a redirect=no to make redirect pages reachable
+                       if ( isset( $redirects[$element->page_title] ) ) {
+                               $query['redirect'] = 'no';
+                       }
+                       $link = Linker::linkKnown(
+                               Title::makeTitle( $element->page_namespace, $element->page_title ),
+                               null, array(), $query
+                       );
+                       if ( !isset( $redirects[$element->page_title] ) ) {
+                               # No redirects
+                               $liContents = $link;
+                       } elseif ( count( $redirects[$element->page_title] ) === 0 ) {
+                               # Redirect without usages
+                               $liContents = wfMessage( 'linkstoimage-redirect' )->rawParams( $link, '' )->parse();
+                       } else {
+                               # Redirect with usages
+                               $li = '';
+                               foreach ( $redirects[$element->page_title] as $row ) {
+                                       $currentCount++;
+                                       if ( $currentCount > $limit ) {
+                                               break;
+                                       }
+
+                                       $link2 = Linker::linkKnown( Title::makeTitle( $row->page_namespace, $row->page_title ) );
+                                       $li .= Html::rawElement(
+                                               'li',
+                                               array( 'class' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
+                                               $link2
+                                               ) . "\n";
+                               }
+
+                               $ul = Html::rawElement(
+                                       'ul',
+                                       array( 'class' => 'mw-imagepage-redirectstofile' ),
+                                       $li
+                                       ) . "\n";
+                               $liContents = wfMessage( 'linkstoimage-redirect' )->rawParams(
+                                       $link, $ul )->parse();
+                       }
+                       $out->addHTML( Html::rawElement(
+                                       'li',
+                                       array( 'class' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
+                                       $liContents
+                               ) . "\n"
+                       );
+
+               };
+               $out->addHTML( Html::closeElement( 'ul' ) . "\n" );
+               $res->free();
+
+               // Add a links to [[Special:Whatlinkshere]]
+               if ( $count > $limit ) {
+                       $out->addWikiMsg( 'morelinkstoimage', $this->getTitle()->getPrefixedDBkey() );
+               }
+               $out->addHTML( Html::closeElement( 'div' ) . "\n" );
+       }
+
+       protected function imageDupes() {
+               $this->loadFile();
+               $out = $this->getContext()->getOutput();
+
+               $dupes = $this->mPage->getDuplicates();
+               if ( count( $dupes ) == 0 ) {
+                       return;
+               }
+
+               $out->addHTML( "<div id='mw-imagepage-section-duplicates'>\n" );
+               $out->addWikiMsg( 'duplicatesoffile',
+                       $this->getContext()->getLanguage()->formatNum( count( $dupes ) ), $this->getTitle()->getDBkey()
+               );
+               $out->addHTML( "<ul class='mw-imagepage-duplicates'>\n" );
+
+               /**
+                * @var $file File
+                */
+               foreach ( $dupes as $file ) {
+                       $fromSrc = '';
+                       if ( $file->isLocal() ) {
+                               $link = Linker::linkKnown( $file->getTitle() );
+                       } else {
+                               $link = Linker::makeExternalLink( $file->getDescriptionUrl(),
+                                       $file->getTitle()->getPrefixedText() );
+                               $fromSrc = wfMessage( 'shared-repo-from', $file->getRepo()->getDisplayName() )->text();
+                       }
+                       $out->addHTML( "<li>{$link} {$fromSrc}</li>\n" );
+               }
+               $out->addHTML( "</ul></div>\n" );
+       }
+
+       /**
+        * Delete the file, or an earlier version of it
+        */
+       public function delete() {
+               $file = $this->mPage->getFile();
+               if ( !$file->exists() || !$file->isLocal() || $file->getRedirected() ) {
+                       // Standard article deletion
+                       parent::delete();
+                       return;
+               }
+
+               $deleter = new FileDeleteForm( $file );
+               $deleter->execute();
+       }
+
+       /**
+        * Display an error with a wikitext description
+        *
+        * @param string $description
+        */
+       function showError( $description ) {
+               $out = $this->getContext()->getOutput();
+               $out->setPageTitle( wfMessage( 'internalerror' ) );
+               $out->setRobotPolicy( 'noindex,nofollow' );
+               $out->setArticleRelated( false );
+               $out->enableClientCache( false );
+               $out->addWikiText( $description );
+       }
+
+       /**
+        * Callback for usort() to do link sorts by (namespace, title)
+        * Function copied from Title::compare()
+        *
+        * @param object $a Object page to compare with
+        * @param object $b Object page to compare with
+        * @return int Result of string comparison, or namespace comparison
+        */
+       protected function compare( $a, $b ) {
+               if ( $a->page_namespace == $b->page_namespace ) {
+                       return strcmp( $a->page_title, $b->page_title );
+               } else {
+                       return $a->page_namespace - $b->page_namespace;
+               }
+       }
+
+       /**
+        * Returns the corresponding $wgImageLimits entry for the selected user option
+        *
+        * @param User $user
+        * @param string $optionName Name of a option to check, typically imagesize or thumbsize
+        * @return array
+        * @since 1.21
+        */
+       public function getImageLimitsFromOption( $user, $optionName ) {
+               global $wgImageLimits;
+
+               $option = $user->getIntOption( $optionName );
+               if ( !isset( $wgImageLimits[$option] ) ) {
+                       $option = User::getDefaultOption( $optionName );
+               }
+
+               // The user offset might still be incorrect, specially if
+               // $wgImageLimits got changed (see bug #8858).
+               if ( !isset( $wgImageLimits[$option] ) ) {
+                       // Default to the first offset in $wgImageLimits
+                       $option = 0;
+               }
+
+               return isset( $wgImageLimits[$option] )
+                       ? $wgImageLimits[$option]
+                       : array( 800, 600 ); // if nothing is set, fallback to a hardcoded default
+       }
+
+       /**
+        * Output a drop-down box for language options for the file
+        *
+        * @param array $langChoices Array of string language codes
+        * @param string $curLang Language code file is being viewed in.
+        * @param string $defaultLang Language code that image is rendered in by default
+        * @return string HTML to insert underneath image.
+        */
+       protected function doRenderLangOpt( array $langChoices, $curLang, $defaultLang ) {
+               global $wgScript;
+               sort( $langChoices );
+               $curLang = wfBCP47( $curLang );
+               $defaultLang = wfBCP47( $defaultLang );
+               $opts = '';
+               $haveCurrentLang = false;
+               $haveDefaultLang = false;
+
+               // We make a list of all the language choices in the file.
+               // Additionally if the default language to render this file
+               // is not included as being in this file (for example, in svgs
+               // usually the fallback content is the english content) also
+               // include a choice for that. Last of all, if we're viewing
+               // the file in a language not on the list, add it as a choice.
+               foreach ( $langChoices as $lang ) {
+                       $code = wfBCP47( $lang );
+                       $name = Language::fetchLanguageName( $code, $this->getContext()->getLanguage()->getCode() );
+                       if ( $name !== '' ) {
+                               $display = wfMessage( 'img-lang-opt', $code, $name )->text();
+                       } else {
+                               $display = $code;
+                       }
+                       $opts .= "\n" . Xml::option( $display, $code, $curLang === $code );
+                       if ( $curLang === $code ) {
+                               $haveCurrentLang = true;
+                       }
+                       if ( $defaultLang === $code ) {
+                               $haveDefaultLang = true;
+                       }
+               }
+               if ( !$haveDefaultLang ) {
+                       // Its hard to know if the content is really in the default language, or
+                       // if its just unmarked content that could be in any language.
+                       $opts = Xml::option(
+                               wfMessage( 'img-lang-default' )->text(),
+                               $defaultLang,
+                               $defaultLang === $curLang
+                       ) . $opts;
+               }
+               if ( !$haveCurrentLang && $defaultLang !== $curLang ) {
+                       $name = Language::fetchLanguageName( $curLang, $this->getContext()->getLanguage()->getCode() );
+                       if ( $name !== '' ) {
+                               $display = wfMessage( 'img-lang-opt', $curLang, $name )->text();
+                       } else {
+                               $display = $curLang;
+                       }
+                       $opts = Xml::option( $display, $curLang, true ) . $opts;
+               }
+
+               $select = Html::rawElement(
+                       'select',
+                       array( 'id' => 'mw-imglangselector', 'name' => 'lang' ),
+                       $opts
+               );
+               $submit = Xml::submitButton( wfMessage( 'img-lang-go' )->text() );
+
+               $formContents = wfMessage( 'img-lang-info' )->rawParams( $select, $submit )->parse()
+                       . Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() );
+
+               $langSelectLine = Html::rawElement( 'div', array( 'id' => 'mw-imglangselector-line' ),
+                       Html::rawElement( 'form', array( 'action' => $wgScript ), $formContents )
+               );
+               return $langSelectLine;
+       }
+}
+
+/**
+ * Builds the image revision log shown on image pages
+ *
+ * @ingroup Media
+ */
+class ImageHistoryList extends ContextSource {
+
+       /**
+        * @var Title
+        */
+       protected $title;
+
+       /**
+        * @var File
+        */
+       protected $img;
+
+       /**
+        * @var ImagePage
+        */
+       protected $imagePage;
+
+       /**
+        * @var File
+        */
+       protected $current;
+
+       protected $repo, $showThumb;
+       protected $preventClickjacking = false;
+
+       /**
+        * @param ImagePage $imagePage
+        */
+       public function __construct( $imagePage ) {
+               global $wgShowArchiveThumbnails;
+               $this->current = $imagePage->getFile();
+               $this->img = $imagePage->getDisplayedFile();
+               $this->title = $imagePage->getTitle();
+               $this->imagePage = $imagePage;
+               $this->showThumb = $wgShowArchiveThumbnails && $this->img->canRender();
+               $this->setContext( $imagePage->getContext() );
+       }
+
+       /**
+        * @return ImagePage
+        */
+       public function getImagePage() {
+               return $this->imagePage;
+       }
+
+       /**
+        * @return File
+        */
+       public function getFile() {
+               return $this->img;
+       }
+
+       /**
+        * @param string $navLinks
+        * @return string
+        */
+       public function beginImageHistoryList( $navLinks = '' ) {
+               return Xml::element( 'h2', array( 'id' => 'filehistory' ), $this->msg( 'filehist' )->text() )
+                       . "\n"
+                       . "<div id=\"mw-imagepage-section-filehistory\">\n"
+                       . $this->msg( 'filehist-help' )->parseAsBlock()
+                       . $navLinks . "\n"
+                       . Xml::openElement( 'table', array( 'class' => 'wikitable filehistory' ) ) . "\n"
+                       . '<tr><td></td>'
+                       . ( $this->current->isLocal()
+                               && ( $this->getUser()->isAllowedAny( 'delete', 'deletedhistory' ) ) ? '<td></td>' : '' )
+                       . '<th>' . $this->msg( 'filehist-datetime' )->escaped() . '</th>'
+                       . ( $this->showThumb ? '<th>' . $this->msg( 'filehist-thumb' )->escaped() . '</th>' : '' )
+                       . '<th>' . $this->msg( 'filehist-dimensions' )->escaped() . '</th>'
+                       . '<th>' . $this->msg( 'filehist-user' )->escaped() . '</th>'
+                       . '<th>' . $this->msg( 'filehist-comment' )->escaped() . '</th>'
+                       . "</tr>\n";
+       }
+
+       /**
+        * @param string $navLinks
+        * @return string
+        */
+       public function endImageHistoryList( $navLinks = '' ) {
+               return "</table>\n$navLinks\n</div>\n";
+       }
+
+       /**
+        * @param bool $iscur
+        * @param File $file
+        * @return string
+        */
+       public function imageHistoryLine( $iscur, $file ) {
+               global $wgContLang;
+
+               $user = $this->getUser();
+               $lang = $this->getLanguage();
+               $timestamp = wfTimestamp( TS_MW, $file->getTimestamp() );
+               $img = $iscur ? $file->getName() : $file->getArchiveName();
+               $userId = $file->getUser( 'id' );
+               $userText = $file->getUser( 'text' );
+               $description = $file->getDescription( File::FOR_THIS_USER, $user );
+
+               $local = $this->current->isLocal();
+               $row = $selected = '';
+
+               // Deletion link
+               if ( $local && ( $user->isAllowedAny( 'delete', 'deletedhistory' ) ) ) {
+                       $row .= '<td>';
+                       # Link to remove from history
+                       if ( $user->isAllowed( 'delete' ) ) {
+                               $q = array( 'action' => 'delete' );
+                               if ( !$iscur ) {
+                                       $q['oldimage'] = $img;
+                               }
+                               $row .= Linker::linkKnown(
+                                       $this->title,
+                                       $this->msg( $iscur ? 'filehist-deleteall' : 'filehist-deleteone' )->escaped(),
+                                       array(), $q
+                               );
+                       }
+                       # Link to hide content. Don't show useless link to people who cannot hide revisions.
+                       $canHide = $user->isAllowed( 'deleterevision' );
+                       if ( $canHide || ( $user->isAllowed( 'deletedhistory' ) && $file->getVisibility() ) ) {
+                               if ( $user->isAllowed( 'delete' ) ) {
+                                       $row .= '<br />';
+                               }
+                               // If file is top revision or locked from this user, don't link
+                               if ( $iscur || !$file->userCan( File::DELETED_RESTRICTED, $user ) ) {
+                                       $del = Linker::revDeleteLinkDisabled( $canHide );
+                               } else {
+                                       list( $ts, ) = explode( '!', $img, 2 );
+                                       $query = array(
+                                               'type' => 'oldimage',
+                                               'target' => $this->title->getPrefixedText(),
+                                               'ids' => $ts,
+                                       );
+                                       $del = Linker::revDeleteLink( $query,
+                                               $file->isDeleted( File::DELETED_RESTRICTED ), $canHide );
+                               }
+                               $row .= $del;
+                       }
+                       $row .= '</td>';
+               }
+
+               // Reversion link/current indicator
+               $row .= '<td>';
+               if ( $iscur ) {
+                       $row .= $this->msg( 'filehist-current' )->escaped();
+               } elseif ( $local && $this->title->quickUserCan( 'edit', $user )
+                       && $this->title->quickUserCan( 'upload', $user )
+               ) {
+                       if ( $file->isDeleted( File::DELETED_FILE ) ) {
+                               $row .= $this->msg( 'filehist-revert' )->escaped();
+                       } else {
+                               $row .= Linker::linkKnown(
+                                       $this->title,
+                                       $this->msg( 'filehist-revert' )->escaped(),
+                                       array(),
+                                       array(
+                                               'action' => 'revert',
+                                               'oldimage' => $img,
+                                               'wpEditToken' => $user->getEditToken( $img )
+                                       )
+                               );
+                       }
+               }
+               $row .= '</td>';
+
+               // Date/time and image link
+               if ( $file->getTimestamp() === $this->img->getTimestamp() ) {
+                       $selected = "class='filehistory-selected'";
+               }
+               $row .= "<td $selected style='white-space: nowrap;'>";
+               if ( !$file->userCan( File::DELETED_FILE, $user ) ) {
+                       # Don't link to unviewable files
+                       $row .= '<span class="history-deleted">'
+                               . $lang->userTimeAndDate( $timestamp, $user ) . '</span>';
+               } elseif ( $file->isDeleted( File::DELETED_FILE ) ) {
+                       if ( $local ) {
+                               $this->preventClickjacking();
+                               $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
+                               # Make a link to review the image
+                               $url = Linker::linkKnown(
+                                       $revdel,
+                                       $lang->userTimeAndDate( $timestamp, $user ),
+                                       array(),
+                                       array(
+                                               'target' => $this->title->getPrefixedText(),
+                                               'file' => $img,
+                                               'token' => $user->getEditToken( $img )
+                                       )
+                               );
+                       } else {
+                               $url = $lang->userTimeAndDate( $timestamp, $user );
+                       }
+                       $row .= '<span class="history-deleted">' . $url . '</span>';
+               } else {
+                       $url = $iscur ? $this->current->getUrl() : $this->current->getArchiveUrl( $img );
+                       $row .= Xml::element(
+                               'a',
+                               array( 'href' => $url ),
+                               $lang->userTimeAndDate( $timestamp, $user )
+                       );
+               }
+               $row .= "</td>";
+
+               // Thumbnail
+               if ( $this->showThumb ) {
+                       $row .= '<td>' . $this->getThumbForLine( $file ) . '</td>';
+               }
+
+               // Image dimensions + size
+               $row .= '<td>';
+               $row .= htmlspecialchars( $file->getDimensionsString() );
+               $row .= $this->msg( 'word-separator' )->escaped();
+               $row .= '<span style="white-space: nowrap;">';
+               $row .= $this->msg( 'parentheses' )->sizeParams( $file->getSize() )->escaped();
+               $row .= '</span>';
+               $row .= '</td>';
+
+               // Uploading user
+               $row .= '<td>';
+               // Hide deleted usernames
+               if ( $file->isDeleted( File::DELETED_USER ) ) {
+                       $row .= '<span class="history-deleted">'
+                               . $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
+               } else {
+                       if ( $local ) {
+                               $row .= Linker::userLink( $userId, $userText );
+                               $row .= $this->msg( 'word-separator' )->escaped();
+                               $row .= '<span style="white-space: nowrap;">';
+                               $row .= Linker::userToolLinks( $userId, $userText );
+                               $row .= '</span>';
+                       } else {
+                               $row .= htmlspecialchars( $userText );
+                       }
+               }
+               $row .= '</td>';
+
+               // Don't show deleted descriptions
+               if ( $file->isDeleted( File::DELETED_COMMENT ) ) {
+                       $row .= '<td><span class="history-deleted">' .
+                               $this->msg( 'rev-deleted-comment' )->escaped() . '</span></td>';
+               } else {
+                       $row .= '<td dir="' . $wgContLang->getDir() . '">' .
+                               Linker::formatComment( $description, $this->title ) . '</td>';
+               }
+
+               $rowClass = null;
+               wfRunHooks( 'ImagePageFileHistoryLine', array( $this, $file, &$row, &$rowClass ) );
+               $classAttr = $rowClass ? " class='$rowClass'" : '';
+
+               return "<tr{$classAttr}>{$row}</tr>\n";
+       }
+
+       /**
+        * @param File $file
+        * @return string
+        */
+       protected function getThumbForLine( $file ) {
+               $lang = $this->getLanguage();
+               $user = $this->getUser();
+               if ( $file->allowInlineDisplay() && $file->userCan( File::DELETED_FILE, $user )
+                       && !$file->isDeleted( File::DELETED_FILE )
+               ) {
+                       $params = array(
+                               'width' => '120',
+                               'height' => '120',
+                       );
+                       $timestamp = wfTimestamp( TS_MW, $file->getTimestamp() );
+
+                       $thumbnail = $file->transform( $params );
+                       $options = array(
+                               'alt' => $this->msg( 'filehist-thumbtext',
+                                       $lang->userTimeAndDate( $timestamp, $user ),
+                                       $lang->userDate( $timestamp, $user ),
+                                       $lang->userTime( $timestamp, $user ) )->text(),
+                               'file-link' => true,
+                       );
+
+                       if ( !$thumbnail ) {
+                               return $this->msg( 'filehist-nothumb' )->escaped();
+                       }
+
+                       return $thumbnail->toHtml( $options );
+               } else {
+                       return $this->msg( 'filehist-nothumb' )->escaped();
+               }
+       }
+
+       /**
+        * @param bool $enable
+        */
+       protected function preventClickjacking( $enable = true ) {
+               $this->preventClickjacking = $enable;
+       }
+
+       /**
+        * @return bool
+        */
+       public function getPreventClickjacking() {
+               return $this->preventClickjacking;
+       }
+}
+
+class ImageHistoryPseudoPager extends ReverseChronologicalPager {
+       protected $preventClickjacking = false;
+
+       /**
+        * @var File
+        */
+       protected $mImg;
+
+       /**
+        * @var Title
+        */
+       protected $mTitle;
+
+       /**
+        * @param ImagePage $imagePage
+        */
+       function __construct( $imagePage ) {
+               parent::__construct( $imagePage->getContext() );
+               $this->mImagePage = $imagePage;
+               $this->mTitle = clone ( $imagePage->getTitle() );
+               $this->mTitle->setFragment( '#filehistory' );
+               $this->mImg = null;
+               $this->mHist = array();
+               $this->mRange = array( 0, 0 ); // display range
+       }
+
+       /**
+        * @return Title
+        */
+       function getTitle() {
+               return $this->mTitle;
+       }
+
+       function getQueryInfo() {
+               return false;
+       }
+
+       /**
+        * @return string
+        */
+       function getIndexField() {
+               return '';
+       }
+
+       /**
+        * @param object $row
+        * @return string
+        */
+       function formatRow( $row ) {
+               return '';
+       }
+
+       /**
+        * @return string
+        */
+       function getBody() {
+               $s = '';
+               $this->doQuery();
+               if ( count( $this->mHist ) ) {
+                       $list = new ImageHistoryList( $this->mImagePage );
+                       # Generate prev/next links
+                       $navLink = $this->getNavigationBar();
+                       $s = $list->beginImageHistoryList( $navLink );
+                       // Skip rows there just for paging links
+                       for ( $i = $this->mRange[0]; $i <= $this->mRange[1]; $i++ ) {
+                               $file = $this->mHist[$i];
+                               $s .= $list->imageHistoryLine( !$file->isOld(), $file );
+                       }
+                       $s .= $list->endImageHistoryList( $navLink );
+
+                       if ( $list->getPreventClickjacking() ) {
+                               $this->preventClickjacking();
+                       }
+               }
+               return $s;
+       }
+
+       function doQuery() {
+               if ( $this->mQueryDone ) {
+                       return;
+               }
+               $this->mImg = $this->mImagePage->getFile(); // ensure loading
+               if ( !$this->mImg->exists() ) {
+                       return;
+               }
+               $queryLimit = $this->mLimit + 1; // limit plus extra row
+               if ( $this->mIsBackwards ) {
+                       // Fetch the file history
+                       $this->mHist = $this->mImg->getHistory( $queryLimit, null, $this->mOffset, false );
+                       // The current rev may not meet the offset/limit
+                       $numRows = count( $this->mHist );
+                       if ( $numRows <= $this->mLimit && $this->mImg->getTimestamp() > $this->mOffset ) {
+                               $this->mHist = array_merge( array( $this->mImg ), $this->mHist );
+                       }
+               } else {
+                       // The current rev may not meet the offset
+                       if ( !$this->mOffset || $this->mImg->getTimestamp() < $this->mOffset ) {
+                               $this->mHist[] = $this->mImg;
+                       }
+                       // Old image versions (fetch extra row for nav links)
+                       $oiLimit = count( $this->mHist ) ? $this->mLimit : $this->mLimit + 1;
+                       // Fetch the file history
+                       $this->mHist = array_merge( $this->mHist,
+                               $this->mImg->getHistory( $oiLimit, $this->mOffset, null, false ) );
+               }
+               $numRows = count( $this->mHist ); // Total number of query results
+               if ( $numRows ) {
+                       # Index value of top item in the list
+                       $firstIndex = $this->mIsBackwards ?
+                               $this->mHist[$numRows - 1]->getTimestamp() : $this->mHist[0]->getTimestamp();
+                       # Discard the extra result row if there is one
+                       if ( $numRows > $this->mLimit && $numRows > 1 ) {
+                               if ( $this->mIsBackwards ) {
+                                       # Index value of item past the index
+                                       $this->mPastTheEndIndex = $this->mHist[0]->getTimestamp();
+                                       # Index value of bottom item in the list
+                                       $lastIndex = $this->mHist[1]->getTimestamp();
+                                       # Display range
+                                       $this->mRange = array( 1, $numRows - 1 );
+                               } else {
+                                       # Index value of item past the index
+                                       $this->mPastTheEndIndex = $this->mHist[$numRows - 1]->getTimestamp();
+                                       # Index value of bottom item in the list
+                                       $lastIndex = $this->mHist[$numRows - 2]->getTimestamp();
+                                       # Display range
+                                       $this->mRange = array( 0, $numRows - 2 );
+                               }
+                       } else {
+                               # Setting indexes to an empty string means that they will be
+                               # omitted if they would otherwise appear in URLs. It just so
+                               # happens that this  is the right thing to do in the standard
+                               # UI, in all the relevant cases.
+                               $this->mPastTheEndIndex = '';
+                               # Index value of bottom item in the list
+                               $lastIndex = $this->mIsBackwards ?
+                                       $this->mHist[0]->getTimestamp() : $this->mHist[$numRows - 1]->getTimestamp();
+                               # Display range
+                               $this->mRange = array( 0, $numRows - 1 );
+                       }
+               } else {
+                       $firstIndex = '';
+                       $lastIndex = '';
+                       $this->mPastTheEndIndex = '';
+               }
+               if ( $this->mIsBackwards ) {
+                       $this->mIsFirst = ( $numRows < $queryLimit );
+                       $this->mIsLast = ( $this->mOffset == '' );
+                       $this->mLastShown = $firstIndex;
+                       $this->mFirstShown = $lastIndex;
+               } else {
+                       $this->mIsFirst = ( $this->mOffset == '' );
+                       $this->mIsLast = ( $numRows < $queryLimit );
+                       $this->mLastShown = $lastIndex;
+                       $this->mFirstShown = $firstIndex;
+               }
+               $this->mQueryDone = true;
+       }
+
+       /**
+        * @param bool $enable
+        */
+       protected function preventClickjacking( $enable = true ) {
+               $this->preventClickjacking = $enable;
+       }
+
+       /**
+        * @return bool
+        */
+       public function getPreventClickjacking() {
+               return $this->preventClickjacking;
+       }
+
+}
diff --git a/includes/page/WikiCategoryPage.php b/includes/page/WikiCategoryPage.php
new file mode 100644 (file)
index 0000000..d382001
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Special handling for category pages.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Special handling for category pages
+ */
+class WikiCategoryPage extends WikiPage {
+
+       /**
+        * Don't return a 404 for categories in use.
+        * In use defined as: either the actual page exists
+        * or the category currently has members.
+        *
+        * @return bool
+        */
+       public function hasViewableContent() {
+               if ( parent::hasViewableContent() ) {
+                       return true;
+               } else {
+                       $cat = Category::newFromTitle( $this->mTitle );
+                       // If any of these are not 0, then has members
+                       if ( $cat->getPageCount()
+                               || $cat->getSubcatCount()
+                               || $cat->getFileCount()
+                       ) {
+                               return true;
+                       }
+               }
+               return false;
+       }
+}
diff --git a/includes/page/WikiFilePage.php b/includes/page/WikiFilePage.php
new file mode 100644 (file)
index 0000000..34f15c3
--- /dev/null
@@ -0,0 +1,236 @@
+<?php
+/**
+ * Special handling for file pages.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Special handling for file pages
+ *
+ * @ingroup Media
+ */
+class WikiFilePage extends WikiPage {
+       /**
+        * @var File
+        */
+       protected $mFile = false;                               // !< File object
+       protected $mRepo = null;                            // !<
+       protected $mFileLoaded = false;             // !<
+       protected $mDupes = null;                               // !<
+
+       public function __construct( $title ) {
+               parent::__construct( $title );
+               $this->mDupes = null;
+               $this->mRepo = null;
+       }
+
+       public function getActionOverrides() {
+               $overrides = parent::getActionOverrides();
+               $overrides['revert'] = 'RevertFileAction';
+               return $overrides;
+       }
+
+       /**
+        * @param File $file
+        */
+       public function setFile( $file ) {
+               $this->mFile = $file;
+               $this->mFileLoaded = true;
+       }
+
+       /**
+        * @return bool
+        */
+       protected function loadFile() {
+               if ( $this->mFileLoaded ) {
+                       return true;
+               }
+               $this->mFileLoaded = true;
+
+               $this->mFile = wfFindFile( $this->mTitle );
+               if ( !$this->mFile ) {
+                       $this->mFile = wfLocalFile( $this->mTitle ); // always a File
+               }
+               $this->mRepo = $this->mFile->getRepo();
+               return true;
+       }
+
+       /**
+        * @return mixed|null|Title
+        */
+       public function getRedirectTarget() {
+               $this->loadFile();
+               if ( $this->mFile->isLocal() ) {
+                       return parent::getRedirectTarget();
+               }
+               // Foreign image page
+               $from = $this->mFile->getRedirected();
+               $to = $this->mFile->getName();
+               if ( $from == $to ) {
+                       return null;
+               }
+               $this->mRedirectTarget = Title::makeTitle( NS_FILE, $to );
+               return $this->mRedirectTarget;
+       }
+
+       /**
+        * @return bool|mixed|Title
+        */
+       public function followRedirect() {
+               $this->loadFile();
+               if ( $this->mFile->isLocal() ) {
+                       return parent::followRedirect();
+               }
+               $from = $this->mFile->getRedirected();
+               $to = $this->mFile->getName();
+               if ( $from == $to ) {
+                       return false;
+               }
+               return Title::makeTitle( NS_FILE, $to );
+       }
+
+       /**
+        * @return bool
+        */
+       public function isRedirect() {
+               $this->loadFile();
+               if ( $this->mFile->isLocal() ) {
+                       return parent::isRedirect();
+               }
+
+               return (bool)$this->mFile->getRedirected();
+       }
+
+       /**
+        * @return bool
+        */
+       public function isLocal() {
+               $this->loadFile();
+               return $this->mFile->isLocal();
+       }
+
+       /**
+        * @return bool|File
+        */
+       public function getFile() {
+               $this->loadFile();
+               return $this->mFile;
+       }
+
+       /**
+        * @return array|null
+        */
+       public function getDuplicates() {
+               $this->loadFile();
+               if ( !is_null( $this->mDupes ) ) {
+                       return $this->mDupes;
+               }
+               $hash = $this->mFile->getSha1();
+               if ( !( $hash ) ) {
+                       $this->mDupes = array();
+                       return $this->mDupes;
+               }
+               $dupes = RepoGroup::singleton()->findBySha1( $hash );
+               // Remove duplicates with self and non matching file sizes
+               $self = $this->mFile->getRepoName() . ':' . $this->mFile->getName();
+               $size = $this->mFile->getSize();
+
+               /**
+                * @var $file File
+                */
+               foreach ( $dupes as $index => $file ) {
+                       $key = $file->getRepoName() . ':' . $file->getName();
+                       if ( $key == $self ) {
+                               unset( $dupes[$index] );
+                       }
+                       if ( $file->getSize() != $size ) {
+                               unset( $dupes[$index] );
+                       }
+               }
+               $this->mDupes = $dupes;
+               return $this->mDupes;
+       }
+
+       /**
+        * Override handling of action=purge
+        * @return bool
+        */
+       public function doPurge() {
+               $this->loadFile();
+               if ( $this->mFile->exists() ) {
+                       wfDebug( 'ImagePage::doPurge purging ' . $this->mFile->getName() . "\n" );
+                       $update = new HTMLCacheUpdate( $this->mTitle, 'imagelinks' );
+                       $update->doUpdate();
+                       $this->mFile->upgradeRow();
+                       $this->mFile->purgeCache( array( 'forThumbRefresh' => true ) );
+               } else {
+                       wfDebug( 'ImagePage::doPurge no image for '
+                               . $this->mFile->getName() . "; limiting purge to cache only\n" );
+                       // even if the file supposedly doesn't exist, force any cached information
+                       // to be updated (in case the cached information is wrong)
+                       $this->mFile->purgeCache( array( 'forThumbRefresh' => true ) );
+               }
+               if ( $this->mRepo ) {
+                       // Purge redirect cache
+                       $this->mRepo->invalidateImageRedirect( $this->mTitle );
+               }
+               return parent::doPurge();
+       }
+
+       /**
+        * Get the categories this file is a member of on the wiki where it was uploaded.
+        * For local files, this is the same as getCategories().
+        * For foreign API files (InstantCommons), this is not supported currently.
+        * Results will include hidden categories.
+        *
+        * @return TitleArray|Title[]
+        * @since 1.23
+        */
+       public function getForeignCategories() {
+               $this->loadFile();
+               $title = $this->mTitle;
+               $file = $this->mFile;
+
+               if ( ! $file instanceof LocalFile ) {
+                       wfDebug( __CLASS__ . '::' . __METHOD__ . " is not supported for this file\n" );
+                       return TitleArray::newFromResult( new FakeResultWrapper( array() ) );
+               }
+
+               /** @var LocalRepo $repo */
+               $repo = $file->getRepo();
+               $dbr = $repo->getSlaveDB();
+
+               $res = $dbr->select(
+                       array( 'page', 'categorylinks' ),
+                       array(
+                               'page_title' => 'cl_to',
+                               'page_namespace' => NS_CATEGORY,
+                       ),
+                       array(
+                               'page_namespace' => $title->getNamespace(),
+                               'page_title' => $title->getDBkey(),
+                       ),
+                       __METHOD__,
+                       array(),
+                       array( 'categorylinks' => array( 'INNER JOIN', 'page_id = cl_from' ) )
+               );
+
+               return TitleArray::newFromResult( $res );
+       }
+}
diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php
new file mode 100644 (file)
index 0000000..7c412ea
--- /dev/null
@@ -0,0 +1,3574 @@
+<?php
+/**
+ * Base representation for a MediaWiki page.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Abstract class for type hinting (accepts WikiPage, Article, ImagePage, CategoryPage)
+ */
+interface Page {
+}
+
+/**
+ * Class representing a MediaWiki article and history.
+ *
+ * Some fields are public only for backwards-compatibility. Use accessors.
+ * In the past, this class was part of Article.php and everything was public.
+ *
+ * @internal documentation reviewed 15 Mar 2010
+ */
+class WikiPage implements Page, IDBAccessObject {
+       // Constants for $mDataLoadedFrom and related
+
+       /**
+        * @var Title
+        */
+       public $mTitle = null;
+
+       /**@{{
+        * @protected
+        */
+       public $mDataLoaded = false;         // !< Boolean
+       public $mIsRedirect = false;         // !< Boolean
+       public $mLatest = false;             // !< Integer (false means "not loaded")
+       /**@}}*/
+
+       /** @var stdclass Map of cache fields (text, parser output, ect) for a proposed/new edit */
+       public $mPreparedEdit = false;
+
+       /**
+        * @var int
+        */
+       protected $mId = null;
+
+       /**
+        * @var int One of the READ_* constants
+        */
+       protected $mDataLoadedFrom = self::READ_NONE;
+
+       /**
+        * @var Title
+        */
+       protected $mRedirectTarget = null;
+
+       /**
+        * @var Revision
+        */
+       protected $mLastRevision = null;
+
+       /**
+        * @var string Timestamp of the current revision or empty string if not loaded
+        */
+       protected $mTimestamp = '';
+
+       /**
+        * @var string
+        */
+       protected $mTouched = '19700101000000';
+
+       /**
+        * @var string
+        */
+       protected $mLinksUpdated = '19700101000000';
+
+       /**
+        * @var int|null
+        */
+       protected $mCounter = null;
+
+       /**
+        * Constructor and clear the article
+        * @param Title $title Reference to a Title object.
+        */
+       public function __construct( Title $title ) {
+               $this->mTitle = $title;
+       }
+
+       /**
+        * Create a WikiPage object of the appropriate class for the given title.
+        *
+        * @param Title $title
+        *
+        * @throws MWException
+        * @return WikiPage Object of the appropriate type
+        */
+       public static function factory( Title $title ) {
+               $ns = $title->getNamespace();
+
+               if ( $ns == NS_MEDIA ) {
+                       throw new MWException( "NS_MEDIA is a virtual namespace; use NS_FILE." );
+               } elseif ( $ns < 0 ) {
+                       throw new MWException( "Invalid or virtual namespace $ns given." );
+               }
+
+               switch ( $ns ) {
+                       case NS_FILE:
+                               $page = new WikiFilePage( $title );
+                               break;
+                       case NS_CATEGORY:
+                               $page = new WikiCategoryPage( $title );
+                               break;
+                       default:
+                               $page = new WikiPage( $title );
+               }
+
+               return $page;
+       }
+
+       /**
+        * Constructor from a page id
+        *
+        * @param int $id Article ID to load
+        * @param string|int $from One of the following values:
+        *        - "fromdb" or WikiPage::READ_NORMAL to select from a slave database
+        *        - "fromdbmaster" or WikiPage::READ_LATEST to select from the master database
+        *
+        * @return WikiPage|null
+        */
+       public static function newFromID( $id, $from = 'fromdb' ) {
+               // page id's are never 0 or negative, see bug 61166
+               if ( $id < 1 ) {
+                       return null;
+               }
+
+               $from = self::convertSelectType( $from );
+               $db = wfGetDB( $from === self::READ_LATEST ? DB_MASTER : DB_SLAVE );
+               $row = $db->selectRow( 'page', self::selectFields(), array( 'page_id' => $id ), __METHOD__ );
+               if ( !$row ) {
+                       return null;
+               }
+               return self::newFromRow( $row, $from );
+       }
+
+       /**
+        * Constructor from a database row
+        *
+        * @since 1.20
+        * @param object $row Database row containing at least fields returned by selectFields().
+        * @param string|int $from Source of $data:
+        *        - "fromdb" or WikiPage::READ_NORMAL: from a slave DB
+        *        - "fromdbmaster" or WikiPage::READ_LATEST: from the master DB
+        *        - "forupdate" or WikiPage::READ_LOCKING: from the master DB using SELECT FOR UPDATE
+        * @return WikiPage
+        */
+       public static function newFromRow( $row, $from = 'fromdb' ) {
+               $page = self::factory( Title::newFromRow( $row ) );
+               $page->loadFromRow( $row, $from );
+               return $page;
+       }
+
+       /**
+        * Convert 'fromdb', 'fromdbmaster' and 'forupdate' to READ_* constants.
+        *
+        * @param object|string|int $type
+        * @return mixed
+        */
+       private static function convertSelectType( $type ) {
+               switch ( $type ) {
+               case 'fromdb':
+                       return self::READ_NORMAL;
+               case 'fromdbmaster':
+                       return self::READ_LATEST;
+               case 'forupdate':
+                       return self::READ_LOCKING;
+               default:
+                       // It may already be an integer or whatever else
+                       return $type;
+               }
+       }
+
+       /**
+        * Returns overrides for action handlers.
+        * Classes listed here will be used instead of the default one when
+        * (and only when) $wgActions[$action] === true. This allows subclasses
+        * to override the default behavior.
+        *
+        * @todo Move this UI stuff somewhere else
+        *
+        * @return array
+        */
+       public function getActionOverrides() {
+               $content_handler = $this->getContentHandler();
+               return $content_handler->getActionOverrides();
+       }
+
+       /**
+        * Returns the ContentHandler instance to be used to deal with the content of this WikiPage.
+        *
+        * Shorthand for ContentHandler::getForModelID( $this->getContentModel() );
+        *
+        * @return ContentHandler
+        *
+        * @since 1.21
+        */
+       public function getContentHandler() {
+               return ContentHandler::getForModelID( $this->getContentModel() );
+       }
+
+       /**
+        * Get the title object of the article
+        * @return Title Title object of this page
+        */
+       public function getTitle() {
+               return $this->mTitle;
+       }
+
+       /**
+        * Clear the object
+        * @return void
+        */
+       public function clear() {
+               $this->mDataLoaded = false;
+               $this->mDataLoadedFrom = self::READ_NONE;
+
+               $this->clearCacheFields();
+       }
+
+       /**
+        * Clear the object cache fields
+        * @return void
+        */
+       protected function clearCacheFields() {
+               $this->mId = null;
+               $this->mCounter = null;
+               $this->mRedirectTarget = null; // Title object if set
+               $this->mLastRevision = null; // Latest revision
+               $this->mTouched = '19700101000000';
+               $this->mLinksUpdated = '19700101000000';
+               $this->mTimestamp = '';
+               $this->mIsRedirect = false;
+               $this->mLatest = false;
+               // Bug 57026: do not clear mPreparedEdit since prepareTextForEdit() already checks
+               // the requested rev ID and content against the cached one for equality. For most
+               // content types, the output should not change during the lifetime of this cache.
+               // Clearing it can cause extra parses on edit for no reason.
+       }
+
+       /**
+        * Clear the mPreparedEdit cache field, as may be needed by mutable content types
+        * @return void
+        * @since 1.23
+        */
+       public function clearPreparedEdit() {
+               $this->mPreparedEdit = false;
+       }
+
+       /**
+        * Return the list of revision fields that should be selected to create
+        * a new page.
+        *
+        * @return array
+        */
+       public static function selectFields() {
+               global $wgContentHandlerUseDB, $wgPageLanguageUseDB;
+
+               $fields = array(
+                       'page_id',
+                       'page_namespace',
+                       'page_title',
+                       'page_restrictions',
+                       'page_counter',
+                       'page_is_redirect',
+                       'page_is_new',
+                       'page_random',
+                       'page_touched',
+                       'page_links_updated',
+                       'page_latest',
+                       'page_len',
+               );
+
+               if ( $wgContentHandlerUseDB ) {
+                       $fields[] = 'page_content_model';
+               }
+
+               if ( $wgPageLanguageUseDB ) {
+                       $fields[] = 'page_lang';
+               }
+
+               return $fields;
+       }
+
+       /**
+        * Fetch a page record with the given conditions
+        * @param DatabaseBase $dbr
+        * @param array $conditions
+        * @param array $options
+        * @return object|bool Database result resource, or false on failure
+        */
+       protected function pageData( $dbr, $conditions, $options = array() ) {
+               $fields = self::selectFields();
+
+               wfRunHooks( 'ArticlePageDataBefore', array( &$this, &$fields ) );
+
+               $row = $dbr->selectRow( 'page', $fields, $conditions, __METHOD__, $options );
+
+               wfRunHooks( 'ArticlePageDataAfter', array( &$this, &$row ) );
+
+               return $row;
+       }
+
+       /**
+        * Fetch a page record matching the Title object's namespace and title
+        * using a sanitized title string
+        *
+        * @param DatabaseBase $dbr
+        * @param Title $title
+        * @param array $options
+        * @return object|bool Database result resource, or false on failure
+        */
+       public function pageDataFromTitle( $dbr, $title, $options = array() ) {
+               return $this->pageData( $dbr, array(
+                       'page_namespace' => $title->getNamespace(),
+                       'page_title' => $title->getDBkey() ), $options );
+       }
+
+       /**
+        * Fetch a page record matching the requested ID
+        *
+        * @param DatabaseBase $dbr
+        * @param int $id
+        * @param array $options
+        * @return object|bool Database result resource, or false on failure
+        */
+       public function pageDataFromId( $dbr, $id, $options = array() ) {
+               return $this->pageData( $dbr, array( 'page_id' => $id ), $options );
+       }
+
+       /**
+        * Set the general counter, title etc data loaded from
+        * some source.
+        *
+        * @param object|string|int $from One of the following:
+        *   - A DB query result object.
+        *   - "fromdb" or WikiPage::READ_NORMAL to get from a slave DB.
+        *   - "fromdbmaster" or WikiPage::READ_LATEST to get from the master DB.
+        *   - "forupdate"  or WikiPage::READ_LOCKING to get from the master DB
+        *     using SELECT FOR UPDATE.
+        *
+        * @return void
+        */
+       public function loadPageData( $from = 'fromdb' ) {
+               $from = self::convertSelectType( $from );
+               if ( is_int( $from ) && $from <= $this->mDataLoadedFrom ) {
+                       // We already have the data from the correct location, no need to load it twice.
+                       return;
+               }
+
+               if ( $from === self::READ_LOCKING ) {
+                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle, array( 'FOR UPDATE' ) );
+               } elseif ( $from === self::READ_LATEST ) {
+                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
+               } elseif ( $from === self::READ_NORMAL ) {
+                       $data = $this->pageDataFromTitle( wfGetDB( DB_SLAVE ), $this->mTitle );
+                       // Use a "last rev inserted" timestamp key to diminish the issue of slave lag.
+                       // Note that DB also stores the master position in the session and checks it.
+                       $touched = $this->getCachedLastEditTime();
+                       if ( $touched ) { // key set
+                               if ( !$data || $touched > wfTimestamp( TS_MW, $data->page_touched ) ) {
+                                       $from = self::READ_LATEST;
+                                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
+                               }
+                       }
+               } else {
+                       // No idea from where the caller got this data, assume slave database.
+                       $data = $from;
+                       $from = self::READ_NORMAL;
+               }
+
+               $this->loadFromRow( $data, $from );
+       }
+
+       /**
+        * Load the object from a database row
+        *
+        * @since 1.20
+        * @param object $data Database row containing at least fields returned by selectFields()
+        * @param string|int $from One of the following:
+        *        - "fromdb" or WikiPage::READ_NORMAL if the data comes from a slave DB
+        *        - "fromdbmaster" or WikiPage::READ_LATEST if the data comes from the master DB
+        *        - "forupdate"  or WikiPage::READ_LOCKING if the data comes from from
+        *          the master DB using SELECT FOR UPDATE
+        */
+       public function loadFromRow( $data, $from ) {
+               $lc = LinkCache::singleton();
+               $lc->clearLink( $this->mTitle );
+
+               if ( $data ) {
+                       $lc->addGoodLinkObjFromRow( $this->mTitle, $data );
+
+                       $this->mTitle->loadFromRow( $data );
+
+                       // Old-fashioned restrictions
+                       $this->mTitle->loadRestrictions( $data->page_restrictions );
+
+                       $this->mId = intval( $data->page_id );
+                       $this->mCounter = intval( $data->page_counter );
+                       $this->mTouched = wfTimestamp( TS_MW, $data->page_touched );
+                       $this->mLinksUpdated = wfTimestampOrNull( TS_MW, $data->page_links_updated );
+                       $this->mIsRedirect = intval( $data->page_is_redirect );
+                       $this->mLatest = intval( $data->page_latest );
+                       // Bug 37225: $latest may no longer match the cached latest Revision object.
+                       // Double-check the ID of any cached latest Revision object for consistency.
+                       if ( $this->mLastRevision && $this->mLastRevision->getId() != $this->mLatest ) {
+                               $this->mLastRevision = null;
+                               $this->mTimestamp = '';
+                       }
+               } else {
+                       $lc->addBadLinkObj( $this->mTitle );
+
+                       $this->mTitle->loadFromRow( false );
+
+                       $this->clearCacheFields();
+
+                       $this->mId = 0;
+               }
+
+               $this->mDataLoaded = true;
+               $this->mDataLoadedFrom = self::convertSelectType( $from );
+       }
+
+       /**
+        * @return int Page ID
+        */
+       public function getId() {
+               if ( !$this->mDataLoaded ) {
+                       $this->loadPageData();
+               }
+               return $this->mId;
+       }
+
+       /**
+        * @return bool Whether or not the page exists in the database
+        */
+       public function exists() {
+               if ( !$this->mDataLoaded ) {
+                       $this->loadPageData();
+               }
+               return $this->mId > 0;
+       }
+
+       /**
+        * Check if this page is something we're going to be showing
+        * some sort of sensible content for. If we return false, page
+        * views (plain action=view) will return an HTTP 404 response,
+        * so spiders and robots can know they're following a bad link.
+        *
+        * @return bool
+        */
+       public function hasViewableContent() {
+               return $this->exists() || $this->mTitle->isAlwaysKnown();
+       }
+
+       /**
+        * @return int The view count for the page
+        */
+       public function getCount() {
+               if ( !$this->mDataLoaded ) {
+                       $this->loadPageData();
+               }
+
+               return $this->mCounter;
+       }
+
+       /**
+        * Tests if the article content represents a redirect
+        *
+        * @return bool
+        */
+       public function isRedirect() {
+               $content = $this->getContent();
+               if ( !$content ) {
+                       return false;
+               }
+
+               return $content->isRedirect();
+       }
+
+       /**
+        * Returns the page's content model id (see the CONTENT_MODEL_XXX constants).
+        *
+        * Will use the revisions actual content model if the page exists,
+        * and the page's default if the page doesn't exist yet.
+        *
+        * @return string
+        *
+        * @since 1.21
+        */
+       public function getContentModel() {
+               if ( $this->exists() ) {
+                       // look at the revision's actual content model
+                       $rev = $this->getRevision();
+
+                       if ( $rev !== null ) {
+                               return $rev->getContentModel();
+                       } else {
+                               $title = $this->mTitle->getPrefixedDBkey();
+                               wfWarn( "Page $title exists but has no (visible) revisions!" );
+                       }
+               }
+
+               // use the default model for this page
+               return $this->mTitle->getContentModel();
+       }
+
+       /**
+        * Loads page_touched and returns a value indicating if it should be used
+        * @return bool true if not a redirect
+        */
+       public function checkTouched() {
+               if ( !$this->mDataLoaded ) {
+                       $this->loadPageData();
+               }
+               return !$this->mIsRedirect;
+       }
+
+       /**
+        * Get the page_touched field
+        * @return string Containing GMT timestamp
+        */
+       public function getTouched() {
+               if ( !$this->mDataLoaded ) {
+                       $this->loadPageData();
+               }
+               return $this->mTouched;
+       }
+
+       /**
+        * Get the page_links_updated field
+        * @return string|null Containing GMT timestamp
+        */
+       public function getLinksTimestamp() {
+               if ( !$this->mDataLoaded ) {
+                       $this->loadPageData();
+               }
+               return $this->mLinksUpdated;
+       }
+
+       /**
+        * Get the page_latest field
+        * @return int rev_id of current revision
+        */
+       public function getLatest() {
+               if ( !$this->mDataLoaded ) {
+                       $this->loadPageData();
+               }
+               return (int)$this->mLatest;
+       }
+
+       /**
+        * Get the Revision object of the oldest revision
+        * @return Revision|null
+        */
+       public function getOldestRevision() {
+               wfProfileIn( __METHOD__ );
+
+               // Try using the slave database first, then try the master
+               $continue = 2;
+               $db = wfGetDB( DB_SLAVE );
+               $revSelectFields = Revision::selectFields();
+
+               $row = null;
+               while ( $continue ) {
+                       $row = $db->selectRow(
+                               array( 'page', 'revision' ),
+                               $revSelectFields,
+                               array(
+                                       'page_namespace' => $this->mTitle->getNamespace(),
+                                       'page_title' => $this->mTitle->getDBkey(),
+                                       'rev_page = page_id'
+                               ),
+                               __METHOD__,
+                               array(
+                                       'ORDER BY' => 'rev_timestamp ASC'
+                               )
+                       );
+
+                       if ( $row ) {
+                               $continue = 0;
+                       } else {
+                               $db = wfGetDB( DB_MASTER );
+                               $continue--;
+                       }
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $row ? Revision::newFromRow( $row ) : null;
+       }
+
+       /**
+        * Loads everything except the text
+        * This isn't necessary for all uses, so it's only done if needed.
+        */
+       protected function loadLastEdit() {
+               if ( $this->mLastRevision !== null ) {
+                       return; // already loaded
+               }
+
+               $latest = $this->getLatest();
+               if ( !$latest ) {
+                       return; // page doesn't exist or is missing page_latest info
+               }
+
+               // Bug 37225: if session S1 loads the page row FOR UPDATE, the result always includes the
+               // latest changes committed. This is true even within REPEATABLE-READ transactions, where
+               // S1 normally only sees changes committed before the first S1 SELECT. Thus we need S1 to
+               // also gets the revision row FOR UPDATE; otherwise, it may not find it since a page row
+               // UPDATE and revision row INSERT by S2 may have happened after the first S1 SELECT.
+               // http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html#isolevel_repeatable-read.
+               $flags = ( $this->mDataLoadedFrom == self::READ_LOCKING ) ? Revision::READ_LOCKING : 0;
+               $revision = Revision::newFromPageId( $this->getId(), $latest, $flags );
+               if ( $revision ) { // sanity
+                       $this->setLastEdit( $revision );
+               }
+       }
+
+       /**
+        * Set the latest revision
+        * @param Revision $revision
+        */
+       protected function setLastEdit( Revision $revision ) {
+               $this->mLastRevision = $revision;
+               $this->mTimestamp = $revision->getTimestamp();
+       }
+
+       /**
+        * Get the latest revision
+        * @return Revision|null
+        */
+       public function getRevision() {
+               $this->loadLastEdit();
+               if ( $this->mLastRevision ) {
+                       return $this->mLastRevision;
+               }
+               return null;
+       }
+
+       /**
+        * Get the content of the current revision. No side-effects...
+        *
+        * @param int $audience int One of:
+        *   Revision::FOR_PUBLIC       to be displayed to all users
+        *   Revision::FOR_THIS_USER    to be displayed to $wgUser
+        *   Revision::RAW              get the text regardless of permissions
+        * @param User $user User object to check for, only if FOR_THIS_USER is passed
+        *   to the $audience parameter
+        * @return Content|null The content of the current revision
+        *
+        * @since 1.21
+        */
+       public function getContent( $audience = Revision::FOR_PUBLIC, User $user = null ) {
+               $this->loadLastEdit();
+               if ( $this->mLastRevision ) {
+                       return $this->mLastRevision->getContent( $audience, $user );
+               }
+               return null;
+       }
+
+       /**
+        * Get the text of the current revision. No side-effects...
+        *
+        * @param int $audience One of:
+        *   Revision::FOR_PUBLIC       to be displayed to all users
+        *   Revision::FOR_THIS_USER    to be displayed to the given user
+        *   Revision::RAW              get the text regardless of permissions
+        * @param User $user User object to check for, only if FOR_THIS_USER is passed
+        *   to the $audience parameter
+        * @return string|bool The text of the current revision
+        * @deprecated since 1.21, getContent() should be used instead.
+        */
+       public function getText( $audience = Revision::FOR_PUBLIC, User $user = null ) {
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+
+               $this->loadLastEdit();
+               if ( $this->mLastRevision ) {
+                       return $this->mLastRevision->getText( $audience, $user );
+               }
+               return false;
+       }
+
+       /**
+        * Get the text of the current revision. No side-effects...
+        *
+        * @return string|bool The text of the current revision. False on failure
+        * @deprecated since 1.21, getContent() should be used instead.
+        */
+       public function getRawText() {
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+
+               return $this->getText( Revision::RAW );
+       }
+
+       /**
+        * @return string MW timestamp of last article revision
+        */
+       public function getTimestamp() {
+               // Check if the field has been filled by WikiPage::setTimestamp()
+               if ( !$this->mTimestamp ) {
+                       $this->loadLastEdit();
+               }
+
+               return wfTimestamp( TS_MW, $this->mTimestamp );
+       }
+
+       /**
+        * Set the page timestamp (use only to avoid DB queries)
+        * @param string $ts MW timestamp of last article revision
+        * @return void
+        */
+       public function setTimestamp( $ts ) {
+               $this->mTimestamp = wfTimestamp( TS_MW, $ts );
+       }
+
+       /**
+        * @param int $audience One of:
+        *   Revision::FOR_PUBLIC       to be displayed to all users
+        *   Revision::FOR_THIS_USER    to be displayed to the given user
+        *   Revision::RAW              get the text regardless of permissions
+        * @param User $user User object to check for, only if FOR_THIS_USER is passed
+        *   to the $audience parameter
+        * @return int user ID for the user that made the last article revision
+        */
+       public function getUser( $audience = Revision::FOR_PUBLIC, User $user = null ) {
+               $this->loadLastEdit();
+               if ( $this->mLastRevision ) {
+                       return $this->mLastRevision->getUser( $audience, $user );
+               } else {
+                       return -1;
+               }
+       }
+
+       /**
+        * Get the User object of the user who created the page
+        * @param int $audience One of:
+        *   Revision::FOR_PUBLIC       to be displayed to all users
+        *   Revision::FOR_THIS_USER    to be displayed to the given user
+        *   Revision::RAW              get the text regardless of permissions
+        * @param User $user User object to check for, only if FOR_THIS_USER is passed
+        *   to the $audience parameter
+        * @return User|null
+        */
+       public function getCreator( $audience = Revision::FOR_PUBLIC, User $user = null ) {
+               $revision = $this->getOldestRevision();
+               if ( $revision ) {
+                       $userName = $revision->getUserText( $audience, $user );
+                       return User::newFromName( $userName, false );
+               } else {
+                       return null;
+               }
+       }
+
+       /**
+        * @param int $audience One of:
+        *   Revision::FOR_PUBLIC       to be displayed to all users
+        *   Revision::FOR_THIS_USER    to be displayed to the given user
+        *   Revision::RAW              get the text regardless of permissions
+        * @param User $user User object to check for, only if FOR_THIS_USER is passed
+        *   to the $audience parameter
+        * @return string username of the user that made the last article revision
+        */
+       public function getUserText( $audience = Revision::FOR_PUBLIC, User $user = null ) {
+               $this->loadLastEdit();
+               if ( $this->mLastRevision ) {
+                       return $this->mLastRevision->getUserText( $audience, $user );
+               } else {
+                       return '';
+               }
+       }
+
+       /**
+        * @param int $audience One of:
+        *   Revision::FOR_PUBLIC       to be displayed to all users
+        *   Revision::FOR_THIS_USER    to be displayed to the given user
+        *   Revision::RAW              get the text regardless of permissions
+        * @param User $user User object to check for, only if FOR_THIS_USER is passed
+        *   to the $audience parameter
+        * @return string Comment stored for the last article revision
+        */
+       public function getComment( $audience = Revision::FOR_PUBLIC, User $user = null ) {
+               $this->loadLastEdit();
+               if ( $this->mLastRevision ) {
+                       return $this->mLastRevision->getComment( $audience, $user );
+               } else {
+                       return '';
+               }
+       }
+
+       /**
+        * Returns true if last revision was marked as "minor edit"
+        *
+        * @return bool Minor edit indicator for the last article revision.
+        */
+       public function getMinorEdit() {
+               $this->loadLastEdit();
+               if ( $this->mLastRevision ) {
+                       return $this->mLastRevision->isMinor();
+               } else {
+                       return false;
+               }
+       }
+
+       /**
+        * Get the cached timestamp for the last time the page changed.
+        * This is only used to help handle slave lag by comparing to page_touched.
+        * @return string MW timestamp
+        */
+       protected function getCachedLastEditTime() {
+               global $wgMemc;
+               $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) );
+               return $wgMemc->get( $key );
+       }
+
+       /**
+        * Set the cached timestamp for the last time the page changed.
+        * This is only used to help handle slave lag by comparing to page_touched.
+        * @param string $timestamp
+        * @return void
+        */
+       public function setCachedLastEditTime( $timestamp ) {
+               global $wgMemc;
+               $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) );
+               $wgMemc->set( $key, wfTimestamp( TS_MW, $timestamp ), 60 * 15 );
+       }
+
+       /**
+        * Determine whether a page would be suitable for being counted as an
+        * article in the site_stats table based on the title & its content
+        *
+        * @param object|bool $editInfo (false): object returned by prepareTextForEdit(),
+        *   if false, the current database state will be used
+        * @return bool
+        */
+       public function isCountable( $editInfo = false ) {
+               global $wgArticleCountMethod;
+
+               if ( !$this->mTitle->isContentPage() ) {
+                       return false;
+               }
+
+               if ( $editInfo ) {
+                       $content = $editInfo->pstContent;
+               } else {
+                       $content = $this->getContent();
+               }
+
+               if ( !$content || $content->isRedirect() ) {
+                       return false;
+               }
+
+               $hasLinks = null;
+
+               if ( $wgArticleCountMethod === 'link' ) {
+                       // nasty special case to avoid re-parsing to detect links
+
+                       if ( $editInfo ) {
+                               // ParserOutput::getLinks() is a 2D array of page links, so
+                               // to be really correct we would need to recurse in the array
+                               // but the main array should only have items in it if there are
+                               // links.
+                               $hasLinks = (bool)count( $editInfo->output->getLinks() );
+                       } else {
+                               $hasLinks = (bool)wfGetDB( DB_SLAVE )->selectField( 'pagelinks', 1,
+                                       array( 'pl_from' => $this->getId() ), __METHOD__ );
+                       }
+               }
+
+               return $content->isCountable( $hasLinks );
+       }
+
+       /**
+        * If this page is a redirect, get its target
+        *
+        * The target will be fetched from the redirect table if possible.
+        * If this page doesn't have an entry there, call insertRedirect()
+        * @return Title|null Title object, or null if this page is not a redirect
+        */
+       public function getRedirectTarget() {
+               if ( !$this->mTitle->isRedirect() ) {
+                       return null;
+               }
+
+               if ( $this->mRedirectTarget !== null ) {
+                       return $this->mRedirectTarget;
+               }
+
+               // Query the redirect table
+               $dbr = wfGetDB( DB_SLAVE );
+               $row = $dbr->selectRow( 'redirect',
+                       array( 'rd_namespace', 'rd_title', 'rd_fragment', 'rd_interwiki' ),
+                       array( 'rd_from' => $this->getId() ),
+                       __METHOD__
+               );
+
+               // rd_fragment and rd_interwiki were added later, populate them if empty
+               if ( $row && !is_null( $row->rd_fragment ) && !is_null( $row->rd_interwiki ) ) {
+                       $this->mRedirectTarget = Title::makeTitle(
+                               $row->rd_namespace, $row->rd_title,
+                               $row->rd_fragment, $row->rd_interwiki );
+                       return $this->mRedirectTarget;
+               }
+
+               // This page doesn't have an entry in the redirect table
+               $this->mRedirectTarget = $this->insertRedirect();
+               return $this->mRedirectTarget;
+       }
+
+       /**
+        * Insert an entry for this page into the redirect table.
+        *
+        * Don't call this function directly unless you know what you're doing.
+        * @return Title|null Title object or null if not a redirect
+        */
+       public function insertRedirect() {
+               // recurse through to only get the final target
+               $content = $this->getContent();
+               $retval = $content ? $content->getUltimateRedirectTarget() : null;
+               if ( !$retval ) {
+                       return null;
+               }
+               $this->insertRedirectEntry( $retval );
+               return $retval;
+       }
+
+       /**
+        * Insert or update the redirect table entry for this page to indicate
+        * it redirects to $rt .
+        * @param Title $rt Redirect target
+        */
+       public function insertRedirectEntry( $rt ) {
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->replace( 'redirect', array( 'rd_from' ),
+                       array(
+                               'rd_from' => $this->getId(),
+                               'rd_namespace' => $rt->getNamespace(),
+                               'rd_title' => $rt->getDBkey(),
+                               'rd_fragment' => $rt->getFragment(),
+                               'rd_interwiki' => $rt->getInterwiki(),
+                       ),
+                       __METHOD__
+               );
+       }
+
+       /**
+        * Get the Title object or URL this page redirects to
+        *
+        * @return bool|Title|string false, Title of in-wiki target, or string with URL
+        */
+       public function followRedirect() {
+               return $this->getRedirectURL( $this->getRedirectTarget() );
+       }
+
+       /**
+        * Get the Title object or URL to use for a redirect. We use Title
+        * objects for same-wiki, non-special redirects and URLs for everything
+        * else.
+        * @param Title $rt Redirect target
+        * @return bool|Title|string false, Title object of local target, or string with URL
+        */
+       public function getRedirectURL( $rt ) {
+               if ( !$rt ) {
+                       return false;
+               }
+
+               if ( $rt->isExternal() ) {
+                       if ( $rt->isLocal() ) {
+                               // Offsite wikis need an HTTP redirect.
+                               //
+                               // This can be hard to reverse and may produce loops,
+                               // so they may be disabled in the site configuration.
+                               $source = $this->mTitle->getFullURL( 'redirect=no' );
+                               return $rt->getFullURL( array( 'rdfrom' => $source ) );
+                       } else {
+                               // External pages pages without "local" bit set are not valid
+                               // redirect targets
+                               return false;
+                       }
+               }
+
+               if ( $rt->isSpecialPage() ) {
+                       // Gotta handle redirects to special pages differently:
+                       // Fill the HTTP response "Location" header and ignore
+                       // the rest of the page we're on.
+                       //
+                       // Some pages are not valid targets
+                       if ( $rt->isValidRedirectTarget() ) {
+                               return $rt->getFullURL();
+                       } else {
+                               return false;
+                       }
+               }
+
+               return $rt;
+       }
+
+       /**
+        * Get a list of users who have edited this article, not including the user who made
+        * the most recent revision, which you can get from $article->getUser() if you want it
+        * @return UserArrayFromResult
+        */
+       public function getContributors() {
+               // @todo FIXME: This is expensive; cache this info somewhere.
+
+               $dbr = wfGetDB( DB_SLAVE );
+
+               if ( $dbr->implicitGroupby() ) {
+                       $realNameField = 'user_real_name';
+               } else {
+                       $realNameField = 'MIN(user_real_name) AS user_real_name';
+               }
+
+               $tables = array( 'revision', 'user' );
+
+               $fields = array(
+                       'user_id' => 'rev_user',
+                       'user_name' => 'rev_user_text',
+                       $realNameField,
+                       'timestamp' => 'MAX(rev_timestamp)',
+               );
+
+               $conds = array( 'rev_page' => $this->getId() );
+
+               // The user who made the top revision gets credited as "this page was last edited by
+               // John, based on contributions by Tom, Dick and Harry", so don't include them twice.
+               $user = $this->getUser();
+               if ( $user ) {
+                       $conds[] = "rev_user != $user";
+               } else {
+                       $conds[] = "rev_user_text != {$dbr->addQuotes( $this->getUserText() )}";
+               }
+
+               $conds[] = "{$dbr->bitAnd( 'rev_deleted', Revision::DELETED_USER )} = 0"; // username hidden?
+
+               $jconds = array(
+                       'user' => array( 'LEFT JOIN', 'rev_user = user_id' ),
+               );
+
+               $options = array(
+                       'GROUP BY' => array( 'rev_user', 'rev_user_text' ),
+                       'ORDER BY' => 'timestamp DESC',
+               );
+
+               $res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options, $jconds );
+               return new UserArrayFromResult( $res );
+       }
+
+       /**
+        * Get the last N authors
+        * @param int $num Number of revisions to get
+        * @param int|string $revLatest The latest rev_id, selected from the master (optional)
+        * @return array Array of authors, duplicates not removed
+        */
+       public function getLastNAuthors( $num, $revLatest = 0 ) {
+               wfProfileIn( __METHOD__ );
+               // First try the slave
+               // If that doesn't have the latest revision, try the master
+               $continue = 2;
+               $db = wfGetDB( DB_SLAVE );
+
+               do {
+                       $res = $db->select( array( 'page', 'revision' ),
+                               array( 'rev_id', 'rev_user_text' ),
+                               array(
+                                       'page_namespace' => $this->mTitle->getNamespace(),
+                                       'page_title' => $this->mTitle->getDBkey(),
+                                       'rev_page = page_id'
+                               ), __METHOD__,
+                               array(
+                                       'ORDER BY' => 'rev_timestamp DESC',
+                                       'LIMIT' => $num
+                               )
+                       );
+
+                       if ( !$res ) {
+                               wfProfileOut( __METHOD__ );
+                               return array();
+                       }
+
+                       $row = $db->fetchObject( $res );
+
+                       if ( $continue == 2 && $revLatest && $row->rev_id != $revLatest ) {
+                               $db = wfGetDB( DB_MASTER );
+                               $continue--;
+                       } else {
+                               $continue = 0;
+                       }
+               } while ( $continue );
+
+               $authors = array( $row->rev_user_text );
+
+               foreach ( $res as $row ) {
+                       $authors[] = $row->rev_user_text;
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $authors;
+       }
+
+       /**
+        * Should the parser cache be used?
+        *
+        * @param ParserOptions $parserOptions ParserOptions to check
+        * @param int $oldid
+        * @return bool
+        */
+       public function isParserCacheUsed( ParserOptions $parserOptions, $oldid ) {
+               global $wgEnableParserCache;
+
+               return $wgEnableParserCache
+                       && $parserOptions->getStubThreshold() == 0
+                       && $this->exists()
+                       && ( $oldid === null || $oldid === 0 || $oldid === $this->getLatest() )
+                       && $this->getContentHandler()->isParserCacheSupported();
+       }
+
+       /**
+        * Get a ParserOutput for the given ParserOptions and revision ID.
+        * The parser cache will be used if possible.
+        *
+        * @since 1.19
+        * @param ParserOptions $parserOptions ParserOptions to use for the parse operation
+        * @param null|int $oldid Revision ID to get the text from, passing null or 0 will
+        *   get the current revision (default value)
+        *
+        * @return ParserOutput|bool ParserOutput or false if the revision was not found
+        */
+       public function getParserOutput( ParserOptions $parserOptions, $oldid = null ) {
+               wfProfileIn( __METHOD__ );
+
+               $useParserCache = $this->isParserCacheUsed( $parserOptions, $oldid );
+               wfDebug( __METHOD__ . ': using parser cache: ' . ( $useParserCache ? 'yes' : 'no' ) . "\n" );
+               if ( $parserOptions->getStubThreshold() ) {
+                       wfIncrStats( 'pcache_miss_stub' );
+               }
+
+               if ( $useParserCache ) {
+                       $parserOutput = ParserCache::singleton()->get( $this, $parserOptions );
+                       if ( $parserOutput !== false ) {
+                               wfProfileOut( __METHOD__ );
+                               return $parserOutput;
+                       }
+               }
+
+               if ( $oldid === null || $oldid === 0 ) {
+                       $oldid = $this->getLatest();
+               }
+
+               $pool = new PoolWorkArticleView( $this, $parserOptions, $oldid, $useParserCache );
+               $pool->execute();
+
+               wfProfileOut( __METHOD__ );
+
+               return $pool->getParserOutput();
+       }
+
+       /**
+        * Do standard deferred updates after page view (existing or missing page)
+        * @param User $user The relevant user
+        * @param int $oldid The revision id being viewed. If not given or 0, latest revision is assumed.
+        */
+       public function doViewUpdates( User $user, $oldid = 0 ) {
+               global $wgDisableCounters;
+               if ( wfReadOnly() ) {
+                       return;
+               }
+
+               // Don't update page view counters on views from bot users (bug 14044)
+               if ( !$wgDisableCounters && !$user->isAllowed( 'bot' ) && $this->exists() ) {
+                       DeferredUpdates::addUpdate( new ViewCountUpdate( $this->getId() ) );
+                       DeferredUpdates::addUpdate( new SiteStatsUpdate( 1, 0, 0 ) );
+               }
+
+               // Update newtalk / watchlist notification status
+               $user->clearNotification( $this->mTitle, $oldid );
+       }
+
+       /**
+        * Perform the actions of a page purging
+        * @return bool
+        */
+       public function doPurge() {
+               global $wgUseSquid;
+
+               if ( !wfRunHooks( 'ArticlePurge', array( &$this ) ) ) {
+                       return false;
+               }
+
+               // Invalidate the cache
+               $this->mTitle->invalidateCache();
+
+               if ( $wgUseSquid ) {
+                       // Commit the transaction before the purge is sent
+                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw->commit( __METHOD__ );
+
+                       // Send purge
+                       $update = SquidUpdate::newSimplePurge( $this->mTitle );
+                       $update->doUpdate();
+               }
+
+               if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
+                       // @todo move this logic to MessageCache
+
+                       if ( $this->exists() ) {
+                               // NOTE: use transclusion text for messages.
+                               //       This is consistent with  MessageCache::getMsgFromNamespace()
+
+                               $content = $this->getContent();
+                               $text = $content === null ? null : $content->getWikitextForTransclusion();
+
+                               if ( $text === null ) {
+                                       $text = false;
+                               }
+                       } else {
+                               $text = false;
+                       }
+
+                       MessageCache::singleton()->replace( $this->mTitle->getDBkey(), $text );
+               }
+               return true;
+       }
+
+       /**
+        * Insert a new empty page record for this article.
+        * This *must* be followed up by creating a revision
+        * and running $this->updateRevisionOn( ... );
+        * or else the record will be left in a funky state.
+        * Best if all done inside a transaction.
+        *
+        * @param DatabaseBase $dbw
+        * @return int The newly created page_id key, or false if the title already existed
+        */
+       public function insertOn( $dbw ) {
+               wfProfileIn( __METHOD__ );
+
+               $page_id = $dbw->nextSequenceValue( 'page_page_id_seq' );
+               $dbw->insert( 'page', array(
+                       'page_id'           => $page_id,
+                       'page_namespace'    => $this->mTitle->getNamespace(),
+                       'page_title'        => $this->mTitle->getDBkey(),
+                       'page_counter'      => 0,
+                       'page_restrictions' => '',
+                       'page_is_redirect'  => 0, // Will set this shortly...
+                       'page_is_new'       => 1,
+                       'page_random'       => wfRandom(),
+                       'page_touched'      => $dbw->timestamp(),
+                       'page_latest'       => 0, // Fill this in shortly...
+                       'page_len'          => 0, // Fill this in shortly...
+               ), __METHOD__, 'IGNORE' );
+
+               $affected = $dbw->affectedRows();
+
+               if ( $affected ) {
+                       $newid = $dbw->insertId();
+                       $this->mId = $newid;
+                       $this->mTitle->resetArticleID( $newid );
+               }
+               wfProfileOut( __METHOD__ );
+
+               return $affected ? $newid : false;
+       }
+
+       /**
+        * Update the page record to point to a newly saved revision.
+        *
+        * @param DatabaseBase $dbw
+        * @param Revision $revision For ID number, and text used to set
+        *   length and redirect status fields
+        * @param int $lastRevision If given, will not overwrite the page field
+        *   when different from the currently set value.
+        *   Giving 0 indicates the new page flag should be set on.
+        * @param bool $lastRevIsRedirect If given, will optimize adding and
+        *   removing rows in redirect table.
+        * @return bool true on success, false on failure
+        */
+       public function updateRevisionOn( $dbw, $revision, $lastRevision = null,
+               $lastRevIsRedirect = null
+       ) {
+               global $wgContentHandlerUseDB;
+
+               wfProfileIn( __METHOD__ );
+
+               $content = $revision->getContent();
+               $len = $content ? $content->getSize() : 0;
+               $rt = $content ? $content->getUltimateRedirectTarget() : null;
+
+               $conditions = array( 'page_id' => $this->getId() );
+
+               if ( !is_null( $lastRevision ) ) {
+                       // An extra check against threads stepping on each other
+                       $conditions['page_latest'] = $lastRevision;
+               }
+
+               $now = wfTimestampNow();
+               $row = array( /* SET */
+                       'page_latest'      => $revision->getId(),
+                       'page_touched'     => $dbw->timestamp( $now ),
+                       'page_is_new'      => ( $lastRevision === 0 ) ? 1 : 0,
+                       'page_is_redirect' => $rt !== null ? 1 : 0,
+                       'page_len'         => $len,
+               );
+
+               if ( $wgContentHandlerUseDB ) {
+                       $row['page_content_model'] = $revision->getContentModel();
+               }
+
+               $dbw->update( 'page',
+                       $row,
+                       $conditions,
+                       __METHOD__ );
+
+               $result = $dbw->affectedRows() > 0;
+               if ( $result ) {
+                       $this->updateRedirectOn( $dbw, $rt, $lastRevIsRedirect );
+                       $this->setLastEdit( $revision );
+                       $this->setCachedLastEditTime( $now );
+                       $this->mLatest = $revision->getId();
+                       $this->mIsRedirect = (bool)$rt;
+                       // Update the LinkCache.
+                       LinkCache::singleton()->addGoodLinkObj( $this->getId(), $this->mTitle, $len, $this->mIsRedirect,
+                                                                                                       $this->mLatest, $revision->getContentModel() );
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $result;
+       }
+
+       /**
+        * Add row to the redirect table if this is a redirect, remove otherwise.
+        *
+        * @param DatabaseBase $dbw
+        * @param Title $redirectTitle Title object pointing to the redirect target,
+        *   or NULL if this is not a redirect
+        * @param null|bool $lastRevIsRedirect If given, will optimize adding and
+        *   removing rows in redirect table.
+        * @return bool true on success, false on failure
+        * @private
+        */
+       public function updateRedirectOn( $dbw, $redirectTitle, $lastRevIsRedirect = null ) {
+               // Always update redirects (target link might have changed)
+               // Update/Insert if we don't know if the last revision was a redirect or not
+               // Delete if changing from redirect to non-redirect
+               $isRedirect = !is_null( $redirectTitle );
+
+               if ( !$isRedirect && $lastRevIsRedirect === false ) {
+                       return true;
+               }
+
+               wfProfileIn( __METHOD__ );
+               if ( $isRedirect ) {
+                       $this->insertRedirectEntry( $redirectTitle );
+               } else {
+                       // This is not a redirect, remove row from redirect table
+                       $where = array( 'rd_from' => $this->getId() );
+                       $dbw->delete( 'redirect', $where, __METHOD__ );
+               }
+
+               if ( $this->getTitle()->getNamespace() == NS_FILE ) {
+                       RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect( $this->getTitle() );
+               }
+               wfProfileOut( __METHOD__ );
+
+               return ( $dbw->affectedRows() != 0 );
+       }
+
+       /**
+        * 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
+        */
+       public function updateIfNewerOn( $dbw, $revision ) {
+               wfProfileIn( __METHOD__ );
+
+               $row = $dbw->selectRow(
+                       array( 'revision', 'page' ),
+                       array( 'rev_id', 'rev_timestamp', 'page_is_redirect' ),
+                       array(
+                               'page_id' => $this->getId(),
+                               'page_latest=rev_id' ),
+                       __METHOD__ );
+
+               if ( $row ) {
+                       if ( wfTimestamp( TS_MW, $row->rev_timestamp ) >= $revision->getTimestamp() ) {
+                               wfProfileOut( __METHOD__ );
+                               return false;
+                       }
+                       $prev = $row->rev_id;
+                       $lastRevIsRedirect = (bool)$row->page_is_redirect;
+               } else {
+                       // No or missing previous revision; mark the page as new
+                       $prev = 0;
+                       $lastRevIsRedirect = null;
+               }
+
+               $ret = $this->updateRevisionOn( $dbw, $revision, $prev, $lastRevIsRedirect );
+
+               wfProfileOut( __METHOD__ );
+               return $ret;
+       }
+
+       /**
+        * Get the content that needs to be saved in order to undo all revisions
+        * between $undo and $undoafter. Revisions must belong to the same page,
+        * must exist and must not be deleted
+        * @param Revision $undo
+        * @param Revision $undoafter Must be an earlier revision than $undo
+        * @return mixed string on success, false on failure
+        * @since 1.21
+        * Before we had the Content object, this was done in getUndoText
+        */
+       public function getUndoContent( Revision $undo, Revision $undoafter = null ) {
+               $handler = $undo->getContentHandler();
+               return $handler->getUndoContent( $this->getRevision(), $undo, $undoafter );
+       }
+
+       /**
+        * Get the text that needs to be saved in order to undo all revisions
+        * between $undo and $undoafter. Revisions must belong to the same page,
+        * must exist and must not be deleted
+        * @param Revision $undo
+        * @param Revision $undoafter Must be an earlier revision than $undo
+        * @return string|bool string on success, false on failure
+        * @deprecated since 1.21: use ContentHandler::getUndoContent() instead.
+        */
+       public function getUndoText( Revision $undo, Revision $undoafter = null ) {
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+
+               $this->loadLastEdit();
+
+               if ( $this->mLastRevision ) {
+                       if ( is_null( $undoafter ) ) {
+                               $undoafter = $undo->getPrevious();
+                       }
+
+                       $handler = $this->getContentHandler();
+                       $undone = $handler->getUndoContent( $this->mLastRevision, $undo, $undoafter );
+
+                       if ( !$undone ) {
+                               return false;
+                       } else {
+                               return ContentHandler::getContentText( $undone );
+                       }
+               }
+
+               return false;
+       }
+
+       /**
+        * @param string|number|null|bool $sectionId Section identifier as a number or string
+        * (e.g. 0, 1 or 'T-1'), null/false or an empty string for the whole page
+        * or 'new' for a new section.
+        * @param string $text New text of the section.
+        * @param string $sectionTitle New section's subject, only if $section is "new".
+        * @param string $edittime Revision timestamp or null to use the current revision.
+        *
+        * @throws MWException
+        * @return string New complete article text, or null if error.
+        *
+        * @deprecated since 1.21, use replaceSectionAtRev() instead
+        */
+       public function replaceSection( $sectionId, $text, $sectionTitle = '',
+               $edittime = null
+       ) {
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+
+               //NOTE: keep condition in sync with condition in replaceSectionContent!
+               if ( strval( $sectionId ) === '' ) {
+                       // Whole-page edit; let the whole text through
+                       return $text;
+               }
+
+               if ( !$this->supportsSections() ) {
+                       throw new MWException( "sections not supported for content model " .
+                               $this->getContentHandler()->getModelID() );
+               }
+
+               // could even make section title, but that's not required.
+               $sectionContent = ContentHandler::makeContent( $text, $this->getTitle() );
+
+               $newContent = $this->replaceSectionContent( $sectionId, $sectionContent, $sectionTitle,
+                       $edittime );
+
+               return ContentHandler::getContentText( $newContent );
+       }
+
+       /**
+        * Returns true if this page's content model supports sections.
+        *
+        * @return bool
+        *
+        * @todo The skin should check this and not offer section functionality if
+        *   sections are not supported.
+        * @todo The EditPage should check this and not offer section functionality
+        *   if sections are not supported.
+        */
+       public function supportsSections() {
+               return $this->getContentHandler()->supportsSections();
+       }
+
+       /**
+        * @param string|number|null|bool $sectionId Section identifier as a number or string
+        * (e.g. 0, 1 or 'T-1'), null/false or an empty string for the whole page
+        * or 'new' for a new section.
+        * @param Content $sectionContent New content of the section.
+        * @param string $sectionTitle New section's subject, only if $section is "new".
+        * @param string $edittime Revision timestamp or null to use the current revision.
+        *
+        * @throws MWException
+        * @return Content New complete article content, or null if error.
+        *
+        * @since 1.21
+        * @deprecated since 1.24, use replaceSectionAtRev instead
+        */
+       public function replaceSectionContent( $sectionId, Content $sectionContent, $sectionTitle = '',
+               $edittime = null ) {
+               wfProfileIn( __METHOD__ );
+
+               $baseRevId = null;
+               if ( $edittime && $sectionId !== 'new' ) {
+                       $dbw = wfGetDB( DB_MASTER );
+                       $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
+                       if ( $rev ) {
+                               $baseRevId = $rev->getId();
+                       }
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $this->replaceSectionAtRev( $sectionId, $sectionContent, $sectionTitle, $baseRevId );
+       }
+
+       /**
+        * @param string|number|null|bool $sectionId Section identifier as a number or string
+        * (e.g. 0, 1 or 'T-1'), null/false or an empty string for the whole page
+        * or 'new' for a new section.
+        * @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( $sectionId, Content $sectionContent,
+               $sectionTitle = '', $baseRevId = null
+       ) {
+               wfProfileIn( __METHOD__ );
+
+               if ( strval( $sectionId ) === '' ) {
+                       // Whole-page edit; let the whole text through
+                       $newContent = $sectionContent;
+               } else {
+                       if ( !$this->supportsSections() ) {
+                               wfProfileOut( __METHOD__ );
+                               throw new MWException( "sections not supported for content model " .
+                                       $this->getContentHandler()->getModelID() );
+                       }
+
+                       // Bug 30711: always use current version when adding a new section
+                       if ( is_null( $baseRevId ) || $sectionId === 'new' ) {
+                               $oldContent = $this->getContent();
+                       } else {
+                               // TODO: try DB_SLAVE first
+                               $dbw = wfGetDB( DB_MASTER );
+                               $rev = Revision::loadFromId( $dbw, $baseRevId );
+
+                               if ( !$rev ) {
+                                       wfDebug( __METHOD__ . " asked for bogus section (page: " .
+                                               $this->getId() . "; section: $sectionId)\n" );
+                                       wfProfileOut( __METHOD__ );
+                                       return null;
+                               }
+
+                               $oldContent = $rev->getContent();
+                       }
+
+                       if ( ! $oldContent ) {
+                               wfDebug( __METHOD__ . ": no page text\n" );
+                               wfProfileOut( __METHOD__ );
+                               return null;
+                       }
+
+                       $newContent = $oldContent->replaceSection( $sectionId, $sectionContent, $sectionTitle );
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $newContent;
+       }
+
+       /**
+        * Check flags and add EDIT_NEW or EDIT_UPDATE to them as needed.
+        * @param int $flags
+        * @return int Updated $flags
+        */
+       public function checkFlags( $flags ) {
+               if ( !( $flags & EDIT_NEW ) && !( $flags & EDIT_UPDATE ) ) {
+                       if ( $this->exists() ) {
+                               $flags |= EDIT_UPDATE;
+                       } else {
+                               $flags |= EDIT_NEW;
+                       }
+               }
+
+               return $flags;
+       }
+
+       /**
+        * Change an existing article or create a new article. Updates RC and all necessary caches,
+        * optionally via the deferred update array.
+        *
+        * @param string $text New text
+        * @param string $summary Edit summary
+        * @param int $flags Bitfield:
+        *      EDIT_NEW
+        *          Article is known or assumed to be non-existent, create a new one
+        *      EDIT_UPDATE
+        *          Article is known or assumed to be pre-existing, update it
+        *      EDIT_MINOR
+        *          Mark this edit minor, if the user is allowed to do so
+        *      EDIT_SUPPRESS_RC
+        *          Do not log the change in recentchanges
+        *      EDIT_FORCE_BOT
+        *          Mark the edit a "bot" edit regardless of user rights
+        *      EDIT_DEFER_UPDATES
+        *          Defer some of the updates until the end of index.php
+        *      EDIT_AUTOSUMMARY
+        *          Fill in blank summaries with generated text where possible
+        *
+        * If neither EDIT_NEW nor EDIT_UPDATE is specified, the status of the
+        * article will be detected. If EDIT_UPDATE is specified and the article
+        * doesn't exist, the function will return an edit-gone-missing error. If
+        * EDIT_NEW is specified and the article does exist, an edit-already-exists
+        * error will be returned. These two conditions are also possible with
+        * auto-detection due to MediaWiki's performance-optimised locking strategy.
+        *
+        * @param bool|int $baseRevId The revision ID this edit was based off, if any
+        * @param User $user The user doing the edit
+        *
+        * @throws MWException
+        * @return Status object. Possible errors:
+        *   edit-hook-aborted: The ArticleSave hook aborted the edit but didn't
+        *     set the fatal flag of $status
+        *   edit-gone-missing: In update mode, but the article didn't exist.
+        *   edit-conflict: In update mode, the article changed unexpectedly.
+        *   edit-no-change: Warning that the text was the same as before.
+        *   edit-already-exists: In creation mode, but the article already exists.
+        *
+        * Extensions may define additional errors.
+        *
+        * $return->value will contain an associative array with members as follows:
+        *     new: Boolean indicating if the function attempted to create a new article.
+        *     revision: The revision object for the inserted revision, or null.
+        *
+        * Compatibility note: this function previously returned a boolean value
+        * indicating success/failure
+        *
+        * @deprecated since 1.21: use doEditContent() instead.
+        */
+       public function doEdit( $text, $summary, $flags = 0, $baseRevId = false, $user = null ) {
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+
+               $content = ContentHandler::makeContent( $text, $this->getTitle() );
+
+               return $this->doEditContent( $content, $summary, $flags, $baseRevId, $user );
+       }
+
+       /**
+        * Change an existing article or create a new article. Updates RC and all necessary caches,
+        * optionally via the deferred update array.
+        *
+        * @param Content $content New content
+        * @param string $summary Edit summary
+        * @param int $flags Bitfield:
+        *      EDIT_NEW
+        *          Article is known or assumed to be non-existent, create a new one
+        *      EDIT_UPDATE
+        *          Article is known or assumed to be pre-existing, update it
+        *      EDIT_MINOR
+        *          Mark this edit minor, if the user is allowed to do so
+        *      EDIT_SUPPRESS_RC
+        *          Do not log the change in recentchanges
+        *      EDIT_FORCE_BOT
+        *          Mark the edit a "bot" edit regardless of user rights
+        *      EDIT_DEFER_UPDATES
+        *          Defer some of the updates until the end of index.php
+        *      EDIT_AUTOSUMMARY
+        *          Fill in blank summaries with generated text where possible
+        *
+        * If neither EDIT_NEW nor EDIT_UPDATE is specified, the status of the
+        * article will be detected. If EDIT_UPDATE is specified and the article
+        * doesn't exist, the function will return an edit-gone-missing error. If
+        * EDIT_NEW is specified and the article does exist, an edit-already-exists
+        * error will be returned. These two conditions are also possible with
+        * auto-detection due to MediaWiki's performance-optimised locking strategy.
+        *
+        * @param bool|int $baseRevId The revision ID this edit was based off, if any
+        * @param User $user The user doing the edit
+        * @param string $serialisation_format Format for storing the content in the
+        *   database.
+        *
+        * @throws MWException
+        * @return Status object. Possible errors:
+        *     edit-hook-aborted: The ArticleSave hook aborted the edit but didn't
+        *       set the fatal flag of $status.
+        *     edit-gone-missing: In update mode, but the article didn't exist.
+        *     edit-conflict: In update mode, the article changed unexpectedly.
+        *     edit-no-change: Warning that the text was the same as before.
+        *     edit-already-exists: In creation mode, but the article already exists.
+        *
+        *  Extensions may define additional errors.
+        *
+        *  $return->value will contain an associative array with members as follows:
+        *     new: Boolean indicating if the function attempted to create a new article.
+        *     revision: The revision object for the inserted revision, or null.
+        *
+        * @since 1.21
+        */
+       public function doEditContent( Content $content, $summary, $flags = 0, $baseRevId = false,
+               User $user = null, $serialisation_format = null
+       ) {
+               global $wgUser, $wgUseAutomaticEditSummaries, $wgUseRCPatrol, $wgUseNPPatrol;
+
+               // Low-level sanity check
+               if ( $this->mTitle->getText() === '' ) {
+                       throw new MWException( 'Something is trying to edit an article with an empty title' );
+               }
+
+               wfProfileIn( __METHOD__ );
+
+               if ( !$content->getContentHandler()->canBeUsedOn( $this->getTitle() ) ) {
+                       wfProfileOut( __METHOD__ );
+                       return Status::newFatal( 'content-not-allowed-here',
+                               ContentHandler::getLocalizedName( $content->getModel() ),
+                               $this->getTitle()->getPrefixedText() );
+               }
+
+               $user = is_null( $user ) ? $wgUser : $user;
+               $status = Status::newGood( array() );
+
+               // Load the data from the master database if needed.
+               // The caller may already loaded it from the master or even loaded it using
+               // SELECT FOR UPDATE, so do not override that using clear().
+               $this->loadPageData( 'fromdbmaster' );
+
+               $flags = $this->checkFlags( $flags );
+
+               // handle hook
+               $hook_args = array( &$this, &$user, &$content, &$summary,
+                                                       $flags & EDIT_MINOR, null, null, &$flags, &$status );
+
+               if ( !wfRunHooks( 'PageContentSave', $hook_args )
+                       || !ContentHandler::runLegacyHooks( 'ArticleSave', $hook_args ) ) {
+
+                       wfDebug( __METHOD__ . ": ArticleSave or ArticleSaveContent hook aborted save!\n" );
+
+                       if ( $status->isOK() ) {
+                               $status->fatal( 'edit-hook-aborted' );
+                       }
+
+                       wfProfileOut( __METHOD__ );
+                       return $status;
+               }
+
+               // Silently ignore EDIT_MINOR if not allowed
+               $isminor = ( $flags & EDIT_MINOR ) && $user->isAllowed( 'minoredit' );
+               $bot = $flags & EDIT_FORCE_BOT;
+
+               $old_content = $this->getContent( Revision::RAW ); // current revision's content
+
+               $oldsize = $old_content ? $old_content->getSize() : 0;
+               $oldid = $this->getLatest();
+               $oldIsRedirect = $this->isRedirect();
+               $oldcountable = $this->isCountable();
+
+               $handler = $content->getContentHandler();
+
+               // Provide autosummaries if one is not provided and autosummaries are enabled.
+               if ( $wgUseAutomaticEditSummaries && $flags & EDIT_AUTOSUMMARY && $summary == '' ) {
+                       if ( !$old_content ) {
+                               $old_content = null;
+                       }
+                       $summary = $handler->getAutosummary( $old_content, $content, $flags );
+               }
+
+               $editInfo = $this->prepareContentForEdit( $content, null, $user, $serialisation_format );
+               $serialized = $editInfo->pst;
+
+               /**
+                * @var Content $content
+                */
+               $content = $editInfo->pstContent;
+               $newsize = $content->getSize();
+
+               $dbw = wfGetDB( DB_MASTER );
+               $now = wfTimestampNow();
+               $this->mTimestamp = $now;
+
+               if ( $flags & EDIT_UPDATE ) {
+                       // Update article, but only if changed.
+                       $status->value['new'] = false;
+
+                       if ( !$oldid ) {
+                               // Article gone missing
+                               wfDebug( __METHOD__ . ": EDIT_UPDATE specified but article doesn't exist\n" );
+                               $status->fatal( 'edit-gone-missing' );
+
+                               wfProfileOut( __METHOD__ );
+                               return $status;
+                       } elseif ( !$old_content ) {
+                               // Sanity check for bug 37225
+                               wfProfileOut( __METHOD__ );
+                               throw new MWException( "Could not find text for current revision {$oldid}." );
+                       }
+
+                       $revision = new Revision( array(
+                               'page'       => $this->getId(),
+                               'title'      => $this->getTitle(), // for determining the default content model
+                               'comment'    => $summary,
+                               'minor_edit' => $isminor,
+                               'text'       => $serialized,
+                               'len'        => $newsize,
+                               'parent_id'  => $oldid,
+                               'user'       => $user->getId(),
+                               'user_text'  => $user->getName(),
+                               'timestamp'  => $now,
+                               'content_model' => $content->getModel(),
+                               'content_format' => $serialisation_format,
+                       ) ); // XXX: pass content object?!
+
+                       $changed = !$content->equals( $old_content );
+
+                       if ( $changed ) {
+                               if ( !$content->isValid() ) {
+                                       wfProfileOut( __METHOD__ );
+                                       throw new MWException( "New content failed validity check!" );
+                               }
+
+                               $dbw->begin( __METHOD__ );
+                               try {
+
+                                       $prepStatus = $content->prepareSave( $this, $flags, $baseRevId, $user );
+                                       $status->merge( $prepStatus );
+
+                                       if ( !$status->isOK() ) {
+                                               $dbw->rollback( __METHOD__ );
+
+                                               wfProfileOut( __METHOD__ );
+                                               return $status;
+                                       }
+                                       $revisionId = $revision->insertOn( $dbw );
+
+                                       // Update page
+                                       //
+                                       // We check for conflicts by comparing $oldid with the current latest revision ID.
+                                       $ok = $this->updateRevisionOn( $dbw, $revision, $oldid, $oldIsRedirect );
+
+                                       if ( !$ok ) {
+                                               // Belated edit conflict! Run away!!
+                                               $status->fatal( 'edit-conflict' );
+
+                                               $dbw->rollback( __METHOD__ );
+
+                                               wfProfileOut( __METHOD__ );
+                                               return $status;
+                                       }
+
+                                       wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, $baseRevId, $user ) );
+                                       // Update recentchanges
+                                       if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
+                                               // Mark as patrolled if the user can do so
+                                               $patrolled = $wgUseRCPatrol && !count(
+                                               $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
+                                               // Add RC row to the DB
+                                               $rc = RecentChange::notifyEdit( $now, $this->mTitle, $isminor, $user, $summary,
+                                                       $oldid, $this->getTimestamp(), $bot, '', $oldsize, $newsize,
+                                                       $revisionId, $patrolled
+                                               );
+
+                                               // Log auto-patrolled edits
+                                               if ( $patrolled ) {
+                                                       PatrolLog::record( $rc, true, $user );
+                                               }
+                                       }
+                                       $user->incEditCount();
+                               } catch ( MWException $e ) {
+                                       $dbw->rollback( __METHOD__ );
+                                       // Question: Would it perhaps be better if this method turned all
+                                       // exceptions into $status's?
+                                       throw $e;
+                               }
+                               $dbw->commit( __METHOD__ );
+                       } else {
+                               // Bug 32948: revision ID must be set to page {{REVISIONID}} and
+                               // related variables correctly
+                               $revision->setId( $this->getLatest() );
+                       }
+
+                       // Update links tables, site stats, etc.
+                       $this->doEditUpdates(
+                               $revision,
+                               $user,
+                               array(
+                                       'changed' => $changed,
+                                       'oldcountable' => $oldcountable
+                               )
+                       );
+
+                       if ( !$changed ) {
+                               $status->warning( 'edit-no-change' );
+                               $revision = null;
+                               // Update page_touched, this is usually implicit in the page update
+                               // Other cache updates are done in onArticleEdit()
+                               $this->mTitle->invalidateCache();
+                       }
+               } else {
+                       // Create new article
+                       $status->value['new'] = true;
+
+                       $dbw->begin( __METHOD__ );
+                       try {
+
+                               $prepStatus = $content->prepareSave( $this, $flags, $baseRevId, $user );
+                               $status->merge( $prepStatus );
+
+                               if ( !$status->isOK() ) {
+                                       $dbw->rollback( __METHOD__ );
+
+                                       wfProfileOut( __METHOD__ );
+                                       return $status;
+                               }
+
+                               $status->merge( $prepStatus );
+
+                               // Add the page record; stake our claim on this title!
+                               // This will return false if the article already exists
+                               $newid = $this->insertOn( $dbw );
+
+                               if ( $newid === false ) {
+                                       $dbw->rollback( __METHOD__ );
+                                       $status->fatal( 'edit-already-exists' );
+
+                                       wfProfileOut( __METHOD__ );
+                                       return $status;
+                               }
+
+                               // Save the revision text...
+                               $revision = new Revision( array(
+                                       'page'       => $newid,
+                                       'title'      => $this->getTitle(), // for determining the default content model
+                                       'comment'    => $summary,
+                                       'minor_edit' => $isminor,
+                                       'text'       => $serialized,
+                                       'len'        => $newsize,
+                                       'user'       => $user->getId(),
+                                       'user_text'  => $user->getName(),
+                                       'timestamp'  => $now,
+                                       'content_model' => $content->getModel(),
+                                       'content_format' => $serialisation_format,
+                               ) );
+                               $revisionId = $revision->insertOn( $dbw );
+
+                               // Bug 37225: use accessor to get the text as Revision may trim it
+                               $content = $revision->getContent(); // sanity; get normalized version
+
+                               if ( $content ) {
+                                       $newsize = $content->getSize();
+                               }
+
+                               // Update the page record with revision data
+                               $this->updateRevisionOn( $dbw, $revision, 0 );
+
+                               wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) );
+
+                               // Update recentchanges
+                               if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
+                                       // Mark as patrolled if the user can do so
+                                       $patrolled = ( $wgUseRCPatrol || $wgUseNPPatrol ) && !count(
+                                               $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
+                                       // Add RC row to the DB
+                                       $rc = RecentChange::notifyNew( $now, $this->mTitle, $isminor, $user, $summary, $bot,
+                                               '', $newsize, $revisionId, $patrolled );
+
+                                       // Log auto-patrolled edits
+                                       if ( $patrolled ) {
+                                               PatrolLog::record( $rc, true, $user );
+                                       }
+                               }
+                               $user->incEditCount();
+
+                       } catch ( MWException $e ) {
+                               $dbw->rollback( __METHOD__ );
+                               throw $e;
+                       }
+                       $dbw->commit( __METHOD__ );
+
+                       // Update links, etc.
+                       $this->doEditUpdates( $revision, $user, array( 'created' => true ) );
+
+                       $hook_args = array( &$this, &$user, $content, $summary,
+                                                               $flags & EDIT_MINOR, null, null, &$flags, $revision );
+
+                       ContentHandler::runLegacyHooks( 'ArticleInsertComplete', $hook_args );
+                       wfRunHooks( 'PageContentInsertComplete', $hook_args );
+               }
+
+               // Do updates right now unless deferral was requested
+               if ( !( $flags & EDIT_DEFER_UPDATES ) ) {
+                       DeferredUpdates::doUpdates();
+               }
+
+               // Return the new revision (or null) to the caller
+               $status->value['revision'] = $revision;
+
+               $hook_args = array( &$this, &$user, $content, $summary,
+                                                       $flags & EDIT_MINOR, null, null, &$flags, $revision, &$status, $baseRevId );
+
+               ContentHandler::runLegacyHooks( 'ArticleSaveComplete', $hook_args );
+               wfRunHooks( 'PageContentSaveComplete', $hook_args );
+
+               // Promote user to any groups they meet the criteria for
+               $user->addAutopromoteOnceGroups( 'onEdit' );
+
+               wfProfileOut( __METHOD__ );
+               return $status;
+       }
+
+       /**
+        * Get parser options suitable for rendering the primary article wikitext
+        *
+        * @see ContentHandler::makeParserOptions
+        *
+        * @param IContextSource|User|string $context One of the following:
+        *        - IContextSource: Use the User and the Language of the provided
+        *          context
+        *        - User: Use the provided User object and $wgLang for the language,
+        *          so use an IContextSource object if possible.
+        *        - 'canonical': Canonical options (anonymous user with default
+        *          preferences and content language).
+        * @return ParserOptions
+        */
+       public function makeParserOptions( $context ) {
+               $options = $this->getContentHandler()->makeParserOptions( $context );
+
+               if ( $this->getTitle()->isConversionTable() ) {
+                       // @todo ConversionTable should become a separate content model, so
+                       // we don't need special cases like this one.
+                       $options->disableContentConversion();
+               }
+
+               return $options;
+       }
+
+       /**
+        * Prepare text which is about to be saved.
+        * Returns a stdclass with source, pst and output members
+        *
+        * @deprecated since 1.21: use prepareContentForEdit instead.
+        * @return object
+        */
+       public function prepareTextForEdit( $text, $revid = null, User $user = null ) {
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+               $content = ContentHandler::makeContent( $text, $this->getTitle() );
+               return $this->prepareContentForEdit( $content, $revid, $user );
+       }
+
+       /**
+        * Prepare content which is about to be saved.
+        * Returns a stdclass with source, pst and output members
+        *
+        * @param Content $content
+        * @param int|null $revid
+        * @param User|null $user
+        * @param string|null $serialization_format
+        *
+        * @return bool|object
+        *
+        * @since 1.21
+        */
+       public function prepareContentForEdit( Content $content, $revid = null, User $user = null,
+               $serialization_format = null
+       ) {
+               global $wgContLang, $wgUser;
+               $user = is_null( $user ) ? $wgUser : $user;
+               //XXX: check $user->getId() here???
+
+               // Use a sane default for $serialization_format, see bug 57026
+               if ( $serialization_format === null ) {
+                       $serialization_format = $content->getContentHandler()->getDefaultFormat();
+               }
+
+               if ( $this->mPreparedEdit
+                       && $this->mPreparedEdit->newContent
+                       && $this->mPreparedEdit->newContent->equals( $content )
+                       && $this->mPreparedEdit->revid == $revid
+                       && $this->mPreparedEdit->format == $serialization_format
+                       // XXX: also check $user here?
+               ) {
+                       // Already prepared
+                       return $this->mPreparedEdit;
+               }
+
+               $popts = ParserOptions::newFromUserAndLang( $user, $wgContLang );
+               wfRunHooks( 'ArticlePrepareTextForEdit', array( $this, $popts ) );
+
+               $edit = (object)array();
+               $edit->revid = $revid;
+               $edit->timestamp = wfTimestampNow();
+
+               $edit->pstContent = $content ? $content->preSaveTransform( $this->mTitle, $user, $popts ) : null;
+
+               $edit->format = $serialization_format;
+               $edit->popts = $this->makeParserOptions( 'canonical' );
+               $edit->output = $edit->pstContent
+                       ? $edit->pstContent->getParserOutput( $this->mTitle, $revid, $edit->popts )
+                       : null;
+
+               $edit->newContent = $content;
+               $edit->oldContent = $this->getContent( Revision::RAW );
+
+               // NOTE: B/C for hooks! don't use these fields!
+               $edit->newText = $edit->newContent ? ContentHandler::getContentText( $edit->newContent ) : '';
+               $edit->oldText = $edit->oldContent ? ContentHandler::getContentText( $edit->oldContent ) : '';
+               $edit->pst = $edit->pstContent ? $edit->pstContent->serialize( $serialization_format ) : '';
+
+               $this->mPreparedEdit = $edit;
+               return $edit;
+       }
+
+       /**
+        * Do standard deferred updates after page edit.
+        * Update links tables, site stats, search index and message cache.
+        * Purges pages that include this page if the text was changed here.
+        * Every 100th edit, prune the recent changes table.
+        *
+        * @param Revision $revision
+        * @param User $user User object that did the revision
+        * @param array $options Array of options, following indexes are used:
+        * - changed: boolean, whether the revision changed the content (default true)
+        * - created: boolean, whether the revision created the page (default false)
+        * - oldcountable: boolean or null (default null):
+        *   - boolean: whether the page was counted as an article before that
+        *     revision, only used in changed is true and created is false
+        *   - null: don't change the article count
+        */
+       public function doEditUpdates( Revision $revision, User $user, array $options = array() ) {
+               global $wgEnableParserCache;
+
+               wfProfileIn( __METHOD__ );
+
+               $options += array( 'changed' => true, 'created' => false, 'oldcountable' => null );
+               $content = $revision->getContent();
+
+               // Parse the text
+               // Be careful not to do pre-save transform twice: $text is usually
+               // already pre-save transformed once.
+               if ( !$this->mPreparedEdit || $this->mPreparedEdit->output->getFlag( 'vary-revision' ) ) {
+                       wfDebug( __METHOD__ . ": No prepared edit or vary-revision is set...\n" );
+                       $editInfo = $this->prepareContentForEdit( $content, $revision->getId(), $user );
+               } else {
+                       wfDebug( __METHOD__ . ": No vary-revision, using prepared edit...\n" );
+                       $editInfo = $this->mPreparedEdit;
+               }
+
+               // Save it to the parser cache
+               if ( $wgEnableParserCache ) {
+                       $parserCache = ParserCache::singleton();
+                       $parserCache->save(
+                               $editInfo->output, $this, $editInfo->popts, $editInfo->timestamp, $editInfo->revid
+                       );
+               }
+
+               // Update the links tables and other secondary data
+               if ( $content ) {
+                       $recursive = $options['changed']; // bug 50785
+                       $updates = $content->getSecondaryDataUpdates(
+                               $this->getTitle(), null, $recursive, $editInfo->output );
+                       DataUpdate::runUpdates( $updates );
+               }
+
+               wfRunHooks( 'ArticleEditUpdates', array( &$this, &$editInfo, $options['changed'] ) );
+
+               if ( wfRunHooks( 'ArticleEditUpdatesDeleteFromRecentchanges', array( &$this ) ) ) {
+                       if ( 0 == mt_rand( 0, 99 ) ) {
+                               // Flush old entries from the `recentchanges` table; we do this on
+                               // random requests so as to avoid an increase in writes for no good reason
+                               RecentChange::purgeExpiredChanges();
+                       }
+               }
+
+               if ( !$this->exists() ) {
+                       wfProfileOut( __METHOD__ );
+                       return;
+               }
+
+               $id = $this->getId();
+               $title = $this->mTitle->getPrefixedDBkey();
+               $shortTitle = $this->mTitle->getDBkey();
+
+               if ( !$options['changed'] ) {
+                       $good = 0;
+               } elseif ( $options['created'] ) {
+                       $good = (int)$this->isCountable( $editInfo );
+               } elseif ( $options['oldcountable'] !== null ) {
+                       $good = (int)$this->isCountable( $editInfo ) - (int)$options['oldcountable'];
+               } else {
+                       $good = 0;
+               }
+               $edits = $options['changed'] ? 1 : 0;
+               $total = $options['created'] ? 1 : 0;
+
+               DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, $edits, $good, $total ) );
+               DeferredUpdates::addUpdate( new SearchUpdate( $id, $title, $content ) );
+
+               // If this is another user's talk page, update newtalk.
+               // Don't do this if $options['changed'] = false (null-edits) nor if
+               // it's a minor edit and the user doesn't want notifications for those.
+               if ( $options['changed']
+                       && $this->mTitle->getNamespace() == NS_USER_TALK
+                       && $shortTitle != $user->getTitleKey()
+                       && !( $revision->isMinor() && $user->isAllowed( 'nominornewtalk' ) )
+               ) {
+                       $recipient = User::newFromName( $shortTitle, false );
+                       if ( !$recipient ) {
+                               wfDebug( __METHOD__ . ": invalid username\n" );
+                       } else {
+                               // Allow extensions to prevent user notification when a new message is added to their talk page
+                               if ( wfRunHooks( 'ArticleEditUpdateNewTalk', array( &$this, $recipient ) ) ) {
+                                       if ( User::isIP( $shortTitle ) ) {
+                                               // An anonymous user
+                                               $recipient->setNewtalk( true, $revision );
+                                       } elseif ( $recipient->isLoggedIn() ) {
+                                               $recipient->setNewtalk( true, $revision );
+                                       } else {
+                                               wfDebug( __METHOD__ . ": don't need to notify a nonexistent user\n" );
+                                       }
+                               }
+                       }
+               }
+
+               if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
+                       // XXX: could skip pseudo-messages like js/css here, based on content model.
+                       $msgtext = $content ? $content->getWikitextForTransclusion() : null;
+                       if ( $msgtext === false || $msgtext === null ) {
+                               $msgtext = '';
+                       }
+
+                       MessageCache::singleton()->replace( $shortTitle, $msgtext );
+               }
+
+               if ( $options['created'] ) {
+                       self::onArticleCreate( $this->mTitle );
+               } elseif ( $options['changed'] ) { // bug 50785
+                       self::onArticleEdit( $this->mTitle );
+               }
+
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * Edit an article without doing all that other stuff
+        * The article must already exist; link tables etc
+        * are not updated, caches are not flushed.
+        *
+        * @param string $text Text submitted
+        * @param User $user The relevant user
+        * @param string $comment Comment submitted
+        * @param bool $minor Whereas it's a minor modification
+        *
+        * @deprecated since 1.21, use doEditContent() instead.
+        */
+       public function doQuickEdit( $text, User $user, $comment = '', $minor = 0 ) {
+               ContentHandler::deprecated( __METHOD__, "1.21" );
+
+               $content = ContentHandler::makeContent( $text, $this->getTitle() );
+               $this->doQuickEditContent( $content, $user, $comment, $minor );
+       }
+
+       /**
+        * Edit an article without doing all that other stuff
+        * The article must already exist; link tables etc
+        * are not updated, caches are not flushed.
+        *
+        * @param Content $content Content submitted
+        * @param User $user The relevant user
+        * @param string $comment comment submitted
+        * @param string $serialisation_format Format for storing the content in the database
+        * @param bool $minor Whereas it's a minor modification
+        */
+       public function doQuickEditContent( Content $content, User $user, $comment = '', $minor = false,
+               $serialisation_format = null
+       ) {
+               wfProfileIn( __METHOD__ );
+
+               $serialized = $content->serialize( $serialisation_format );
+
+               $dbw = wfGetDB( DB_MASTER );
+               $revision = new Revision( array(
+                       'title'      => $this->getTitle(), // for determining the default content model
+                       'page'       => $this->getId(),
+                       'user_text'  => $user->getName(),
+                       'user'       => $user->getId(),
+                       'text'       => $serialized,
+                       'length'     => $content->getSize(),
+                       'comment'    => $comment,
+                       'minor_edit' => $minor ? 1 : 0,
+               ) ); // XXX: set the content object?
+               $revision->insertOn( $dbw );
+               $this->updateRevisionOn( $dbw, $revision );
+
+               wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) );
+
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * Update the article's restriction field, and leave a log entry.
+        * This works for protection both existing and non-existing pages.
+        *
+        * @param array $limit Set of restriction keys
+        * @param array $expiry Per restriction type expiration
+        * @param int &$cascade Set to false if cascading protection isn't allowed.
+        * @param string $reason
+        * @param User $user The user updating the restrictions
+        * @return Status
+        */
+       public function doUpdateRestrictions( array $limit, array $expiry,
+               &$cascade, $reason, User $user
+       ) {
+               global $wgCascadingRestrictionLevels, $wgContLang;
+
+               if ( wfReadOnly() ) {
+                       return Status::newFatal( 'readonlytext', wfReadOnlyReason() );
+               }
+
+               $this->loadPageData( 'fromdbmaster' );
+               $restrictionTypes = $this->mTitle->getRestrictionTypes();
+               $id = $this->getId();
+
+               if ( !$cascade ) {
+                       $cascade = false;
+               }
+
+               // Take this opportunity to purge out expired restrictions
+               Title::purgeExpiredRestrictions();
+
+               // @todo FIXME: Same limitations as described in ProtectionForm.php (line 37);
+               // we expect a single selection, but the schema allows otherwise.
+               $isProtected = false;
+               $protect = false;
+               $changed = false;
+
+               $dbw = wfGetDB( DB_MASTER );
+
+               foreach ( $restrictionTypes as $action ) {
+                       if ( !isset( $expiry[$action] ) ) {
+                               $expiry[$action] = $dbw->getInfinity();
+                       }
+                       if ( !isset( $limit[$action] ) ) {
+                               $limit[$action] = '';
+                       } elseif ( $limit[$action] != '' ) {
+                               $protect = true;
+                       }
+
+                       // Get current restrictions on $action
+                       $current = implode( '', $this->mTitle->getRestrictions( $action ) );
+                       if ( $current != '' ) {
+                               $isProtected = true;
+                       }
+
+                       if ( $limit[$action] != $current ) {
+                               $changed = true;
+                       } elseif ( $limit[$action] != '' ) {
+                               // Only check expiry change if the action is actually being
+                               // protected, since expiry does nothing on an not-protected
+                               // action.
+                               if ( $this->mTitle->getRestrictionExpiry( $action ) != $expiry[$action] ) {
+                                       $changed = true;
+                               }
+                       }
+               }
+
+               if ( !$changed && $protect && $this->mTitle->areRestrictionsCascading() != $cascade ) {
+                       $changed = true;
+               }
+
+               // If nothing has changed, do nothing
+               if ( !$changed ) {
+                       return Status::newGood();
+               }
+
+               if ( !$protect ) { // No protection at all means unprotection
+                       $revCommentMsg = 'unprotectedarticle';
+                       $logAction = 'unprotect';
+               } elseif ( $isProtected ) {
+                       $revCommentMsg = 'modifiedarticleprotection';
+                       $logAction = 'modify';
+               } else {
+                       $revCommentMsg = 'protectedarticle';
+                       $logAction = 'protect';
+               }
+
+               // Truncate for whole multibyte characters
+               $reason = $wgContLang->truncate( $reason, 255 );
+
+               $logRelationsValues = array();
+               $logRelationsField = null;
+
+               if ( $id ) { // Protection of existing page
+                       if ( !wfRunHooks( 'ArticleProtect', array( &$this, &$user, $limit, $reason ) ) ) {
+                               return Status::newGood();
+                       }
+
+                       // Only certain restrictions can cascade...
+                       $editrestriction = isset( $limit['edit'] )
+                               ? array( $limit['edit'] )
+                               : $this->mTitle->getRestrictions( 'edit' );
+                       foreach ( array_keys( $editrestriction, 'sysop' ) as $key ) {
+                               $editrestriction[$key] = 'editprotected'; // backwards compatibility
+                       }
+                       foreach ( array_keys( $editrestriction, 'autoconfirmed' ) as $key ) {
+                               $editrestriction[$key] = 'editsemiprotected'; // backwards compatibility
+                       }
+
+                       $cascadingRestrictionLevels = $wgCascadingRestrictionLevels;
+                       foreach ( array_keys( $cascadingRestrictionLevels, 'sysop' ) as $key ) {
+                               $cascadingRestrictionLevels[$key] = 'editprotected'; // backwards compatibility
+                       }
+                       foreach ( array_keys( $cascadingRestrictionLevels, 'autoconfirmed' ) as $key ) {
+                               $cascadingRestrictionLevels[$key] = 'editsemiprotected'; // backwards compatibility
+                       }
+
+                       // The schema allows multiple restrictions
+                       if ( !array_intersect( $editrestriction, $cascadingRestrictionLevels ) ) {
+                               $cascade = false;
+                       }
+
+                       // insert null revision to identify the page protection change as edit summary
+                       $latest = $this->getLatest();
+                       $nullRevision = $this->insertProtectNullRevision(
+                               $revCommentMsg,
+                               $limit,
+                               $expiry,
+                               $cascade,
+                               $reason,
+                               $user
+                       );
+
+                       if ( $nullRevision === null ) {
+                               return Status::newFatal( 'no-null-revision', $this->mTitle->getPrefixedText() );
+                       }
+
+                       $logRelationsField = 'pr_id';
+
+                       // Update restrictions table
+                       foreach ( $limit as $action => $restrictions ) {
+                               $dbw->delete(
+                                       'page_restrictions',
+                                       array(
+                                               'pr_page' => $id,
+                                               'pr_type' => $action
+                                       ),
+                                       __METHOD__
+                               );
+                               if ( $restrictions != '' ) {
+                                       $dbw->insert(
+                                               'page_restrictions',
+                                               array(
+                                                       'pr_id' => $dbw->nextSequenceValue( 'page_restrictions_pr_id_seq' ),
+                                                       'pr_page' => $id,
+                                                       'pr_type' => $action,
+                                                       'pr_level' => $restrictions,
+                                                       'pr_cascade' => ( $cascade && $action == 'edit' ) ? 1 : 0,
+                                                       'pr_expiry' => $dbw->encodeExpiry( $expiry[$action] )
+                                               ),
+                                               __METHOD__
+                                       );
+                                       $logRelationsValues[] = $dbw->insertId();
+                               }
+                       }
+
+                       // Clear out legacy restriction fields
+                       $dbw->update(
+                               'page',
+                               array( 'page_restrictions' => '' ),
+                               array( 'page_id' => $id ),
+                               __METHOD__
+                       );
+
+                       wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $nullRevision, $latest, $user ) );
+                       wfRunHooks( 'ArticleProtectComplete', array( &$this, &$user, $limit, $reason ) );
+               } else { // Protection of non-existing page (also known as "title protection")
+                       // Cascade protection is meaningless in this case
+                       $cascade = false;
+
+                       if ( $limit['create'] != '' ) {
+                               $dbw->replace( 'protected_titles',
+                                       array( array( 'pt_namespace', 'pt_title' ) ),
+                                       array(
+                                               'pt_namespace' => $this->mTitle->getNamespace(),
+                                               'pt_title' => $this->mTitle->getDBkey(),
+                                               'pt_create_perm' => $limit['create'],
+                                               'pt_timestamp' => $dbw->timestamp(),
+                                               'pt_expiry' => $dbw->encodeExpiry( $expiry['create'] ),
+                                               'pt_user' => $user->getId(),
+                                               'pt_reason' => $reason,
+                                       ), __METHOD__
+                               );
+                       } else {
+                               $dbw->delete( 'protected_titles',
+                                       array(
+                                               'pt_namespace' => $this->mTitle->getNamespace(),
+                                               'pt_title' => $this->mTitle->getDBkey()
+                                       ), __METHOD__
+                               );
+                       }
+               }
+
+               $this->mTitle->flushRestrictions();
+               InfoAction::invalidateCache( $this->mTitle );
+
+               if ( $logAction == 'unprotect' ) {
+                       $params = array();
+               } else {
+                       $protectDescriptionLog = $this->protectDescriptionLog( $limit, $expiry );
+                       $params = array( $protectDescriptionLog, $cascade ? 'cascade' : '' );
+               }
+
+               // Update the protection log
+               $log = new LogPage( 'protect' );
+               $logId = $log->addEntry( $logAction, $this->mTitle, $reason, $params, $user );
+               if ( $logRelationsField !== null && count( $logRelationsValues ) ) {
+                       $log->addRelations( $logRelationsField, $logRelationsValues, $logId );
+               }
+
+               return Status::newGood();
+       }
+
+       /**
+        * Insert a new null revision for this page.
+        *
+        * @param string $revCommentMsg Comment message key for the revision
+        * @param array $limit Set of restriction keys
+        * @param array $expiry Per restriction type expiration
+        * @param int $cascade Set to false if cascading protection isn't allowed.
+        * @param string $reason
+        * @param User|null $user
+        * @return Revision|null Null on error
+        */
+       public function insertProtectNullRevision( $revCommentMsg, array $limit,
+               array $expiry, $cascade, $reason, $user = null
+       ) {
+               global $wgContLang;
+               $dbw = wfGetDB( DB_MASTER );
+
+               // Prepare a null revision to be added to the history
+               $editComment = $wgContLang->ucfirst(
+                       wfMessage(
+                               $revCommentMsg,
+                               $this->mTitle->getPrefixedText()
+                       )->inContentLanguage()->text()
+               );
+               if ( $reason ) {
+                       $editComment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
+               }
+               $protectDescription = $this->protectDescription( $limit, $expiry );
+               if ( $protectDescription ) {
+                       $editComment .= wfMessage( 'word-separator' )->inContentLanguage()->text();
+                       $editComment .= wfMessage( 'parentheses' )->params( $protectDescription )
+                               ->inContentLanguage()->text();
+               }
+               if ( $cascade ) {
+                       $editComment .= wfMessage( 'word-separator' )->inContentLanguage()->text();
+                       $editComment .= wfMessage( 'brackets' )->params(
+                               wfMessage( 'protect-summary-cascade' )->inContentLanguage()->text()
+                       )->inContentLanguage()->text();
+               }
+
+               $nullRev = Revision::newNullRevision( $dbw, $this->getId(), $editComment, true, $user );
+               if ( $nullRev ) {
+                       $nullRev->insertOn( $dbw );
+
+                       // Update page record and touch page
+                       $oldLatest = $nullRev->getParentId();
+                       $this->updateRevisionOn( $dbw, $nullRev, $oldLatest );
+               }
+
+               return $nullRev;
+       }
+
+       /**
+        * @param string $expiry 14-char timestamp or "infinity", or false if the input was invalid
+        * @return string
+        */
+       protected function formatExpiry( $expiry ) {
+               global $wgContLang;
+               $dbr = wfGetDB( DB_SLAVE );
+
+               $encodedExpiry = $dbr->encodeExpiry( $expiry );
+               if ( $encodedExpiry != 'infinity' ) {
+                       return wfMessage(
+                               'protect-expiring',
+                               $wgContLang->timeanddate( $expiry, false, false ),
+                               $wgContLang->date( $expiry, false, false ),
+                               $wgContLang->time( $expiry, false, false )
+                       )->inContentLanguage()->text();
+               } else {
+                       return wfMessage( 'protect-expiry-indefinite' )
+                               ->inContentLanguage()->text();
+               }
+       }
+
+       /**
+        * Builds the description to serve as comment for the edit.
+        *
+        * @param array $limit Set of restriction keys
+        * @param array $expiry Per restriction type expiration
+        * @return string
+        */
+       public function protectDescription( array $limit, array $expiry ) {
+               $protectDescription = '';
+
+               foreach ( array_filter( $limit ) as $action => $restrictions ) {
+                       # $action is one of $wgRestrictionTypes = array( 'create', 'edit', 'move', 'upload' ).
+                       # All possible message keys are listed here for easier grepping:
+                       # * restriction-create
+                       # * restriction-edit
+                       # * restriction-move
+                       # * restriction-upload
+                       $actionText = wfMessage( 'restriction-' . $action )->inContentLanguage()->text();
+                       # $restrictions is one of $wgRestrictionLevels = array( '', 'autoconfirmed', 'sysop' ),
+                       # with '' filtered out. All possible message keys are listed below:
+                       # * protect-level-autoconfirmed
+                       # * protect-level-sysop
+                       $restrictionsText = wfMessage( 'protect-level-' . $restrictions )->inContentLanguage()->text();
+
+                       $expiryText = $this->formatExpiry( $expiry[$action] );
+
+                       if ( $protectDescription !== '' ) {
+                               $protectDescription .= wfMessage( 'word-separator' )->inContentLanguage()->text();
+                       }
+                       $protectDescription .= wfMessage( 'protect-summary-desc' )
+                               ->params( $actionText, $restrictionsText, $expiryText )
+                               ->inContentLanguage()->text();
+               }
+
+               return $protectDescription;
+       }
+
+       /**
+        * Builds the description to serve as comment for the log entry.
+        *
+        * Some bots may parse IRC lines, which are generated from log entries which contain plain
+        * protect description text. Keep them in old format to avoid breaking compatibility.
+        * TODO: Fix protection log to store structured description and format it on-the-fly.
+        *
+        * @param array $limit Set of restriction keys
+        * @param array $expiry Per restriction type expiration
+        * @return string
+        */
+       public function protectDescriptionLog( array $limit, array $expiry ) {
+               global $wgContLang;
+
+               $protectDescriptionLog = '';
+
+               foreach ( array_filter( $limit ) as $action => $restrictions ) {
+                       $expiryText = $this->formatExpiry( $expiry[$action] );
+                       $protectDescriptionLog .= $wgContLang->getDirMark() . "[$action=$restrictions] ($expiryText)";
+               }
+
+               return trim( $protectDescriptionLog );
+       }
+
+       /**
+        * Take an array of page restrictions and flatten it to a string
+        * suitable for insertion into the page_restrictions field.
+        *
+        * @param string[] $limit
+        *
+        * @throws MWException
+        * @return string
+        */
+       protected static function flattenRestrictions( $limit ) {
+               if ( !is_array( $limit ) ) {
+                       throw new MWException( 'WikiPage::flattenRestrictions given non-array restriction set' );
+               }
+
+               $bits = array();
+               ksort( $limit );
+
+               foreach ( array_filter( $limit ) as $action => $restrictions ) {
+                       $bits[] = "$action=$restrictions";
+               }
+
+               return implode( ':', $bits );
+       }
+
+       /**
+        * Same as doDeleteArticleReal(), but returns a simple boolean. This is kept around for
+        * backwards compatibility, if you care about error reporting you should use
+        * doDeleteArticleReal() instead.
+        *
+        * Deletes the article with database consistency, writes logs, purges caches
+        *
+        * @param string $reason Delete reason for deletion log
+        * @param bool $suppress Suppress all revisions and log the deletion in
+        *        the suppression log instead of the deletion log
+        * @param int $id Article ID
+        * @param bool $commit Defaults to true, triggers transaction end
+        * @param array &$error Array of errors to append to
+        * @param User $user The deleting user
+        * @return bool true if successful
+        */
+       public function doDeleteArticle(
+               $reason, $suppress = false, $id = 0, $commit = true, &$error = '', User $user = null
+       ) {
+               $status = $this->doDeleteArticleReal( $reason, $suppress, $id, $commit, $error, $user );
+               return $status->isGood();
+       }
+
+       /**
+        * Back-end article deletion
+        * Deletes the article with database consistency, writes logs, purges caches
+        *
+        * @since 1.19
+        *
+        * @param string $reason Delete reason for deletion log
+        * @param bool $suppress Suppress all revisions and log the deletion in
+        *   the suppression log instead of the deletion log
+        * @param int $id Article ID
+        * @param bool $commit Defaults to true, triggers transaction end
+        * @param array &$error Array of errors to append to
+        * @param User $user The deleting user
+        * @return Status Status object; if successful, $status->value is the log_id of the
+        *   deletion log entry. If the page couldn't be deleted because it wasn't
+        *   found, $status is a non-fatal 'cannotdelete' error
+        */
+       public function doDeleteArticleReal(
+               $reason, $suppress = false, $id = 0, $commit = true, &$error = '', User $user = null
+       ) {
+               global $wgUser, $wgContentHandlerUseDB;
+
+               wfDebug( __METHOD__ . "\n" );
+
+               $status = Status::newGood();
+
+               if ( $this->mTitle->getDBkey() === '' ) {
+                       $status->error( 'cannotdelete', wfEscapeWikiText( $this->getTitle()->getPrefixedText() ) );
+                       return $status;
+               }
+
+               $user = is_null( $user ) ? $wgUser : $user;
+               if ( ! wfRunHooks( 'ArticleDelete', array( &$this, &$user, &$reason, &$error, &$status ) ) ) {
+                       if ( $status->isOK() ) {
+                               // Hook aborted but didn't set a fatal status
+                               $status->fatal( 'delete-hook-aborted' );
+                       }
+                       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;
+                       // This should be 15...
+                       $bitfield |= Revision::DELETED_TEXT;
+                       $bitfield |= Revision::DELETED_COMMENT;
+                       $bitfield |= Revision::DELETED_USER;
+                       $bitfield |= Revision::DELETED_RESTRICTED;
+               } else {
+                       $bitfield = 'rev_deleted';
+               }
+
+               // 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
+               // immutable storage schemes.
+               //
+               // For backwards compatibility, note that some older archive
+               // table entries will have ar_text and ar_flags fields still.
+               //
+               // In the future, we may keep revisions and mark them with
+               // the rev_deleted field, which is reserved for this purpose.
+
+               $row = array(
+                       'ar_namespace'  => 'page_namespace',
+                       'ar_title'      => 'page_title',
+                       'ar_comment'    => 'rev_comment',
+                       'ar_user'       => 'rev_user',
+                       'ar_user_text'  => 'rev_user_text',
+                       'ar_timestamp'  => 'rev_timestamp',
+                       'ar_minor_edit' => 'rev_minor_edit',
+                       'ar_rev_id'     => 'rev_id',
+                       'ar_parent_id'  => 'rev_parent_id',
+                       'ar_text_id'    => 'rev_text_id',
+                       'ar_text'       => '\'\'', // Be explicit to appease
+                       'ar_flags'      => '\'\'', // MySQL's "strict mode"...
+                       'ar_len'        => 'rev_len',
+                       'ar_page_id'    => 'page_id',
+                       'ar_deleted'    => $bitfield,
+                       'ar_sha1'       => 'rev_sha1',
+               );
+
+               if ( $wgContentHandlerUseDB ) {
+                       $row['ar_content_model'] = 'rev_content_model';
+                       $row['ar_content_format'] = 'rev_content_format';
+               }
+
+               $dbw->insertSelect( 'archive', array( 'page', 'revision' ),
+                       $row,
+                       array(
+                               'page_id' => $id,
+                               'page_id = rev_page'
+                       ), __METHOD__
+               );
+
+               // Now that it's safely backed up, delete it
+               $dbw->delete( 'page', array( 'page_id' => $id ), __METHOD__ );
+               $ok = ( $dbw->affectedRows() > 0 ); // $id could be laggy
+
+               if ( !$ok ) {
+                       $dbw->rollback( __METHOD__ );
+                       $status->error( 'cannotdelete', wfEscapeWikiText( $this->getTitle()->getPrefixedText() ) );
+                       return $status;
+               }
+
+               if ( !$dbw->cascadingDeletes() ) {
+                       $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
+               $logtype = $suppress ? 'suppress' : 'delete';
+
+               $logEntry = new ManualLogEntry( $logtype, 'delete' );
+               $logEntry->setPerformer( $user );
+               $logEntry->setTarget( $logTitle );
+               $logEntry->setComment( $reason );
+               $logid = $logEntry->insert();
+
+               $dbw->onTransactionPreCommitOrIdle( function() use ( $dbw, $logEntry, $logid ) {
+                       // Bug 56776: avoid deadlocks (especially from FileDeleteForm)
+                       $logEntry->publish( $logid );
+               } );
+
+               if ( $commit ) {
+                       $dbw->commit( __METHOD__ );
+               }
+
+               wfRunHooks( 'ArticleDeleteComplete', array( &$this, &$user, $reason, $id, $content, $logEntry ) );
+               $status->value = $logid;
+               return $status;
+       }
+
+       /**
+        * Do some database updates after deletion
+        *
+        * @param int $id page_id value of the page being deleted
+        * @param Content $content Optional page content to be used when determining
+        *   the required updates. This may be needed because $this->getContent()
+        *   may already return null when the page proper was deleted.
+        */
+       public function doDeleteUpdates( $id, Content $content = null ) {
+               // update site status
+               DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 1, - (int)$this->isCountable(), -1 ) );
+
+               // remove secondary indexes, etc
+               $updates = $this->getDeletionUpdates( $content );
+               DataUpdate::runUpdates( $updates );
+
+               // Reparse any pages transcluding this page
+               LinksUpdate::queueRecursiveJobsForTable( $this->mTitle, 'templatelinks' );
+
+               // Reparse any pages including this image
+               if ( $this->mTitle->getNamespace() == NS_FILE ) {
+                       LinksUpdate::queueRecursiveJobsForTable( $this->mTitle, 'imagelinks' );
+               }
+
+               // Clear caches
+               WikiPage::onArticleDelete( $this->mTitle );
+
+               // Reset this object and the Title object
+               $this->loadFromRow( false, self::READ_LATEST );
+
+               // Search engine
+               DeferredUpdates::addUpdate( new SearchUpdate( $id, $this->mTitle ) );
+       }
+
+       /**
+        * Roll back the most recent consecutive set of edits to a page
+        * from the same user; fails if there are no eligible edits to
+        * roll back to, e.g. user is the sole contributor. This function
+        * performs permissions checks on $user, then calls commitRollback()
+        * to do the dirty work
+        *
+        * @todo Separate the business/permission stuff out from backend code
+        *
+        * @param string $fromP Name of the user whose edits to rollback.
+        * @param string $summary Custom summary. Set to default summary if empty.
+        * @param string $token Rollback token.
+        * @param bool $bot If true, mark all reverted edits as bot.
+        *
+        * @param array $resultDetails contains result-specific array of additional values
+        *    'alreadyrolled' : 'current' (rev)
+        *    success        : 'summary' (str), 'current' (rev), 'target' (rev)
+        *
+        * @param User $user The user performing the rollback
+        * @return array Array of errors, each error formatted as
+        *   array(messagekey, param1, param2, ...).
+        * On success, the array is empty.  This array can also be passed to
+        * OutputPage::showPermissionsErrorPage().
+        */
+       public function doRollback(
+               $fromP, $summary, $token, $bot, &$resultDetails, User $user
+       ) {
+               $resultDetails = null;
+
+               // Check permissions
+               $editErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $user );
+               $rollbackErrors = $this->mTitle->getUserPermissionsErrors( 'rollback', $user );
+               $errors = array_merge( $editErrors, wfArrayDiff2( $rollbackErrors, $editErrors ) );
+
+               if ( !$user->matchEditToken( $token, array( $this->mTitle->getPrefixedText(), $fromP ) ) ) {
+                       $errors[] = array( 'sessionfailure' );
+               }
+
+               if ( $user->pingLimiter( 'rollback' ) || $user->pingLimiter() ) {
+                       $errors[] = array( 'actionthrottledtext' );
+               }
+
+               // If there were errors, bail out now
+               if ( !empty( $errors ) ) {
+                       return $errors;
+               }
+
+               return $this->commitRollback( $fromP, $summary, $bot, $resultDetails, $user );
+       }
+
+       /**
+        * Backend implementation of doRollback(), please refer there for parameter
+        * and return value documentation
+        *
+        * NOTE: This function does NOT check ANY permissions, it just commits the
+        * rollback to the DB. Therefore, you should only call this function direct-
+        * ly if you want to use custom permissions checks. If you don't, use
+        * doRollback() instead.
+        * @param string $fromP Name of the user whose edits to rollback.
+        * @param string $summary Custom summary. Set to default summary if empty.
+        * @param bool $bot If true, mark all reverted edits as bot.
+        *
+        * @param array $resultDetails Contains result-specific array of additional values
+        * @param User $guser The user performing the rollback
+        * @return array
+        */
+       public function commitRollback( $fromP, $summary, $bot, &$resultDetails, User $guser ) {
+               global $wgUseRCPatrol, $wgContLang;
+
+               $dbw = wfGetDB( DB_MASTER );
+
+               if ( wfReadOnly() ) {
+                       return array( array( 'readonlytext' ) );
+               }
+
+               // Get the last editor
+               $current = $this->getRevision();
+               if ( is_null( $current ) ) {
+                       // Something wrong... no page?
+                       return array( array( 'notanarticle' ) );
+               }
+
+               $from = str_replace( '_', ' ', $fromP );
+               // User name given should match up with the top revision.
+               // If the user was deleted then $from should be empty.
+               if ( $from != $current->getUserText() ) {
+                       $resultDetails = array( 'current' => $current );
+                       return array( array( 'alreadyrolled',
+                               htmlspecialchars( $this->mTitle->getPrefixedText() ),
+                               htmlspecialchars( $fromP ),
+                               htmlspecialchars( $current->getUserText() )
+                       ) );
+               }
+
+               // Get the last edit not by this guy...
+               // Note: these may not be public values
+               $user = intval( $current->getRawUser() );
+               $user_text = $dbw->addQuotes( $current->getRawUserText() );
+               $s = $dbw->selectRow( 'revision',
+                       array( 'rev_id', 'rev_timestamp', 'rev_deleted' ),
+                       array( 'rev_page' => $current->getPage(),
+                               "rev_user != {$user} OR rev_user_text != {$user_text}"
+                       ), __METHOD__,
+                       array( 'USE INDEX' => 'page_timestamp',
+                               'ORDER BY' => 'rev_timestamp DESC' )
+                       );
+               if ( $s === false ) {
+                       // No one else ever edited this page
+                       return array( array( 'cantrollback' ) );
+               } elseif ( $s->rev_deleted & Revision::DELETED_TEXT
+                       || $s->rev_deleted & Revision::DELETED_USER
+               ) {
+                       // Only admins can see this text
+                       return array( array( 'notvisiblerev' ) );
+               }
+
+               // Set patrolling and bot flag on the edits, which gets rollbacked.
+               // This is done before the rollback edit to have patrolling also on failure (bug 62157).
+               $set = array();
+               if ( $bot && $guser->isAllowed( 'markbotedits' ) ) {
+                       // Mark all reverted edits as bot
+                       $set['rc_bot'] = 1;
+               }
+
+               if ( $wgUseRCPatrol ) {
+                       // Mark all reverted edits as patrolled
+                       $set['rc_patrolled'] = 1;
+               }
+
+               if ( count( $set ) ) {
+                       $dbw->update( 'recentchanges', $set,
+                               array( /* WHERE */
+                                       'rc_cur_id' => $current->getPage(),
+                                       'rc_user_text' => $current->getUserText(),
+                                       'rc_timestamp > ' . $dbw->addQuotes( $s->rev_timestamp ),
+                               ), __METHOD__
+                       );
+               }
+
+               // Generate the edit summary if necessary
+               $target = Revision::newFromId( $s->rev_id );
+               if ( empty( $summary ) ) {
+                       if ( $from == '' ) { // no public user name
+                               $summary = wfMessage( 'revertpage-nouser' );
+                       } else {
+                               $summary = wfMessage( 'revertpage' );
+                       }
+               }
+
+               // Allow the custom summary to use the same args as the default message
+               $args = array(
+                       $target->getUserText(), $from, $s->rev_id,
+                       $wgContLang->timeanddate( wfTimestamp( TS_MW, $s->rev_timestamp ) ),
+                       $current->getId(), $wgContLang->timeanddate( $current->getTimestamp() )
+               );
+               if ( $summary instanceof Message ) {
+                       $summary = $summary->params( $args )->inContentLanguage()->text();
+               } else {
+                       $summary = wfMsgReplaceArgs( $summary, $args );
+               }
+
+               // Trim spaces on user supplied text
+               $summary = trim( $summary );
+
+               // Truncate for whole multibyte characters.
+               $summary = $wgContLang->truncate( $summary, 255 );
+
+               // Save
+               $flags = EDIT_UPDATE;
+
+               if ( $guser->isAllowed( 'minoredit' ) ) {
+                       $flags |= EDIT_MINOR;
+               }
+
+               if ( $bot && ( $guser->isAllowedAny( 'markbotedits', 'bot' ) ) ) {
+                       $flags |= EDIT_FORCE_BOT;
+               }
+
+               // Actually store the edit
+               $status = $this->doEditContent(
+                       $target->getContent(),
+                       $summary,
+                       $flags,
+                       $target->getId(),
+                       $guser
+               );
+
+               if ( !$status->isOK() ) {
+                       return $status->getErrorsArray();
+               }
+
+               // raise error, when the edit is an edit without a new version
+               if ( empty( $status->value['revision'] ) ) {
+                       $resultDetails = array( 'current' => $current );
+                       return array( array( 'alreadyrolled',
+                                       htmlspecialchars( $this->mTitle->getPrefixedText() ),
+                                       htmlspecialchars( $fromP ),
+                                       htmlspecialchars( $current->getUserText() )
+                       ) );
+               }
+
+               $revId = $status->value['revision']->getId();
+
+               wfRunHooks( 'ArticleRollbackComplete', array( $this, $guser, $target, $current ) );
+
+               $resultDetails = array(
+                       'summary' => $summary,
+                       'current' => $current,
+                       'target' => $target,
+                       'newid' => $revId
+               );
+
+               return array();
+       }
+
+       /**
+        * The onArticle*() functions are supposed to be a kind of hooks
+        * which should be called whenever any of the specified actions
+        * are done.
+        *
+        * This is a good place to put code to clear caches, for instance.
+        *
+        * This is called on page move and undelete, as well as edit
+        *
+        * @param Title $title
+        */
+       public static function onArticleCreate( $title ) {
+               // Update existence markers on article/talk tabs...
+               if ( $title->isTalkPage() ) {
+                       $other = $title->getSubjectPage();
+               } else {
+                       $other = $title->getTalkPage();
+               }
+
+               $other->invalidateCache();
+               $other->purgeSquid();
+
+               $title->touchLinks();
+               $title->purgeSquid();
+               $title->deleteTitleProtection();
+       }
+
+       /**
+        * Clears caches when article is deleted
+        *
+        * @param Title $title
+        */
+       public static function onArticleDelete( $title ) {
+               // Update existence markers on article/talk tabs...
+               if ( $title->isTalkPage() ) {
+                       $other = $title->getSubjectPage();
+               } else {
+                       $other = $title->getTalkPage();
+               }
+
+               $other->invalidateCache();
+               $other->purgeSquid();
+
+               $title->touchLinks();
+               $title->purgeSquid();
+
+               // File cache
+               HTMLFileCache::clearFileCache( $title );
+               InfoAction::invalidateCache( $title );
+
+               // Messages
+               if ( $title->getNamespace() == NS_MEDIAWIKI ) {
+                       MessageCache::singleton()->replace( $title->getDBkey(), false );
+               }
+
+               // Images
+               if ( $title->getNamespace() == NS_FILE ) {
+                       $update = new HTMLCacheUpdate( $title, 'imagelinks' );
+                       $update->doUpdate();
+               }
+
+               // User talk pages
+               if ( $title->getNamespace() == NS_USER_TALK ) {
+                       $user = User::newFromName( $title->getText(), false );
+                       if ( $user ) {
+                               $user->setNewtalk( false );
+                       }
+               }
+
+               // Image redirects
+               RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect( $title );
+       }
+
+       /**
+        * Purge caches on page update etc
+        *
+        * @param Title $title
+        * @todo Verify that $title is always a Title object (and never false or
+        *   null), add Title hint to parameter $title.
+        */
+       public static function onArticleEdit( $title ) {
+               // Invalidate caches of articles which include this page
+               DeferredUpdates::addHTMLCacheUpdate( $title, 'templatelinks' );
+
+               // Invalidate the caches of all pages which redirect here
+               DeferredUpdates::addHTMLCacheUpdate( $title, 'redirect' );
+
+               // Purge squid for this page only
+               $title->purgeSquid();
+
+               // Clear file cache for this page only
+               HTMLFileCache::clearFileCache( $title );
+               InfoAction::invalidateCache( $title );
+       }
+
+       /**#@-*/
+
+       /**
+        * Returns a list of categories this page is a member of.
+        * Results will include hidden categories
+        *
+        * @return TitleArray
+        */
+       public function getCategories() {
+               $id = $this->getId();
+               if ( $id == 0 ) {
+                       return TitleArray::newFromResult( new FakeResultWrapper( array() ) );
+               }
+
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select( 'categorylinks',
+                       array( 'cl_to AS page_title, ' . NS_CATEGORY . ' AS page_namespace' ),
+                       // Have to do that since DatabaseBase::fieldNamesWithAlias treats numeric indexes
+                       // as not being aliases, and NS_CATEGORY is numeric
+                       array( 'cl_from' => $id ),
+                       __METHOD__ );
+
+               return TitleArray::newFromResult( $res );
+       }
+
+       /**
+        * Returns a list of hidden categories this page is a member of.
+        * Uses the page_props and categorylinks tables.
+        *
+        * @return array Array of Title objects
+        */
+       public function getHiddenCategories() {
+               $result = array();
+               $id = $this->getId();
+
+               if ( $id == 0 ) {
+                       return array();
+               }
+
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select( array( 'categorylinks', 'page_props', 'page' ),
+                       array( 'cl_to' ),
+                       array( 'cl_from' => $id, 'pp_page=page_id', 'pp_propname' => 'hiddencat',
+                               'page_namespace' => NS_CATEGORY, 'page_title=cl_to' ),
+                       __METHOD__ );
+
+               if ( $res !== false ) {
+                       foreach ( $res as $row ) {
+                               $result[] = Title::makeTitle( NS_CATEGORY, $row->cl_to );
+                       }
+               }
+
+               return $result;
+       }
+
+       /**
+        * Return an applicable autosummary if one exists for the given edit.
+        * @param string|null $oldtext The previous text of the page.
+        * @param string|null $newtext The submitted text of the page.
+        * @param int $flags Bitmask: a bitmask of flags submitted for the edit.
+        * @return string An appropriate autosummary, or an empty string.
+        *
+        * @deprecated since 1.21, use ContentHandler::getAutosummary() instead
+        */
+       public static function getAutosummary( $oldtext, $newtext, $flags ) {
+               // NOTE: stub for backwards-compatibility. assumes the given text is
+               // wikitext. will break horribly if it isn't.
+
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+
+               $handler = ContentHandler::getForModelID( CONTENT_MODEL_WIKITEXT );
+               $oldContent = is_null( $oldtext ) ? null : $handler->unserializeContent( $oldtext );
+               $newContent = is_null( $newtext ) ? null : $handler->unserializeContent( $newtext );
+
+               return $handler->getAutosummary( $oldContent, $newContent, $flags );
+       }
+
+       /**
+        * Auto-generates a deletion reason
+        *
+        * @param bool &$hasHistory Whether the page has a history
+        * @return string|bool String containing deletion reason or empty string, or boolean false
+        *    if no revision occurred
+        */
+       public function getAutoDeleteReason( &$hasHistory ) {
+               return $this->getContentHandler()->getAutoDeleteReason( $this->getTitle(), $hasHistory );
+       }
+
+       /**
+        * Update all the appropriate counts in the category table, given that
+        * we've added the categories $added and deleted the categories $deleted.
+        *
+        * @param array $added The names of categories that were added
+        * @param array $deleted The names of categories that were deleted
+        */
+       public function updateCategoryCounts( array $added, array $deleted ) {
+               $that = $this;
+               $method = __METHOD__;
+               $dbw = wfGetDB( DB_MASTER );
+
+               // Do this at the end of the commit to reduce lock wait timeouts
+               $dbw->onTransactionPreCommitOrIdle(
+                       function() use ( $dbw, $that, $method, $added, $deleted ) {
+                               $ns = $that->getTitle()->getNamespace();
+
+                               $addFields = array( 'cat_pages = cat_pages + 1' );
+                               $removeFields = array( 'cat_pages = cat_pages - 1' );
+                               if ( $ns == NS_CATEGORY ) {
+                                       $addFields[] = 'cat_subcats = cat_subcats + 1';
+                                       $removeFields[] = 'cat_subcats = cat_subcats - 1';
+                               } elseif ( $ns == NS_FILE ) {
+                                       $addFields[] = 'cat_files = cat_files + 1';
+                                       $removeFields[] = 'cat_files = cat_files - 1';
+                               }
+
+                               if ( count( $added ) ) {
+                                       $insertRows = array();
+                                       foreach ( $added as $cat ) {
+                                               $insertRows[] = array(
+                                                       'cat_title'   => $cat,
+                                                       'cat_pages'   => 1,
+                                                       'cat_subcats' => ( $ns == NS_CATEGORY ) ? 1 : 0,
+                                                       'cat_files'   => ( $ns == NS_FILE ) ? 1 : 0,
+                                               );
+                                       }
+                                       $dbw->upsert(
+                                               'category',
+                                               $insertRows,
+                                               array( 'cat_title' ),
+                                               $addFields,
+                                               $method
+                                       );
+                               }
+
+                               if ( count( $deleted ) ) {
+                                       $dbw->update(
+                                               'category',
+                                               $removeFields,
+                                               array( 'cat_title' => $deleted ),
+                                               $method
+                                       );
+                               }
+
+                               foreach ( $added as $catName ) {
+                                       $cat = Category::newFromName( $catName );
+                                       wfRunHooks( 'CategoryAfterPageAdded', array( $cat, $that ) );
+                               }
+
+                               foreach ( $deleted as $catName ) {
+                                       $cat = Category::newFromName( $catName );
+                                       wfRunHooks( 'CategoryAfterPageRemoved', array( $cat, $that ) );
+                               }
+                       }
+               );
+       }
+
+       /**
+        * Updates cascading protections
+        *
+        * @param ParserOutput $parserOutput ParserOutput object for the current version
+        */
+       public function doCascadeProtectionUpdates( ParserOutput $parserOutput ) {
+               if ( wfReadOnly() || !$this->mTitle->areRestrictionsCascading() ) {
+                       return;
+               }
+
+               // templatelinks or imagelinks tables may have become out of sync,
+               // especially if using variable-based transclusions.
+               // For paranoia, check if things have changed and if
+               // so apply updates to the database. This will ensure
+               // that cascaded protections apply as soon as the changes
+               // are visible.
+
+               // Get templates from templatelinks and images from imagelinks
+               $id = $this->getId();
+
+               $dbLinks = array();
+
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select( array( 'templatelinks' ),
+                       array( 'tl_namespace', 'tl_title' ),
+                       array( 'tl_from' => $id ),
+                       __METHOD__
+               );
+
+               foreach ( $res as $row ) {
+                       $dbLinks["{$row->tl_namespace}:{$row->tl_title}"] = true;
+               }
+
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select( array( 'imagelinks' ),
+                       array( 'il_to' ),
+                       array( 'il_from' => $id ),
+                       __METHOD__
+               );
+
+               foreach ( $res as $row ) {
+                       $dbLinks[NS_FILE . ":{$row->il_to}"] = true;
+               }
+
+               // Get templates and images from parser output.
+               $poLinks = array();
+               foreach ( $parserOutput->getTemplates() as $ns => $templates ) {
+                       foreach ( $templates as $dbk => $id ) {
+                               $poLinks["$ns:$dbk"] = true;
+                       }
+               }
+               foreach ( $parserOutput->getImages() as $dbk => $id ) {
+                       $poLinks[NS_FILE . ":$dbk"] = true;
+               }
+
+               // Get the diff
+               $links_diff = array_diff_key( $poLinks, $dbLinks );
+
+               if ( count( $links_diff ) > 0 ) {
+                       // Whee, link updates time.
+                       // Note: we are only interested in links here. We don't need to get
+                       // other DataUpdate items from the parser output.
+                       $u = new LinksUpdate( $this->mTitle, $parserOutput, false );
+                       $u->doUpdate();
+               }
+       }
+
+       /**
+        * Return a list of templates used by this article.
+        * Uses the templatelinks table
+        *
+        * @deprecated since 1.19; use Title::getTemplateLinksFrom()
+        * @return array Array of Title objects
+        */
+       public function getUsedTemplates() {
+               return $this->mTitle->getTemplateLinksFrom();
+       }
+
+       /**
+        * This function is called right before saving the wikitext,
+        * so we can do things like signatures and links-in-context.
+        *
+        * @deprecated since 1.19; use Parser::preSaveTransform() instead
+        * @param string $text Article contents
+        * @param User $user User doing the edit
+        * @param ParserOptions $popts Parser options, default options for
+        *   the user loaded if null given
+        * @return string Article contents with altered wikitext markup (signatures
+        *      converted, {{subst:}}, templates, etc.)
+        */
+       public function preSaveTransform( $text, User $user = null, ParserOptions $popts = null ) {
+               global $wgParser, $wgUser;
+
+               wfDeprecated( __METHOD__, '1.19' );
+
+               $user = is_null( $user ) ? $wgUser : $user;
+
+               if ( $popts === null ) {
+                       $popts = ParserOptions::newFromUser( $user );
+               }
+
+               return $wgParser->preSaveTransform( $text, $this->mTitle, $user, $popts );
+       }
+
+       /**
+        * Check whether the number of revisions of this page surpasses $wgDeleteRevisionsLimit
+        *
+        * @deprecated since 1.19; use Title::isBigDeletion() instead.
+        * @return bool
+        */
+       public function isBigDeletion() {
+               wfDeprecated( __METHOD__, '1.19' );
+               return $this->mTitle->isBigDeletion();
+       }
+
+       /**
+        * Get the  approximate revision count of this page.
+        *
+        * @deprecated since 1.19; use Title::estimateRevisionCount() instead.
+        * @return int
+        */
+       public function estimateRevisionCount() {
+               wfDeprecated( __METHOD__, '1.19' );
+               return $this->mTitle->estimateRevisionCount();
+       }
+
+       /**
+        * Update the article's restriction field, and leave a log entry.
+        *
+        * @deprecated since 1.19
+        * @param array $limit Set of restriction keys
+        * @param string $reason
+        * @param int &$cascade Set to false if cascading protection isn't allowed.
+        * @param array $expiry Per restriction type expiration
+        * @param User $user The user updating the restrictions
+        * @return bool true on success
+        */
+       public function updateRestrictions(
+               $limit = array(), $reason = '', &$cascade = 0, $expiry = array(), User $user = null
+       ) {
+               global $wgUser;
+
+               $user = is_null( $user ) ? $wgUser : $user;
+
+               return $this->doUpdateRestrictions( $limit, $expiry, $cascade, $reason, $user )->isOK();
+       }
+
+       /**
+        * Returns a list of updates to be performed when this page is deleted. The
+        * updates should remove any information about this page from secondary data
+        * stores such as links tables.
+        *
+        * @param Content|null $content Optional Content object for determining the
+        *   necessary updates.
+        * @return array An array of DataUpdates objects
+        */
+       public function getDeletionUpdates( Content $content = null ) {
+               if ( !$content ) {
+                       // load content object, which may be used to determine the necessary updates
+                       // XXX: the content may not be needed to determine the updates, then this would be overhead.
+                       $content = $this->getContent( Revision::RAW );
+               }
+
+               if ( !$content ) {
+                       $updates = array();
+               } else {
+                       $updates = $content->getDeletionUpdates( $this );
+               }
+
+               wfRunHooks( 'WikiPageDeletionUpdates', array( $this, $content, &$updates ) );
+               return $updates;
+       }
+}
index 3425b6b..cde7a2d 100644 (file)
@@ -242,7 +242,12 @@ class CoreParserFunctions {
        }
 
        static function canonicalurle( $parser, $s = '', $arg = null ) {
-               return self::urlFunction( 'escapeCanonicalURL', $s, $arg );
+               $temp = self::urlFunction( 'getCanonicalURL', $s, $arg );
+               if ( !is_string( $temp ) ) {
+                       return $temp;
+               } else {
+                       return htmlspecialchars( $temp );
+               }
        }
 
        static function urlFunction( $func, $s = '', $arg = null ) {
index 236b999..eb7bd1b 100644 (file)
@@ -2820,6 +2820,9 @@ class Parser {
                $pageLang = $this->getFunctionLang();
 
                switch ( $index ) {
+                       case '!':
+                               $value = '|';
+                               break;
                        case 'currentmonth':
                                $value = $pageLang->formatNum( MWTimestamp::getInstance( $ts )->format( 'm' ) );
                                break;
@@ -5339,7 +5342,7 @@ class Parser {
                                                        } else {
                                                                $localLinkTitle = Title::newFromText( $linkValue );
                                                                if ( $localLinkTitle !== null ) {
-                                                                       $link = $localLinkTitle->getLocalURL();
+                                                                       $link = $localLinkTitle->getLinkURL();
                                                                }
                                                        }
                                                        break;
@@ -6335,4 +6338,23 @@ class Parser {
 
                return $html;
        }
+
+       /**
+        * Return this parser if it is not doing anything, otherwise
+        * get a fresh parser. You can use this method by doing
+        * $myParser = $wgParser->getFreshParser(), or more simply
+        * $wgParser->getFreshParser()->parse( ... );
+        * if you're unsure if $wgParser is safe to use.
+        *
+        * @since 1.24
+        * @return Parser A parser object that is not parsing anything
+        */
+       public function getFreshParser() {
+               global $wgParserConf;
+               if ( $this->mInParse ) {
+                       return new $wgParserConf['class']( $wgParserConf );
+               } else {
+                       return $this;
+               }
+       }
 }
diff --git a/includes/parser/ParserDiffTest.php b/includes/parser/ParserDiffTest.php
new file mode 100644 (file)
index 0000000..2db0597
--- /dev/null
@@ -0,0 +1,143 @@
+<?php
+/**
+ * Fake parser that output the difference of two different parsers
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Parser
+ */
+
+/**
+ * @ingroup Parser
+ */
+class ParserDiffTest
+{
+       var $parsers, $conf;
+       var $shortOutput = false;
+
+       var $dtUniqPrefix;
+
+       function __construct( $conf ) {
+               if ( !isset( $conf['parsers'] ) ) {
+                       throw new MWException( __METHOD__ . ': no parsers specified' );
+               }
+               $this->conf = $conf;
+       }
+
+       function init() {
+               if ( !is_null( $this->parsers ) ) {
+                       return;
+               }
+
+               global $wgHooks;
+               static $doneHook = false;
+               if ( !$doneHook ) {
+                       $doneHook = true;
+                       $wgHooks['ParserClearState'][] = array( $this, 'onClearState' );
+               }
+               if ( isset( $this->conf['shortOutput'] ) ) {
+                       $this->shortOutput = $this->conf['shortOutput'];
+               }
+
+               foreach ( $this->conf['parsers'] as $i => $parserConf ) {
+                       if ( !is_array( $parserConf ) ) {
+                               $class = $parserConf;
+                               $parserConf = array( 'class' => $parserConf );
+                       } else {
+                               $class = $parserConf['class'];
+                       }
+                       $this->parsers[$i] = new $class( $parserConf );
+               }
+       }
+
+       function __call( $name, $args ) {
+               $this->init();
+               $results = array();
+               $mismatch = false;
+               $lastResult = null;
+               $first = true;
+               foreach ( $this->parsers as $i => $parser ) {
+                       $currentResult = call_user_func_array( array( &$this->parsers[$i], $name ), $args );
+                       if ( $first ) {
+                               $first = false;
+                       } else {
+                               if ( is_object( $lastResult ) ) {
+                                       if ( $lastResult != $currentResult ) {
+                                               $mismatch = true;
+                                       }
+                               } else {
+                                       if ( $lastResult !== $currentResult ) {
+                                               $mismatch = true;
+                                       }
+                               }
+                       }
+                       $results[$i] = $currentResult;
+                       $lastResult = $currentResult;
+               }
+               if ( $mismatch ) {
+                       if ( count( $results ) == 2 ) {
+                               $resultsList = array();
+                               foreach ( $this->parsers as $i => $parser ) {
+                                       $resultsList[] = var_export( $results[$i], true );
+                               }
+                               $diff = wfDiff( $resultsList[0], $resultsList[1] );
+                       } else {
+                               $diff = '[too many parsers]';
+                       }
+                       $msg = "ParserDiffTest: results mismatch on call to $name\n";
+                       if ( !$this->shortOutput ) {
+                               $msg .= 'Arguments: ' . $this->formatArray( $args ) . "\n";
+                       }
+                       $msg .= 'Results: ' . $this->formatArray( $results ) . "\n" .
+                               "Diff: $diff\n";
+                       throw new MWException( $msg );
+               }
+               return $lastResult;
+       }
+
+       function formatArray( $array ) {
+               if ( $this->shortOutput ) {
+                       foreach ( $array as $key => $value ) {
+                               if ( $value instanceof ParserOutput ) {
+                                       $array[$key] = "ParserOutput: {$value->getText()}";
+                               }
+                       }
+               }
+               return var_export( $array, true );
+       }
+
+       function setFunctionHook( $id, $callback, $flags = 0 ) {
+               $this->init();
+               foreach ( $this->parsers as $parser ) {
+                       $parser->setFunctionHook( $id, $callback, $flags );
+               }
+       }
+
+       /**
+        * @param Parser $parser
+        * @return bool
+        */
+       function onClearState( &$parser ) {
+               // hack marker prefixes to get identical output
+               if ( !isset( $this->dtUniqPrefix ) ) {
+                       $this->dtUniqPrefix = $parser->uniqPrefix();
+               } else {
+                       $parser->mUniqPrefix = $this->dtUniqPrefix;
+               }
+               return true;
+       }
+}
diff --git a/includes/parser/Parser_DiffTest.php b/includes/parser/Parser_DiffTest.php
deleted file mode 100644 (file)
index 920b6f6..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-/**
- * Fake parser that output the difference of two different parsers
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Parser
- */
-
-/**
- * @ingroup Parser
- */
-class Parser_DiffTest
-{
-       var $parsers, $conf;
-       var $shortOutput = false;
-
-       var $dtUniqPrefix;
-
-       function __construct( $conf ) {
-               if ( !isset( $conf['parsers'] ) ) {
-                       throw new MWException( __METHOD__ . ': no parsers specified' );
-               }
-               $this->conf = $conf;
-       }
-
-       function init() {
-               if ( !is_null( $this->parsers ) ) {
-                       return;
-               }
-
-               global $wgHooks;
-               static $doneHook = false;
-               if ( !$doneHook ) {
-                       $doneHook = true;
-                       $wgHooks['ParserClearState'][] = array( $this, 'onClearState' );
-               }
-               if ( isset( $this->conf['shortOutput'] ) ) {
-                       $this->shortOutput = $this->conf['shortOutput'];
-               }
-
-               foreach ( $this->conf['parsers'] as $i => $parserConf ) {
-                       if ( !is_array( $parserConf ) ) {
-                               $class = $parserConf;
-                               $parserConf = array( 'class' => $parserConf );
-                       } else {
-                               $class = $parserConf['class'];
-                       }
-                       $this->parsers[$i] = new $class( $parserConf );
-               }
-       }
-
-       function __call( $name, $args ) {
-               $this->init();
-               $results = array();
-               $mismatch = false;
-               $lastResult = null;
-               $first = true;
-               foreach ( $this->parsers as $i => $parser ) {
-                       $currentResult = call_user_func_array( array( &$this->parsers[$i], $name ), $args );
-                       if ( $first ) {
-                               $first = false;
-                       } else {
-                               if ( is_object( $lastResult ) ) {
-                                       if ( $lastResult != $currentResult ) {
-                                               $mismatch = true;
-                                       }
-                               } else {
-                                       if ( $lastResult !== $currentResult ) {
-                                               $mismatch = true;
-                                       }
-                               }
-                       }
-                       $results[$i] = $currentResult;
-                       $lastResult = $currentResult;
-               }
-               if ( $mismatch ) {
-                       if ( count( $results ) == 2 ) {
-                               $resultsList = array();
-                               foreach ( $this->parsers as $i => $parser ) {
-                                       $resultsList[] = var_export( $results[$i], true );
-                               }
-                               $diff = wfDiff( $resultsList[0], $resultsList[1] );
-                       } else {
-                               $diff = '[too many parsers]';
-                       }
-                       $msg = "Parser_DiffTest: results mismatch on call to $name\n";
-                       if ( !$this->shortOutput ) {
-                               $msg .= 'Arguments: ' . $this->formatArray( $args ) . "\n";
-                       }
-                       $msg .= 'Results: ' . $this->formatArray( $results ) . "\n" .
-                               "Diff: $diff\n";
-                       throw new MWException( $msg );
-               }
-               return $lastResult;
-       }
-
-       function formatArray( $array ) {
-               if ( $this->shortOutput ) {
-                       foreach ( $array as $key => $value ) {
-                               if ( $value instanceof ParserOutput ) {
-                                       $array[$key] = "ParserOutput: {$value->getText()}";
-                               }
-                       }
-               }
-               return var_export( $array, true );
-       }
-
-       function setFunctionHook( $id, $callback, $flags = 0 ) {
-               $this->init();
-               foreach ( $this->parsers as $parser ) {
-                       $parser->setFunctionHook( $id, $callback, $flags );
-               }
-       }
-
-       /**
-        * @param Parser $parser
-        * @return bool
-        */
-       function onClearState( &$parser ) {
-               // hack marker prefixes to get identical output
-               if ( !isset( $this->dtUniqPrefix ) ) {
-                       $this->dtUniqPrefix = $parser->uniqPrefix();
-               } else {
-                       $parser->mUniqPrefix = $this->dtUniqPrefix;
-               }
-               return true;
-       }
-}
diff --git a/includes/poolcounter/PoolWorkArticleView.php b/includes/poolcounter/PoolWorkArticleView.php
new file mode 100644 (file)
index 0000000..4cdb0ff
--- /dev/null
@@ -0,0 +1,208 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+class PoolWorkArticleView extends PoolCounterWork {
+       /** @var Page */
+       private $page;
+
+       /** @var string */
+       private $cacheKey;
+
+       /** @var int */
+       private $revid;
+
+       /** @var ParserOptions */
+       private $parserOptions;
+
+       /** @var Content|null */
+       private $content = null;
+
+       /** @var ParserOutput|bool */
+       private $parserOutput = false;
+
+       /** @var bool */
+       private $isDirty = false;
+
+       /** @var Status|bool */
+       private $error = false;
+
+       /**
+        * @param Page $page
+        * @param int $revid ID of the revision being parsed.
+        * @param bool $useParserCache Whether to use the parser cache.
+        * @param ParserOptions $parserOptions ParserOptions to use for the parse
+        *   operation.
+        * @param Content|string $content Content to parse or null to load it; may
+        *   also be given as a wikitext string, for BC.
+        */
+       public function __construct( Page $page, ParserOptions $parserOptions,
+               $revid, $useParserCache, $content = null
+       ) {
+               if ( is_string( $content ) ) { // BC: old style call
+                       $modelId = $page->getRevision()->getContentModel();
+                       $format = $page->getRevision()->getContentFormat();
+                       $content = ContentHandler::makeContent( $content, $page->getTitle(), $modelId, $format );
+               }
+
+               $this->page = $page;
+               $this->revid = $revid;
+               $this->cacheable = $useParserCache;
+               $this->parserOptions = $parserOptions;
+               $this->content = $content;
+               $this->cacheKey = ParserCache::singleton()->getKey( $page, $parserOptions );
+               parent::__construct( 'ArticleView', $this->cacheKey . ':revid:' . $revid );
+       }
+
+       /**
+        * Get the ParserOutput from this object, or false in case of failure
+        *
+        * @return ParserOutput
+        */
+       public function getParserOutput() {
+               return $this->parserOutput;
+       }
+
+       /**
+        * Get whether the ParserOutput is a dirty one (i.e. expired)
+        *
+        * @return bool
+        */
+       public function getIsDirty() {
+               return $this->isDirty;
+       }
+
+       /**
+        * Get a Status object in case of error or false otherwise
+        *
+        * @return Status|bool
+        */
+       public function getError() {
+               return $this->error;
+       }
+
+       /**
+        * @return bool
+        */
+       public function doWork() {
+               global $wgUseFileCache;
+
+               // @todo several of the methods called on $this->page are not declared in Page, but present
+               //        in WikiPage and delegated by Article.
+
+               $isCurrent = $this->revid === $this->page->getLatest();
+
+               if ( $this->content !== null ) {
+                       $content = $this->content;
+               } elseif ( $isCurrent ) {
+                       // XXX: why use RAW audience here, and PUBLIC (default) below?
+                       $content = $this->page->getContent( Revision::RAW );
+               } else {
+                       $rev = Revision::newFromTitle( $this->page->getTitle(), $this->revid );
+
+                       if ( $rev === null ) {
+                               $content = null;
+                       } else {
+                               // XXX: why use PUBLIC audience here (default), and RAW above?
+                               $content = $rev->getContent();
+                       }
+               }
+
+               if ( $content === null ) {
+                       return false;
+               }
+
+               // Reduce effects of race conditions for slow parses (bug 46014)
+               $cacheTime = wfTimestampNow();
+
+               $time = - microtime( true );
+               $this->parserOutput = $content->getParserOutput(
+                       $this->page->getTitle(),
+                       $this->revid,
+                       $this->parserOptions
+               );
+               $time += microtime( true );
+
+               // Timing hack
+               if ( $time > 3 ) {
+                       wfDebugLog( 'slow-parse', sprintf( "%-5.2f %s", $time,
+                               $this->page->getTitle()->getPrefixedDBkey() ) );
+               }
+
+               if ( $this->cacheable && $this->parserOutput->isCacheable() && $isCurrent ) {
+                       ParserCache::singleton()->save(
+                               $this->parserOutput, $this->page, $this->parserOptions, $cacheTime, $this->revid );
+               }
+
+               // Make sure file cache is not used on uncacheable content.
+               // Output that has magic words in it can still use the parser cache
+               // (if enabled), though it will generally expire sooner.
+               if ( !$this->parserOutput->isCacheable() || $this->parserOutput->containsOldMagic() ) {
+                       $wgUseFileCache = false;
+               }
+
+               if ( $isCurrent ) {
+                       $this->page->doCascadeProtectionUpdates( $this->parserOutput );
+               }
+
+               return true;
+       }
+
+       /**
+        * @return bool
+        */
+       public function getCachedWork() {
+               $this->parserOutput = ParserCache::singleton()->get( $this->page, $this->parserOptions );
+
+               if ( $this->parserOutput === false ) {
+                       wfDebug( __METHOD__ . ": parser cache miss\n" );
+                       return false;
+               } else {
+                       wfDebug( __METHOD__ . ": parser cache hit\n" );
+                       return true;
+               }
+       }
+
+       /**
+        * @return bool
+        */
+       public function fallback() {
+               $this->parserOutput = ParserCache::singleton()->getDirty( $this->page, $this->parserOptions );
+
+               if ( $this->parserOutput === false ) {
+                       wfDebugLog( 'dirty', 'dirty missing' );
+                       wfDebug( __METHOD__ . ": no dirty cache\n" );
+                       return false;
+               } else {
+                       wfDebug( __METHOD__ . ": sending dirty output\n" );
+                       wfDebugLog( 'dirty', "dirty output {$this->cacheKey}" );
+                       $this->isDirty = true;
+                       return true;
+               }
+       }
+
+       /**
+        * @param Status $status
+        * @return bool
+        */
+       public function error( $status ) {
+               $this->error = $status;
+               return false;
+       }
+}
index 9633d0d..75f6966 100644 (file)
@@ -370,17 +370,17 @@ class TransactionProfiler {
         *
         * @param string $server DB server
         * @param string $db DB name
-        * @param string $id Resource ID string of connection
+        * @param string $id ID string of transaction
         */
        public function transactionWritingIn( $server, $db, $id ) {
-               $name = "{$server} ({$db}) ($id)";
+               $name = "{$server} ({$db}) (TRX#$id)";
                if ( isset( $this->mDBTrxHoldingLocks[$name] ) ) {
-                       ++$this->mDBTrxHoldingLocks[$name]['refs'];
-               } else {
-                       $this->mDBTrxHoldingLocks[$name] = array(
-                               'refs' => 1, 'start' => microtime( true ), 'conns' => array() );
-                       $this->mDBTrxMethodTimes[$name] = array();
+                       wfDebugLog( 'DBPerformance', "Nested transaction for '$name' - out of sync." );
                }
+               $this->mDBTrxHoldingLocks[$name] =
+                       array( '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
                }
@@ -421,30 +421,32 @@ class TransactionProfiler {
         *
         * @param string $server DB server
         * @param string $db DB name
-        * @param string $id Resource ID string of connection
+        * @param string $id ID string of transaction
         */
        public function transactionWritingOut( $server, $db, $id ) {
-               $name = "{$server} ({$db}) ($id)";
-               if ( --$this->mDBTrxHoldingLocks[$name]['refs'] <= 0 ) {
-                       $slow = false;
-                       foreach ( $this->mDBTrxMethodTimes[$name] as $info ) {
-                               $realtime = $info[1];
-                               if ( $realtime >= $this->mDBLockThreshold ) {
-                                       $slow = true;
-                                       break;
-                               }
+               $name = "{$server} ({$db}) (TRX#$id)";
+               if ( !isset( $this->mDBTrxMethodTimes[$name] ) ) {
+                       wfDebugLog( 'DBPerformance', "Detected no transaction for '$name' - out of sync." );
+                       return;
+               }
+               $slow = false;
+               foreach ( $this->mDBTrxMethodTimes[$name] as $info ) {
+                       $realtime = $info[1];
+                       if ( $realtime >= $this->mDBLockThreshold ) {
+                               $slow = true;
+                               break;
                        }
-                       if ( $slow ) {
-                               $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 );
-                               }
-                               wfDebugLog( 'DBPerformance', $msg );
+               }
+               if ( $slow ) {
+                       $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 );
                        }
-                       unset( $this->mDBTrxHoldingLocks[$name] );
-                       unset( $this->mDBTrxMethodTimes[$name] );
+                       wfDebugLog( 'DBPerformance', $msg );
                }
+               unset( $this->mDBTrxHoldingLocks[$name] );
+               unset( $this->mDBTrxMethodTimes[$name] );
        }
 }
index 7b82b7b..55c46c5 100644 (file)
@@ -55,8 +55,8 @@ class RevisionDeleteUser {
                $delUser = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
                $delAction = LogPage::DELETED_ACTION | Revision::DELETED_RESTRICTED;
                if ( $op == '&' ) {
-                       $delUser = "~{$delUser}";
-                       $delAction = "~{$delAction}";
+                       $delUser = $dbw->bitNot( $delUser );
+                       $delAction = $dbw->bitNot( $delAction );
                }
 
                # Normalize user name
@@ -66,14 +66,14 @@ class RevisionDeleteUser {
                # Hide name from live edits
                $dbw->update(
                        'revision',
-                       array( "rev_deleted = rev_deleted $op $delUser" ),
+                       array( self::buildSetBitDeletedField( 'rev_deleted', $op, $delUser, $dbw ) ),
                        array( 'rev_user' => $userId ),
                        __METHOD__ );
 
                # Hide name from deleted edits
                $dbw->update(
                        'archive',
-                       array( "ar_deleted = ar_deleted $op $delUser" ),
+                       array( self::buildSetBitDeletedField( 'ar_deleted', $op, $delUser, $dbw ) ),
                        array( 'ar_user_text' => $name ),
                        __METHOD__
                );
@@ -81,28 +81,28 @@ class RevisionDeleteUser {
                # Hide name from logs
                $dbw->update(
                        'logging',
-                       array( "log_deleted = log_deleted $op $delUser" ),
-                       array( 'log_user' => $userId, "log_type != 'suppress'" ),
+                       array( self::buildSetBitDeletedField( 'log_deleted', $op, $delUser, $dbw ) ),
+                       array( 'log_user' => $userId, 'log_type != ' . $dbw->addQuotes( 'suppress' ) ),
                        __METHOD__
                );
                $dbw->update(
                        'logging',
-                       array( "log_deleted = log_deleted $op $delAction" ),
+                       array( self::buildSetBitDeletedField( 'log_deleted', $op, $delAction, $dbw ) ),
                        array( 'log_namespace' => NS_USER, 'log_title' => $userDbKey,
-                               "log_type != 'suppress'" ),
+                               'log_type != ' . $dbw->addQuotes( 'suppress' ) ),
                        __METHOD__
                );
 
                # Hide name from RC
                $dbw->update(
                        'recentchanges',
-                       array( "rc_deleted = rc_deleted $op $delUser" ),
+                       array( self::buildSetBitDeletedField( 'rc_deleted', $op, $delUser, $dbw ) ),
                        array( 'rc_user_text' => $name ),
                        __METHOD__
                );
                $dbw->update(
                        'recentchanges',
-                       array( "rc_deleted = rc_deleted $op $delAction" ),
+                       array( self::buildSetBitDeletedField( 'rc_deleted', $op, $delAction, $dbw ) ),
                        array( 'rc_namespace' => NS_USER, 'rc_title' => $userDbKey, 'rc_logid > 0' ),
                        __METHOD__
                );
@@ -110,7 +110,7 @@ class RevisionDeleteUser {
                # Hide name from live images
                $dbw->update(
                        'oldimage',
-                       array( "oi_deleted = oi_deleted $op $delUser" ),
+                       array( self::buildSetBitDeletedField( 'oi_deleted', $op, $delUser, $dbw ) ),
                        array( 'oi_user_text' => $name ),
                        __METHOD__
                );
@@ -118,7 +118,7 @@ class RevisionDeleteUser {
                # Hide name from deleted images
                $dbw->update(
                        'filearchive',
-                       array( "fa_deleted = fa_deleted $op $delUser" ),
+                       array( self::buildSetBitDeletedField( 'fa_deleted', $op, $delUser, $dbw ) ),
                        array( 'fa_user_text' => $name ),
                        __METHOD__
                );
@@ -126,6 +126,12 @@ class RevisionDeleteUser {
                return true;
        }
 
+       private static function buildSetBitDeletedField( $field, $op, $value, $dbw ) {
+               return $field . ' = ' . ( $op === '&'
+                       ? $dbw->bitAnd( $field, $value )
+                       : $dbw->bitOr( $field, $value ) );
+       }
+
        public static function suppressUserName( $name, $userId, $dbw = null ) {
                return self::setUsernameBitfields( $name, $userId, '|', $dbw );
        }
index e3aafe8..82d0907 100644 (file)
@@ -43,4 +43,15 @@ class SearchDatabase extends SearchEngine {
                        $this->db = wfGetDB( DB_SLAVE );
                }
        }
+
+       /**
+        * Return a 'cleaned up' search string
+        *
+        * @param string $text
+        * @return string
+        */
+       protected function filter( $text ) {
+               $lc = $this->legalSearchChars();
+               return trim( preg_replace( "/[^{$lc}]/", " ", $text ) );
+       }
 }
index 3a3baef..56bb0ac 100644 (file)
@@ -318,7 +318,6 @@ class SearchEngine {
 
                $parsed = $query;
                if ( strpos( $query, ':' ) === false ) { // nothing to do
-                       wfRunHooks( 'SearchEngineReplacePrefixesComplete', array( $this, $query, &$parsed ) );
                        return $parsed;
                }
 
@@ -338,8 +337,6 @@ class SearchEngine {
                        $parsed = $query; // prefix was the whole query
                }
 
-               wfRunHooks( 'SearchEngineReplacePrefixesComplete', array( $this, $query, &$parsed ) );
-
                return $parsed;
        }
 
@@ -419,17 +416,6 @@ class SearchEngine {
                return $formatted;
        }
 
-       /**
-        * Return a 'cleaned up' search string
-        *
-        * @param string $text
-        * @return string
-        */
-       function filter( $text ) {
-               $lc = $this->legalSearchChars();
-               return trim( preg_replace( "/[^{$lc}]/", " ", $text ) );
-       }
-
        /**
         * Load up the appropriate search engine class for the currently
         * active database backend, and return a configured instance.
index 6020396..1d8f57a 100644 (file)
@@ -106,7 +106,7 @@ abstract class FormSpecialPage extends SpecialPage {
                $this->alterForm( $form );
 
                // Give hooks a chance to alter the form, adding extra fields or text etc
-               wfRunHooks( "Special{$this->getName()}BeforeFormDisplay", array( &$form ) );
+               wfRunHooks( 'SpecialPageBeforeFormDisplay', array( $this->getName(), &$form ) );
 
                return $form;
        }
diff --git a/includes/specialpage/ImageQueryPage.php b/includes/specialpage/ImageQueryPage.php
new file mode 100644 (file)
index 0000000..b0266cb
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Variant of QueryPage which uses a gallery to output results.
+ *
+ * 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
+ */
+
+/**
+ * Variant of QueryPage which uses a gallery to output results, thus
+ * suited for reports generating images
+ *
+ * @ingroup SpecialPage
+ * @author Rob Church <robchur@gmail.com>
+ */
+abstract class ImageQueryPage extends QueryPage {
+       /**
+        * Format and output report results using the given information plus
+        * OutputPage
+        *
+        * @param OutputPage $out OutputPage to print to
+        * @param Skin $skin User skin to use [unused]
+        * @param DatabaseBase $dbr (read) connection to use
+        * @param int $res Result pointer
+        * @param int $num Number of available result rows
+        * @param int $offset Paging offset
+        */
+       protected function outputResults( $out, $skin, $dbr, $res, $num, $offset ) {
+               if ( $num > 0 ) {
+                       $gallery = ImageGalleryBase::factory();
+                       $gallery->setContext( $this->getContext() );
+
+                       # $res might contain the whole 1,000 rows, so we read up to
+                       # $num [should update this to use a Pager]
+                       $i = 0;
+                       foreach ( $res as $row ) {
+                               $i++;
+                               $namespace = isset( $row->namespace ) ? $row->namespace : NS_FILE;
+                               $title = Title::makeTitleSafe( $namespace, $row->title );
+                               if ( $title instanceof Title && $title->getNamespace() == NS_FILE ) {
+                                       $gallery->add( $title, $this->getCellHtml( $row ) );
+                               }
+                               if ( $i === $num ) {
+                                       break;
+                               }
+                       }
+
+                       $out->addHTML( $gallery->toHtml() );
+               }
+       }
+
+       // Gotta override this since it's abstract
+       function formatResult( $skin, $result ) {
+       }
+
+       /**
+        * Get additional HTML to be shown in a results' cell
+        *
+        * @param object $row Result row
+        * @return string
+        */
+       protected function getCellHtml( $row ) {
+               return '';
+       }
+}
diff --git a/includes/specialpage/PageQueryPage.php b/includes/specialpage/PageQueryPage.php
new file mode 100644 (file)
index 0000000..afc0227
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Variant of QueryPage which formats the result as a simple link to the page.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Variant of QueryPage which formats the result as a simple link to the page
+ *
+ * @ingroup SpecialPage
+ */
+abstract class PageQueryPage extends QueryPage {
+       /**
+        * Run a LinkBatch to pre-cache LinkCache information,
+        * like page existence and information for stub color and redirect hints.
+        * This should be done for live data and cached data.
+        *
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
+        */
+       public function preprocessResults( $db, $res ) {
+               if ( !$res->numRows() ) {
+                       return;
+               }
+
+               $batch = new LinkBatch();
+               foreach ( $res as $row ) {
+                       $batch->add( $row->namespace, $row->title );
+               }
+               $batch->execute();
+
+               $res->seek( 0 );
+       }
+
+       /**
+        * Format the result as a simple link to the page
+        *
+        * @param Skin $skin
+        * @param object $row Result row
+        * @return string
+        */
+       public function formatResult( $skin, $row ) {
+               global $wgContLang;
+
+               $title = Title::makeTitleSafe( $row->namespace, $row->title );
+
+               if ( $title instanceof Title ) {
+                       $text = $wgContLang->convert( $title->getPrefixedText() );
+                       return Linker::link( $title, htmlspecialchars( $text ) );
+               } else {
+                       return Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
+                               Linker::getInvalidTitleDescription( $this->getContext(), $row->namespace, $row->title ) );
+               }
+       }
+}
diff --git a/includes/specialpage/QueryPage.php b/includes/specialpage/QueryPage.php
new file mode 100644 (file)
index 0000000..3a83d2b
--- /dev/null
@@ -0,0 +1,761 @@
+<?php
+/**
+ * Base code for "query" special pages.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * This is a class for doing query pages; since they're almost all the same,
+ * we factor out some of the functionality into a superclass, and let
+ * subclasses derive from it.
+ * @ingroup SpecialPage
+ */
+abstract class QueryPage extends SpecialPage {
+       /** @var bool Whether or not we want plain listoutput rather than an ordered list */
+       protected $listoutput = false;
+
+       /** @var int The offset and limit in use, as passed to the query() function */
+       protected $offset = 0;
+
+       /** @var int */
+       protected $limit = 0;
+
+       /**
+        * The number of rows returned by the query. Reading this variable
+        * only makes sense in functions that are run after the query has been
+        * done, such as preprocessResults() and formatRow().
+        */
+       protected $numRows;
+
+       protected $cachedTimestamp = null;
+
+       /**
+        * Whether to show prev/next links
+        */
+       protected $shownavigation = true;
+
+       /**
+        * Get a list of query page classes and their associated special pages,
+        * for periodic updates.
+        *
+        * DO NOT CHANGE THIS LIST without testing that
+        * maintenance/updateSpecialPages.php still works.
+        * @return array
+        */
+       public static function getPages() {
+               global $wgDisableCounters;
+               static $qp = null;
+
+               if ( $qp === null ) {
+                       // QueryPage subclass, Special page name
+                       $qp = array(
+                               array( 'AncientPagesPage', 'Ancientpages' ),
+                               array( 'BrokenRedirectsPage', 'BrokenRedirects' ),
+                               array( 'DeadendPagesPage', 'Deadendpages' ),
+                               array( 'DoubleRedirectsPage', 'DoubleRedirects' ),
+                               array( 'FileDuplicateSearchPage', 'FileDuplicateSearch' ),
+                               array( 'ListDuplicatedFilesPage', 'ListDuplicatedFiles'),
+                               array( 'LinkSearchPage', 'LinkSearch' ),
+                               array( 'ListredirectsPage', 'Listredirects' ),
+                               array( 'LonelyPagesPage', 'Lonelypages' ),
+                               array( 'LongPagesPage', 'Longpages' ),
+                               array( 'MIMEsearchPage', 'MIMEsearch' ),
+                               array( 'MostcategoriesPage', 'Mostcategories' ),
+                               array( 'MostimagesPage', 'Mostimages' ),
+                               array( 'MostinterwikisPage', 'Mostinterwikis' ),
+                               array( 'MostlinkedCategoriesPage', 'Mostlinkedcategories' ),
+                               array( 'MostlinkedtemplatesPage', 'Mostlinkedtemplates' ),
+                               array( 'MostlinkedPage', 'Mostlinked' ),
+                               array( 'MostrevisionsPage', 'Mostrevisions' ),
+                               array( 'FewestrevisionsPage', 'Fewestrevisions' ),
+                               array( 'ShortPagesPage', 'Shortpages' ),
+                               array( 'UncategorizedCategoriesPage', 'Uncategorizedcategories' ),
+                               array( 'UncategorizedPagesPage', 'Uncategorizedpages' ),
+                               array( 'UncategorizedImagesPage', 'Uncategorizedimages' ),
+                               array( 'UncategorizedTemplatesPage', 'Uncategorizedtemplates' ),
+                               array( 'UnusedCategoriesPage', 'Unusedcategories' ),
+                               array( 'UnusedimagesPage', 'Unusedimages' ),
+                               array( 'WantedCategoriesPage', 'Wantedcategories' ),
+                               array( 'WantedFilesPage', 'Wantedfiles' ),
+                               array( 'WantedPagesPage', 'Wantedpages' ),
+                               array( 'WantedTemplatesPage', 'Wantedtemplates' ),
+                               array( 'UnwatchedPagesPage', 'Unwatchedpages' ),
+                               array( 'UnusedtemplatesPage', 'Unusedtemplates' ),
+                               array( 'WithoutInterwikiPage', 'Withoutinterwiki' ),
+                       );
+                       wfRunHooks( 'wgQueryPages', array( &$qp ) );
+
+                       if ( !$wgDisableCounters ) {
+                               $qp[] = array( 'PopularPagesPage', 'Popularpages' );
+                       }
+               }
+
+               return $qp;
+       }
+
+       /**
+        * A mutator for $this->listoutput;
+        *
+        * @param bool $bool
+        */
+       function setListoutput( $bool ) {
+               $this->listoutput = $bool;
+       }
+
+       /**
+        * Subclasses return an SQL query here, formatted as an array with the
+        * following keys:
+        *    tables => Table(s) for passing to Database::select()
+        *    fields => Field(s) for passing to Database::select(), may be *
+        *    conds => WHERE conditions
+        *    options => options
+        *    join_conds => JOIN conditions
+        *
+        * Note that the query itself should return the following three columns:
+        * 'namespace', 'title', and 'value'. 'value' is used for sorting.
+        *
+        * These may be stored in the querycache table for expensive queries,
+        * and that cached data will be returned sometimes, so the presence of
+        * extra fields can't be relied upon. The cached 'value' column will be
+        * an integer; non-numeric values are useful only for sorting the
+        * initial query (except if they're timestamps, see usesTimestamps()).
+        *
+        * Don't include an ORDER or LIMIT clause, they will be added.
+        *
+        * If this function is not overridden or returns something other than
+        * an array, getSQL() will be used instead. This is for backwards
+        * compatibility only and is strongly deprecated.
+        * @return array
+        * @since 1.18
+        */
+       function getQueryInfo() {
+               return null;
+       }
+
+       /**
+        * For back-compat, subclasses may return a raw SQL query here, as a string.
+        * This is strongly deprecated; getQueryInfo() should be overridden instead.
+        * @throws MWException
+        * @return string
+        */
+       function getSQL() {
+               /* Implement getQueryInfo() instead */
+               throw new MWException( "Bug in a QueryPage: doesn't implement getQueryInfo() nor "
+                       . "getQuery() properly" );
+       }
+
+       /**
+        * Subclasses return an array of fields to order by here. Don't append
+        * DESC to the field names, that'll be done automatically if
+        * sortDescending() returns true.
+        * @return array
+        * @since 1.18
+        */
+       function getOrderFields() {
+               return array( 'value' );
+       }
+
+       /**
+        * Does this query return timestamps rather than integers in its
+        * 'value' field? If true, this class will convert 'value' to a
+        * UNIX timestamp for caching.
+        * NOTE: formatRow() may get timestamps in TS_MW (mysql), TS_DB (pgsql)
+        *       or TS_UNIX (querycache) format, so be sure to always run them
+        *       through wfTimestamp()
+        * @return bool
+        * @since 1.18
+        */
+       function usesTimestamps() {
+               return false;
+       }
+
+       /**
+        * Override to sort by increasing values
+        *
+        * @return bool
+        */
+       function sortDescending() {
+               return true;
+       }
+
+       /**
+        * Is this query expensive (for some definition of expensive)? Then we
+        * don't let it run in miser mode. $wgDisableQueryPages causes all query
+        * pages to be declared expensive. Some query pages are always expensive.
+        *
+        * @return bool
+        */
+       function isExpensive() {
+               global $wgDisableQueryPages;
+               return $wgDisableQueryPages;
+       }
+
+       /**
+        * Is the output of this query cacheable? Non-cacheable expensive pages
+        * will be disabled in miser mode and will not have their results written
+        * to the querycache table.
+        * @return bool
+        * @since 1.18
+        */
+       public function isCacheable() {
+               return true;
+       }
+
+       /**
+        * Whether or not the output of the page in question is retrieved from
+        * the database cache.
+        *
+        * @return bool
+        */
+       function isCached() {
+               global $wgMiserMode;
+
+               return $this->isExpensive() && $wgMiserMode;
+       }
+
+       /**
+        * Sometime we don't want to build rss / atom feeds.
+        *
+        * @return bool
+        */
+       function isSyndicated() {
+               return true;
+       }
+
+       /**
+        * Formats the results of the query for display. The skin is the current
+        * skin; you can use it for making links. The result is a single row of
+        * result data. You should be able to grab SQL results off of it.
+        * If the function returns false, the line output will be skipped.
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string|bool String or false to skip
+        */
+       abstract function formatResult( $skin, $result );
+
+       /**
+        * The content returned by this function will be output before any result
+        *
+        * @return string
+        */
+       function getPageHeader() {
+               return '';
+       }
+
+       /**
+        * If using extra form wheely-dealies, return a set of parameters here
+        * as an associative array. They will be encoded and added to the paging
+        * links (prev/next/lengths).
+        *
+        * @return array
+        */
+       function linkParameters() {
+               return array();
+       }
+
+       /**
+        * Some special pages (for example SpecialListusers) might not return the
+        * current object formatted, but return the previous one instead.
+        * Setting this to return true will ensure formatResult() is called
+        * one more time to make sure that the very last result is formatted
+        * as well.
+        * @return bool
+        */
+       function tryLastResult() {
+               return false;
+       }
+
+       /**
+        * Clear the cache and save new results
+        *
+        * @param int|bool $limit Limit for SQL statement
+        * @param bool $ignoreErrors Whether to ignore database errors
+        * @throws DBError|Exception
+        * @return bool|int
+        */
+       function recache( $limit, $ignoreErrors = true ) {
+               if ( !$this->isCacheable() ) {
+                       return 0;
+               }
+
+               $fname = get_class( $this ) . '::recache';
+               $dbw = wfGetDB( DB_MASTER );
+               if ( !$dbw ) {
+                       return false;
+               }
+
+               try {
+                       # Do query
+                       $res = $this->reallyDoQuery( $limit, false );
+                       $num = false;
+                       if ( $res ) {
+                               $num = $res->numRows();
+                               # Fetch results
+                               $vals = array();
+                               foreach ( $res as $row ) {
+                                       if ( isset( $row->value ) ) {
+                                               if ( $this->usesTimestamps() ) {
+                                                       $value = wfTimestamp( TS_UNIX,
+                                                               $row->value );
+                                               } else {
+                                                       $value = intval( $row->value ); // @bug 14414
+                                               }
+                                       } else {
+                                               $value = 0;
+                                       }
+
+                                       $vals[] = array( 'qc_type' => $this->getName(),
+                                                       'qc_namespace' => $row->namespace,
+                                                       'qc_title' => $row->title,
+                                                       'qc_value' => $value );
+                               }
+
+                               $dbw->begin( __METHOD__ );
+                               # Clear out any old cached data
+                               $dbw->delete( 'querycache', array( 'qc_type' => $this->getName() ), $fname );
+                               # Save results into the querycache table on the master
+                               if ( count( $vals ) ) {
+                                       $dbw->insert( 'querycache', $vals, __METHOD__ );
+                               }
+                               # Update the querycache_info record for the page
+                               $dbw->delete( 'querycache_info', array( 'qci_type' => $this->getName() ), $fname );
+                               $dbw->insert( 'querycache_info',
+                                       array( 'qci_type' => $this->getName(), 'qci_timestamp' => $dbw->timestamp() ),
+                                       $fname );
+                               $dbw->commit( __METHOD__ );
+                       }
+               } catch ( DBError $e ) {
+                       if ( !$ignoreErrors ) {
+                               throw $e; // report query error
+                       }
+                       $num = false; // set result to false to indicate error
+               }
+
+               return $num;
+       }
+
+       /**
+        * Get a DB connection to be used for slow recache queries
+        * @return DatabaseBase
+        */
+       function getRecacheDB() {
+               return wfGetDB( DB_SLAVE, array( $this->getName(), 'QueryPage::recache', 'vslow' ) );
+       }
+
+       /**
+        * Run the query and return the result
+        * @param int|bool $limit Numerical limit or false for no limit
+        * @param int|bool $offset Numerical offset or false for no offset
+        * @return ResultWrapper
+        * @since 1.18
+        */
+       function reallyDoQuery( $limit, $offset = false ) {
+               $fname = get_class( $this ) . "::reallyDoQuery";
+               $dbr = $this->getRecacheDB();
+               $query = $this->getQueryInfo();
+               $order = $this->getOrderFields();
+
+               if ( $this->sortDescending() ) {
+                       foreach ( $order as &$field ) {
+                               $field .= ' DESC';
+                       }
+               }
+
+               if ( is_array( $query ) ) {
+                       $tables = isset( $query['tables'] ) ? (array)$query['tables'] : array();
+                       $fields = isset( $query['fields'] ) ? (array)$query['fields'] : array();
+                       $conds = isset( $query['conds'] ) ? (array)$query['conds'] : array();
+                       $options = isset( $query['options'] ) ? (array)$query['options'] : array();
+                       $join_conds = isset( $query['join_conds'] ) ? (array)$query['join_conds'] : array();
+
+                       if ( count( $order ) ) {
+                               $options['ORDER BY'] = $order;
+                       }
+
+                       if ( $limit !== false ) {
+                               $options['LIMIT'] = intval( $limit );
+                       }
+
+                       if ( $offset !== false ) {
+                               $options['OFFSET'] = intval( $offset );
+                       }
+
+                       $res = $dbr->select( $tables, $fields, $conds, $fname,
+                                       $options, $join_conds
+                       );
+               } else {
+                       // Old-fashioned raw SQL style, deprecated
+                       $sql = $this->getSQL();
+                       $sql .= ' ORDER BY ' . implode( ', ', $order );
+                       $sql = $dbr->limitResult( $sql, $limit, $offset );
+                       $res = $dbr->query( $sql, $fname );
+               }
+
+               return $dbr->resultObject( $res );
+       }
+
+       /**
+        * Somewhat deprecated, you probably want to be using execute()
+        * @param int|bool $offset
+        * @param int|bool $limit
+        * @return ResultWrapper
+        */
+       function doQuery( $offset = false, $limit = false ) {
+               if ( $this->isCached() && $this->isCacheable() ) {
+                       return $this->fetchFromCache( $limit, $offset );
+               } else {
+                       return $this->reallyDoQuery( $limit, $offset );
+               }
+       }
+
+       /**
+        * Fetch the query results from the query cache
+        * @param int|bool $limit Numerical limit or false for no limit
+        * @param int|bool $offset Numerical offset or false for no offset
+        * @return ResultWrapper
+        * @since 1.18
+        */
+       function fetchFromCache( $limit, $offset = false ) {
+               $dbr = wfGetDB( DB_SLAVE );
+               $options = array();
+               if ( $limit !== false ) {
+                       $options['LIMIT'] = intval( $limit );
+               }
+               if ( $offset !== false ) {
+                       $options['OFFSET'] = intval( $offset );
+               }
+               if ( $this->sortDescending() ) {
+                       $options['ORDER BY'] = 'qc_value DESC';
+               } else {
+                       $options['ORDER BY'] = 'qc_value ASC';
+               }
+               $res = $dbr->select( 'querycache', array( 'qc_type',
+                               'namespace' => 'qc_namespace',
+                               'title' => 'qc_title',
+                               'value' => 'qc_value' ),
+                               array( 'qc_type' => $this->getName() ),
+                               __METHOD__, $options
+               );
+               return $dbr->resultObject( $res );
+       }
+
+       public function getCachedTimestamp() {
+               if ( is_null( $this->cachedTimestamp ) ) {
+                       $dbr = wfGetDB( DB_SLAVE );
+                       $fname = get_class( $this ) . '::getCachedTimestamp';
+                       $this->cachedTimestamp = $dbr->selectField( 'querycache_info', 'qci_timestamp',
+                               array( 'qci_type' => $this->getName() ), $fname );
+               }
+               return $this->cachedTimestamp;
+       }
+
+       /**
+        * This is the actual workhorse. It does everything needed to make a
+        * real, honest-to-gosh query page.
+        * @param string $par
+        * @return int
+        */
+       function execute( $par ) {
+               global $wgQueryCacheLimit, $wgDisableQueryPageUpdate;
+
+               $user = $this->getUser();
+               if ( !$this->userCanExecute( $user ) ) {
+                       $this->displayRestrictionError();
+                       return;
+               }
+
+               $this->setHeaders();
+               $this->outputHeader();
+
+               $out = $this->getOutput();
+
+               if ( $this->isCached() && !$this->isCacheable() ) {
+                       $out->addWikiMsg( 'querypage-disabled' );
+                       return 0;
+               }
+
+               $out->setSyndicated( $this->isSyndicated() );
+
+               if ( $this->limit == 0 && $this->offset == 0 ) {
+                       list( $this->limit, $this->offset ) = $this->getRequest()->getLimitOffset();
+               }
+
+               // @todo Use doQuery()
+               if ( !$this->isCached() ) {
+                       # select one extra row for navigation
+                       $res = $this->reallyDoQuery( $this->limit + 1, $this->offset );
+               } else {
+                       # Get the cached result, select one extra row for navigation
+                       $res = $this->fetchFromCache( $this->limit + 1, $this->offset );
+                       if ( !$this->listoutput ) {
+
+                               # Fetch the timestamp of this update
+                               $ts = $this->getCachedTimestamp();
+                               $lang = $this->getLanguage();
+                               $maxResults = $lang->formatNum( $wgQueryCacheLimit );
+
+                               if ( $ts ) {
+                                       $updated = $lang->userTimeAndDate( $ts, $user );
+                                       $updateddate = $lang->userDate( $ts, $user );
+                                       $updatedtime = $lang->userTime( $ts, $user );
+                                       $out->addMeta( 'Data-Cache-Time', $ts );
+                                       $out->addJsConfigVars( 'dataCacheTime', $ts );
+                                       $out->addWikiMsg( 'perfcachedts', $updated, $updateddate, $updatedtime, $maxResults );
+                               } else {
+                                       $out->addWikiMsg( 'perfcached', $maxResults );
+                               }
+
+                               # If updates on this page have been disabled, let the user know
+                               # that the data set won't be refreshed for now
+                               if ( is_array( $wgDisableQueryPageUpdate )
+                                       && in_array( $this->getName(), $wgDisableQueryPageUpdate )
+                               ) {
+                                       $out->wrapWikiMsg(
+                                               "<div class=\"mw-querypage-no-updates\">\n$1\n</div>",
+                                               'querypage-no-updates'
+                                       );
+                               }
+                       }
+               }
+
+               $this->numRows = $res->numRows();
+
+               $dbr = wfGetDB( DB_SLAVE );
+               $this->preprocessResults( $dbr, $res );
+
+               $out->addHTML( Xml::openElement( 'div', array( 'class' => 'mw-spcontent' ) ) );
+
+               # Top header and navigation
+               if ( $this->shownavigation ) {
+                       $out->addHTML( $this->getPageHeader() );
+                       if ( $this->numRows > 0 ) {
+                               $out->addHTML( $this->msg( 'showingresultsinrange' )->numParams(
+                                       min( $this->numRows, $this->limit ), # do not show the one extra row, if exist
+                                       $this->offset + 1, ( min( $this->numRows, $this->limit ) + $this->offset ) )->parseAsBlock() );
+                               # Disable the "next" link when we reach the end
+                               $paging = $this->getLanguage()->viewPrevNext( $this->getPageTitle( $par ), $this->offset,
+                                       $this->limit, $this->linkParameters(), ( $this->numRows <= $this->limit ) );
+                               $out->addHTML( '<p>' . $paging . '</p>' );
+                       } else {
+                               # No results to show, so don't bother with "showing X of Y" etc.
+                               # -- just let the user know and give up now
+                               $out->addWikiMsg( 'specialpage-empty' );
+                               $out->addHTML( Xml::closeElement( 'div' ) );
+                               return;
+                       }
+               }
+
+               # The actual results; specialist subclasses will want to handle this
+               # with more than a straight list, so we hand them the info, plus
+               # an OutputPage, and let them get on with it
+               $this->outputResults( $out,
+                       $this->getSkin(),
+                       $dbr, # Should use a ResultWrapper for this
+                       $res,
+                       min( $this->numRows, $this->limit ), # do not format the one extra row, if exist
+                       $this->offset );
+
+               # Repeat the paging links at the bottom
+               if ( $this->shownavigation ) {
+                       $out->addHTML( '<p>' . $paging . '</p>' );
+               }
+
+               $out->addHTML( Xml::closeElement( 'div' ) );
+
+               return min( $this->numRows, $this->limit ); # do not return the one extra row, if exist
+       }
+
+       /**
+        * Format and output report results using the given information plus
+        * OutputPage
+        *
+        * @param OutputPage $out OutputPage to print to
+        * @param Skin $skin User skin to use
+        * @param DatabaseBase $dbr Database (read) connection to use
+        * @param ResultWrapper $res Result pointer
+        * @param int $num Number of available result rows
+        * @param int $offset Paging offset
+        */
+       protected function outputResults( $out, $skin, $dbr, $res, $num, $offset ) {
+               global $wgContLang;
+
+               if ( $num > 0 ) {
+                       $html = array();
+                       if ( !$this->listoutput ) {
+                               $html[] = $this->openList( $offset );
+                       }
+
+                       # $res might contain the whole 1,000 rows, so we read up to
+                       # $num [should update this to use a Pager]
+                       // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+                       for ( $i = 0; $i < $num && $row = $res->fetchObject(); $i++ ) {
+                               // @codingStandardsIgnoreEnd
+                               $line = $this->formatResult( $skin, $row );
+                               if ( $line ) {
+                                       $attr = ( isset( $row->usepatrol ) && $row->usepatrol && $row->patrolled == 0 )
+                                               ? ' class="not-patrolled"'
+                                               : '';
+                                       $html[] = $this->listoutput
+                                               ? $line
+                                               : "<li{$attr}>{$line}</li>\n";
+                               }
+                       }
+
+                       # Flush the final result
+                       if ( $this->tryLastResult() ) {
+                               $row = null;
+                               $line = $this->formatResult( $skin, $row );
+                               if ( $line ) {
+                                       $attr = ( isset( $row->usepatrol ) && $row->usepatrol && $row->patrolled == 0 )
+                                               ? ' class="not-patrolled"'
+                                               : '';
+                                       $html[] = $this->listoutput
+                                               ? $line
+                                               : "<li{$attr}>{$line}</li>\n";
+                               }
+                       }
+
+                       if ( !$this->listoutput ) {
+                               $html[] = $this->closeList();
+                       }
+
+                       $html = $this->listoutput
+                               ? $wgContLang->listToText( $html )
+                               : implode( '', $html );
+
+                       $out->addHTML( $html );
+               }
+       }
+
+       /**
+        * @param int $offset
+        * @return string
+        */
+       function openList( $offset ) {
+               return "\n<ol start='" . ( $offset + 1 ) . "' class='special'>\n";
+       }
+
+       /**
+        * @return string
+        */
+       function closeList() {
+               return "</ol>\n";
+       }
+
+       /**
+        * Do any necessary preprocessing of the result object.
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
+        */
+       function preprocessResults( $db, $res ) {
+       }
+
+       /**
+        * Similar to above, but packaging in a syndicated feed instead of a web page
+        * @param string $class
+        * @param int $limit
+        * @return bool
+        */
+       function doFeed( $class = '', $limit = 50 ) {
+               global $wgFeed, $wgFeedClasses, $wgFeedLimit;
+
+               if ( !$wgFeed ) {
+                       $this->getOutput()->addWikiMsg( 'feed-unavailable' );
+                       return false;
+               }
+
+               $limit = min( $limit, $wgFeedLimit );
+
+               if ( isset( $wgFeedClasses[$class] ) ) {
+                       /** @var RSSFeed|AtomFeed $feed */
+                       $feed = new $wgFeedClasses[$class](
+                               $this->feedTitle(),
+                               $this->feedDesc(),
+                               $this->feedUrl() );
+                       $feed->outHeader();
+
+                       $res = $this->reallyDoQuery( $limit, 0 );
+                       foreach ( $res as $obj ) {
+                               $item = $this->feedResult( $obj );
+                               if ( $item ) {
+                                       $feed->outItem( $item );
+                               }
+                       }
+
+                       $feed->outFooter();
+                       return true;
+               } else {
+                       return false;
+               }
+       }
+
+       /**
+        * Override for custom handling. If the titles/links are ok, just do
+        * feedItemDesc()
+        * @param object $row
+        * @return FeedItem|null
+        */
+       function feedResult( $row ) {
+               if ( !isset( $row->title ) ) {
+                       return null;
+               }
+               $title = Title::makeTitle( intval( $row->namespace ), $row->title );
+               if ( $title ) {
+                       $date = isset( $row->timestamp ) ? $row->timestamp : '';
+                       $comments = '';
+                       if ( $title ) {
+                               $talkpage = $title->getTalkPage();
+                               $comments = $talkpage->getFullURL();
+                       }
+
+                       return new FeedItem(
+                               $title->getPrefixedText(),
+                               $this->feedItemDesc( $row ),
+                               $title->getFullURL(),
+                               $date,
+                               $this->feedItemAuthor( $row ),
+                               $comments );
+               } else {
+                       return null;
+               }
+       }
+
+       function feedItemDesc( $row ) {
+               return isset( $row->comment ) ? htmlspecialchars( $row->comment ) : '';
+       }
+
+       function feedItemAuthor( $row ) {
+               return isset( $row->user_text ) ? $row->user_text : '';
+       }
+
+       function feedTitle() {
+               global $wgLanguageCode, $wgSitename;
+               $desc = $this->getDescription();
+               return "$wgSitename - $desc [$wgLanguageCode]";
+       }
+
+       function feedDesc() {
+               return $this->msg( 'tagline' )->text();
+       }
+
+       function feedUrl() {
+               return $this->getPageTitle()->getFullURL();
+       }
+}
index 3bdbc3c..cd41a1c 100644 (file)
@@ -153,10 +153,6 @@ abstract class SpecialRedirectToSpecial extends RedirectSpecialPage {
  * preference, useful for preloaded edits where you know preview wouldn't be
  * useful.
  *
- * - internaledit, externaledit, mode: Allows forcing the use of the
- * internal/external editor, e.g. to force the internal editor for
- * short/simple preloaded edits.
- *
  * - redlink: Affects the message the user sees if their talk page/user talk
  * page does not currently exist. Avoids confusion for newbies with no user
  * pages over why they got a "permission error" following this link:
@@ -194,7 +190,7 @@ abstract class RedirectSpecialArticle extends RedirectSpecialPage {
                        # Options for preloaded edits
                        'preload', 'editintro', 'preloadtitle', 'summary', 'nosummary',
                        # Options for overriding user settings
-                       'preview', 'internaledit', 'externaledit', 'mode', 'minor', 'watchthis',
+                       'preview', 'minor', 'watchthis',
                        # Options for history/diffs
                        'section', 'oldid', 'diff', 'dir',
                        'limit', 'offset', 'feed',
index ec8635c..f968276 100644 (file)
@@ -131,19 +131,6 @@ class SpecialPage {
                return $this->mRestriction;
        }
 
-       /**
-        * Get the file which will be included by SpecialPage::execute() if your extension is
-        * still stuck in the past and hasn't overridden the execute() method.  No modern code
-        * should want or need to know this.
-        * @return string
-        * @deprecated since 1.18
-        */
-       function getFile() {
-               wfDeprecated( __METHOD__, '1.18' );
-
-               return $this->mFile;
-       }
-
        // @todo FIXME: Decide which syntax to use for this, and stick to it
        /**
         * Whether this special page is listed in Special:SpecialPages
@@ -348,6 +335,21 @@ class SpecialPage {
                return array();
        }
 
+       /**
+        * Helper function for implementations of prefixSearchSubpages() that
+        * filter the values in memory (as oppposed to making a query).
+        *
+        * @since 1.24
+        * @param string $search
+        * @param int $limit
+        * @param array $subpages
+        * @return string[]
+        */
+       protected static function prefixSearchArray( $search, $limit, array $subpages ) {
+               $escaped = preg_quote( $search, '/' );
+               return array_slice( preg_grep( "/^$escaped/i", $subpages ), 0, $limit );
+       }
+
        /**
         * Sets headers - this should be called from the execute() method of all derived classes!
         */
index 58ca959..9ff96ab 100644 (file)
@@ -183,6 +183,7 @@ class SpecialPageFactory {
                global $wgSpecialPages;
                global $wgDisableCounters, $wgDisableInternalSearch, $wgEmailAuthentication;
                global $wgEnableEmail, $wgEnableJavaScriptTest;
+               global $wgPageLanguageUseDB;
 
                if ( !is_object( self::$list ) ) {
                        wfProfileIn( __METHOD__ );
@@ -208,6 +209,10 @@ class SpecialPageFactory {
                                self::$list['JavaScriptTest'] = 'SpecialJavaScriptTest';
                        }
 
+                       if ( $wgPageLanguageUseDB ) {
+                               self::$list['PageLanguage'] = 'SpecialPageLanguage';
+                       }
+
                        self::$list['Activeusers'] = 'SpecialActiveUsers';
 
                        // Add extension special pages
@@ -347,10 +352,10 @@ class SpecialPageFactory {
 
                                return new $className;
                        } elseif ( is_array( $rec ) ) {
+                               $className = array_shift( $rec );
                                // @deprecated, officially since 1.18, unofficially since forever
-                               wfDeprecated( "Array syntax for \$wgSpecialPages is deprecated, " .
+                               wfDeprecated( "Array syntax for \$wgSpecialPages is deprecated ($className), " .
                                        "define a subclass of SpecialPage instead.", '1.18' );
-                               $className = array_shift( $rec );
                                self::getList()->$realName = MWFunction::newObj( $className, $rec );
                        }
 
diff --git a/includes/specialpage/WantedQueryPage.php b/includes/specialpage/WantedQueryPage.php
new file mode 100644 (file)
index 0000000..678c803
--- /dev/null
@@ -0,0 +1,117 @@
+<?php
+/**
+ * Class definition for a wanted query page.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Class definition for a wanted query page like
+ * WantedPages, WantedTemplates, etc
+ * @ingroup SpecialPage
+ */
+abstract class WantedQueryPage extends QueryPage {
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
+
+       /**
+        * Cache page existence for performance
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
+        */
+       function preprocessResults( $db, $res ) {
+               if ( !$res->numRows() ) {
+                       return;
+               }
+
+               $batch = new LinkBatch;
+               foreach ( $res as $row ) {
+                       $batch->add( $row->namespace, $row->title );
+               }
+               $batch->execute();
+
+               // Back to start for display
+               $res->seek( 0 );
+       }
+
+       /**
+        * Should formatResult() always check page existence, even if
+        * the results are fresh?  This is a (hopefully temporary)
+        * kluge for Special:WantedFiles, which may contain false
+        * positives for files that exist e.g. in a shared repo (bug
+        * 6220).
+        * @return bool
+        */
+       function forceExistenceCheck() {
+               return false;
+       }
+
+       /**
+        * Format an individual result
+        *
+        * @param Skin $skin Skin to use for UI elements
+        * @param object $result Result row
+        * @return string
+        */
+       public function formatResult( $skin, $result ) {
+               $title = Title::makeTitleSafe( $result->namespace, $result->title );
+               if ( $title instanceof Title ) {
+                       if ( $this->isCached() || $this->forceExistenceCheck() ) {
+                               $pageLink = $title->isKnown()
+                                       ? '<del>' . Linker::link( $title ) . '</del>'
+                                       : Linker::link(
+                                               $title,
+                                               null,
+                                               array(),
+                                               array(),
+                                               array( 'broken' )
+                                       );
+                       } else {
+                               $pageLink = Linker::link(
+                                       $title,
+                                       null,
+                                       array(),
+                                       array(),
+                                       array( 'broken' )
+                               );
+                       }
+                       return $this->getLanguage()->specialList( $pageLink, $this->makeWlhLink( $title, $result ) );
+               } else {
+                       return $this->msg( 'wantedpages-badtitle', $result->title )->escaped();
+               }
+       }
+
+       /**
+        * Make a "what links here" link for a given title
+        *
+        * @param Title $title Title to make the link for
+        * @param object $result Result row
+        * @return string
+        */
+       private function makeWlhLink( $title, $result ) {
+               $wlh = SpecialPage::getTitleFor( 'Whatlinkshere', $title->getPrefixedText() );
+               $label = $this->msg( 'nlinks' )->numParams( $result->value )->escaped();
+               return Linker::link( $wlh, $label );
+       }
+}
index d44b94e..1e4e18b 100644 (file)
@@ -51,15 +51,13 @@ class SpecialAllMessages extends SpecialPage {
 
                $this->setHeaders();
 
-               global $wgUseDatabaseMessages;
-               if ( !$wgUseDatabaseMessages ) {
+               if ( !$this->getConfig()->get( 'UseDatabaseMessages' ) ) {
                        $out->addWikiMsg( 'allmessagesnotsupportedDB' );
 
                        return;
-               } else {
-                       $this->outputHeader( 'allmessagestext' );
                }
 
+               $this->outputHeader( 'allmessagestext' );
                $out->addModuleStyles( 'mediawiki.special' );
 
                $this->table = new AllmessagesTablePager(
@@ -148,15 +146,13 @@ class AllMessagesTablePager extends TablePager {
        }
 
        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,
+                               'action' => $this->getConfig()->get( 'Script' ),
                                'id' => 'mw-allmessages-form'
                        ) ) .
                        Xml::fieldset( $this->msg( 'allmessages-filter-legend' )->text() ) .
index 17e080f..e4b606d 100644 (file)
@@ -98,11 +98,10 @@ class SpecialAllPages extends IncludableSpecialPage {
         * @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 .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $this->getConfig()->get( 'Script' ) ) );
                $out .= Html::hidden( 'title', $t->getPrefixedText() );
                $out .= Xml::openElement( 'fieldset' );
                $out .= Xml::element( 'legend', null, $this->msg( 'allpages' )->text() );
index 7481b0c..a1e8d2b 100644 (file)
@@ -270,7 +270,12 @@ class SpecialContributions extends IncludableSpecialPage {
                        // Show a note if the user is blocked and display the last block log entry.
                        // Do not expose the autoblocks, since that may lead to a leak of accounts' IPs,
                        // and also this will display a totally irrelevant log entry as a current block.
-                       if ( $userObj->isBlocked() && $userObj->getBlock()->getType() != Block::TYPE_AUTO ) {
+                       $block = Block::newFromTarget( $userObj, $userObj );
+                       if ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) {
+                               if ( $block->getType() == Block::TYPE_RANGE ) {
+                                       $nt = MWNamespace::getCanonicalName( NS_USER ) . ':' . $block->getTarget();
+                               }
+
                                $out = $this->getOutput(); // showLogExtract() wants first parameter by reference
                                LogEventsList::showLogExtract(
                                        $out,
index 448637e..f3af312 100644 (file)
@@ -42,6 +42,14 @@ class SpecialCreateAccount extends SpecialRedirectToSpecial {
                return true;
        }
 
+       public function isRestricted() {
+               return true;
+       }
+
+       public function userCanExecute( User $user ) {
+               return $user->isAllowed( 'createaccount' );
+       }
+
        protected function getGroupName() {
                return 'login';
        }
index 5bec95b..4df5b2b 100644 (file)
@@ -472,7 +472,12 @@ class DeletedContributionsPage extends SpecialPage {
                        $links = $this->getLanguage()->pipeList( $tools );
 
                        // Show a note if the user is blocked and display the last block log entry.
-                       if ( $userObj->isBlocked() ) {
+                       $block = Block::newFromTarget( $userObj, $userObj );
+                       if ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) {
+                               if ( $block->getType() == Block::TYPE_RANGE ) {
+                                       $nt = MWNamespace::getCanonicalName( NS_USER ) . ':' . $block->getTarget();
+                               }
+
                                // LogEventsList::showLogExtract() wants the first parameter by ref
                                $out = $this->getOutput();
                                LogEventsList::showLogExtract(
@@ -485,7 +490,7 @@ class DeletedContributionsPage extends SpecialPage {
                                                'showIfEmpty' => false,
                                                'msgKey' => array(
                                                        'sp-contributions-blocked-notice',
-                                                       $nt->getText() # Support GENDER in 'sp-contributions-blocked-notice'
+                                                       $userObj->getName() # Support GENDER in 'sp-contributions-blocked-notice'
                                                ),
                                                'offset' => '' # don't use $this->getRequest() parameter offset
                                        )
index 02d8d70..369f11f 100644 (file)
@@ -125,11 +125,16 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
         * @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 );
+               return self::prefixSearchArray(
+                       $search,
+                       $limit,
+                       // SpecialWatchlist uses SpecialEditWatchlist::getMode, so new types should be added
+                       // here and there - no 'edit' here, because that the default for this page
+                       array(
+                               'clear',
+                               'raw',
+                       )
+               );
        }
 
        /**
index f89f03c..35a3ba1 100644 (file)
@@ -118,13 +118,13 @@ class SpecialExpandTemplates extends SpecialPage {
 
                        $out->addHTML( $tmp );
 
-                       $rawhtml = $this->generateHtml( $title, $output );
-
+                       $pout = $this->generateHtml( $title, $output );
+                       $rawhtml = $pout->getText();
                        if ( $this->generateRawHtml && strlen( $rawhtml ) > 0 ) {
                                $out->addHTML( $this->makeOutput( $rawhtml, 'expand_templates_html_output' ) );
                        }
 
-                       $this->showHtmlPreview( $title, $rawhtml, $out );
+                       $this->showHtmlPreview( $title, $pout, $out );
                }
        }
 
@@ -222,26 +222,24 @@ class SpecialExpandTemplates extends SpecialPage {
         *
         * @param Title $title
         * @param string $text
-        * @return string
+        * @return ParserOutput
         */
        private function generateHtml( Title $title, $text ) {
                global $wgParser;
 
                $popts = ParserOptions::newFromContext( $this->getContext() );
                $popts->setTargetLanguage( $title->getPageLanguage() );
-               $pout = $wgParser->parse( $text, $title, $popts );
-
-               return $pout->getText();
+               return $wgParser->parse( $text, $title, $popts );
        }
 
        /**
         * Wraps the provided html code in a div and outputs it to the page
         *
         * @param Title $title
-        * @param string $html
+        * @param ParserOutput $pout
         * @param OutputPage $out
         */
-       private function showHtmlPreview( Title $title, $html, OutputPage $out ) {
+       private function showHtmlPreview( Title $title, ParserOutput $pout, OutputPage $out ) {
                $lang = $title->getPageViewLanguage();
                $out->addHTML( "<h2>" . $this->msg( 'expand_templates_preview' )->escaped() . "</h2>\n" );
                $out->addHTML( Html::openElement( 'div', array(
@@ -249,7 +247,7 @@ class SpecialExpandTemplates extends SpecialPage {
                        'dir' => $lang->getDir(),
                        'lang' => $lang->getHtmlCode(),
                ) ) );
-               $out->addHTML( $html );
+               $out->addParserOutputContent( $pout );
                $out->addHTML( Html::closeElement( 'div' ) );
        }
 
index 1c4f79f..03b3688 100644 (file)
@@ -173,6 +173,21 @@ HTML;
                );
        }
 
+       /**
+        * 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 ) {
+               return self::prefixSearchArray(
+                       $search,
+                       $limit,
+                       array_keys( self::$frameworks )
+               );
+       }
+
        protected function getGroupName() {
                return 'other';
        }
index aaa55a3..ced5d25 100644 (file)
@@ -127,8 +127,7 @@ class SpecialLog extends SpecialPage {
                $subpages = $wgLogTypes;
                $subpages[] = 'all';
                sort( $subpages );
-               $escaped = preg_quote( $search );
-               return array_slice( preg_grep( "/^$escaped/i", $subpages ), 0, $limit );
+               return self::prefixSearchArray( $search, $limit, $subpages );
        }
 
        private function parseParams( FormOptions $opts, $par ) {
index cb9dac9..4d9e7da 100644 (file)
@@ -85,8 +85,8 @@ class MIMEsearchPage extends QueryPage {
                                        MEDIATYPE_TEXT,
                                        MEDIATYPE_EXECUTABLE,
                                        MEDIATYPE_ARCHIVE,
-                               ) + $minorType,
-                       ),
+                               ),
+                       ) + $minorType,
                );
 
                return $qi;
diff --git a/includes/specials/SpecialPageLanguage.php b/includes/specials/SpecialPageLanguage.php
new file mode 100644 (file)
index 0000000..a432f10
--- /dev/null
@@ -0,0 +1,181 @@
+<?php
+/**
+ * Implements Special:PageLanguage
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ * @author Kunal Grover
+ * @since 1.24
+ */
+
+/**
+ * Special page for changing the content language of a page
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialPageLanguage extends FormSpecialPage {
+       /**
+        * @var $goToUrl URL to go to if language change successful
+        */
+       private $goToUrl;
+
+       public function __construct() {
+               parent::__construct( 'PageLanguage', 'pagelang' );
+       }
+
+       protected function preText() {
+               $this->getOutput()->addModules( 'mediawiki.special.pageLanguage' );
+       }
+
+       protected function getFormFields() {
+               global $wgLanguageCode;
+               // Get default from the subpage of Special page
+               $defaultName = $this->par;
+
+               $page = array();
+               $page['pagename'] = array(
+                       'type' => 'text',
+                       'label-message' => 'pagelang-name',
+                       'default' => $defaultName,
+               );
+
+               // Options for whether to use the default language or select language
+               $selectoptions = array(
+                       (string)$this->msg( 'pagelang-use-default' )->escaped() => 1,
+                       (string)$this->msg( 'pagelang-select-lang' )->escaped() => 2,
+               );
+               $page['selectoptions'] = array(
+                       'id' => 'mw-pl-options',
+                       'type' => 'radio',
+                       'options' => $selectoptions,
+                       'default' => 1
+               );
+
+               // Building a language selector
+               $userLang = $this->getLanguage()->getCode();
+               $languages = Language::fetchLanguageNames( $userLang, 'mwfile' );
+               ksort( $languages );
+               $options = array();
+               foreach ( $languages as $code => $name ) {
+                       $options["$code - $name"] = $code;
+               }
+
+               $page['language'] = array(
+                       'id' => 'mw-pl-languageselector',
+                       'type' => 'select',
+                       'options' => $options,
+                       'label-message' => 'pagelang-language',
+                       'default' => $wgLanguageCode
+               );
+
+               return $page;
+       }
+
+       public function alterForm( HTMLForm $form ) {
+               $form->setDisplayFormat( 'vform' );
+               $form->setWrapperLegend( false );
+       }
+
+       /**
+        *
+        * @param array $data
+        */
+       public function onSubmit( array $data ) {
+               $title = Title::newFromText( $data['pagename'] );
+
+               // Check if title is valid
+               if ( !$title ) {
+                       return false;
+               }
+
+               // Get the default language for the wiki
+               // Returns the default since the page is not loaded from DB
+               $defLang = $title->getPageLanguage()->getCode();
+
+               $pageId =  $title->getArticleID();
+
+               // Check if article exists
+               if ( !$pageId ) {
+                       return false;
+               }
+
+               // Load the page language from DB
+               $dbw = wfGetDB( DB_MASTER );
+               $langOld = $dbw->selectField(
+                       'page',
+                       'page_lang',
+                       array( 'page_id' => $pageId ),
+                       __METHOD__
+               );
+
+               // Url to redirect to after the operation
+               $this->goToUrl = $title->getFullURL();
+
+               // Check if user wants to use default language
+               if ( $data['selectoptions'] == 1 ) {
+                       $langNew = null;
+               } else {
+                       $langNew = $data['language'];
+               }
+
+               // No change in language
+               if ( $langNew === $langOld ) {
+                       return false;
+               }
+
+               // Hardcoded [def] if the language is set to null
+               $logOld = $langOld ? $langOld : $defLang . '[def]';
+               $logNew = $langNew ? $langNew : $defLang . '[def]';
+
+               // Writing new page language to database
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->update(
+                       'page',
+                       array( 'page_lang' => $langNew ),
+                       array(
+                               'page_id' => $pageId,
+                               'page_lang' => $langOld
+                       ),
+                       __METHOD__
+               );
+
+               if ( !$dbw->affectedRows() ) {
+                       return false;
+               }
+
+               // Logging change of language
+               $logParams = array(
+                       '4::oldlanguage' => $logOld,
+                       '5::newlanguage' => $logNew
+               );
+               $entry = new ManualLogEntry( 'pagelang', 'pagelang' );
+               $entry->setPerformer( $this->getUser() );
+               $entry->setTarget( $title );
+               $entry->setParameters( $logParams );
+
+               $logid = $entry->insert();
+               $entry->publish( $logid );
+
+               return true;
+       }
+
+       public function onSuccess() {
+               // Success causes a redirect
+               $this->getOutput()->redirect( $this->goToUrl );
+       }
+}
index 2a1bf11..2e67e2b 100644 (file)
@@ -101,10 +101,8 @@ class SpecialPrefixindex extends SpecialAllPages {
         * @return string
         */
        protected function namespacePrefixForm( $namespace = NS_MAIN, $from = '' ) {
-               global $wgScript;
-
                $out = Xml::openElement( 'div', array( 'class' => 'namespaceoptions' ) );
-               $out .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
+               $out .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $this->getConfig()->get( 'Script' ) ) );
                $out .= Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
                $out .= Xml::openElement( 'fieldset' );
                $out .= Xml::element( 'legend', null, $this->msg( 'allpages' )->text() );
index 54e9987..13591aa 100644 (file)
@@ -308,51 +308,37 @@ class SpecialSearch extends SpecialPage {
                                )
                        )
                );
+
+               // Get number of results
+               $titleMatchesNum = $textMatchesNum = $numTitleMatches = $numTextMatches = 0;
+               if ( $titleMatches ) {
+                       $titleMatchesNum = $titleMatches->numRows();
+                       $numTitleMatches = $titleMatches->getTotalHits();
+               }
+               if ( $textMatches ) {
+                       $textMatchesNum = $textMatches->numRows();
+                       $numTextMatches = $textMatches->getTotalHits();
+               }
+               $num = $titleMatchesNum + $textMatchesNum;
+               $totalRes = $numTitleMatches + $numTextMatches;
+
                $out->addHtml(
                        # This is an awful awful ID name. It's not a table, but we
                        # named it poorly from when this was a table so now we're
                        # stuck with it
                        Xml::openElement( 'div', array( 'id' => 'mw-search-top-table' ) ) .
-                       $this->shortDialog( $term ) .
-                       Xml::closeElement( 'div' )
+                       $this->shortDialog( $term, $num, $totalRes ) .
+                       Xml::closeElement( 'div' ) .
+                       $this->formHeader( $term ) .
+                       Xml::closeElement( 'form' )
                );
 
                $filePrefix = $wgContLang->getFormattedNsText( NS_FILE ) . ':';
                if ( trim( $term ) === '' || $filePrefix === trim( $term ) ) {
-                       $out->addHTML( $this->formHeader( $term, 0, 0 ) );
-                       $out->addHtml( $this->getProfileForm( $this->profile, $term ) );
-                       $out->addHTML( '</form>' );
-
                        // Empty query -- straight view of search form
                        return;
                }
 
-               // Get number of results
-               $titleMatchesNum = $titleMatches ? $titleMatches->numRows() : 0;
-               $textMatchesNum = $textMatches ? $textMatches->numRows() : 0;
-               // Total initial query matches (possible false positives)
-               $num = $titleMatchesNum + $textMatchesNum;
-
-               // Get total actual results (after second filtering, if any)
-               $numTitleMatches = $titleMatches && !is_null( $titleMatches->getTotalHits() ) ?
-                       $titleMatches->getTotalHits() : $titleMatchesNum;
-               $numTextMatches = $textMatches && !is_null( $textMatches->getTotalHits() ) ?
-                       $textMatches->getTotalHits() : $textMatchesNum;
-
-               // get total number of results if backend can calculate it
-               $totalRes = 0;
-               if ( $titleMatches && !is_null( $titleMatches->getTotalHits() ) ) {
-                       $totalRes += $titleMatches->getTotalHits();
-               }
-               if ( $textMatches && !is_null( $textMatches->getTotalHits() ) ) {
-                       $totalRes += $textMatches->getTotalHits();
-               }
-
-               // show number of results and current offset
-               $out->addHTML( $this->formHeader( $term, $num, $totalRes ) );
-               $out->addHtml( $this->getProfileForm( $this->profile, $term ) );
-
-               $out->addHtml( Xml::closeElement( 'form' ) );
                $out->addHtml( "<div class='searchresults'>" );
 
                // prev/next links
@@ -440,7 +426,7 @@ class SpecialSearch extends SpecialPage {
 
                if ( $title->isKnown() ) {
                        $messageName = 'searchmenu-exists';
-               } elseif ( $title->userCan( 'create', $this->getUser() ) ) {
+               } elseif ( $title->quickUserCan( 'create', $this->getUser() ) ) {
                        $messageName = 'searchmenu-new';
                } else {
                        $messageName = 'searchmenu-new-nocreate';
@@ -886,26 +872,6 @@ class SpecialSearch extends SpecialPage {
                return $out;
        }
 
-       /**
-        * @param string $profile
-        * @param string $term
-        * @return string
-        */
-       protected function getProfileForm( $profile, $term ) {
-               // Hidden stuff
-               $opts = array();
-               $opts['profile'] = $this->profile;
-
-               if ( $profile === 'advanced' ) {
-                       return $this->powerSearchBox( $term, $opts );
-               } else {
-                       $form = '';
-                       wfRunHooks( 'SpecialSearchProfileForm', array( $this, &$form, $profile, $term, $opts ) );
-
-                       return $form;
-               }
-       }
-
        /**
         * Generates the power search box at [[Special:Search]]
         *
@@ -1052,11 +1018,9 @@ class SpecialSearch extends SpecialPage {
 
        /**
         * @param string $term
-        * @param int $resultsShown
-        * @param int $totalNum
         * @return string
         */
-       protected function formHeader( $term, $resultsShown, $totalNum ) {
+       protected function formHeader( $term ) {
                $out = Xml::openElement( 'div', array( 'class' => 'mw-search-formheader' ) );
 
                $bareterm = $term;
@@ -1095,32 +1059,21 @@ class SpecialSearch extends SpecialPage {
                }
                $out .= Xml::closeElement( 'ul' );
                $out .= Xml::closeElement( 'div' );
-
-               // Results-info
-               if ( $resultsShown > 0 ) {
-                       if ( $totalNum > 0 ) {
-                               $top = $this->msg( 'showingresultsheader' )
-                                       ->numParams( $this->offset + 1, $this->offset + $resultsShown, $totalNum )
-                                       ->params( wfEscapeWikiText( $term ) )
-                                       ->numParams( $resultsShown )
-                                       ->parse();
-                       } elseif ( $resultsShown >= $this->limit ) {
-                               $top = $this->msg( 'showingresults' )
-                                       ->numParams( $this->limit, $this->offset + 1 )
-                                       ->parse();
-                       } else {
-                               $top = $this->msg( 'showingresultsnum' )
-                                       ->numParams( $this->limit, $this->offset + 1, $resultsShown )
-                                       ->parse();
-                       }
-                       $out .= Xml::tags( 'div', array( 'class' => 'results-info' ),
-                               Xml::tags( 'ul', null, Xml::tags( 'li', null, $top ) )
-                       );
-               }
-
                $out .= Xml::element( 'div', array( 'style' => 'clear:both' ), '', false );
                $out .= Xml::closeElement( 'div' );
 
+               // Hidden stuff
+               $opts = array();
+               $opts['profile'] = $this->profile;
+
+               if ( $this->profile === 'advanced' ) {
+                       $out .= $this->powerSearchBox( $term, $opts );
+               } else {
+                       $form = '';
+                       wfRunHooks( 'SpecialSearchProfileForm', array( $this, &$form, $this->profile, $term, $opts ) );
+                       $out .= $form;
+               }
+
                return $out;
        }
 
@@ -1128,7 +1081,7 @@ class SpecialSearch extends SpecialPage {
         * @param string $term
         * @return string
         */
-       protected function shortDialog( $term ) {
+       protected function shortDialog( $term, $resultsShown, $totalNum ) {
                $out = Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
                $out .= Html::hidden( 'profile', $this->profile ) . "\n";
                // Term box
@@ -1144,6 +1097,16 @@ class SpecialSearch extends SpecialPage {
                        array( 'class' => array( 'mw-ui-button', 'mw-ui-progressive' ) )
                ) . "\n";
 
+               // Results-info
+               if ( $totalNum > 0 ) {
+                       $top = $this->msg( 'showingresultsheader' )
+                               ->numParams( $this->offset + 1, $this->offset + $resultsShown, $totalNum )
+                               ->params( wfEscapeWikiText( $term ) )
+                               ->numParams( $resultsShown )
+                               ->parse();
+                       $out .= Xml::tags( 'div', array( 'class' => 'results-info' ), $top );
+               }
+
                return $out . $this->didYouMeanHtml;
        }
 
index 657999c..c9e2e18 100644 (file)
@@ -129,6 +129,7 @@ class SpecialVersion extends SpecialPage {
                                        $this->getEntryPointInfo()
                                );
                                $out->addHtml(
+                                       $this->getSkinCredits() .
                                        $this->getExtensionCredits() .
                                        $this->getParserTags() .
                                        $this->getParserFunctionHooks()
@@ -418,7 +419,7 @@ class SpecialVersion extends SpecialPage {
        }
 
        /**
-        * Generate wikitext showing extensions name, URL, author and description.
+        * Generate wikitext showing the name, URL, author and description of each extension.
         *
         * @return string Wikitext
         */
@@ -450,9 +451,11 @@ class SpecialVersion extends SpecialPage {
                        }
                }
 
+               $this->firstExtOpened = false;
                // Loop through the extension categories to display their extensions in the list.
                foreach ( $extensionTypes as $type => $message ) {
-                       if ( $type != 'other' ) {
+                       // Skins have a separate section
+                       if ( $type !== 'other' && $type !== 'skin' ) {
                                $out .= $this->getExtensionCategory( $type, $message );
                        }
                }
@@ -465,6 +468,27 @@ class SpecialVersion extends SpecialPage {
                return $out;
        }
 
+       /**
+        * Generate wikitext showing the name, URL, author and description of each skin.
+        *
+        * @return string Wikitext
+        */
+       function getSkinCredits() {
+               $out = Xml::element(
+                               'h2',
+                               array( 'id' => 'mw-version-skin' ),
+                               $this->msg( 'version-skins' )->text()
+                       ) .
+                       Xml::openElement( 'table', array( 'class' => 'wikitable plainlinks', 'id' => 'sv-skin' ) );
+
+               $this->firstExtOpened = false;
+               $out .= $this->getExtensionCategory( 'skin', null );
+
+               $out .= Xml::closeElement( 'table' );
+
+               return $out;
+       }
+
        /**
         * Obtains a list of installed parser tags and the associated H2 header
         *
@@ -587,7 +611,16 @@ class SpecialVersion extends SpecialPage {
 
                // We must obtain the information for all the bits and pieces!
                // ... such as extension names and links
-               $extensionName = isset( $extension['name'] ) ? $extension['name'] : '[no name]';
+               if ( isset( $extension['namemsg'] ) ) {
+                       // Localized name of extension
+                       $extensionName = $this->msg( $extension['namemsg'] )->text();
+               } elseif ( isset( $extension['name'] ) ) {
+                       // Non localized version
+                       $extensionName = $extension['name'];
+               } else {
+                       $extensionName = $this->msg( 'version-no-ext-name' )->text();
+               }
+
                if ( isset( $extension['url'] ) ) {
                        $extensionNameLink = Linker::makeExternalLink(
                                $extension['url'],
@@ -786,7 +819,7 @@ class SpecialVersion extends SpecialPage {
                }
        }
 
-       private function openExtType( $text, $name = null ) {
+       private function openExtType( $text = null, $name = null ) {
                $out = '';
 
                $opt = array( 'colspan' => 5 );
@@ -802,13 +835,18 @@ class SpecialVersion extends SpecialPage {
                        $opt['id'] = "sv-$name";
                }
 
-               $out .= Html::rawElement( 'tr', array(),
-                       Html::element( 'th', $opt, $text )
-               );
+               if ( $text !== null ) {
+                       $out .= Html::rawElement( 'tr', array(),
+                               Html::element( 'th', $opt, $text )
+                       );
+               }
 
+               $firstHeadingMsg = ( $name === 'credits-skin' )
+                       ? 'version-skin-colheader-name'
+                       : 'version-ext-colheader-name';
                $out .= Html::openElement( 'tr' );
                $out .= Html::element( 'th', array( 'class' => 'mw-version-ext-col-label' ),
-                       $this->msg( 'version-ext-colheader-name' )->text() );
+                       $this->msg( $firstHeadingMsg )->text() );
                $out .= Html::element( 'th', array( 'class' => 'mw-version-ext-col-label' ),
                        $this->msg( 'version-ext-colheader-version' )->text() );
                $out .= Html::element( 'th', array( 'class' => 'mw-version-ext-col-label' ),
index 2aec8df..21a1f9b 100644 (file)
@@ -88,9 +88,15 @@ class SpecialWatchlist extends ChangesListSpecialPage {
         */
        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 );
+               return self::prefixSearchArray(
+                       $search,
+                       $limit,
+                       array(
+                               'clear',
+                               'edit',
+                               'raw',
+                       )
+               );
        }
 
        /**
@@ -331,6 +337,14 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                        $output->showLagWarning( $lag );
                }
 
+               # If no rows to display, show message before try to render the list
+               if ( $rows->numRows() == 0 ) {
+                       $output->wrapWikiMsg(
+                               "<div class='mw-changeslist-empty'>\n$1\n</div>", 'recentchanges-noresult'
+                       );
+                       return;
+               }
+
                $dbr->dataSeek( $rows, 0 );
 
                $list = ChangesList::newFromContext( $this->getContext() );
@@ -370,13 +384,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                }
                $s .= $list->endRecentChangesList();
 
-               if ( $rows->numRows() == 0 ) {
-                       $output->wrapWikiMsg(
-                               "<div class='mw-changeslist-empty'>\n$1\n</div>", 'recentchanges-noresult'
-                       );
-               } else {
-                       $output->addHTML( $s );
-               }
+               $output->addHTML( $s );
        }
 
        /**
index 9118701..a4240e2 100644 (file)
@@ -73,7 +73,7 @@ class UsercreateTemplate extends BaseTemplate {
                        <?php } ?>
                        </div>
 
-                       <div>
+                       <div class="mw-ui-vform-field">
                                <label for='wpName2'>
                                        <?php $this->msg( 'userlogin-yourname' ); ?>
 
@@ -92,7 +92,7 @@ class UsercreateTemplate extends BaseTemplate {
                                ?>
                        </div>
 
-                       <div>
+                       <div class="mw-ui-vform-field">
                                <?php if ( $this->data['createemail'] ) { ?>
                                        <label class="mw-ui-checkbox-label">
                                                <input name="wpCreateaccountMail" type="checkbox" value="1" id="wpCreateaccountMail" tabindex="2"
@@ -105,7 +105,7 @@ class UsercreateTemplate extends BaseTemplate {
                                <?php } ?>
                        </div>
 
-                       <div class="mw-row-password">
+                       <div class="mw-ui-vform-field mw-row-password">
                                <label for='wpPassword2'><?php $this->msg( 'userlogin-yourpassword' ); ?></label>
                                <?php
                                echo Html::input( 'wpPassword', null, 'password', array(
@@ -127,7 +127,7 @@ class UsercreateTemplate extends BaseTemplate {
                                        $select->addOption( $dom );
                                }
                        ?>
-                               <div id="mw-user-domain-section">
+                               <div class="mw-ui-vform-field" id="mw-user-domain-section">
                                        <label for="wpDomain"><?php $this->msg( 'yourdomainname' ); ?></label>
                                        <div class="mw-input">
                                                <?php echo $select->getHTML(); ?>
@@ -135,7 +135,7 @@ class UsercreateTemplate extends BaseTemplate {
                                </div>
                        <?php } ?>
 
-                       <div class="mw-row-password">
+                       <div class="mw-ui-vform-field mw-row-password">
                                <label for='wpRetype'><?php $this->msg( 'createacct-yourpasswordagain' ); ?></label>
                                <?php
                                echo Html::input( 'wpRetype', null, 'password', array(
@@ -149,7 +149,7 @@ class UsercreateTemplate extends BaseTemplate {
                                ?>
                        </div>
 
-                       <div>
+                       <div class="mw-ui-vform-field">
                                <?php if ( $this->data['useemail'] ) { ?>
                                        <label for='wpEmail'>
                                                <?php
@@ -174,7 +174,7 @@ class UsercreateTemplate extends BaseTemplate {
                        </div>
 
                        <?php if ( $this->data['userealname'] ) { ?>
-                               <div>
+                               <div class="mw-ui-vform-field">
                                        <label for='wpRealName'><?php $this->msg( 'createacct-realname' ); ?></label>
                                        <input type='text' class='mw-input loginText' name="wpRealName" id="wpRealName"
                                                tabindex="7"
@@ -186,7 +186,7 @@ class UsercreateTemplate extends BaseTemplate {
                        <?php } ?>
 
                        <?php if ( $this->data['usereason'] ) { ?>
-                               <div>
+                               <div class="mw-ui-vform-field">
                                        <label for='wpReason'><?php $this->msg( 'createacct-reason' ); ?></label>
                                        <?php echo Html::input( 'wpReason', $this->data['reason'], 'text', array(
                                                'class' => 'mw-input loginText',
@@ -202,7 +202,7 @@ class UsercreateTemplate extends BaseTemplate {
                        $tabIndex = 9;
                        if ( isset( $this->data['extraInput'] ) && is_array( $this->data['extraInput'] ) ) {
                                foreach ( $this->data['extraInput'] as $inputItem ) { ?>
-                                       <div>
+                                       <div class="mw-ui-vform-field">
                                                <?php
                                                // If it's a checkbox, output the whole thing (assume it has a msg).
                                                if ( $inputItem['type'] == 'checkbox' ) {
@@ -252,7 +252,7 @@ class UsercreateTemplate extends BaseTemplate {
                        // so skip one index.
                        $tabIndex++;
                        ?>
-                       <div class="mw-submit">
+                       <div class="mw-ui-vform-field mw-submit">
                                <?php
                                echo Html::input(
                                        'wpCreateaccount',
index 0aad07d..19ea20b 100644 (file)
@@ -55,7 +55,7 @@ class UserloginTemplate extends BaseTemplate {
                                </div>
                        <?php } ?>
 
-                       <div>
+                       <div class="mw-ui-vform-field">
                                <label for='wpName1'>
                                        <?php
                                        $this->msg( 'userlogin-yourname' );
@@ -85,7 +85,7 @@ class UserloginTemplate extends BaseTemplate {
                                ?>
                        </div>
 
-                       <div>
+                       <div class="mw-ui-vform-field">
                                <label for='wpPassword1'>
                                        <?php
                                        $this->msg( 'userlogin-yourpassword' );
@@ -120,7 +120,7 @@ class UserloginTemplate extends BaseTemplate {
                                        $select->addOption( $dom );
                                }
                        ?>
-                               <div id="mw-user-domain-section">
+                               <div class="mw-ui-vform-field" id="mw-user-domain-section">
                                        <label for='wpDomain'><?php $this->msg( 'yourdomainname' ); ?></label>
                                        <?php echo $select->getHTML(); ?>
                                </div>
@@ -132,7 +132,7 @@ class UserloginTemplate extends BaseTemplate {
                        }
                        ?>
 
-                       <div>
+                       <div class="mw-ui-vform-field">
                                <?php if ( $this->data['canremember'] ) { ?>
                                        <label class="mw-ui-checkbox-label">
                                                <input name="wpRemember" type="checkbox" value="1" id="wpRemember" tabindex="4"
@@ -145,7 +145,7 @@ class UserloginTemplate extends BaseTemplate {
                                <?php } ?>
                        </div>
 
-                       <div>
+                       <div class="mw-ui-vform-field">
                                <?php
                                echo Html::input( 'wpLoginAttempt', $this->getMsg( 'pt-login-button' )->text(), 'submit', array(
                                        'id' => 'wpLoginAttempt',
@@ -154,7 +154,8 @@ class UserloginTemplate extends BaseTemplate {
                                ) );
                                ?>
                        </div>
-                       <div id="mw-userlogin-help">
+
+                       <div class="mw-ui-vform-field" id="mw-userlogin-help">
                                <?php
                                echo Html::element(
                                        'a',
@@ -167,6 +168,7 @@ class UserloginTemplate extends BaseTemplate {
                                );
                                ?>
                        </div>
+
                        <?php if ( $this->haveData( 'createOrLoginHref' ) ) { ?>
                                <?php if ( $this->data['loggedin'] ) { ?>
                                        <div id="mw-createaccount-another">
index b8ca434..d1de993 100644 (file)
@@ -118,7 +118,7 @@ abstract class UploadBase {
         * Can be overridden by subclasses.
         *
         * @param User $user
-        * @return bool
+        * @return bool|string
         */
        public static function isAllowed( $user ) {
                foreach ( array( 'upload', 'edit' ) as $permission ) {
@@ -1390,12 +1390,19 @@ abstract class UploadBase {
                                return true;
                        }
 
-                       # href with javascript target
-                       if ( $stripped == 'href' && strpos( strtolower( $value ), 'javascript:' ) !== false ) {
-                               wfDebug( __METHOD__
-                                       . ": Found script in href attribute '$attrib'='$value' in uploaded file.\n" );
+                       # href with non-local target (don't allow http://, javascript:, etc)
+                       if ( $stripped == 'href'
+                               && strpos( $value, 'data:' ) !== 0
+                               && strpos( $value, '#' ) !== 0
+                       ) {
+                               if ( !( $strippedElement === 'a'
+                                       && preg_match( '!^https?://!im', $value ) )
+                               ) {
+                                       wfDebug( __METHOD__ . ": Found href attribute <$strippedElement "
+                                               . "'$attrib'='$value' in uploaded file.\n" );
 
-                               return true;
+                                       return true;
+                               }
                        }
 
                        # href with embedded svg as target
index e2013b0..0ce90c1 100644 (file)
@@ -285,7 +285,7 @@ class UIDGenerator {
                if ( $cache ) {
                        $counter = $cache->incr( $bucket, $count );
                        if ( $counter === false ) {
-                               if ( !$cache->add( $bucket, $count ) ) {
+                               if ( !$cache->add( $bucket, (int)$count ) ) {
                                        throw new MWException( 'Unable to set value to ' . get_class( $cache ) );
                                }
                                $counter = $count;
index e505b28..bf30455 100644 (file)
@@ -1030,6 +1030,18 @@ class Language {
                return $this->getMessageFromDB( self::$mHijriCalendarMonthMsgs[$key - 1] );
        }
 
+       /**
+        * Pass through result from $dateTimeObj->format()
+        */
+       private static function dateTimeObjFormat( &$dateTimeObj, $ts, $zone, $code ) {
+               if ( !$dateTimeObj ) {
+                       $dateTimeObj = DateTime::createFromFormat(
+                               'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' )
+                       );
+               }
+               return $dateTimeObj->format( $code );
+       }
+
        /**
         * This is a workalike of PHP's date() function, but with better
         * internationalisation, a reduced set of format characters, and a better
@@ -1090,12 +1102,14 @@ class Language {
         *      YYYYMMDDHHMMSS
         *      01234567890123
         * @param DateTimeZone $zone Timezone of $ts
+        * @param[out] int $ttl The amount of time (in seconds) the output may be cached for.
+        * Only makes sense if $ts is the current time.
         * @todo handling of "o" format character for Iranian, Hebrew, Hijri & Thai?
         *
         * @throws MWException
         * @return string
         */
-       function sprintfDate( $format, $ts, DateTimeZone $zone = null ) {
+       function sprintfDate( $format, $ts, DateTimeZone $zone = null, &$ttl = null ) {
                $s = '';
                $raw = false;
                $roman = false;
@@ -1109,6 +1123,25 @@ class Language {
                $minguo = false;
                $tenno = false;
 
+               $usedSecond = false;
+               $usedMinute = false;
+               $usedHour = false;
+               $usedAMPM = false;
+               $usedDay = false;
+               $usedWeek = false;
+               $usedMonth = false;
+               $usedYear = false;
+               $usedISOYear = false;
+               $usedIsLeapYear = false;
+
+               $usedHebrewMonth = false;
+               $usedIranianMonth = false;
+               $usedHijriMonth = false;
+               $usedHebrewYear = false;
+               $usedIranianYear = false;
+               $usedHijriYear = false;
+               $usedTennoYear = false;
+
                if ( strlen( $ts ) !== 14 ) {
                        throw new MWException( __METHOD__ . ": The timestamp $ts should have 14 characters" );
                }
@@ -1152,213 +1185,247 @@ class Language {
                                        $hebrewNum = true;
                                        break;
                                case 'xg':
+                                       $usedMonth = true;
                                        $s .= $this->getMonthNameGen( substr( $ts, 4, 2 ) );
                                        break;
                                case 'xjx':
+                                       $usedHebrewMonth = true;
                                        if ( !$hebrew ) {
                                                $hebrew = self::tsToHebrew( $ts );
                                        }
                                        $s .= $this->getHebrewCalendarMonthNameGen( $hebrew[1] );
                                        break;
                                case 'd':
+                                       $usedDay = true;
                                        $num = substr( $ts, 6, 2 );
                                        break;
                                case 'D':
-                                       if ( !$dateTimeObj ) {
-                                               $dateTimeObj = DateTime::createFromFormat(
-                                                       'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' )
-                                               );
-                                       }
-                                       $s .= $this->getWeekdayAbbreviation( $dateTimeObj->format( 'w' ) + 1 );
+                                       $usedDay = true;
+                                       $s .= $this->getWeekdayAbbreviation( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'w' ) + 1 );
                                        break;
                                case 'j':
+                                       $usedDay = true;
                                        $num = intval( substr( $ts, 6, 2 ) );
                                        break;
                                case 'xij':
+                                       $usedDay = true;
                                        if ( !$iranian ) {
                                                $iranian = self::tsToIranian( $ts );
                                        }
                                        $num = $iranian[2];
                                        break;
                                case 'xmj':
+                                       $usedDay = true;
                                        if ( !$hijri ) {
                                                $hijri = self::tsToHijri( $ts );
                                        }
                                        $num = $hijri[2];
                                        break;
                                case 'xjj':
+                                       $usedDay = true;
                                        if ( !$hebrew ) {
                                                $hebrew = self::tsToHebrew( $ts );
                                        }
                                        $num = $hebrew[2];
                                        break;
                                case 'l':
-                                       if ( !$dateTimeObj ) {
-                                               $dateTimeObj = DateTime::createFromFormat(
-                                                       'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' )
-                                               );
-                                       }
-                                       $s .= $this->getWeekdayName( $dateTimeObj->format( 'w' ) + 1 );
+                                       $usedDay = true;
+                                       $s .= $this->getWeekdayName( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'w' ) + 1 );
                                        break;
                                case 'F':
+                                       $usedMonth = true;
                                        $s .= $this->getMonthName( substr( $ts, 4, 2 ) );
                                        break;
                                case 'xiF':
+                                       $usedIranianMonth = true;
                                        if ( !$iranian ) {
                                                $iranian = self::tsToIranian( $ts );
                                        }
                                        $s .= $this->getIranianCalendarMonthName( $iranian[1] );
                                        break;
                                case 'xmF':
+                                       $usedHijriMonth = true;
                                        if ( !$hijri ) {
                                                $hijri = self::tsToHijri( $ts );
                                        }
                                        $s .= $this->getHijriCalendarMonthName( $hijri[1] );
                                        break;
                                case 'xjF':
+                                       $usedHebrewMonth = true;
                                        if ( !$hebrew ) {
                                                $hebrew = self::tsToHebrew( $ts );
                                        }
                                        $s .= $this->getHebrewCalendarMonthName( $hebrew[1] );
                                        break;
                                case 'm':
+                                       $usedMonth = true;
                                        $num = substr( $ts, 4, 2 );
                                        break;
                                case 'M':
+                                       $usedMonth = true;
                                        $s .= $this->getMonthAbbreviation( substr( $ts, 4, 2 ) );
                                        break;
                                case 'n':
+                                       $usedMonth = true;
                                        $num = intval( substr( $ts, 4, 2 ) );
                                        break;
                                case 'xin':
+                                       $usedIranianMonth = true;
                                        if ( !$iranian ) {
                                                $iranian = self::tsToIranian( $ts );
                                        }
                                        $num = $iranian[1];
                                        break;
                                case 'xmn':
+                                       $usedHijriMonth = true;
                                        if ( !$hijri ) {
                                                $hijri = self::tsToHijri ( $ts );
                                        }
                                        $num = $hijri[1];
                                        break;
                                case 'xjn':
+                                       $usedHebrewMonth = true;
                                        if ( !$hebrew ) {
                                                $hebrew = self::tsToHebrew( $ts );
                                        }
                                        $num = $hebrew[1];
                                        break;
                                case 'xjt':
+                                       $usedHebrewMonth = true;
                                        if ( !$hebrew ) {
                                                $hebrew = self::tsToHebrew( $ts );
                                        }
                                        $num = $hebrew[3];
                                        break;
                                case 'Y':
+                                       $usedYear = true;
                                        $num = substr( $ts, 0, 4 );
                                        break;
                                case 'xiY':
+                                       $usedIranianYear = true;
                                        if ( !$iranian ) {
                                                $iranian = self::tsToIranian( $ts );
                                        }
                                        $num = $iranian[0];
                                        break;
                                case 'xmY':
+                                       $usedHijriYear = true;
                                        if ( !$hijri ) {
                                                $hijri = self::tsToHijri( $ts );
                                        }
                                        $num = $hijri[0];
                                        break;
                                case 'xjY':
+                                       $usedHebrewYear = true;
                                        if ( !$hebrew ) {
                                                $hebrew = self::tsToHebrew( $ts );
                                        }
                                        $num = $hebrew[0];
                                        break;
                                case 'xkY':
+                                       $usedYear = true;
                                        if ( !$thai ) {
                                                $thai = self::tsToYear( $ts, 'thai' );
                                        }
                                        $num = $thai[0];
                                        break;
                                case 'xoY':
+                                       $usedYear = true;
                                        if ( !$minguo ) {
                                                $minguo = self::tsToYear( $ts, 'minguo' );
                                        }
                                        $num = $minguo[0];
                                        break;
                                case 'xtY':
+                                       $usedTennoYear = true;
                                        if ( !$tenno ) {
                                                $tenno = self::tsToYear( $ts, 'tenno' );
                                        }
                                        $num = $tenno[0];
                                        break;
                                case 'y':
+                                       $usedYear = true;
                                        $num = substr( $ts, 2, 2 );
                                        break;
                                case 'xiy':
+                                       $usedIranianYear = true;
                                        if ( !$iranian ) {
                                                $iranian = self::tsToIranian( $ts );
                                        }
                                        $num = substr( $iranian[0], -2 );
                                        break;
                                case 'a':
+                                       $usedAMPM = true;
                                        $s .= intval( substr( $ts, 8, 2 ) ) < 12 ? 'am' : 'pm';
                                        break;
                                case 'A':
+                                       $usedAMPM = true;
                                        $s .= intval( substr( $ts, 8, 2 ) ) < 12 ? 'AM' : 'PM';
                                        break;
                                case 'g':
+                                       $usedHour = true;
                                        $h = substr( $ts, 8, 2 );
                                        $num = $h % 12 ? $h % 12 : 12;
                                        break;
                                case 'G':
+                                       $usedHour = true;
                                        $num = intval( substr( $ts, 8, 2 ) );
                                        break;
                                case 'h':
+                                       $usedHour = true;
                                        $h = substr( $ts, 8, 2 );
                                        $num = sprintf( '%02d', $h % 12 ? $h % 12 : 12 );
                                        break;
                                case 'H':
+                                       $usedHour = true;
                                        $num = substr( $ts, 8, 2 );
                                        break;
                                case 'i':
+                                       $usedMinute = true;
                                        $num = substr( $ts, 10, 2 );
                                        break;
                                case 's':
+                                       $usedSecond = true;
                                        $num = substr( $ts, 12, 2 );
                                        break;
                                case 'c':
                                case 'r':
+                                       $usedSecond = true;
+                                       // fall through
                                case 'e':
                                case 'O':
                                case 'P':
                                case 'T':
-                                       // Pass through string from $dateTimeObj->format()
-                                       if ( !$dateTimeObj ) {
-                                               $dateTimeObj = DateTime::createFromFormat(
-                                                       'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' )
-                                               );
-                                       }
-                                       $s .= $dateTimeObj->format( $code );
+                                       $s .= Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
                                        break;
                                case 'w':
                                case 'N':
                                case 'z':
+                                       $usedDay = true;
+                                       $num = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
+                                       break;
                                case 'W':
+                                       $usedWeek = true;
+                                       $num = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
+                                       break;
                                case 't':
+                                       $usedMonth = true;
+                                       $num = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
+                                       break;
                                case 'L':
+                                       $usedIsLeapYear = true;
+                                       $num = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
+                                       break;
                                case 'o':
+                                       $usedISOYear = true;
+                                       $num = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
+                                       break;
                                case 'U':
+                                       $usedSecond = true;
+                                       // fall through
                                case 'I':
                                case 'Z':
-                                       // Pass through number from $dateTimeObj->format()
-                                       if ( !$dateTimeObj ) {
-                                               $dateTimeObj = DateTime::createFromFormat(
-                                                       'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' )
-                                               );
-                                       }
-                                       $num = $dateTimeObj->format( $code );
+                                       $num = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
                                        break;
                                case '\\':
                                        # Backslash escaping
@@ -1403,6 +1470,62 @@ class Language {
                        }
                }
 
+               if ( $usedSecond ) {
+                       $ttl = 1;
+               } elseif ( $usedMinute ) {
+                       $ttl = 60 - substr( $ts, 12, 2 );
+               } elseif ( $usedHour ) {
+                       $ttl = 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+               } elseif ( $usedAMPM ) {
+                       $ttl = 43200 - ( substr( $ts, 8, 2 ) % 12 ) * 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+               } elseif ( $usedDay || $usedHebrewMonth || $usedIranianMonth || $usedHijriMonth || $usedHebrewYear || $usedIranianYear || $usedHijriYear || $usedTennoYear ) {
+                       // @todo Someone who understands the non-Gregorian calendars should write proper logic for them
+                       // so that they don't need purged every day.
+                       $ttl = 86400 - substr( $ts, 8, 2 ) * 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+               } else {
+                       $possibleTtls = array();
+                       $timeRemainingInDay = 86400 - substr( $ts, 8, 2 ) * 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+                       if ( $usedWeek ) {
+                               $possibleTtls[] = ( 7 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'N' ) ) * 86400 + $timeRemainingInDay;
+                       } elseif ( $usedISOYear ) {
+                               // December 28th falls on the last ISO week of the year, every year.
+                               // The last ISO week of a year can be 52 or 53.
+                               $lastWeekOfISOYear = DateTime::createFromFormat( 'Ymd', substr( $ts, 0, 4 ) . '1228', $zone ?: new DateTimeZone( 'UTC' ) )->format( 'W' );
+                               $currentISOWeek = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'W' );
+                               $weeksRemaining = $lastWeekOfISOYear - $currentISOWeek;
+                               $timeRemainingInWeek = ( 7 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'N' ) ) * 86400 + $timeRemainingInDay;
+                               $possibleTtls[] = $weeksRemaining * 604800 + $timeRemainingInWeek;
+                       }
+
+                       if ( $usedMonth ) {
+                               $possibleTtls[] = ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 't' ) - substr( $ts, 6, 2 ) ) * 86400 + $timeRemainingInDay;
+                       } elseif ( $usedYear ) {
+                               $possibleTtls[] = ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'L' ) + 364 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'z' ) ) * 86400
+                                       + $timeRemainingInDay;
+                       } elseif ( $usedIsLeapYear ) {
+                               $year = substr( $ts, 0, 4 );
+                               $timeRemainingInYear = ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'L' ) + 364 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'z' ) ) * 86400
+                                       + $timeRemainingInDay;
+                               $mod = $year % 4;
+                               if ( $mod || ( !( $year % 100 ) && $year % 400 ) ) {
+                                       // this isn't a leap year. see when the next one starts
+                                       $nextCandidate = $year - $mod + 4;
+                                       if ( $nextCandidate % 100 || !( $nextCandidate % 400 ) ) {
+                                               $possibleTtls[] = ( $nextCandidate - $year - 1 ) * 365 * 86400 + $timeRemainingInYear;
+                                       } else {
+                                               $possibleTtls[] = ( $nextCandidate - $year + 3 ) * 365 * 86400 + $timeRemainingInYear;
+                                       }
+                               } else {
+                                       // this is a leap year, so the next year isn't
+                                       $possibleTtls[] = $timeRemainingInYear;
+                               }
+                       }
+
+                       if ( $possibleTtls ) {
+                               $ttl = min( $possibleTtls );
+                       }
+               }
+
                return $s;
        }
 
index 4920e13..545f19a 100644 (file)
        "qbmyoptions": "Laman lôn",
        "faq": "Teunanyöng Umom",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Tamah bhaih",
-       "vector-action-delete": "Sampôh",
-       "vector-action-move": "Pupinah",
-       "vector-action-protect": "Peulindông",
-       "vector-action-undelete": "Bateuë sampôh",
-       "vector-action-unprotect": "Gantoe neulindông",
-       "vector-view-create": "Peugöt",
-       "vector-view-edit": "Andam",
-       "vector-view-history": "Eu riwayat",
-       "vector-view-view": "Beuët",
-       "vector-view-viewsource": "Eu nè",
        "actions": "Buët",
        "namespaces": "Ruweuëng nan",
        "variants": "Ragam",
        "searchmenu-exists": "'''Na laman ngön nan \"[[:$1]]\" bak wiki nyoe.'''",
        "searchmenu-new": "<strong>Peugöt laman \"[[:$1]]\" bak wiki nyoë!</strong> {{PLURAL:$2|0=|Eu cit laman nyang geurumpok nibak meunita droëneuh.|Eu cit hasé mita nyang geurumpok.}}",
        "searchprofile-articles": "Laman asoë",
-       "searchprofile-project": "Laman Beunantu ngön Buët",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Ban dum",
        "searchprofile-advanced": "Tingkat lanjut",
        "searchprofile-articles-tooltip": "Mita bak $1",
-       "searchprofile-project-tooltip": "Mita bak $1",
        "searchprofile-images-tooltip": "Mita beureukaih",
        "searchprofile-everything-tooltip": "Mita ban dum laman asoë (rôh ôn marit)",
        "searchprofile-advanced-tooltip": "Mita bak ruweuëng nan meupat-pat",
        "allowemail": "Peuudép surat-e nibak ureueng ngui la'én",
        "prefs-searchoptions": "Mita",
        "prefs-namespaces": "Ruweuëng nan",
-       "defaultns": "Atawa neumita lam ruweueng nan nyoe:",
        "default": "meuneumat",
        "prefs-files": "Beureukaih",
        "youremail": "Surat-e:",
index 838f0e6..bae51c9 100644 (file)
        "qbmyoptions": "صفحاتي",
        "faq": "الأسئلة الأكثر تكرارا",
        "faqpage": "Project:أسئلة متكررة",
-       "vector-action-addsection": "أضف موضوعا",
-       "vector-action-delete": "احذف",
-       "vector-action-move": "انقل",
-       "vector-action-protect": "احم",
-       "vector-action-undelete": "استرجع الحذف",
-       "vector-action-unprotect": "غير الحماية",
-       "vector-view-create": "أنشئ",
-       "vector-view-edit": "Baddel",
-       "vector-view-history": "Warri l'historique",
-       "vector-view-view": "Aqra",
-       "vector-view-viewsource": "اعرض المصدر",
        "actions": "Aεmel",
        "namespaces": "El espaces de noms",
        "variants": "Anweε",
        "searchmenu-exists": "'''famma ss'af7a ismha \"[[:$1]]\" fi hedha el wiki.'''",
        "searchmenu-new": "'''أنشئ الصفحة \"[[:$1]]\" في هذا الويكي!'''",
        "searchprofile-articles": "Safħat mtaε contenu",
-       "searchprofile-project": "Safħat mtaε elmouεawna w les projets",
        "searchprofile-images": "Multimédia",
        "searchprofile-everything": "Kol chay",
        "searchprofile-advanced": "Avancé",
        "searchprofile-articles-tooltip": "Farkes fi $1",
-       "searchprofile-project-tooltip": "Farkis fi $1",
        "searchprofile-images-tooltip": "Farkes f'elfichiers",
        "searchprofile-everything-tooltip": "Farkes kol chay (ħatta safħat leħdith)",
        "searchprofile-advanced-tooltip": "Ekhtar les espaces de noms elli bech tfarkes εlihom",
index 7b65426..c3e146a 100644 (file)
        "qbmyoptions": "My bladsye",
        "faq": "Gewilde vrae",
        "faqpage": "Project:GewildeVrae",
-       "vector-action-addsection": "Nuwe onderwerp",
-       "vector-action-delete": "Skrap",
-       "vector-action-move": "Skuif",
-       "vector-action-protect": "Beskerm",
-       "vector-action-undelete": "Ontskrap",
-       "vector-action-unprotect": "Wysig beskerming",
-       "vector-view-create": "Skep",
-       "vector-view-edit": "Wysig",
-       "vector-view-history": "Wys geskiedenis",
-       "vector-view-view": "Lees",
-       "vector-view-viewsource": "Wys bronteks",
        "actions": "Aksies",
-       "vector-more-actions": "Meer",
        "namespaces": "Naamruimtes",
        "variants": "Variante",
        "navigation-heading": "Navigasie-keuseskerm",
        "searchrelated": "verwante",
        "searchall": "alle",
        "showingresults": "Hier volg {{PLURAL:$1|'''1''' resultaat|'''$1''' resultate}} vanaf #'''$2'''.",
-       "showingresultsnum": "Hier onder {{PLURAL:$3|is '''1''' resultaat|is '''$3''' resultate}} vanaf #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultate '''$1 - $2''' van '''$3'''}} vir '''$4'''",
        "search-nonefound": "Daar is geen resultate vir u soekopdrag nie.",
        "powersearch-legend": "Gevorderde soektog",
index 4ebee10..df26585 100644 (file)
        "qbmyoptions": "Faqet e mija",
        "faq": "Pyetjet e shpeshta",
        "faqpage": "Project:Pyetjet e shpeshta",
-       "vector-action-addsection": "Shto temë",
-       "vector-action-delete": "Fshij",
-       "vector-action-move": "Zhvendos",
-       "vector-action-protect": "Mbroj",
-       "vector-action-undelete": "Kthe fshimjen mbrapsht",
-       "vector-action-unprotect": "Hiq mbrojtjen",
-       "vector-view-create": "Krijo",
-       "vector-view-edit": "Redakto",
-       "vector-view-history": "Shih historinë",
-       "vector-view-view": "Lexo",
-       "vector-view-viewsource": "Shih kodin",
        "actions": "Veprimet",
        "namespaces": "Hapësinat",
        "variants": "Variantet",
        "editundo": "ktheje",
        "searchresults": "Rezultatet e kërkimit",
        "searchresults-title": "Rezultatet e kërkimit për \"$1\"",
-       "toomanymatches": "Ka tepër shumë përputhje, provoni nji kërkesë mâ të ngushtë",
        "titlematches": "Tituj që përputhen",
        "textmatches": "Përputhje në tekst",
        "notextmatches": "Nuk ka përputhje tekstuale në asnji faqe",
        "searchmenu-exists": "'''Në këtë wiki âsht nji faqe me titullin \"[[:$1]]\"'''",
        "searchmenu-new": "'''Krijo faqen \"[[:$1]]\" në këtë wiki!'''",
        "searchprofile-articles": "Faqet me përmbajtje",
-       "searchprofile-project": "Faqet e ndihmës dhe projekteve",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Gjithçka",
        "searchprofile-advanced": "Detajshëm",
        "searchprofile-articles-tooltip": "Kërko në $1",
-       "searchprofile-project-tooltip": "Kërko në $1",
        "searchprofile-images-tooltip": "Kërko skedarë",
        "searchprofile-everything-tooltip": "Kërko krejt përmbajtjen (përfshi edhe faqet e diskutimit)",
        "searchprofile-advanced-tooltip": "Kërkimi në hapësina",
        "search-interwiki-default": "$1 rezultate:",
        "search-interwiki-more": "(mâ shumë)",
        "search-relatedarticle": "Të ngjajshme",
-       "searcheverything-enable": "Kërko në tâna hapësinat",
        "searchrelated": "të ngjajshme",
        "searchall": "tâna",
        "showingresults": "Mâ poshtë {{PLURAL:$1|tregohet '''1''' rezultat|tregohen '''$1''' rezultate}} që nisin me #'''$2'''.",
-       "showingresultsnum": "Mâ poshtë {{PLURAL:$3|tregohet '''1''' rezultat|tregohen '''$3''' rezultate}} që nisin me #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Rezultati '''$1''' prej '''$3'''|Rezultatet '''$1 - $2''' prej '''$3'''}} për '''$4'''",
        "search-nonefound": "Nuk ka rezultate që përputhen me kërkesën.",
        "powersearch-legend": "Kërkimi i detajshëm",
        "allowemail": "Lejo emaila prej përdoruesve tjerë",
        "prefs-searchoptions": "Opcionet e kërkimit",
        "prefs-namespaces": "Hapësinat",
-       "defaultns": "Përndryshe kërko në këto hapësina:",
        "default": "e paracaktueme",
        "prefs-files": "Skedat",
        "prefs-custom-css": "CSS i përpunuem",
        "prefs-emailconfirm-label": "Konfirmimi i emailit:",
        "youremail": "Adresa e email-it*",
        "username": "Nofka e përdoruesit:",
-       "uid": "Nr. i identifikimit:",
        "prefs-memberingroups": "Anëtar i {{PLURAL:$1|grupit|grupeve}}:",
        "yourrealname": "Emri juej i vërtetë*",
        "yourlanguage": "Ndërfaqja gjuhësore",
        "booksources-go": "Shko",
        "log": "Regjistrat",
        "allpages": "Tâna faqet",
-       "alphaindexline": "$1 deri në $2",
        "prevpage": "Faqja paraprake ($1)",
        "allpagesfrom": "Trego faqet tue fillue me:",
        "allpagesto": "Trego faqet që mbarojnë me:",
        "tooltip-rollback": "\"Kthe mbrapa\" i kthen mbrapsht redaktimet e faqes aktuale prej kontribuuesit të fundit me nji klik",
        "tooltip-undo": "\"Zhbâne\" kthen mbrapsht këtë redaktim dhe çelë formularin e redaktimit në parapâmje.\nLejon dhânien e arsyes në përmbledhje.",
        "common.css": "/* CSSi i vendosun këtu ka me u zbatue në tâna dukjet */",
-       "cologneblue.css": "/* CSS i vendosun këtu ka me i prekë shfrytëzuesit e dukjes Cologne Blue */",
-       "monobook.css": "/* CSS i vednosun këtu ka me i prekë shfrytëzuesit e dukjes Monobook */",
-       "modern.css": "/* CSSi i vednosun këtu ka me i prekë shfrytëzuesit e dukjes Modern */",
-       "vector.css": "/* CSSi i vednosun këtu ka me i prekë shfrytëzuesit e dukjes Vector */",
        "print.css": "/* CSSi i vednosun këtu ka me e prekë pamjen e shtypjes */",
        "common.js": "/* Çdo JavaScript këtu ka me u ngarkue për të gjithë përdoruesit në secilën thirrje të faqes. */",
-       "cologneblue.js": "/* Çdo JavaScript këtu ka me u ngarkue për shfrytëzuesit që përdorin dukjen Cologne Blue */",
-       "monobook.js": "/* Çdo JavaScript këtu ka me u ngarkue për shfrytëzuesit që përdorin dukjen MonoBook */",
-       "modern.js": "/* Çdo JavaScript këtu ka me u ngarkue për shfrytëzuesit që përdorin dukjen Modern */",
-       "vector.js": "/* Çdo JavaScript këtu ka me u ngarkue për shfrytëzuesit që përdorin dukjen Vector */",
        "anonymous": "{{PLURAL:$1|Përdorues|Përdorues}} anonim të {{SITENAME}}",
        "siteuser": "Përdoruesi $1 i {{SITENAME}}",
        "lastmodifiedatby": "Kjo faqe âsht redaktue së fundi me $2, $1 prej $3.",
index 96843fe..20ad098 100644 (file)
        "qbmyoptions": "የኔ ገጾች",
        "faq": "ብጊየጥ (ብዙ ጊዜ የሚጠየቁ ጥያቀዎች)",
        "faqpage": "Project:ብጊየጥ",
-       "vector-action-addsection": "ርዕስ ጨምር",
-       "vector-action-delete": "አጥፋ",
-       "vector-action-move": "ለማዛወር",
-       "vector-action-protect": "ለመቆለፍ",
-       "vector-action-undelete": "አታጥፋ",
-       "vector-action-unprotect": "አለመቆለፍ",
-       "vector-view-create": "አዲስ ፍጠር",
-       "vector-view-edit": "አርም",
-       "vector-view-history": "ታሪኩን አሳይ",
-       "vector-view-view": "ለማንበብ",
-       "vector-view-viewsource": "ጥሬ ኮድ ለመመልከት",
        "actions": "ድርጊቶች",
        "namespaces": "ክፍለ-ዊኪዎች",
        "errorpagetitle": "ስህተት",
        "searchrelated": "የተዛመደ",
        "searchall": "ሁሉ",
        "showingresults": "ከ ቁ.#<b>$2</b> ጀምሮ እስከ <b>$1</b> ውጤቶች ድረስ ከዚህ በታች ይታያሉ።",
-       "showingresultsnum": "ከ#'''$2''' ጀምሮ {{PLURAL:$3|'''1''' ውጤት|'''$3''' ውጤቶች}} ከዚህ ታች ማየት ይቻላል።",
        "showingresultsheader": "{{PLURAL:$5|ከ'''$3''' ውጤት ውስጥ '''$1'''|ከ'''$3''' ውጤቶች ውስጥ ከ'''$1''' እስከ '''$2'''}} ለ'''$4'''",
        "search-nonefound": "ለጥያቄው ምንም የሚስማማ ውጤት አልተገኘም።",
        "powersearch-legend": "ተጨማሪ ፍለጋ",
        "imgmultigoto": "ወደ ገጽ# $1 ለመሄድ",
        "table_pager_next": "ቀጥሎ ገጽ",
        "table_pager_prev": "ፊተኛው ገጽ",
-       "table_pager_first": "á\88\98á\8c\80á\88\98á\88­á\8b«á\8b\8d á\8c\8dጽ",
+       "table_pager_first": "á\88\98á\8c\80á\88\98á\88­á\8b«á\8b\8d á\8c\88ጽ",
        "table_pager_last": "መጨረሻው ገጽ",
        "table_pager_limit": "በየገጹ $1 መስመሮች",
        "table_pager_limit_submit": "ይታዩ",
index 1c2bcae..d804ec0 100644 (file)
        "qbmyoptions": "Pachinas propias",
        "faq": "Preguntas freqüents (FAQ)",
        "faqpage": "Project:Preguntas freqüents",
-       "vector-action-addsection": "Adhibir nueva sección",
-       "vector-action-delete": "Borrar",
-       "vector-action-move": "Tresladar",
-       "vector-action-protect": "Protecher",
-       "vector-action-undelete": "Restaurar",
-       "vector-action-unprotect": "Cambiar protección",
-       "vector-view-create": "Creyar",
-       "vector-view-edit": "Editar",
-       "vector-view-history": "Amostrar l'historial",
-       "vector-view-view": "Leyer",
-       "vector-view-viewsource": "Veyer o codigo fuent",
        "actions": "Accions",
        "namespaces": "Espacios de nombres",
        "variants": "Variants",
        "diff-multi-manyusers": "(No s'amuestra {{PLURAL:$1|una edición entremeya|$1 edicions entremeyas}} feitas por más {{PLURAL:$2|d'un usuario|de $2 usuarios}})",
        "searchresults": "Resultau d'a busca",
        "searchresults-title": "Resultaus de mirar \"$1\"",
-       "toomanymatches": "S'ha retornato masiadas coincidencias, por favor, torne a prebar con una consulta diferent",
        "titlematches": "Consonancias de títols de pachina",
        "textmatches": "Consonancias en o texto d'as pachinas",
        "notextmatches": "No bi ha garra consonancia en os textos d'as pachinas",
        "searchmenu-exists": "'''Bi ha una pachina clamada \"[[$1]]\" en ista wiki'''",
        "searchmenu-new": "<strong>Creyar a pachina \"[[:$1]]\" en iste wiki!</strong> {{PLURAL:$2|0=|Mire-se tamién a pachina que s'ha trobau.|Mire-se tamién os resultaus d'a busca.}}",
        "searchprofile-articles": "Pachinas de conteniu",
-       "searchprofile-project": "Pachinas d'aduya y d'o prochecto",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tot",
        "searchprofile-advanced": "Abanzato",
        "searchprofile-articles-tooltip": "Mirar en $1",
-       "searchprofile-project-tooltip": "Mirar en $1",
        "searchprofile-images-tooltip": "Mirar fichers",
        "searchprofile-everything-tooltip": "Mirar en totz os contenius (tamién en as pachinas de descusión)",
        "searchprofile-advanced-tooltip": "Mirar en os siguients espacios de nombres",
        "search-interwiki-default": "$1 resultaus:",
        "search-interwiki-more": "(más)",
        "search-relatedarticle": "Relacionato",
-       "searcheverything-enable": "Mirar en totz os espacios de nombres",
        "searchrelated": "relacionato",
        "searchall": "totz",
        "showingresults": "Contino se bi {{PLURAL:$1|amuestra '''1''' resultau|amuestran '''$1''' resultaus}} prencipiando por o numero '''$2'''.",
-       "showingresultsnum": "Contino se bi {{PLURAL:$3|amuestra '''1''' resultau|amuestran os '''$3''' resultaus}} prencipiando por o numero '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultau '''$1''' de '''$3'''|Resultaus '''$1-$2''' de '''$3'''}} ta '''$4'''",
        "search-nonefound": "No s'ha trobato garra resultau que cumpla os criterios.",
        "powersearch-legend": "Busca abanzata",
        "allowemail": "Activar a recepción de correu d'atros usuarios",
        "prefs-searchoptions": "Opcions de busca",
        "prefs-namespaces": "Espacios de nombres",
-       "defaultns": "Si no, mirar en istos espacios de nombres:",
        "default": "por defecto",
        "prefs-files": "fichers",
        "prefs-custom-css": "CSS presonalizato",
        "prefs-emailconfirm-label": "Confirmación de correu electronico:",
        "youremail": "Adreza de correu electronico:",
        "username": "Nombre d'usuario:",
-       "uid": "ID d'usuario:",
        "prefs-memberingroups": "Miembro {{PLURAL:$1|d'a colla|d'as collas}}:",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "Tiempo de rechistro:",
        "logempty": "No bi ha garra elemento en o rechistro con ixas carauteristicas.",
        "log-title-wildcard": "Mirar títols que prencipien con iste texto",
        "allpages": "Todas as pachinas",
-       "alphaindexline": "$1 a $2",
        "nextpage": "Siguient pachina ($1)",
        "prevpage": "Pachina anterior ($1)",
        "allpagesfrom": "Amostrar as pachinas que prencipien por:",
        "tooltip-preferences-save": "Alzar as preferencias",
        "tooltip-summary": "Escribir un breu resumen",
        "common.css": "/* Os estilos CSS definius aquí aplicarán a todas as apariencias (skins) */",
-       "cologneblue.css": "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Cologne Blue */",
-       "monobook.css": "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Monobook */",
-       "modern.css": "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Modern */",
-       "vector.css": "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Vector */",
        "print.css": "/* Os estilos CSS colocaus aquí afectarán a la impresión */",
        "noscript.css": "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que tiengan desactivato JavaScript */",
        "group-autoconfirmed.css": "/* Os estilos CSS colocaus aquí s'aplicarán nomás a os usuarios autoconfirmatos*/",
        "group-sysop.css": "/* Os estilos CSS colocaus aquí s'aplicarán nomás a os administradors*/",
        "group-bureaucrat.css": "/* Os estilos CSS colocaus aquí s'aplicarán nomás a os burocratas*/",
        "common.js": "/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios en cada carga de pachina */",
-       "cologneblue.js": "/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios que faigan servir l'apariencia Colonia azul */",
-       "monobook.js": "/* O codigo Javascript que se meta aquí será cargau por os usuarios faigan servir l'apariencia MonoBook */",
-       "modern.js": "/* O codigo Javascript que se meta aquí será cargau por os usuarios faigan servir l'apariencia Modern */",
-       "vector.js": "/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios que usen a piel Vector */",
        "group-autoconfirmed.js": "/* Qualsiquier codigo Javascript escrito aquí se cargará nomás ta os usuarios autoconfirmatos */",
        "group-bot.js": "/* Qualsiquier codigo Javascript escrito aquí se cargará nomás ta os bots */",
        "group-sysop.js": "/* Qualsiquier codigo Javascript escrito aquí se cargará nomás ta os administradors */",
        "pageinfo-watchers": "Numero d'usuarios que la cosiran",
        "pageinfo-edits": "Numero d'edicions",
        "pageinfo-authors": "Numero d'autors diferents",
-       "skinname-cologneblue": "Colonia Azul (Cologne Blue)",
-       "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderna",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Sinyalar como ya controlato",
        "markaspatrolledtext": "Sinyalar iste articlo como controlato",
        "markedaspatrolled": "Sinyalato como controlato",
index e05a19a..e3ecd7d 100644 (file)
        "qbmyoptions": "Mīne trametas",
        "faq": "Oftost ascoda ascunga",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Besettan mearcunge",
-       "vector-action-delete": "Forlēosan",
-       "vector-action-move": "Wegan",
-       "vector-action-protect": "Beorgan",
-       "vector-action-undelete": "Scieppan tramet eft",
-       "vector-action-unprotect": "Andwendan beorgunge",
-       "vector-view-create": "Scieppan",
-       "vector-view-edit": "Adihtan",
-       "vector-view-history": "Stǣr",
-       "vector-view-view": "Rǣdan",
-       "vector-view-viewsource": "Sēon fruman",
        "actions": "Fremmunga",
        "namespaces": "Namstedas",
        "variants": "Missenlīcnessa",
        "searchrelated": "gesibb",
        "searchall": "eall",
        "showingresults": "Īewan under oþ <b>$1</b> tōhīgunga onginnenda mid #<b>$2</b>.",
-       "showingresultsnum": "Under sind <b>$3</b> tóhígunga onginnende mid #<b>$2</b>.",
        "powersearch-legend": "Manigfeald sēcung",
        "powersearch-ns": "Sēcan in namstedum:",
        "search-external": "Ūtanweard sōcn",
index 9e3ce78..4a8a589 100644 (file)
        "qbmyoptions": "صفحاتي",
        "faq": "الأسئلة المتكررة",
        "faqpage": "Project:أسئلة متكررة",
-       "vector-action-addsection": "أضف موضوعا",
-       "vector-action-delete": "احذف",
-       "vector-action-move": "انقل",
-       "vector-action-protect": "احم",
-       "vector-action-undelete": "ألغ الحذف",
-       "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": "قائمة التصفح",
        "searchall": "الكل",
        "showingresults": "معروض بالأسفل {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} بدءا من رقم '''$2'''.",
        "showingresultsinrange": "معروض بالأسفل حتى {{PLURAL:$1|<strong>1</strong> نتيجة|<strong>$1</strong> نتائج}} في النطاق #<strong>$2</strong> إلى #<strong>$3</strong>.",
-       "showingresultsnum": "معروض بالأسفل {{PLURAL:$3|'''نتيجة واحدة'''|'''$3''' نتيجة}} بدءا من رقم'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|النتيجة '''$1''' من'''$3'''|النتائج '''$1 - $2''' من'''$3'''}} ل'''$4'''",
        "search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
        "powersearch-legend": "بحث متقدم",
        "movepagetalktext": "صفحة النقاش المرفقة سيتم نقلها كذلك، '''إلا في حالة''':\n* توجد صفحة نقاش غير فارغة تحت العنوان الجديد، أو\n* قمت بإزالة اختيار الصندوق بالأسفل.\n\nوفي هذه الحالات، يجب عليك نقل أو دمج محتويات الصفحة يدويا، إذا رغب في ذلك.",
        "movearticle": "انقل الصفحة:",
        "moveuserpage-warning": "'''تحذير: أنت على وشك نقل صفحة مستخدم. من فضلك لاحظ أن الصفحة وحدها سوف تنقل وأن المستخدم لن يعاد تسميته.'''",
-       "movecategorypage-warning": "<strong>تحذير:</strong> أنت على وشك نقل صفحة تصنيف. نرجو التنبه إلى أن ذلك سينقل الصفحة فقط و<em>لن</em>  يعاد تصنيف أي صفحة في التصنيف السابق إلى التصنيف الجديد.",
+       "movecategorypage-warning": "أنت على وشك نقل صفحة التصنيف إلى عنوان جديد؛ لن تنقل الصفحات المندرجة تحت التصنيف إلى العنوان الجديد.",
        "movenologintext": "يجب أن تكون مستخدماً مسجلاً وأن  [[Special:UserLogin|تسجل دخولك]] لكي تنقل صفحة.",
        "movenotallowed": "أنت لا تمتلك الصلاحية لنقل الصفحات.",
        "movenotallowedfile": "أنت لا تمتلك الصلاحية لنقل الملفات.",
        "tooltip-preferences-save": "احفظ التغييرات",
        "tooltip-summary": "أدخل ملخصا قصيرا",
        "common.css": "/* ستؤثر الأنماط المتراصة (CSS) المعروضة هنا على كل الواجهات */",
-       "monobook.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة مونوبوك */",
-       "vector.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة فكتور */",
        "print.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على ناتج الطباعة */",
        "noscript.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على المستخدمين الذين الجافاسكريبت لديهم معطلة */",
        "group-autoconfirmed.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على المستخدمين المؤكدين تلقائيا فقط */",
        "group-sysop.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على الإداريين فقط */",
        "group-bureaucrat.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على البيروقراطيين فقط */",
        "common.js": "/* الجافاسكريبت الموضوع هنا سيتم تحميله لكل المستخدمين مع كل تحميل للصفحة. */",
-       "monobook.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة مونوبوك */",
-       "vector.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة فكتور */",
        "group-autoconfirmed.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين المؤكدين تلقائيا فقط */",
        "group-bot.js": "/* أي جافاسكريبت هنا سيتم تحميلها للبوتات فقط */",
        "group-sysop.js": "/* أي جافاسكريبت هنا سيتم تحميلها للإداريين فقط */",
        "pageinfo-category-pages": "عدد الصفحات",
        "pageinfo-category-subcats": "عدد التصنيفات الفرعية",
        "pageinfo-category-files": "عدد الملفات",
-       "skinname-monobook": "مونوبوك",
-       "skinname-vector": "فكتور",
        "markaspatrolleddiff": "علم بعلامة المراجعة",
        "markaspatrolledtext": "علم هذه الصفحة بعلامة المراجعة",
        "markedaspatrolled": "علمت بعلامة المراجعة",
        "duplicate-defaultsort": "'''تحذير:''' مفتاح الترتيب الافتراضي \"$2\" يتجاوز مفتاح الترتيب الافتراضي السابق \"$1\".",
        "version": "نسخة",
        "version-extensions": "الامتدادات المثبتة",
+       "version-skins": "واجهات",
        "version-specialpages": "صفحات خاصة",
        "version-parserhooks": "خطاطيف المحلل",
        "version-variables": "المتغيرات",
        "version-antispam": "منع البريد المزعج",
-       "version-skins": "واجهات",
        "version-api": "إيه بي آي",
        "version-other": "أخرى",
        "version-mediahandlers": "متحكمات الميديا",
index 917f8c7..8d6b802 100644 (file)
        "qbmyoptions": "ܦܐܬܬ̈ܐ ܕܝܠܝ",
        "faq": "ܫܘܐܠ̈ܐ ܬܢܝ̈ܐ",
        "faqpage": "Project:ܫܘܐܠ̈ܐ ܬܢܝ̈ܐ",
-       "vector-action-addsection": "ܐܘܣܦ ܡܠܘܐܐ",
-       "vector-action-delete": "ܫܘܦ",
-       "vector-action-move": "ܫܢܝ",
-       "vector-action-protect": "ܛܪ",
-       "vector-action-undelete": "ܠܐ ܫܘܦ",
-       "vector-action-unprotect": "ܫܚܠܦ ܢܛܝܪܘܬܐ",
-       "vector-view-create": "ܒܪܝ",
-       "vector-view-edit": "ܫܚܠܦ",
-       "vector-view-history": "ܚܙܝ ܬܫܥܝܬܐ",
-       "vector-view-view": "ܩܪܝ",
-       "vector-view-viewsource": "ܚܙܝ ܡܒܘܥܐ",
        "actions": "ܥܒܕ̈ܐ",
        "namespaces": "ܚܩܠܬ̈ܐ",
        "variants": "ܡܫܬܚܠܦܢܘ̈ܬܐ",
        "searchrelated": "ܐܚܝܢܝ̈ܐ",
        "searchall": "ܟܠ",
        "showingresults": "ܚܘܘܝܐ ܠܬܚܬ {{PLURAL:$1|'''1''' ܦܠܛܐ|'''$1''' ܦܠܛ̈ܐ}} ܫܪܐ ܡܢ ܡܢܝܢܐ '''$2'''.",
-       "showingresultsnum": "ܚܘܘܝܐ ܠܬܚܬ {{PLURAL:$3|'''ܚܕ ܦܠܛܐ'''|'''$3''' ܦܠܛ̈ܐ}} ܫܪܐ ܡܢ ܡܢܝܢܐ '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|ܦܠܛܐ '''$1''' ܡܢ '''$3'''|ܦܠܛ̈ܐ '''$1 - $2''' ܡܢ '''$3'''}} ܠ'''$4'''",
        "search-nonefound": "ܠܝܬ ܦܠܛ̈ܐ ܐܘܝܢ̈ܐ ܠܗܢܐ ܒܨܝܐ.",
        "powersearch-legend": "ܒܨܝܐ ܡܬܩܕܡܢܐ",
index b6388e7..c8a3bf9 100644 (file)
        "qbmyoptions": "tañi nütramkawe",
        "faq": "Rumelfemkelu ramtun",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Püñamtun dungu",
-       "vector-action-delete": "Liftun",
-       "vector-action-move": "Wiñamün",
-       "vector-action-protect": "Nürüfkünun",
-       "vector-action-undelete": "Wüñoñamümün",
-       "vector-action-unprotect": "Kalekünun Nürüfkünun",
-       "vector-view-create": "Dewman",
-       "vector-view-edit": "Kümeelün",
-       "vector-view-history": "Pengelün rupañmael",
-       "vector-view-view": "Chillkatun",
-       "vector-view-viewsource": "Kimam chew küpan chi wirin",
        "actions": "Femün",
        "namespaces": "Üytun ñi wellin",
        "variants": "Kaleyelu",
        "searchmenu-exists": "'''Müley kiñe wülngiñ «[[:$1]]» pingelu feychi wiki mew'''",
        "searchmenu-new": "'''¡Llitun pakina «[[:$1]]» tüfachi wiki mew!'''",
        "searchprofile-articles": "Trokiñdungu wülngiñ",
-       "searchprofile-project": "Kellu wülngiñ ka Deumandungu wülngiñ",
        "searchprofile-images": "Fill dungu (adentun, dungun, fidew)",
        "searchprofile-everything": "Kom",
        "searchprofile-advanced": "Doy amul",
        "searchprofile-articles-tooltip": "kintun $1 mew",
-       "searchprofile-project-tooltip": "Kintun $1 mew",
        "searchprofile-images-tooltip": "Kintun eltukawün",
        "searchprofile-everything-tooltip": "Kintun kom trokiñdungu (ka konkülechi nütramkawe)",
        "searchprofile-advanced-tooltip": "Kintun Wünezulliñ üytun ñi wellin",
        "speciallogtitlelabel": "Chew ñi amuael (Üy):",
        "log": "Wirintukun",
        "allpages": "Fill wülngiñ",
-       "alphaindexline": "$1, $2 mew",
        "allarticles": "Fill wülngiñ",
        "allpagessubmit": "Pengelün",
        "categories": "Fill trokiñ",
index 954a997..b8eaf38 100644 (file)
        "qbmyoptions": "'Ṣ-Ṣefḫaṫ dyawli",
        "faq": "asaila kaytaawdo bzaf",
        "faqpage": "Project:asaila kaytaawdo",
-       "vector-action-addsection": "Zid topic",
-       "vector-action-delete": "Suprimi",
-       "vector-action-move": "Neqel",
-       "vector-action-protect": "Ḫami",
-       "vector-action-undelete": "rja lhadf",
-       "vector-action-unprotect": "Ḫiyed l-ḫimaya",
-       "vector-view-create": "Ĥṫareĝ",
-       "vector-view-edit": "Ĝedel",
-       "vector-view-history": "Ṫariĥ l-fiċyé",
-       "vector-view-view": "Qra",
-       "vector-view-viewsource": "Ċof l-masdar",
        "actions": "afaal",
        "namespaces": "Maḫel s-smiyyaṫ :",
        "variants": "lhja:",
        "diff-multi-manyusers": "({{PLURAL:$1|ṃoṛajaĝa waṣita wḫda|$1 dl-ṃoṛajaĝaṫ l-waṣita}} ṫaĝṫ kṫr mn $2 {{PLURAL:$2|l-mosṫĥdim|dl-mosṫĥdimin}} ma mbeyyna-ċ)",
        "searchresults": "N-Naṫa'ij dyal l-beḫṫ",
        "searchresults-title": "N-Naṫa'ij dyal l-beḫṫ ĝla \"$1\"",
-       "toomanymatches": "bzzaf dl-motabaqaṫ ṫrddaṫ, ċof ċi talab aĥor",
        "titlematches": "onwan sfha yotabiq",
        "textmatches": "neṣ sfha kaytabq",
        "notextmatches": "Ḫṫa ċi neṣ ma mlaqi mĝa dakċi li kaṫqelleb ĝlih",
        "searchmenu-exists": "'''ḫṫṫa ṣfḫa f-had l-wiki ma smiṫha \"[[:$1]]\".'''",
        "searchmenu-new": "'''ṣayb f-had l-wiki ṣfḫṫ \"[[:$1]]\"!'''",
        "searchprofile-articles": "sfht mohtawa",
-       "searchprofile-project": "sfhai dyal lmossada ol mchroa",
        "searchprofile-images": "media",
        "searchprofile-everything": "kolchi",
        "searchprofile-advanced": "motaqaddim",
        "searchprofile-articles-tooltip": "qllb f $1",
-       "searchprofile-project-tooltip": "qllb f $1",
        "searchprofile-images-tooltip": "qllb f tsawr",
        "searchprofile-everything-tooltip": "qlleb kolċi fl-moḫṫawa (ḫṫṫa ṣfaḫi n-niqaċ)",
        "searchprofile-advanced-tooltip": "qlleb ġi f-ċi nitaqaṫ",
        "search-interwiki-default": "N-Naṫija dyal $1:",
        "search-interwiki-more": "(z-zyada)",
        "search-relatedarticle": "mortabita",
-       "searcheverything-enable": "qlleb f-gaĝ n-nitaqaṫ",
        "searchrelated": "mortabita",
        "searchall": "kolċi",
        "showingresults": "mbyyena l-ṫḫṫ ḫṫṫa l-{{PLURAL:$3|'''1''' n-naṫija|'''$3''' d-nnaṫa'ij}} badya mn rqm '''$2'''.",
-       "showingresultsnum": "mbyyena l-ṫḫṫ {{PLURAL:$3|'''1''' n-naṫija|'''$3''' d-nnaṫa'ij}} badya mn rqm '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|n-naṫija '''$1''' mn '''$3'''|n-naṫa'ij '''$1 - $2''' mn '''$3'''}} l-'''$4'''",
        "search-nonefound": "ḫṫṫa naṫija ma bḫal ḫad t-talab.",
        "powersearch-legend": "Ṫeqlab ṣĝib",
        "allowemail": "mkn tlqa l'email mn mostakhdimin khrin",
        "prefs-searchoptions": "khiyarat lbaht",
        "prefs-namespaces": "Maḫel s-smiyyaṫ :",
-       "defaultns": "olla qlb f had dominat :",
        "default": "iftiradi",
        "prefs-files": "milffat",
        "prefs-custom-css": "personalisé CSS",
        "prefs-emailconfirm-label": "konfirmi l'email:",
        "youremail": "I-Méyl",
        "username": "smiṫ l-mosṫĥdim:",
-       "uid": "raqm lmostakhdim :",
        "prefs-memberingroups": "odw f  {{PLURAL:$1|mjmoaa|mjmoaat}}:",
        "prefs-registration": "wqt tasjil:",
        "yourrealname": "smiytk lhaqiqiya:",
        "all-logs-page": "kol sijillat laama",
        "logempty": "ḫṫṫa ċi madda ma mtabqa f-ssijill.",
        "allpages": "Ṣ-Ṣefḫaṫ kamlin",
-       "alphaindexline": "Men $1 ḫṫal $2",
        "nextpage": "sfha jaya ($1)",
        "prevpage": "Ṣ-Ṣefḫa li qbel ($1)",
        "allpagesfrom": "wrri ṣ-ṣfaḫi lli badyin mn:",
        "whatlinkshere-filters": "Filter",
        "blockip": "Bloké l-mosṫeĥdim",
        "blockip-legend": "Bloki l-mosṫeḫdim",
-       "ipadressorusername": "Ĝonwan IP ola smiyṫ l-mosṫeĥdim",
+       "ipaddressorusername": "Ĝonwan IP ola smiyṫ l-mosṫeĥdim",
        "ipbexpiry": "Ġayṫqada fe :",
        "ipbreason": "sabab:",
        "ipbcreateaccount": "Mneĝ ĥṫiraĝ ċi ḫsab",
        "file-info-png-looped": "mlfof",
        "newimages-legend": "Filter",
        "newimages-label": "smiyt lfichier olla chwiya mnno:",
-       "showhidebots": "($1 R-Robowaṫ)",
        "noimages": "walo maytchaf.",
        "ilsubmit": "Qelleb",
        "bydate": "hassab tarikh",
index 512f79f..e04983e 100644 (file)
        "qbmyoptions": "صفحاتى",
        "faq": "اسئله بتتسئل كتير",
        "faqpage": "Project:اسئله بتتسئل كتير",
-       "vector-action-addsection": "ضيف موضوع",
-       "vector-action-delete": "مسح",
-       "vector-action-move": "نقل",
-       "vector-action-protect": "حمايه",
-       "vector-action-undelete": "الغى المسح",
-       "vector-action-unprotect": "غير الحمايه",
-       "vector-view-create": "اعمل",
-       "vector-view-edit": "تعديل",
-       "vector-view-history": "استعراض التاريخ",
-       "vector-view-view": "قرايه",
-       "vector-view-viewsource": "استعراض المصدر",
        "actions": "أعمال",
        "namespaces": "النطاقات",
        "variants": "المتغيرات",
        "searchrelated": "مرتبطه",
        "searchall": "الكل",
        "showingresults": "القائمة دى بتعرض {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} من أول  رقم '''$2'''.",
-       "showingresultsnum": "معروض تحت {{PLURAL:$3|'''نتيجة واحدة'''|'''$3''' نتيجة}} من أول من رقم'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|النتيجه '''$1''' من'''$3'''|النتايج '''$1 - $2''' من'''$3'''}} ل'''$4'''",
        "search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
        "powersearch-legend": "تدوير متقدم",
        "tooltip-summary": "اكتب ملخص قصير",
        "interlanguage-link-title": "ل $1 – $2",
        "common.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على كل الواجهات */",
-       "monobook.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمى واجهة مونوبوك */",
-       "vector.css": "/* CSS اللى هنا حتأثر على اليوزرز اللى بيستخدموا واجهة فكتور */",
        "print.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على ناتج الطباعة */",
        "common.js": "/*  أى جافاسكريبت  هناح يتحمل لكل اليوزرز مع كل تحميل للصفحة. */",
-       "monobook.js": "/* أى جافاسكريبت هنا ح تتحمل لليوزرز اللى بيستعملو واجهة مونوبوك */",
-       "vector.js": "/* اى جافاسكريبت هنا حتتحمل لكل يوزر بيستخدم واجهة فكتور */",
        "anonymous": "{{PLURAL:$1|يوزر مجهول|يوزرز مجهولين}} ل {{SITENAME}}",
        "siteuser": "يوزر {{SITENAME}} $1",
        "anonuser": "{{SITENAME}} يوزر مجهول $1",
        "spam_reverting": "ترجيع آخر نسخة مافيهاش لينكات لـ $1",
        "spam_blanking": "كل النسخ فيها لينكات ل $1، فضيها",
        "simpleantispam-label": "اختبار انتي-سبام.\n'''ماتعبيش''' دا!",
-       "skinname-monobook": "مونوبوك",
        "markaspatrolleddiff": "علم عليها انها متراجعة",
        "markaspatrolledtext": "علم على المقاله دى إنها متراجعة",
        "markedaspatrolled": "اتعلم عليها متراجعة",
index 33514cf..1607c1f 100644 (file)
        "qbmyoptions": "মোৰ পৃষ্ঠাসমূহ",
        "faq": "সততে উদিত প্ৰশ্নসমূহ (FAQ)",
        "faqpage": "Project:সততে উদিত প্ৰশ্নসমূহ",
-       "vector-action-addsection": "বিষয় যোগ",
-       "vector-action-delete": "বিলোপ কৰক",
-       "vector-action-move": "স্থানান্তৰ কৰক",
-       "vector-action-protect": "সুৰক্ষিত কৰক",
-       "vector-action-undelete": "পুনৰুদ্ধাৰ কৰক",
-       "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": "সা-সঁজুলি",
        "searchrelated": "সম্পৰ্কিত",
        "searchall": "সকলো",
        "showingresults": "তলত #'''$2'''ৰ পৰা {{PLURAL:$1|'''1''' ফলাফল|'''$1''' ফলাফল}} দেখুওৱা হৈছে।",
-       "showingresultsnum": "তলত #'''$2'''ৰ পৰা {{PLURAL:$3|'''1''' ফলাফল|'''$3'''ফলাফল}} দেখুওৱা হৈছে ।",
        "showingresultsheader": "'''$4'''ৰ বাবে {{PLURAL:$5|'''$3''' ৰ '''$1''' ফলাফল| '''$3''' ৰ '''$1 - $2''' ফলাফলসমূহ}}",
        "search-nonefound": "এই অনুসন্ধানৰ কোনো ফলাফল নাই ।",
        "powersearch-legend": "শক্তিশালী সন্ধান",
        "listgrouprights-removegroup-self-all": "নিজৰ একাউণ্টৰপৰা সকলো গোট আঁতৰাওক",
        "listgrouprights-namespaceprotection-header": "নামস্থান নিষেধাজ্ঞাসমূহ",
        "listgrouprights-namespaceprotection-namespace": "নামস্থান",
+       "trackingcategories-nodesc": "কোনো বিৱৰণ উপলব্ধ নহয়।",
+       "trackingcategories-disabled": "শ্ৰেণী নিষ্ক্ৰিয় হৈ আছে",
        "mailnologin": "পাওঁতাৰ ঠিকনা নাই",
        "mailnologintext": "আন সদস্যক ই-মেইল পঠিয়াবলৈ আপুনি [[Special:UserLogin|লগ্‌ ইন]] কৰিব লাগিব আৰু আপোনাৰ [[Special:Preferences|পছন্দসমূহত]] এটা বৈধ ই-মেইল ঠিকনা থাকিব লাগিব ।",
        "emailuser": "এই সদস্যজনলৈ ই-মেইল পঠিয়াওক",
        "watchnologin": "প্ৰৱেশ কৰা নাই",
        "addwatch": "লক্ষ্য-তালিকাত অন্তৰ্ভুক্ত কৰক",
        "addedwatchtext": "আপোনাৰ [[Special:Watchlist|লক্ষ্য তালিকাত ]] \"[[:$1]]\" পৃষ্ঠাটো অন্তৰ্ভুক্ত কৰা হ'ল।\nভৱিষ্যতে এই পৃষ্ঠা বা ইয়াৰ আলোচনা পৃষ্ঠাত হোৱা সাল-সলনি আপুনি আপোনাৰ লক্ষ্য তালিকাত দেখিব।",
+       "addedwatchtext-short": " \"$1\" পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাত যোগ কৰা হৈছে।",
        "removewatch": "লক্ষ্য-তালিকাৰ পৰা আঁতৰাওক",
        "removedwatchtext": "\"[[:$1]]\" পৃষ্ঠাটো [[Special:Watchlist|আপোনাৰ লক্ষ্য-তালিকা]]ৰ পৰা আঁতৰোৱা হৈছে ।",
+       "removedwatchtext-short": "\"$1\" পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাৰ পৰা আঁতৰোৱা হৈছে।",
        "watch": "চকু ৰাখক",
        "watchthispage": "এই পৃষ্ঠাটো লক্ষ্য কৰক",
        "unwatch": "চকু দিব নালাগে",
        "unwatchthispage": "চকু দিয়া বন্ধ কৰক",
        "notanarticle": "সমল পৃষ্ঠা নহয়",
        "notvisiblerev": "অন্য কোনো সদস্যই কৰা সংশোধনী বিলোপ কৰা হৈছে",
-       "watchlist-details": "à¦\86লà§\8bà¦\9aনা à¦ªà§\83ষà§\8dঠাসমà§\82হ à¦²à§\87à¦\96ত à¦¨à¦§à§°à¦¿ {{PLURAL:$1|$1 à¦\9fা à¦ªà§\83ষà§\8dঠা}} à¦\86পà§\8bনাৰ à¦²à¦\95à§\8dষà§\8dয-তালিà¦\95াত à¦\86à¦\9bà§\87 ।",
+       "watchlist-details": "à¦\86লà§\8bà¦\9aনা à¦ªà§\83ষà§\8dঠাসমà§\82হ à¦¬à§\87লà§\87à¦\97à¦\95à§\88 à¦²à§\87à¦\96ত à¦¨à¦§à§°à¦¿ {{PLURAL:$1|$1 à¦\9fা à¦ªà§\83ষà§\8dঠা}} à¦\86পà§\8bনাৰ à¦²à¦\95à§\8dষà§\8dয-তালিà¦\95াত à¦\86à¦\9bà§\87।",
        "wlheader-enotif": "ইমেইল জাননী সক্ৰিয় কৰা হৈছে।",
        "wlheader-showupdated": "আপোনাৰ শেষ পৰিদৰ্শনৰ পিছত সলনি হোৱা পৃষ্ঠাসমূহ '''গাঢ়''' আখৰত দেখুওৱা হৈছে।",
+       "wlnote2": "$2, $3 অনুসাৰে শেষ {{PLURAL:$1|ঘণ্টাৰ|<strong>$1</strong> ঘণ্টাৰ}} সালসলনি তলত দিয়া হৈছে।",
        "wlshowlast": "যোৱা $1 ঘণ্টা $2 দিন $3 চাওক",
        "watchlist-options": "লক্ষ্য-তালিকা পছন্দসমূহ",
        "watching": "চকু দিয়া হৈছে.....",
        "duplicate-defaultsort": "'''সাৱধান!''' পূৰ্বনিৰ্ধাৰিত ক্ৰমসূচক \"$2\"-এ আগৰ ক্ৰমসূচক \"$1\"ক বিস্থাপিত কৰিছে।",
        "version": "সংস্কৰণ",
        "version-extensions": "ইন্‌ষ্টল কৰা এক্সটেনচনসমূহ",
+       "version-skins": "আৱৰণ",
        "version-specialpages": "বিশেষ পৃষ্ঠাসমূহ",
        "version-parserhooks": "পাৰ্চাৰ হুক",
        "version-variables": "চলকসমূহ",
        "version-antispam": "স্পাম প্ৰতিৰোধ",
-       "version-skins": "আৱৰণ",
        "version-other": "অন্য",
        "version-mediahandlers": "মাধ্যম ব্যৱস্থাপকসমূহ",
        "version-hooks": "হুকসমূহ",
index 4b828ed..53e2e7b 100644 (file)
        "qbmyoptions": "Les mios páxines",
        "faq": "EMF (entrugues más frecuentes)",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Amestar seición",
-       "vector-action-delete": "Desaniciar",
-       "vector-action-move": "Treslladar",
-       "vector-action-protect": "Protexer",
-       "vector-action-undelete": "Restaurar",
-       "vector-action-unprotect": "Camudar la proteición",
-       "vector-view-create": "Crear",
-       "vector-view-edit": "Editar",
-       "vector-view-history": "Ver historial",
-       "vector-view-view": "Lleer",
-       "vector-view-viewsource": "Ver fonte",
        "actions": "Aiciones",
        "namespaces": "Espacios de nome",
        "variants": "Variantes",
        "searchall": "toos",
        "showingresults": "Abaxo {{PLURAL:$1|amuésase '''un''' resultáu|amuésense '''$1''' resultaos}}, entamando col #'''$2'''.",
        "showingresultsinrange": "Más abaxo s'{{PLURAL:$1|amuesa|amuesen}} fasta {{PLURAL:$1|<strong>1</strong> resultáu|<strong>$1</strong> resultaos}} nel rangu ente #<strong>$2</strong> y #<strong>$3</strong>.",
-       "showingresultsnum": "Abaxo {{PLURAL:$3|amuésase '''un''' resultáu|amuésense '''$3''' resultaos}}, entamando col #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultáu '''$1''' de '''$3'''|Resultaos '''$1 - $2''' de '''$3'''}} pa '''$4'''",
        "search-nonefound": "Nun hebo resultaos que casaren cola consulta.",
        "powersearch-legend": "Busca avanzada",
        "tooltip-summary": "Escribi un resume curtiu",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* Los CSS allugaos equí s'aplicarán a tolos aspeutos */",
-       "monobook.css": "/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Monobook */",
-       "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-autoconfirmed.css": "/* Los CSS allugaos equí afeutarán a los usuarios autoconfirmaos namái */",
        "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. */",
-       "monobook.js": "/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu MonoBook */",
-       "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 */",
        "group-sysop.js": "/* Cualesquier JavaScript que tea equí se cargará pa los sysops namái */",
index a93e2de..7956331 100644 (file)
        "qbmyoptions": "Jinaf ikatcukseem",
        "faq": "NEB",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Loplekura va detce",
-       "vector-action-delete": "Sulara",
-       "vector-action-move": "Arrundara",
-       "vector-action-protect": "Nendara",
-       "vector-view-create": "Redura",
-       "vector-view-edit": "Betara",
-       "vector-view-history": "Wira va izvot",
-       "vector-view-view": "Belira",
-       "vector-view-viewsource": "klitawira",
        "actions": "Tegira",
        "namespaces": "Yoltxo",
        "variants": "Arapeniks",
        "editundo": "dimaskira",
        "searchresults": "Aneyaradanekseem",
        "searchresults-title": "Aneyaratrasiks va \"$1\"",
-       "toomanymatches": "Slik trasiks, vay va amidafa aneyara yawal",
        "titlematches": "Vadjesaceem vanmia vergumvelteem",
        "textmatches": "Vadjesaceem ko krenteem",
        "notextmatches": "Mek krentvergumvelt ruldas va erune",
        "searchmenu-exists": "'''Ixam bu yoltkirafu gu \"[[:$1]]\" dene bati wiki.'''",
        "searchmenu-new": "'''Redura va bu \"[[:$1]]\" den bati wiki!'''",
        "searchprofile-articles": "Teliz",
-       "searchprofile-project": "Pomarabu ik abdumimaksbu",
        "searchprofile-images": "Jonkanaca",
        "searchprofile-everything": "Kotcoba",
        "searchprofile-advanced": "Lof",
        "searchprofile-articles-tooltip": "Aneyara ko $1",
-       "searchprofile-project-tooltip": "Aneyara ko $1",
        "searchprofile-images-tooltip": "Aneyara va iyeltak",
        "searchprofile-everything-tooltip": "Aneyara va kotaf cek (don prilarabu)",
        "searchprofile-advanced-tooltip": "Aneyara ko pilkovafo yoltxo",
        "search-interwiki-default": "$1 trasiks :",
        "search-interwiki-more": "(loon)",
        "search-relatedarticle": "Skedaf",
-       "searcheverything-enable": "Aneyara ko koto yoltxo",
        "searchrelated": "skedaf",
        "searchall": "kot",
        "showingresults": "Vlevefa nedira va {{PLURAL:$1|'''1''' trasiks|'''$1''' trasiks}} dem #'''$2''' toza.",
-       "showingresultsnum": "Nedira va '''$3''' trasiks male #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Trasiks '''$1''' ke '''$3'''|Trasiks '''$1 - $2''' ke '''$3'''}} icde '''$4'''",
        "search-nonefound": "Mek trasiks vas kucilara",
        "powersearch-legend": "Aneyapara",
        "allowemail": "Tutegirara va e-mail staksara mal ar favesik",
        "prefs-searchoptions": "Aneyarikatcura",
        "prefs-namespaces": "Yoltxo",
-       "defaultns": "Omavon, aneyara ko batyono yoltxo :",
        "default": "omava",
        "prefs-files": "Iyeltak se",
        "youremail": "Jinafe internetmane",
        "username": "Favesikyolt:",
-       "uid": "Favesikaf ID :",
        "prefs-memberingroups": "Bewik ke {{PLURAL:$1|lospa|lospa}}:",
        "yourrealname": "Rinaf ageltaf yolt*",
        "yourlanguage": "Walasikiava",
        "logempty": "Mek trasiks koe \"log\" iyeltak.",
        "log-title-wildcard": "Aneyara va vergumvelt dem mana toza",
        "allpages": "Kotaf bueem",
-       "alphaindexline": "male $1 kale $2",
        "nextpage": "Radimebu ($1)",
        "prevpage": "($1) abdifu bu",
        "allpagesfrom": "Nedira va bu se male",
index 331f5e2..6954042 100644 (file)
        "qbmyoptions": "Mənim səhifələrim",
        "faq": "TSS",
        "faqpage": "Project:TSS",
-       "vector-action-addsection": "Mövzu əlavə et",
-       "vector-action-delete": "Sil",
-       "vector-action-move": "Adını dəyişdir",
-       "vector-action-protect": "Mühafizə et",
-       "vector-action-undelete": "Bərpa et",
-       "vector-action-unprotect": "Mühafizəni kənarlaşdır",
-       "vector-view-create": "Yarat",
-       "vector-view-edit": "Redaktə",
-       "vector-view-history": "Tarixçəyə bax",
-       "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",
        "searchrelated": "əlaqəli",
        "searchall": "bütün",
        "showingresults": "Aşağıda #'''$2''' ilə başlayan {{PLURAL:$1|'''$1'''-ə qədər}} nəticə göstərilib.",
-       "showingresultsnum": "Aşağıda #'''$2''' ilə başlayan {{PLURAL:$3|'''$3'''}} nəticə göstərilib.",
        "showingresultsheader": "'''$4''' üçün {{PLURAL:$5|'''$3'''-dən '''$1''' nəticə|'''$3'''-dən '''$1 - $2''' nəticə}}",
        "search-nonefound": "Sorğunuza uyğun nəticə tapılmadı.",
        "powersearch-legend": "Təkmil axtarış",
        "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 */",
-       "monobook.css": "/* Burada yerləşən CSS Monobook 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 */",
-       "monobook.js": "/* Burada MonoBook 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 */",
        "group-sysop.js": "/* Burada istənilən JavaScript yalnız idarəçilər üçün yüklənəcək */",
        "pageinfo-redirectsto": "İstiqamətləndirmə",
        "pageinfo-redirectsto-info": "məlumat",
        "pageinfo-contentpage-yes": "Bəli",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Yoxlanıldı",
        "markaspatrolledtext": "Səhifəni patrullanmış kimi işarələ",
        "markedaspatrolled": "Yoxlanıldı",
index aa3ef16..7361191 100644 (file)
        "qbmyoptions": "صحیفه‌‌لریم",
        "faq": "چوْخ سوْروشولان سوْال‌لار",
        "faqpage": "Project:چوْخ سوْروشولان سوْال‌لار",
-       "vector-action-addsection": "قوْنو آرتیر",
-       "vector-action-delete": "سیل",
-       "vector-action-move": "داشی",
-       "vector-action-protect": "قوْرو",
-       "vector-action-undelete": "سیلمگی قایتار",
-       "vector-action-unprotect": "قوْروماغی دَییشدیر",
-       "vector-view-create": "یارات",
-       "vector-view-edit": "دَییشدیر",
-       "vector-view-history": "گئچمیشه باخ",
-       "vector-view-view": "اوْخو",
-       "vector-view-viewsource": "قایناغا باخ",
        "actions": "چالیشمالار",
        "namespaces": "آد فضالاری",
        "variants": "واریانتلار",
        "searchrelated": "ایلگیلی",
        "searchall": "بوتون",
        "showingresults": "آشاغیدا نومره '''$2'''-دن باشلایان {{PLURAL:$1|'''بیر'''|'''$1'''}} سونوجا قدر گؤستریلیر.",
-       "showingresultsnum": "آشاغیدا نومره '''$2'''-دن باشلایان {{PLURAL:$3|'''بیر'''|'''$3'''}} سونوج گؤستریلیر.",
        "showingresultsheader": "'''$4''' اوچون {{PLURAL:$5|'''$3'''-دن '''$1''' نتیجه|'''$3'''-دن '''$1-$2''' نتیجه}}",
        "search-nonefound": "سیزین سورونوزا اویغون نتیجه تاپیلمادی.",
        "powersearch-legend": "گلیشمیش آختاریش",
index 65c22ab..4f28db5 100644 (file)
        "qbmyoptions": "Биттәрем",
        "faq": "ЙБҺ",
        "faqpage": "Project:ЙБҺ",
-       "vector-action-addsection": "Тема өҫтәргә",
-       "vector-action-delete": "Юйырға",
-       "vector-action-move": "Исемен үҙгәртергә",
-       "vector-action-protect": "Һаҡларға",
-       "vector-action-undelete": "Тергеҙергә",
-       "vector-action-unprotect": "Һаҡлауҙы үҙгәртергә",
-       "vector-view-create": "Яһау",
-       "vector-view-edit": "Үҙгәртергә",
-       "vector-view-history": "Тарихты ҡарау",
-       "vector-view-view": "Уҡыу",
-       "vector-view-viewsource": "Сығанаҡты ҡарарға",
        "actions": "Хәрәкәт",
        "namespaces": "Исем арауыҡтары",
        "variants": "Варианттар",
        "difference-missing-revision": "$1 айырмаһының {{PLURAL:$2|1=бер өлгөһө|$2 өлгөһө}} табылманы.\n\nБыл хәл, ғәҙәттә, юйылған биткә яһалған айырма һылтанмаһының ваҡыты үтеүенән барлыҡҡа килә.\nТулыраҡ мәғлүмәт өсөн ҡарағыҙ: [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} юйыу яҙмалары].",
        "searchresults": "Эҙләү һөҙөмтәләре",
        "searchresults-title": "«$1» өсөн эҙләү һөҙөмтәләре",
-       "toomanymatches": "Бигерәк күп тап килеүҙәр табылды, зинһар, башҡа һорау яҙып ҡарағыҙ",
        "titlematches": "Бит исемдәрендә тап килеүҙәр",
        "textmatches": "Бит эстәлегендә тап килеүҙәр",
        "notextmatches": "Тап килгән бит табылманы",
        "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> һөҙөмтәнән башлап <strong>$1</strong> {{PLURAL:$1|һөҙөмтә}} күрһәтелгән.",
-       "showingresultsnum": "Түбәндә №&nbsp;<strong>$2</strong> һөҙөмтәнән башлап <strong>$3</strong> {{PLURAL:$3|һөҙөмтә}} күрһәтелгән.",
        "showingresultsheader": "'''$4''' өсөн '''$3''' һөҙөмтәнән {{PLURAL:$5|1='''$1''' һөҙөмтә|'''$1 - $2''' арауығындағы һөҙөмтәләр}}",
        "search-nonefound": "Был һорауға яуап биреүсе һөҙөмтәләр табылманы.",
        "powersearch-legend": "Киңәйтелгән эҙләү",
        "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": "Һеҙҙең ысын исемегеҙ (*)",
        "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-modern": "Заманса",
-       "skinname-vector": "Векторлы",
        "markaspatrolleddiff": "Тикшерелгән, тип билдәләргә",
        "markaspatrolledtext": "Бил битте тикшерелгән, тип билдәләргә",
        "markedaspatrolled": "Тикшерелгән тип билдәнгән",
index c0e0311..78390b6 100644 (file)
@@ -22,7 +22,7 @@
        "tog-hidepatrolled": "Kontroilirde Änderrungen in dé „Létzten Änderrungen“ ausblenden",
        "tog-newpageshidepatrolled": "Kóntróilirde Seiten auf da Listen „Neiche Seiten“ vaberng",
        "tog-extendwatchlist": "Daweiterde Beówochtungslisten",
-       "tog-usenewrc": "Daweiterde Dorstöung voh d' létzden Änderrungen (JavaScript werd braucht)",
+       "tog-usenewrc": "Endarunga vo \"Lezde Endarunga\" und vo \"Mei Beobochtd\" noch Seitn gruppian",
        "tog-numberheadings": "Ywerschriften autómaatisch nummerrirn",
        "tog-showtoolbar": "Beorweiten-Werkzeigleisten åzoang (JavaScript werd braucht)",
        "tog-editondblclick": "Seiten mid am Dóppedrucker beorweiden (JavaScript werd braucht)",
        "qbmyoptions": "Meine Seiten",
        "faq": "Oft gstejte Frong",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "An Obschnitt dazua doa",
-       "vector-action-delete": "Leschn",
-       "vector-action-move": "Vaschiabm",
-       "vector-action-protect": "Schitzn",
-       "vector-action-undelete": "Wiederherstön",
-       "vector-action-unprotect": "freigeem",
-       "vector-view-create": "Aufbaun",
-       "vector-view-edit": "Werkln",
-       "vector-view-history": "Gschicht oschaugn",
-       "vector-view-view": "Lesn",
-       "vector-view-viewsource": "Quejtext ozoagn",
        "actions": "Aktiona",
        "namespaces": "Namasramm",
        "variants": "Variantn",
        "create-this-page": "Seiten erstön",
        "delete": "Leschn",
        "deletethispage": "De Seiten leschen",
-       "undelete_short": "{{PLURAL:$1|1 Version|$1 Versionen}} wiederherstön",
+       "undelete_short": "{{PLURAL:$1|1 Version|$1 Versiona}} wiedaheastäin",
        "viewdeleted_short": "{{PLURAL:$1|Oah geléschde Versión|$1 geléschde Versiónen}} åschauh",
        "protect": "Schitzn",
        "protect_change": "endan",
        "talkpage": "De Seiten bsprecher",
        "talkpagelinktext": "Dischkrian",
        "specialpage": "Speziaalseiten",
-       "personaltools": "Mei Werkzeig",
+       "personaltools": "Mei Weakzeig",
        "postcomment": "Neicher Obschnit",
        "articlepage": "Seiteninhoid åzoang",
        "talk": "Dischkrian",
        "mainpage-description": "Hoamseitn",
        "policy-url": "Project:Richtlinien",
        "portal": "Autornportal",
-       "portal-url": "Project:Autornportal",
+       "portal-url": "Project:AutornPortal",
        "privacy": "Datnschutz",
        "privacypage": "Project:Datnschutz",
        "badaccess": "Koane ausreichenden Rechtt",
        "nologinlink": "A neichs Nutzakonto olegn",
        "createaccount": "Nutzakonto olegn",
        "gotaccount": "Hosd scho a Nutzakonto? '''$1'''.",
-       "gotaccountlink": "Omejdn",
+       "gotaccountlink": "Eilogga",
        "userlogin-resetlink": "Hosd de Datn zan Eilogga vagessn?",
        "createaccountmail": "per E-Mail",
        "createaccountreason": "Grund",
        "hiddencategories": "De Seitn is in {{PLURAL:$1|a vasteckde Kategorie|$1 vasteckde Kategorina}} eisortiad:",
        "nocreate-loggedin": "Du host koah Berechtigung, neiche Seiten z' erstön.",
        "permissionserrors": "Berechtigungsfeeler",
-       "permissionserrorstext": "Du bist néd berechtigt, dé Akzión auszfyrn.  {{PLURAL:$1|Grund|Grynd}}:",
-       "permissionserrorstext-withaction": "Du host koa Berechtigung ned, dass de $2.\n{{PLURAL:$1|Grund|Grind}}:",
+       "permissionserrorstext": "Du hosd koa Recht, des z doa. {{PLURAL:$1|Grund|Grind}}:",
+       "permissionserrorstext-withaction": "Du hosd aus {{PLURAL:$1|foigendm Grund|foigendn Grind}} koa Recht ned, $2:",
        "recreate-moveddeleted-warn": "'''Obocht: Du legst a Seitn o, wo scho friaa glescht worn is.'''\n\nBittschee ibaleg da genau, obs sinnvoi is de Seitn ozlegn.\nDes Lesch- und Vaschiab-Logbuach dazua findsd do:",
        "moveddeleted-notice": "De Seitn do is glescht worn. Es foigt a Auszug ausm Lesch- und Vaschiabungs-Logbuch vo dea Seitn.",
        "edit-conflict": "Konflikt ban Beorwaten.",
        "post-expand-template-inclusion-warning": "Obocht: De Gress vo eibundne Vorlong is z gross.\nA poar Vorlogn wean ned eibundn.",
        "post-expand-template-inclusion-category": "Seitn, wo d Gress vo de eibundnan Vorlogn ibaschrittn is",
        "post-expand-template-argument-warning": "'''Obocht:''' De Seitn enthoit mindastns oa Argument in da Vorlog, wo expandiat z grouss is. \nDe Parameta wean ignoriad.",
-       "post-expand-template-argument-category": "Seiten, dé ignorirde Vurlongargumentt enthoiden",
+       "post-expand-template-argument-category": "Seitn mid ignoriadn Voalognparametan",
        "undo-summary": "Änderrung $1 voh [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussión]]) ryckgängig gmocht.",
        "cantcreateaccounttitle": "Benutzerkonto kå ned erstöd wern",
        "viewpagelogs": "Logbiacha fia de Datei ozoagn",
        "doubleredirects": "Doppede Weiderloatungen",
        "brokenredirects-edit": "werkeln",
        "brokenredirects-delete": "léschen",
-       "withoutinterwiki": "Seiten óne an Link zua åndre Sproochen",
+       "withoutinterwiki": "Seitn ohne Sprochlinks",
        "withoutinterwiki-summary": "D' foiganden Seiten valinken néd auf a åndre Sproochversion",
-       "withoutinterwiki-legend": "Präfix",
+       "withoutinterwiki-legend": "Prefix",
        "withoutinterwiki-submit": "Zoag",
        "fewestrevisions": "Seiten mid d' weenigsten Versiónen",
-       "nbytes": "$1 {{PLURAL:$1|Byte}}",
+       "nbytes": "$1 {{PLURAL:$1|Byte|Bytes}}",
        "ncategories": "$1 {{PLURAL:$1|Kategorie|Kategorien}}",
        "nlinks": "{{PLURAL:$1|a Link|$1 Links}}",
        "nmembers": "{{PLURAL:$1|1 Eindrog|$1 Eindreg}}",
        "mostcategories": "Seiten mid dé haiffigsten Kategorien",
        "mostimages": "Haiffig brauchde Daatein",
        "mostrevisions": "Seiten mid d' haiffigsten Versiónen",
-       "prefixindex": "Olle Seien (mit Präfix)",
+       "prefixindex": "Olle Seitn (mit Prefix)",
        "shortpages": "Kurze Seiten",
        "longpages": "Långe Seiten",
        "deadendpages": "Néd valinkende Seiten",
        "duplicate-defaultsort": "Obocht: Da Sortiasschlossl \"$2\" ibaschreibt in friaan Schlissl \"$1\".",
        "version": "Versión",
        "version-extensions": "Installierde Daweiterrungen",
+       "version-skins": "Benutzerówerflächen",
        "version-specialpages": "Speziaalseiten",
        "version-parserhooks": "Parser-Hooks",
        "version-variables": "Variaablen",
        "version-antispam": "Spamschutz",
-       "version-skins": "Benutzerówerflächen",
        "version-other": "Ånders",
        "version-mediahandlers": "Meediennutzung",
        "version-hooks": "Schnidstön ''(Hooks)''",
index 8e14b73..dec808c 100644 (file)
        "qbmyoptions": "منی صفحات",
        "faq": "ب.ج.س",
        "faqpage": "Project:ب.ج.س",
-       "vector-action-addsection": "هور کتن عنوان",
-       "vector-action-delete": "زورگ",
-       "vector-action-move": "جاه په جاه",
-       "vector-action-protect": "حفاظت",
-       "vector-action-undelete": "ترینگ",
-       "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": "منوء ناویگ",
        "post-expand-template-argument-category": "صفحات شامل حذفی آرگومان آن تمپلت انت",
        "parser-template-loop-warning": "تمپلت حقه ای درگبزگ بوت: [[$1]]",
        "parser-template-recursion-depth-warning": "محدودیت عمق تررگ رد بوت ($1)",
+       "language-converter-depth-warning": "چه محدودیت عمق زبانانی کارمرز گؤست ات ($1)",
+       "node-count-exceeded-category": "پیج انی که گیش چه مکسیمم تعداد گره بیتگ انت",
+       "node-count-exceeded-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)",
+       "converter-manual-rule-error": "ارور مان قوانین مبدل دستی زبان",
        "undo-success": "اصلاح برگشت نه بیت. لطفا مقایسه جهلگینء کنترل کنیت په تایید شی که شی هما انت که شما لوٹیت، و بعدا تغغیرات جهلی په تمام کتن بر نگردگ اصلاح ذخیره کنیت.",
        "undo-failure": "اصلاح بر نرگردیت په خاطر تضاد میان اصلاحاتی",
        "undo-norev": "اصلاح نه تونیت برگردیت په چی که آی وجود نهنت یا حذف بوتت.",
+       "undo-nochange": "چوش که پیداگ انت ویرایش مان انیگء باطل بوتگ انت.",
        "undo-summary": "بازبینی برگردین $1 گون [[Special:مشارکتان/$2|$2]] ([[User talk:$2|گپ]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]])",
+       "undo-summary-username-hidden": "بی اثر کتن نسخهٔ $1 گون یک نامالومین کاربرء واسته",
        "cantcreateaccounttitle": "نه نونیت حساب شرکنت",
        "cantcreateaccount-text": "شرکتن حساب چی ای آدرس آی پی ('''$1''') محدود بوتت توسط [[User:$3|$3]].\n\nدلیلی داتگین توسط $3  شی انت ''$2''",
+       "cantcreateaccount-range-text": "اکانتء اڈ کتن چه آی پی ادرسء مان ائ هوار '''$1'''، که شمئی آی پی ('''$4''') مان آئی توکاانت، گون [[User:$3|$3]] متوقف بیتگ انت.\nدرشان کتگین دلیل گون $3، $2 انت.",
        "viewpagelogs": "آمار ای صفحه بچار",
        "nohistory": "په ای صفحه تاریح اصلاح نیست.",
        "currentrev": "هنوکین بازبینی",
        "currentrev-asof": "هنوکین بازبینی چه $1",
        "revisionasof": "بازبینی په عنوان $1",
-       "revision-info": "بازبÛ\8cÙ\86Û\8c Ù¾Ù\87 Ø¯Ø§Ø¨ $1 ØªÙ\88سط $2",
+       "revision-info": "تارÛ\8cخء Ù\86سخÙ\87 $1 Ú¯Ù\88Ù\86 {{GENDER:$6|$2}}$7",
        "previousrevision": "←پیش ترین نسخه",
        "nextrevision": "نوکین بازبینی→",
        "currentrevisionlink": "هنوکین بازبینی",
        "page_last": "اهرین",
        "histlegend": "بخش تفاوت: په مقایسه کتن نسخه یان گزینه انتخاب کنیت اینتر یا دکمه بجن.<br />\nLegend: (cur) = تفاوتان گون هنوکین نسخه,\n(last) = تفاوت گون بعدی نسخه, M = هوردین  اصلاح.",
        "history-fieldset-title": "گردگ تاریح",
-       "histfirst": "اولین",
-       "histlast": "اهرین",
+       "history-show-deleted": "تهنا هزپ بیتگ انت",
+       "histfirst": "پیسریگ ترین",
+       "histlast": "نوکترین",
        "historysize": "({{PLURAL:$1|1 بایت|$1 بایت}})",
        "historyempty": "(هالیک)",
        "history-feed-title": "تاریح بازبینی",
        "history-feed-description": "تاریح بازبینی په ای صفحه ته ویکی",
        "history-feed-item-nocomment": "$1 ته $2",
        "history-feed-empty": "لوٹتگین صفحه موجود نهنت.\nشاید آی چه ویکی حذف بوتت یا نامی بدل بوتت.\nآزمایش کن[[Special:Search|گردگ ته ویکی]] په مربطین نوکین صفحات.",
-       "rev-deleted-comment": "(Ù\86ظر Ø²Ù\88رگ Ø¨Û\8cتت)",
+       "rev-deleted-comment": "(Ù\88Û\8cراÛ\8cشء Ø®Ù\84اصگ Ù\87زپ Ø¨Ù\88ت)",
        "rev-deleted-user": "(نام کاربری زورگ بیتت)",
        "rev-deleted-event": "(کار آمار زورگ بیتت)",
-       "rev-deleted-text-permission": "ای بازبینی صفحه چه آرشیو عمومی '''زورگ''' بیتت.\nشاید جزییاتی ته [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} حذف آمار]. بیت",
-       "rev-deleted-text-unhide": "ای اصلاح چه ای صفحه '''زورگ بوتت'''.\nممکن انت اطلاعات مرتبط گون آیی ءَ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاهگ حذف] بگندیت.\nشما په عنوان یک مدیر هنوچوش توایت اگر بلوٹیت [$1 ای نسخه را بچاریت].",
-       "rev-deleted-text-view": "ای بازبینی صفحه چه آرشیو عمومی '''زورگ''' بیتت.\nپه عنوان مدیر ته {{SITENAME}}  شما تونیت آیء بگنیت;\nشاید جزییاتی ته ببیت [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} آمار حذف].",
-       "rev-deleted-no-diff": "شما نه تونیت تفاوت ای نسخه بچارت په چی که یکی چه نسخ چه عمومی آرشیو '''زورگ''' بوتت.\nممکن انت [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاهگ حذف]  جزئیاتی ببیت.",
-       "rev-deleted-unhide-diff": "یکی چه ای دو نسخهٔ  '''حذف بوتت'''.\nممکن انت اطلاعات این شی باره [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاهگ حذف] موجود ببیت.\nشما په عنوان یک مدیر هنگت توانیت اگر بلوٹیت [$1 ای تفاوت را بچاریت].",
+       "rev-deleted-user-contribs": "[یوزرنام یانکه یانکه آی پی ادرس هزپ بیتگ انت  - ویرایش چیرداتگین مان هواربیتگان]",
+       "rev-deleted-text-permission": "ائ ویرایش چه ائ پیج '''هزپ بیتگ انت'''.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ] موجوت بیت انت.",
+       "rev-deleted-text-unhide": "ائ ویرایش چه ائ پیج '''هزپ بیتگ انت'''.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ] موجوت بیت انت.\nشما هنچوش اگان بلوٹ ات توان ات [$1 ائ نسخگء بچار ات].",
+       "rev-suppressed-text-unhide": "ائ ویرایش چه ائ پیج '''دیم داشت''' بوت.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} دیم داشتانی سیاهگ]. موجوت بیت انت.\nشما هنچوش اگان بلوٹ ات توان ات [$1 ائ نسخگء بچار ات].",
+       "rev-deleted-text-view": "ائ ویرایش چه ائ پیج '''هزپ بیتگ انت'''.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ]. موجوت بیت انت.",
+       "rev-suppressed-text-view": "ائ ویرایش چه ائ پیج '''دیم داشت''' بوت.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} دیم داشتانی سیاهگ]. موجوت بیت انت.",
+       "rev-deleted-no-diff": "ائ ویرایش چه ائ پیج '''هزپ بیتگ انت'''.\nبلکین اطلاعات گون آئی همگرنچء مان  [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ]. موجوت بیت انت.",
+       "rev-suppressed-no-diff": "شما نتوان ات ائ ٹگل بیتگانء بگند ات، پرچا که یکء چه نسخگ ان \"\"هزپ بیتگ انت\"\".",
+       "rev-deleted-unhide-diff": "یکء چه ائ دوئین نسخگ ان '''هزپ بیتگ انت'''.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/suppress|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،بازبینی مشخص موجود نهنت، یا شما تلاش کنیت هنوکین بازبینی پناه کنیت.",
        "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-suppress-text": "فرونشانی بایدن '''فقط''' په جهلگین موارد استفاده بیت:\n* اطلاعات نامناسب شخصی\n*: ''نشانی لوگ، شماره تلفن، شماره تامین اجتماعی و دگه.''",
+       "revdelete-text-text": "هزپ بیتگین نسخگ ان هنچوشء مان تاریخچگ گندگ بیت انت بلئی لهتء چه محتویات پر پهکینان پیش دارگ نه بنت.",
+       "revdelete-text-file": "هزپ بیتگین نسخگ ان هنچوشء مان تاریخچگ گندگ بیت انت بلئی لهتء چه محتویات پر پهکین کاربران پیش دارگ نه بنت.",
+       "logdelete-text": "هزپ بیتگین نسخگ ان هنچوشء مان سیاهگ ان گندگ بیت انت بلئی لهتء چه محتویات پر پهکینان پیش دارگ نه بنت.",
+       "revdelete-text-others": "ادگرین ماسٹران {{SITENAME}} اناگتء توان انت ائ چیرداتگین محتوا رء بگند انت ءُ چه همئ راهء هزپ بیتگانء واتر بکن انت، گیر چه ایش که دگرین محدودیتء ساتگ به بیت.",
+       "revdelete-confirm": "دزبندی انت تایید بکن ات پر ائ کارء لوٹء دلجمیء، که آئی رند ءُ پدء زانت ات ءُ ائ کارء همگرنچ گون [[{{MediaWiki:Policy-url}}|پالیسی]] گلائشء بئیت.",
+       "revdelete-suppress-text": "دیم داشت پیکن '''تهنا''' پر جهلیگین بابت ان کارمرز به بیت:\n* اطلاهاتء که بیت توهین به بنت\n* وتیگین نالوٹین اطلاهات\n*: ''گسء نشانیگ، فون نمبر، پجاریگین نشنال کد ءُ ادگر.''",
        "revdelete-legend": "تنظیم محدودیت آن دیستن",
-       "revdelete-hide-text": "Ù¾Ù\86اÙ\87 Ú©Ù\86 Ù\85تÙ\86 Ø¨Ø§Ø²Ø¨Û\8cÙ\86Û\8cØ¡",
+       "revdelete-hide-text": "Ù\86سخگÛ\8cÙ\86 ØªÚ©Ø³Øª",
        "revdelete-hide-image": "پناه کن فایل محتواء",
        "revdelete-hide-name": "پناه کن کار  و هدفء",
-       "revdelete-hide-comment": "پناه کن اصلاح نظرء",
-       "revdelete-hide-user": "پناه کن اصلاح کنوکء نام کاربری/آی پی",
+       "revdelete-hide-comment": "ادیتء خلاسگ",
+       "revdelete-hide-user": "ادیت کنوکین یوزرنام/آی‌پی ادرس",
        "revdelete-hide-restricted": "ای محدودیت آنء په مدیران سیستم و دگران بل",
+       "revdelete-radio-same": "(ٹگل مدئ)",
+       "revdelete-radio-set": "چیر بیتگین",
+       "revdelete-radio-unset": "چارگ بیت",
        "revdelete-suppress": "توقیف کن دیتاء چه مدیران سیستم و دگران",
        "revdelete-unsuppress": "بزور محدودیت آنء جه ترینتگین بازبینی آن",
        "revdelete-log": "دلیل:",
-       "revdelete-submit": "بÙ\84Û\8c Ø§Ù\88ر Ø§Ù\86تخابÛ\8c Ø¨Ø§Ø²Ø¨Û\8cÙ\86Û\8c",
-       "revdelete-success": "'''ظاهر بازبینی گون موفقیت تنظیم بوت.'''",
-       "revdelete-failure": "'''Ù¾Û\8cشدارگ Ù\86سخ Ù\82ابÙ\84 ØªÙ\86ظÛ\8cÙ\85 Ù\86Ù\87 Ø¨Û\8cتÙ\86.'''",
+       "revdelete-submit": "بÙ\87 Ø³Ø§Øª Ù\85اÙ\86 Ø¯Ø±Ú\86تگÛ\8cÙ\86 {{PLURAL:$1|Ù\86سخگ|Ù\86سخگ Ø§Ù\86}}",
+       "revdelete-success": "'''نسخگء بچار گون هیرء اپدیت بوت.'''",
+       "revdelete-failure": "'''Ù\86سخگاÙ\86Û\8c Ø¨Ú\86ار Ø§Ù¾Ø¯Û\8cت Ù\86Ù\87 Ø¨Û\8cت Ø§Ù\86ت:'''\n$1",
        "logdelete-success": "''''آمار ظاهر بیگ گون موفقیت تنظیم بوت.''''",
        "logdelete-failure": "'''پیدایی سیاه گان قابل تنظیم نهنت:'''\n$1",
        "revdel-restore": "عوض کن ظاهر بیگء",
        "pagehist": "تاریح صفحه",
        "deletedhist": "تاریح حذف بوت",
+       "revdelete-hide-current": "ارور مان آیتمء چیردارگ مان $2 ساهت $1: ائ نسخگ، آهرین سیاهگ انت ءُ چیردارگء نه بیت انت.",
+       "revdelete-show-no-access": "ارور مان آیتمء چیردارگ مان $2 ساهت $1: ائ نسخگ نشانیگء «محدودیت» داریت انت ءُ شما رء پر آئی دزرس نه انت.",
+       "revdelete-modify-no-access": "ارور مان آیتمء چیردارگ مان $2 ساهت $1: ائ نسخگ نشانیگء «محدودیت» داریت انت ءُ شما رء پر آئی دزرس نه انت.",
+       "revdelete-modify-missing": "ارور مان آیتمء چیردارگ نمبر $1: ائ نسخگ مان دیتابیسء موجوت نه انت!",
+       "revdelete-no-change": "'''هژاری:''' آیتم مان $2 ساهت $1 چه پیسریگء پیش دارگی تنظیمانء گون وتء داشت.",
+       "revdelete-concurrent-change": "ارور مان آیتمء چیردارگ مان $2 ساهت $1: چوش که پیداگ انت مان همئ وهدء که شما پر آئی وضعیتء ٹگلء جهدء کت ات، آئیء وضعیت گون دگه شهسء واسته ٹگل وارت ات. دزبندی انت سیاهگ انء بچار ات.",
+       "revdelete-only-restricted": "ارور مان آیتمء چیردارگ مان $2 ساهت $1: شما رء اجازت نه انت آیتم انء چه ماسٹرانیء گندء چیر بدئیت گیر چریشی که ادگر چیردارگی اپشنء بزیر ات.",
+       "revdelete-reason-dropdown": "*عامین دلیلان پر هزپ\n** کپی رایتء هلاپ\n** نالوٹین کامنت یانکه وتیگین اطلاهات\n** نالوٹین یوزرنام\n** اطلاهاتء که بیت توهین به بنت",
+       "revdelete-otherreason": "دگر/گیشترین دلیل:",
+       "revdelete-reasonotherlist": "دگرین دلیل",
        "revdelete-edit-reasonlist": "اصلاح دلایل حذف",
+       "revdelete-offender": "نسخگء نبیسوک:",
        "suppressionlog": "آمار توقیف",
-       "suppressionlogtext": "جهلء یک لیست چه حذفیات و محدودیات من جمله پناهین محتوا چه مدیران سیستم هست.\nبه چار [[Special:IPBlockList|IP block list]] په لیست هنوکین عملی محدویت آن",
+       "suppressionlogtext": "جهلیگء لیستء چه آهرین هزپ ان ءُ دیم داشت بیتگانء گند ات که آهانی توکا محتواء انت که چه ماسٹران چیردارگ بیتگ انت.\nپر چارگ لیستء چه فعالین دیم داشت بیتگ ان [[Special:BlockList|بلاک لیست]] رء بچار ات.",
        "mergehistory": "چن و بند کن تاریح آن صفحهء",
        "mergehistory-header": "ای صفحه شما را اجارت دن بازبینی ان تاریح یکی چه منابه صفحه ته یک نوکین صفحه چن وبند کنت.\nمطمین بت که ای تغییر ادامه تاریحی صفحه داریت.",
        "mergehistory-box": "چن وبند بازبینی آن دو صفحه:",
        "mergehistory-empty": "هچ بازبینی چن و بند نه توننت بنت",
        "mergehistory-success": "$3 {{PLURAL:$3|بازبینی|بازبینی ان}} ء [[:$1]] گون موفقیت چن و بند بوت ته [[:$2]].",
        "mergehistory-fail": "نه تونیت چن وبند تاریح اجرا کنت، لطفا دگه چک کنیت صفحه و وهد پارامترانء.",
+       "mergehistory-fail-toobig": "تاریخچگء همگرنچی بیت نه کنت که گیش چه محدودیت $1 {{PLURAL:$1|نسخه}} انتقال بیت انت.",
        "mergehistory-no-source": "منبع صفحه  $1 موجود نهنت.",
        "mergehistory-no-destination": "صفحه مقصد  $1 موجود نهنت.",
        "mergehistory-invalid-source": "منبع صفحه بایدن یک معتبرین عنوانی بیت.",
        "pagemerge-logentry": "چن و بند بوت [[$1]] په  [[$2]] (بازبینی ان تا$3)",
        "revertmerge": "بی چن وبند",
        "mergelogpagetext": "جهلء یک لیست چه نوکترین چن وبندان یکی تاریح صفحه په دگری هست.",
-       "history-title": "تاریح بازبینی \"$1\"",
+       "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 میانجیگین نسخگ}} گون همجندیء کاربر که پیش دارگ نه بوتگ انت)",
+       "diff-multi-otherusers": "({{PLURAL:$1|یک میانجیگین نسخگ$1 میانجیگین نسخگ ان}} گون {{PLURAL:$2|دگرین کاربر|$2 کاربران}} پیش دارگ نه بوتگ انت)",
+       "diff-multi-manyusers": "({{PLURAL:$1|یک میانجیگین نسخگ|$1 میانجیگین نسخگ}} که گون گیش چه $2 {{PLURAL:$2|کاربر|کاربران}} پیش دارگ نبیتگ انت)",
+       "difference-missing-revision": "{{PLURAL:$2|یک ویرایش|$2 ویرایش}}  چه نسخگانی پرک($1) {{PLURAL:$2|ودیگ|ودیگ}  نه بوت.\n\nبلکین گون لینک پر اپدیت نبوتگین تاکء هزپ بوتگ انت.\nتوان ات گیشترین جزئیاتء مان [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ] بچار ات.",
        "searchresults": "نتایج گردگ",
        "searchresults-title": "نتایج گردگ په \"$1\"",
        "titlematches": "عنوان صفحه هم دپ نت",
        "shown-title": "پیش دار $1 {{PLURAL:$1|نتیجه|نتیجه}} ته هر صفحه",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) دیدگ",
        "searchmenu-exists": "'''صفحه گون نام \"[[$1]]\" ته ای ویکی نیستن'''",
-       "searchmenu-new": "'''شر کن صفحه ای \"[[:$1]]\" ته ای ویکی!'''",
+       "searchmenu-new": "<strong>ائ تاکء اڈ کتن «[[:$1]]» مان ائ ویکی!</strong> {{PLURAL:$2|0=|ءُ هنچوش شمئی ودیگ بیتگین تاک گون شمئی شوهاز.|هنچوش شمئی شوهازء آسر.}}",
        "searchprofile-articles": "صفحات محتوا",
        "searchprofile-images": "ملتیمدیا",
        "searchprofile-everything": "هر چیز",
        "searchprofile-everything-tooltip": "گردگ په کل محتوا (هور گون صفحات گپ)",
        "searchprofile-advanced-tooltip": "گردگ ته نام فضایان دل واه",
        "search-result-size": "$1 ({{PLURAL:$2|1کلمه|$2 کلمات}})",
+       "search-result-category-size": "{{PLURAL:$1|یک عضو|$1 عضو}} ({{PLURAL:$2|یک جهلرده|$2 جهلرده}}، {{PLURAL:$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": "نتایج چه $1 :",
        "search-interwiki-more": "(گیشتر)",
        "search-relatedarticle": "مربوطین",
        "searchrelated": "مربوط",
        "searchall": "کل",
        "showingresults": "جهل پیش دارگنت تا  {{PLURAL:$1|'''1'''نتیجه|'''$1''' نتایج}} شروع بنت گون #'''$2'''.",
-       "showingresultsnum": "جهل پیش داریت  {{PLURAL:$3|'''1''' نتیجه|'''$3''' نتایج}} شروع بیت گون #'''$2'''.",
+       "showingresultsinrange": "پیش دارگ مان جهلء تان {{PLURAL:$1|<strong>1</strong> نتیجگ|<strong>$1</strong> نتیجگ}} in range #<strong>$2</strong> تان #<strong>$3</strong>.",
        "showingresultsheader": "{{PLURAL:$5|نتیجه '''$1''' چه '''$3'''|نتایج '''$1 - $2''' چه '''$3'''}} په '''$4'''",
        "search-nonefound": "نتیجه هم دپ په درخواست نیست",
        "powersearch-legend": "گردگ پیشرفته",
        "powersearch-togglelabel": "کنترل:",
        "powersearch-toggleall": "کل",
        "powersearch-togglenone": "هچ یک",
+       "powersearch-remember": "منی زیرتنء پر آیوکین شوهاز شموش مکن",
        "search-external": "حارجی گردگ",
        "searchdisabled": "{{SITENAME}} گردگ غیر فعالنت.\nشما نونیت بگردیت چه طرق گوگل هم زمان.\nتوجه که اندیکس آن {{SITENAME}} محتوا شاید تاریح گوستگین بنت.",
+       "search-error": "ارور مان شوهازء درگت: $1",
        "preferences": "ترجیحات",
-       "mypreferences": "منی ترجیحات",
+       "mypreferences": "ترجیحات",
        "prefs-edits": "تعداد اصلاحات:",
+       "prefsnologintext2": "دزبندی انت  $1  پر ترجیحاتء تنظیم کتن.",
        "prefs-skin": "پوست",
        "skin-preview": "بازین",
        "datedefault": "هچ ترجیح",
+       "prefs-labs": "اپشن پر چکاس",
+       "prefs-user-pages": "کاربریگین تاکان",
        "prefs-personal": "نمایه کاربر",
        "prefs-rc": "نوکین تغییرات",
        "prefs-watchlist": "لیست چارگ",
        "prefs-watchlist-days": "روچان په پیش دارگ ته لیست چارگ",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-days-max": "(مکسیمم $1 {{PLURAL:$1|روچ|روچ}})",
        "prefs-watchlist-edits": "گشیترین تعداد تغییرات په پیشدارگ ته پچین لیست چارگ:",
-       "prefs-watchlist-edits-max": "(گیشترین تعداد: ۱۰۰۰)",
+       "prefs-watchlist-edits-max": "(گیشترین نمبر: ۱۰۰۰)",
+       "prefs-watchlist-token": "چارگ لیستء رمز:",
        "prefs-misc": "هردابین",
        "prefs-resetpass": "عوض کتن کلمه رمز",
+       "prefs-changeemail": "ایمیل ادرسء ٹگل بدئ",
+       "prefs-setemail": "ایمیلء ادرسء بلک ات",
        "prefs-email": "گزینه یان ایمیل:",
        "prefs-rendering": "شکل صفحه",
        "saveprefs": "ذخیره",
-       "restoreprefs": "کل پیش فرضین تنظیمات برگردین",
+       "restoreprefs": "پهکین پیش‌ پرزین تنظیمانء واتر بکن (مان پهکین بهران)",
        "prefs-editing": "اصلاح",
        "rows": "ردیفآن«",
        "columns": "ستون‌ان:",
        "searchresultshead": "گردگ",
        "stub-threshold": "سرحد په  <a href=\"#\" class=\"stub\">چنڈ لینک</a> فرمت (بایت):",
+       "stub-threshold-disabled": "نافعال",
        "recentchangesdays": "روچ ان به پیش دارگ ته نوکیت تغییرات:",
        "recentchangesdays-max": "(حداکثر $1 {{PLURAL:$1|روچ|روچ}})",
        "recentchangescount": "تعداد اصلاحات به پیش دارگ به طور پیش فرض :",
        "prefs-help-recentchangescount": "شی هور گون نوکین تغییرات تاریح صفحات و سیاهگان انت.",
+       "prefs-help-watchlist-token2": "ائ سکرٹ کلیت پر ویب فید چه شمئی چارگ لیست انت.\nهرشهسء که آئرء بزانت توان انت که شمئی چارگ لیستء بوان ات، پمیشکا آئرا شیر مکن ات. [[Special:ResetTokens|اگان آئیء ٹگلء لوٹ ات ادان کلیک بکن ات]].",
        "savedprefs": "شمی ترجیحات ذخیره بوتن",
        "timezonelegend": "وهد ملک:",
        "localtime": "ملکی وهد:",
-       "timezoneuseserverdefault": "چه پیش فرضین سرور استفاده کن",
+       "timezoneuseserverdefault": "پیش فرضین ویکیء کارمرز بکن ($1)",
        "timezoneuseoffset": "دگر (اختلاف ءَ مشخص کنیت)",
        "servertime": "وهد سرور:",
        "guesstimezone": "پرکن چه بروزر",
        "timezoneregion-indian": "اقیانوس هند",
        "timezoneregion-pacific": "اقیانوس آرام",
        "allowemail": "فعال کن ایمیل چه دگه کابران",
-       "prefs-searchoptions": "گردگ انتخابان",
+       "prefs-searchoptions": "شوهاز",
        "prefs-namespaces": "نام فصا",
        "default": "پیش فرض",
        "prefs-files": "فایلان",
        "prefs-custom-css": "رسمی سی‌اس‌اس",
        "prefs-custom-js": "رسمی جی‌اس",
+       "prefs-common-css-js": "یک پیمین سی‌اس‌اس/جاوااسکریپٹ پر پهکین اسکین:",
        "prefs-reset-intro": "شما توانت چه ای  صفحه په واترینگ تنظیمات وت په پیش‌فرض استفاده کنیت. ای کار بازگشت‌ناپذیر انت.",
        "prefs-emailconfirm-label": "تایید کتن پست الکترونیک:",
        "youremail": "ایمیل:",
-       "username": "نام کاربری:",
-       "prefs-memberingroups": "عضو گروه {{PLURAL:$1|group|groups}}:",
+       "username": "{{GENDER:$1|یوزرنام}}:",
+       "prefs-memberingroups": "{{GENDER:$2|عضو}} {{PLURAL:$1|گروپ|گروپ}}:",
        "prefs-registration": "ثبت نام وهد:",
        "yourrealname": "راستین  نام:",
        "yourlanguage": "زبان:",
-       "yourvariant": "مغایر:",
+       "yourvariant": "زبان محتواء گؤشگ:",
+       "prefs-help-variant": "شمئی درچتگین گؤشگ پر تاکانی محتواء پیش دارگ مان ائ ویکی.",
        "yournick": "امضا:",
+       "prefs-help-signature": "نبشتگین کامنت ان مان ترانء تاک پیکن گون «<nowiki>~~~~</nowiki>» ایمزا به بنت؛ ائ نشانیگ گون وتکارین حالت پر شمئی ایمزا و وهدستامپء کنورتء بیت انت.",
        "badsig": "نامعتبرین حامین امضا تگان HTML چک کن",
        "badsiglength": "شمل امضا باز مزنتت.\nآی بایدن   $1 {{PLURAL:$1|کارکاتر|کاراکتران}} مزن تر مبیت",
-       "yourgender": "جنس:",
-       "gender-unknown": "نامعلوم",
+       "yourgender": "لوٹ ات که چونکا توصیف به بیت؟",
+       "gender-unknown": "ترجیحء دیان که نامالوم به بیت",
        "gender-male": "مردین",
        "gender-female": "جنین",
-       "prefs-help-gender": "اختÛ\8cارÛ\8c: Ù¾Ù\87 Ø®Ø§Ø·Ø± ØªÙ\88ار Ú©ØªÙ\86 Ø¯Ø±Ø³Øª Ø¬Ù\86س Ú¯Ù\88Ù\86 Ø¨Ø±Ù\86اÙ\85Ù\87 Ø§Ø³ØªÙ\81ادÙ\87 Ø¨Û\8cت. Ø§Û\8c Ø§Ø·Ù\84اعات Ø¨Ù\84Ú©Û\8cÙ\86 Ø¹Ù\85Ù\88Ù\85Û\8c Ø¨Ø¨نت.",
+       "prefs-help-gender": "ائ ØªÙ\86ظÛ\8cÙ\85Ø¡ Ú©Ø§Ø±Ù\85رز Ú©ØªÙ\86 Ø§Û\8cÙ\87تÛ\8cارÛ\8c Ø§Ù\86ت.\nسÙ\81تÙ\88ر Ú\86Ù\87 Ø§Ø¦ Ø§Ù\86داجگ Ù¾Ø± Ø¯Ø±Ø³ØªÛ\8cÙ\86 Ø§Ø´Ø§Ø±Ú¯ Ù¾Ø± Ø´Ù\85ئÛ\8c Ø§Ú©Ø§Ù\86ت Ú¯Ù\88Ù\86 Ø²Ø¨Ø§Ù\86Ø¡ Ú¯Ø±Ø§Ù\85رء Ø¨Ù\87ر Ø²Û\8cر Ø§Øª.\nائ Ø§Ø·Ù\84اÙ\87ات Ø¹Ø§Ù\85 Ø§نت.",
        "email": "ایمیل",
        "prefs-help-realname": "راستین  نام اهتیاریتن. اگه شما یکی انتخاب کنیت شی په شمی کارء نشان هلگ په روت.",
-       "prefs-help-email": "آدرس ایمیل اختیاری انت، بله اجازت دن که یک نوکین کلمه ی رمزی په شما دیم دهگ بیت وهدی که شما وتی رمزء شموشیت.\nشما هنچوش تونیت دگرانء اجازت بدهیت چه طریق شمی بحث_کاربر صفخه بی شی که وتی شناسگ پیش داریت تماس بگرنت.",
+       "prefs-help-email": "ایمیلء ادرس ایهتیاری انت، بلئی پسوردء واتر کتن اگان وتی پسوردء شموش بکن ات ممکن بیت کنت انت.",
+       "prefs-help-email-others": "شما هنچوشء توان ات اینتهاب بکن ات که کاربران بتوان انت چه شمئی بنتاکء لینک یانکه تران تاکء پر شما ایمیل دیم بده انت.\nشمئی ایمیل ادرس وهدء که ادگر شهسء پر شما ایمیل بجنت پیداگ نه بیت.",
        "prefs-help-email-required": "آدرس ایمیل نیازنت.",
        "prefs-info": "اولگین اطلاعات",
        "prefs-i18n": "بین المللی کتن",
        "prefs-signature": "امضا",
        "prefs-dateformat": "تاریح داب",
        "prefs-timeoffset": "وهد بنگیج",
-       "prefs-advancedediting": "پیشرفتگین گزینه",
+       "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-lookup-user": "مدیریت گروه کاربر",
        "userrights-user-editname": "یک نام کاربری وارد کن",
        "editusergroup": "اصلاح گروه کاربر",
-       "editinguser": "عوض کنت حقوق کاربر  '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+       "editinguser": "ٹگل مان ایهتیارات کاربریء کاربر '''[[User:$1|$1]]''' $2",
        "userrights-editusergroup": "اصلاح گروه کاربر",
        "saveusergroups": "ذخیره گروه کاربر",
        "userrights-groupsmember": "عضو انت:",
+       "userrights-groupsmember-auto": "ضمنیگین عضو:",
        "userrights-groups-help": "شما شاید گروه ای کاربرء هست ته:\n* یک جعبه علامتی یعنی شی که کاربر تا آ گروه انت.\n* یک بی علامتین جعبه یعنی شی که کاربر ته آ گروه نهنت.\n* A * پیش داریت که شما نه تونیت بزور گروهی که یک بری که آیء اضافه کت یا برعکس.",
        "userrights-reason": "دلیل:",
        "userrights-no-interwiki": "شما را اجازت نیست دان حقوق کاربر ته دگ ویکی آن اصلاح کنیت.",
        "userrights-nodatabase": "دیتابیس $1  موجود نهنت یا محلی نهنت.",
        "userrights-nologin": "شما باید [[Special:UserLogin|وارد بیت]]  گون حساب مدیریتی په مشخص کتن حقوق کاربر.",
-       "userrights-notallowed": "شمی حساب اجازت په مشخص کتن حقوق کاربر نیست.",
+       "userrights-notallowed": "شما رء اجازت پر ادگر کاربرانی ایهتیاراتء هزپ یانکه ازاپ کتن نه انت.",
        "userrights-changeable-col": "گروهانی که شما تونیت عوض کنیت",
        "userrights-unchangeable-col": "گروهانی که شما نه نونیت عوض کنیت",
+       "userrights-conflict": "تعارض مان کاربریگء دزرس! دزبندی انت بازگند ءُ رندء تغییراتء تایید بکن ات.",
+       "userrights-removed-self": "شما پر درستی وتی دزرسانء هزپ کت ات. پمیشکا شما رء انیگ پر ائ تاک دزرس نه انت.",
        "group": "گروه:",
        "group-user": "کابران",
        "group-autoconfirmed": "کابران تایید اتوماتیکی",
        "group-bureaucrat": "دیوان داران",
        "group-suppress": "رویت کنوکان",
        "group-all": "(کل)",
-       "group-user-member": "کاربر",
-       "group-autoconfirmed-member": "کاربر تایید اتوماتیکی",
-       "group-bot-member": "روبات",
-       "group-sysop-member": "مدیر سیستم",
-       "group-bureaucrat-member": "دیوان دار",
-       "group-suppress-member": "رویت کنوک",
+       "group-user-member": "{{GENDER:$1|کاربر}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|تایید بوتگین کاربر}}",
+       "group-bot-member": "{{GENDER:$1|ربات}}",
+       "group-sysop-member": "{{GENDER:$1|ماسٹر}}",
+       "group-bureaucrat-member": "{{GENDER:$1|دیوانسالار}}",
+       "group-suppress-member": "{{GENDER:$1|نظارت}}",
        "grouppage-user": "{{ns:project}}:کابران",
        "grouppage-autoconfirmed": "{{ns:project}}:کابران تایید اتوماتیکی",
        "grouppage-bot": "{{ns:project}}:روباتان",
        "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": "چه محدودیت سریت آی‌پی‌-محور تاثیر نزیر ات",
        "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-hideuser": "یک نام کاربری منع کن، آیی چه عام پناه کنگنت",
        "right-ipblock-exempt": "منع جنبی آی پی، منع اتوماتیکی و منع بردی",
        "right-proxyunbannable": "جنبی اتوماتیکی منع پروکسی",
-       "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": "وتیگین سی اس اس فایلانء ویرایش بکن ات",
+       "right-editmyuserjs": "وتیگین کاربری جاوااسکریپٹ فایلانء ویرایش بکن ات",
+       "right-viewmywatchlist": "وتیگین چارگ لیستء بگند ات",
+       "right-editmywatchlist": "وتیگین چارگ لیستء ویرایش بکن ات. هنچوش بزان که لهتئ چه اقدامات پیج انء گیر چه ائ اجازت هم ازاپء کن انت.",
+       "right-viewmyprivateinfo": "وتیگین پرایویت اطلاهاتء بچار ات (هنچوش که نام ءُ ایمیل)",
+       "right-editmyprivateinfo": "وتیگین پرایویت اطلاهاتء ادیت بکن ات (هنچوش که نام ءُ ایمیل)",
+       "right-editmyoptions": "وتی ترجیحاتء ادیت بکن ات",
        "right-rollback": "سریع برگردین اصلاحات آهری کاربر که یک بخصوصین صفحه ای اصلاح کتت.",
        "right-markbotedits": "نشان کن اصلاحات برگشتی په داب اصلاحات روباتی",
        "right-noratelimit": "تاثیر نهلیت گون محدودیاتان میزان",
        "right-userrights-interwiki": "اصلاح حقوق کابرانی کابران دگه ویکی انء",
        "right-siteadmin": "کبل و پچ دیتابیس",
        "right-override-export-depth": "درگیزگ صفحات گون صفحاتی لینک بوتگین ته سطح ۵",
+       "right-sendemail": "پر ادگران ایمیلء راهیگ بکن ات",
+       "right-passwordreset": "ایمیل پر پسوردء واترء بچار ات",
        "newuserlogpage": "ورود شرکتن کاربر",
        "newuserlogpagetext": ".شی یک ورودی چه شرکتن کاربر",
        "rightslog": "ورودان حقوق کاربر",
        "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-suppressionlog": "چارگ  ای خصوصین آمار",
        "action-block": "ای کاربرء چه اصلاح کتن بند کن",
        "action-protect": "عوص کتن سطح محافظت په ای صفحه",
-       "action-import": "وارد کتن ای صفحه چه دگه ویکیء",
-       "action-importupload": "وارد کتن ای صفحه چه یک آپلود فایلء",
+       "action-rollback": "ویرایشانی ترندین واتر چه آهرین کاربرء که یک مالومین تاکء رء ادیت کتگ",
+       "action-import": "تاکء هوار کتن چه ادگر ویکی هان",
+       "action-importupload": "تاکء هوار کتن گون یک فایلء اپلود کتن",
        "action-patrol": "نشان کتن اصلاح دگران په داب چارگ بیتگین",
        "action-autopatrol": "نشان کتن وتی اصلاح په داب چارگ بوتگین",
        "action-unwatchedpages": "چارگ لیست نچارتگین صفحات",
        "action-userrights": "اصلاح کل حقوق کاربر",
        "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": "رندگر نوکترین تغییرات ته ویکی تی ای صفحه.",
+       "recentchanges-noresult": "هچ تغییرء مان درچتگین درگتء گون ائ معیاران همگرنچ نه انت.",
        "recentchanges-feed-description": "آهرین تغییرات ته وی کی چه ای فید رند گر",
-       "rcnotefrom": "جهلا تغییرات چه '''$2''' (تا  '''$1''' پیش دارگنت). هست",
+       "recentchanges-label-newpage": "ائ ویرایش نوکین تاکء اڈ کت",
+       "recentchanges-label-minor": "ایش یک هوردین ادیتء انت",
+       "recentchanges-label-bot": "ائ ویرایش گون یک رباتء کتن بیتگ",
+       "recentchanges-label-unpatrolled": "این ویرایش اناگتء گشت‌زنی نه بیتگ",
+       "recentchanges-label-plusminus": "تاکء سایز همگرنچ گون ائ بایت انی انداجگ ٹگل وارتگ انت",
+       "recentchanges-legend-heading": "'''اختصاران:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (هنچوش پر [[Special:NewPages|نوکین تاکانء فهرست]] بچار ات)",
+       "rcnotefrom": "جهلیگء تغییرات چه <strong>$2</strong> (تان <strong>$1</strong> پیش دارگ بیتگ انت).",
        "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": "پیش دار آهرین$1 تغییرات ته آهرین $2 روچان<br />$3",
        "diff": "تفاوت",
        "hist": "تاریخ",
        "number_of_watching_users_pageview": "[$1 چارگنت {{PLURAL:$1|کاربر|کابران}}]",
        "rc_categories": "محدودیت په دسته جات(دورش گون\"|\")",
        "rc_categories_any": "هرچی",
+       "rc-change-size-new": "$1 {{PLURAL:$1|بایت}} رند چه تغییر",
        "newsectionsummary": "/* $1 */ نوکین بخش",
-       "rc-enhanced-expand": "جزییات پیش دار(جاوا اسکریپت لازمنت)",
+       "rc-enhanced-expand": "جزئیاتء پیس دارگ",
        "rc-enhanced-hide": "پناه کتن جزییات",
+       "rc-old-title": "اڈ بیتگ گون «$1»",
        "recentchangeslinked": "مربوطین تغییرات",
        "recentchangeslinked-feed": "مربوطین تغییرات",
        "recentchangeslinked-toolbox": "مربوطین تغییرات",
        "upload": "آپلود کتن فایل",
        "uploadbtn": "آپلود فایل",
        "reuploaddesc": "کنسل آپلودء و ترر په فرم آپلود",
+       "upload-tryagain": "فایلء ٹگا وارتگین توضیحاتء راهیگ بکن ات",
        "uploadnologin": "وارد نهیت",
        "uploadnologintext": "شما بایدن [[Special:UserLogin|واردبیت]] په آپلود کتن فایل.",
        "upload_directory_missing": "مسیر آپلود ($1)  گارنت و گون وب سرور شر گنگ نه بیت.",
        "tooltip-rollback": "\"ترین\" اصلا(ان) ته ای صفحه چه اهزس مشارکت کنوک ته گون یک کلیک.",
        "tooltip-undo": "\"ترینگ\" ای  اصلاح و پچ کن فرم اصلاحء ته حالت بازبینی. اجازت دن اضافه کتن یک دلیلی ته خلاصه",
        "common.css": "/* CSS که اداننت په کل پوستان په کار رونت. */",
-       "monobook.css": "/* CSS که اداننت کابران پوست مونوبوک تاثیر کننت */",
        "common.js": "/* هر جاوا اسکریپتی ادان په کل کابران ته هر صفحه ای بار بیت. */",
-       "monobook.js": "/* جاوا اسکریپت ادان فقط په کابرانی که چه پوست منوبوک استفاده کننت بار بیت. */",
        "anonymous": "ناشناسین {{PLURAL:$1|کاربر|کاربران}} چه {{SITENAME}}",
        "siteuser": "{{SITENAME}} کاربر $1",
        "lastmodifiedatby": "ای صفحه اهری رندی که تغییر دهگ بیته $2, $1گون $3.",
        "spam_reverting": "عوض کتن په آهری نسحه که شامل لینکان می بیت په $1",
        "spam_blanking": "کل بازبینی آن شامل لینکان په $1, بوتت  هالیکی",
        "simpleantispam-label": "کنترل ضد اسپم.\nای شیء پر ''مکن''",
-       "skinname-monobook": "منوبوک",
        "markaspatrolleddiff": "نشان کن په داب نظارت بوتگین",
        "markaspatrolledtext": "ای صفحه نشان کن په داب نظارت بوتگین",
        "markedaspatrolled": "نشاننت په داب نظارتی",
index 8d47533..7edefda 100644 (file)
        "qbmyoptions": "Sakong mga pahina",
        "faq": "PPK (Pirmihang Pighahapot na mga kahaputan)",
        "faqpage": "Project:PPK (Pirmihang Pighahapot na mga Kahaputan)",
-       "vector-action-addsection": "Idagdag an topic",
-       "vector-action-delete": "puráon",
-       "vector-action-move": "Ibalyó",
-       "vector-action-protect": "Protektaran",
-       "vector-action-undelete": "Bawion sa pagkapara",
-       "vector-action-unprotect": "Ribayan an proteksyon",
-       "vector-view-create": "Magmukna",
-       "vector-view-edit": "Liwatón",
-       "vector-view-history": "Tanawon sa historiya",
-       "vector-view-view": "Basáha",
-       "vector-view-viewsource": "Hilingón an ginikánan",
        "actions": "Mga aksyon",
        "namespaces": "Mga espasyong ngaran",
        "variants": "Mga pinalaen",
        "searchrelated": "kauyon",
        "searchall": "gabós",
        "showingresults": "Pigpapahiling sa babâ sagkod sa {{PLURAL:$1|'''1''' resulta|'''$1''' mga resulta}} poon sa #'''$2'''.",
-       "showingresultsnum": "Pigpapahiling sa babâ {{PLURAL:$3|'''1''' resulta|'''$3''' mga resulta}} poon sa #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resulta '''$1''' kan '''$3'''|Mga Resulta '''$1 - $2''' kan '''$3'''}} para sa '''$4'''",
        "search-nonefound": "Mayo nin mga resulta na panampok sa kahaputan.",
        "powersearch-legend": "Adbansiyadong paghahanap",
        "tooltip-summary": "Magkaag nin sarong halipot na sumaryo",
        "interlanguage-link-title": "$1 - $2",
        "common.css": "/** an CSS na pigbugtak digdi maiaaplikar sa gabos na mga skin */",
-       "monobook.css": "/* an CSS na pigbugtak digdi makakaapektar sa mga parágamit kan Monobook skin */",
        "common.js": "/* Arin man na JavaScript digdi maikakarga para sa gabos na mga parágamit sa kada karga kan páhina. */",
-       "monobook.js": "/* Deprecado; gamiton an [[MediaWiki:common.js]] */",
        "anonymous": "Bako-bistadong {{PLURAL:$1|paragamit|mga paragamit}} kan {{SITENAME}}",
        "siteuser": "Paragamit kan {{SITENAME}} na si $1",
        "anonuser": "{{SITENAME}} bako-bistadong paragamit $1",
index 5ec07c0..98a9201 100644 (file)
        "qbmyoptions": "Мае старонкі",
        "faq": "Частыя пытаньні",
        "faqpage": "Project:Частыя пытаньні",
-       "vector-action-addsection": "Дадаць тэму",
-       "vector-action-delete": "Выдаліць",
-       "vector-action-move": "Перанесьці",
-       "vector-action-protect": "Абараніць",
-       "vector-action-undelete": "Аднавіць",
-       "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": "Навігацыйнае мэню",
        "mergehistory-empty": "Няма гісторыі рэдагаваньняў, якую магчыма аб'яднаць.",
        "mergehistory-success": "$3 {{PLURAL:$3|вэрсія|вэрсіі|вэрсіяў}} з [[:$1]] пасьпяхова аб’яднаныя ў [[:$2]].",
        "mergehistory-fail": "Не атрымалася аб'яднаць гісторыі старонак. Калі ласка, праверце парамэтры старонкі і часу.",
+       "mergehistory-fail-toobig": "Немагчыма аб’яднаць гісторыю, бо будзе перавышаны ліміт у $1 {{PLURAL:$1|1=вэрсію|вэрсіі|вэрсіяў}}, якія будуць перанесеныя.",
        "mergehistory-no-source": "Не існуе крынічнай старонкі $1.",
        "mergehistory-no-destination": "Не існуе мэтавай старонкі $1.",
        "mergehistory-invalid-source": "Крынічная старонка мусіць мець карэктную назву.",
        "searchall": "усе",
        "showingresults": "Ніжэй {{PLURAL:$1|паданы|паданыя|паданыя}} да '''$1''' {{PLURAL:$1|выніку|вынікаў|вынікаў}}, пачынаючы з #<b>$2</b>.",
        "showingresultsinrange": "Ніжэй паказаныя да {{PLURAL:$1|<strong>$1</strong> выніку ў|<strong>$1</strong> вынікаў у}} дыяпазоне ад <strong>$2</strong> да <strong>$3</strong>.",
-       "showingresultsnum": "Ніжэй паказаны сьпіс з '''$3''' {{PLURAL:$3|выніка|вынікаў|вынікаў}}, пачынаючы ад № '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|1=Вынік '''$1''' з '''$3'''|Вынікі '''$1—$2''' з '''$3'''}} для '''$4'''",
        "search-nonefound": "Супадзеньняў па запыце ня знойдзена.",
        "powersearch-legend": "Удасканалены пошук",
        "pageinfo-category-pages": "Колькасьць старонак",
        "pageinfo-category-subcats": "Колькасьць падкатэгорыяў",
        "pageinfo-category-files": "Колькасьць файлаў",
-       "skinname-monobook": "Монакніга",
-       "skinname-vector": "Вэктар",
        "markaspatrolleddiff": "Пазначыць як «патруляваную»",
        "markaspatrolledtext": "Пазначыць гэтую старонку як «патруляваную»",
        "markedaspatrolled": "Пазначаная як «патруляваная»",
        "duplicate-defaultsort": "Папярэджаньне: Ключ сартыроўкі па змоўчваньні «$2» замяняе папярэдні ключ сартыроўкі па змоўчваньні «$1».",
        "version": "Вэрсія",
        "version-extensions": "Усталяваныя пашырэньні",
+       "version-skins": "Усталяваныя тэмы афармленьня",
        "version-specialpages": "Спэцыяльныя старонкі",
        "version-parserhooks": "Працэдуры-перахопнікі парсэра",
        "version-variables": "Зьменныя",
        "version-antispam": "Абарона ад спаму",
-       "version-skins": "Афармленьні",
        "version-api": "API",
        "version-other": "Іншыя",
        "version-mediahandlers": "Апрацоўшчыкі мэдыя",
        "version-hook-name": "Назва працэдуры-перахопніка",
        "version-hook-subscribedby": "Падпісаны на",
        "version-version": "(Вэрсія $1)",
+       "version-no-ext-name": "[бяз назвы]",
        "version-svn-revision": "(r$2)",
        "version-license": "Ліцэнзія MediaWiki",
        "version-ext-license": "Ліцэнзія",
        "version-ext-colheader-name": "Пашырэньне",
+       "version-skin-colheader-name": "Тэма афармленьня",
        "version-ext-colheader-version": "Вэрсія",
        "version-ext-colheader-license": "Ліцэнзія",
        "version-ext-colheader-description": "Апісаньне",
index e61ac18..cd03e56 100644 (file)
        "hidden-categories": "{{PLURAL:$1|Схаваная катэгорыя|Схаваныя катэгорыі}}",
        "hidden-category-category": "Схаваныя катэгорыі",
        "category-subcat-count": "{{PLURAL:$1|Паказана $1 падкатэгорыя|Паказаны $1 падкатэгорыі|Паказаны $1 падкатэгорый}} з $2.",
-       "category-subcat-count-limited": "У гэтай катэгорыі ёсць {{PLURAL:$1|наступная падкатэгорыя|наступныя $1 падкатэгорый}}.",
+       "category-subcat-count-limited": "У гэтай катэгорыі ёсць {{PLURAL:$1|наступная падкатэгорыя|наступныя $1 падкатэгорыі|наступныя $1 падкатэгорый}}.",
        "category-article-count": "{{PLURAL:$1|Паказана $1 старонка|Паказаны $1 старонкі|Паказаны $1 старонак}} гэтай катэгорыі з $2.",
-       "category-article-count-limited": "У гэтай катэгорыі ёсць наступн{{PLURAL:$1|ая старонка|ыя $1 старонак}}.",
+       "category-article-count-limited": "У Ð³Ñ\8dÑ\82ай ÐºÐ°Ñ\82Ñ\8dгоÑ\80Ñ\8bÑ\96 Ñ\91Ñ\81Ñ\86Ñ\8c Ð½Ð°Ñ\81Ñ\82Ñ\83пн{{PLURAL:$1|аÑ\8f Ñ\81Ñ\82аÑ\80онка|Ñ\8bÑ\8f $1 Ñ\81Ñ\82аÑ\80онкÑ\96\8bÑ\8f $1 Ñ\81Ñ\82аÑ\80онак}}.",
        "category-file-count": "У гэтай катэгорыі ёсць {{PLURAL:$2|$2 файл|наступн{{PLURAL:$1|ы файл|ыя $1 файлаў}} з агульнага ліку $2}}.",
        "category-file-count-limited": "У гэтай катэгорыі ёсць $1 {{PLURAL:$1|файл|файлы|файлаў}}.",
        "listingcontinuesabbrev": "працяг",
        "qbmyoptions": "Свае старонкі",
        "faq": "ЧАПЫ",
        "faqpage": "Project:ЧАПЫ",
-       "vector-action-addsection": "Дадаць тэму",
-       "vector-action-delete": "Сцерці",
-       "vector-action-move": "Перанесці",
-       "vector-action-protect": "Ахова",
-       "vector-action-undelete": "Аднавіць",
-       "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": "Навігацыя",
        "databaseerror-function": "Функцыя: $1",
        "databaseerror-error": "Памылка: $1",
        "laggedslavemode": "<strong>Увага:</strong> Старонка можа не ўтрымліваць апошніх змен.",
-       "readonly": "База звестак заблакаваная",
+       "readonly": "База звестак зачынена",
        "enterlockreason": "Упішыце прычыну зачынення, а таксама меркаваны час адчынення",
        "readonlytext": "База даных не прыймае новых старонак і іншых змяненняў, таму што яна зараз зачынена, відаць, дзеля абслугоўвання, пасля чаго будзе вернута да нармальнай працы.\n\nАдміністратар, які зачыняў базу, растлумачыў гэта так: $1",
        "missing-article": "Не ўдалося знайсці тэксту старонкі ў базе даных, хаця ён мусіць там быць, з назвай \"$1\" $2.\n\nЗвычайна так бывае, калі адкрываюць састарэлую розніцу (diff) або спасылку з гісторыі сцёртай старонкі.\n\nКалі гэта не так, то, магчыма, гэта памылка ў праграмах.\nПаведамце пра гэта, разам з праблемным URL, аднаму з [[Special:ListUsers/sysop|адміністратараў]].",
        "mypreferencesprotected": "Вам не дазволена рэдагаваць свае настройкі.",
        "ns-specialprotected": "Не дазволена правіць старонкі ў прасторы назваў {{ns:special}}.",
        "titleprotected": "Назва засцерагаецца ад стварэння; ахова пастаўлена ўдзельнікам: [[User:$1|$1]].\nТлумачэнне пастаноўкі пад ахову: \"<em>$2</em>\".",
+       "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": "невядомы антывірус:",
        "userlogout": "Выйсці з сістэмы",
        "notloggedin": "Не ўвайшоў",
        "userlogin-noaccount": "Не маеце ўліковага запісу?",
+       "userlogin-joinproject": "Далучайцеся да {{GRAMMAR:родны|{{SITENAME}}}}",
        "nologin": "Не маеце рахунку? $1.",
        "nologinlink": "Завесці рахунак",
        "createaccount": "Стварыць рахунак",
        "gotaccountlink": "Увайсці ў сістэму",
        "userlogin-resetlink": "Забыліся даныя для ўваходу?",
        "userlogin-resetpassword-link": "Забылі пароль?",
+       "userlogin-helplink2": "Даведка па прадстаўленні сістэме",
+       "userlogin-loggedin": "Вы ўжо ўвайшлі ў сістэму як {{GENDER:$1|$1}}.\nСкарыстайцеся формай ніжэй, каб прадставіцца сістэме як іншы ўдзельнік.",
        "userlogin-createanother": "Стварыць яшчэ адзін уліковы запіс",
        "createacct-emailrequired": "Адрас электроннай пошты",
        "createacct-emailoptional": "Адрас электроннай пошты (неабавязкова)",
        "createacct-realname": "Сапраўднае імя (неабавязкова)",
        "createaccountreason": "Прычына:",
        "createacct-reason": "Прычына",
+       "createacct-reason-ph": "Чаму вы ствараеце іншы ўліковы запіс",
        "createacct-captcha": "Праверка бяспекі",
        "createacct-imgcaptcha-ph": "Увядзіце тэкст, які вы бачыце вышэй",
        "createacct-submit": "Стварыць уліковы запіс",
        "resetpass-wrong-oldpass": "Недапушчальны тымчасовы ці актуальны пароль.\nМагчыма, вы ўжо змянілі свой пароль ці папрасілі новы тымчасовы.",
        "resetpass-recycled": "Калі ласка, змяніце свой пароль на нешта іншае, чым ваш цяперашні пароль.",
        "resetpass-temp-password": "Тымчасовы пароль:",
+       "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|Запоўніце адно з палёў, каб атрымаць тымчасовы пароль па электроннай пошце.}}",
        "passwordreset-legend": "Пераўстанавіць пароль",
        "passwordreset-disabled": "Функцыя пераўсталёўкі пароля адключаная на гэтай вікі.",
        "passwordreset-emaildisabled": "Функцыі эл.пошты адключаны на гэтай Вікі.",
        "changeemail-submit": "Змяніць адрас электроннай пошты:",
        "changeemail-cancel": "Адмена",
        "changeemail-throttled": "Надта штмат спробаў увайсці пад гэтым рахункам. Пачакайце $1 перад тым, як спрабаваць ізноў.",
+       "resettokens-token-label": "$1 (актуальнае значэнне: $2)",
        "bold_sample": "Цёмны тэкст",
        "bold_tip": "Цёмны тэкст",
        "italic_sample": "Курсіўны тэкст",
        "anontalkpagetext": "----''Гэта старонка размовы з ананімным удзельнікам, які або не мае свайго рахунку, або ім не карыстаўся. Таму дзеля яго ці яе ідэнтыфікацыі мы мусім выкарыстаць лічбавы Адрас IP. Такі адрас IP могуць дзяліць між сабою некалькі асоб. Калі вы ананімны ўдзельнік, і лічыце, што атрымліваеце няслушныя заўвагі,[[Special:UserLogin/signup|стварыце рахунак]] або [[Special:UserLogin|акажыцеся]], каб вас больш не блыталі з іншымі ананімнымі ўдзельнікамі.''",
        "noarticletext": "Старонка не ўтрымлівае тэксту. Вы можаце [[Special:Search/{{PAGENAME}}|пашукаць гэткую назву]] ў іншых старонках ці <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ў журналах],\nабо [{{fullurl:{{FULLPAGENAME}}|action=edit}} папрацаваць з гэтай старонкай]</span>.",
        "noarticletext-nopermission": "Старонка не ўтрымлівае тэксту.\nВы можаце [[Special:Search/{{PAGENAME}}|пашукаць гэткую назву]] ў іншых старонках,\nці <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ў журналах]</span>, але вы не маеце дазволу на стварэнне гэтай старонкі.",
+       "missing-revision": "Няма версіі #$1 у старонкі з назвай \"{{FULLPAGENAME}}\".\n\nЗвычайна такое здараецца, калі прайсці па састарэлай спасылцы з гісторыі на старонку, якая была сцёрта.\nПадрабязнасці можна пабачыць у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале сціранняў].",
        "userpage-userdoesnotexist": "Рахунак удзельніка \"<nowiki>$1</nowiki>\" не зарэгістраваны. Праверце, ці вы жадаеце стварыць або паправіць гэтую старонку.",
        "userpage-userdoesnotexist-view": "Уліковы запіс удзельніка \" $1 \"не зарэгістраваны.",
        "blocked-notice-logextract": "Гэты карыстальнік у дадзены момант заблакаваны. \n Апошні запіс журнала блакіровак прыводзіцца ніжэй для даведкі:",
        "copyrightwarning": "Заўважце, што ўсе ўклады на {{SITENAME}} лічацца выданымі на ўмовах $2 (бач падрабязнасці на $1). Калі вы не жадаеце, каб вашыя матэрыялы бязлітасна правіліся, і свабодна распаўсюджваліся, то і не аддавайце іх сюды.<br />\nТаксама вы нам абяцаеце, што напісалі гэта самі, або скапіравалі з рэсурсу, які знаходзіцца ў публічнай уласнасці, або з аналагічнага свабоднага рэсурсу.\n'''НЕ КЛАДЗІЦЕ СЮДЫ, БЕЗ АДПАВЕДНАГА ДАЗВОЛУ, МАТЭРЫЯЛУ, ЯКІ АХОЎВАЕЦЦА АЎТАРСКІМ ПРАВАМ!'''",
        "copyrightwarning2": "Заўважце, што кожны ўклад на {{SITENAME}} можа быць папраўлены, зменены або выдалены іншымі ўдзельнікамі. Калі вы не жадаеце, каб вашыя матэрыялы бязлітасна правіліся, то і не давайце іх сюды.<br />\nТаксама вы нам абяцаеце, што напісалі гэта самі, або скапіравалі з рэсурсу, які знаходзіцца ў публічнай уласнасці, або з аналагічнага свабоднага рэсурсу (бач падрабязнасці на $1).\n'''НЕ КЛАДЗІЦЕ СЮДЫ, БЕЗ АДПАВЕДНАГА ДАЗВОЛУ, МАТЭРЫЯЛУ, ЯКІ АХОЎВАЕЦЦА АЎТАРСКІМ ПРАВАМ!'''",
        "longpageerror": "'''Памылка: Аб’ём тэксту, які Вы спрабуеце запісаць складае $1 {{PLURAL:$1|кілабайт|кілабайты|кілабайтаў}}, што болей устаноўленага абмежавання на $2 {{PLURAL:$2|кілабайт|кілабайты|кілабайтаў}}.'''\nСтаронка не можа быць захаваная.",
-       "readonlywarning": "'''УВАГА: зараз вы не можаце запісаць свае праўкі, таму што база даных зачынена на абслугоўванне. Магчыма, варта перанесці ваш тэкст у асобны файл і запісаць на потым.\n\nАдміністратар, які зачыніў базу, растлумачыў гэта так: $1'''",
+       "readonlywarning": "<strong>Увага: зараз вы не можаце запісаць свае праўкі, таму што база звестак зачынена на абслугоўванне.</strong>\nМагчыма, варта перанесці ваш тэкст у асобны файл і запісаць на потым.\n\nАдміністратар, які зачыніў базу, растлумачыў гэта так: $1",
        "protectedpagewarning": "'''УВАГА: старонка пастаўленая пад ахову, таму яе могуць правіць толькі адміністратары.'''\nНіжэй паказаны апошні запіс з адпаведнага журналу:",
        "semiprotectedpagewarning": "'''Увага:''' старонка пастаўленая пад ахову, таму яе могуць правіць толькі рэгістраваныя ўдзельнікі («паў-ахова»). Ніжэй паказаны апошні запіс з адпаведнага журналу:",
        "cascadeprotectedwarning": "'''Увага:''' гэтая старонка ахоўваецца, таму яе могуць правіць толькі ўдзельнікі з правамі адміністратара. Прычына аховы: улучэнне гэтай старонкі ў {{PLURAL:$1|старонку, якая стаіць|старонкі, якія стаяць}} пад каскаднай аховай:",
        "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": "JavaScript",
        "parser-template-loop-warning": "Цыклічнае ўключэнне шаблона: [[$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": "Выяўлены закальцаваны unstrip",
+       "parser-unstrip-recursion-limit": "Перавышаны ліміт рэкурсіі unstrip ($1)",
+       "converter-manual-rule-error": "Выяўлена памылка ў ручным правіле моўнага канвертара",
        "undo-success": "Праўку можна адкаціць, але праверце папярэдні паказ, што ніжэй, каб упэўніцца ў адпаведнасці будучых змяненняў, і толькі тады запішыце іх, каб завершыць адкат праўкі.",
        "undo-failure": "Немагчыма адкаціць праўку, таму што перашкаджаюць праўкі, што былі перад ёй.",
        "undo-norev": "Не ўдалося адкаціць праўку, таму што яна не існуе або была сцёрта.",
+       "undo-nochange": "Выглядае на тое, што праўка ўжо была адкочаная.",
        "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''",
+       "cantcreateaccount-range-text": "Стварэнне ўліковага запісу ўдзельніка з IP-адрасоў у дыяпазоне '''$1''', што ўключае ваш адрас IP ('''$4'''), было забаронена {{GENDER:$3|ўдзельнікам|ўдзельніцай}} [[User:$3|$3]].\n\n$3 {{GENDER:$3|патлумачыў|патлумачыла}} гэта так: ''$2''",
        "viewpagelogs": "Паказаць журналы для гэтай старонкі",
        "nohistory": "Старонка не мае гісторыі правак.",
        "currentrev": "Актуальная версія",
        "histlegend": "Выбар розніцы: адзначце радыё-боксы версій, якія трэба параўнаць і націсніце enter або кнопку, што ўнізе.<br /> Тлумачэнне: (з актуальн.) = розніца з актуальнай версіяй, (з папярэд.) = розніца з папярэдняй версіяй, д = дробная праўка.",
        "history-fieldset-title": "Прагляд гісторыі",
        "history-show-deleted": "Толькі выдаленыя",
-       "histfirst": "найстарэйшая",
-       "histlast": "найноўшая",
+       "histfirst": "найстарэйшыя",
+       "histlast": "найноўшыя",
        "historysize": "({{PLURAL:$1|1 байт|$1 байты|$1 байтаў}})",
        "historyempty": "(пуста)",
        "history-feed-title": "Гісторыя версій",
        "mergehistory-empty": "Няма версій, якія можна аб'яднаць.",
        "mergehistory-success": "$3 {{PLURAL:$3|версія|версій}} [[:$1]] паспяхова аб'яднаныя ў склад [[:$2]].",
        "mergehistory-fail": "Немагчыма аб'яднаць гісторыі, праверце зададзеныя назву і час.",
+       "mergehistory-fail-toobig": "Немагчыма выканаць зліццё гісторый, таму што больш за ліміт у $1 {{PLURAL:$1|версію|версіі|версій}} трэба пераносіць.",
        "mergehistory-no-source": "Не існуе крынічная старонка $1.",
        "mergehistory-no-destination": "Не існуе мэтавая старонка $1.",
        "mergehistory-invalid-source": "Крынічная старонка павінна мець карэктную назву.",
        "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-legend": "Падрабязны пошук",
        "powersearch-ns": "Шукаць у прасторах назваў:",
-       "powersearch-togglelabel": "Праверце:",
+       "powersearch-togglelabel": "Пазначыць:",
        "powersearch-toggleall": "Усе",
        "powersearch-togglenone": "Няма",
        "powersearch-remember": "Запомніць выбар для наступных пошукаў",
        "recentchanges-summary": "Гэта апошнія змены на пляцоўцы {{SITENAME}}.",
        "recentchanges-noresult": "Няма зменаў за дадзены перыяд, якія адпавядаюць гэтым крытэрыям.",
        "recentchanges-feed-description": "Сачыць за найбольш актуальнымі змяненнямі ў віксе праз гэты струмень навін.",
-       "recentchanges-label-newpage": "Ð\93Ñ\8dÑ\82ай Ð¿Ñ\80аÑ\9eкай Ð±Ñ\8bла Ñ\81творана новая старонка",
-       "recentchanges-label-minor": "Ð\93Ñ\8dÑ\82а Ð´робная па значэнні праўка",
-       "recentchanges-label-bot": "Ð\9fÑ\80аÑ\9eка Ð±Ñ\8bла Ð·Ñ\80обленаÑ\8f праграмай-робатам",
+       "recentchanges-label-newpage": "Створана новая старонка",
+       "recentchanges-label-minor": "Ð\94робная па значэнні праўка",
+       "recentchanges-label-bot": "Ð\9fÑ\80аÑ\9eка Ð·Ñ\80облена праграмай-робатам",
        "recentchanges-label-unpatrolled": "Праўка яшчэ не атрымала адзнакі ўхваленасці (за ёй не сочыць \"патруль\")",
        "recentchanges-label-plusminus": "Аб'ём старонкі змяніўся на гэтую лічбу байтаў",
        "recentchanges-legend-heading": "'''Легенда:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (гл. таксама [[Special:NewPages|спіс новых старонак]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (гл. асобна [[Special:NewPages|новыя старонкі]])",
        "rcnotefrom": "Ніжэй знаходзяцца змены з <b>$2</b> (паказана не больш чым <b>$1</b>).",
        "rclistfrom": "Паказаць змены з $3 $2",
        "rcshowhideminor": "$1 дробныя праўкі",
        "rclinks": "Паказаць апошнія $1 змен за мінулыя $2 дзён<br />$3",
        "diff": "розн.",
        "hist": "гіст.",
-       "hide": "без Ñ\83лÑ\96кÑ\83",
-       "show": "з Ñ\83лÑ\96кам",
+       "hide": "Ð\9dе Ñ\9eлÑ\96Ñ\87ваÑ\86Ñ\8c",
+       "show": "УлÑ\96Ñ\87ваÑ\86Ñ\8c",
        "minoreditletter": "д",
        "newpageletter": "Н",
        "boteditletter": "р",
        "windows-nonascii-filename": "Дадзеная вікі не падтрымлівае імёны файлаў са спецыяльнымі знакамі.",
        "fileexists": "Ужо ёсць файл з такой назвай, праверце <strong>[[:$1]]</strong>, калі не ўпэўнены, што жадаеце мяняць яго змесціва.\n[[$1|thumb]]",
        "filepageexists": "Для файла з такой назвай існуе старонка апісання <strong>[[:$1]]</strong>, але сам файл зараз не існуе.\nТаму вашае апісанне не з'явіцца на адпаведнай старонцы, пакуль вы самастойна яе не паправіце.\n[[$1|thumb]]",
-       "fileexists-extension": "Ужо Ñ\91Ñ\81Ñ\86Ñ\8c Ñ\84айл Ð· Ð¿Ð°Ð´Ð¾Ð±Ð½Ð°Ð¹ Ð½Ð°Ð·Ð²Ð°Ð¹: [[$2|thumb]]\n* Ð\9dазва Ñ\9eкладанага Ñ\84айла: <strong>[[:$1]]</strong>\n* Ð\9dазва Ð½Ð°Ñ\8fÑ\9eнага Ñ\84айла: <strong>[[:$2]]</strong>\nÐ\92Ñ\8bбеÑ\80Ñ\8bÑ\86е Ñ\96нÑ\88Ñ\83Ñ\8e Ð½Ð°Ð·Ð²Ñ\83.",
+       "fileexists-extension": "Ужо Ñ\91Ñ\81Ñ\86Ñ\8c Ñ\84айл Ð· Ð¿Ð°Ð´Ð¾Ð±Ð½Ð°Ð¹ Ð½Ð°Ð·Ð²Ð°Ð¹: [[$2|thumb]]\n* Ð\9dазва Ñ\9eкладанага Ñ\84айла: <strong>[[:$1]]</strong>\n* Ð\9dазва Ð½Ð°Ñ\8fÑ\9eнага Ñ\84айла: <strong>[[:$2]]</strong>\nÐ\9cожа, Ñ\85оÑ\87аÑ\86е Ð²Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82аÑ\86Ñ\8c Ð°Ð´Ñ\80ознÑ\83Ñ\8e Ð½Ð°Ð·Ð²Ñ\83?",
        "fileexists-thumbnail-yes": "Файл падобны на выяву скарочанага памеру ''(драбніца)''. [[$1|thumb]]\nПраверце файл <strong>[[:$1]]</strong>.\nКалі правераны файл мае змест і памеры, аднолькавыя з гэтым, то дадатковае ўкладанне драбніцы непатрэбнае.",
        "file-thumbnail-no": "Назва файла пачынаецца з <strong>$1</strong>.\nТак можа называцца выява зменшанага памеру ''(драбніца)''.\nКалі гэтая выява сапраўды запісаная ў найлепшым разрозненні, якое ёсць, то ўкладайце яе, а іначай лепей памяняць назву файла.",
        "fileexists-forbidden": "Файл з такой назвай ужо ёсць, і нельга запісаць паўзверх яго. Калі вы жадаеце абавязкова ўкласці свой файл, то выберыце новую назву. [[File:$1|thumb|center|$1]]",
        "uploadnewversion-linktext": "Укласці новую версію гэтага файла",
        "shared-repo-from": "з $1",
        "shared-repo": "супольнае сховішча",
+       "upload-disallowed-here": "Вы не можаце перапісаць гэты файл.",
        "filerevert": "Адкаціць $1",
        "filerevert-legend": "Адкат файла",
        "filerevert-intro": "Вы адкочваеце '''[[Media:$1|$1]]''' да [$4 версіі з $3, $2].",
        "filedelete-maintenance": "Тымчасова адключаныя сціранне і аднаўленне файлаў (на час тэхнічнага абслугоўвання).",
        "filedelete-maintenance-title": "Немагчыма сцерці файл",
        "mimesearch": "Пошук паводле зместу файла",
-       "mimesearch-summary": "Старонка дазваляе прасейваць файлы ў залежнасці ад іх тыпаў MIME. Фармат уводу: contenttype/subtype, напр., <code>image/jpeg</code>.",
+       "mimesearch-summary": "Старонка дазваляе прасейваць файлы ў залежнасці ад іх тыпаў MIME.\nФармат уводу: contenttype/subtype або contenttype/*, напр., <code>image/jpeg</code>.",
        "mimetype": "Тып MIME:",
        "download": "узяць сабе",
        "unwatchedpages": "Старонкі, якія не назіраюцца",
        "mostlinkedtemplates": "Шаблоны ў частым выкарыстанні",
        "mostcategories": "Артыкулы ў найбольшай кольк. катэгорый",
        "mostimages": "Выявы ў частым выкарыстанні",
-       "mostinterwikis": "Артыкулы з найбольш. кольк. інтэрвкікі",
+       "mostinterwikis": "Артыкулы з найбольш. кольк. інтэрвікі",
        "mostrevisions": "Артыкулы з найбольшай колькасцю версій",
        "prefixindex": "Старонкі з назвамі на ўзор",
        "prefixindex-namespace": "Усе старонкі з прэфіксам ( $1 прастора імёнаў)",
        "allpages-bad-ns": "На {{SITENAME}} прастора назваў \"$1\" не падтрымліваецца.",
        "allpages-hide-redirects": "Схаваць перанакіраванні",
        "cachedspecial-viewing-cached-ttl": "Вы праглядаеце кэшаваную версію старонкі, даўнасць якой можа быць $1.",
+       "cachedspecial-viewing-cached-ts": "Вы праглядаеце кэшаваную версію старонкі, якая можа быць не зусім актуальнай.",
+       "cachedspecial-refresh-now": "Глядзець найноўшую.",
        "categories": "Катэгорыі",
        "categoriespagetext": "Наступн{{PLURAL:$1|ая катэгорыя ўтрымлівае|ыя $1 катэгорыі(-й) утрымліваюць}} старонкі або мультымедыю.\nТут не паказаныя [[Special:UnusedCategories|катэгорыі без складнікаў]].\nГл. таксама [[Special:WantedCategories|патрэбныя катэгорыі]].",
        "categoriesfrom": "Паказаць катэгорыі, пачынаючы з:",
        "linksearch-pat": "Што шукаецца:",
        "linksearch-ns": "Прастора назваў:",
        "linksearch-ok": "Знайсці",
-       "linksearch-text": "Ð\9cожна Ð²Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eваÑ\86Ñ\8c Ð¿Ð°Ð´Ñ\81Ñ\82аноÑ\9eнÑ\8bÑ\8f Ñ\81Ñ\96мвалÑ\8b, Ð½Ð°Ð¿Ñ\80Ñ\8bклад, <code>*.wikipedia.org</code>.\nÐ\9dеабÑ\85одзен Ð¿Ñ\80Ñ\8bнамÑ\81Ñ\96 Ð´Ð°Ð¼ÐµÐ½ Ð²ÐµÑ\80Ñ\85нÑ\8fга Ñ\9eзÑ\80оÑ\9eнÑ\8f, Ð½Ð°Ð¿Ñ\80Ñ\8bклад <code>*.org</code><br />\nÐ\9fÑ\80аÑ\82аколÑ\8b, Ñ\8fкÑ\96Ñ\8f Ð¿Ð°Ð´Ñ\82Ñ\80Ñ\8bмлÑ\96ваÑ\8eÑ\86Ñ\86а: <code>$1</code> (не Ð´Ð°Ð´Ð°Ð²Ð°Ñ\86Ñ\8c Ð»Ñ\8eбÑ\8b Ð· Ñ\96Ñ\85 Ñ\83 Ð²Ð°Ñ\88Ñ\8bм Ð¿Ð¾Ñ\88Ñ\83кÑ\83)",
+       "linksearch-text": "Ð\9cожна Ð²Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eваÑ\86Ñ\8c Ð¿Ð°Ð´Ñ\81Ñ\82аноÑ\9eнÑ\8bÑ\8f Ñ\81Ñ\96мвалÑ\8b, Ð½Ð°Ð¿Ñ\80Ñ\8bклад, <code>*.wikipedia.org</code>.\nÐ\9dеабÑ\85одзен Ð¿Ñ\80Ñ\8bнамÑ\81Ñ\96 Ð´Ð°Ð¼ÐµÐ½ Ð²ÐµÑ\80Ñ\85нÑ\8fга Ñ\9eзÑ\80оÑ\9eнÑ\8e, Ð½Ð°Ð¿Ñ\80Ñ\8bклад <code>*.org</code><br />\n{{PLURAL:$2|Ð\9fÑ\80аÑ\82акол|Ð\9fÑ\80аÑ\82аколÑ\8b}}, Ñ\8fкÑ\96Ñ\8f Ð¿Ð°Ð´Ñ\82Ñ\80Ñ\8bмлÑ\96ваÑ\8eÑ\86Ñ\86а: <code>$1</code> (пÑ\80адвÑ\8bзнаÑ\87анÑ\8b http:// ÐºÐ°Ð»Ñ\96 Ð¿Ñ\80аÑ\82акол Ð½Ðµ Ñ\9eказанÑ\8b)",
        "linksearch-line": "$1, на які спасылаецца $2",
        "linksearch-error": "Узоры можна ставіць толькі ў пачатак адрасу.",
        "listusersfrom": "Паказаць удзельнікаў, пачаўшы з:",
        "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-summary": "На гэтай старонцы пералічаны катэгорыі для асочвання, якія аўтаматычна напаўняюцца праграмным забеспячэннем MediaWiki. Іх можна перайменаваць, змяніўшы адпаведныя сістэмныя паведамленні ў прасторы назваў {{ns:8}}.",
+       "trackingcategories-msg": "Катэгорыя для асочвання",
+       "trackingcategories-name": "Назва паведамлення",
+       "trackingcategories-desc": "Крытэрый уключэння ў катэгорыю",
        "trackingcategories-nodesc": "Апісанне адсутнічае.",
        "trackingcategories-disabled": "Катэгорыя адключана",
        "mailnologin": "Няма эл.адрасу",
        "enotif_subject_moved": "Старонка $1 праекта {{SITENAME}} перанесена {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $2",
        "enotif_subject_restored": "Старонка $1 праекта {{SITENAME}} адноўлена {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $2",
        "enotif_subject_changed": "Старонка $1 праекта {{SITENAME}} зменена {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $2",
+       "enotif_body_intro_deleted": "Старонка $1 праекта {{SITENAME}} сцёрта {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $2 $PAGEEDITDATE, гл. $3.",
+       "enotif_body_intro_created": "Старонка $1 праекта {{SITENAME}} створана {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $2 $PAGEEDITDATE, гл. актуальную версію $3.",
+       "enotif_body_intro_moved": "Старонка $1 праекта {{SITENAME}} перанесена {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $2 $PAGEEDITDATE, гл. актуальную версію $3.",
+       "enotif_body_intro_restored": "Старонка $1 праекта {{SITENAME}} адноўлена {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $2 $PAGEEDITDATE, гл. актуальную версію $3.",
+       "enotif_body_intro_changed": "Старонка $1 праекта {{SITENAME}} зменена {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $2 $PAGEEDITDATE, гл. актуальную версію $3.",
        "enotif_lastvisited": "Гл. $1 каб бачыць усе змены пасля вашага апошняга наведвання.",
        "enotif_lastdiff": "Гл. $1 каб бачыць гэтую мену.",
        "enotif_anon_editor": "ананімны ўдзельнік $1",
-       "enotif_body": "Паважаны(ая) $WATCHINGUSERNAME,\n\n$PAGEEDITDATE старонка праекту «{{SITENAME}}» $PAGETITLE была $CHANGEDORCREATED удзельнікам $PAGEEDITOR, гл. $PAGETITLE_URL для прагляду бягучай версіі.\n\n$NEWPAGE\n\nКароткае апісанне змены: $PAGESUMMARY $PAGEMINOREDIT\n\nЗвярнуцца да змяніўшага:\nэл. пошта: $PAGEEDITOR_EMAIL\nвікі: $PAGEEDITOR_WIKI\n\nКалі вы не наведаеце гэтую старонку, то ў выпадку яе далейшых змен апавяшчэнняў больш не будзе.\nВы можаце таксама адключыць опцыю паведамлення для ўсіх старонак у вашым спісе назірання.\n\n             Сістэма апавяшчэння {{grammar:genitive|{{SITENAME}}}}\n\n--\nЗмена наладаў апавяшчэнняў\n{{canonicalurl:{{#special:Preferences}}}}\n\nЗмена наладаў вашага спісу назіранняў\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nВыдаліць старонкі з вашага спісу назіранага\n$UNWATCHURL\n\nЗваротная сувязь і дапамога\n$HELPPAGE",
+       "enotif_body": "Паважаны(ая) $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nКароткае апісанне змены: $PAGESUMMARY $PAGEMINOREDIT\n\nЗвярнуцца да змяніўшага:\nэл. пошта: $PAGEEDITOR_EMAIL\nвікі: $PAGEEDITOR_WIKI\n\nКалі вы не наведаеце гэтую старонку, прадставіўшыся сістэме, у выпадку далейшай актыўнасці апавяшчэнняў больш не будзе. Вы можаце таксама адключыць опцыю паведамлення для ўсіх старонак у вашым спісе назірання.\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",
        "created": "створана",
        "changed": "зменена",
        "deletepage": "Сцерці старонку",
        "deletecomment": "Прычына:",
        "deleteotherreason": "Іншы/дадатковы повад:",
        "deletereasonotherlist": "Іншы повад",
-       "deletereason-dropdown": "*Ð\97вÑ\8bÑ\87айнÑ\8bÑ\8f Ð¿Ñ\80Ñ\8bÑ\87Ñ\8bнÑ\8b Ñ\81Ñ\86Ñ\96Ñ\80аннÑ\8f\n** Ð\96аданне Ð°Ñ\9eÑ\82аÑ\80а Ñ\82Ñ\8dкÑ\81Ñ\82Ñ\83\n** Ð\9fаÑ\80Ñ\83Ñ\88Ñ\8dнне Ð°Ñ\9eÑ\82аÑ\80Ñ\81кага Ð¿Ñ\80ава\n** Ð\92андалÑ\96зм",
+       "deletereason-dropdown": "*Ð\97вÑ\8bÑ\87айнÑ\8bÑ\8f Ð¿Ñ\80Ñ\8bÑ\87Ñ\8bнÑ\8b Ñ\81Ñ\86Ñ\96Ñ\80аннÑ\8f\n** Ð¡Ð¿Ð°Ð¼\n** Ð\92андалÑ\96зм\n** Ð\9fаÑ\80Ñ\83Ñ\88Ñ\8dнне Ð°Ñ\9eÑ\82аÑ\80Ñ\81кага Ð¿Ñ\80ава\n** Ð\96аданне Ð°Ñ\9eÑ\82аÑ\80а Ñ\82Ñ\8dкÑ\81Ñ\82Ñ\83\n** Ð\9dÑ\8fÑ\81лÑ\83Ñ\88наÑ\8f Ð¿ÐµÑ\80аÑ\81Ñ\8bлка",
        "delete-edit-reasonlist": "Правіць прычыны сцірання",
        "delete-toobig": "Старонка мае вялікую гісторыю правак, больш за $1 {{PLURAL:$1|версію|версій}}. Сціранне такіх старонак было абмежавана, каб пазбегчы ўтварэння выпадковых перашкод працы {{SITENAME}}.",
        "delete-warning-toobig": "Старонка мае вялікую гісторыю правак, больш за $1 {{PLURAL:$1|версію|версій}}. Сціранне такіх старонак можа перашкодзіць працы базы даных {{SITENAME}}; будзьце асцярожнымі.",
+       "deleting-backlinks-warning": "'''Увага:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Іншыя старонкі]] спасылаюцца на ці ўключаюць старонку, якую вы збіраецеся сцерці.",
        "rollback": "Адкаціць праўкі",
        "rollback_short": "Адкат",
        "rollbacklink": "адкат",
+       "rollbacklinkcount": "адкаціць $1 {{PLURAL:$1|праўку|праўкі|правак}}",
        "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}}]]).",
        "editcomment": "Тлумачэнне праўкі было: \"''$1''\".",
        "revertpage": "Праўкі аўтарства [[Special:Contributions/$2|$2]] ([[User talk:$2|размова]]) адкочаныя; вернута апошняя версія аўтарства [[User:$1|$1]]",
-       "revertpage-nouser": "Праўкі (імя ўдзельніка выдалена) адкочаны да версіі [[User:$1|$1]]",
+       "revertpage-nouser": "Праўкі (імя ўдзельніка схавана) адкочаны да версіі {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Адкочаны праўкі $1; вернута апошняя версія $2.",
        "sessionfailure-title": "Памылка сеансу",
        "sessionfailure": "Магчыма, ёсць праблемы з вашым сеансам працы ў сістэме. Таму вам было адмоўлена ў выкананні дзеяння, каб засцерагчыся ад захопу сеанса. Націсніце \"Назад\", і перачытайце старонку, з якой вы сюды прыйшлі, тады паспрабуйце нанова.",
        "prot_1movedto2": "[[$1]] перанесена ў [[$2]]",
        "protect-badnamespace-title": "Прастора імёнаў без аховы",
        "protect-badnamespace-text": "Старонкі ў гэтай прасторы імёнаў не могуць знаходзіцца пад аховай.",
+       "protect-norestrictiontypes-text": "Старонка не можа ахоўвацца, таму што недаступны тыпы абмежавання.",
        "protect-legend": "Пацверджанне пачатку аховы",
        "protectcomment": "Прычына:",
        "protectexpiry": "Канчаецца:",
        "protect-cascadeon": "Старонка зараз ахоўваецца, таму што ўлучана ў наступн{{PLURAL:$1|ую старонку, на якую|ыя старонкі, на якія}} пастаўлена каскадная ахова. Можна змяніць узровень аховы гэтай старонкі, але вынікаў каскаднай аховы гэта не пераможа.",
        "protect-default": "Дазваляць усім удзельнікам",
        "protect-fallback": "Патрабуецца дазвол \"$1\"",
-       "protect-level-autoconfirmed": "Ð\97абаÑ\80анÑ\8fÑ\86Ñ\8c Ð½Ð¾Ð²Ñ\8bм Ñ\96 Ð½ÐµÑ\80Ñ\8dгÑ\96Ñ\81Ñ\82Ñ\80аванÑ\8bм Ñ\83дзелÑ\8cнÑ\96кам",
+       "protect-level-autoconfirmed": "ТолÑ\8cкÑ\96 Ð°Ñ\9eÑ\82а-паÑ\86веÑ\80джанÑ\8bÑ\8f Ñ\83дзелÑ\8cнÑ\96кÑ\96",
        "protect-level-sysop": "Толькі для адміністратараў",
        "protect-summary-cascade": "каскад",
        "protect-expiring": "скончыцца $1 (UTC)",
        "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": "Не ўдалося аднавіць; магчыма, нехта іншы ўжо аднавіў старонку.",
+       "cannotundelete": "Не ўдалося аднавіць:\n$1",
        "undeletedpage": "'''$1 была адноўлена'''\n\nПраверце пералік нядаўніх сціранняў і аднаўленняў у [[Special:Log/delete|журнале сціранняў]].",
        "undelete-header": "Нядаўна сцёртыя старонкі можна паглядзець у [[Special:Log/delete|журнале сціранняў]].",
        "undelete-search-title": "Шукаць у сцёртых старонках",
        "contributions-title": "Уклад {{GENDER:$1|удзельніка|удзельніцы}} $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-newonly": "Паказваць толькі праўкі, якімі створаны старонкі",
        "sp-contributions-submit": "Пошук",
        "whatlinkshere": "Сюды спасылаюцца",
        "whatlinkshere-title": "Старонкі, якія спасылаюцца на \"$1\"",
        "ipb-confirm": "Пацвердзіць блакіроўку",
        "badipaddress": "Недапушчальны адрас IP",
        "blockipsuccesssub": "Паспяховае блакаванне",
-       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] быў заблакаваны.<br />\nБлокі пералічаныя ў [[Special:BlockList|спісе IP-блокаў]].",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] быў заблакаваны.<br />\nБлокі пералічаны ў [[Special:BlockList|спісе блокаў]].",
        "ipb-blockingself": "Вы спрабуеце заблакіраваць сябе самога! Вы ўпэўнены, што хочаце гэта зрабіць?",
        "ipb-confirmhideuser": "Вы намерваецеся заблакіраваць удзельніка і схаваць яго імя. Яно не будзе адлюстроўвацца ў спісах і журналах. Вы ўпэўнены, што жадаеце гэта зрабіць?",
+       "ipb-confirmaction": "Калі вы ўпэўнены, што сапраўды хочаце гэта зрабіць, калі ласка, адзначце поле \"{{int:ipb-confirm}}\" ніжэй.",
        "ipb-edit-dropdown": "Прычыны пастаноўкі блока",
        "ipb-unblock-addr": "Зняць блок з $1",
        "ipb-unblock": "Зняць блок з імя ўдзельніка або адрасу IP",
        "change-blocklink": "змяніць блок",
        "contribslink": "уклад",
        "emaillink": "адправіць ліст",
-       "autoblocker": "Аўтаматычны блок таму што вашым адрасам IP нядаўна карыстаўся \"[[User:$1|$1]]\". Блакаванне $1's патлумачана так: \"'''$2'''\"",
+       "autoblocker": "Аўтаматычны блок, таму што вашым адрасам IP нядаўна карыстаўся \"[[User:$1|$1]]\".\nБлакаванне $1 патлумачана так: \"$2\"",
        "blocklogpage": "Журнал блокаў",
        "blocklog-showlog": "{{GENDER:$1|Гэты ўдзельнік ужо блакаваўся|Гэта ўдзельніца ўжо блакавалася}} раней.\nЖурнал блакіровак прыведзены ніжэй:",
        "blocklog-showsuppresslog": "Гэты ўдзельнік ужо заблакаваны і скрыты. Журнал утойвання прыведзены ніжэй:",
        "blocklogentry": "паставіў блок на \"[[$1]]\", з часам трывання $2 $3",
        "reblock-logentry": "змененыя настройкі блока для [[$1]] з часам згасання $2 $3",
-       "blocklogtext": "Ð\96Ñ\83Ñ\80нал Ð¿Ð°Ñ\81Ñ\82аноÑ\9eкÑ\96 Ñ\96 Ð·Ð´Ñ\8bманнÑ\8f Ð±Ð»Ð¾ÐºÐ°Ñ\9e. Ð\90Ñ\9eÑ\82амаÑ\82Ñ\8bÑ\87на Ð±Ð»Ð°ÐºÐ°Ð²Ð°Ð½Ñ\8bÑ\8f Ð°Ð´Ñ\80аÑ\81Ñ\8b IP Ñ\82Ñ\83Ñ\82 Ð½Ðµ Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\8eÑ\86Ñ\86а. Ð¡Ð¿Ñ\96Ñ\81 Ð°ÐºÑ\82Ñ\83алÑ\8cнÑ\8bÑ\85 Ð·Ð°Ð±Ð°Ñ\80он Ñ\96 Ð±Ð»Ð¾ÐºÐ°Ñ\9e Ð±Ð°Ñ\87 Ñ\83 [[Special:BlockList|Ñ\81пÑ\96Ñ\81е Ð±Ð»Ð¾ÐºÐ°Ñ\9e IP]].",
+       "blocklogtext": "Ð\96Ñ\83Ñ\80нал Ð¿Ð°Ñ\81Ñ\82аноÑ\9eкÑ\96 Ñ\96 Ð·Ð½Ñ\8fÑ\86Ñ\86Ñ\8f Ð±Ð»Ð¾ÐºÐ°Ñ\9e. Ð\90Ñ\9eÑ\82амаÑ\82Ñ\8bÑ\87на Ð±Ð»Ð°ÐºÐ°Ð²Ð°Ð½Ñ\8bÑ\8f Ð°Ð´Ñ\80аÑ\81Ñ\8b IP Ñ\82Ñ\83Ñ\82 Ð½Ðµ Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\8eÑ\86Ñ\86а. Ð¡Ð¿Ñ\96Ñ\81 Ð°ÐºÑ\82Ñ\83алÑ\8cнÑ\8bÑ\85 Ð·Ð°Ð±Ð°Ñ\80он Ñ\96 Ð±Ð»Ð¾ÐºÐ°Ñ\9e Ð±Ð°Ñ\87 Ñ\83 [[Special:BlockList|Ñ\81пÑ\96Ñ\81е Ð±Ð»Ð¾ÐºÐ°Ñ\9e]].",
        "unblocklogentry": "зняты блок з $1",
        "block-log-flags-anononly": "толькі ананімныя ўдзельнікі",
        "block-log-flags-nocreate": "стварэнне рахунку не дазволена",
        "proxyblockreason": "Ваш адрас IP заблакаваны, таму што ён належыць да ліку адкрытых проксі.\nГэта сур'ёзная праблема бяспекі; паведамце пра гэта свайму Інтэрнет-правайдэру або ў службу тэхнічнай падтрымкі.",
        "sorbsreason": "Ваш адрас IP знаходзіцца ў спісе забароненых адкрытых проксі, якім карыстаецца {{SITENAME}}.",
        "sorbs_create_account_reason": "Ваш адрас IP знаходзіцца ў спісе забароненых адкрытых проксі, якім карыстаецца {{SITENAME}}.\nВы не можаце рэгістравацца",
+       "xffblockreason": "IP-адрас, прыведзены ў загалоўку X-Forwarded-For, або ваш, або проксі-сервера, які вы выкарыстоўваеце, быў заблакаваны. Першапачаткова блок патлумачаны так: $1",
        "cant-see-hidden-user": "Удзельнік, якога вы спрабуеце заблакіраваць, ужо заблакіраваны і схаваны. Паколькі ў вас няма дазволу на працу па схаванні ўдзельнікаў, вы не можаце прагледзець ці змяніць гэту блакіроўку.",
        "ipbblocked": "Вы не можаце блакіраваць ці разблакіраваць іншых удзельнікаў, бо вы самі заблакіраваны",
        "ipbnounblockself": "Вы не можаце разблакіраваць самога сябе",
        "lockedbyandtime": "($1 $2 $3)",
        "move-page": "Перанесці $1",
        "move-page-legend": "Перанесці старонку",
-       "movepagetext": "Форма, што ніжэй, перанясе старонку пад новую назву, і таксама перанясе пад новую назву ўсю гісторыю старонкі.\nСтарая назва ператворыцца ў перасылку да новай.\nПерасылкі, што вялі да старой назвы, можна ўдакладніць аўтаматычна.\nКалі такое аўта-удакладненне не будзе рабіцца, трэба праверыць наяўнасць [[Special:DoubleRedirects|падвойных]] ці [[Special:BrokenRedirects|зламаных]] перасылак.\nАдказнасць за правільную працу спасылак ляжыць на тым, хто пераносіць.\n\nЗаўважце, што старонка '''не будзе''' перанесена, калі пад новай назвай ужо існуе старонка, не пустая і не перасылка і без гісторыі правак. Такім чынам, пры пераносе нельга перапісаць наяўную старонку, а магчымую памылку можна адразу выправіць, пераносячы старонку ў адваротным кірунку.\n\n'''УВАГА!'''\nДля папулярнай старонкі гэта можа стацца рэзкім і нечаканым змяненнем;\nупэўніцеся, што разумееце наступствы пераносу перад тым, як яго зрабіць.",
+       "movepagetext": "Форма, што ніжэй, перанясе старонку пад новую назву, і таксама перанясе пад новую назву ўсю гісторыю старонкі.\nСтарая назва ператворыцца ў перасылку да новай.\nПерасылкі, што вялі да старой назвы, можна ўдакладніць аўтаматычна.\nКалі такое аўта-удакладненне не будзе рабіцца, трэба праверыць наяўнасць [[Special:DoubleRedirects|падвойных]] ці [[Special:BrokenRedirects|зламаных]] перасылак.\nАдказнасць за правільную працу спасылак ляжыць на тым, хто пераносіць.\n\nЗаўважце, што старонка <strong>не будзе</strong> перанесена, калі пад новай назвай ужо існуе старонка, і гэта не перасылка без гісторыі правак.\nТакім чынам, пры пераносе нельга перапісаць наяўную старонку, а магчымую памылку можна адразу выправіць, пераносячы старонку ў адваротным кірунку.\n\n</strong>Увага!</strong>\nДля папулярнай старонкі гэта можа стацца рэзкім і нечаканым змяненнем;\nупэўніцеся, што разумееце наступствы пераносу перад тым, як яго зрабіць.",
        "movepagetext-noredirectfixer": "Форма, што ніжэй, перанясе старонку пад новую назву, і таксама перанясе пад новую назву ўсю гісторыю старонкі.\nСтарая назва ператворыцца ў перасылку да новай.\nПерасылкі, што вялі да старой назвы, можна ўдакладніць аўтаматычна.\nКалі такое аўта-удакладненне не будзе рабіцца, трэба праверыць наяўнасць [[Special:DoubleRedirects|падвойных]] ці [[Special:BrokenRedirects|зламаных]] перасылак.\nАдказнасць за правільную працу спасылак ляжыць на тым, хто пераносіць.\n\nЗаўважце, што старонка '''не будзе''' перанесена, калі пад новай назвай ужо існуе старонка, не пустая і не перасылка і без гісторыі правак. Такім чынам, пры пераносе нельга перапісаць наяўную старонку, а магчымую памылку можна адразу выправіць, пераносячы старонку ў адваротным кірунку.\n\n'''УВАГА!'''\nДля папулярнай старонкі гэта можа стацца рэзкім і нечаканым змяненнем;\nупэўніцеся, што разумееце наступствы пераносу перад тым, як яго зрабіць.",
        "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": "Перанесці старонку",
        "allmessagesname": "Назва",
        "allmessagesdefault": "Прадвызначаны тэкст",
        "allmessagescurrent": "Актуальны тэкст",
-       "allmessagestext": "Пералік сістэмных паведамленняў, наяўных у прасторы назваў MediaWiki.",
+       "allmessagestext": "Пералік сістэмных паведамленняў, наяўных у прасторы назваў MediaWiki.\nКалі ласка, наведайце пляцоўкі [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] і [//translatewiki.net translatewiki.net], калі жадаеце ўдзельнічаць у перакладзе MediaWiki.",
        "allmessagesnotsupportedDB": "Немагчыма паказаць '''{{ns:special}}:{{:{{ns:mediawiki}}:Allmessages}}''', таму што не працуе '''$wgUseDatabaseMessages'''.",
        "allmessages-filter-legend": "Фільтры",
        "allmessages-filter": "Са станам апрацоўкі:",
        "thumbnail-more": "Павялічыць",
        "filemissing": "Адсутны файл",
        "thumbnail_error": "Памылка пры стварэнні драбніцы: $1",
+       "thumbnail_error_remote": "Паведамленне пра памылку з $1:\n$2",
        "djvu_page_error": "Старонка DjVu па-за інтэрвалам",
        "djvu_no_xml": "Не ўдалося ўзяць XML для файла DjVu",
        "thumbnail-temp-create": "Не ўдаецца стварыць часовы файл эскіза",
        "importuploaderrortemp": "Не ўдалося атрымаць файл дзеля імпартавання. Няма тымчасовага каталога.",
        "import-parse-failure": "Памылка аналізу XML пры імпартаванні",
        "import-noarticle": "Няма старонак, каб іх імпартаваць!",
-       "import-nonewrevisions": "УÑ\81е Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\96 Ñ\9eжо Ð±Ñ\8bлÑ\96 Ñ\96мпаÑ\80Ñ\82аванÑ\8bÑ\8f Ñ\80аней.",
+       "import-nonewrevisions": "Ð\9dÑ\96Ñ\87ога Ð½Ðµ Ñ\96мпаÑ\80Ñ\82авана (Ñ\83Ñ\81е Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\96 Ð°Ð»Ñ\8cбо Ñ\9eжо Ð¿Ñ\80Ñ\8bÑ\81Ñ\83Ñ\82нÑ\96Ñ\87аÑ\8eÑ\86Ñ\8c, Ð°Ð»Ñ\8cбо Ð¿Ñ\80апÑ\83Ñ\88Ñ\87анÑ\8b Ð·-за Ð¿Ð°Ð¼Ñ\8bлак).",
        "xml-error-string": "$1 у радку $2, знак $3 (байт $4): $5",
        "import-upload": "Укласці даныя XML",
        "import-token-mismatch": "Згублены звесткі пра сеанс. Паспрабуйце ізноў.",
        "tooltip-preferences-save": "Захаваць настройкі",
        "tooltip-summary": "Дайце кароткае апісанне",
        "common.css": "/** CSS, упісаны сюды, будзе дзейнічаць на карыстальнікаў усіх світаў */",
-       "monobook.css": "/* CSS, упісаны сюды, будзе дзейнічаць на браўзер кожнага чытача з актыўнай світай Monobook */",
        "common.js": "/* Яваскрыпт, упісаны сюды, будзе выконвацца для кожнага чытача, на кожным счытванні старонкі. */",
-       "monobook.js": "/* Any JavaScript here will be loaded for users using the MonoBook skin */",
        "anonymous": "Ананімны{{PLURAL:$1| ўдзельнік|я ўдзельнікі}} на пляцоўцы {{SITENAME}}",
        "siteuser": "удзельнік $1 з {{SITENAME}}",
        "anonuser": "ананімны ўдзельнік {{SITENAME}} - $1",
        "pageinfo-title": "Інфармацыя для \"$1\"",
        "pageinfo-header-basic": "Агульныя звесткі",
        "pageinfo-header-edits": "Гісторыя правак",
-       "pageinfo-robot-index": "Індэксуюцца",
-       "pageinfo-robot-noindex": "Не індэксуюцца",
+       "pageinfo-header-restrictions": "Ахова старонкі",
+       "pageinfo-header-properties": "Уласцівасці старонкі",
+       "pageinfo-display-title": "Паказаная назва",
+       "pageinfo-default-sort": "Прадвызначаны ключ парадкавання",
+       "pageinfo-length": "Даўжыня старонкі (у байтах)",
+       "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 {{PLURAL:$1|назіральнік|назіральнікі|назіральнікаў}}",
        "pageinfo-redirects-name": "Колькасць перасылак на гэту старонку",
+       "pageinfo-subpages-name": "Колькасць падстаронак гэтай старонкі",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|перасылка|перасылкі|перасылак}}; $3 {{PLURAL:$3|прамая спасылка|прамыя спасылкі|прамых спасылак}})",
+       "pageinfo-firstuser": "Стваральнік старонкі",
+       "pageinfo-firsttime": "Дата стварэння старонкі",
        "pageinfo-lastuser": "Апошні рэдактар",
        "pageinfo-lasttime": "Дата апошняй праўкі",
        "pageinfo-edits": "Агульная колькасць правак",
        "pageinfo-authors": "Агульная колькасць розных аўтараў",
+       "pageinfo-recent-edits": "Колькасць нядаўніх правак (за апошнія $1)",
+       "pageinfo-recent-authors": "Колькасць аўтараў за апошні час",
+       "pageinfo-hidden-categories": "Схаван{{PLURAL:$1|ая катэгорыя|ыя катэгорыі}} ($1)",
+       "pageinfo-templates": "Выкарыстаны {{PLURAL:$1|шаблон|шаблоны}} ($1)",
+       "pageinfo-transclusions": "Выкарыстаны на {{PLURAL:$1|старонцы|старонках}} ($1)",
+       "pageinfo-toolboxlink": "Звесткі пра старонку",
        "pageinfo-redirectsto": "Перасылае да",
-       "skinname-monobook": "Манабук",
+       "pageinfo-redirectsto-info": "звесткі",
+       "pageinfo-contentpage": "Улічваецца як змястоўная старонка",
+       "pageinfo-contentpage-yes": "Так",
+       "pageinfo-protect-cascading": "Каскадная ахова пачынаецца адсюль",
+       "pageinfo-protect-cascading-yes": "Да",
+       "pageinfo-protect-cascading-from": "Каскадная ахова ад",
+       "pageinfo-category-info": "Звесткі аб катэгорыі",
+       "pageinfo-category-pages": "Колькасць старонак",
+       "pageinfo-category-subcats": "Колькасць падкатэгорый",
+       "pageinfo-category-files": "Колькасць файлаў",
        "markaspatrolleddiff": "Пазначыць як ухваленае",
        "markaspatrolledtext": "Пазначыць старонку як ухваленую",
        "markedaspatrolled": "Пазначана як ухваленае",
        "markedaspatrollederror": "Немагчыма пазначыць як вартае",
        "markedaspatrollederrortext": "Трэба паказаць тую версію, якую жадаеце пазначыць ухваленай.",
        "markedaspatrollederror-noautopatrol": "Вам не дазволена значыць уласныя праўкі як ухваленыя.",
+       "markedaspatrollednotify": "Змена ў $1 пазначана як ухваленая.",
+       "markedaspatrollederrornotify": "Не ўдалося пазначыць як ухваленую.",
        "patrol-log-page": "Журнал ухваленых",
        "patrol-log-header": "Журнал ухваленых версій",
        "log-show-hide-patrol": "$1 журнал ухваленняў",
        "file-info-size-pages": "$1 × $2 пікселяў, памер файла: $3, MIME-тип: $4, $5 {{PLURAL:$5|старонка|старонкі|старонак}}",
        "file-nohires": "Без версіі ў лепшым разрозненні.",
        "svg-long-desc": "файл SVG, намінальна $1 × $2 кропак, аб'ём файла: $3",
+       "svg-long-error": "Няспраўны файл SVG: $1",
        "show-big-image": "Арыгінальны файл",
        "show-big-image-preview": "Памер пры папярэднім праглядзе: $1.",
        "show-big-image-other": "{{PLURAL:$2|Іншы дазвол|Іншыя дазволы}}: $1.",
        "newimages-summary": "Тут паказаныя нядаўна ўкладзеныя файлы.",
        "newimages-legend": "Фільтр",
        "newimages-label": "Назва файла (або яе частка):",
+       "newimages-showbots": "Паказваць укладанні ботамі",
        "noimages": "Тут нічога няма.",
        "ilsubmit": "Знайсці",
        "bydate": "п. датаў",
        "minutes": "{{PLURAL:$1|$1 хвіліна|$1 хвіліны|$1 хвілін}}",
        "hours": "{{PLURAL:$1|$1 гадзіна|$1 гадзіны|$1 гадзін}}",
        "days": "{{PLURAL:$1|$1 дзень|$1 дня|$1 дзён}}",
+       "weeks": "{{PLURAL:$1|$1 тыдзень|$1 тыдні|$1 тыдняў}}",
+       "months": "{{PLURAL:$1|$1 месяц|$1 месяцы|$1 месяцаў}}",
+       "years": "{{PLURAL:$1|$1 год|$1 гады|$1 гадоў}}",
        "ago": "$1 назад",
+       "just-now": "толькі што",
+       "hours-ago": "$1 {{PLURAL:$1|гадзіну|гадзіны|гадзін}} таму",
+       "minutes-ago": "$1 {{PLURAL:$1|мінуту|мінуты|мінут}} таму",
+       "seconds-ago": "$1 {{PLURAL:$1|секунду|секунды|секундаў}} таму",
        "monday-at": "У панядзелак а $1",
        "tuesday-at": "У аўторак а $1",
        "wednesday-at": "У сераду а $1",
        "invalidateemail": "Адмовіцца ад пацверджання эл.пошты",
        "scarytranscludedisabled": "[Устаўлянне з іншых вікі не дазволена]",
        "scarytranscludefailed": "[Не ўдалося атрымаць шаблон для $1]",
+       "scarytranscludefailed-httpstatus": "[Не ўдалося атрымаць шаблон для $1: HTTP $2]",
        "scarytranscludetoolong": "[Занадта доўгі URL]",
        "deletedwhileediting": "'''Увага''': гэтая старонка была сцёрта пасля таго, як вы пачалі з ёй працаваць!",
        "confirmrecreate": "Удзельнік [[User:$1|$1]] ([[User talk:$1|размова]]) сцёр гэты артыкул пасля таго, як вы пачалі працу з ім, падаўшы прычыну:\n: ''$2''\nПацвердзіце свой намер аднавіць гэты артыкул.",
        "confirm-watch-top": "Дабавіць старонку ў спіс назірання",
        "confirm-unwatch-button": "ОК",
        "confirm-unwatch-top": "Выняць гэту старонку з вашага спіса назірання?",
+       "quotation-marks": "«$1»",
        "imgmultipageprev": "← папярэдняя старонка",
        "imgmultipagenext": "наступная старонка →",
        "imgmultigo": "Пераход!",
        "autosumm-replace": "Замена старонкі на '$1'",
        "autoredircomment": "Перасылае да [[$1]]",
        "autosumm-new": "Новая старонка: '$1'",
-       "lag-warn-normal": "Змены, зробленыя менш за $1 {{PLURAL:$1|сек.|сек.}} назад, могуць не трапіць у гэты спіс.",
-       "lag-warn-high": "Ð\97 Ð¿Ñ\80Ñ\8bÑ\87Ñ\8bнÑ\8b Ð¼Ð¾Ñ\86нÑ\8bÑ\85 Ð·Ð°Ñ\82Ñ\80Ñ\8bмак Ð½Ð° Ñ\81еÑ\80веÑ\80Ñ\8b Ð±Ð°Ð· Ð´Ð°Ð½Ñ\8bÑ\85, Ð·Ð¼ÐµÐ½Ñ\8b, Ð·Ñ\80обленÑ\8bÑ\8f Ð¿Ð°Ð·Ð½ÐµÐ¹ Ñ\87Ñ\8bм $1 {{PLURAL:$1|Ñ\81ек.|Ñ\81ек.}} назад, могуць не трапіць у гэты спіс.",
+       "lag-warn-normal": "Змены, зробленыя менш за $1 {{PLURAL:$1|сек.|сек.}} таму назад, могуць не трапіць у гэты спіс.",
+       "lag-warn-high": "Ð\97 Ð¿Ñ\80Ñ\8bÑ\87Ñ\8bнÑ\8b Ð¼Ð¾Ñ\86нÑ\8bÑ\85 Ð·Ð°Ñ\82Ñ\80Ñ\8bмак Ð½Ð° Ñ\81еÑ\80веÑ\80Ñ\8b Ð±Ð°Ð· Ð·Ð²ÐµÑ\81Ñ\82ак, Ð·Ð¼ÐµÐ½Ñ\8b, Ð·Ñ\80обленÑ\8bÑ\8f Ð¼ÐµÐ½Ñ\88 Ð·Ð° $1 {{PLURAL:$1|Ñ\81ек.|Ñ\81ек.}} Ñ\82амÑ\83 назад, могуць не трапіць у гэты спіс.",
        "watchlistedit-normal-title": "Спіс назірання",
        "watchlistedit-normal-legend": "Выдаленне складнікаў са спіса назірання",
        "watchlistedit-normal-explain": "Назвы старонак з ліку назіраных паказаныя ніжэй. Каб нешта сцерці, адзначце клетку побач з адпаведным радком, пасля чаго націсніце \"Выняць складнікі\". Таксама можна правіць гэты спіс непасрэдна, [[Special:EditWatchlist/raw|без афармлення]].",
        "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 складнік выняты|$1 складнікі выняты|$1 складнікаў вынята}}:",
+       "watchlistedit-too-many": "Занадта шмат старонак, каб паказаць тут.",
        "watchlisttools-clear": "Ачысціць спіс назірання",
        "watchlisttools-view": "Паказаць змяненні",
        "watchlisttools-edit": "Паказаць спіс назірання",
        "duplicate-defaultsort": "Увага: прадвызначаная клавіша ўпарадкавання \"$2\" замяніла ранейшую такую клавішу \"$1\".",
        "version": "Версія",
        "version-extensions": "Устаноўленыя прыстаўкі",
+       "version-skins": "Устаноўленыя вокладкі",
        "version-specialpages": "Адмысловыя старонкі",
        "version-parserhooks": "Хукі парсера",
        "version-variables": "Зменныя",
        "version-antispam": "Абарона ад спаму",
-       "version-skins": "Вокладкі",
        "version-other": "Рознае",
        "version-mediahandlers": "Апрацоўнікі мультымедый",
        "version-hooks": "Хукі",
        "version-hook-name": "Назва хука",
        "version-hook-subscribedby": "Сюды падпісаныя",
        "version-version": "(Версія $1)",
-       "version-license": "Ліцэнзія",
+       "version-no-ext-name": "[без назвы]",
+       "version-license": "Ліцэнзія MediaWiki",
+       "version-ext-license": "Ліцэнзія",
+       "version-ext-colheader-name": "Прыстаўка",
+       "version-skin-colheader-name": "Вокладка",
+       "version-ext-colheader-version": "Версія",
+       "version-ext-colheader-license": "Ліцэнзія",
        "version-ext-colheader-description": "Апісанне",
        "version-ext-colheader-credits": "Аўтары",
        "version-license-title": "Ліцэнзія $1",
+       "version-license-not-found": "Не знойдзена падрабязнай інфармацыі аб ліцэнзіі для гэтай прыстаўкі.",
        "version-poweredby-credits": "Пляцоўка працуе на '''[https://www.mediawiki.org/ MediaWiki]''', капірайт © 2001-$1 $2.",
        "version-poweredby-others": "іншыя",
+       "version-poweredby-translators": "перакладчыкі translatewiki.net",
        "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 атрымайце яе з Інтэрнэту].",
        "version-software": "Устаноўленыя праграмныя прадукты",
        "version-software-product": "Прадукт",
        "version-software-version": "Версія",
        "version-entrypoints-header-entrypoint": "Кропка ўваходу",
        "version-entrypoints-header-url": "URL",
+       "redirect-legend": "Перасылка да файла ці старонкі",
+       "redirect-submit": "Перайсці",
+       "redirect-lookup": "Шукаць:",
+       "redirect-value": "Значэнне:",
+       "redirect-user": "ID удзельніка",
+       "redirect-page": "Ідэнтыфікатар старонкі",
+       "redirect-revision": "Версія старонкі",
+       "redirect-file": "Назва файла",
+       "redirect-not-exists": "Значэнне не знойдзена",
        "fileduplicatesearch": "Пошук дублікатных файлаў",
        "fileduplicatesearch-summary": "Пошук дублікатных файлах на падставе іх хэшаў.",
        "fileduplicatesearch-legend": "Знайсці дублікаты",
        "specialpages-group-highuse": "Старонкі частага карыстання",
        "specialpages-group-pages": "Пералікі старонак",
        "specialpages-group-pagetools": "Прылады для старонак",
-       "specialpages-group-wiki": "Вікі-даныя і прылады",
+       "specialpages-group-wiki": "Вікізвесткі і прылады",
        "specialpages-group-redirects": "Адмысловыя старонкі-перасылкі",
        "specialpages-group-spam": "Прылады супраць спама",
        "blankpage": "Пустая старонка",
        "tags": "Дапушчальныя біркі",
        "tag-filter": "Фільтр [[Special:Tags|бірак]]:",
        "tag-filter-submit": "Фільтр",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Тэг|Тэгі}}]]: $2)",
        "tags-title": "Біркі",
        "tags-intro": "Тут пералічаныя біркі, якімі праграмы могуць пазначыць праўку, а таксама іх значэнні.",
        "tags-tag": "Назва біркі",
        "tags-display-header": "Назва на паказ",
        "tags-description-header": "Поўнае апісанне значэння",
+       "tags-active-header": "Актыўны?",
        "tags-hitcount-header": "Пазначаных правак",
+       "tags-active-yes": "Да",
+       "tags-active-no": "Не",
        "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-submit": "Падаць",
        "htmlform-reset": "Адкаціць змяненні",
        "htmlform-selectorother-other": "Рознае",
+       "htmlform-no": "Не",
        "htmlform-cloner-create": "Дадаць яшчэ",
+       "htmlform-cloner-delete": "Сцерці",
+       "htmlform-cloner-required": "Неабходна хаця б адно значэнне.",
        "sqlite-has-fts": "$1 з падтрымкай поўна-тэкставага пошуку",
        "sqlite-no-fts": "$1 без падтрымкі поўна-тэкставага пошуку",
-       "logentry-delete-delete": "$1 выдаліў старонку $3",
+       "logentry-delete-delete": "$1 {{GENDER:$2|сцёр|сцёрла}} старонку $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-suppress-revision-legacy": "$1 утойліва змяніў бачнасць версій на старонцы $3",
+       "logentry-suppress-event": "$1 утойліва {{GENDER:$2|змяніў|змяніла}} бачнасць {{PLURAL:$5|запісу журнала|$5 запісаў журнала}} $3: $4",
+       "logentry-suppress-revision": "$1 утойліва {{GENDER:$2|змяніў|змяніла}} бачнасць {{PLURAL:$5|версіі|$5 версій}} старонкі $3: $4",
+       "logentry-suppress-event-legacy": "$1 утойліва {{GENDER:$2|змяніў|змяніла}} бачнасць запісаў журнала $3",
+       "logentry-suppress-revision-legacy": "$1 утойліва {{GENDER:$2|змяніў|змяніла}} бачнасць версій на старонцы $3",
        "revdelete-content-hid": "змест схаваны",
        "revdelete-summary-hid": "апісанне змены схавана",
        "revdelete-uname-hid": "імя ўдзельніка схавана",
        "revdelete-uname-unhid": "імя ўдзельніка адкрыта",
        "revdelete-restricted": "пастаўленыя абмежаванні на адміністратараў",
        "revdelete-unrestricted": "знятыя абмежаванні з адміністратараў",
-       "logentry-move-move": "$1 перанёс старонку $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 адпатруляваў версію $4 старонкі $3",
-       "logentry-patrol-patrol-auto": "$1 аўтаматычна адпатруляваў версію $4 старонкі $3",
-       "logentry-newusers-newusers": "$1 стварыў уліковы запіс удзельніка",
-       "logentry-newusers-create": "$1 стварыў уліковы запіс удзельніка",
-       "logentry-newusers-create2": "$1 стварыў уліковы запіс удзельніка $3",
+       "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-patrol-patrol": "$1 {{GENDER:$2|адзначыў|адзначыла}} версію $4 старонкі $3 як ухваленую",
+       "logentry-patrol-patrol-auto": "$1 аўтаматычна {{GENDER:$2|адзначыў|адзначыла}} версію $4 старонкі $3 як ухваленую",
+       "logentry-newusers-newusers": "Створаны ўліковы запіс {{GENDER:$2|удзельніка}} $1",
+       "logentry-newusers-create": "Створаны ўліковы запіс {{GENDER:$4|удзельніка|удзельніцы}} $1",
+       "logentry-newusers-create2": "$1 {{GENDER:$2|стварыў|стварыла}} уліковы запіс {{GENDER:$4|удзельніка|удзельніцы}} $3",
+       "logentry-newusers-byemail": "$1 {{GENDER:$2|стварыў|стварыла}} ўліковы запіс {{GENDER:$4|удзельніка|удзельніцы}} $3; пароль адпраўлены на адрас эл.пошты.",
        "logentry-newusers-autocreate": "Аўтаматычна створаны ўліковы запіс удзельніка $1",
+       "logentry-rights-rights": "$1 {{GENDER:$2|змяніў|змяніла}} прыналежнасць $3 да групы з $4 на $5",
+       "logentry-rights-rights-legacy": "$1 {{GENDER:$2|змяніў|змяніла}} прыналежнасць $3 да групы",
+       "logentry-rights-autopromote": "$1 аўтаматычна {{GENDER:$2|пераведзены|пераведзена}} з $4 у $5",
        "rightsnone": "(няма)",
        "feedback-bugornote": "Калі вы гатовыя падрабязна апісаць тэхнічную праблему, калі ласка, [$1 паведаміце пра памылку].\nУ адваротным выпадку вы можаце выкарыстоўваць гэтую простую форму. Ваш каментар будзе дададзены на старонку «[$3 $2]» разам з вашым імем удзельніка і выкарыстоўваемым браўзерам.",
        "feedback-subject": "Тэма:",
        "api-error-empty-file": "Дасланы Вамі файл быў пусты.",
        "api-error-emptypage": "Стварэнне новых пустых старонак забаронена.",
        "api-error-fetchfileerror": "Унутраная памылка: падчас атрымання файла штосьці здарылася.",
+       "api-error-fileexists-forbidden": "Файл з назвай \"$1\" ужо ёсць і не можа быць перапісаны.",
+       "api-error-fileexists-shared-forbidden": "Файл з назвай \"$1\" ужо ёсць у супольным сховішчы файлаў, ён не можа быць перапісаны.",
        "api-error-file-too-large": "Дасланы Вамі файл занадта вялікі.",
        "api-error-filename-tooshort": "Імя файла занадта кароткае.",
        "api-error-filetype-banned": "Гэты тып файлаў забаронены.",
        "api-error-ok-but-empty": "Унутраная памылка: няма адказу ад сервера.",
        "api-error-overwrite": "Замена існуючага файла не дапускаецца.",
        "api-error-stashfailed": "Унутраная памылка: сервер не змог захаваць часовы файл.",
+       "api-error-publishfailed": "Унутраная памылка: сервер не змог апублікаваць тымчасовы файл.",
        "api-error-timeout": "Сервер не адказаў у чаканы тэрмін.",
        "api-error-unclassified": "Узнікла невядомая памылка",
        "api-error-unknown-code": "Невядомая памылка: «$1».",
        "duration-millennia": "$1 {{PLURAL:$1|тысячагоддзе|тысячагоддзі|тысячагоддзяў}}",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунды|секундаў}}",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунды|секундаў}}",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байт|байты|байтаў}}",
+       "limitreport-templateargumentsize": "Памер аргументаў шаблона",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|байт|байты|байтаў}}",
+       "limitreport-expansiondepth": "Найбольшая глыбіня разгортвання",
+       "limitreport-expensivefunctioncount": "Колькасць працаёмкіх зваротаў да функцый парсера",
+       "expandtemplates": "Разгортванне шаблонаў",
+       "expand_templates_intro": "Гэта адмысловая старонка бярэ тэкст і разгортвае ў ім усе шаблоны рэкурсіўна.\nТаксама разгортвае падтрыманыя функцыі парсера кшталту\n<code><nowiki>{{</nowiki>#language:…}}</code> і зменныя віду\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nФактычна, яна разгортвае ў пэўнай ступені ўсё ў двайных фігурных дужках.",
+       "expand_templates_input": "Уваходны тэкст:",
+       "expand_templates_output": "Вынік",
        "expand_templates_remove_comments": "Сцерці каментарыі",
-       "expand_templates_preview": "Перадпаказ"
+       "expand_templates_generate_rawhtml": "Паказаць зыходны код HTML",
+       "expand_templates_preview": "Перадпаказ",
+       "pagelang-name": "Старонка",
+       "pagelang-language": "Мова",
+       "pagelang-use-default": "Прадвызначаная мова",
+       "pagelang-select-lang": "Выберыце мову",
+       "right-pagelang": "Змяняць мову старонкі",
+       "action-pagelang": "змяняць мову старонкі",
+       "log-description-pagelang": "Гэта журнал змяненняў у мовах старонкі.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|змяніў|змяніла}} мову старонкі $3 з $4 на $5."
 }
index cd536d8..d279705 100644 (file)
        "qbmyoptions": "Моите страници",
        "faq": "ЧЗВ",
        "faqpage": "Project:ЧЗВ",
-       "vector-action-addsection": "Добавяне на тема",
-       "vector-action-delete": "Изтриване",
-       "vector-action-move": "Преместване",
-       "vector-action-protect": "Защита",
-       "vector-action-undelete": "Възстановяване",
-       "vector-action-unprotect": "Промяна на защитата",
-       "vector-view-create": "Създаване",
-       "vector-view-edit": "Редактиране",
-       "vector-view-history": "История",
-       "vector-view-view": "Преглед",
-       "vector-view-viewsource": "Преглед на кода",
        "actions": "Действия",
        "namespaces": "Именни пространства",
        "variants": "Варианти",
        "searchrelated": "свързани",
        "searchall": "всички",
        "showingresults": "Показване на до {{PLURAL:$1|'''1''' резултат|'''$1''' резултата}}, като се започва от номер '''$2'''.",
-       "showingresultsnum": "Показване на {{PLURAL:$3|'''1''' резултат|'''$3''' резултата}}, като се започва от номер '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Резултат '''$1''' от '''$3'''|Резултати '''$1 - $2''' от '''$3'''}} за '''$4'''",
        "search-nonefound": "Няма резултати, които да отговарят на заявката.",
        "powersearch-legend": "Разширено търсене",
        "tooltip-preferences-save": "Съхраняване на предпочитанията",
        "tooltip-summary": "Въведете кратко резюме",
        "common.css": "/* Чрез редактиране на този файл ще промените всички облици */",
-       "monobook.css": "/* Чрез редактиране на този файл можете да промените облика Монобук */",
        "common.js": "/* Този файл съдържа код на Джаваскрипт и се зарежда при всички потребители. */",
-       "monobook.js": "/* Остаряла страница; използвайте [[MediaWiki:Common.js]] */",
        "anonymous": "{{PLURAL:$1|Анонимен потребител|Анонимни потребители}}на {{SITENAME}}",
        "siteuser": "потребител на {{SITENAME}} $1",
        "anonuser": "Анонимен потребител на {{SITENAME}} $1",
        "pageinfo-category-pages": "Брой страници",
        "pageinfo-category-subcats": "Брой подкатегории",
        "pageinfo-category-files": "Брой файлове",
-       "skinname-monobook": "Монобук",
        "markaspatrolleddiff": "Отбелязване като проверена редакция",
        "markaspatrolledtext": "Отбелязване на редакцията като проверена",
        "markedaspatrolled": "Проверена редакция",
index 9ac5f31..2231bd2 100644 (file)
@@ -17,7 +17,6 @@
        "tog-showtoolbar": "सम्पादन औजार् बक्सा के दिखाइल् जाए",
        "tog-editondblclick": "दुई क्लिक पर पृष्ठ संपादित करीं (जावास्क्रिप्ट आवश्यक बा)",
        "tog-editsectiononrightclick": "अनुभाग शीर्षक पर दायाँ क्लिक कर अनुभाग सम्पादित करीं (जावास्क्रिप्ट आवश्यक बा)",
-       "tog-rememberpassword": "इ ब्राउजर पर हमार प्रवेश जारी रहे (अधिकतम $1 {{PLURAL:$1|दिन|दिन}})",
        "tog-watchcreations": "हमरा द्वारा निर्मित पृष्ठ आ हमरा द्वारा लादल फ़ाइलन के हमार ध्यानसूची में जोड़ी",
        "tog-watchdefault": "हमरा द्वारा निर्मित पृष्ठ आ हमरा द्वारा लादल फ़ाइलन के हमार ध्यानसूची में जोड़ी",
        "tog-watchmoves": "हमरा द्वारा स्थानांतरित पृष्ठ आ लादल फाईल के हमरा ध्यानसूची में जोड़ी",
        "qbmyoptions": "हमार पन्ना",
        "faq": "साधारण सवाल",
        "faqpage": "Project:साधारण सवाल",
-       "vector-action-addsection": "विषय जोड़ीं",
-       "vector-action-delete": "मिटाईं",
-       "vector-action-move": "स्थांतरण",
-       "vector-action-protect": "संरक्षित करीं",
-       "vector-action-undelete": "मत मिटाईं",
-       "vector-action-unprotect": "सुरक्षा बदलीं",
-       "vector-view-create": "बनाईं",
-       "vector-view-edit": "सम्पादन",
-       "vector-view-history": "इतिहास देखीं",
-       "vector-view-view": "पढ़ीं",
-       "vector-view-viewsource": "स्त्रोत देखीं",
        "actions": "क्रिया",
        "namespaces": "नामस्थान",
        "variants": "संस्करण",
        "readonly_lag": "उपमुख्य डाटाबेस सर्वर मुख्य डाटाबेस के बराबर परावर्तित होत समय मुख्य डाटाबेस सर्वर अपने आप लॉक हो गइल।",
        "internalerror": "आन्तरिक त्रुटि",
        "internalerror_info": "आन्तरिक त्रुटि: $1",
-       "fileappenderrorread": "संलग्न करे के दौरान \"$1\" पढ़ल नईखे जा सकत।",
-       "fileappenderror": "\"$1\" के आगे \"$2\" ना जुड़ पावल",
        "filecopyerror": "\"$1\" फ़ाइल के \"$2\" पर प्रतिलिपि ना बन पाईल।",
        "filerenameerror": "\"$1\" फ़ाइल के नाम बदल के \"$2\" नइखे रखल जा सकत।",
        "filedeleteerror": "\"$1\" फ़ाइल के ना हटावल जा सकल।",
        "directorycreateerror": "\"$1\" डाइरेक्टरी ना बनावल जा सकल।",
        "filenotfound": "\"$1\" फ़ाइल ना मिलल।",
-       "fileexistserror": "फ़ाइल \"$1\" पर नइखी लिख सकत: फ़ाइल अस्तित्व में बा।",
        "unexpected": "अनपेक्षित मूल्य: \"$1\"=\"$2\".",
        "formerror": "त्रुटि: फ़ॉर्म सबमिट ना करल जा सकल।",
        "badarticleerror": "इ पन्ना पर इ कार्य नइखे करल जा सकत।",
        "gotaccountlink": "खाता में प्रवेश",
        "userlogin-resetlink": "का रउआ आपन प्रवेश जानकारी भूला गइल बानी?",
        "userlogin-resetpassword-link": "आपन गुप्तशब्द के फिर से बहाल करीं",
-       "createacct-join": "अपना बारे में जानकारी नीचे लिखीं",
-       "createacct-another-join": "नयका खाता के जानकारी नीचे लिखीं",
        "createacct-emailrequired": "ई-मेल पता",
        "createacct-emailoptional": "ई-मेल पता (वैकल्पिक)",
        "createacct-email-ph": "आपन ई-मेल पता लिखीं",
        "savearticle": "पन्ना सुरक्षित करीं",
        "preview": "पूर्वावलोकन",
        "showpreview": "पूर्वावलोकन देखाईं",
-       "showlivepreview": "सीधा पूर्वावलोकन",
        "showdiff": "परिवर्तन देखाईं",
        "anoneditwarning": "'''चेतावनी:''' रउआ आपन खाता में प्रवेश नईखीं कईले। ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज कईल जाई।",
        "anonpreviewwarning": "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"",
        "permissionserrors": "अनुमति त्रुटी",
        "log-fulllog": "पूरा लॉग देखीं",
        "edit-conflict": "संपादन अंतर्विरोध",
-       "postedit-confirmation": "राउर सम्पादन सुरक्षित कर दिहल गईल।",
+       "postedit-confirmation-saved": "राउर सम्पादन सुरक्षित कर दिहल गईल।",
        "invalid-content-data": "अवैध डाटा सामग्री",
        "content-model-wikitext": "विकीपाठ्य",
        "content-model-text": "सामान्य पाठ",
        "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''' से शुरु होवे वाला।",
-       "showingresultsnum": "नीचे देखावल जा रहल बा {{PLURAL:$3|'''1''' परिणाम|'''$3''' परिणाम}} #'''$2''' से शुरु होवे वाला।",
        "search-nonefound": "राउर खोज मे से मेल खात कउनो परिणाम नईखे बा",
        "powersearch-legend": "उन्नत खोज",
        "powersearch-ns": "सन्दर्भ में खोजीं",
-       "powersearch-redir": "पुन:निर्देश सूची",
        "powersearch-togglelabel": "जाँच:",
        "powersearch-toggleall": "सब",
        "powersearch-togglenone": "कउनो ना",
        "move": "स्थान्तरण",
        "movethispage": "ई पन्ना के स्थांतरण करीं",
        "booksources": "किताबी स्त्रोत",
-       "alphaindexline": "$1 से $2",
        "allarticles": "सभी पन्ना",
        "allpagessubmit": "जाईं",
        "allpagesprefix": "उपसर्ग के साथे पन्ना प्रदर्शन:",
        "namespacesall": "सब",
        "monthsall": "सब",
        "confirmemail": "इ-मेल पता कन्फर्म करीं",
+       "version-no-ext-name": "[अज्ञात नाम]",
        "specialpages": "ख़ाश पन्ना",
        "revdelete-restricted": "प्रबंधक पर प्रतिबंध लागू",
        "revdelete-unrestricted": "प्रबंधक पर से प्रतिबंध समाप्त"
index 290cdbb..1f18c13 100644 (file)
        "qbmyoptions": "Tungkaran ulun",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Tambahi tupik",
-       "vector-action-delete": "Hapus",
-       "vector-action-move": "Pindahakan",
-       "vector-action-protect": "Lindungi",
-       "vector-action-undelete": "Pawalangan pahapusan",
-       "vector-action-unprotect": "Palindungan",
-       "vector-view-create": "Ulah",
-       "vector-view-edit": "Babak",
-       "vector-view-history": "Tiringi halam",
-       "vector-view-view": "Baca",
-       "vector-view-viewsource": "Tiringi asal mula",
        "actions": "Tindakan",
        "namespaces": "Ngarankamar",
        "variants": "Macam",
        "diff-multi-manyusers": "({{PLURAL:$1|Asa ralatan tangah|$1 raralatan tangah}} ulih labih pada $2 {{PLURAL:$2|pamuruk|papamuruk}} kada ditampaiakan)",
        "searchresults": "Kulihan panggagaian",
        "searchresults-title": "Kulihan gagai gasan \"$1\"",
-       "toomanymatches": "Kabanyakan nang cucuk kulihan, muhun cubai parmintaan lain",
        "titlematches": "Judul tungkaran pas",
        "textmatches": "Naskah tungkaran pas",
        "notextmatches": "Kadada tungkaran banaskah pas",
        "searchmenu-exists": "'''Ada tungkaran bangaran \"[[:$1]]\" dalam wiki ini.'''",
        "searchmenu-new": "'''Maulah tungkaran \"[[:$1]]\" dalam wiki ngini!'''",
        "searchprofile-articles": "Tungkaran isi",
-       "searchprofile-project": "Tutungkaran Patulung wan Rangka gawian",
        "searchprofile-images": "Multimadia",
        "searchprofile-everything": "Samunyaan",
        "searchprofile-advanced": "Haratan",
        "searchprofile-articles-tooltip": "Panggagaian pada $1",
-       "searchprofile-project-tooltip": "Panggagaian pada $1",
        "searchprofile-images-tooltip": "Panggagaian barakas",
        "searchprofile-everything-tooltip": "Panggagaian sabarataan isi (tamasuk tutungkaran pamandiran)",
        "searchprofile-advanced-tooltip": "Panggagaian pada ragam ngaran kakamar",
        "search-interwiki-default": "Kulihan $1",
        "search-interwiki-more": "(lagi)",
        "search-relatedarticle": "Bakulaan",
-       "searcheverything-enable": "Panggagaian pada samunyaan ngaran kakamar",
        "searchrelated": "bakulaan",
        "searchall": "samunyaan",
        "showingresults": "Di bawah ngini ditampaiakan hingga {{PLURAL:$1|'''1''' kulihan|'''$1''' kukulihan}}, dimulai matan #'''$2'''.",
-       "showingresultsnum": "Di bawah ngini ditampaiakan hingga {{PLURAL:$3|'''1''' kulihan|'''$3''' kukulihan}}, dimulai matan #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Kulihan '''$1''' matan '''$3'''|Kukulihan '''$1 - $2''' matan '''$3'''}} gasan '''$4'''",
        "search-nonefound": "Kadada kulihan nang pas awan parmintaan.",
        "powersearch-legend": "Panggagaian mahir",
        "allowemail": "Kawa'akan pamakai lain mangirim suril",
        "prefs-searchoptions": "Papilihan manggagai",
        "prefs-namespaces": "Ngaran kamar",
-       "defaultns": "Atawa-lah manggagai dalam ngaran kakamar nangini:",
        "default": "default",
        "prefs-files": "Barakas",
        "prefs-custom-css": "Saragamakan CSS",
        "prefs-emailconfirm-label": "Payakinakan suril:",
        "youremail": "Suril:",
        "username": "Ngaran pamuruk:",
-       "uid": "ID pamuruk:",
        "prefs-memberingroups": "Angguta matan {{PLURAL:$1|galambang|gagalambang}}:",
        "prefs-registration": "Waktu pandaptaran:",
        "yourrealname": "Ngaran asli:",
        "log-title-wildcard": "Gagai judul ba-awalan awan naskah ngini",
        "showhideselectedlogentries": "Tampaiakan/sungkupakan masukan log tapilih",
        "allpages": "Samunyaan tungkaran",
-       "alphaindexline": "$1 sampai $2",
        "nextpage": "Tungkaran salanjutnya ($1)",
        "prevpage": "Tungkaran sabalumnya ($1)",
        "allpagesfrom": "Manampaiakan tungkaran mulai matan:",
index 865ae26..434cf28 100644 (file)
        "qbmyoptions": "আমার পাতাসমূহ",
        "faq": "সম্ভাব্য প্রশ্নসমূহ",
        "faqpage": "Project:প্রাজিপ্র",
-       "vector-action-addsection": "বিষয় যোগ",
-       "vector-action-delete": "অপসারণ",
-       "vector-action-move": "স্থানান্তর",
-       "vector-action-protect": "সুরক্ষা",
-       "vector-action-undelete": "পুনরুদ্ধার",
-       "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": "পরিভ্রমণ মেনু",
        "searchall": "সমস্ত",
        "showingresults": "নিচে '''$2''' নং থেকে শুরু করে {{PLURAL:$1|'''1''' ফলাফল|'''$1''' ফলাফলসমূহ}} দেখানো হল।",
        "showingresultsinrange": "#<strong>$2</strong> থেকে #<strong>$3</strong> পরিসীমার মধ্যে {{PLURAL:$1|<strong>১টি</strong> ফলাফল|<strong>$1টি</strong> ফলাফল}} নিচে দেখানো হচ্ছে।",
-       "showingresultsnum": "নিম্নে {{PLURAL:$3|'''1''' ফলাফল|'''$3''' ফলাফলসমূহ}} দেখানো হয়েছে যা শুরু হয়েছে #'''$2''' দিয়ে।",
        "showingresultsheader": "'''$4''' এর জন্য {{PLURAL:$5|ফলাফল '''$3''' এর '''$1'''|ফলাফলসমূহ '''$3''' এর মধ্যে '''$1 - $2'''}}",
        "search-nonefound": "খোঁজকৃত পাতার সাথে মিলে যায় এমন কোনো ফলাফল নেই।",
        "powersearch-legend": "উন্নত অনুসন্ধান",
        "pageinfo-category-pages": "পাতার সংখ্যা",
        "pageinfo-category-subcats": "উপবিষয়শ্রেণীর সংখ্যা",
        "pageinfo-category-files": "ফাইলের সংখ্যা",
-       "skinname-monobook": "মনোবুক",
-       "skinname-vector": "ভেক্টর",
        "markaspatrolleddiff": "পরীক্ষিত বলে চিহ্নিত করুন",
        "markaspatrolledtext": "এই নিবন্ধটিকে পরীক্ষিত বলে চিহ্নিত করুন",
        "markedaspatrolled": "পরীক্ষিত বলে চিহ্নিত করুন",
        "duplicate-defaultsort": "' ' ' সাবধান: ' ' '  ডিফল্ট সাজানোর কীঃ \"$2\" পূর্বে ডিফল্ট সাজানোর কীঃ \"$1\" কে অগ্রাহ্য করে।",
        "version": "সংস্করণ",
        "version-extensions": "ইন্সটলকৃত এক্সটেনশনসমূহ",
+       "version-skins": "ইনস্টল করা স্কিনসমূহ",
        "version-specialpages": "বিশেষ পাতাসমূহ",
        "version-parserhooks": "পার্সার হুক",
        "version-variables": "চলক",
        "version-antispam": "স্প্যাম প্রতিরোধ",
-       "version-skins": "আবরণসমূহ (Skin)",
        "version-other": "অন্য",
        "version-mediahandlers": "মিডিয়া ব্যবস্থাপক",
        "version-hooks": "হুক",
        "version-hook-name": "হুকের নাম",
        "version-hook-subscribedby": "সাবস্ক্রাইব করেছেন",
        "version-version": "(সংস্করণ $1)",
+       "version-no-ext-name": "[নাম নেই]",
        "version-license": "মিডিয়াউইকি লাইসেন্স",
        "version-ext-license": "লাইসেন্স",
        "version-ext-colheader-name": "এক্সটেনশন",
+       "version-skin-colheader-name": "স্কিন",
        "version-ext-colheader-version": "সংস্করণ",
        "version-ext-colheader-license": "লাইসেন্স",
        "version-ext-colheader-description": "বিবরণ",
index 212bd56..7b5d255 100644 (file)
        "qbmyoptions": "ངའི་ཤོག་ངོས།",
        "faq": "རྒྱུན་ལྡན་དྲི་བ།",
        "faqpage": "Project: རྒྱུན་ལྡན་དྲི་བ།",
-       "vector-action-addsection": "བརྗོད་གཞི་ཁ་སྣོན།",
-       "vector-action-delete": "སུབས།",
-       "vector-action-move": "སྤོར་བ།",
-       "vector-action-protect": "འགོག་སྲུང།",
-       "vector-action-undelete": "མི་བསུབས་",
-       "vector-action-unprotect": "སྲུང་སྐྱོབ་གློད་པ།",
-       "vector-view-create": "གསར་བཟོ།",
-       "vector-view-edit": "རྩོམ་སྒྲིག",
-       "vector-view-history": "ལོ་རྒྱུས་ལ་ལྟ་བ།",
-       "vector-view-view": "ཀློག་པ།",
-       "vector-view-viewsource": "ཁུངས་ལ་ལྟ་བ།",
        "actions": "བྱ་སྤྱོད།",
        "namespaces": "མིང་གནས།",
        "variants": "འགྱུར་ཚད།",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3)ལ་ལྟ་བ།",
        "searchmenu-new": "ཝེ་ཁི་སྟེང་ལ་ <strong>ཤོག་ངོས་གསར་པ་</strong> \"[[:$1]]\" བཟོས། {{PLURAL:$2|0=|ཁྱེད་ཀྱི་འཚོལ་ཞིབ་བྱས་པའི་ཤོག་ངོས་རྣམས་ལ་ཡང་གཟིགས་རོགས།.|མ་ཟད་འཚོལ་ཞིབ་བྱས་པའི་གྲུབ་འབྲས་གཞན་རྣམས་ལ་ཡང་གཟིགས་རོགས།}}",
        "searchprofile-articles": "ནང་དོན་ཤོག་ངོས།",
-       "searchprofile-project": "རོགས་རམ་དང་འཆར་གཞིའི་ཤོག་ངོས་",
        "searchprofile-images": "སྨྱན་མང་བརྒྱུད་ལམ།",
        "searchprofile-everything": "ཚང་མ་",
        "searchprofile-advanced": "མཐོ་རིམ་",
        "searchprofile-articles-tooltip": "$1ནང་དུ་འཚོལ་བ།",
-       "searchprofile-project-tooltip": "$1ནང་དུ་འཚོལ་བ།",
        "searchprofile-images-tooltip": "ཡིག་ཆ་འཚོལ་བ།",
        "searchprofile-everything-tooltip": "བརྗོད་དོན་ཚང་མ་འཚོལ་གཞིབ་བྱེད་(གྲོས་མེས་ཤོག་ངོས་ཡང་འཚུད་པ་)",
        "searchprofile-advanced-tooltip": "རང་སྒྲུབ་མིང་བར་ནང་འཚོལ་རོགས།",
        "timezoneregion-africa": "ཨ་ཧྥི་རི་ཀ",
        "youremail": "གློག་འཕྲིན།:",
        "username": "{{GENDER:$1|དྲ་མིང་།}}:",
-       "uid": "{{GENDER:$1|སྤྱོད་མིའི་}}ནང་འཛུལ་ཐོ་མིང་།:",
        "yourrealname": "དངོས་མིང་།",
        "yourlanguage": "སྐད་རིགས།",
        "yournick": "མིང་རྟགས་སོ་མ།",
        "booksources-go": "སོང་།",
        "log": "པོད་ཁུག",
        "allpages": "དྲ་ངོས་ཡོངས།",
-       "alphaindexline": "$1 ནས་ $2 བར།",
        "prevpage": "ཤོག་ངོས་གོང་མ་ ($1)",
        "allarticles": "ཤོག་ངོས་ཆ་ཚང་།",
        "allpagessubmit": "སོང་།",
index 36e298c..6358b2d 100644 (file)
        "qbmyoptions": "মর পছন",
        "faq": "আঙলাক",
        "faqpage": "Project:আঙলাক",
-       "vector-action-addsection": "বিষয় তিলকর",
-       "vector-action-delete": "পুসে বেলা",
-       "vector-action-move": "থেইকর",
-       "vector-action-protect": "লুকর",
-       "vector-action-undelete": "নাপুসি",
-       "vector-action-unprotect": "লুকরানিহান সিলকর",
-       "vector-view-create": "হঙকরিক",
-       "vector-view-edit": "পতানি",
-       "vector-view-history": "ইতিহাস চেইক",
-       "vector-view-view": "পাকরিক",
-       "vector-view-viewsource": "সোর্স চেইক",
        "actions": "কার্যক্রম",
        "namespaces": "নাঙরলাম",
        "variants": "ভেরিয়েন্টহানি",
        "editundo": "আলকর",
        "searchresults": "বিসারলে অতার ফলাফল",
        "searchresults-title": "\"$1\" বিসারলে অতার ফলাফল",
-       "toomanymatches": "তি বিসারর অহার ৱাখুম বপিসে, আরাক আহান্ন হন্না কর",
        "titlematches": "পাতার চিঙনাঙর লগে মান্না অসে",
        "textmatches": "পাতার ইকার লগে মান্না অসে",
        "notextmatches": "পাতাহার লেখার লগে মিল নেই",
        "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": "'''$4''' র কা {{PLURAL:$5|ফলহান '''$3''' র '''$1'''|ফলহানি '''$3''' র মা '''$1 - $2'''}}",
        "allowemail": "আরতা(ব্যবহার করেকুরা)ই ইমেইল করানির য়্যাথাং দে।",
        "prefs-searchoptions": "বিসারানির অপশনহানি",
        "prefs-namespaces": "নাঙরলাম",
-       "defaultns": "নাইলে এরে নাঙর লামে বিসারা:",
        "default": "আদি অঙতা",
        "prefs-files": "ফাইল",
        "prefs-custom-css": "স্বনির্ধারিত CSS",
        "log": "লগ",
        "all-logs-page": "হাব্বি পাবলিক লগ",
        "allpages": "হাবি পাতাহানি",
-       "alphaindexline": "$1 ত $2",
        "nextpage": "থাঙনার পাতা ($1)",
        "prevpage": "আগেকার পাতা ($1)",
        "allpagesfrom": "যেহাত্ত অকরিসি অহাত্ত পাতাহানি দেহাদেঃ",
        "blockip": "আতাকুরাগরে থেপকর",
        "blockip-legend": "আতাকুরাগরে থেপ কর",
        "blockiptext": "লেপকরিসত আইপি ঠিকানাহানরে নাইলে আতাকুরাগরে ইকরানিত্ত থেপকরানি থকিলে তলর ফর্মহান ব্যবহার কর।\nএহান হুদ্দা ধ্বংসর খৌরাঙ থেপকরানি বারো [[{{MediaWiki:Policy-url}}|নীতিমালা]] একরিয়া পতানি থক।\nতলে লেপ্পা কারণ আহান মাত (উদাহরনে মাতানি একরের, যে  যে পাতাহানি ধ্বংস করানি অসে অতা মাতে পারর)।",
-       "ipadressorusername": "আইপি ঠিকানাহান বারো আতাকুরার নাঙহান:",
+       "ipaddressorusername": "আইপি ঠিকানাহান বারো আতাকুরার নাঙহান:",
        "ipbexpiry": "মেয়াদহান লালুইতইতা:",
        "ipbreason": "কারণ:",
        "ipbreason-dropdown": "*থেপ করানির সাধারণ কারণহানি\n** মিস্সা পৌ বরাসে\n** পাতাহাত্ত বিষয়বস্তু পুসে বেলাসে\n** বারেতের কোন সাইটর মিলাপে স্প্যাম করিসে\n** পাতাহানিত অর্থনেই মেথেল বরাসে\n** দরপানির অসারে আচরণ/হিনকরানি\n** আবকচা অ্যাকাউন্টর অপব্যবহার\n** আতাকুরার নাঙহান চিঙথি ইসে",
        "show-big-image": "পুল্লাপ রিজলিউশন",
        "newimages": "নুৱা ফাইলর গ্যালারিগ",
        "newimages-legend": "সাক",
-       "showhidebots": "($1 বট)",
        "noimages": "চানার কা কিত্তাউ নেই।",
        "ilsubmit": "বিসারা",
        "bydate": "তারিখর সিজিলন",
index 12b8604..2c731aa 100644 (file)
        "qbmyoptions": "Ma dibaboù",
        "faq": "FAG",
        "faqpage": "Project:FAG",
-       "vector-action-addsection": "Rannbennad nevez",
-       "vector-action-delete": "Diverkañ",
-       "vector-action-move": "Adenvel",
-       "vector-action-protect": "Gwareziñ",
-       "vector-action-undelete": "Diziverkañ",
-       "vector-action-unprotect": "Cheñch gwarez",
-       "vector-view-create": "Krouiñ",
-       "vector-view-edit": "Kemmañ",
-       "vector-view-history": "Gwelet an istor",
-       "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ñ",
        "searchrelated": "disoc'hoù kar",
        "searchall": "An holl",
        "showingresults": "Diskouez betek {{PLURAL:$1|'''1''' disoc'h|'''$1''' disoc'h}} o kregiñ gant #'''$2'''.",
-       "showingresultsnum": "Diskouez {{PLURAL:$3|'''1''' disoc'h|'''$3''' disoc'h}} o kregiñ gant #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Disoc'h '''$1''' diwar '''$3'''|Disoc'hoù '''$1 - $2''' diwar '''$3'''}} evit '''$4'''",
        "search-nonefound": "An enklask-mañ ne zisoc'h war netra.",
        "powersearch-legend": "Klask araokaet",
        "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ù */",
-       "monobook.css": "/* Talvezout a raio ar CSS lakaet amañ evit implijerien ar gwiskadur Monobook */",
-       "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-autoconfirmed.css": "/* Talvezout a raio ar CSS lakaet amañ evit an impjerien bet kadarnaet ent emgefre hepken */",
        "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. */",
-       "monobook.js": "/* Kement JavaScript amañ a vo karget evit an implijerien a ra gant ar gwiskadur MonoBook */",
-       "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}}",
        "anonuser": "implijer dizanv $1 eus {{SITENAME}}",
        "pageinfo-category-pages": "Niver a bajennoù",
        "pageinfo-category-subcats": "Niver a isrummadoù",
        "pageinfo-category-files": "Niver a restroù",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Merkañ evel gwiriet",
        "markaspatrolledtext": "Merkañ ar pennad-mañ evel gwiriet",
        "markedaspatrolled": "Merkañ evel gwiriet",
        "duplicate-defaultsort": "Diwallit : Frikañ a ra an alc'hwez dre ziouer \"$2\" an hini a oa a-raok \"$1\".",
        "version": "Stumm",
        "version-extensions": "Astennoù staliet",
+       "version-skins": "Gwiskadurioù",
        "version-specialpages": "Pajennoù dibar",
        "version-parserhooks": "Galvoù dielfennañ",
        "version-variables": "Argemmennoù",
        "version-antispam": "Mirout ouzh ar strob",
-       "version-skins": "Gwiskadurioù",
        "version-other": "Diseurt",
        "version-mediahandlers": "Merer danvez liesvedia",
        "version-hooks": "Galvoù",
index e85921b..926aad5 100644 (file)
        "qbmyoptions": "Moje opcije",
        "faq": "ČPP",
        "faqpage": "Project:NPP",
-       "vector-action-addsection": "Dodaj temu",
-       "vector-action-delete": "Izbriši",
-       "vector-action-move": "Pomjeri",
-       "vector-action-protect": "Zaštiti",
-       "vector-action-undelete": "Vrati obrisano",
-       "vector-action-unprotect": "Promijeni zaštitu",
-       "vector-view-create": "Napravi",
-       "vector-view-edit": "Uredi",
-       "vector-view-history": "Pregled historije",
-       "vector-view-view": "Čitanje",
-       "vector-view-viewsource": "Pogledaj izvor",
        "actions": "Akcije",
        "namespaces": "Imenski prostori",
        "variants": "Varijante",
        "searchrelated": "povezano",
        "searchall": "sve",
        "showingresults": "Dolje {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
-       "showingresultsnum": "Dolje {{PLURAL:$3|je prikazan '''1''' rezultat|su prikazana '''$3''' rezultata|je prikazano '''$3''' rezultata}} počev od #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Rezultat '''$1''' od '''$3'''|Rezultati '''$1 - $2''' od '''$3'''}} za '''$4'''",
        "search-nonefound": "Nisu pronađeni rezultati koji odgovaraju upitu.",
        "powersearch-legend": "Napredna pretraga",
        "newpages": "Nove stranice",
        "newpages-username": "Korisničko ime:",
        "ancientpages": "Najstarije stranice",
-       "move": "Pomjeri",
+       "move": "Preusmjeri",
        "movethispage": "Premjesti ovu stranicu",
        "unusedimagestext": "Slijedeće datoteke postoje ali nisu uključene ni u jednu stranicu.\nMolimo obratite pažnju da druge web stranice mogu biti povezane s datotekom putem direktnog URLa, tako da i pored toga mogu biti prikazane ovdje pored aktivne upotrebe.",
        "unusedcategoriestext": "Slijedeće stranice kategorija postoje iako ih ni jedan drugi članak ili kategorija ne koriste.",
        "tooltip-preferences-save": "Sačuvaj podešavanja",
        "tooltip-summary": "Unesite kratki sažetak",
        "common.css": "/* CSS umetnut ovdje primijenit će se na sve skinove */",
-       "monobook.css": "/* CSS umetnut ovdje uticat će na korisnike koji koriste Monobook 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. */",
-       "monobook.js": "/* Bilo koja JavaScript će biti učitana za sve korisnike koji koriste MonoBook 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-monobook": "MonoKnjiga",
        "markaspatrolleddiff": "Označi kao patrolirano",
        "markaspatrolledtext": "Označi ovaj članak kao patroliran",
        "markedaspatrolled": "Označeno kao patrolirano",
        "duplicate-defaultsort": "Upozorenje: Postavljeni ključ sortiranja \"$2\" zamjenjuje raniji ključ \"$1\".",
        "version": "Verzija",
        "version-extensions": "Instalirana proširenja (ekstenzije)",
+       "version-skins": "Kože",
        "version-specialpages": "Posebne stranice",
        "version-parserhooks": "Kuke parsera",
        "version-variables": "Promjenjive",
        "version-antispam": "Sprječavanje spama",
-       "version-skins": "Kože",
        "version-other": "Ostalo",
        "version-mediahandlers": "Upravljači medije",
        "version-hooks": "Kuke",
index 65d57a4..4876c6d 100644 (file)
        "qbmyoptions": "Pàgines pròpies",
        "faq": "PMF",
        "faqpage": "Project:PMF",
-       "vector-action-addsection": "Nova secció",
-       "vector-action-delete": "Esborra",
-       "vector-action-move": "Reanomena",
-       "vector-action-protect": "Protegeix",
-       "vector-action-undelete": "Restaura",
-       "vector-action-unprotect": "Desprotegeix",
-       "vector-view-create": "Crea",
-       "vector-view-edit": "Modifica",
-       "vector-view-history": "Mostra l'historial",
-       "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ó",
        "parser-template-recursion-depth-warning": "S'ha excedit el límit de recursivitat de plantilles ($1)",
        "language-converter-depth-warning": "El límit de la profunditat del conversor d'idiomes ha excedit ($1)",
        "node-count-exceeded-category": "Pàgines on s'ha excedit el recompte de nodes",
+       "node-count-exceeded-category-desc": "Una categoria de les pàgines on s'ha excedit el recompte de nodes.",
        "node-count-exceeded-warning": "La pàgina ha excedit el recompte de nodes",
        "expansion-depth-exceeded-category": "Pàgines on s'ha excedit la profunditat d'expansió",
+       "expansion-depth-exceeded-category-desc": "Aquesta és una categoria de les pàgines on s'ha s'excedit la profunditat d'expansió.",
        "expansion-depth-exceeded-warning": "La pàgina ha excedit la profunditat d'expansió",
        "parser-unstrip-loop-warning": "S'ha detectat un bucle no desmuntable",
        "parser-unstrip-recursion-limit": "S'ha excedit el límit ($1) de recursivitat no desmuntable",
        "searchall": "tots",
        "showingresults": "Tot seguit es {{PLURAL:$1|mostra el resultat|mostren els <b>$1</b> resultats començant pel número <b>$2</b>}}.",
        "showingresultsinrange": "Es mostren a continuació fins a {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resultats}} de #<strong>$2</strong> a #<strong>$3</strong>.",
-       "showingresultsnum": "Tot seguit es {{PLURAL:$3|llista el resultat|llisten els <b>$3</b> resultats començant pel número <b>$2</b>}}.",
        "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' de '''$3'''|Resultats '''$1 - $2''' de '''$3'''}} per '''$4'''",
        "search-nonefound": "La cerca no ha donat cap resultat.",
        "powersearch-legend": "Cerca avançada",
        "windows-nonascii-filename": "Aquest wiki no permet noms de fitxer amb caràcters especials.",
        "fileexists": "Ja hi existeix un fitxer amb aquest nom, si us plau, verifiqueu <strong>[[:$1]]</strong> si no esteu segurs de voler substituir-lo.\n[[$1|thumb]]",
        "filepageexists": "La pàgina de descripció d'aquest fitxer ja ha estat creada (<strong>[[:$1]]</strong>), però de moment no hi ha cap fitxer amb aquest nom. La descripció que heu posat no apareixerà a la pàgina de descripció. Si voleu que hi aparegui haureu d'editar-la manualment.\n[[$1|thumb]]",
-       "fileexists-extension": "Ja existeix un fitxer amb un nom semblant: [[$2|thumb]]\n* Nom del fitxer que es puja: <strong>[[:$1]]</strong>\n* Nom del fitxer existent: <strong>[[:$2]]</strong>\nSi us plau, trieu un nom diferent.",
+       "fileexists-extension": "Ja existeix un fitxer amb un nom semblant: [[$2|thumb]]\n* Nom del fitxer que es puja: <strong>[[:$1]]</strong>\n* Nom del fitxer existent: <strong>[[:$2]]</strong>\nPotser voleu fer servir un nom més fàcil de distingir?",
        "fileexists-thumbnail-yes": "Aquest fitxer sembla ser una imatge en mida reduïda (<em>miniatura</em>). [[$1|thumb]]\nComproveu si us plau el fitxer <strong>[[:$1]]</strong>.\nSi el fitxer és la mateixa imatge a mida original, no cal carregar cap miniatura més.",
        "file-thumbnail-no": "El nom del fitxer comença per <strong>$1</strong>.\nSembla ser una imatge de mida reduïda ''(miniatura)''.\nSi teniu la imatge en resolució completa, pugeu-la, sinó mireu de canviar-li el nom, si us plau.",
        "fileexists-forbidden": "Ja hi existeix un fitxer amb aquest nom i no es pot sobreescriure.\nSi us plau, torneu enrere i carregueu aquest fitxer sota un altre nom. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "L'esborrament i recuperació de fitxers està temporalment deshabilitada durant el manteniment.",
        "filedelete-maintenance-title": "No pot suprimir arxiu",
        "mimesearch": "Cerca per MIME",
-       "mimesearch-summary": "Aquesta pàgina habilita el filtratge de fitxers per llur tipus MIME. Contingut: contenttype/subtype, ex. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Aquesta pàgina habilita el filtratge de fitxers per llur tipus MIME. Contingut: contenttype/subtype o contenttype/*, p. ex. <code>image/jpeg</code>.",
        "mimetype": "Tipus MIME:",
        "download": "baixada",
        "unwatchedpages": "Pàgines desateses",
        "wantedtemplates": "Plantilles demanades",
        "mostlinked": "Pàgines més enllaçades",
        "mostlinkedcategories": "Categories més utilitzades",
-       "mostlinkedtemplates": "Plantilles més usades",
+       "mostlinkedtemplates": "Plantilles més incloses",
        "mostcategories": "Pàgines amb més categories",
        "mostimages": "Fitxers més enllaçats",
        "mostinterwikis": "Pàgines amb més interwikis",
        "tooltip-summary": "Afegiu un breu resum",
        "interlanguage-link-title": "$1 - $2",
        "common.css": "/* Editeu aquest fitxer per personalitzar totes les aparences per al lloc sencer */",
-       "monobook.css": "/* Editeu aquest fitxer per personalitzar l'aparença del monobook per a tot el lloc sencer */",
        "common.js": "/* Es carregarà per a tots els usuaris, i per a qualsevol pàgina, el codi JavaScript que hi haja després d'aquesta línia. */",
        "anonymous": "Usuari{{PLURAL:$1| anònim|s anònims}} del projecte {{SITENAME}}",
        "siteuser": "{{GENDER:$2|l'usuari|la usuària}} $1 del projecte {{SITENAME}}",
        "duplicate-defaultsort": "Atenció: La clau d'ordenació per defecte \"$2\" invalida l'anterior clau \"$1\".",
        "version": "Versió",
        "version-extensions": "Extensions instaŀlades",
+       "version-skins": "Aparences",
        "version-specialpages": "Pàgines especials",
        "version-parserhooks": "Extensions de l'analitzador",
        "version-variables": "Variables",
        "version-antispam": "Prevenció spam",
-       "version-skins": "Aparences",
        "version-other": "Altres",
        "version-mediahandlers": "Connectors multimèdia",
        "version-hooks": "Lligams",
        "version-hook-name": "Nom del lligam",
        "version-hook-subscribedby": "Subscrit per",
        "version-version": "(Versió $1)",
+       "version-no-ext-name": "[sense nom]",
        "version-license": "Llicència del MediaWiki",
        "version-ext-license": "Llicència",
        "version-ext-colheader-name": "Extensió",
index 0e16d59..f69fec2 100644 (file)
        "qbmyoptions": "我其頁面",
        "faq": "經稠碰著其問題",
        "faqpage": "Project:經稠碰著其問題",
-       "vector-action-addsection": "加話題",
-       "vector-action-delete": "刪掉咯",
-       "vector-action-move": "移動",
-       "vector-action-protect": "保護",
-       "vector-action-undelete": "取消刪除",
-       "vector-action-unprotect": "改變保護",
-       "vector-view-create": "創建",
-       "vector-view-edit": "修改",
-       "vector-view-history": "看歷史",
-       "vector-view-view": "讀",
-       "vector-view-viewsource": "看源代碼",
        "actions": "動作",
        "namespaces": "命名空間",
        "variants": "變體",
        "searchrelated": "相關其",
        "searchall": "全部",
        "showingresults": "顯示趁#<b>$2</b>開始其{{PLURAL:$1|'''$1'''萆結果}}。",
-       "showingresultsnum": "顯示趁#<b>$2</b>開始其{{PLURAL:$3|'''$3'''萆結果}}。",
        "preferences": "設定",
        "mypreferences": "我其設定",
        "prefs-edits": "修改數量:",
index bcd79a1..91752be 100644 (file)
@@ -39,7 +39,7 @@
        "tog-watchlisthideown": "Къайлаяха ас нисйинарш оцу тергаме могӀам чура",
        "tog-watchlisthidebots": "Къайладаха шаболх бечо нисдинарш оцу тергаме могӀам чура",
        "tog-watchlisthideminor": "Къайладаха кегийра нисдарш оцу тергаме могӀам чура",
-       "tog-watchlisthideliu": "Ð\9aÑ\8aайладаÑ\85а Ð²овзийтина болу декъашхойн нисдарш оцу тергаме могӀам чура",
+       "tog-watchlisthideliu": "Ð\9aÑ\8aайладаÑ\85а Ð±овзийтина болу декъашхойн нисдарш оцу тергаме могӀам чура",
        "tog-watchlisthideanons": "Къайладаха къайлаха болу декъашхойн нисдарш оцу тергаме могӀам чура",
        "tog-watchlisthidepatrolled": "Къайладаха хьаьжина долу нисдарш оцу тергаме могӀам чура",
        "tog-ccmeonemails": "Дlадахьийта суна исанна кехат, аса дохьуьйтуш долу кхечу декъашхошна.",
        "qbmyoptions": "Хьан нисдарш",
        "faq": "СиХХ",
        "faqpage": "Project:СиХХ",
-       "vector-action-addsection": "ТӀетоха хьедар",
-       "vector-action-delete": "ДӀаяккха",
-       "vector-action-move": "ЦӀе хийца",
-       "vector-action-protect": "Гlаролла дé",
-       "vector-action-undelete": "Меттахlоттадé",
-       "vector-action-unprotect": "ГӀароллех къаста",
-       "vector-view-create": "Кхоллар",
-       "vector-view-edit": "Нисъе",
-       "vector-view-history": "АгӀона хийцамаш",
-       "vector-view-view": "Éшар",
-       "vector-view-viewsource": "Билглонашка хьажа",
        "actions": "Дийраш",
-       "vector-more-actions": "Кхин",
        "namespaces": "Цlерийн ана",
        "variants": "Кепараш",
        "navigation-heading": "Навигацин меню",
        "passwordreset-emailelement": "Декъашхочун цӀе: $1\nХанна йолу пароль: $2",
        "passwordreset-emailsent": "Электронан хаам баийтина кхоьссинчу паролах лаьцна хаам чохь болуш.",
        "passwordreset-emailsent-capture": "Электронан хаам баийтина кхоьссинчу паролах лаьцна хаам чохь болуш. \nцуна йозане хьажа йиш ю лахахь.",
-       "changeemail": "ХийÑ\86а Ñ\8dлекÑ\82Ñ\80они Ð¿Ð¾Ñ\87Ñ\82",
+       "changeemail": "ХийÑ\86а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87Ñ\82а",
        "changeemail-header": "Электронан почтан адрес хийцар",
        "changeemail-text": "Юза хӀара форма хьайн электронан почтан адрес хуьйцуш. Ахьа хийцар бакъдан язъян еза пароль.",
        "changeemail-no-info": "ХӀара агӀо лело системин чугӀо.",
        "content-model-text": "цхьалхе йоза",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "expensive-parserfunction-warning": "'''Тидам бе!''' Ресурсийн функцийн дехарш сов даьлла агӀонаш .\n\nДукху хилла ца деза {{PLURAL:$2|$2 дехар|$2 дехарш|1=цхьана дехар}}, хӀинца $1 {{PLURAL:$1|дехар}} ду.",
+       "expensive-parserfunction-category": "Ресурсийн функцийн дехарш сов даьлла агӀонаш",
        "post-expand-template-inclusion-warning": "ДӀахьедар: юкъа тоьхна кепашан жамӀан барам тӀех бокха бу. Цхьайолу кепаш юкъа тухур яц.",
        "post-expand-template-inclusion-category": "Чу дуьхкуш долу кепашан барам тӀех баьлла агӀонаш",
        "post-expand-template-argument-category": "Кепашан аргументаш юкъахь йитина агӀонаш",
        "parser-template-loop-warning": "Карийна кепаш юкъахь хилла шад: [[$1]]",
        "parser-template-recursion-depth-warning": "Дозанал хьаладаьлла кӀоргенца юх юха дина кеп ($1)",
+       "node-count-exceeded-category": "Шедийн дукхалла сов даьлла агӀонаш",
+       "node-count-exceeded-warning": "Шедийн дукхалла сов даьлла агӀонаш",
        "expansion-depth-exceeded-category": "Схьаелларан кӀоргалла тӀех даьккхина агӀонаш",
        "expansion-depth-exceeded-warning": "АгӀонгахь чуйихкар тӀехдаьккхина",
        "parser-unstrip-loop-warning": "ДӀачӀагӀанца pre карина",
        "powersearch-togglenone": "ХӀумма цаоьшу",
        "search-external": "Арахула лахар",
        "search-error": "Лохуш гӀалат даьлла: $1",
-       "preferences": "Гlирс нисбан",
+       "preferences": "ГӀирс нисбан",
        "mypreferences": "ГӀирс нисбан",
        "prefs-edits": "Нисдарийн дукхалла:",
        "prefsnologintext2": "Оьшу $1, гӀирс дӀанисбан.",
        "prefs-watchlist-token": "Тергаме могӀанан токен:",
        "prefs-misc": "Кхин гlирсаш",
        "prefs-resetpass": "Хийца пароль",
-       "prefs-changeemail": "ХийÑ\86а Ñ\8dлекÑ\82Ñ\80они Ð¿Ð¾Ñ\87Ñ\82",
+       "prefs-changeemail": "ХийÑ\86а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87Ñ\82а",
        "prefs-setemail": "Электронан почтан адрес дӀахӀоттор",
        "prefs-email": "Электронан почтан параметраш",
        "prefs-rendering": "Арахьара хатl",
        "prefs-custom-js": "Долахь йолу JS",
        "prefs-common-css-js": "Юкъара CSS/JS массо кеч даран темашан:",
        "prefs-reset-intro": "ХӀара агӀо лело мега ахьа нисбина гӀирс Ӏад битарца юха бокхуш.\nХӀара дешдерг кхочушъ динчул  тӀехьа хьан йиш хир-яц и юха меттахӀотто.",
-       "prefs-emailconfirm-label": "Ð\91акÑ\8a Ñ\8fÑ\80 Ñ\8dлекÑ\82Ñ\80они Ð¿Ð¾Ñ\87Ñ\82:",
+       "prefs-emailconfirm-label": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87Ñ\82а Ð±Ð°ÐºÑ\8a Ñ\8fÑ\80:",
        "youremail": "Электронан почта:",
        "username": "{{GENDER:$1|Декъашхочун цӀе}}:",
        "prefs-memberingroups": "{{GENDER:$1|Тобана|Тобаншан}} {{PLURAL:$2|декъашхо|декъашхой}}:",
        "listgrouprights-namespaceprotection-header": "ЦӀеран анан бехкам",
        "listgrouprights-namespaceprotection-namespace": "ЦӀерийн ана",
        "listgrouprights-namespaceprotection-restrictedto": "Декъашхочун хийцамаш бан таро хуьлуьйту бакъонаш",
+       "trackingcategories": "Хьожуш йолу категореш",
+       "trackingcategories-summary": "ХӀокху агӀонгахь ю хьожуш йолу категореш, MediaWikiс тӀеюзаш ю уьш. {{ns:8}} цӀерийн меттигера системин хаам хийцина цера цӀераш хийца йиш ю.",
        "trackingcategories-msg": "Категореш зер",
        "trackingcategories-name": "Хааман цӀе",
+       "trackingcategories-desc": "Категорин чутухуш йолчун хила деза хьал",
        "expensive-parserfunction-category-desc": "АгӀорахь тӀех дуккха ресурсийн функцеш лелош ю (<code>#ifexist</code> саниш). Мадарра ду — [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] агӀонгахь.",
        "trackingcategories-nodesc": "Цунах лаьцна хӀума дац.",
        "trackingcategories-disabled": "Категори дӀаяйина ю",
        "proxyblocker": "Проксин блоктохар",
        "move-page": "$1 — цӀе хийцар",
        "move-page-legend": "ЦӀe хийца яр",
-       "movepagetext": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман журнал кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажораг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажораг елахь, я еса елахь а, цуьна хьийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хилларгчунтӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
-       "movepagetext-noredirectfixer": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман журнал кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажораг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажораг елахь, я еса елахь а, цуьна хьийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хилларгчунтӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
+       "movepagetext": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажораг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажораг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хилларгчунтӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
+       "movepagetext-noredirectfixer": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажораг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажораг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хилларгчунтӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
        "movepagetalktext": "ТӀе хӀоьттина йолу дийцаре агӀо ишта цӀе хийцина хира ю, '''цхьа йолу ханчохь, маца:'''\n\n*Йаьсса йоцу дийцаре агӀо йолуш ю оцу цӀарца йа\n*Ахьа къастаман харжам цабиняхь а къастам хӀотточехь.\n\nИшта чу ханчохь, ахьа дехьа яккха йезар ю йа куьйга хӀоттайар, нагахь иза хьашт йалахь.",
        "movearticle": "Цle хийца хlокху агlон",
        "moveuserpage-warning": "'''Тергам бе.''' Хьо декъашхочун агӀона цӀе хийца гӀерта. Дехар до, тергам бе, декъашхочун агӀона цӀе бен хийца лур яц, декъашхочун дӀаяздаран цӀе хийца лур яц.",
        "tooltip-undo": "ДӀабаккха бина болу хийцам а хьалхьажар гойтуш, дӀаяккхарна бахьна гайта аьтту беш",
        "tooltip-preferences-save": "ГӀирс нисбар Ӏалашде",
        "tooltip-summary": "Язъе йоца цӀе",
+       "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/** Чуйиллина йолу кхузе CSS хир ю лелош масхьа кечйечу чохь */",
-       "monobook.css": "/* Чуйиллина йолу кхузе CSS хир ю лелош масхьа Monobook чохь */",
        "print.css": "/* Чуйиллина йолу кхузе CSS хир ю лелош масхьа зорба тухучуче чохь */",
        "common.js": "/* Чуйиллина йолу кхузе JavaScript код гучу ера ю массо декъашхошна оцара схьаелларца хlора агlо */",
-       "monobook.js": "/* Кхузе чу язийна йолу JavaScript код, чу ера ю, массо MonoBook хатl лелош болу декъашхошна */",
        "anonymous": "{{PLURAL:$1|1=ЦӀе хьулйина декъашхо|ЦӀе хьулйина декъашхой}} {{grammar:genitive|{{SITENAME}}}}",
        "siteuser": "декъашхо {{grammar:genitive|{{SITENAME}}}} $1",
        "anonuser": "цӀе хьулйина декъашхо {{grammar:genitive|{{SITENAME}}}} $1",
        "pageinfo-category-pages": "АгӀонийн дукхалла",
        "pageinfo-category-subcats": "Бухара категорийн дукхалла",
        "pageinfo-category-files": "Файлийн дукхалла",
-       "skinname-vector": "Векторан",
        "markaspatrolleddiff": "Билгалйе теллина санна",
        "markaspatrolledtext": "Билгала йе хӀара агӀо хьаьжна сана",
        "markedaspatrolled": "ДӀадахка теллина санна хилар",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|дийцаре]])",
        "version": "Верси MediaWiki",
        "version-extensions": "ДӀахӀоттийна шордарш",
+       "version-skins": "Кечяран темаш",
        "version-specialpages": "Белхан агӀонаш",
        "version-parserhooks": "Cинтаксисан къастор схьалоцурш",
        "version-variables": "Хийцаме",
-       "version-skins": "Кечяран темаш",
        "version-other": "Кхин",
        "version-mediahandlers": "Медиа кеч ерраш",
        "version-parser-extensiontags": "Cинтаксисан къасторан шораллин тегаш",
index 8cbc3db..803e6f0 100644 (file)
        "qbmyoptions": "Akong mga panid",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Pagdugang og topiko",
-       "vector-action-delete": "Papasa",
-       "vector-action-move": "Ibalhin",
-       "vector-action-protect": "Protektahi",
-       "vector-action-undelete": "Ayaw papasa",
-       "vector-action-unprotect": "Ayaw protektahi",
-       "vector-view-create": "Himoa",
-       "vector-view-edit": "Usba",
-       "vector-view-history": "Tan-awa ang kaagi",
-       "vector-view-view": "Basaha",
-       "vector-view-viewsource": "Tan-awa ang ginikanan",
        "actions": "Mga lihok",
        "namespaces": "Mga ngalang espasyo",
        "variants": "Mga baryant",
        "allowemail": "I-enable ang e-mail gikan sa ubang gumagamit",
        "prefs-searchoptions": "Mga opsyon sa pagpangita",
        "prefs-namespaces": "Ngalang espasyo",
-       "defaultns": "Kondili, pangita na lang niining mga ngalang espasyo:",
        "default": "default",
        "prefs-files": "Mga payl",
        "prefs-custom-css": "Kustom nga CSS",
        "prefs-emailconfirm-label": "Kompirmasyon sa e-mail:",
        "youremail": "E-mail:",
        "username": "Username:",
-       "uid": "ID sa gumagamit:",
        "prefs-memberingroups": "Miyembro sa {{PLURAL:$1|grupo|mga grupo}}:",
        "prefs-registration": "Oras sa pagparehistro:",
        "yourrealname": "Tinuod nga pangalan:",
        "booksources-go": "Sige",
        "log": "Mga log",
        "allpages": "Tanang panid",
-       "alphaindexline": "$1 hangtod $2",
        "prevpage": "Miaging panid ($1)",
        "allpagesfrom": "Ipakita ang mga panid nga nagsugod sa:",
        "allpagesto": "Ipakita ang mga panid nga nagtapos sa:",
index 99d3360..96b48e0 100644 (file)
        "editundo": "funas",
        "searchresults": "Humuyongña i inaligao",
        "searchresults-title": "Risutton i inaligao \"$1\"",
-       "toomanymatches": "Mampos meggai na manaya ni humuyongña, pot fabot chagi difirente na inaligao",
        "titlematches": "Titulon påhina siha ni manaya",
        "textmatches": "Tinige' påhina siha ni manaya",
        "notextmatches": "Tåya' na tinige' påhina siha ni manaya",
        "searchrelated": "umachetton",
        "searchall": "todu",
        "showingresults": "A'annok gi sampapa' asta {{PLURAL:$1|'''1''' na humuyongña|'''$1''' na humuyongña siha}} tumutuhon yan i #'''$2'''.",
-       "showingresultsnum": "A'annok gi sampapa' {{PLURAL:$3|'''1''' na humuyongña|'''$3''' na humuyongña siha}} tumutuhon yan i #'''$2'''.",
        "powersearch-legend": "Finu na inaligao",
        "powersearch-ns": "Inaligao gi sagan nå'an:",
        "search-external": "Inaligao sanhiyong",
        "allowemail": "Na'sedi e-mail ginen otru na muna'sesetbi siha",
        "prefs-searchoptions": "Inayek manaligao siha",
        "prefs-namespaces": "Sågan nå'an",
-       "defaultns": "Fanaligao hålom este na sågan nå'an fine'nena:",
        "default": "default",
        "prefs-files": "Atkibu siha",
        "youremail": "E-mail:",
        "username": "Nå'an muna'sesetbi:",
-       "uid": "ID muna'sesetbi:",
        "prefs-memberingroups": "Miembron {{PLURAL:$1|i grupu|i grupu siha}}:",
        "yourrealname": "Minagahet nå'an-mu:",
        "yourlanguage": "Lengguahe:",
        "log": "Logs",
        "all-logs-page": "Todu i logs siha",
        "allpages": "Todu i påhina siha",
-       "alphaindexline": "$1 para $2",
        "nextpage": "Mamaila' na påhina ($1)",
        "prevpage": "Må'pos na påhina ($1)",
        "allpagesfrom": "Fa'nu'i i påhina siha tumutuhon gi:",
diff --git a/languages/i18n/chy.json b/languages/i18n/chy.json
new file mode 100644 (file)
index 0000000..cc2a2cf
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Amqui"
+               ]
+       },
+       "talkpagelinktext": "Éestsestôtse",
+       "talk": "Éestsestôtse",
+       "mainpage": "Va'ohtama",
+       "mainpage-description": "Va'ohtama"
+}
index bf316f4..42f53e3 100644 (file)
        "qbmyoptions": "پەڕەکانم",
        "faq": "پرسیار و وەڵام (FAQ)",
        "faqpage": "Project:پرسیار و وەڵام",
-       "vector-action-addsection": "بابەت دابنێ",
-       "vector-action-delete": "بیسڕەوە",
-       "vector-action-move": "بیگوازەوە",
-       "vector-action-protect": "بیپارێزە",
-       "vector-action-undelete": "سڕینەوە بگەڕێنەوە",
-       "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": "مێنۆی ڕێدۆزی",
        "searchrelated": "پەیوەست",
        "searchall": "ھەموو",
        "showingresults": "لە خوارەوە {{PLURAL:$1|'''یەک''' ئەنجام|'''$1''' ئەنجام}} نیشان دراوە، بە دەست پێ کردن لە ژمارەی '''$2'''ەوە.",
-       "showingresultsnum": "لە خوارەوە {{PLURAL:$3|'''١''' ئەنجام|'''$3''' ئەنجام}} دەبینن کە لە ئەنجامی ژمارە '''$2'''ەوە دەست{{PLURAL:$3|پێدەکات|پێدەکەن}}",
        "showingresultsheader": "{{PLURAL:$5|ئاکامی '''$1''' لە '''$3'''|ئاکامەکانی '''$1 - $2''' لە '''$3'''}} بۆ '''$4'''",
        "search-nonefound": "ھیچ ئاکامێک کە بە داواکارییەکەت بخوا نەدۆزرایەوە.",
        "powersearch-legend": "گەڕانی پێشکەوتوو",
        "action-userrights-interwiki": "دەستکاری مافەکانی بەکارهێنەریی بەکارهێنەران لە ویکی‌یەکانی دیکە‌دا",
        "action-siteadmin": "داخستن یا کردنەوەی بنکەدراو",
        "action-sendemail": "ناردنی ئیمەیلەکان",
+       "action-editmywatchlist": "دیتنی پێرستی چاودێریت",
        "action-viewmywatchlist": "دیتنی پێرستی چاودێریت",
        "nchanges": "$1 {{PLURAL:$1|گۆڕانکاری}}",
        "enhancedrc-history": "مێژوو",
        "pageswithprop-submit": "بڕۆ",
        "doubleredirects": "دووجار ڕەوانەکراوەکان",
        "doubleredirectstext": "ئەم پەڕە لیستی ئەو پەڕانەیە کە ڕەوانەکراون بۆ پەڕەیەکی ڕەوانەکراوی دیکە.\nهەر ڕیزێک، بەستەرەکانی ڕەوانەکردنەوەی یەکەم و دووەم و ھەروەھا ئامانجی ڕەوانەکراوی دووەمی تێدایە کە حاڵەتی ئاساییدا مەبەستی «ڕاستی»ی ڕەوانەکراوی یەکەمیش دەبێ بۆ ئەوێ بێت.\nئەوانەی <del>هێڵیان بەسەردا کێشراوە</del> چارەسەر کراون.",
-       "double-redirect-fixed-move": "[[$1]] گوێسترایەوە.\nئێستا ڕەوانکەرە بۆ [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] گوازرایەوە.\nخۆگەڕ نوێ کرایەوە و ئێستا ڕەوانەکەرە بۆ [[$2]].",
        "double-redirect-fixer": "چارەسەرکەری ڕەوانکەر",
        "brokenredirects": "ڕەوانەکەرە شکاوەکان",
        "brokenredirectstext": "ئەم ڕەوانەکراوانە بەستەرن بۆ ئەو پەڕانە کە بوونیان نییە:",
        "restriction-create": "دروستکردن",
        "restriction-upload": "بارکردن",
        "restriction-level-sysop": "تەواو پارێزراو",
-       "restriction-level-autoconfirmed": "نیوەپارێزراو - ئاستی ١",
+       "restriction-level-autoconfirmed": "نیوەپارێزراو",
        "restriction-level-all": "هەر ئاستێک",
        "undelete": "پەڕە سڕاوەکان ببینە",
        "undeletepage": "پەڕە سڕاوەکان ببینە و بھێنەوە",
        "pageinfo-category-pages": "ژمارەی پەڕەکان",
        "pageinfo-category-subcats": "ژمارەی ژێرپەڕەکان",
        "pageinfo-category-files": "ژمارەی پەڕگەکان",
-       "skinname-monobook": "مۆنۆ",
-       "skinname-vector": "ڤێکتۆر",
        "markaspatrolleddiff": "وەک پاس دراو نیشان بکە",
        "markaspatrolledtext": "ئەم پەڕەیە وەک پاس دراو نیشان بکە",
        "markedaspatrolled": "وەک پاس دراو نیشان کرا",
        "exif-countrycodedest": "کۆدی وڵاتی نیشان دراو",
        "exif-provinceorstatedest": "پارێزگا یان ویلایەتی نیشان دراو",
        "exif-citydest": "شاری نیشان دراو",
-       "exif-objectname": "سەردێری کورت",
+       "exif-objectname": "سەردێڕی کورت",
        "exif-specialinstructions": "ڕیسای کاری تایبەت",
-       "exif-headline": "سەردێر",
+       "exif-headline": "سەردێڕ",
        "exif-source": "سەرچاوە",
        "exif-contact": "زانیاری پەیوەندیکردن",
        "exif-writer": "نووسەر",
        "exif-flash-mode-3": "شێوازی خۆکار",
        "exif-flash-function-1": "فەنکشێنی فلاش نیە",
        "exif-flash-redeye-1": "شێوازی کەم‌کردنەوەی سوور-چاو",
-       "exif-focalplaneresolutionunit-2": "ئینج",
+       "exif-focalplaneresolutionunit-2": "ئینچ",
        "exif-sensingmethod-1": "دیاری نەکراو",
        "exif-sensingmethod-2": "یەک چیپی هەستەوەری بەشی ڕەنگ",
        "exif-sensingmethod-3": "دوو چیپی هەستەوەری بەشی ڕەنگ",
        "imgmultipagenext": "پەڕەی داهاتوو →",
        "imgmultigo": "بڕۆ!",
        "imgmultigoto": "بڕۆ بۆ پەڕەی $1",
+       "img-lang-go": "بڕۆ",
        "ascending_abbrev": "بەرەوە ژوور",
        "descending_abbrev": "بەرەوە ژێر",
        "table_pager_next": "پەڕەی داهاتوو",
        "duplicate-defaultsort": "'''ئاگاداری''' کلیلی پۆلێنکردنی \"$2'' چووەتە شوێنی کلیلی پۆلێنکردنی  \"$1\"",
        "version": "وەشان",
        "version-extensions": "پێوەکراوە دامەزراوەکان",
+       "version-skins": "پێستەکان",
        "version-specialpages": "پەڕە تایبەتەکان",
        "version-parserhooks": "قولاپە لێککەرەکان",
        "version-variables": "گۆڕاوەکان",
-       "version-skins": "پێستەکان",
        "version-other": "Other",
        "version-mediahandlers": "Media handlers",
        "version-hooks": "قولاپەکان",
        "version-hook-subscribedby": "بەشداربوو لە لایەن",
        "version-version": "(وەشانی $1)",
        "version-license": "مۆڵەتنامە",
+       "version-ext-colheader-version": "وەشان",
+       "version-ext-colheader-description": "وەسف",
        "version-poweredby-others": "دیکە",
        "version-software": "نەرمەکاڵای دامەزراو",
        "version-software-product": "بەرهەم",
        "version-software-version": "وەشان",
        "version-entrypoints-header-url": "ناونیشانی ئینتەرنێتی",
+       "redirect-submit": "بڕۆ",
        "fileduplicatesearch": "گەڕان بۆ پەڕگە دووپات کراوەکان",
        "fileduplicatesearch-summary": "گەڕان بۆ پەڕگە دووبارەکراوەکان لەسەر بنەمای نرخی hash.",
        "fileduplicatesearch-legend": "گەڕان بۆ دووبارەکردنێک",
index dc6cf18..1cbf870 100644 (file)
        "qbedit": "Mudificà",
        "qbpageoptions": "Issa pagina",
        "qbmyoptions": "E mo pagine",
-       "vector-action-addsection": "Aghjunghje discussione",
-       "vector-action-delete": "Supprimà",
-       "vector-action-move": "Cullucà",
-       "vector-action-protect": "Pruteghje",
-       "vector-action-unprotect": "Cambià a prutezzione",
-       "vector-view-create": "Creà",
-       "vector-view-edit": "Mudificà",
-       "vector-view-history": "Vede a cronolugia",
-       "vector-view-view": "Leghje",
-       "vector-view-viewsource": "Vede a surghjente",
        "actions": "Azzione",
        "variants": "Variante",
        "errorpagetitle": "Errore",
        "blocklist-reason": "Mutivu",
        "ipblocklist-submit": "Ricerca",
        "anononlyblock": "solu i cuntributori anonimi",
+       "blocklist-nousertalk": "ùn pò mudificà a so propria pagina di discussione",
        "blocklink": "bluccà",
        "unblocklink": "sbluccà",
        "change-blocklink": "cambià u bloccu",
        "blocklogentry": "ha bluccatu [[$1]] per un periodu di $2 $3",
        "block-log-flags-anononly": "solu cuntributori anonimi",
        "block-log-flags-nocreate": "registramentu pruibitu",
+       "block-log-flags-nousertalk": "ùn pò mudificà a so propria pagina di discussione",
        "move-page-legend": "Move a pagina",
        "movearticle": "Move a pagina",
        "move-watch": "Fighjulà issa pagina",
index 0b601fc..18ff1d5 100644 (file)
        "qbmyoptions": "Akon mga pahina",
        "faq": "Mga perme napamangkot (\"FAQ\")",
        "faqpage": "Project:Mga perme napamangkot (''FAQ'')",
-       "vector-action-addsection": "Magdugang sang topiko",
-       "vector-action-delete": "Panason",
-       "vector-action-move": "Isdogon",
-       "vector-action-protect": "Protektahan",
-       "vector-action-undelete": "Indi pag panason",
-       "vector-action-unprotect": "Islan ang proteksyon",
-       "vector-view-create": "Ubrahon",
-       "vector-view-edit": "Bag-uhon",
-       "vector-view-history": "Ipakita ang kasaysayan",
-       "vector-view-view": "Basahon",
-       "vector-view-viewsource": "Lantawon ang ginhalinan",
        "actions": "Mga hulag",
        "namespaces": "Mga lang-at ngalan",
        "variants": "Mga pililian",
        "viewprevnext": "Tan-awon ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "'''Ubrahon ang pahina nga \"[[:$1]]\" sa sini nga wiki!'''",
        "searchprofile-articles": "Mga pahina sang ka-undan",
-       "searchprofile-project": "Mga pahina sang Tabang kag Katuyuan",
        "searchprofile-images": "Multimidya",
        "searchprofile-everything": "Tanan nga butang",
        "searchprofile-advanced": "Mas mataas nga lebel",
        "searchprofile-articles-tooltip": "Pangitaon sa $1",
-       "searchprofile-project-tooltip": "Pangitaon sa $1",
        "searchprofile-images-tooltip": "Magpangita sang mga akta",
        "searchprofile-everything-tooltip": "Pangitaon ang tanan nga kaundan (lakip ang mga pahina sang pag-istoryahanay)",
        "searchprofile-advanced-tooltip": "Pangitaon sa ginpaubra nga mga lang-at pangalan",
        "booksources-go": "Padayon",
        "log": "Mga Listahan",
        "allpages": "Tanan nga pahina",
-       "alphaindexline": "$1 asta sa $2",
        "prevpage": "Antes nga pahina ($1)",
        "allpagesfrom": "Ipakita ang mga pahina halin sa:",
        "allpagesto": "Ipakita ang mga pahina nga nagatapos sa:",
diff --git a/languages/i18n/cr.json b/languages/i18n/cr.json
new file mode 100644 (file)
index 0000000..da515a7
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kuvaly",
+                       "Malafaya"
+               ]
+       },
+       "mainpage": "ᓃᔥᑕᒻᐹᔅᑌᒋᓂᑲᓐ",
+       "mainpage-description": "ᓃᔥᑕᒻᐹᔅᑌᒋᓂᑲᓐ"
+}
index f5e3088..2a38313 100644 (file)
        "qbmyoptions": "Саифелерим",
        "faq": "Сыкъ берильген суаллер",
        "faqpage": "Project:Сыкъ берильген суаллер",
-       "vector-action-addsection": "Мевзу къош",
-       "vector-action-delete": "Ёкъ эт",
-       "vector-action-move": "Адыны денъиштир",
-       "vector-action-protect": "Къорчала",
-       "vector-action-undelete": "Янъыдан ярат",
-       "vector-action-unprotect": "Къорчалавны денъиштир",
-       "vector-view-create": "Ярат",
-       "vector-view-edit": "Денъиштир",
-       "vector-view-history": "Кечмишини косьтер",
-       "vector-view-view": "Окъу",
-       "vector-view-viewsource": "Менба кодуны косьтер",
        "actions": "Арекетлер",
        "namespaces": "Исим фезалары",
        "variants": "Вариантлар",
        "searchrelated": "багълы",
        "searchall": "эписи",
        "showingresults": "Ашагъыда №&nbsp;<strong>$2</strong>ден башлап {{PLURAL:$1|1='''1''' нетидже|'''$1''' нетидже}} булуна.",
-       "showingresultsnum": "Ашагъыда №&nbsp;'''$2'''ден башлап {{PLURAL:$3|1='''1''' нетидже|'''$3''' нетидже}} булуна.",
        "search-nonefound": "Соратманен эшлешкен бир нетидже ёкъ.",
        "powersearch-legend": "Тафсилятлы къыдырув",
        "powersearch-ns": "Бу исим фезаларында къыдыр:",
        "tooltip-upload": "Юкленип башла",
        "tooltip-rollback": "\"Кери къайтув\" сычаннен бир басув вастасынен бу саифени сонъки денъиштиргеннинъ денъишикликлерини кери ала",
        "tooltip-undo": "\"Кери ал\" бу денъишикликни кери ала ве денъишиклик пенджересини бакъып чыкъув режиминде ача. Кери алувнынъ себебини бильдирмеге изин бере.",
-       "monobook.css": "/* monobook темасынынъ аярларыны (настройкаларыны) денъиштирмек ичюн бу ерини денъиштиринъиз. Бутюн сайтта тесирли олур. */",
        "anonymous": "{{SITENAME}} сайтынынъ  {{PLURAL:$1|1=1|$1}} къайдсыз (аноним) къулланыджысы",
        "siteuser": "{{SITENAME}} сайтынынъ къулланыджысы $1",
        "anonuser": "{{SITENAME}} сайтынынъ къайдсыз (аноним) къулланыджысы $1",
        "spambot_username": "Спамдан темизлев",
        "spam_reverting": "$1 сайтына багълантысы олмагъан сонъки версиягъа кери кетирюв",
        "spam_blanking": "Бар олгъан версияларда $1 сайтына багълантылар бар, темизлев",
-       "skinname-monobook": "MonoBook",
        "patrol-log-page": "Тешкерюв журналы",
        "log-show-hide-patrol": "Тешкерюв журналыны $1",
        "deletedrevision": "$1 сайылы эски версия ёкъ этильди.",
index 37cb2ed..82e3a05 100644 (file)
        "qbmyoptions": "Saifelerim",
        "faq": "Sıq berilgen sualler",
        "faqpage": "Project:Sıq berilgen sualler",
-       "vector-action-addsection": "Mevzu qoş",
-       "vector-action-delete": "Yoq et",
-       "vector-action-move": "Adını deñiştir",
-       "vector-action-protect": "Qorçala",
-       "vector-action-undelete": "Yañıdan yarat",
-       "vector-action-unprotect": "Qorçalavnı deñiştir",
-       "vector-view-create": "Yarat",
-       "vector-view-edit": "Deñiştir",
-       "vector-view-history": "Keçmişini köster",
-       "vector-view-view": "Oqu",
-       "vector-view-viewsource": "Menba kodunı köster",
        "actions": "Areketler",
        "namespaces": "İsim fezaları",
        "variants": "Variantlar",
        "searchrelated": "bağlı",
        "searchall": "episi",
        "showingresults": "Aşağıda №&nbsp;<strong>$2</strong>den başlap {{PLURAL:$1|'''1''' netice|'''$1''' netice}} buluna.",
-       "showingresultsnum": "Aşağıda №&nbsp;'''$2'''den başlap {{PLURAL:$3|'''1''' netice|'''$3''' netice}} buluna.",
        "search-nonefound": "Soratmanen eşleşken bir netice yoq.",
        "powersearch-legend": "Tafsilâtlı qıdıruv",
        "powersearch-ns": "Bu isim fezalarında qıdır:",
        "tooltip-upload": "Yüklenip başla",
        "tooltip-rollback": "\"Keri qaytuv\" sıçannen bir basuv vastasınen bu saifeni soñki deñiştirgenniñ deñişikliklerini keri ala",
        "tooltip-undo": "\"Keri al\" bu deñişiklikni keri ala ve deñişiklik penceresini baqıp çıquv rejiminde aça. Keri aluvnıñ sebebini bildirmege izin bere.",
-       "monobook.css": "/* monobook temasınıñ ayarlarını (nastroykalarını) deñiştirmek içün bu yerini deñiştiriñiz. Bütün saytta tesirli olur. */",
        "anonymous": "{{SITENAME}} saytınıñ {{PLURAL:$1|1|$1}} qaydsız (anonim) qullanıcıları",
        "siteuser": "{{SITENAME}} saytınıñ qullanıcısı $1",
        "anonuser": "{{SITENAME}} saytınıñ qaydsız (anonim) qullanıcısı $1",
        "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-monobook": "MonoBook",
        "patrol-log-page": "Teşkerüv jurnalı",
        "log-show-hide-patrol": "Teşkerüv jurnalını $1",
        "deletedrevision": "$1 sayılı eski versiya yoq etildi.",
index 853f9a2..f87c2e2 100644 (file)
        "qbmyoptions": "Moje stránky",
        "faq": "Často kladené otázky",
        "faqpage": "Project:Často kladené otázky",
-       "vector-action-addsection": "Přidat téma",
-       "vector-action-delete": "Smazat",
-       "vector-action-move": "Přesunout",
-       "vector-action-protect": "Zamknout",
-       "vector-action-undelete": "Obnovit",
-       "vector-action-unprotect": "Změnit zámek",
-       "vector-view-create": "Založit",
-       "vector-view-edit": "Editovat",
-       "vector-view-history": "Zobrazit historii",
-       "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",
        "mergehistory-empty": "Nelze sloučit žádnou verzi.",
        "mergehistory-success": "$3 {{PLURAL:$3|verze|verze|verzí}} stránky [[:$1]] {{PLURAL:$3|byla úspěšně sloučena|byly úspěšně sloučeny|bylo úspěšně sloučeno}} do stránky [[:$2]].",
        "mergehistory-fail": "Sloučení historií nelze provést. Překontrolujte zadané stránky a jejich historii.",
+       "mergehistory-fail-toobig": "Nelze provést sloučení historie, protože by se přesouvalo více revizí, než je limit $1.",
        "mergehistory-no-source": "Zdrojová stránka $1 neexistuje.",
        "mergehistory-no-destination": "Cílová stránka $1 neexistuje.",
        "mergehistory-invalid-source": "Zdrojová stránka musí mít platný název.",
        "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>.",
        "showingresultsinrange": "Níže zobrazuji nejvýše <strong>$1</strong> {{PLURAL:$1|výsledek|výsledky|výsledků}} v rozsahu #<strong>$2</strong>–#<strong>$3</strong>.",
-       "showingresultsnum": "Zobrazuji <strong>$3</strong> {{PLURAL:$3|výsledek|výsledky|výsledků}} počínaje od <strong>$2</strong>.",
        "showingresultsheader": "{{PLURAL:$5|Výsledek '''$1''' z '''$3'''|Výsledky '''$1–$2''' z '''$3'''}} pro '''$4'''",
        "search-nonefound": "Na váš dotaz nebyly nalezeny žádné výsledky.",
        "powersearch-legend": "Rozšířené vyhledávání",
        "windows-nonascii-filename": "Tato wiki nepodporuje názvy souborů obsahující zvláštní znaky.",
        "fileexists": "Soubor s tímto jménem již existuje, prosím podívejte se na <strong>[[:$1]]</strong>, pokud nevíte jistě, zda chcete tento soubor nahradit.\n[[$1|thumb]]",
        "filepageexists": "Popisná stránka pro soubor s tímto jménem již byla na <strong>[[:$1]]</strong> založena, avšak odpovídající soubor dosud neexistuje.\nShrnutí, které zde uvedete, se na popisné stránce nezobrazí.\nPokud tam chcete své shrnutí zobrazit, budete muset příslušnou stránku editovat ručně. [[$1|thumb]]",
-       "fileexists-extension": "Již existuje soubor s podobným jménem: [[$2|thumb]]\n* Jméno načítaného souboru: <strong>[[:$1]]</strong>\n* Jméno existujícího souboru: <strong>[[:$2]]</strong>\nVyberte jiné jméno.",
+       "fileexists-extension": "Již existuje soubor s podobným jménem: [[$2|thumb]]\n* Jméno načítaného souboru: <strong>[[:$1]]</strong>\n* Jméno existujícího souboru: <strong>[[:$2]]</strong>\nNechcete raději použít odlišnější jméno?",
        "fileexists-thumbnail-yes": "Tento soubor je zřejmě obrázek ve zmenšené velikosti ''(náhled)''. [[$1|thumb]]\nZkontrolujte soubor <strong>[[:$1]]</strong>.\nPokud je zmiňovaný soubor větší, ale jinak stejný, není potřeba zvlášť načítat jeho zmenšenou verzi.",
        "file-thumbnail-no": "Jméno souboru začíná na <strong>$1</strong>.\nMožná to je obrázek ve zmenšené velikosti ''(náhled)''.\nNačtěte soubor v plném rozlišením, pokud je k dispozici, nebo změňte jméno souboru.",
        "fileexists-forbidden": "Soubor s tímto názvem již existuje a není dovoleno ho přepsat.\nPokud chcete přesto soubor načíst, vraťte se a zvolte jiný název.\n[[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Mazání a obnovování souborů je kvůli údržbě dočasně vypnuto.",
        "filedelete-maintenance-title": "Soubor nelze smazat",
        "mimesearch": "Hledání podle MIME typu",
-       "mimesearch-summary": "Tato stránka umožňuje filtrovat soubory podle MIME typu.<br />\nVstup: <code>typ obsahu/podtyp</code>, např. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Tato stránka umožňuje filtrovat soubory podle MIME typu.<br />\nVstup: <code>typ obsahu/podtyp</code> nebo <code>typ obsahu/*</code>, např. <code>image/jpeg</code>.",
        "mimetype": "MIME typ:",
        "download": "stažení",
        "unwatchedpages": "Nesledované stránky",
        "tooltip-summary": "Zadejte stručné shrnutí",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* Zde uvedené CSS bude ovlivňovat všechny styly */",
-       "monobook.css": "/* Zde uvedené CSS bude ovlivňovat pouze styl „Monobook“ */",
-       "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-autoconfirmed.css": "/* Zde uvedené CSS bude ovlivňovat pouze automaticky schválené uživatele */",
        "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. */",
-       "monobook.js": "/* JavaScript pro uživatele používající vzhled MonoBook */",
-       "vector.js": "/* JavaScript pro uživatele používající vzhled „Vektor“ */",
        "group-autoconfirmed.js": "/* Zde uvedený JavaScript bude použit pouze pro automaticky schválené uživatele */",
        "group-user.js": "/* Zde uvedený JavaScript bude použit pouze pro registrované uživatele */",
        "group-bot.js": "/* Zde uvedený JavaScript bude použit pouze pro boty */",
        "pageinfo-category-pages": "Počet stránek",
        "pageinfo-category-subcats": "Počet podkategorií",
        "pageinfo-category-files": "Počet souborů",
-       "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Označit jako prověřené",
        "markaspatrolledtext": "Označit tuto stránku jako prověřenou",
        "markedaspatrolled": "Označeno jako prověřené",
        "duplicate-defaultsort": "Upozornění: Implicitní klíč řazení (DEFAULTSORTKEY) „$2“ přepisuje dříve nastavenou hodnotu „$1“.",
        "version": "Verze",
        "version-extensions": "Nainstalovaná rozšíření",
+       "version-skins": "Nainstalované vzhledy",
        "version-specialpages": "Speciální stránky",
        "version-parserhooks": "Přípojné body syntaktického analyzátoru",
        "version-variables": "Proměnné",
        "version-antispam": "Ochrana proti spamu",
-       "version-skins": "Vzhledy",
        "version-other": "Jiné",
        "version-mediahandlers": "Obsluha médií",
        "version-hooks": "Přípojné body",
        "version-hook-name": "Název přípojného bodu",
        "version-hook-subscribedby": "Volán z",
        "version-version": "($1)",
+       "version-no-ext-name": "[bez názvu]",
        "version-license": "Licence MediaWiki",
        "version-ext-license": "Licence",
        "version-ext-colheader-name": "Rozšíření",
+       "version-skin-colheader-name": "Vzhled",
        "version-ext-colheader-version": "Verze",
        "version-ext-colheader-license": "Licence",
        "version-ext-colheader-description": "Popis",
index 5064dfc..6a4cf9c 100644 (file)
        "qbmyoptions": "Mòje òptacëje",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Dodôj témã",
-       "vector-action-delete": "Rëmôj",
-       "vector-action-move": "Przeniesë",
-       "vector-action-protect": "Zazychrëjë",
-       "vector-action-undelete": "Doprowôdzë nazôd",
-       "vector-action-unprotect": "Òdzychrëjë",
-       "vector-view-create": "Ùsôdzë",
-       "vector-view-edit": "Edicëjô",
-       "vector-view-history": "Historëjô lopka",
-       "vector-view-view": "Czëtôj",
-       "vector-view-viewsource": "Zdrojowi tekst",
        "actions": "Dzéjania",
        "namespaces": "Rum mionów:",
        "variants": "Wariantë",
        "allowemail": "Włączë mòżlewòtã sélaniô e-mailów òd jinëch brëkòwników",
        "prefs-searchoptions": "Òptacëje szëkbë",
        "prefs-namespaces": "Rum mionów",
-       "defaultns": "Abò szëkôj w nôslédny rëmnoce mionów:",
        "default": "domëszlné",
        "prefs-files": "Lopczi",
        "prefs-custom-css": "swój CSS",
        "prefs-emailconfirm-label": "Pòcwierdzenié e-mailowi adresë:",
        "youremail": "E-mail:",
        "username": "Miono brëkòwnika:",
-       "uid": "ID brëkòwnika:",
        "prefs-memberingroups": "Nôlëżnik {{PLURAL:$1|karna|karnów}}",
        "prefs-registration": "Czas registracëji:",
        "yourrealname": "Miono ë nôzwëskò:",
        "log": "Lodżi",
        "alllogstext": "Sparłãczoné registrë wszëtczich ôrtów dzejaniô dlô {{SITENAME}}.\nMòżesz zawãżëc wëszłosc przez wëbranié ôrtu registru, miona brëkòwnika abò miona zajimny dlô ce starnë.",
        "allpages": "Wszëtczé starnë",
-       "alphaindexline": "$1 --> $2",
        "nextpage": "Nôslédnô starna ($1)",
        "prevpage": "Wczasniészô starna ($1)",
        "allpagesfrom": "Wëskrzëni starnë naczënające sã na:",
index 1e14892..c80e34b 100644 (file)
        "qbmyoptions": "моꙗ страницѧ",
        "faq": "чѧстꙑ въпроси",
        "faqpage": "Project:Чѧстꙑ въпроси",
-       "vector-action-addsection": "новꙑ бєсѣдꙑ чѧсти сътворѥниѥ",
-       "vector-action-delete": "поничьжєниѥ",
-       "vector-action-move": "прѣимєнованиѥ",
-       "vector-action-protect": "ꙁабранѥниѥ",
-       "vector-action-unprotect": "иꙁмѣни ꙁабранѥниꙗ обраꙁъ",
-       "vector-view-create": "сътворѥниѥ",
-       "vector-view-edit": "исправи",
-       "vector-view-history": "їсторїꙗ",
-       "vector-view-view": "чьтѥниѥ",
-       "vector-view-viewsource": "страницѧ источьнъ обраꙁъ",
        "actions": "дѣиства",
-       "vector-more-actions": "вѧщє",
        "namespaces": "имєнъ просторꙑ",
        "errorpagetitle": "блаꙁна",
        "tagline": "{{grammar:genitive|{{SITENAME}}}} страница",
index b932619..9c6f083 100644 (file)
        "qbmyoptions": "Сирĕн ĕнĕрлевсем",
        "faq": "ЫйХу",
        "faqpage": "Project:ЫйХу",
-       "vector-action-addsection": "Тема хуш",
-       "vector-action-delete": "Кăларса пăрах",
-       "vector-action-move": "Ятне улăштар",
-       "vector-action-protect": "Хӳтĕле",
-       "vector-view-create": "Çĕннине ту",
-       "vector-view-edit": "Тӳрлет",
-       "vector-view-history": "Кун-çул",
-       "vector-view-view": "Вула",
-       "vector-view-viewsource": "пуçламăш текста пăх",
        "errorpagetitle": "Йăнăш",
        "returnto": "$1 страницăна таврăн.",
        "tagline": "{{GRAMMAR:genitive|{{SITENAME}}}}ри материал",
        "prefs-files": "Файлсем",
        "youremail": "Электронлă почта:",
        "username": "Хутшăнакан ячĕ:",
-       "uid": "Хутшăнакан идентификаторĕ:",
        "yourrealname": "Сирĕн чăн ят (*)",
        "yourlanguage": "Интерфейс чĕлхи:",
        "yourvariant": "Чĕлхе варианчĕ",
        "log": "Журналсем",
        "all-logs-page": "Журналсем",
        "allpages": "Пěтěм страницăсем",
-       "alphaindexline": "$1-$2",
        "nextpage": "Тепěр страницă ($1)",
        "prevpage": "Малтанхи страница ($1)",
        "allarticles": "Пĕтĕм статьясем",
index 51e4c30..4a891b2 100644 (file)
        "qbmyoptions": "Fy nhudalennau",
        "faq": "Cwestiynau cyffredin",
        "faqpage": "Project:Cwestiynau cyffredin",
-       "vector-action-addsection": "Ychwanegu adran",
-       "vector-action-delete": "Dileu",
-       "vector-action-move": "Symud",
-       "vector-action-protect": "Diogelu",
-       "vector-action-undelete": "Adfer",
-       "vector-action-unprotect": "Newid y diogelwch",
-       "vector-view-create": "Dechrau",
-       "vector-view-edit": "Golygu",
-       "vector-view-history": "Gweld yr hanes",
-       "vector-view-view": "Darllen",
-       "vector-view-viewsource": "Dangos côd y dudalen",
        "actions": "Gweithrediadau",
        "namespaces": "Parthau",
        "variants": "Amrywiolion",
        "searchall": "oll",
        "showingresults": "Yn dangos $1 {{PLURAL:$1|canlyniad|canlyniad|ganlyniad|chanlyniad|chanlyniad|canlyniad}} isod gan ddechrau gyda rhif '''$2'''.",
        "showingresultsinrange": "Yn dangos hyd at {{PLURAL:$1||<strong>1</strong> canlyniad|<strong>$1</strong> ganlyniad|$1 o ganlyniadau}} isod yn yr ystod #<strong>$2</strong> i #<strong>$3</strong>.",
-       "showingresultsnum": "Yn dangos $3 {{PLURAL:$3|canlyniad|canlyniad|ganlyniad|chanlyniad|chanlyniad|canlyniad}} isod gan ddechrau gyda rhif '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5||Canlyniad '''$1''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''}} ar gyfer '''$4'''",
        "search-nonefound": "Ni chafwyd dim canlyniadau i'r ymholiad.",
        "powersearch-legend": "Chwiliad uwch",
index 9695bc6..028f1c7 100644 (file)
        "qbmyoptions": "Mine indstillinger",
        "faq": "OSS",
        "faqpage": "Project:OSS",
-       "vector-action-addsection": "Nyt emne",
-       "vector-action-delete": "Slet",
-       "vector-action-move": "Flyt",
-       "vector-action-protect": "Beskyt",
-       "vector-action-undelete": "Gendan",
-       "vector-action-unprotect": "Ændr beskyttelse",
-       "vector-view-create": "Opret",
-       "vector-view-edit": "Redigér",
-       "vector-view-history": "Se historik",
-       "vector-view-view": "Læs",
-       "vector-view-viewsource": "Se kilden",
        "actions": "Handlinger",
        "namespaces": "Navnerum",
        "variants": "Varianter",
        "searchrelated": "relateret",
        "searchall": "alle",
        "showingresults": "Nedenfor vises <b>$1</b> {{PLURAL:$1|resultat|resultater}} startende med nummer <b>$2</b>.",
-       "showingresultsnum": "Herunder vises <b>$3</b> {{PLURAL:$3|resultat|resultater}} startende med nummer <b>$2</b>.",
        "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' af '''$3'''|Resultat '''$1 - $2''' af '''$3'''}} for '''$4'''",
        "search-nonefound": "Søgningen gav ingen resultater.",
        "powersearch-legend": "Avanceret søgning",
        "tooltip-preferences-save": "Gem indstillinger",
        "tooltip-summary": "Indtast en kort opsummering",
        "common.css": "/** CSS inkluderet her vil være aktivt for alle brugere. */",
-       "monobook.css": "/** CSS inkluderet her vil være aktivt for brugere af Monobook-temaet . */",
        "common.js": "/* Javascript inkluderet her vil være aktivt for alle brugere. */",
-       "monobook.js": "/* JavaScript i denne fil vil indlæses for brugere af udseendet MonoBook */",
        "anonymous": "{{PLURAL:$1|Anonym bruger|Anonyme brugere}} på {{SITENAME}}",
        "siteuser": "{{SITENAME}} bruger $1",
        "anonuser": "{{SITENAME}} anonym bruger $1",
        "pageinfo-category-pages": "Antal sider",
        "pageinfo-category-subcats": "Antal underkategorier",
        "pageinfo-category-files": "Antal filer",
-       "skinname-monobook": "MonoBook",
        "markaspatrolleddiff": "Markér som patruljeret",
        "markaspatrolledtext": "Markér denne side som patruljeret",
        "markedaspatrolled": "Markeret som patruljeret",
index 95fbf8a..f1bd8f8 100644 (file)
        "qbmyoptions": "Meine Seiten",
        "faq": "Häufig gestellte Fragen",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Abschnitt hinzufügen",
-       "vector-action-delete": "Löschen",
-       "vector-action-move": "Verschieben",
-       "vector-action-protect": "Schützen",
-       "vector-action-undelete": "Wiederherstellen",
-       "vector-action-unprotect": "Seitenschutz ändern",
-       "vector-view-create": "Erstellen",
-       "vector-view-edit": "Bearbeiten",
-       "vector-view-history": "Versionsgeschichte",
-       "vector-view-view": "Lesen",
-       "vector-view-viewsource": "Quelltext anzeigen",
        "actions": "Aktionen",
-       "vector-more-actions": "Mehr",
        "namespaces": "Namensräume",
        "variants": "Varianten",
        "navigation-heading": "Navigationsmenü",
        "mergehistory-empty": "Es können keine Versionen vereinigt werden.",
        "mergehistory-success": "{{PLURAL:$3|1 Version|$3 Versionen}} von „[[:$1]]“ erfolgreich nach „[[:$2]]“ vereinigt.",
        "mergehistory-fail": "Versionsvereinigung nicht möglich, bitte prüfe die Seite und die Zeitangaben.",
+       "mergehistory-fail-toobig": "Die Versionsgeschichtenzusammenführung konnte nicht ausgeführt werden, da sonst mehr als {{PLURAL:$1|eine Version|$1 Versionen}} verschoben werden {{PLURAL:$1|würde|würden}}.",
        "mergehistory-no-source": "Ursprungsseite „$1“ ist nicht vorhanden.",
        "mergehistory-no-destination": "Zielseite „$1“ ist nicht vorhanden.",
        "mergehistory-invalid-source": "Ursprungsseite muss ein gültiger Seitenname sein.",
        "searchall": "alle",
        "showingresults": "Hier {{PLURAL:$1|ist '''1''' Ergebnis|sind '''$1''' Ergebnisse}}, beginnend mit Nummer '''$2.'''",
        "showingresultsinrange": "Unten {{PLURAL:$1|wird <strong>ein</strong> Ergebnis|werden bis zu <strong>$1</strong> Ergebnisse}} im Bereich <strong>$2</strong> bis <strong>$3</strong> angezeigt.",
-       "showingresultsnum": "Hier {{PLURAL:$3|ist '''1''' Ergebnis|sind '''$3''' Ergebnisse}}, beginnend mit Nummer '''$2.'''",
        "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' von '''$3'''|Ergebnisse '''$1–$2''' von '''$3'''}} für '''$4'''",
        "search-nonefound": "Zu deiner Suchanfrage wurden keine Ergebnisse gefunden.",
        "powersearch-legend": "Erweiterte Suche",
        "tooltip-preferences-save": "Einstellungen speichern",
        "tooltip-summary": "Gib eine kurze Zusammenfassung ein.",
        "interlanguage-link-title": "$1 – $2",
+       "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/* Das folgende CSS wird für alle Benutzeroberflächen geladen. */",
-       "monobook.css": "/* Das folgende CSS wird für Benutzer der MonoBook-Benutzeroberfläche geladen */",
-       "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-autoconfirmed.css": "/* CSS an dieser Stelle wirkt sich nur auf automatisch bestätigte Benutzer aus */",
        "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. */",
-       "monobook.js": "/* Das folgende JavaScript wird für Benutzer der Monobook-Benutzeroberfläche geladen. */",
-       "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. */",
        "group-bot.js": "/* Das folgende JavaScript wird nur für Bots geladen. */",
        "pageinfo-category-pages": "Anzahl der Seiten",
        "pageinfo-category-subcats": "Anzahl der Unterkategorien",
        "pageinfo-category-files": "Anzahl der Dateien",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Als kontrolliert markieren",
        "markaspatrolledtext": "Diese Seite als kontrolliert markieren",
        "markedaspatrolled": "Als kontrolliert markiert",
        "duplicate-defaultsort": "Achtung: Der Sortierungsschlüssel „$2“ überschreibt den vorher verwendeten Schlüssel „$1“.",
        "version": "Version",
        "version-extensions": "Installierte Erweiterungen",
+       "version-skins": "Installierte Benutzeroberflächen",
        "version-specialpages": "Erweiterungen mit Spezialseiten",
        "version-parserhooks": "Parsererweiterungen",
        "version-variables": "Erweiterungen mit Variablen",
        "version-antispam": "Spamschutzerweiterungen",
-       "version-skins": "Benutzeroberflächen",
        "version-api": "API-Erweiterungen",
        "version-other": "Sonstige Erweiterungen",
        "version-mediahandlers": "Mediennutzungserweiterungen",
        "version-hook-name": "Schnittstellenname",
        "version-hook-subscribedby": "Aufruf von",
        "version-version": "($1)",
+       "version-no-ext-name": "[kein Name]",
        "version-svn-revision": "(Version $2)",
        "version-license": "MediaWiki-Lizenz",
        "version-ext-license": "Lizenz",
        "version-ext-colheader-name": "Bezeichnung",
+       "version-skin-colheader-name": "Benutzeroberfläche",
        "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "Lizenz",
        "version-ext-colheader-description": "Beschreibung",
        "expand_templates_remove_nowiki": "<nowiki>-Tags in der Ausgabe unterdrücken",
        "expand_templates_generate_xml": "XML-Parser-Baum zeigen",
        "expand_templates_generate_rawhtml": "Rohes HTML anzeigen",
-       "expand_templates_preview": "Vorschau"
+       "expand_templates_preview": "Vorschau",
+       "pagelanguage": "Seitensprachenauswahl",
+       "pagelang-name": "Seite",
+       "pagelang-language": "Sprache",
+       "pagelang-use-default": "Standardsprache verwenden",
+       "pagelang-select-lang": "Sprache auswählen",
+       "right-pagelang": "Seitensprache ändern",
+       "action-pagelang": "die Seitensprache zu ändern",
+       "log-name-pagelang": "Sprachenänderungs-Logbuch",
+       "log-description-pagelang": "Dies ist ein Logbuch mit Änderungen an Seitensprachen.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|änderte}} die Seitensprache für $3 von $4 nach $5."
 }
index e99b3f1..2313c1f 100644 (file)
        "qbmyoptions": "Pelê mı",
        "faq": "PZP (Persê ke zehf persiyenê)",
        "faqpage": "Project: PZP",
-       "vector-action-addsection": "Mewzu vıraze",
-       "vector-action-delete": "Bestere",
-       "vector-action-move": "Bere",
-       "vector-action-protect": "Bışevekne",
-       "vector-action-undelete": "Esterıtışi peyser bıgê",
-       "vector-action-unprotect": "Starkerdışi bıvurne",
-       "vector-view-create": "Vıraze",
-       "vector-view-edit": "Bıvurne",
-       "vector-view-history": "Tarixê pele bıvêne",
-       "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",
        "searchall": "pêro",
        "showingresults": "#<strong>$2</strong> netican ra {{PLURAL:$1|<strong>1</strong> netice cêr dero|<strong>$1</strong> neticey cêr derê}}.",
        "showingresultsinrange": "{{PLURAL:$1|<strong>1</strong> netice|<strong>$1</strong> neticey}} be mabeynê #<strong>$2</strong> ra be #<strong>$3</strong> cêr asenê.",
-       "showingresultsnum": "#<strong>$2</strong> netican ra {{PLURAL:$3|<strong>1</strong> netice cêr dero|<strong>$3</strong> neticey cêr derê}}.",
        "showingresultsheader": "{{PLURAL:$5|Neticeyê '''$1''' of '''$3'''|Neticeyanê '''$1 - $2''' hetê '''$3'''}} qe '''$4'''",
        "search-nonefound": "Zey perskerdışê şıma netice nêvêniya.",
        "powersearch-legend": "Cıgeyrayışo hera",
        "pageinfo-category-pages": "Amarê pelan",
        "pageinfo-category-subcats": "Amarê bınkategoriyan",
        "pageinfo-category-files": "Amarê dosyeyan",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Nişan bıke ke dewriya biyo",
        "markaspatrolledtext": "Ena pele nişan bike ke devriye biyo",
        "markedaspatrolled": "Nişan biyo ke verni de devriye biyo",
index ed66b1c..c34e9b3 100644 (file)
        "qbmyoptions": "Móje boki",
        "faq": "FAQ (pšašanja a wótegrona)",
        "faqpage": "Project:FAQ (pšašanja a wótegrona)",
-       "vector-action-addsection": "Temu pśidaś",
-       "vector-action-delete": "Wulašowaś",
-       "vector-action-move": "Pśesunuś",
-       "vector-action-protect": "Šćitaś",
-       "vector-action-undelete": "Wótnowiś",
-       "vector-action-unprotect": "Šćit změniś",
-       "vector-view-create": "Napóraś",
-       "vector-view-edit": "Wobźěłaś",
-       "vector-view-history": "Wersije a awtory",
-       "vector-view-view": "Cytaś",
-       "vector-view-viewsource": "Žrědło se woglědaś",
        "actions": "Akcije",
        "namespaces": "Mjenjowe rumy",
        "variants": "Warianty",
        "searchall": "wše",
        "showingresults": "How {{PLURAL:|jo '''1''' wuslědk|stej '''$1''' wuslědka|su '''$1''' wuslědki}} wót cysła '''$2'''.",
        "showingresultsinrange": "Dołojce pokazujo se do {{PLURAL:$1|<strong>1</strong> wuslědka|<strong>$1</strong> wuslědkowu|<strong>$1</strong> wuslědkow}} we wobłuku <strong>$2</strong> až do <strong>$3</strong>.",
-       "showingresultsnum": "How {{PLURAL:$3|jo '''1''' wuslědk|stej '''$3''' wuslědka|su '''$3''' wuslědki}} wót cysła '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Wuslědk '''$1''' z '''$3'''|Wuslědki '''$1 - $2''' z '''$3'''}} za '''$4'''",
        "search-nonefound": "Njejsu se wuslědki namakali, kótarež wótpowěduju napšašowanjeju.",
        "powersearch-legend": "Rozšyrjone pytanje",
        "tooltip-summary": "Zapódaj krotke zespominanje",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/** Na toś tom městnje wustatkujo se CSS na wšykne šaty. */",
-       "monobook.css": "/* How zaměstnjony CSS wustatkujo se na wužywarje monobook-šata */",
        "common.js": "/* Kuždy JavaScript how lodujo se za wšykne wužywarje na kuždem boce. */",
-       "monobook.js": "/* Slědujucy JavaScript zacytajo se za wužywarjow, kótarež skin MonoBook wužywaju */",
        "anonymous": "{{PLURAL:$1|Anonymny wužywaŕ|Anonymnej wužywarja|Anonymne wužywarje}} na {{SITENAME}}",
        "siteuser": "{{SITENAME}}-wužywaŕ $1",
        "anonuser": "{{SITENAME}} anonymny wužywaŕ $1",
        "pageinfo-category-pages": "Licba bokow",
        "pageinfo-category-subcats": "Licba pódkategorijow",
        "pageinfo-category-files": "Licba datajow",
-       "skinname-monobook": "MonoBook",
        "markaspatrolleddiff": "Ako kontrolěrowane markěrowaś",
        "markaspatrolledtext": "Markěruj toś ten bok ako kontrolěrowany",
        "markedaspatrolled": "jo se ako kontrolěrowany markěrował",
index 969741c..1db8670 100644 (file)
        "qbmyoptions": "Bobolikonku ngawi",
        "faq": "Ponguhatan Koinsoruan om Poninimbar",
        "faqpage": "Project:Ponguhatan Koinsoruan om Pininimbar",
-       "vector-action-addsection": "Ruhangai piboboroson",
-       "vector-action-delete": "Pugaso",
-       "vector-action-move": "Poundoliho",
-       "vector-action-protect": "Tingoligai",
-       "vector-action-undelete": "Kada pugaso",
-       "vector-action-unprotect": "Alanai tingolig",
-       "vector-view-create": "Pomonsoi",
-       "vector-view-edit": "Idito",
-       "vector-view-history": "Intaai susuyan",
-       "vector-view-view": "Basao",
-       "vector-view-viewsource": "Intaai wowonod",
        "actions": "Pongkinaraja",
        "namespaces": "Ponuratan ngaran",
        "variants": "Kopogisuaian",
        "searchmenu-exists": "'''Haro no bolikon pinungaranan do \"[[:$1]]\" hiti id wiki.'''",
        "searchmenu-new": "'''Pomonsoi do bolikon \"[[:$1]]\"hiti id wiki!'''",
        "searchprofile-articles": "Suang bobolikon",
-       "searchprofile-project": "Tatabang om Tongobolikon purujik",
        "searchprofile-images": "Multimodia",
        "searchprofile-everything": "Nunu nopo",
        "searchprofile-advanced": "Poinsogulu",
        "searchprofile-articles-tooltip": "Ihumo id $1",
-       "searchprofile-project-tooltip": "Ihumo id $1",
        "searchprofile-images-tooltip": "Ihumo montok tongopail",
        "searchprofile-everything-tooltip": "Ihumo oinsanan suang (kohompit bobolikon bolotok)",
        "searchprofile-advanced-tooltip": "Pogihum momoguno pinotomod ngaran",
        "search-interwiki-default": "Kootuson $1:",
        "search-interwiki-more": "(lobi)",
        "search-relatedarticle": "Kompinaian",
-       "searcheverything-enable": "Pogihum momoguno oinsanan ngaran:",
        "searchrelated": "kompinaian",
        "searchall": "oinsanan",
        "showingresultsheader": "{{PLURAL:$5|Kootuson '''$1''' of '''$3'''|Tongkootuson '''$1 - $2''' of '''$3'''}} montok '''$4'''",
        "specialloguserlabel": "Momoguno:",
        "log": "Tongolog",
        "allpages": "Oinsanan bolikon",
-       "alphaindexline": "$1 gisom $2",
        "nextpage": "Bolikon sumuhut ($1)",
        "prevpage": "Bolikon nakatalib $1",
        "allpagesfrom": "Pokitono bobolikon tinimpuun do:",
index 62d3ea5..ca2cfa4 100644 (file)
        "qbmyoptions": "މަގޭ ސަފްހާ ތައް",
        "faq": "އެފް.އޭ.ކިއު",
        "faqpage": "Project:އެފް.އޭ.ކިއު",
-       "vector-action-addsection": "ޚިޔާލެއް އިތުރުކުރައްވާ",
-       "vector-action-delete": "ފޮހެލައްވާ",
-       "vector-action-move": "ތަން ބަދަލުކުރައްވާ",
-       "vector-action-protect": "ދިފާޢުކުރައްވާ",
-       "vector-action-unprotect": "ދިފާޢުކުރުން ބަދަލުކުރައްވާ",
-       "vector-view-create": "ފަށްޓަވާ",
-       "vector-view-edit": "އުނިއިތުރު ގެންނަވާ",
-       "vector-view-history": "ޞަފްޙާގެ ތާރީޚް",
-       "vector-view-view": "ކިޔުއްވާ",
-       "vector-view-viewsource": "މަސްދަރު ބައްލަވާ",
        "actions": "ޢަމަލުތައް",
        "namespaces": "ނަންސްޕޭސަސް",
        "errorpagetitle": "ކުށް",
        "viewprevnext": "ބައްލަވާ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-new": "''' މި ވިކީގައި \"[[:$1]]\" ފަށްޓަވައިދެއްވާ! '''",
        "searchprofile-articles": "މަޒުމޫނު ޞަފްޙާތައް",
-       "searchprofile-project": "އެހީ ޞަފްޙާތަކާއި މަޝްރޫޢު ޞަފްޙާތައް",
        "searchprofile-images": "މަލްޓިމީޑިއާ",
        "searchprofile-everything": "ހުރިހާ",
        "searchprofile-advanced": "ފުންކޮށް",
        "searchprofile-articles-tooltip": "ހޯދާނީ $1އިން",
-       "searchprofile-project-tooltip": "ހޯދާނީ $1އިން",
        "searchprofile-images-tooltip": "ފައިލުތައް ހޯއްދަވާ",
        "searchprofile-everything-tooltip": "ހޯއްވާނީ ހުރިހާ އެއްޗެއް (ޚިޔާލު ޞަފްޙާތަކާއި އެކު)",
        "search-result-size": "$1 ({{PLURAL:$2|1 ބަސް|$2 ބަސްތައް}})",
        "booksources": "ފޮތްތަކުގެ މަސްދަރުތައް",
        "booksources-go": "ދުރުވޭ",
        "allpages": "ހުރިހާ ޞަފްޙާތައް",
-       "alphaindexline": "$1 އިން $2",
        "nextpage": "ކުރިއަށް ($1)",
        "prevpage": "ފަހަތަށް ($1)",
        "allarticles": "ހުރިހާ މަޒުމޫނުތައް",
        "watch": "ނަޒަރުބަހައްޓަވާ",
        "watchthispage": "މި ޞަފްޙާއަށް ނަޒަރުބަހައްޓަވާ",
        "unwatch": "ހާއްސަ ނަޒަރުން އުނިކުރޭ",
-       "watchlistcontains": "ތިޔަބޭފުޅާގެ ހާއްސަ ނަޒަރު ފިހުރިސްތުގައި ވަނީ $1 ޞަފްޙާއެވެ.",
        "changed": "ބަދަލުކުރެވިއްޖެ",
        "deletepage": "ޞަފްޙާ ފޮހެލައްވާ",
        "confirm": "ޔަގީން",
        "pageinfo-toolboxlink": "ސަފްޙާ އާއި ބެހޭ މައުލޫމާތު",
        "previousdiff": "→ ކުރީގެ ނުސްހާ",
        "nextdiff": "ފަހުގެ ނުސްހާ ←",
-       "showhidebots": "($1 ބޮޓްސް)",
        "ilsubmit": "ހޯއްދަވާ",
        "metadata": "މެޓަޑޭޓާ",
        "exif-imagewidth": "ފުޅާމިން",
index c4ce30c..4f6e294 100644 (file)
        "qbmyoptions": "Al mē pàgini",
        "faq": "Dmândi fâti",
        "faqpage": "Project:Dmândi fâti despès",
-       "vector-action-addsection": "Zûnta discusiòun",
-       "vector-action-delete": "Scanşèla",
-       "vector-action-move": "Spôsta",
-       "vector-action-protect": "Prutēz",
-       "vector-action-undelete": "Fà al recóper",
-       "vector-action-unprotect": "Câmbia la prutesiòun",
-       "vector-view-create": "Invèinta",
-       "vector-view-edit": "Mudéfica",
-       "vector-view-history": "Guêrda la stôria",
-       "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",
        "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-fail-toobig": "Imposébil fêr l'uniòun ed la stòria cun pió 'd $1{{PLURAL:$1|revisiòun}} da spustêr",
        "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.",
        "searchall": "tót",
        "showingresults": "Ed sègvit {{PLURAL:$1|a vîn preşentê al mâsim <strong>1</strong> rişultêt| a vînen preşentê al mâsim <strong>$1</strong> rişultêt}} a partîr dal nómer #<strong>$2</strong>.",
        "showingresultsinrange": "{{PLURAL:$1|A vîn mustrê| a vînen mustrê}} sòta {{PLURAL:$1|<strong>1</strong> rişultêt|<strong>$1</strong> rişultêt}} dal #<strong>$2</strong> al #<strong>$3</strong>.",
-       "showingresultsnum": "Ed sègvit {{PLURAL:$1|a vîn preşentê <strong>1</strong> rişultêt| a vînen preşentê  <strong>$3</strong> rişultêt}} a partîr dal nómer #<strong>$2</strong>.",
        "showingresultsheader": "{{PLURAL:$5|Al risultêt '''$1''' ed '''$3'''|I risultêt '''$1 - $2''' ed '''$3'''}} per '''$4'''",
        "search-nonefound": "La sērca an n'à mìa dê di rişultê.",
+       "powersearch-legend": "Sèirca specêla",
+       "powersearch-ns": "Sērca int al spâsi di nòm:",
+       "powersearch-togglelabel": "Sernés:",
        "powersearch-toggleall": "Tót",
        "powersearch-togglenone": "Nisûn",
+       "powersearch-remember": "Arcôrda la siēlta per êtri sèirchi ch'é vō fêr",
+       "search-external": "Sèirca fâta fōra",
        "preferences": "Preferèinsa",
        "mypreferences": "Preferèinsi",
        "prefs-edits": "Mudéfichi fâti:",
index c5fad0d..0c7869c 100644 (file)
        "qbmyoptions": "Οι σελίδες μου",
        "faq": "Συχνές ερωτήσεις",
        "faqpage": "Project:Συχνές ερωτήσεις",
-       "vector-action-addsection": "Προσθήκη θέματος",
-       "vector-action-delete": "Διαγραφή",
-       "vector-action-move": "Μετακίνηση",
-       "vector-action-protect": "Προστασία",
-       "vector-action-undelete": "Επαναφορά",
-       "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": "Μενού πλοήγησης",
        "permalink": "Σταθερός σύνδεσμος",
        "print": "Εκτύπωση",
        "view": "Προβολή",
+       "view-foreign": "Δείτε στο $1",
        "edit": "Επεξεργασία",
        "create": "Δημιουργία",
+       "create-local": "Προσθέστε τοπική περιγραφή",
        "editthispage": "Επεξεργασία αυτής της σελίδας",
        "create-this-page": "Δημιουργία αυτής της σελίδας",
        "delete": "Διαγραφή",
        "searchrelated": "σχετικά",
        "searchall": "όλα",
        "showingresults": "Δείτε παρακάτω μέχρι τα {{PLURAL:$1|'''1'''αποτέλεσμα|'''$1''' αποτελέσματα}} ξεκινώντας με #'''$2'''.",
-       "showingresultsnum": "Εμφάνιση {{PLURAL:$3|'''1''' αποτελέσματος|'''$3''' αποτελεσμάτων}} αρχίζοντας με #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Αποτέλεσμα '''$1''' από '''$3'''|Αποτελέσματα '''$1 - $2''' από '''$3'''}} για '''$4'''",
        "search-nonefound": "Δεν υπάρχουν αποτελέσματα που να ικανοποιούν το ερώτημα.",
        "powersearch-legend": "Αναλυτική αναζήτηση",
        "tooltip-preferences-save": "Αποθήκευση προτιμήσεων",
        "tooltip-summary": "Εισαγάγετε μια σύντομη σύνοψη",
        "common.css": "/* Το τοποθετημένο εδώ CSS θα εφαρμοστεί σε όλα τα skins */",
-       "monobook.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Monobook skin */",
-       "vector.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Vector skin */",
        "print.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει το αποτέλεσμα της εκτύπωσης */",
        "common.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για όλους τους χρήστες σε κάθε φόρτωση σελίδας. */",
-       "monobook.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το MonoBook skin */",
-       "vector.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Vector skin */",
        "anonymous": "{{PLURAL:$1|Ανώνυμος χρήστης|Ανώνυμοι χρήστες}} του {{SITENAME}}",
        "siteuser": "{{SITENAME}} χρήστης $1",
        "anonuser": "ανώνυμος χρήστης $1 του {{SITENAME}}",
        "watchlistedit-raw-done": "Η λίστα παρακολούθησής σας ενημερώθηκε.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 σελίδα|$1 σελίδες}} προστέθηκαν:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 σελίδα|$1 σελίδες}} αφαιρέθηκαν:",
+       "watchlistedit-clear-titles": "Τίτλοι:",
+       "watchlistedit-clear-submit": "Καταργήστε τη λίστα παρακολούθησης (αυτό είναι μόνιμο!)",
+       "watchlistedit-too-many": "Υπάρχουν πάρα πολλές σελίδες για να εμφανίσετε εδώ.",
        "watchlisttools-view": "Προβολή σχετικών αλλαγών",
        "watchlisttools-edit": "Προβολή και επεξεργασία λίστας παρακολούθησης",
        "watchlisttools-raw": "Επεξεργασία πρωτογενούς λίστας παρακολούθησης",
        "duplicate-defaultsort": "'''Προειδοποίηση:''' Το προεπιλεγμένο κλειδί ταξινόμησης «$2» υπερισχύει του προηγούμενου προεπιλεγμένου κλειδιού «$1».",
        "version": "Έκδοση",
        "version-extensions": "Εγκαταστημένες επεκτάσεις",
+       "version-skins": "Προσόψεις",
        "version-specialpages": "Ειδικές σελίδες",
        "version-parserhooks": "Άγκιστρα του συντακτικού αναλυτή",
        "version-variables": "Παράμετροι",
        "version-antispam": "Πρόληψη spam",
-       "version-skins": "Προσόψεις",
        "version-other": "Άλλα",
        "version-mediahandlers": "Χειριστές των μέσων",
        "version-hooks": "Άγκιστρα",
        "version-hook-name": "Όνομα άγκιστρου",
        "version-hook-subscribedby": "Υπογεγραμμένο από",
        "version-version": "(Έκδοση $1)",
+       "version-no-ext-name": "[χωρίς όνομα]",
        "version-license": "Άδεια MediaWiki",
        "version-ext-license": "Άδεια χρήσης",
        "version-ext-colheader-name": "Επέκταση",
        "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": "{{GENDER:$1|Ο|Η}} $1 διέγραψε τη σελίδα $3",
index 76c9b8e..1be50b4 100644 (file)
        "searchall": "all",
        "showingresults": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} starting with #<strong>$2</strong>.",
        "showingresultsinrange": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} in range #<strong>$2</strong> to #<strong>$3</strong>.",
-       "showingresultsnum": "Showing below {{PLURAL:$3|<strong>1</strong> result|<strong>$3</strong> results}} starting with #<strong>$2</strong>.",
        "showingresultsheader": "{{PLURAL:$5|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}} for <strong>$4</strong>",
        "search-nonefound": "There were no results matching the query.",
        "powersearch-legend": "Advanced search",
        "version": "Version",
        "version-summary": "",
        "version-extensions": "Installed extensions",
+       "version-skins": "Installed skins",
        "version-specialpages": "Special pages",
        "version-parserhooks": "Parser hooks",
        "version-variables": "Variables",
        "version-antispam": "Spam prevention",
-       "version-skins": "Skins",
        "version-api": "API",
        "version-other": "Other",
        "version-mediahandlers": "Media handlers",
        "version-hook-name": "Hook name",
        "version-hook-subscribedby": "Subscribed by",
        "version-version": "($1)",
+       "version-no-ext-name": "[no name]",
        "version-svn-revision": "r$1",
        "version-license": "MediaWiki License",
        "version-ext-license": "License",
        "version-ext-colheader-name": "Extension",
+       "version-skin-colheader-name": "Skin",
        "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "License",
        "version-ext-colheader-description": "Description",
        "expand_templates_remove_nowiki": "Suppress <nowiki> tags in result",
        "expand_templates_generate_xml": "Show XML parse tree",
        "expand_templates_generate_rawhtml": "Show raw HTML",
-       "expand_templates_preview": "Preview"
+       "expand_templates_preview": "Preview",
+       "pagelanguage": "Page language selector",
+       "pagelang-name": "Page",
+       "pagelang-language": "Language",
+       "pagelang-use-default": "Use default language",
+       "pagelang-select-lang": "Select language",
+       "right-pagelang": "Change page language",
+       "action-pagelang": "change the page language",
+       "log-name-pagelang": "Change language log",
+       "log-description-pagelang": "This is a log of changes in page languages.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|changed}} page language for $3 from $4 to $5."
 }
index 7cc81ec..c9d9b54 100644 (file)
        "category_header": "Artikoloj en kategorio \"$1\"",
        "subcategories": "Subkategorioj",
        "category-media-header": "Dosieroj en kategorio \"$1\"",
-       "category-empty": "''Ĉi tiu kategorio momente ne enhavas artikolojn aŭ mediojn.''",
+       "category-empty": "<em>Tiu ĉi kategorio nuntempe enhavas neniun artikolon aŭ plurmedian dosieron.</em>",
        "hidden-categories": "{{PLURAL:$1|Kaŝita kategorio|Kaŝitaj kategorioj}}",
        "hidden-category-category": "Kaŝitaj kategorioj",
        "category-subcat-count": "{{PLURAL:$2|Ĉi tiu kategorio havas nur la jenan subkategorion.|Ĉi tiu kategorio havas la {{PLURAL:$1|jenan subkategorion|$1 jenajn subkategoriojn}}, el $2 entute.}}",
        "qbmyoptions": "Miaj paĝoj",
        "faq": "Oftaj demandoj",
        "faqpage": "Project:Oftaj demandoj",
-       "vector-action-addsection": "Aldoni temon",
-       "vector-action-delete": "Forigi",
-       "vector-action-move": "Alinomigi",
-       "vector-action-protect": "Protekti",
-       "vector-action-undelete": "Malforigi",
-       "vector-action-unprotect": "Ŝanĝi protektadon",
-       "vector-view-create": "Krei",
-       "vector-view-edit": "Redakti",
-       "vector-view-history": "Vidi historion",
-       "vector-view-view": "Legi",
-       "vector-view-viewsource": "Vidi fonton",
        "actions": "Agoj",
-       "vector-more-actions": "Pli",
        "namespaces": "Nomspacoj",
        "variants": "Variantoj",
        "navigation-heading": "Navigacia menuo",
        "undo-nochange": "Ŝajne la redakto jam estis malfarita.",
        "undo-summary": "Nuligis version $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskuto]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]])",
        "undo-summary-username-hidden": "Malfari ŝanĝon $1 de kaŝita uzulo",
-       "cantcreateaccounttitle": "Ne povas krei konton",
+       "cantcreateaccounttitle": "Ne eblas krei konton",
        "cantcreateaccount-text": "Konto-kreado de ĉi tiu IP-adreso ('''$1''') estis forbarita de [[User:$3|$3]].\n\nLa kialo donata de $3 estas ''$2''.",
        "cantcreateaccount-range-text": "La kreado de kontoj de IP-adresoj en la intervalo '''$1''', kiu inkludas vian IP-adreson ('''$4'''), estis blokita de [[User:$3|$3]].\n\nLa donita kialo de $3 estas ''$2''",
        "viewpagelogs": "Rigardi la protokolojn por tiu ĉi paĝo",
        "searchall": "ĉiuj",
        "showingresults": "Montras {{PLURAL:$1|'''1''' trovitan|'''$1''' trovitajn}} ekde la #'''$2'''-a.",
        "showingresultsinrange": "Malsupre montriĝas {{PLURAL:$1|<strong>1</strong> rezulto|<strong>$1</strong> rezultoj}} en la intervalo #<strong>$2</strong> ĝis #<strong>$3</strong>.",
-       "showingresultsnum": "Montras {{PLURAL:$3|'''1''' trovitan|'''$3''' trovitajn}} ekde la #'''$2'''-a.",
        "showingresultsheader": "{{PLURAL:$5|Rezulto '''$1''' el '''$3'''|Rezultoj '''$1 – $2''' el '''$3'''}} por '''$4'''",
        "search-nonefound": "La serĉomendo rezultis kun neniuj trafoj.",
        "powersearch-legend": "Progresa serĉo",
        "datedefault": "Nenia prefero",
        "prefs-labs": "Ecoj el Laboratorio",
        "prefs-user-pages": "Uzantopaĝoj",
-       "prefs-personal": "Uzanta profilo",
+       "prefs-personal": "Profilo de uzanto",
        "prefs-rc": "Lastaj ŝanĝoj",
        "prefs-watchlist": "Atentaro",
        "prefs-watchlist-days": "Kiom da tagoj montriĝu en la atentaro:",
        "timezoneregion-europe": "Eŭropo",
        "timezoneregion-indian": "Hinda Oceano",
        "timezoneregion-pacific": "Pacifiko",
-       "allowemail": "Rajtigi retmesaĝojn de aliaj uzantoj",
+       "allowemail": "Ebligi akceptadon de retmesaĝoj de aliaj uzantoj",
        "prefs-searchoptions": "Serĉi",
        "prefs-namespaces": "Nomspacoj",
        "default": "defaŭlte",
        "tooltip-summary": "Enigu mallongan resumon",
        "interlanguage-link-title": "$1 — $2",
        "common.css": "/* La jena CSS influos la aspekton de ĉiaj temoj. */",
-       "monobook.css": "/* La jena CSS influos la paĝaspekton por uzantoj de la Libreja 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-autoconfirmed.css": "/* La jena CSS sole influos auxtokonfirmatajn uzantojn. */",
        "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. */",
-       "monobook.js": "/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Libreja 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. */",
        "group-sysop.js": "/* La jena Ĝavaskripto sole ŝargiĝos por administrantoj. */",
        "pageinfo-category-pages": "Nombro de paĝoj",
        "pageinfo-category-subcats": "Nombro de subkategorioj",
        "pageinfo-category-files": "Nombro de dosieroj",
-       "skinname-monobook": "Librejo",
-       "skinname-vector": "Vektoro",
        "markaspatrolleddiff": "Marki kiel patrolitan",
        "markaspatrolledtext": "Marki ĉi tiun paĝon kiel patrolitan",
        "markedaspatrolled": "Markita kiel patrolita",
        "duplicate-defaultsort": "'''Averto:''' Defaŭlta ordiga ŝlosilo \"$2\" anstataŭigas pli fruan defaŭltan ordigan ŝlosilon \"$1\".",
        "version": "Versio",
        "version-extensions": "Instalitaj kromprogramoj",
+       "version-skins": "Etosoj",
        "version-specialpages": "Specialaj paĝoj",
        "version-parserhooks": "Sintaksaj hokoj",
        "version-variables": "Variabloj",
        "version-antispam": "Kontraŭspamilo",
-       "version-skins": "Etosoj",
        "version-other": "Alia",
        "version-mediahandlers": "Mediaj traktiloj",
        "version-hooks": "Hokoj",
        "limitreport-templateargumentsize": "Grandeco de argumentoj de ŝablonoj",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bitoko|bitokoj}}",
        "limitreport-expensivefunctioncount": "Nombro de kostaj sintaks-analizilaj funkcioj",
-       "expandtemplates": "Ampleksigi ŝablonojn",
+       "expandtemplates": "Ŝablonetendilo",
        "expand_templates_intro": "Ĉi tiu speciala paĝo traktas tekston kaj ampleksigas ĉiujn ŝablonojn en ĝi rekursie.\nĜi ankaŭ ampleksigas sintaksajn funkciojn kiel\n<code><nowiki>{{</nowiki>#language:…}}</code> kaj variablojn kiel\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. Fakte preskaŭ iujn ajn en duoblaj krampoj.",
        "expand_templates_title": "Kunteksta titolo, por {{FULLPAGENAME}}, ktp.:",
        "expand_templates_input": "Enigita teksto:",
index 584e608..295a54f 100644 (file)
        "qbmyoptions": "Mis páginas",
        "faq": "Preguntas frecuentes",
        "faqpage": "Project:P+F",
-       "vector-action-addsection": "Nueva sección",
-       "vector-action-delete": "Borrar",
-       "vector-action-move": "Trasladar",
-       "vector-action-protect": "Proteger",
-       "vector-action-undelete": "Restaurar",
-       "vector-action-unprotect": "Cambiar protección",
-       "vector-view-create": "Crear",
-       "vector-view-edit": "Editar",
-       "vector-view-history": "Ver historial",
-       "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",
        "jumptonavigation": "navegación",
        "jumptosearch": "buscar",
        "view-pool-error": "Lo sentimos, los servidores están sobrecargados en este momento.\nHay demasiados usuarios que están tratando de ver esta página.\nEspera un momento antes de tratar de acceder nuevamente a esta página.\n\n$1",
-       "generic-pool-error": "Lo sentimos, los servidores están sobrecargados por el momento.\nHay demasiados usuarios tratando de ver esta página.\nIntentes acceder nuevamente a esta página dentro de un rato.",
+       "generic-pool-error": "Lo sentimos, los servidores están sobrecargados en este momento.\nHay demasiados usuarios que están tratando de ver este recurso.\nEspera un momento antes de tratar de acceder nuevamente a este recurso.",
        "pool-timeout": "Tiempo limite agotado para el bloqueo",
        "pool-queuefull": "La cola de trabajo está llena",
        "pool-errorunknown": "Error desconocido",
        "editlink": "modificar",
        "viewsourcelink": "ver código",
        "editsectionhint": "Editar sección: $1",
-       "toc": "Contenido",
+       "toc": "Contenidos",
        "showtoc": "mostrar",
        "hidetoc": "ocultar",
        "collapsible-collapse": "Contraer",
        "nstab-help": "Ayuda",
        "nstab-category": "Categoría",
        "nosuchaction": "No existe esa acción",
-       "nosuchactiontext": "La acción especificada en la dirección no es válida.\nEs posible que hayas escrito mal la URL o que hayas seguido un enlace incorrecto. Esto también podría indicar un error en el software utilizado en {{SITENAME}}.",
+       "nosuchactiontext": "La acción especificada en la URL no es válida.\nEs posible que hayas escrito mal la URL o que hayas seguido un enlace incorrecto.\nEsto también podría indicar un error en el software utilizado en {{SITENAME}}.",
        "nosuchspecialpage": "No existe esa página especial",
        "nospecialpagetext": "<strong>Ha solicitado una página especial inexistente.</strong>\n\nPuedes ver una lista de las páginas especiales en [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Error",
        "databaseerror": "Error de la base de datos",
-       "databaseerror-text": "Ocurrió un error de consulta de la base de datos.\nEsto puede indicar un fallo en el software.",
-       "databaseerror-textcl": "Se ha producido un error en la base de datos.",
+       "databaseerror-text": "Ocurrió un error de consulta a la base de datos.\nEsto puede indicar un fallo en el software.",
+       "databaseerror-textcl": "Se ha producido un error de consulta a la base de datos.",
        "databaseerror-query": "Consulta: $1",
        "databaseerror-function": "Función: $1",
        "databaseerror-error": "Error: $1",
-       "laggedslavemode": "'''Aviso:''' puede que falten las actualizaciones más recientes en esta página.",
+       "laggedslavemode": "<strong>Avertencia:</strong> puede que falten las actualizaciones más recientes en esta página.",
        "readonly": "Base de datos bloqueada",
        "enterlockreason": "Explica el motivo del bloqueo, incluyendo una estimación de cuándo se producirá el desbloqueo",
        "readonlytext": "La base de datos no permite nuevas entradas u otras modificaciones de forma temporal, probablemente por mantenimiento rutinario, tras lo cual volverá a la normalidad.\n\nLa explicación dada por el administrador que la bloqueó fue: $1",
        "missing-article": "La base de datos no encuentra el texto de una página que debería hallarse, llamada «$1» $2.\n\nLa causa de esto suele deberse a un ''diff'' anacrónico o un enlace al historial de una página que ha sido borrada.\n\nSi no fuera el caso, puedes haber encontrado un fallo en el software.\n\nPor favor, avisa a un [[Special:ListUsers/sysop|administrador]], tomando nota de la URL.",
        "missingarticle-rev": "(n.º de revisión: $1)",
        "missingarticle-diff": "(Dif.: $1, $2)",
-       "readonly_lag": "La base de datos se ha bloqueado temporalmente mientras los servidores se sincronizan.",
+       "readonly_lag": "La base de datos se ha bloqueado automáticamente mientras los servidores de base de datos esclavos se sincronizan con el maestro.",
        "internalerror": "Error interno",
        "internalerror_info": "Error interno: $1",
        "filecopyerror": "No se pudo copiar el archivo «$1» a «$2».",
        "badtitle": "Título incorrecto",
        "badtitletext": "El título de la página solicitada está vacío, no es válido, o es un enlace interidioma o interwiki incorrecto.\nPuede que contenga uno o más caracteres que no se pueden usar en los títulos.",
        "perfcached": "Los siguientes datos provienen de la caché y pueden no estar actualizados. La caché puede contener {{PLURAL:$1|un resultado|$1 resultados}} como máximo.",
-       "perfcachedts": "Los siguientes datos provienen de la caché y su última fecha y hora de actualización es: $1. La caché puede contener {{PLURAL:$4|un resultado|$4 resultados}} como máximo.",
+       "perfcachedts": "Los siguientes datos provienen de la caché y su última actualización fue: $1. La caché puede contener {{PLURAL:$4|un resultado|$4 resultados}} como máximo.",
        "querypage-no-updates": "Actualmente las actualizaciones de esta página están desactivadas. Estos datos no serán actualizados a corto plazo.",
        "viewsource": "Ver código",
        "viewsource-title": "Ver el código de «$1»",
        "actionthrottledtext": "Como medida contra el ''spam'', la acción que estás realizando está limitada a un número determinado de veces en un periodo corto de tiempo, y has excedido ese límite. Por favor inténtalo de nuevo en unos minutos.",
        "protectedpagetext": "Esta página ha sido protegida para evitar su edición u otras acciones.",
        "viewsourcetext": "Puedes ver y copiar el código fuente de esta página:",
-       "viewyourtext": "Puedes ver y copiar el código de '''tus ediciones''' a esta página:",
+       "viewyourtext": "Puedes ver y copiar el código de <strong>tus ediciones</strong> a esta página:",
        "protectedinterface": "Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.\nPara agregar o cambiar las traducciones para todos los wikis, por favor, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
-       "editinginterface": "<strong>Aviso:</strong> Estás editando una página usada para proporcionar el texto de la interfaz para el software. \nLos cambios en esta página afectarán la apariencia de la interfaz para los demás usuarios de este wiki. \nPara añadir o cambiar las traducciones utiliza [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
+       "editinginterface": "<strong>Advertencia:</strong> Estás editando una página usada para proporcionar el texto de la interfaz para el software. \nLos cambios en esta página afectarán la apariencia de la interfaz para los demás usuarios de este wiki. \nPara añadir o cambiar las traducciones de todos los wikis utiliza [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
        "cascadeprotected": "Esta página ha sido protegida para su edición, porque está incluida en {{PLURAL:$1|la siguiente página|las siguientes páginas}}, que están protegidas con la opción de «cascada»:\n$2",
-       "namespaceprotected": "No tienes permiso para editar las páginas del espacio de nombres '''$1'''.",
+       "namespaceprotected": "No tienes permiso para editar las páginas del espacio de nombres <strong>$1</strong>.",
        "customcssprotected": "No tienes permiso para editar esta página CSS, porque contiene configuraciones personales de otro usuario.",
        "customjsprotected": "No tienes permiso para editar esta página JavaScript, porque contiene configuraciones personales de otro usuario.",
        "mycustomcssprotected": "No tienes permiso para editar esta página CSS.",
        "myprivateinfoprotected": "No tienes permiso para editar tu información privada.",
        "mypreferencesprotected": "No tienes permiso para editar tus preferencias.",
        "ns-specialprotected": "No se pueden editar las páginas especiales.",
-       "titleprotected": "Esta página ha sido protegida contra creación por [[User:$1|$1]].\nEl motivo dado fue: \"''$2''\".",
+       "titleprotected": "Esta página ha sido protegida contra creación por [[User:$1|$1]].\nEl motivo dado fue \"<em>$2</em>\".",
        "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": "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",
        "virus-scanfailed": "falló el análisis (código $1)",
        "virus-unknownscanner": "antivirus desconocido:",
        "logouttext": "<strong>Ha finalizado tu sesión.</strong>\n\nPuede que algunas páginas continúen mostrándose como si la sesión estuviera iniciada hasta que vacíes la memoria caché del navegador.",
-       "welcomeuser": "¡Te damos la bienvenida, $1!",
-       "welcomecreation-msg": "Se ha creado tu cuenta.\nNo olvides personalizar tus [[Special:Preferences|preferencias de {{SITENAME}}]].",
-       "yourname": "Nombre de usuario:",
+       "welcomeuser": "¡Bienvenido, $1!",
+       "welcomecreation-msg": "Se ha creado tu cuenta.\nPuedes cambiar tus [[Special:Preferences|preferencias]] de {{SITENAME}} si lo deseas.",
+       "yourname": "Usuario:",
        "userlogin-yourname": "Usuario",
        "userlogin-yourname-ph": "Escribe tu nombre de usuario",
        "createacct-another-username-ph": "Escribe el nombre de usuario",
        "userlogin-remembermypassword": "Mantener mi sesión iniciada",
        "userlogin-signwithsecure": "Usar conexión segura",
        "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.",
+       "password-change-forbidden": "No puedes cambiar las contraseñas en este wiki.",
+       "externaldberror": "Hubo un error de autenticación de la base de datos o bien no tienes autorización para actualizar tu cuenta externa.",
        "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}}.",
        "gotaccountlink": "Acceder",
        "userlogin-resetlink": "¿Olvidaste tus datos de acceso?",
        "userlogin-resetpassword-link": "¿Has olvidado tu contraseña?",
-       "userlogin-helplink2": "Ayuda con el registro",
+       "userlogin-helplink2": "Ayuda con el acceso",
        "userlogin-loggedin": "Ya estás conectado como {{GENDER:$1|$1}}.\nUsa el formulario de abajo para iniciar sesión como otro usuario.",
        "userlogin-createanother": "Crear otra cuenta",
        "createacct-emailrequired": "Dirección de correo electrónico",
        "password-name-match": "Tu contraseña debe ser diferente de tu nombre de usuario.",
        "password-login-forbidden": "El uso de este nombre de usuario y contraseña han sido prohibidos.",
        "mailmypassword": "Restablecer la contraseña",
-       "passwordremindertitle": "Recordatorio de contraseña de {{SITENAME}}",
+       "passwordremindertitle": "Nueva contraseña temporal para {{SITENAME}}",
        "passwordremindertext": "Alguien (probablemente tú, desde la dirección IP $1) solicitó que te enviáramos una nueva contraseña para tu cuenta en {{SITENAME}} ($4).\nSe ha creado la siguiente contraseña temporal para el usuario «$2»: «$3»\nAhora deberías iniciar sesión y cambiar tu contraseña. Tu contraseña temporal expirará en {{PLURAL:$5|un día|$5 días}}.\n\nSi fue otro quien solicitó este mensaje o has recordado tu contraseña y ya no deseas cambiarla, puedes ignorar este mensaje y seguir usando tu contraseña original.",
        "noemail": "No hay una dirección de correo electrónico registrada para «$1».",
        "noemailcreate": "Necesitas proveer una dirección de correo electrónico válida",
        "noemailprefs": "Especifica una dirección electrónica para habilitar estas características.",
        "emailconfirmlink": "Confirmar dirección de correo electrónico",
        "invalidemailaddress": "La dirección electrónica no puede ser aceptada, pues parece que tiene un formato no válido.\nPor favor, escribe una dirección en el formato adecuado o deja el campo en blanco.",
-       "cannotchangeemail": "Las direcciones de la correo electrónico de las cuentas de usuario no puedes cambiarse en esta wiki.",
-       "emaildisabled": "Este sitio no puede enviar mensajes de correo electrónico.",
+       "cannotchangeemail": "Las direcciones de la correo electrónico de las cuentas de usuario no pueden cambiarse en esta wiki.",
+       "emaildisabled": "Este sitio no puede enviar correos electrónicos.",
        "accountcreated": "Se ha creado la cuenta",
        "accountcreatedtext": "La cuenta de usuario de [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) ha sido creada.",
        "createaccount-title": "Creación de cuenta para {{SITENAME}}",
-       "createaccount-text": "Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2».\nLa contraseña asignada automáticamente es «$3». Por favor entra ahora y cambia tu contraseña.\n\nPuedes ignorar este mensaje si esta cuenta fue creada por error.",
-       "login-throttled": "Has intentado demasiadas veces iniciar sesión. Por favor espera $1 antes de intentarlo nuevamente.",
+       "createaccount-text": "Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2» y contraseña «$3». Por favor entra ahora y cambia tu contraseña.\n\nPuedes ignorar este mensaje si esta cuenta fue creada por error.",
+       "login-throttled": "Has intentado demasiadas veces iniciar sesión recientemente. Por favor espera $1 antes de intentarlo nuevamente.",
        "login-abort-generic": "Tu inicio de sesión no fue exitoso - Cancelado",
        "loginlanguagelabel": "Idioma: $1",
        "suspicious-userlogout": "Tu solicitud de desconexión ha sido denegada, pues parece haber sido enviada desde un navegador defectuoso o un proxy caché.",
        "retypenew": "Confirmar la contraseña nueva:",
        "resetpass_submit": "Establecer contraseña e iniciar sesión",
        "changepassword-success": "La contraseña se modificó correctamente.",
-       "changepassword-throttled": "Has intentado acceder demasiadas veces.\nEspera $1 antes de intentarlo de nuevo.",
+       "changepassword-throttled": "Has intentado acceder demasiadas veces recientemente.\nEspera $1 antes de intentarlo de nuevo.",
        "resetpass_forbidden": "No se pueden cambiar las contraseñas",
        "resetpass-no-info": "Debes iniciar sesión para acceder directamente a esta página.",
        "resetpass-submit-loggedin": "Cambiar contraseña",
        "resetpass-submit-cancel": "Cancelar",
-       "resetpass-wrong-oldpass": "La contraseña antigua no es correcta.\nPuede que ya hayas cambiado la contraseña o que hayas pedido una temporal.",
+       "resetpass-wrong-oldpass": "La contraseña actual, o temporal, no es correcta.\nPuede que ya hayas cambiado exitosamente tu contraseña o que hayas pedido una nueva contraseña temporal.",
        "resetpass-recycled": "Restablece tu contraseña a algo distinto de tu contraseña actual.",
-       "resetpass-temp-emailed": "Has iniciado sesión con un código temporal por correo electrónico.\nPara terminar la sesión, debes establecer una nueva contraseña aquí:",
+       "resetpass-temp-emailed": "Has iniciado sesión con un código temporal por correo electrónico.\nPara terminar el acceso, debes establecer una nueva contraseña aquí:",
        "resetpass-temp-password": "Contraseña temporal:",
        "resetpass-abort-generic": "Una extensión ha cancelado el cambio de la contraseña.",
        "resetpass-expired": "Tu contraseña ha caducado. Por favor, establece una nueva contraseña para iniciar sesión.",
-       "resetpass-expired-soft": "Su contraseña ha caducado y necesita reajustarse. Elija una nueva contraseña ahora, o haga clic en \"{{int:resetpass-enviar-cancelar}}\" para restaurarla más adelante.",
+       "resetpass-expired-soft": "Tu contraseña ha caducado y necesita restablecerse. Elije una nueva contraseña ahora, o haga clic en \"{{int:resetpass-submit-cancel}}\" para restaurarla más adelante.",
        "resetpass-validity-soft": "Tu contraseña no es válida: $1\n\nCámbiala ahora por una nueva, o haz clic en \"{{int:resetpass-submit-cancel}}\" para cambiarla más tarde.",
-       "passwordreset": "Restablecimiento de contraseña",
-       "passwordreset-text-one": "Completa este formulario para restablecer tu contraseña.",
-       "passwordreset-text-many": "{{PLURAL:$1|Rellena uno de los campos para restablecer la contraseña.}}",
+       "passwordreset": "Restablecer contraseña",
+       "passwordreset-text-one": "Completa este formulario para recibir una contraseña temporal por correo electrónico.",
+       "passwordreset-text-many": "{{PLURAL:$1|Rellena uno de los campos para  recibir una contraseña temporal por correo electrónico.}}",
        "passwordreset-legend": "Restablecer contraseña",
        "passwordreset-disabled": "Se ha desactivado el restablecimiento de contraseñas en este wiki.",
        "passwordreset-emaildisabled": "Las funciones de correo electrónico han sido desactivadas en esta wiki.",
        "passwordreset-email": "Dirección de correo electrónico:",
        "passwordreset-emailtitle": "Detalles de la cuenta en {{SITENAME}}",
        "passwordreset-emailtext-ip": "Alguien (probablemente tú, desde la dirección IP $1) ha solicitado la renovación de tu clave para {{SITENAME}} ($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}}\ncon esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} caducarán en {{PLURAL:$5|un día|$5 días}}.\nDeberías iniciar sesión y establecer una contraseña nueva ahora. Si otra persona ha realizado este solicitud\no si recuerdas tu contraseña original y no deseas cambiarla, puedes\nignorar este mensaje y continuar usando tu contraseña anterior.",
-       "passwordreset-emailtext-user": "El usuario $1 en {{SITENAME}} pidió un recordatorio de tus datos de cuenta para {{SITENAME}}\n($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}} con esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} expirarán en {{PLURAL:$5|un día|$5 días}}.\nDeberías iniciar sesión y establecer una contraseña nueva ahora. Si alguien más hizo este pedido,\no recuerdas tu contraseña original, y no deseas cambiarla, puedes\nignorar este mensaje y continuar usando tu contraseña anterior.",
+       "passwordreset-emailtext-user": "El usuario $1 en {{SITENAME}} pidió un restablecer tu contraseña para {{SITENAME}}\n($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}} con esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} expirarán en {{PLURAL:$5|un día|$5 días}}.\nDeberías iniciar sesión y establecer una contraseña nueva ahora. Si alguien más hizo este pedido,\no recuerdas tu contraseña original, y no deseas cambiarla, puedes\nignorar este mensaje y continuar usando tu contraseña anterior.",
        "passwordreset-emailelement": "Nombre de usuario: $1\nContraseña temporal: $2",
        "passwordreset-emailsent": "Se ha enviado un correo electrónico para el restablecimiento de tu contraseña.",
        "passwordreset-emailsent-capture": "Se ha enviado un correo para el restablecimiento de la contraseña, el cual se muestra a continuación.",
-       "passwordreset-emailerror-capture": "Se generó un correo electrónico de restablecimiento de contraseña, que se muestra a continuación, pero el envío {{GENDER:$2|al usuario|a la usuaria}} falló. $1",
+       "passwordreset-emailerror-capture": "Se generó un correo electrónico de restablecimiento de contraseña, que se muestra a continuación, pero el envío {{GENDER:$2|al usuario|a la usuaria}} falló: $1",
        "changeemail": "Cambiar la dirección de correo electrónico",
        "changeemail-header": "Cambiar la dirección de correo de la cuenta",
        "changeemail-text": "Rellena este formulario para cambiar tu dirección de correo electrónico. Debes introducir la contraseña para confirmar este cambio.",
        "preview": "Previsualizar",
        "showpreview": "Mostrar previsualización",
        "showdiff": "Mostrar los cambios",
-       "anoneditwarning": "'''Aviso:''' No has iniciado sesión con una cuenta de usuario.\nTu dirección IP se almacenará en el historial de ediciones de la página.",
-       "anonpreviewwarning": "''No has iniciado sesión con una cuenta de usuario. Al guardar los cambios se almacenará tu dirección IP en el historial de edición de la página.''",
-       "missingsummary": "'''Atención:''' No has escrito un resumen de edición. Si haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
+       "anoneditwarning": "<strong>Advertencia:</strong> No has iniciado sesión.\nTu dirección IP se almacenará en el historial de edición de esta página.",
+       "anonpreviewwarning": "<em>No has iniciado sesión. Al guardar los cambios se almacenará tu dirección IP en el historial de edición de esta página.</em>",
+       "missingsummary": "<strong>Recordatorio:</strong> No has escrito un resumen de edición.\nSi haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
        "missingcommenttext": "Escribe un comentario a continuación.",
-       "missingcommentheader": "'''Recordatorio:''' No has escrito un título para este comentario. Si haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
+       "missingcommentheader": "<strong>Recordatorio:</strong> No has escrito un asunto/encabezado para este comentario.\nSi haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
        "summary-preview": "Previsualización del resumen:",
-       "subject-preview": "Previsualización del tema/título:",
+       "subject-preview": "Previsualización del asunto/encabezado:",
        "blockedtitle": "El usuario está bloqueado",
-       "blockedtext": "'''Tu nombre de usuario o dirección IP ha sido bloqueada.'''\n\nEl bloqueo fue hecho por $1.\nLa razón dada es ''$2''.\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 u otro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir el bloqueo.\nNo puedes utilizar la función «enviar correo electrónico a este usuario»  a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nPor favor incluye todos los datos aquí mostrados en cualquier consulta que hagas.",
-       "autoblockedtext": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por otro usuario que fue bloqueado por $1.\nLa razón dada es esta:\n\n:''$2''\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\n\nTen en cuenta que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu actual dirección IP es $3, y el identificador del bloqueo es #$5.\nPor favor, incluye todos los datos mostrados aquí en cualquier consulta que hagas.",
+       "blockedtext": "<strong>Tu nombre de usuario o dirección IP ha sido bloqueada.</strong>\n\nEl bloqueo fue hecho por $1.\nLa razón dada es <em>$2</em>.\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar a $1 u otro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir el bloqueo.\nNo puedes utilizar la función «enviar correo electrónico a este usuario»  a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nPor favor incluye todos los datos aquí mostrados en cualquier consulta que hagas.",
+       "autoblockedtext": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por otro usuario que fue bloqueado por $1.\nLa razón dada es esta:\n\n:<em>$2</em>\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\n\nTen en cuenta que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu actual dirección IP es $3, y el identificador del bloqueo es #$5.\nPor favor, incluye todos los datos mostrados aquí en cualquier consulta que hagas.",
        "blockednoreason": "no se ha especificado el motivo",
        "whitelistedittext": "Tienes que $1 para editar artículos.",
        "confirmedittext": "Debes confirmar tu dirección electrónica antes de editar páginas. Por favor, establece y valida una dirección electrónica a través de tus [[Special:Preferences|preferencias de usuario]].",
        "loginreqlink": "acceder",
        "loginreqpagetext": "Debes $1 para ver otras páginas.",
        "accmailtitle": "Se ha enviado la contraseña",
-       "accmailtext": "Se ha enviado a $2 una contraseña generada aleatoriamente para [[User talk:$1|$1]].\n\nLa contraseña para esta nueva cuenta puede cambiarse en [[Special:ChangePassword|la página destinada para ello]] después de haber iniciado sesión.",
+       "accmailtext": "Se ha enviado a $2 una contraseña generada aleatoriamente para [[User talk:$1|$1]]. Puede cambiarse en la página [[Special:ChangePassword|destinada para ello]] después de haber iniciado sesión.",
        "newarticle": "(Nuevo)",
        "newarticletext": "Has seguido un enlace a una página que aún no existe.\nPara crear esta página, escribe en el campo a continuación. Para más información, consulta la [$1 página de ayuda].\nSi llegaste aquí por error, vuelve a la página anterior.",
        "anontalkpagetext": "---- ''Esta es la página de discusión de un usuario anónimo que aún no ha creado una cuenta, o no la usa. Por lo tanto, tenemos que usar su dirección IP para identificarlo. Una dirección IP puede ser compartida por varios usuarios. Si eres un usuario anónimo y crees que se han dirigido a ti con comentarios improcedentes, por favor [[Special:UserLogin/signup|crea una cuenta]] o si ya la tienes [[Special:UserLogin|identifícate]] para evitar confusiones futuras con otros usuarios anónimos.''",
        "mergehistory-empty": "No hay revisiones fusionables.",
        "mergehistory-success": "$3 {{PLURAL:$3|revisión|revisiones}} de [[:$1]] fusionadas de forma exitosa en [[:$2]].",
        "mergehistory-fail": "No se puede realizar la fusión de historiales, por favor revisa la página y los parámetros de tiempo.",
+       "mergehistory-fail-toobig": "No se puede fusionar el historial ya que más del límite de $1 {{PLURAL:$1|revisión|revisiones}} se moverían.",
        "mergehistory-no-source": "La página origen $1 no existe.",
        "mergehistory-no-destination": "La página destino $1 no existe.",
        "mergehistory-invalid-source": "La página origen debe tener un título válido.",
        "searchall": "todos",
        "showingresults": "Abajo se {{PLURAL:$1|muestra '''1''' resultado|muestran hasta '''$1''' resultados}} comenzando por el n.º '''$2'''.",
        "showingresultsinrange": "Abajo se muestran hasta {{PLURAL:$1|<strong>1</strong> resultado|<strong>$1</strong> resultados}} en el rango #<strong>$2</strong> hasta #<strong>$3</strong>.",
-       "showingresultsnum": "Abajo se {{PLURAL:$3|muestra '''1''' resultado|muestran los '''$3''' resultados}} comenzando por el n.º '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1-$2''' de '''$3'''}} para '''$4'''",
        "search-nonefound": "No hay resultados que cumplan los criterios de búsqueda.",
        "powersearch-legend": "Búsqueda avanzada",
        "windows-nonascii-filename": "Este wiki no admite nombres de archivo con caracteres especiales.",
        "fileexists": "Ya existe un archivo con este nombre, por favor comprueba <strong>[[:$1]]</strong> si {{GENDER:|tú}} no estás seguro de querer cambiarlo.\n[[$1|thumb]]",
        "filepageexists": "La página de descripción de este archivo ya ha sido creada en <strong>[[:$1]]</strong>, pero no existe actualmente ningún fichero con este nombre.\nEl resumen que ha ingresado no aparecerá en la página de descripción. Para que el sumario aparezca, deberá editarlo manualmente.\n[[$1|thumb]]",
-       "fileexists-extension": "Existe un archivo con un nombre similar: [[$2|thumb]]\n* Nombre del archivo que se está subiendo: <strong>[[:$1]]</strong>\n* Nombre del archivo ya existente: <strong>[[:$2]]</strong>\nPor favor, elige un nombre diferente.",
+       "fileexists-extension": "Existe un archivo con un nombre similar: [[$2|thumb]]\n* Nombre del archivo que se está subiendo: <strong>[[:$1]]</strong>\n* Nombre del archivo ya existente: <strong>[[:$2]]</strong>\n¿Quieres cambiar el nombre para que sea más distintivo?",
        "fileexists-thumbnail-yes": "El archivo parece ser una imagen de tamaño reducido ''(thumbnail)''. [[$1|thumb]]\nPor favor comprueba el archivo <strong>[[:$1]]</strong>.\nSi el archivo comprobado es la misma imagen a tamaño original no es necesario subir un thumbnail más.",
        "file-thumbnail-no": "El nombre del archivo comienza con <strong>$1</strong>.\nParece ser una imagen de tamaño reducido ''(thumbnail)''.\nSi tiene esta imagen a toda resolución súbala, si no, por favor cambie el nombre del archivo.",
        "fileexists-forbidden": "Ya existe un archivo con este nombre, y no puede ser grabado encima de otro. Si quiere subir su archivo de todos modos, por favor vuelva atrás y utilice otro nombre. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Borrado y restauración de archivos temporalmente deshabilitados durante el mantenimiento.",
        "filedelete-maintenance-title": "No se puede eliminar el archivo",
        "mimesearch": "Búsqueda por MIME",
-       "mimesearch-summary": "Esta página permite el filtrado de ficheros por su tipo MIME.\nEntrada: contenttype/subtype, p. ej. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Esta página permite el filtrado de ficheros por su tipo MIME.\nEntrada: contenttype/subtype o contenttype/*, p. ej. <code>image/jpeg</code>.",
        "mimetype": "Tipo MIME:",
        "download": "descargar",
        "unwatchedpages": "Páginas no vigiladas",
        "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 */",
-       "monobook.css": "/* El CSS colocado en esta página afectará a los usuarios que usen la apariencia \"MonoBook\" */",
-       "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-autoconfirmed.css": "/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios del grupo Usuarios autoconfirmados */",
        "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 */",
-       "monobook.js": "/* El código JavaScript que se ponga aquí será cargado por los usuarios de la apariencia MonoBook */",
-       "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 */",
        "group-sysop.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios del grupo Administradores */",
        "pageinfo-category-pages": "Número de páginas",
        "pageinfo-category-subcats": "Número de subcategorías",
        "pageinfo-category-files": "Número de archivos",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Marcar como revisado",
        "markaspatrolledtext": "Marcar este artículo como revisado",
        "markedaspatrolled": "Marcado como revisado",
        "duplicate-defaultsort": "'''Atención:''' La clave de ordenamiento predeterminada «$2» anula la clave de ordenamiento anterior «$1».",
        "version": "Versión",
        "version-extensions": "Extensiones instaladas",
+       "version-skins": "Apariencias",
        "version-specialpages": "Páginas especiales",
        "version-parserhooks": "Extensiones del analizador sintáctico",
        "version-variables": "Variables",
        "version-antispam": "Prevención de spam",
-       "version-skins": "Apariencias",
        "version-other": "Otro",
        "version-mediahandlers": "Manejadores multimedia",
        "version-hooks": "Extensiones",
        "version-hook-name": "Nombre de la extensión",
        "version-hook-subscribedby": "Suscrito por",
        "version-version": "($1)",
+       "version-no-ext-name": "[sin nombre]",
        "version-license": "Licencia de MediaWiki",
        "version-ext-license": "Licencia",
        "version-ext-colheader-name": "Extensión",
index 39d99d9..05c0e32 100644 (file)
        "qbmyoptions": "Minu leheküljed",
        "faq": "KKK",
        "faqpage": "Project:KKK",
-       "vector-action-addsection": "Lisa teema",
-       "vector-action-delete": "Kustuta",
-       "vector-action-move": "Teisalda",
-       "vector-action-protect": "Kaitse",
-       "vector-action-undelete": "Taasta",
-       "vector-action-unprotect": "Muuda kaitset",
-       "vector-view-create": "Loo",
-       "vector-view-edit": "Muuda",
-       "vector-view-history": "Näita ajalugu",
-       "vector-view-view": "Vaata",
-       "vector-view-viewsource": "Vaata lähteteksti",
        "actions": "Toimingud",
-       "vector-more-actions": "Veel",
        "namespaces": "Nimeruumid",
        "variants": "Variandid",
        "navigation-heading": "Navigeerimismenüü",
        "noname": "Sa ei sisestanud kasutajanime lubataval kujul.",
        "loginsuccesstitle": "Sisselogimine õnnestus",
        "loginsuccess": "Oled sisse loginud. Sinu kasutajanimi on \"$1\".",
-       "nosuchuser": "Kasutajat \"$1\" ei ole olemas.\nKasutajanimed on tõstutundlikud.\nKontrollige kirjapilti või [[Special:UserLogin/signup|looge uus kasutajakonto]].",
-       "nosuchusershort": "Kasutajat nimega \"$1\" ei ole olemas. Kontrollige kirjapilti.",
+       "nosuchuser": "Kasutajat \"$1\" pole.\nKasutajanimed on tõstutundlikud.\nKontrolli kirjapilti või [[Special:UserLogin/signup|loo uus konto]].",
+       "nosuchusershort": "Kasutajat nimega \"$1\" pole.\nKontrolli kirjapilti.",
        "nouserspecified": "Kasutajanimi puudub.",
        "login-userblocked": "See kasutaja on blokeeritud. Sisselogimine pole lubatud.",
        "wrongpassword": "Vale parool. Proovi uuesti.",
        "templatesusedpreview": "Eelvaates {{PLURAL:$1|kasutatav mall|kasutatavad mallid}}:",
        "templatesusedsection": "Selles alaosas {{PLURAL:$1|kasutatav mall|kasutatavad mallid}}:",
        "template-protected": "(kaitstud)",
-       "template-semiprotected": "(osaliselt kaitstud)",
+       "template-semiprotected": "(poolkaitstud)",
        "hiddencategories": "See lehekülg kuulub {{PLURAL:$1|1 peidetud kategooriasse|$1 peidetud kategooriasse}}:",
        "nocreatetext": "Lehekülje loomise õigus on {{GRAMMAR:inessive|{{SITENAME}}}} piiratud.\nVõid pöörduda tagasi ja toimetada olemasolevat lehekülge või [[Special:UserLogin|sisse logida või uue konto luua]].",
        "nocreate-loggedin": "Sul ei ole luba luua uusi lehekülgi.",
        "mergehistory-empty": "Ühtegi redaktsiooni ei saa liita.",
        "mergehistory-success": "Lehekülje [[:$1]] {{PLURAL:$3|üks redaktsioon|$3 redaktsiooni}} liideti lehega [[:$2]].",
        "mergehistory-fail": "Muudatuste ajaloo liitmine ebaõnnestus. Palun kontrolli lehekülje ja aja parameetreid.",
+       "mergehistory-fail-toobig": "Ajalugusid ei õnnestu liita, sest teisaldada tuleks rohkem kui {{PLURAL:$1|üks redaktsioon|$1 redaktsiooni}}, mis on piirmäär.",
        "mergehistory-no-source": "Alliklehekülge $1 pole olemas.",
        "mergehistory-no-destination": "Sihtlehekülge $1 pole olemas.",
        "mergehistory-invalid-source": "Allikleheküljel peab olema lubatav pealkiri.",
        "searchall": "kõik",
        "showingresults": "Allpool näidatakse '''{{PLURAL:$1|ühte|$1}}''' tulemust alates '''$2'''. tulemusest.",
        "showingresultsinrange": "Allpool näidatakse {{PLURAL:$1|<strong>üht</strong>|<strong>$1</strong>}} tulemust vahemikus <strong>$2</strong>–<strong>$3</strong>.",
-       "showingresultsnum": "Allpool näitame {{PLURAL:$3|'''ühte''' tulemit|'''$3''' tulemit}} alates tulemist #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|'''$1''' '''$3'''-st vastest|Vasted '''$1–$2''' '''$3'''-st}} päringule '''$4'''",
        "search-nonefound": "Päringule ei leitud vasteid.",
        "powersearch-legend": "Täpsem otsing",
        "right-sendemail": "Saata teistele kasutajatele e-kirju",
        "right-passwordreset": "Vaadata parooli lähtestamise e-kirju",
        "newuserlogpage": "Kasutaja loomise logi",
-       "newuserlogpagetext": "See logi sisaldab infot äsja loodud uute kasutajate kohta.",
+       "newuserlogpagetext": "Siin on logitud kasutajate registreerimine.",
        "rightslog": "Kasutajaõiguste logi",
        "rightslogtext": "See on logi kasutajate õiguste muutuste kohta.",
        "action-read": "seda lehekülge lugeda",
        "listduplicatedfiles-summary": "Siin on loetletud failid, mille viimane versioon on mõne teise faili viimase versiooni duplikaat. Arvesse võetakse ainult kohalikke faile.",
        "listduplicatedfiles-entry": "Failil [[:File:$1|$1]] on [[$3|{{PLURAL:$2|üks duplikaat|$2 duplikaati}}]].",
        "unusedtemplates": "Kasutamata mallid",
-       "unusedtemplatestext": "See lehekülg loetleb kõik leheküljed nimeruumis {{ns:template}}, mida teistel lehekülgedel ei kasutata. Enne kustutamist palun kontrollige, kas siia pole muid linke.",
+       "unusedtemplatestext": "See lehekülg loetleb kõik leheküljed nimeruumis {{ns:template}}, mida teistel lehekülgedel ei kasutata.\nEnne kustutamist kontrolli ka muid malli juurde viitavaid linke.",
        "unusedtemplateswlh": "teised lingid",
        "randompage": "Juhuslik artikkel",
        "randompage-nopages": "{{PLURAL:$2|Järgmises nimeruumis|Järgmistes nimeruumides}} ei ole ühtegi lehekülge: $1.",
        "pageinfo-category-pages": "Lehekülgede arv",
        "pageinfo-category-subcats": "Alamkategooriate arv",
        "pageinfo-category-files": "Failide arv",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Märgi kontrollituks",
        "markaspatrolledtext": "Märgi see leht kontrollituks",
        "markedaspatrolled": "Kontrollituks märgitud",
        "duplicate-defaultsort": "'''Hoiatus:''' Järjestamisvõti \"$2\" tühistab eespool oleva järjestamisvõtme \"$1\".",
        "version": "Versioon",
        "version-extensions": "Paigaldatud lisad",
+       "version-skins": "Paigaldatud kujundused",
        "version-specialpages": "Erileheküljed",
        "version-parserhooks": "Parserihaagid",
        "version-variables": "Muutujad",
        "version-antispam": "Rämpsposti tõkestus",
-       "version-skins": "Kujundused",
        "version-other": "Muu",
        "version-mediahandlers": "Meediatöötlejad",
        "version-hooks": "Haagid",
        "version-hook-name": "Haagi nimi",
        "version-hook-subscribedby": "Tellijad",
        "version-version": "($1)",
+       "version-no-ext-name": "[nimi puudub]",
        "version-license": "MediaWiki litsents",
        "version-ext-license": "Litsents",
        "version-ext-colheader-name": "Lisa",
+       "version-skin-colheader-name": "Kujundus",
        "version-ext-colheader-version": "Versioon",
        "version-ext-colheader-license": "Litsents",
        "version-ext-colheader-description": "Kirjeldus",
        "expand_templates_remove_nowiki": "Ära näita tulemuses <nowiki>-silte",
        "expand_templates_generate_xml": "Näita XML-liigenduspuud",
        "expand_templates_generate_rawhtml": "Näita toor-HTMLi",
-       "expand_templates_preview": "Eelvaade"
+       "expand_templates_preview": "Eelvaade",
+       "pagelanguage": "Lehekülje keele valik",
+       "pagelang-name": "Lehekülg",
+       "pagelang-language": "Keel",
+       "pagelang-use-default": "Kasuta vaikekeelt",
+       "pagelang-select-lang": "Vali keel",
+       "right-pagelang": "Muuta lehekülje keelt",
+       "action-pagelang": "muuta lehekülje keelt",
+       "log-name-pagelang": "Keele muutmise logi",
+       "log-description-pagelang": "Siia on logitud lehekülgede keele muutmised.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutis}} lehekülje \"$3\" keelt: $4 → $5."
 }
index bc51293..4f10d30 100644 (file)
        "november-date": "Azaroaren $1",
        "december-date": "Abenduaren $1",
        "pagecategories": "{{PLURAL:$1|Kategoria|Kategoriak}}",
-       "category_header": "\"$1\" kategoriako artikuluak",
+       "category_header": "«$1» kategoriako artikuluak",
        "subcategories": "Azpikategoriak",
        "category-media-header": "Media \"$1\" kategorian",
        "category-empty": "''Kategoria honek ez dauka artikulurik uneotan.''",
        "qbmyoptions": "Nire orrialdeak",
        "faq": "Maiz egindako galderak",
        "faqpage": "Project:Maiz egindako galderak",
-       "vector-action-addsection": "Gehitu atala",
-       "vector-action-delete": "Ezabatu",
-       "vector-action-move": "Mugitu",
-       "vector-action-protect": "Babestu",
-       "vector-action-undelete": "Berreskuratu",
-       "vector-action-unprotect": "Babesa aldatu",
-       "vector-view-create": "Sortu",
-       "vector-view-edit": "Aldatu",
-       "vector-view-history": "Ikusi historia",
-       "vector-view-view": "Irakurri",
-       "vector-view-viewsource": "Kodea ikusia",
        "actions": "Ekintzak",
        "namespaces": "Izen-tarteak",
        "variants": "Aldaerak",
        "searchrelated": "erlazionatua",
        "searchall": "guztia",
        "showingresults": "Jarraian {{PLURAL:$1|emaitza '''1''' ikus daiteke|'''$1''' emaitza ikus daitezke}}, #'''$2'''.etik hasita.",
-       "showingresultsnum": "Hasieran #'''$2''' duten {{PLURAL:$3|emaitza '''1'''|'''$3''' emaitza}} erakusten dira jarraian.",
        "showingresultsheader": "{{PLURAL:$5|'''$1'''(e)tik '''$3''' emaitza|'''$1 - $2'''(e)tik '''$3''' emaitza}} '''$4'''(r)entzat",
        "search-nonefound": "Ez dago eskaerarekin bat egiten duten emaitzarik.",
        "powersearch-legend": "Bilaketa aurreratua",
        "tooltip-preferences-save": "Hobespenak gorde",
        "tooltip-summary": "Laburpen labur bat sar ezazu",
        "common.css": "/** Hemen idatzitako CSS kodeak itxura guztietan izango du eragina */",
-       "monobook.css": "/* Hemen idatzitako CSS kodeak Monobook itxuran bakarrik izango du eragina */",
        "common.js": "/* Hemen idatzitako JavaScript kode oro erabiltzaile guztiek edozein orrialde irekitzerakoan kargatuko da. */",
        "anonymous": "{{SITENAME}}(e)ko lankide {{PLURAL:$1|anonimoa|anonimoak}}",
        "siteuser": "{{SITENAME}}(e)ko $1 erabiltzailea",
        "duplicate-defaultsort": "Adi: Berezko \"$2\" antolatzeak aurreko berezko \"$1\" antolatzea gainditzen du.",
        "version": "Bertsioa",
        "version-extensions": "Instalatutako luzapenak",
+       "version-skins": "Itxurak",
        "version-specialpages": "Aparteko orrialdeak",
        "version-parserhooks": "Parser estentsioak",
        "version-variables": "Aldagaiak",
        "version-antispam": "Spam ekiditea",
-       "version-skins": "Itxurak",
        "version-other": "Bestelakoak",
        "version-mediahandlers": "Media gordailuak",
        "version-hooks": "Estentsioak",
index 46d5017..224adac 100644 (file)
        "qbmyoptions": "Las mis páhinas",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Añiil tema",
-       "vector-action-delete": "Esborral",
-       "vector-action-move": "Mual",
-       "vector-action-protect": "Protegel",
-       "vector-action-undelete": "Esborral",
-       "vector-action-unprotect": "Esprotegel",
-       "vector-view-create": "Crial",
-       "vector-view-edit": "Eital",
-       "vector-view-history": "Guipal estorial",
-       "vector-view-view": "Leyel",
-       "vector-view-viewsource": "Guipal cóigu",
        "actions": "Acionis",
        "namespaces": "Espáciu nombris",
        "variants": "Variantis",
        "searchprofile-everything": "Tó",
        "searchprofile-advanced": "Avançau",
        "searchprofile-articles-tooltip": "Landeal en $1",
-       "searchprofile-project-tooltip": "Landeal en $1",
        "searchprofile-images-tooltip": "Landeal archivus",
        "searchprofile-everything-tooltip": "Landeal tol conteniu (encruyendu carabas)",
        "search-result-size": "$1 ({{PLURAL:$2|1 letra|$2 letras}})",
        "searchrelated": "relacionau",
        "searchall": "tó",
        "showingresults": "Embahu se {{PLURAL:$1|muestra '''1''' resurtau qu'esmiença|muestran hata '''$1''' resurtaus qu'esmiençan}} pol #'''$2'''.",
-       "showingresultsnum": "Embahu se {{PLURAL:$3|muestra '''1''' resurtau qu'esmiença|muestran'''$3''' resurtaus qu'esmiençan}} pol #'''$2'''.",
        "powersearch-legend": "Landeu avançau",
        "powersearch-ns": "Landeal en espaciu e nombris:",
        "search-external": "Landeu estelnu",
        "allowemail": "Premitil que m´envíin emails otrus usuárius",
        "prefs-searchoptions": "Ocionis de landeu",
        "prefs-namespaces": "Espáciu nombris",
-       "defaultns": "Landeal nestus \"espacius de nombris\" pol defeutu:",
        "default": "defeutu",
        "prefs-files": "Archivus",
        "prefs-custom-css": "CSS pressonalizau",
        "prefs-custom-js": "JS pressonalizau",
        "youremail": "Email:",
        "username": "Nombri d'usuáriu:",
-       "uid": "ID d'usuáriu:",
        "prefs-memberingroups": "Miembru de {{PLURAL:$1|grupu|groupus}}:",
        "yourrealname": "Nombri verdaeru:",
        "yourlanguage": "Palra:",
        "logempty": "Nu desistin elementus con esas condicionis nel rustrihu.",
        "log-title-wildcard": "Landeal entítulus qu´esmiencin con esti testu",
        "allpages": "Tolas páhinas",
-       "alphaindexline": "$1 a $2",
        "nextpage": "Siguienti páhina ($1)",
        "prevpage": "Páhina anteriol ($1)",
        "allpagesfrom": "Muestral páhinas qu'esmiencin pol:",
        "tooltip-upload": "Prencipial a empuntal",
        "tooltip-rollback": "\"Reveltil\" esborra las eicionis hechas a esta página pol úrtimu usuáriu con un click",
        "tooltip-undo": "\"Esjadel\" revierti ésta eición i abri el mó eición en mó previsoreal.\nÉstu premiti añiil una radón al estorial.",
-       "monobook.js": "/* Antigu; gasta [[MediaWiki:common.js]] */",
        "anonymous": "{{PLURAL:$1|Ussuáriu anónimu|Ussuárius anónimus}} en {{SITENAME}}",
        "siteuser": "{{SITENAME}} usuáriu $1",
        "lastmodifiedatby": "Esta páhina se chambó pol úrtima vezi a las $2, el dia $1 pol $3.",
index d8ecf5e..2ae3059 100644 (file)
        "qbmyoptions": "صفحه‌های من",
        "faq": "پرسش‌های متداول",
        "faqpage": "Project:پرسش‌های متداول",
-       "vector-action-addsection": "افزودن بخش",
-       "vector-action-delete": "حذف",
-       "vector-action-move": "انتقال",
-       "vector-action-protect": "محافظت",
-       "vector-action-undelete": "احیا",
-       "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": "منوی ناوبری",
        "mergehistory-empty": "هیچ‌یک از نسخه‌ها قابل ادغام نیستند.",
        "mergehistory-success": "$3 نسخه از [[:$1]]  با موفقیت در [[:$2]] ادغام {{PLURAL:$3|شد|شدند}}.",
        "mergehistory-fail": "ادغام تاریخچه ممکن نیست، لطفاً گزینه‌های صفحه و زمان را بازبینی کنید.",
+       "mergehistory-fail-toobig": "نمی‌توان ادغام تاریخچه را انجام داد که بیشتر از محدودیت $1 {{PLURAL:$1|نسخه}} انتقال داده خواهد شد.",
        "mergehistory-no-source": "صفحهٔ مبدأ $1 وجود ندارد.",
        "mergehistory-no-destination": "صفحهٔ مقصد $1 وجود ندارد.",
        "mergehistory-invalid-source": "صفحهٔ مبدأ باید عنوانی معتبر داشته باشد.",
        "searchall": "همه",
        "showingresults": "نمایش حداکثر {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} در پایین، آغاز از شماره '''$2'''.",
        "showingresultsinrange": "نمایش در پائین تا {{PLURAL:$1|<strong>1</strong> نتیجه|<strong>$1</strong> نتیجه}} in range #<strong>$2</strong> تا #<strong>$3</strong>.",
-       "showingresultsnum": "نمایش حداکثر '''$3''' {{PLURAL:$3|نتیجه|نتیجه}} در پایین، آغاز از شماره '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|نتیجهٔ '''$1''' از '''$3'''|نتایج '''$1 تا $2''' از '''$3'''}} برای '''$4'''",
        "search-nonefound": "نتیجه‌ای منطبق با درخواست پیدا نشد.",
        "powersearch-legend": "جستجوی پیشرفته",
        "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-extension": "پرونده‌ای با نام مشابه وجود دارد: [[$2|thumb]]\n* نام پرونده‌ای که بارگذاری می‌کردید: <strong>[[:$1]]</strong>\n* نام پرونده‌ای که از قبل موجود بود: <strong>[[:$2]]</strong>\nمی‌خواهید بیش از یک نام متمایز استفاده کنید؟",
        "fileexists-thumbnail-yes": "به نظر می‌رسد که این پرونده، یک تصویر کوچک شده (''بندانگشتی'' یا ''thumbnail'') باشد.\n[[$1|thumb]]\nلطفاً پروندهٔ <strong>[[:$1]]</strong> را بررسی کنید.\nاگر پرونده‌ای که بررسی کردید، همین تصویر در اندازهٔ اصلی‌اش است، نیازی به بارگذاری یک نسخهٔ بندانگشتی اضافه نیست.",
        "file-thumbnail-no": "نام پرونده با <strong>$1</strong> آغاز می‌شود.\nبه نظر می‌رسد که این پرونده، یک تصویر ''بندانگشتی'' ''(thumbnail)'' از تصویر بزرگتر اصلی باشد.\nاگر تصویر با اندازهٔ اصلی را دارید، آن را بارگذاری کنید؛ در غیر این صورت، نام پرونده را تغییر دهید.",
        "fileexists-forbidden": "در حال حاضر، پرونده‌ای به همین نام وجود دارد، و قابل رونویسی نیست.\nاگر هم‌چنان می‌خواهید که پروندهٔ خود را بارگذاری کنید، لطفاً برگردید و نام دیگری استفاده کنید.\n[[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "حذف و احیای پرونده‌ها در مدت نگهداری به طور موقت غیرفعال است.",
        "filedelete-maintenance-title": "نمی‌تواند پرونده را حذف کند",
        "mimesearch": "جستجوی بر اساس MIME",
-       "mimesearch-summary": "با کمک این صفحه شما می‌توانید پرونده‌هایی که یک نوع MIME به خصوص دارند را پیدا کنید.\nورودی: به صورت contenttype/subtype ، نظیر <code>image/jpeg</code>.",
+       "mimesearch-summary": "با کمک این صفحه شما می‌توانید پرونده‌هایی که یک نوع MIME به خصوص دارند را پیدا کنید.\nورودی: به صورت contenttype/subtype یا contenttype/*&lrm;، نظیر <code>image/jpeg</code>.",
        "mimetype": "نوع MIME:",
        "download": "دریافت",
        "unwatchedpages": "صفحه‌های پی‌گیری‌نشده",
        "wantedtemplates": "الگوهای مورد نیاز",
        "mostlinked": "صفحه‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است",
        "mostlinkedcategories": "رده‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است",
-       "mostlinkedtemplates": "اÙ\84Ú¯Ù\88Ù\87اÛ\8cÛ\8c Ú©Ù\87 Ø¨Û\8cشتر Ø§Ø² Ù\87Ù\85Ù\87 Ø¨Ù\87 Ø¢Ù\86â\80\8cÙ\87ا Ù¾Û\8cÙ\88Ù\86د Ø¯Ø§Ø¯Ù\87 Ø´Ø¯Ù\87â\80\8cاست",
+       "mostlinkedtemplates": "ببشترÛ\8cÙ\86 ØµÙ\81Ø­Ù\87â\80\8cÙ\87اÛ\8c ØªØ±Ø§Ú¯Ù\86جاÛ\8cØ´â\80\8cشدÙ\87",
        "mostcategories": "صفحه‌های دارای بیشترین رده",
        "mostimages": "پرونده‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است",
        "mostinterwikis": "صفحه‌های دارای بیشترین میان‌ویکی",
        "tooltip-preferences-save": "ذخیره کردن ترجیحات",
        "tooltip-summary": "خلاصه‌ای وارد کنید",
        "interlanguage-link-title": "$1–$2",
+       "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/* دستورات این بخش همهٔ کاربران را تحت تاثیر قرار می‌دهند. */",
-       "monobook.css": "/* دستورات این بخش کاربرانی را که از پوستهٔ مونوبوک استفاده کنند تحت تاثیر قرار می‌دهند. */",
        "anonymous": "{{PLURAL:$1|کاربر|کاربران}} گمنام {{SITENAME}}",
        "siteuser": "$1، کاربر {{SITENAME}}",
        "anonuser": "$1 کاربر ناشناس {{SITENAME}}",
        "pageinfo-category-pages": "تعداد صفحه‌ها",
        "pageinfo-category-subcats": "تعداد زیررده‌ها",
        "pageinfo-category-files": "تعداد پرونده‌ها",
-       "skinname-monobook": "مونوبوک",
-       "skinname-vector": "برداری",
        "markaspatrolleddiff": "برچسب گشت بزن",
        "markaspatrolledtext": "به این صفحه برچسب گشت بزن",
        "markedaspatrolled": "برچسب گشت زده شد",
        "duplicate-defaultsort": "هشدار: ترتیب پیش‌فرض «$2» ترتیب پیش‌فرض قبلی «$1» را باطل می‌کند.",
        "version": "نسخه",
        "version-extensions": "افزونه‌های نصب‌شده",
+       "version-skins": "پوسته‌ها",
        "version-specialpages": "صفحه‌های ویژه",
        "version-parserhooks": "قلاب‌های تجزیه‌گر",
        "version-variables": "متغیرها",
        "version-antispam": "جلوگیری از هرزنامه",
-       "version-skins": "پوسته‌ها",
        "version-other": "غیره",
        "version-mediahandlers": "به‌دست‌گیرنده‌های رسانه‌ها",
        "version-hooks": "قلاب‌ها",
index e2fda2c..4a2b184 100644 (file)
        "qbmyoptions": "Omat sivut",
        "faq": "Usein kysytyt kysymykset",
        "faqpage": "Project:Usein kysytyt kysymykset",
-       "vector-action-addsection": "Lisää aihe",
-       "vector-action-delete": "Poista",
-       "vector-action-move": "Siirrä",
-       "vector-action-protect": "Suojaa",
-       "vector-action-undelete": "Palauta",
-       "vector-action-unprotect": "Muuta suojausta",
-       "vector-view-create": "Luo",
-       "vector-view-edit": "Muokkaa",
-       "vector-view-history": "Näytä historia",
-       "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",
        "mergehistory-empty": "Ei liitettäviä muutoksia.",
        "mergehistory-success": "{{PLURAL:$3|Yksi versio|$3 versiota}} sivusta [[:$1]] liitettiin sivuun [[:$2]].",
        "mergehistory-fail": "Muutoshistorian liittäminen epäonnistui. Tarkista määritellyt sivut ja versiot.",
+       "mergehistory-fail-toobig": "Sivuhistorian yhdistämistä ei voi tehdä, koska enemmän kuin sallittu määrä $1 {{PLURAL:$1|versio|versiota}} siirrettäisiin.",
        "mergehistory-no-source": "Lähdesivua $1 ei ole olemassa.",
        "mergehistory-no-destination": "Kohdesivua $1 ei ole olemassa.",
        "mergehistory-invalid-source": "Lähdesivulla pitää olla kelvollinen nimi.",
        "searchall": "kaikki",
        "showingresults": "Alla on vain {{PLURAL:$1|<strong>1</strong> hakutulos|<strong>$1</strong> hakutulosta}} alkaen tuloksesta nro <strong>$2</strong>.",
        "showingresultsinrange": "Alla näytetään {{PLURAL:$1|<strong>1</strong> tulos|<strong>$1</strong> tulosta}} väliltä <strong>$2</strong> – <strong>$3</strong>.",
-       "showingresultsnum": "Alla on {{PLURAL:$3|<strong>1</strong> hakutulos|<strong>$3</strong> hakutulosta}} alkaen tuloksesta nro <strong>$2</strong>.",
        "showingresultsheader": "{{PLURAL:$5|Tulokset '''$1'''–'''$3'''|Tulokset '''$1'''–'''$2''' kaikkiaan '''$3''' osuman joukosta}} haulle '''$4'''",
        "search-nonefound": "Hakusi ei tuottanut tulosta.",
        "powersearch-legend": "Laajennettu haku",
        "windows-nonascii-filename": "Tämä wiki ei tue tiedostonimiä, joissa on erikoismerkkejä.",
        "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-extension": "Tiedosto, jolla on samankaltainen nimi, on jo olemassa: [[$2|thumb]]\n* Tallennettavana olevan tiedoston nimi: <strong>[[:$1]]</strong>\n* Olemassa olevan tiedoston nimi: <strong>[[:$2]]</strong>\nSinun kannattaa käyttää mieluummin tarkempaa nimeä.",
        "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.",
        "file-thumbnail-no": "Tiedostonimi alkaa merkkijonolla <strong>$1</strong>. Tiedosto näyttäisi olevan pienennetty kuva.\nJos sinulla on tämän kuvan alkuperäinen versio, tallenna se. Muussa tapauksessa nimeä tiedosto uudelleen.",
        "fileexists-forbidden": "Samanniminen tiedosto on jo olemassa, eikä sen tilalle voi tallentaa uutta. \nJos kuitenkin haluat tallentaa tiedostosi, palaa takaisin ja käytä jotain toista nimeä. \n[[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Tiedostojen poisto ja palautus on väliaikaisesti poistettu käytöstä huoltotoimien vuoksi.",
        "filedelete-maintenance-title": "Tiedostoa ei voi poistaa",
        "mimesearch": "MIME-haku",
-       "mimesearch-summary": "Tällä sivulla voit etsiä tiedostoja niiden MIME-tyypin perusteella.\nSyöte: sisältötyyppi/alatyyppi, esimerkiksi <code>image/jpeg</code>.",
+       "mimesearch-summary": "Tämä sivu antaa mahdollisuuden hakea tiedostoja niiden MIME-tyypin perusteella.\nSyöte: sisältötyyppi/alatyyppi tai sisältötyyppi/*, esim. <code>image/jpeg</code>.",
        "mimetype": "MIME-tyyppi:",
        "download": "lataa",
        "unwatchedpages": "Tarkkailemattomat sivut",
        "tooltip-preferences-save": "Tallenna asetukset",
        "tooltip-summary": "Kirjoita lyhyt yhteenveto",
        "interlanguage-link-title": "$1 — $2",
+       "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/* Tämä sivu sisältää koko sivustoa muuttavia tyylejä. */",
-       "monobook.css": "/* Tämä sivu sisältää Monobook-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-autoconfirmed.css": "/* Tämä sivun tyylit muuttavat automaattisesti hyväksyttyjen käyttäjien tyylejä */",
        "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 */",
-       "monobook.js": "/* Tämän sivun JavaScript-koodi liitetään Monobook-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 */",
        "group-sysop.js": "/* Tämän sivun JavaScript-koodi liitetään vain ylläpitäjille */",
        "pageinfo-category-pages": "Sivujen määrä",
        "pageinfo-category-subcats": "Alaluokkien määrä",
        "pageinfo-category-files": "Tiedostojen määrä",
-       "skinname-monobook": "Monobook",
        "markaspatrolleddiff": "Merkitse tarkastetuksi",
        "markaspatrolledtext": "Merkitse muutos tarkastetuksi",
        "markedaspatrolled": "Muutos on tarkastettu",
        "duplicate-defaultsort": "'''Varoitus:''' Oletuslajitteluavain ”$2” korvaa aiemman oletuslajitteluavaimen ”$1”.",
        "version": "Versio",
        "version-extensions": "Asennetut laajennukset",
+       "version-skins": "Asennetut ulkoasut",
        "version-specialpages": "Toimintosivut",
        "version-parserhooks": "Jäsenninkytkökset",
        "version-variables": "Muuttujat",
        "version-antispam": "Roskalinkkien estäminen",
-       "version-skins": "Ulkoasut",
        "version-other": "Muut",
        "version-mediahandlers": "Median käsittelijät",
        "version-hooks": "Kytköspisteet",
        "version-hook-name": "Kytköspisteen nimi",
        "version-hook-subscribedby": "Kytkökset",
        "version-version": "($1)",
+       "version-no-ext-name": "[ei nimeä]",
        "version-license": "MediaWikin lisenssi",
        "version-ext-license": "Lisenssi",
        "version-ext-colheader-name": "Laajennusosa",
+       "version-skin-colheader-name": "Ulkoasu",
        "version-ext-colheader-version": "Versio",
        "version-ext-colheader-license": "Lisenssi",
        "version-ext-colheader-description": "Kuvaus",
index 06ff6b6..4d0716c 100644 (file)
        "qbmyoptions": "Mínar síður",
        "faq": "OSS",
        "faqpage": "Project:OSS",
-       "vector-action-addsection": "Nýtt evni",
-       "vector-action-delete": "Strika",
-       "vector-action-move": "Flyt",
-       "vector-action-protect": "Friða",
-       "vector-action-undelete": "Endurstovna",
-       "vector-action-unprotect": "Broyt verju",
-       "vector-view-create": "Stovna",
-       "vector-view-edit": "Rætta",
-       "vector-view-history": "Vís søgu",
-       "vector-view-view": "Les",
-       "vector-view-viewsource": "Vís keldu",
        "actions": "Gerningar",
-       "vector-more-actions": "Meira",
        "namespaces": "Navnarúm",
        "variants": "Ymisk sløg",
        "navigation-heading": "Navigatiónsskrá",
        "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>.",
-       "showingresultsnum": "Niðanfyri standa {{PLURAL:$3|'''1''' úrslit, sum byrjar|'''$3''' úrslit, sum byrja}} við #<b>$2</b>.",
        "showingresultsheader": "{{PLURAL:$5|Úrslit '''$1''' av '''$3'''|Úrslit '''$1 - $2''' av '''$3'''}} fyri '''$4'''",
        "search-nonefound": "Leitingin gav onki úrslit.",
        "powersearch-legend": "Víðkað leitan",
        "watchlisttools-raw": "Rætta rátt eftirlit",
        "duplicate-defaultsort": "'''Ávaring:''' Standard sorteringslykilin \"$2\" yvirtekur fyrrverandi standard sorteringslykilin \"$1\".",
        "version": "Útgáva",
-       "version-specialpages": "Serstakar síður",
        "version-skins": "Útsjóndir",
+       "version-specialpages": "Serstakar síður",
        "version-other": "Annað",
        "version-hooks": "Krókur",
        "version-hook-name": "Krókurnavn",
index 6164f0d..2508e23 100644 (file)
        "qbmyoptions": "Mes pages",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Ajouter un sujet",
-       "vector-action-delete": "Supprimer",
-       "vector-action-move": "Renommer",
-       "vector-action-protect": "Protéger",
-       "vector-action-undelete": "Rétablir",
-       "vector-action-unprotect": "Changer la protection",
-       "vector-view-create": "Créer",
-       "vector-view-edit": "Modifier",
-       "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",
        "preview": "Prévisualisation",
        "showpreview": "Prévisualiser",
        "showdiff": "Voir les modifications",
-       "anoneditwarning": "'''Attention :''' vous n’êtes pas identifié(e). Votre adresse IP sera enregistrée dans l’historique de cette page.",
+       "anoneditwarning": "<strong>Attention :</strong> Vous n’êtes pas identifié(e). Votre adresse IP sera enregistrée dans l’historique de cette page.",
        "anonpreviewwarning": "''Vous n’êtes pas identifié(e). Sauvegarder enregistrera votre adresse IP dans l’historique des modifications de la page.''",
        "missingsummary": "'''Rappel :''' vous n'avez pas encore fourni le résumé de votre modification.\nSi vous cliquez de nouveau sur le bouton « {{int:savearticle}} », la publication sera faite sans nouvel avertissement.",
        "missingcommenttext": "Veuillez entrer un commentaire ci-dessous.",
        "mergehistory-empty": "Aucune version ne peut être fusionnée.",
        "mergehistory-success": "$3 version{{PLURAL:$3||s}} de [[:$1]] fusionnée{{PLURAL:$3||s}} dans [[:$2]].",
        "mergehistory-fail": "Impossible de procéder à la fusion des historiques. Resélectionner la page ainsi que les paramètres de date.",
+       "mergehistory-fail-toobig": "Impossible d’effectuer la fusion de l’historique car un nombre de {{PLURAL:$1|révisions}} supérieur à la limite de $1 devrait être déplacé.",
        "mergehistory-no-source": "La page d'origine $1 n'existe pas.",
        "mergehistory-no-destination": "La page de destination $1 n'existe pas.",
        "mergehistory-invalid-source": "La page d'origine doit avoir un titre valide.",
        "searchall": "tout",
        "showingresults": "Affichage de <b>$1</b> résultat{{PLURAL:$1||s}} à partir du n°<b>$2</b>.",
        "showingresultsinrange": "Afficher ci-dessous jusqu’à {{PLURAL:$1|<strong>1</strong> résultat|<strong>$1</strong> résultats}} dans la série #<strong>$2</strong> à #<strong>$3</strong>.",
-       "showingresultsnum": "Affichage de <b>$3</b> résultat{{PLURAL:$3||s}} à partir du n°<b>$2</b>.",
        "showingresultsheader": "{{PLURAL:$5|Résultat '''$1'''|Résultats '''$1–$2'''}} de '''$3''' pour '''$4'''",
        "search-nonefound": "Il n'y a aucun résultat correspondant à la requête.",
        "powersearch-legend": "Recherche avancée",
        "tooltip-preferences-save": "Sauvegarder les préférences",
        "tooltip-summary": "Entrez un bref résumé",
        "interlanguage-link-title": "$1 — $2",
+       "interlanguage-link-title-nonlang": "$1 — $2",
        "common.css": "/* Le CSS placé ici sera appliqué à tous les habillages. */",
-       "monobook.css": "/* Le CSS placé ici affectera les utilisateurs de l’habillage Monobook. */",
-       "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-autoconfirmed.css": "/* Le CSS placé ici affectera les utilisateurs auto-confirmés seulement. */",
        "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. */",
-       "monobook.js": "/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage MonoBook 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. */",
        "group-bot.js": "/* Le JavaScript inclus ici n’affectera que les robots */",
        "pageinfo-category-pages": "Nombre de pages",
        "pageinfo-category-subcats": "Nombre de sous-catégories",
        "pageinfo-category-files": "Nombre de fichiers",
-       "skinname-monobook": "Monobook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Marquer comme relue",
        "markaspatrolledtext": "Marquer cette page comme relue",
        "markedaspatrolled": "Marquée comme relue",
        "duplicate-defaultsort": "Attention : la clé de tri par défaut « $2 » écrase la précédente clé « $1 ».",
        "version": "Version",
        "version-extensions": "Extensions installées",
+       "version-skins": "Habillages installés",
        "version-specialpages": "Pages spéciales",
        "version-parserhooks": "Greffons de l'analyseur syntaxique",
        "version-variables": "Variables",
        "version-antispam": "Prévention du pollupostage",
-       "version-skins": "Habillages",
        "version-other": "Divers",
        "version-mediahandlers": "Manipulateurs de médias",
        "version-hooks": "Greffons",
        "version-hook-name": "Nom du greffon",
        "version-hook-subscribedby": "Abonnés :",
        "version-version": "(version $1)",
+       "version-no-ext-name": "[pas de nom]",
        "version-license": "Licence MediaWiki",
        "version-ext-license": "Licence",
        "version-ext-colheader-name": "Extension",
+       "version-skin-colheader-name": "Habillage",
        "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "Licence",
        "version-ext-colheader-description": "Description",
index e5203bc..02f26b9 100644 (file)
        "qbmyoptions": "Mes pâges",
        "faq": "Quèstions sovent posâyes",
        "faqpage": "Project:Quèstions sovent posâyes",
-       "vector-action-addsection": "Apondre na chousa",
-       "vector-action-delete": "Suprimar",
-       "vector-action-move": "Dèplaciér",
-       "vector-action-protect": "Protègiér",
-       "vector-action-undelete": "Refâre",
-       "vector-action-unprotect": "Changiér la protèccion",
-       "vector-view-create": "Fâre",
-       "vector-view-edit": "Changiér",
-       "vector-view-history": "Vêre l’historico",
-       "vector-view-view": "Liére",
-       "vector-view-viewsource": "Vêre lo tèxto sôrsa",
        "actions": "Accions",
        "namespaces": "Èspâços de noms",
        "variants": "Variantes",
        "difference-missing-revision": "{{PLURAL:$2|Na vèrsion|$2 vèrsions}} de cela difèrence ($1) {{PLURAL:$2|est pas étâye trovâye|sont pas étâyes trovâyes}}.\n\nEn g·ènèral cen arreve en siuvent un lim d’una dif dèpassâye de vers na pâge qu’est étâye suprimâye.\nVos pouede trovar més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
        "searchresults": "Rèsultats de la rechèrche",
        "searchresults-title": "Rèsultats de la rechèrche por « $1 »",
-       "toomanymatches": "Un mouél de corrèspondances est étâ retornâ, se vos plét èprovâd na rechèrche difèrenta",
        "titlematches": "Corrèspondances dedens los titros de les pâges",
        "textmatches": "Corrèspondances dedens lo tèxto de les pâges",
        "notextmatches": "Niona corrèspondance dedens lo tèxto de les pâges",
        "searchrelated": "aparentâ",
        "searchall": "tot",
        "showingresults": "Vua de '''$1''' rèsultat{{PLURAL:$1||s}} dês lo numerô '''$2'''.",
-       "showingresultsnum": "Vua de '''$3''' rèsultat{{PLURAL:$3||s}} dês lo numerô '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Rèsultat '''$1'''|Rèsultats '''$1 - $2'''}} de '''$3''' por '''$4'''",
        "search-nonefound": "Y at gins de rèsultat que corrèspond a la rechèrche.",
        "powersearch-legend": "Rechèrche avanciêe",
        "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. */",
-       "monobook.css": "/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « MonoBook ». */",
-       "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-autoconfirmed.css": "/* Lo code CSS betâ ique afècterat ren que los usanciérs encartâs. */",
        "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. */",
-       "monobook.js": "/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « MonoBook ». */",
-       "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. */",
        "group-sysop.js": "/* Tot code JavaScript betâ ique serat chargiê ren que por los administrators. */",
        "pageinfo-contentpage": "Comptâ coment pâge de contegnu",
        "pageinfo-contentpage-yes": "Ouè",
        "pageinfo-protect-cascading-yes": "Ouè",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vèctor",
        "markaspatrolleddiff": "Marcar coment survelyê",
        "markaspatrolledtext": "Marcar ceta pâge coment survelyê",
        "markedaspatrolled": "Marcâye coment survelyêye",
index 8925cd3..ae9dfde 100644 (file)
        "qbmyoptions": "Min sidjen",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Nei kirew began",
-       "vector-action-delete": "Strik",
-       "vector-action-move": "Fersküüw",
-       "vector-action-protect": "Seekre",
-       "vector-action-undelete": "Weder iinstel",
-       "vector-action-unprotect": "Sidjenseekerhaid",
-       "vector-view-create": "Maage",
-       "vector-view-edit": "Bewerke",
-       "vector-view-history": "Ferluup uunluke",
-       "vector-view-view": "Lees",
-       "vector-view-viewsource": "Kweltekst uunluke",
        "actions": "Aktjuunen",
        "namespaces": "Nöömrümer",
        "variants": "Warianten",
        "searchall": "aaltumaal",
        "showingresults": "Heer {{PLURAL:$1|as '''1''' resultaat|san '''$1''' resultaaten}}, jo began mä numer '''$2.'''",
        "showingresultsinrange": "Oner {{PLURAL:$1|woort <strong>ian</strong> resultaat|wurd bit tu <strong>$1</strong> resultaaten}} tesken <strong>$2</strong> an <strong>$3</strong> uunwiset.",
-       "showingresultsnum": "Heer {{PLURAL:$3|as '''1''' resultaat|san '''$3''' resultaaten}}, jo began mä numer '''$2.'''",
        "showingresultsheader": "{{PLURAL:$5|resultaat '''$1''' faan '''$3'''|resultaaten '''$1-$2''' faan '''$3'''}}, för '''$4.'''",
        "search-nonefound": "För din uunfraag san nian resultaaten fünjen wurden.",
        "powersearch-legend": "Ütjwidjet schüken",
index 5ccdd4c..ff1c4e3 100644 (file)
        "qbmyoptions": "Mês pagjinis",
        "faq": "Domandis plui frecuentis",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Gnove sezion",
-       "vector-action-delete": "Elimine",
-       "vector-action-move": "Môf",
-       "vector-action-protect": "Protêç",
-       "vector-action-undelete": "Recupere",
-       "vector-action-unprotect": "Gambie la protezion",
-       "vector-view-create": "Cree",
-       "vector-view-edit": "Cambie",
-       "vector-view-history": "Cjale il storic",
-       "vector-view-view": "Lei",
-       "vector-view-viewsource": "Cjale risultive",
        "actions": "Azions",
        "namespaces": "Spazis dai nons",
        "variants": "Variants",
        "editundo": "anule",
        "searchresults": "Risultâts de ricercje",
        "searchresults-title": "Risultâts de ricercje di \"$1\"",
-       "toomanymatches": "Masse risultâts, prove par plasê une ricercje divierse.",
        "titlematches": "Corispondencis tai titui des pagjinis",
        "textmatches": "Corispondencis tal test des pagjinis",
        "notextmatches": "Nissune corispondence tal test des pagjinis",
        "searchmenu-exists": "'''E je une pagjine di non \"[[:$1]]\" su cheste wiki'''",
        "searchmenu-new": "'''Cree la pagjine \"[[:$1]]\" su cheste wiki!'''",
        "searchprofile-articles": "Pagjinis di contignûts",
-       "searchprofile-project": "Pagjinis di jutori e sul progjet",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Dut",
        "searchprofile-advanced": "Avançade",
        "searchprofile-articles-tooltip": "Cîr in $1",
-       "searchprofile-project-tooltip": "Cîr in $1",
        "searchprofile-images-tooltip": "Cîr files",
        "searchprofile-everything-tooltip": "Cîr ducj i gjenars di contignûts (ancje lis pagjinis di discussion)",
        "searchprofile-advanced-tooltip": "Cîr tai spazis dai nons personalizâts",
        "searchrelated": "leâts",
        "searchall": "ducj",
        "showingresults": "Ca sot {{PLURAL:$1|al è fin a '''1''' risultât|a son fin a '''$1''' risultâts}} scomençant dal numar '''$2'''.",
-       "showingresultsnum": "Ca sot {{PLURAL:$3|al è '''1''' risultât|a son '''$3''' risultâts}} scomençant dal numar '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Risultât '''$1''' su '''$3'''|Risultâts '''$1 - $2''' su '''$3'''}} par '''$4'''",
        "search-nonefound": "Nissun risultât par cheste ricercje.",
        "powersearch-legend": "Ricercje avanzade",
        "allowemail": "Ative la ricezion di messaçs email di bande di altris utents¹",
        "prefs-searchoptions": "Cîr",
        "prefs-namespaces": "Spazis dai nons",
-       "defaultns": "Se no, cîr in chescj spazis dai nons:",
        "default": "predeterminât",
        "prefs-files": "Files",
        "prefs-custom-css": "CSS personalizât",
        "prefs-emailconfirm-label": "Conferme de pueste eletroniche:",
        "youremail": "Email *",
        "username": "{{GENDER:$1|Non utent}}:",
-       "uid": "ID utent:",
        "prefs-memberingroups": "Al fâs part {{PLURAL:$1|dal grup|dai grups}}:",
        "prefs-registration": "Date di regjistrazion:",
        "yourrealname": "Non vêr *",
        "alllogstext": "Viodude combinade di ducj i regjistris disponibii di {{SITENAME}}.\nTu puedis strenzi la viodude sielzint un gjenar di regjistri, un non utent e/o la vôs che ti interesse (ducj e doi i cjamps a son sensibii al maiuscul/minuscul).",
        "logempty": "Nissun element corispondint tal regjistri.",
        "allpages": "Dutis lis pagjinis",
-       "alphaindexline": "di $1 a $2",
        "nextpage": "Prossime pagjine ($1)",
        "prevpage": "Pagjinis precedentis ($1)",
        "allpagesfrom": "Mostre pagjinis scomençant di:",
        "whatlinkshere-filters": "Filtris",
        "blockip": "Bloche utent",
        "blockip-legend": "Bloche l'utent",
-       "ipadressorusername": "Direzion IP o non utent:",
+       "ipaddressorusername": "Direzion IP o non utent:",
        "ipbexpiry": "Scjadence dal bloc:",
        "ipbreason": "Reson dal bloc:",
        "ipbsubmit": "Bloche chest utent",
        "tooltip-rollback": "\"Rollback\" al anule il/i cambiament/s a cheste pagjine fats dal ultin utent cuntun sôl clic",
        "tooltip-undo": "\"Anule\" al permet di anulâ chest cambiament e al vierç il modul pal cambiament te modalitât di anteprime. Al permet cussì di zontâ une reson tal somari.",
        "tooltip-summary": "Inserìs un curt somari",
-       "monobook.css": "/* modifiche chest file par personalizâ la skin monobook par dut il sît */",
        "anonymous": "{{PLURAL:$1|Utent anonim|Utents anonims}} di {{SITENAME}}",
        "siteuser": "Utent $1 di {{SITENAME}}",
        "anonuser": "$1, utent anonim di {{SITENAME}}",
        "anonusers": "$1, {{PLURAL:$2|utent anonim|utents anonims}} di {{SITENAME}}",
        "creditspage": "Pagjine dai ricognossiments",
        "nocredits": "Nissune informazion sui ricognossiments disponibil par cheste pagjine.",
-       "skinname-modern": "Moderne",
        "previousdiff": "← Difarence precedente",
        "nextdiff": "Prossime difarence →",
        "thumbsize": "Dimension miniature:",
        "show-big-image": "File origjnâl",
        "newimages": "Galarie dai gnûfs files",
        "imagelisttext": "Ca sot e je une liste di $1 {{PLURAL:$1|file|files}} ordenâts $2.",
-       "showhidebots": "($1 i bots)",
        "noimages": "Nuie di viodi.",
        "ilsubmit": "Cîr",
        "bydate": "par date",
index ece00d8..0851cc8 100644 (file)
        "qbmyoptions": "Myn Opsjes",
        "faq": "FAQ (faak stelde fragen)",
        "faqpage": "Project:Faak stelde fragen",
-       "vector-action-delete": "Fuortsmite",
-       "vector-action-move": "Werneam",
-       "vector-action-protect": "Beskermje",
-       "vector-action-undelete": "Tebeksette",
-       "vector-action-unprotect": "Beskerming fuorthelje",
-       "vector-view-create": "Oanmeitsje",
-       "vector-view-edit": "Wizigje",
-       "vector-view-history": "Skiednis sjen litte",
-       "vector-view-view": "Lês",
-       "vector-view-viewsource": "Besjoch de boarne",
        "namespaces": "Nammeromten",
        "variants": "Farianten",
        "errorpagetitle": "Fout",
        "editundo": "werom sette",
        "searchresults": "Sykresultaat",
        "searchresults-title": "Sykresultaten foar \"$1\"",
-       "toomanymatches": "Der wiene tefolle resultaten.\nPrebearje in oare sykopdracht.",
        "titlematches": "Titels",
        "textmatches": "Siden",
        "notextmatches": "Gjin siden",
        "searchmenu-exists": "'''Der is in side mei namme \"[[:$1]]\" yn dizze wiki'''",
        "searchmenu-new": "'''Meitsje de side \"[[:$1]]\" yn dizze wiki!'''",
        "searchprofile-articles": "Ynhâldlike siden",
-       "searchprofile-project": "Projektsiden",
        "searchprofile-images": "Triemmen",
        "searchprofile-everything": "Alles",
        "searchprofile-advanced": "Utwreide",
        "searchprofile-articles-tooltip": "Sykje yn $1",
-       "searchprofile-project-tooltip": "Sykje yn $1",
        "searchprofile-images-tooltip": "Sykje om triemmen",
        "searchprofile-everything-tooltip": "Alle ynhâld trochsykje (ynklusyf oerlissiden)",
        "searchprofile-advanced-tooltip": "Sykje yn oanjûne nammerûmten",
        "search-interwiki-default": "$1 resultaten:",
        "search-interwiki-more": "(mear)",
        "search-relatedarticle": "Besibbe",
-       "searcheverything-enable": "Sykje op alle nammeromten",
        "searchrelated": "besibbe",
        "searchall": "alle",
        "showingresults": "{{PLURAL:$1|'''1''' resultaat|'''$1''' resultaten}} fan #'''$2''' ôf.",
-       "showingresultsnum": "{{PLURAL:$3|'''1''' resultaat|'''$3''' resultaten}} fan #'''$2''' ôf.",
        "search-nonefound": "Der binne gjin resultaten foar Jo sykopdracht.",
        "powersearch-legend": "Sykje",
        "powersearch-ns": "Sykje op nammeromten:",
        "allowemail": "Lit my ek netpost fan oare meidoggers krije",
        "prefs-searchoptions": "Sykynstellings",
        "prefs-namespaces": "Nammeromten",
-       "defaultns": "Nammeromten dy't normaal trochsocht wurde:",
        "default": "standert",
        "prefs-files": "Triemen",
        "prefs-custom-js": "Persoanlik JS",
        "prefs-emailconfirm-label": "Netpostbefêstiging:",
        "youremail": "Jo netpostadres:",
        "username": "Meidochnamme:",
-       "uid": "Wikinûmer:",
        "prefs-memberingroups": "Lid fan {{PLURAL:$1|groep|groepen}}:",
        "yourrealname": "Jo wiere namme:",
        "yourlanguage": "Taal:",
        "logempty": "Gjin treffers yn it loch.",
        "log-title-wildcard": "Siden sykje dy't mei dizze namme begjinne",
        "allpages": "Alle siden",
-       "alphaindexline": "$1 oant $2",
        "nextpage": "Folgjende side ($1)",
        "prevpage": "Foargeande side ($1)",
        "allpagesfrom": "Begjin list by",
index 97b3acb..0fe4dfa 100644 (file)
        "qbmyoptions": "Mo chuid leathanaigh",
        "faq": "Ceisteanna Coiteanta",
        "faqpage": "Project:Ceisteanna_Coiteanta",
-       "vector-action-addsection": "Cuir topaic leis",
-       "vector-action-delete": "Scrios",
-       "vector-action-move": "Athainmnigh",
-       "vector-action-protect": "Glasáil",
-       "vector-action-undelete": "Díscrios",
-       "vector-action-unprotect": "Díghlasáil",
-       "vector-view-create": "Cruthaigh",
-       "vector-view-edit": "Athraigh an lch seo",
-       "vector-view-history": "Féach ar stair",
-       "vector-view-view": "Léigh",
-       "vector-view-viewsource": "Féach ar fhoinse",
        "actions": "Gníomhartha",
        "namespaces": "Ainmspásanna",
        "variants": "Leaganacha Malartacha",
        "viewprevnext": "Taispeáin ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-new": "'''Cruthaigh an leathanach \"[[:$1]]\" ar an vicí seo!'''",
        "searchprofile-articles": "Leathanaigh ábhair",
-       "searchprofile-project": "Leathanaigh thionscadail agus cabhair",
        "searchprofile-images": "Ilmheáin",
        "searchprofile-everything": "Gach rud",
        "searchprofile-advanced": "Casta",
        "searchprofile-articles-tooltip": "Cuardaigh i $1",
-       "searchprofile-project-tooltip": "Cuardaigh i $1",
        "searchprofile-images-tooltip": "Cuardaigh le comhaid",
        "searchprofile-everything-tooltip": "Cuardaigh an t-ábhar ar fad (leathanaigh plé san áireamh)",
        "searchprofile-advanced-tooltip": "Cuardaigh in ainmspásanna saincheaptha",
        "searchrelated": "gaolmhara",
        "searchall": "an t-iomlán",
        "showingresults": "Ag taispeáint thíos {{PLURAL:$1|'''toradh amháin'''|'''$1''' torthaí}}, ag tosú le #'''$2'''.",
-       "showingresultsnum": "Ag taispeáint thíos {{PLURAL:$3|'''toradh amháin'''|'''$3''' torthaí}}, ag tosú le #'''$2'''.",
        "search-nonefound": "Ní bhfuarthas toradh ar bith ar an iarratas.",
        "powersearch-legend": "Cuardach casta",
        "powersearch-ns": "Cuardaigh in ainmspásanna:",
        "timezoneregion-pacific": "An tAigéan Ciúin",
        "allowemail": "Tabhair cead d'úsáideoirí eile ríomhphost a sheoladh chugat.",
        "prefs-namespaces": "Ainmspáis",
-       "defaultns": "Cuardaigh sna ranna seo a los éagmaise:",
        "default": "réamhshocrú",
        "prefs-files": "Comhaid",
        "youremail": "Do ríomhsheoladh:",
        "username": "D'ainm úsáideora:",
-       "uid": "D’uimhir úsáideora:",
        "prefs-memberingroups": "Comhalta {{PLURAL:$1|an ghrúpa|na ghrúpaí}}:",
        "yourrealname": "D'fhíorainm **",
        "yourlanguage": "Teanga",
        "all-logs-page": "Gach loga poiblí",
        "alllogstext": "Bailiúchán cuimsitheach de gach loga {{SITENAME}}.\nIs féidir leat an méid ar taispeáint a chúngú trí roghnú an saghas loga, an t-ainm úsáideora (cásíogair), nó an leathanach (cásíogair freisin) atá i gceist agat.",
        "allpages": "Gach leathanach",
-       "alphaindexline": "$1 go $2",
        "nextpage": "An leathanach a leanas ($1)",
        "prevpage": "Leathanach roimhe sin ($1)",
        "allpagesfrom": "Taispeáin leathanaigh ó:",
        "tooltip-rollback": "Fill ar leagan an leathanaigh seo roimh athruithe an eagarthóra dheireanaigh in aon chlic amháin",
        "tooltip-undo": "Cuirtear \"Cealaigh\" an t-athrú seo ar cheal agus osclaítear an fhoirm eagair i mód réamhamhairc. Is féidir cúis na hathruithe a chur san achoimre.",
        "tooltip-summary": "Cuir isteach achoimre ghearr",
-       "monobook.css": "/* athraigh an comhad seo chun an craiceann MonoBook a athrú don suíomh ar fad */",
        "anonymous": "{{PLURAL:$1|Úsáideoir|Úsáideoirí}} gan ainm ar {{SITENAME}}",
        "siteuser": "Úsáideoir $1 ag {{SITENAME}}",
        "lastmodifiedatby": "Leasaigh $3 an leathanach seo go déanaí ag $2, $1.",
        "spamprotectionmatch": "Truicear ár scagaire dramhála ag an téacs seo a leanas: $1",
        "spambot_username": "MediaWiki turscar glanadh",
        "pageinfo-toolboxlink": "Faoin leathanach seo",
-       "skinname-cologneblue": "Gorm Köln",
-       "skinname-monobook": "MonoBook",
-       "skinname-modern": "Nua-aimseartha",
-       "skinname-vector": "Veicteoir",
        "markaspatrolleddiff": "Comharthaigh mar patrólta.",
        "markaspatrolledtext": "Comharthaigh an t-alt seo mar patrólta",
        "markedaspatrolled": "Comharthaithe mar patrólta",
index ca3192d..ba65dc6 100644 (file)
        "qbmyoptions": "Sayfalarım",
        "faq": "SSS",
        "faqpage": "Project:SSS",
-       "vector-view-edit": "Diiştir",
-       "vector-view-view": "Oku",
        "errorpagetitle": "Yannış",
        "returnto": "$1 dön.",
        "tagline": "{{SITENAME}} saydından",
        "skin-preview": "Ön siir",
        "youremail": "E-mail adresiniz*",
        "username": "Kullanıcı adı:",
-       "uid": "Registrațiya nomeri:",
        "yourrealname": "Haliz adınız:",
        "yourlanguage": "Dil:",
        "yournick": "Nik",
        "log": "Jurnallar",
        "all-logs-page": "Hepsi jurnallar",
        "allpages": "Hepsi sayfalar",
-       "alphaindexline": "$1den $2e",
        "nextpage": "Geeriki sayfa ($1)",
        "prevpage": "İlerki sayfa ($1)",
        "allpagesfrom": "Listaya düzmää başlanılacêk bukvalar:",
index d8e4a6e..670f610 100644 (file)
        "qbmyoptions": "偶𠮶选项",
        "faq": "FAQ",
        "faqpage": "Project:问得蛮多𠮶问题",
-       "vector-action-addsection": "添主题",
-       "vector-action-delete": "删吥",
-       "vector-action-move": "移吥",
-       "vector-action-protect": "护到",
-       "vector-action-undelete": "望下删吥𠮶页面",
-       "vector-action-unprotect": "更改保护",
-       "vector-view-create": "创建",
-       "vector-view-edit": "编辑",
-       "vector-view-history": "望下历史",
-       "vector-view-view": "读",
-       "vector-view-viewsource": "望下原始码",
        "actions": "动作",
        "namespaces": "空间名",
        "variants": "变换",
        "searchrelated": "相关",
        "searchall": "所有",
        "showingresults": "底下从第<b>$2</b>条显示起先𠮶<b>$1</b>条结果:",
-       "showingresultsnum": "底下从第<b>$2</b>条显示起先𠮶<b>$3</b>条结果:",
        "showingresultsheader": "'''$4'''𠮶{{PLURAL:$5|第'''$1'''到第'''$3'''只结果|第'''$1 - $2'''只,拢共'''$3'''只结果}}",
        "search-nonefound": "冇合到𠮶查询结果。",
        "powersearch-legend": "高级搜寻",
        "tooltip-undo": "『复原』可以到编辑模式里头开只编辑表以便复原。佢容许到摘要里头加进原因。",
        "tooltip-summary": "输入只简要",
        "common.css": "/** 个首𠮶CSS会用到全部𠮶皮肤 */",
-       "monobook.css": "/* 个首𠮶 CSS 会碍到正用Monobook皮肤𠮶用户 */",
        "common.js": "/* 个首𠮶JavaScript仰上载进到所有用户全部页面。 */",
-       "monobook.js": "/* 伓再使用;请用[[MediaWiki:common.js]] */",
        "anonymous": "{{SITENAME}}𠮶匿名用户",
        "siteuser": "{{SITENAME}}用户$1",
        "anonuser": "{{SITENAME}}匿名用户$1",
index 96bee9b..8320af5 100644 (file)
        "qbmyoptions": "我嗰頁面",
        "faq": "FAQ",
        "faqpage": "Project:問得蠻多嗰問題",
-       "vector-action-addsection": "添主題",
-       "vector-action-delete": "刪吥",
-       "vector-action-move": "移吥",
-       "vector-action-protect": "護到",
-       "vector-action-undelete": "望下刪吥嗰頁面",
-       "vector-action-unprotect": "解除保護",
-       "vector-view-create": "創建",
-       "vector-view-edit": "編輯",
-       "vector-view-history": "望下歷史",
-       "vector-view-view": "讀",
-       "vector-view-viewsource": "望下原始碼",
        "actions": "動作",
        "namespaces": "空間名",
        "variants": "變換",
        "searchrelated": "相關",
        "searchall": "所有",
        "showingresults": "底下從第<b>$2</b>條顯示起先嗰<b>$1</b>條結果:",
-       "showingresultsnum": "底下從第<b>$2</b>條顯示起先嗰<b>$3</b>條結果:",
        "showingresultsheader": "'''$4'''嗰{{PLURAL:$5|第'''$1'''到第'''$3'''隻結果|第'''$1 - $2'''隻,攏共'''$3'''隻結果}}",
        "search-nonefound": "冇合到嗰查詢結果。",
        "powersearch-legend": "高級搜尋",
        "tooltip-undo": "『復原』可以到編輯模式裡頭開隻編輯表以便復原。佢容許到摘要裡頭加進原因。",
        "tooltip-summary": "輸入隻簡要",
        "common.css": "/** 箇首嗰CSS會用到全部嗰皮膚 */",
-       "monobook.css": "/* 箇首嗰 CSS 會礙到正用Monobook皮膚嗰用戶 */",
        "common.js": "/* 箇首嗰JavaScript仰上載進到所有用戶全部頁面。 */",
-       "monobook.js": "/* 伓再使用;請用[[MediaWiki:common.js]] */",
        "anonymous": "{{SITENAME}}嗰匿名用戶",
        "siteuser": "{{SITENAME}}用戶$1",
        "anonuser": "{{SITENAME}}匿名用戶$1",
index 1e9135a..58e4fc0 100644 (file)
        "qbmyoptions": "Na duilleagan agam",
        "faq": "CÀBHA",
        "faqpage": "Project:CÀBHA",
-       "vector-action-addsection": "Cuir ris cuspair",
-       "vector-action-delete": "Sguab às",
-       "vector-action-move": "Gluais",
-       "vector-action-protect": "Dìon",
-       "vector-action-undelete": "Neo-dhèan an sguabadh às",
-       "vector-action-unprotect": "Atharraich an dìon",
-       "vector-view-create": "Cruthaich",
-       "vector-view-edit": "Deasaich",
-       "vector-view-history": "Seall an eachdraidh",
-       "vector-view-view": "Leugh",
-       "vector-view-viewsource": "Seall an tùs",
        "actions": "Gnìomhan",
-       "vector-more-actions": "Barrachd",
        "namespaces": "Ainm-spàsan",
        "variants": "Tionndaidhean",
        "navigation-heading": "Clàr-taice na seòladaireachd",
        "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-lethbhreac",
+       "copyrightpage": "{{ns:project}}:Còir-lethbhreac",
        "currentevents": "Cùisean an latha",
        "currentevents-url": "Project:Cùisean an latha",
        "disclaimers": "Aithrisean-àichidh",
        "protectedpagewarning": "<strong>Rabhadh: Chaidh an duilleag seo a dhìon 's chan urrainn ach dhan fheadhainn aig a bheil ùghdarras rianaire a dheasachadh.</strong>\nChì thu an clàr mu dheireadh san loga mar fhiosrachadh dhut gu h-ìosal:",
        "semiprotectedpagewarning": "<strong>An aire:</strong> 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": "<strong>Rabhadh:</strong> 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 bhith mar eas.",
-       "titleprotectedwarning": "<strong>Rabhadh: Chaidh an duilleag seo a dhìon 's feumar [[Special:ListGroupRights|còraichean sònraichte]] gus a dheasachadh.</strong>\nSeo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
+       "titleprotectedwarning": "<strong>Rabhadh: Chaidh an duilleag seo a dhìon 's feumar [[Special:ListGroupRights|ceadan sònraichte]] gus a dheasachadh.</strong>\nSeo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
        "templatesused": "Tha {{PLURAL:$1|teamplaid 'ga cleachdadh|teamplaidean 'gan cleachdadh}} air an duilleag seo:",
        "templatesusedpreview": "Tha {{PLURAL:$1|teamplaid 'ga cleachdadh|teamplaidean 'gan cleachdadh}} san ro-shealladh seo:",
        "templatesusedsection": "Tha {{PLURAL:$1|teamplaid 'ga cleachdadh|teamplaidean 'gan cleachdadh}} san earrann seo:",
        "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}} air [[:$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-fail-toobig": "Cha b' urrainn dhuinn an eachdraidh a cho-aonachadh on a bhiodh barrachd na tha ceadaichte de $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} a ghluasad.",
        "mergehistory-no-source": "Chan eil an tùs-duilleag $1 ann.",
        "mergehistory-no-destination": "Chan eil an an duilleag targaide $1 ann.",
        "mergehistory-invalid-source": "Feumaidh an tùs-duilleag a bhith 'na thiotal dligheach.",
        "searchall": "a h-uile",
        "showingresults": "A' sealltainn suas ri <strong>$1</strong> {{PLURAL:$1|toradh|thoradh|toraidhean|toradh}} gu h-ìosal a' tòiseachadh le àireamh <strong>$2</strong>.",
        "showingresultsinrange": "A' sealltainn suas ri <strong>$1</strong> {{PLURAL:$1|toradh|thoradh|toraidhean|toradh}} san rainse eadar àireamh <strong>$2</strong> is <strong>$3</strong>.",
-       "showingresultsnum": "A' sealltainn <strong>$3</strong> {{PLURAL:$3|toradh|thoradh|toraidhean|toradh}} gu h-ìosal a' tòiseachadh le àireamh <strong>$2</strong>.",
        "showingresultsheader": "{{PLURAL:$5|Toradh <strong>$1</strong> à <strong>$3</strong>|Toraidhean <strong>$1 - $2</strong> à <strong>$3</strong>}} airson <strong>$4</strong>",
        "search-nonefound": "Cha do fhreagair toradh sam bith ri d' iarrtas.",
        "powersearch-legend": "Rannsachadh adhartach",
        "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",
+       "rightslog": "Loga ceadan a' chleachdaiche",
        "rightslogtext": "Seo loga nan atharraichean air ceadan nan cleachdaichean.",
        "action-read": "leugh an duilleag seo",
        "action-edit": "deasaich an duilleag seo",
        "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|'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.",
+       "empty-file": "Tha am faidhle a chuir thu a-null falamh.",
+       "file-too-large": "Tha 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.",
        "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]]",
        "filepageexists": "Chaidh duilleag an tuairisgeil airson na duilleige seo a chruthachadh air <strong>[[:$1]]</strong> mar-thà ach chan eil faidhle air a bheil an t-ainm seo ann an-dràsta.\nCha nochd an gearr-chunntas a chuireas tu a-steach air duilleag an tuairisgeil.\nFeumaidh tu a dheasachadh a làimh ach an nochd an gearr-chunntas agad an-siud.\n[[$1|thumb]]",
-       "fileexists-extension": "Tha faidhle ann air a bheil ainm a tha coltach ris: [[$2|thumb]]\n* Ainm an fhaidhle 'ga luchdadh suas: <strong>[[:$1]]</strong>\n* Ainm an fhaidhle a tha ann: <strong>[[:$2]]</strong>\nFeuch an tagh thu ainm eile.",
+       "fileexists-extension": "Tha faidhle ann air a bheil ainm a tha coltach ris: [[$2|thumb]]\n* Ainm an fhaidhle 'ga luchdadh suas: <strong>[[:$1]]</strong>\n* Ainm an fhaidhle a tha ann: <strong>[[:$2]]</strong>\nNach tagh thu ainm nas diofraichte uaithe?",
        "fileexists-thumbnail-yes": "Tha coltas an deilbh le meud lùghdaichte <em>(dealbhag)</em> air an fhaidhle seo.\n[[$1|thumb]]\nThoir sùil air an fhaidhle <strong>[[:$1]]</strong>.\nMas e an aon dealbh a tha san fhaidhle sin ach air meud tùsail, cha leig thu leas dealbhag a bharrachd a luchdadh suas.",
        "file-thumbnail-no": "Tha ainm an fhaidhle a' tòiseachadh le <strong>$1</strong>.\nTha coltas an deilbh le meud lùghdaichte <em>(dealbhag)</em> air.\nMa tha an dealbh agad le dùmhlachd-bhreacaidh shlàn, feuch an luchdaich thu am fear ud suas 's mur eil, feuch an atharraich thu ainm an fhaidhle.",
        "fileexists-forbidden": "Tha faidhle air a bheil an t-ainm seo ann mar-thà 's cha ghabh sgrìobhadh thairis air.\nMa tha thu airson am faidhle agad a luchdadh suas fhathast, rach air ais 's cleachd ainm ùr.\n[[File:$1|thumb|center|$1]]",
        "backend-fail-store": "Cha b' urrainn dhuinn am faidhle \"$1\" a stòradh air \"$2\".",
        "backend-fail-copy": "Cha b' urrainn dhuinn lethbhreac dhen fhaidhle \"$1\" a chur gu \"$2\".",
        "backend-fail-move": "Cha b' urrainn dhuinn am faidhle \"$1\" a ghluasad gu \"$2\".",
-       "backend-fail-opentemp": "Cha deach leinn faidhle sealach fhosgladh.",
+       "backend-fail-opentemp": "Cha deach leinn faidhle sealach fhosgladh.",
        "backend-fail-writetemp": "Cha deach leinn sgrìobhadh san fhaidhle sealach.",
        "backend-fail-closetemp": "Cha deach leinn am faidhle sealach a dhùnadh.",
        "backend-fail-read": "Cha b' urrainn dhuinn am faidhle \"$1\" a leughadh.",
        "backend-fail-create": "Cha b' urrainn dhuinn sgrìobhadh san fhaidhle \"$1\".",
        "backend-fail-maxsize": "Cha b' urrainn dhuinn am faidhle \"$1\" a sgrìobhadh on a tha e nas motha na $2 {{PLURAL:$2|bhaidht|bhaidht|baidhtichean|baidht}}.",
        "backend-fail-readonly": "Chan eil backend an stòraidh \"$1\" ach ri leughadh a-mhàin an-dràsta. Seo as adhbhar: \"<em>$2</em>\"",
-       "backend-fail-synced": "Cha am faidhle \"$1\" ann an staid mì-chòrdail a thaobh nam backends stòraidh inntearnail.",
+       "backend-fail-synced": "Tha am faidhle \"$1\" ann an staid mì-chòrdail a thaobh nam backends stòraidh inntearnail.",
        "backend-fail-connect": "Cha deach leinn ceangal ri backend an stòraidh \"$1\".",
        "backend-fail-internal": "Chathair mearachd neo-aithnichte le backend an stòraidh \"$1\".",
        "backend-fail-contenttype": "Cha deach leinn faighinn a-mach dè an seòrsa susbaint a tha san fhaidhle ri stòradh air \"$1\".",
        "zip-bad": "Tha am faidhle ZIP coirbte no cha ghabh a leughadh air adhbhar eile air choireigin.\nChan urrainn dhuinn dearbhadh mar bu chòir a bheil e tèarainte gus nach eil.",
        "zip-unsupported": "Tha am faidhle ZIP seo a' chleachdadh feartan ZIP ris nach cuir MediaWiki taic.\nChan urrainn dhuinn dearbhadh mar bu chòir a bheil e tèarainte gus nach eil.",
        "uploadstash": "Tasgadan an luchdaidh suas",
+       "uploadstash-summary": "Bheir an duilleag seo inntrigeadh dhut a dh'fhaidhlichean a chaidh a luchdadh suas no a tha 'gan luchdadh suas ach nach deach fhoillseachadh air an uicidh fhathast. Chan fhaic duine na faidhlichean seo ach an cleachdaiche a rinn an luchdadh suas.",
        "uploadstash-clear": "Glan na faidhlichean ann an tasgadan an luchdaidh suas",
        "uploadstash-nofiles": "Chan eil faidhle agad ann an tasgadan an luchdaidh suas.",
+       "uploadstash-badtoken": "Cha deach an gnìomh seo a choileanadh, 's dòcha air sgàth 's gun do dh'fhalbh an ùine air an teisteanas deasachaidh agad. Am feuch thu ris a-rithist?",
+       "uploadstash-errclear": "Cha deach leinn na faidhlichean a ghlanadh air falbh.",
+       "uploadstash-refresh": "Ath-nuadhaich liosta nam faidhlichean",
+       "invalid-chunk-offset": "Frith-àireamh a' chnaip mhì-dhligheach",
+       "img-auth-accessdenied": "Chaidh an t-inntrigeadh a dhiùltadh",
+       "img-auth-nopathinfo": "Tha PATH_INFO a dhìth.\nCha deach am frithealaiche agad a shuidheachadh ach an doireadh e am fiosrachadh seo seachad.\nDh'fhaoidte gu bheil e stèidhichte air CGI 's chan urrainn dha taic a chur ri img_auth.\nFaic https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+       "img-auth-notindir": "Chan eil an t-slighe a chaidh iarraidh san t-slighe luchdaidh suas a chaidh a rèiteachadh.",
+       "img-auth-badtitle": "Cha ghabh tiotal dligheach a thogail o \"$1\".",
+       "img-auth-nologinnWL": "Chan eil thu air logadh a-steach 's chan eil \"$1\" air a' gheal-liosta.",
+       "img-auth-nofile": "Chan eil am faidhle \"$1\" ann.",
+       "img-auth-isdir": "Tha thu a' feuchainn ris a' phasgan \"$1\" inntrigeadh.\nChan fhaod thu ach faidhlichean inntrigeadh.",
+       "img-auth-streaming": "A' sruthadh \"$1\".",
+       "img-auth-public": "Nì img_auth.php às-chur airson faidhlichean o uicidh phrìobhaideach.\nChaidh an uicidh seo a rèiteachadh mar thè phoblach.\nChaidh img_auth.php a chur à comas a chum tèarainteachd.",
+       "img-auth-noread": "Chan eil cead inntrigidh aig a' chleachdaiche gus \"$1\" a leughadh.",
+       "http-invalid-url": "URL mì-dhligheach: $1",
+       "http-invalid-scheme": "Cha chuirear taic ri URLaichean leis an sgeama \"$1\".",
+       "http-request-error": "Dh'fhàillig leis an iarrtas HTTP ri linn mearachd neo-aithnichte.",
+       "http-read-error": "Mearachd leughadh HTTP.",
+       "http-timed-out": "Dh'fhalbh an ùine air an iarrtas HTTP.",
+       "http-curl-error": "Mearachd a' faighinn an URL: $1",
+       "http-bad-status": "Thachair duilgheadas rè an iarrtais HTTP: $1 $2",
+       "upload-curl-error6": "Cha deach leinn an URL a ruigsinn",
+       "upload-curl-error6-text": "Cha deach leinn an URL a chaidh a thoirt seachad a ruigsinn.\nDearbhaich gu bheil an URL mar bu chòir 's gu bheil an làrach ag obair.",
+       "upload-curl-error28": "Dh'fhalbh an ùine air an luchdadh suas",
+       "upload-curl-error28-text": "Thug an làrach seo ro fhada gus freagairt a thoirt.\nDearbhaich gu bheil an àrach ag obrachadh, fuirich greiseag 's feuch ris a-rithist.\n'S dòcha gum b' fheairrde thu feuchainn a-rithist nuair nach eil i cho trang.",
        "license": "Ceadachadh:",
        "license-header": "Ceadachadh",
        "nolicense": "Cha deach gin a thaghadh",
        "filehist-nothumb": "Gun dealbhag",
        "filehist-user": "Cleachdaiche",
        "filehist-dimensions": "Meud",
+       "filehist-filesize": "Meud an fhaidhle",
        "filehist-comment": "Beachd",
        "imagelinks": "Cleachdadh an fhaidhle",
        "linkstoimage": "Tha ceangal ris an fhaidhle seo {{PLURAL:$1|san duilleag|sna duilleagan}} a leanas:",
        "pageswithprop-prophidden-long": "chaidh luach fada aig buadh teacsa fhalach ($1)",
        "pageswithprop-prophidden-binary": "chaidh luach bìnearaidh fhalach ($1)",
        "doubleredirects": "Ath-seòlaidhean dùbailte",
+       "doubleredirectstext": "Seallaidh an duilleag seo na duilleagan dhut a nì ath-stiùireadh gu duilleag eile a tha 'na t-ath-stiùireadh.\nTha ceanglaichean dhan chiad 's dàrna ath-stiùireadh anns gach ràgh cho math ri ceann-uidhe an dàrna ath-stiùiridh a tha 'na \"fhìor\" dhuilleag-uidhe ris am bu chòir a' chiad duilleag a thomhadh mar as trice.\nChaidh innteartan le <del>loidhne tromhpa</del> fhuasgladh.",
        "double-redirect-fixed-move": "Chaidh [[$1]] a ghluasad.\nChaidh ùrachadh gu fèin-obrachail 's nì e ath-stiùireadh gu [[$2]] a-nis.",
        "double-redirect-fixed-maintenance": "A' càradh ath-stiùireadh dùblaichte o [[$1]] gu [[$2]] gu fèin-obrachail le obair-càraidh.",
        "double-redirect-fixer": "Càraichear nan ath-stiùiridhean",
        "wantedpages": "Duilleagan a thathar 'gan iarraidh",
        "wantedpages-badtitle": "Tha tiotal mì-dhligheach am measg nan toraidhean: $1",
        "wantedfiles": "Faidhlichean a thathar 'gan iarraidh",
+       "wantedfiletext-cat": "Tha na faidhlichean a leanas 'gan cleachdadh ach chan eil iad ann. Dh'fhaoidte gum bi faidhlichean o ionadan-tasgaidh cèine 'gan sealltainn an-seo ged a tha iad ann. Bidh <del>loidhne tro</del> na toraidhean a bharrachd seo. A bharrachd air sin, chì thu na duilleagan sa bhios faidhlichean nach eil ann leabaichte air [[:$1]].",
+       "wantedfiletext-nocat": "Tha na faidhlichean a leanas 'gan cleachdadh ach chan eil iad ann. Dh'fhaoidte gum bi faidhlichean o ionadan-tasgaidh cèine 'gan sealltainn an-seo ged a tha iad ann. Bidh <del>loidhne tro</del> na toraidhean a bharrachd seo.",
        "wantedtemplates": "Teamplaidean a thathar 'gan iarraidh",
        "mostlinked": "Na duilleagan ris a bheil an àireamh as motha de cheanglaichean",
        "mostlinkedcategories": "Na roinnean-seòrsa ris a bheil an àireamh as motha de cheanglaichean",
        "deadendpagestext": "Cha dèan na duilleagan seo ceangal gu duilleag sam bith eile air {{SITENAME}}.",
        "protectedpages": "Duilleagan fo dhìon",
        "protectedpages-indef": "Dìonan buana a-mhàin",
+       "protectedpages-summary": "Chì thu na duilleagan a tha ann 's gan dìon an-seo. Faic [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] airson liosta dhe na tiotalan a tha 'gan dìon o chruthachadh.",
        "protectedpages-cascade": "Dìonan o bhith mar eas a-mhàin",
+       "protectedpages-noredirect": "Falaich ath-sheòlaidhean",
+       "protectedpagesempty": "Chan eil duilleag 'ga dhìon leis na paramadairean seo aig an àm seo.",
+       "protectedpages-timestamp": "Stampa-tìde",
+       "protectedpages-page": "Duilleag",
+       "protectedpages-expiry": "Falbhaidh an ùine air",
+       "protectedpages-performer": "An cleachdaiche a rinn an dìon",
+       "protectedpages-params": "Paramadairean an dìona",
+       "protectedpages-reason": "Adhbhar",
+       "protectedpages-unknown-timestamp": "Chan eil fhios",
+       "protectedpages-unknown-performer": "Cleachdaiche neo-aithnichte",
+       "protectedtitles": "Tiotalan fo dhìon",
+       "protectedtitles-summary": "Chì thu na tiotalan a tha fo dhìon o chruthachadh air an duilleag seo. Chì thu na duilleagan a tha ann aig an àm seo 's a tha fo dìon air [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+       "protectedtitlesempty": "Chan eil tiotal 'ga dhìon leis na paramadairean seo aig an àm seo.",
        "listusers": "Liosta nan cleachdaichean",
+       "listusers-editsonly": "Na seall ach cleachdaichean a rinn deasachadh",
+       "listusers-creationsort": "Seòrsaich a-rèir ceann-là a' chruthachaidh",
+       "listusers-desc": "Seòrsaich a' teàrnadh",
        "usereditcount": "$1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}}",
        "usercreated": "Air a chruthachadh $1 $2",
        "newpages": "Duilleagan ùra",
        "ancientpages": "Duilleagan as sìne",
        "move": "Gluais",
        "movethispage": "Gluais an duilleag seo",
+       "unusedimagestext": "Tha na faidhlichean a leanas ann ach cha deach an leabachadh ann an duilleag sam bith.\nThoir an aire gun dèan làraichean-lìn eile ceangal gu faidhlichean ma dh'fhaoidte le URL dìreach 's mar sin dh'fhaoidte gun dèid an cleachdadh fhathast ged a nochdas iad an-seo.",
        "unusedcategoriestext": "Tha na duilleagan roinn-seòrsa seo ann ged nach cleachd duilleag no roinn-seòrsa sam bith eile iad.",
+       "notargettitle": "Gun cheann-uidhe",
+       "notargettext": "Cha dug thu seachad duilleag-uidhe no cleachdaiche air an dèanamaid an gnìomh seo.",
+       "nopagetitle": "Chan eil an duilleag-uidhe ann",
+       "nopagetext": "Chan eil an duilleag-uidhe a thug thu seachad ann.",
        "pager-newer-n": "{{PLURAL:$1|an $1 nas ùire|na $1 nas ùire}}",
        "pager-older-n": "{{PLURAL:$1|an $1 nas sine|na $1 nas sine}}",
        "suppress": "Marasgal",
+       "querypage-disabled": "Chaidh an duilleag shònraichte seo a chur à comas a chum dèanadais.",
        "booksources": "Tùsan a tha 'nan leabhraichean",
        "booksources-search-legend": "Lorg tùsan a tha 'nan leabhraichean",
+       "booksources-isbn": "ISBN:",
        "booksources-go": "Siuthad",
+       "booksources-text": "Chì thu liosta dhe cheanglaichean gu làraichean eile a reiceas leabhraichean ùra 's cleachdte gu h-ìosal 's ma dh'fhaoidte gum faigh thu barrachd fiosrachaidh orra mu leabhraichean a tha thu a' sireadh:",
+       "booksources-invalid-isbn": "Tha coltas mì-dhligheach air an ISBN a chaidh a thoirt seachad; dearbhaich gun deach lethbhreac a dhèanamh dheth on tùs gun mhearachd.",
+       "specialloguserlabel": "Cò rinn e:",
+       "speciallogtitlelabel": "Ceann-uidhe (tiotal no cleachdaiche):",
        "log": "Logaichean",
        "all-logs-page": "A h-uile loga poblach",
+       "alllogstext": "Sealladh co-mheasgaichte dhen a h-uile loga aig {{SITENAME}} a tha ri làimh.\n'S urrainn dhut an sealladh a chuingeachadh 's tu a' taghadh seòrsa an loga, ainm a' chleachdaiche (le aire do litrichean mòra 's beaga) no an duilleag a tha fo bhuaidh (le aire do litrichean mòra 's beaga).",
        "logempty": "Chan eil rud sam bith san loga a tha 'ga mhaidseadh.",
+       "log-title-wildcard": "Lorg sna tiotalan a thòisicheas leis an teacsa seo",
        "showhideselectedlogentries": "Seall/Falaich innteartan an loga a thagh thu",
        "allpages": "A h-uile duilleag",
        "nextpage": "An ath dhuilleag ($1)",
        "prevpage": "An duilleag roimhe ($1)",
-       "allpagesfrom": "Seall duilleagan a tha a' tòiseachadh aig:",
+       "allpagesfrom": "Seall duilleagan o seo a-mach:",
        "allpagesto": "Seall duilleagan a tha a' crìochnachadh aig:",
        "allarticles": "A h-uile duilleag",
        "allinnamespace": "A h-uile duilleag (ainm-spàs $1)",
        "allpagessubmit": "Rach",
+       "allpagesprefix": "Seall na duilleagan leis an ro-leasachan:",
+       "allpagesbadtitle": "Chaidh tiotal duilleige mì-dhligheach a thoirt seachad no bha ro-leasachan eadar-cànain no eadar-uicidh aige.\nFaodaidh gu bheil aon no barrachd charactaran ann nach urrainn dhut a chleachdadh ann an tiotal.",
        "allpages-bad-ns": "Chan eil an t-ainm-spàs \"$1\" aig {{SITENAME}}.",
+       "allpages-hide-redirects": "Falaich ath-sheòlaidhean",
+       "cachedspecial-viewing-cached-ttl": "Chì thu an tionndadh dhen duilleag seo a tha san tasgadan 's a tha suas ri $1 a dh'aois, ma dh'fhaoidte.",
+       "cachedspecial-viewing-cached-ts": "Chì thu an tionndadh dhen duilleag seo a tha san tasgadan 's a tha caran sean, ma dh'fhaoidte.",
+       "cachedspecial-refresh-now": "Seall an tionndadh as ùire.",
        "categories": "Roinnean-seòrsa",
        "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:",
+       "categoriesfrom": "Seall roinnean-seòrsa o seo a-mach:",
+       "special-categories-sort-count": "seòrsaich a-rèir an uireid",
+       "special-categories-sort-abc": "seòrsaich a rèir na h-aibidil",
        "deletedcontributions": "Obair air a sguabadh às",
        "deletedcontributions-title": "Obair air a sguabadh às",
        "sp-deletedcontributions-contribs": "obair",
        "linksearch": "Lorg sna ceanglaichean dhan taobh a-muigh",
+       "linksearch-pat": "Pàtran an luirg:",
        "linksearch-ns": "Ainm-spàs:",
+       "linksearch-ok": "Lorg",
+       "linksearch-text": "'S urrainn dhut saoragan mar \"*.wikipedia.org\" a chleachdadh.\nBidh feum air air co-dhiù aon àrainn aig ìre as àirde, can \"*.org\".<br />\n{{PLURAL:$2|pròtacal|pròtacalan}} ris an cuirear taic: <code>$1</code> (http:// a ghnáth mur dèid pròtacal a shònrachadh).",
        "linksearch-line": "Tha $1 a' ceangal an-seo o $2",
+       "linksearch-error": "Chan fhaod saorag nochdadh ach aig toiseach ainm an òstair.",
+       "listusersfrom": "Seall cleachdaichean o seo a-mach:",
+       "listusers-submit": "Seall",
+       "listusers-noresult": "Cha deach cleachdaiche a lorg.",
+       "listusers-blocked": "('ga bhacadh)",
+       "activeusers": "Na cleachdaichean gnìomhach",
+       "activeusers-intro": "Seo liosta dhe na cleachdaichean a rinn gnìomh air choireigin am broinn {{PLURAL:$1|an $1 latha|an $1 latha|nan $1 làithean|an $1 latha}} mu dheireadh.",
+       "activeusers-count": "$1 {{PLURAL:$1|ghnìomh|ghnìomh|gnìomhan|gnìomh}} am broinn {{PLURAL:$3|an $3 latha|an $3 latha|nan $3 làithean|an $3 latha}} mu dheireadh.",
+       "activeusers-from": "Seall cleachdaichean o seo a-mach:",
+       "activeusers-hidebots": "Falaich na botaichean",
+       "activeusers-hidesysops": "Falaich na rianairean",
+       "activeusers-noresult": "Cha deach cleachdaiche a lorg.",
+       "listgrouprights": "Ceadan nam buidhnean chleachdaichean",
+       "listgrouprights-summary": "chì thu liosta dhe na buidhnean chleachdaichean a tha san uicidh seo 's na ceadan inntrigidh aca.\nDh'fhaoidte gu bheil [[{{MediaWiki:Listgrouprights-helppage}}|barrachd fiosrachaidh]] mu cheadan fa leth ann.",
        "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-group": "Buidheann",
+       "listgrouprights-rights": "Ceadan",
+       "listgrouprights-helppage": "Help:Ceadan nam buidhnean",
        "listgrouprights-members": "(liosta de bhuill)",
+       "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": "Cuir {{PLURAL:$2|buidheann|buidhnean}} ris: $1",
+       "listgrouprights-removegroup": "Thoir {{PLURAL:$2|buidheann|buidhnean}} ar falbh: $1",
+       "listgrouprights-addgroup-all": "Cuir a h-uile buidheann ris",
+       "listgrouprights-removegroup-all": "Thoir a h-uile buidheann air falbh",
+       "listgrouprights-addgroup-self": "Cuir {{PLURAL:$2|buidheann|buidhnean}} ris a' chunntas agad fhèin: $1",
+       "listgrouprights-removegroup-self": "Thoir {{PLURAL:$2|buidheann|buidhnean}} air falbh on chunntas agad fhèin: $1",
+       "listgrouprights-addgroup-self-all": "Cuir a h-uile buidheann ris a' chunntas agad fhèin",
+       "listgrouprights-removegroup-self-all": "Thoir a h-uile buidheann air falbh on chunntas agad fhèin",
        "listgrouprights-namespaceprotection-header": "Cuingeachaidhean air ainm-spàs",
        "listgrouprights-namespaceprotection-namespace": "Ainm-spàs",
+       "listgrouprights-namespaceprotection-restrictedto": "Na bheir cead deasachaidh dhan chleachdaiche",
        "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-name": "Ainm na teachdaireachd",
        "trackingcategories-desc": "Cuspairean-deuchainn gus roinnean-seòrsa a chur ris",
        "noindex-category-desc": "Cha dèid an duilleag seo a chur ris an inneacs luirg le botaichean on a tha am facal draoidheach <code><nowiki>__NOINDEX__</nowiki></code> air 's a tha i ann an ainm-spàs far a bheil a' bhratach seo ceadaichte.",
        "index-category-desc": "Tha <code><nowiki>__INDEX__</nowiki></code> air an duilleag seo ('s tha i ann an ainm-spàs far a bheil a' bhratach seo ceadaichte) 's mar sin thèid a chur ri inneacsan luirg le botaichean ged nach tachradh seo gu h-àbhaisteach.",
+       "post-expand-template-inclusion-category-desc": "Bhiodh an duilleag nas motha na <code>$wgMaxArticleSize</code> às dèidh a h-uile teamplaid a leudachadh 's mar sin cha deach a h-uile teamplaid a leudachadh.",
+       "post-expand-template-argument-category-desc": "Bidh an duilleag nas motha na  <code>$wgMaxArticleSize</code> às dèidh argamaid teamplaid a leudachadh (rudeigin eadar camagan dualach trìoblaichte, can <code>{{{Foo}}}</code>).",
+       "expensive-parserfunction-category-desc": "Tha cus foincseanan cosgail a' pharsair (can <code>#ifexist</code>) am broinn duilleige. Faic [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "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-nodesc": "Chan eil tuairisgeul ri làimh.",
        "trackingcategories-disabled": "Tha an roinn-seòrsa à comas",
+       "mailnologin": "Gun seòladh an t-seòladair",
+       "mailnologintext": "Feumaidh tu [[Special:UserLogin|logadh a-steach]] 's seòladh puist-d dligheach a bhith sna [[Special:Preferences|roghainnean]] agad mus cuir thu post-d gu cleachdaiche eile.",
        "emailuser": "Cuir post-dealain dhan chleachdaiche seo",
        "emailuser-title-target": "Cuir post-d dhan chleachdaiche seo",
+       "emailuser-title-notarget": "Cuir post-d gu cleachdaiche",
+       "emailpage": "Cuir post-d gun chleachdaiche",
+       "emailpagetext": "'S urrainn dhut am foirm gu h-ìosal a chleachdadh gus post-d a chur dhan chleachdaiche seo.\nNochdaidh an seòladh a chuir thu a-steach [[Special:Preferences|sna roghainnean agad]] mar an seòladh \"O\" sa post-d, mar sin 's urrainn dhan fhaightear freagairt a chur thugad gu dìreach.",
+       "defemailsubject": "Post-d on chleachdaiche \"$1\" air {{SITENAME}}",
+       "usermaildisabled": "Chaidh post-d nan cleachdaichean a chur à comas.",
+       "usermaildisabledtext": "Chan urrainn dhut post-d a chur gu cleachdaiche eile air an uicidh seo",
+       "noemailtitle": "Gun seòladh puist-d",
+       "noemailtext": "Cha dug an cleachdaiche seo seòladh puist-d dligheach seachad.",
+       "nowikiemailtext": "Chuir an cleachdaiche seo roimhe nach fhaigh e post-d o chleachdaiche eile.",
+       "emailnotarget": "Chan eil ainm-cleachdaiche an fhaighteir ann no tha e mì-dhligheach.",
+       "emailtarget": "Cuir a-steach ainm-cleachdaiche an fhaighteir",
        "emailusername": "Ainm-cleachdaiche:",
        "emailusernamesubmit": "Air adhart",
+       "email-legend": "Cuir post-d gu cleachdaiche eile air {{SITENAME}}",
        "emailfrom": "O:",
        "emailto": "Gu:",
        "emailsubject": "Cuspair:",
        "emailmessage": "Teachdaireachd:",
        "emailsend": "Cuir",
+       "emailccme": "Cuir lethbhreac dhen phost-d thugam.",
+       "emailccsubject": "Lethbhreac dhen teachdaireachd agad gu $1: $2",
+       "emailsent": "Post-d air a chur",
+       "emailsenttext": "Chaidh an teachdaireachd puist-d agad a chur.",
+       "emailuserfooter": "Chaidh am post-d seo a chur o $1 gu $2 leis an fheart \"cuir post-d gu cleachdaiche\" air {{SITENAME}}.",
+       "usermessage-summary": "A' fàgail teachdaireachd an t-siostaim.",
+       "usermessage-editor": "Teachdaire an t-siostaim",
+       "usermessage-template": "MediaWiki:UserMessage",
        "watchlist": "An clàr-faire",
        "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.",
+       "watchnologin": "Chan eil thu air logadh a-steach",
        "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.",
        "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_lastvisited": "Faic $1 airson gach atharrachadh on turas mu dheireadh a thadhail thu an-seo.",
+       "enotif_lastdiff": "Faic $1 gus coimhead air an atharrachadh seo.",
+       "enotif_anon_editor": "ball gun ainm $1",
        "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",
+       "created": "air a chruthachadh",
+       "changed": "air atharrachadh",
        "deletepage": "Sguab às duilleag",
        "confirm": "Daingnich",
        "excontent": "stuth a bh' ann: '$1'",
        "excontentauthor": "b' e: \"$1\" an t-susbaint (is \"[[Special:Contributions/$2|$2]]\" an aon deasaiche)",
+       "exbeforeblank": "an t-susbaint mus deach a bànachadh: \"$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}}:",
        "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",
+       "dellogpagetext": "Seo liosta dhe na chaidh a sguabadh às o chionn goirid.",
+       "deletionlog": "loga an sguabaidh às",
        "reverted": "Air aiseag gu mùthadh nas sine",
        "deletecomment": "Adhbhar:",
        "deleteotherreason": "Adhbhar eile/a bharrachd:",
        "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.",
+       "deleting-backlinks-warning": "'''Rabhadh:''' Tha [[Special:WhatLinksHere/{{FULLPAGENAME}}|duilleag eile]] a' ceangal ris an duilleag a tha thu airson sguabadh às no 'ga gabhail a-steach 'na h-iomradh.",
        "rollback": "Roilig atharraichean air ais",
        "rollback_short": "Roladh air ais",
        "rollbacklink": "roilig air ais",
        "revertpage": "Deasachaidhean a chaidh a thilleadh leis [[Special:Contributions/$2|$2]] ([[User talk:$2|an deasbaireachd]]) dhan mhùthadh mu dheireadh le [[User:$1|$1]]",
        "revertpage-nouser": "Deasachaidhean a chaidh a thilleadh le cleachdaiche falaichte dhan mhùthadh mu dheireadh le [[User:$1|$1]]",
        "rollback-success": "Na deasachaidhean a chaidh a thilleadh le $1;\nchaidh an tilleadh gun mhùthadh mu dheireadh le $2.",
+       "sessionfailure-title": "Trioblaid leis an t-seisean",
+       "sessionfailure": "Tha duilgheadas ann leis an seisean logaidh a-steach agad a-rèir coltais;\nchaidh sgur dhen ghnìomh seo a chum dìon o session hijacking.\nTill dhan duilleag roimhpe, ath-luchdaich an duilleag ud 's feuch ris a-rithist an uairsin.",
        "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",
        "modifiedarticleprotection": "a dh'atharraich an ìre dìon de \"[[$1]]\"",
        "unprotectedarticle": "a neo-dhìon \"[[$1]]\"",
-       "protect-title": "A' dìonadh \"$1\"",
-       "prot_1movedto2": "[[$1]] gluaiste ri [[$2]]",
+       "movedarticleprotection": "chaidh roghainn an dìona a ghluasad o \"[[$2]]\" gu \"[[$1]]\"",
+       "protect-title": "Atharraich an dìon airson \"$1\"",
+       "protect-title-notallowed": "Seall an dìon airson \"$1\"",
+       "prot_1movedto2": "chaidh [[$1]] a ghluasad gu [[$2]]",
        "protect-badnamespace-title": "Cha ghabh an t-ainm-spàs seo a dhìon",
        "protect-badnamespace-text": "Cha ghabh duilleagan san ainm-spàs seo a dhìon.",
+       "protect-norestrictiontypes-text": "Cha ghabh an duilleag seo a dhìon o nach eil seòrsa cuingeachaidh sam bith ri làimh.",
        "protect-norestrictiontypes-title": "Cha ghabh an duilleag seo a dhìon",
        "protect-legend": "Daingnich dìonadh",
        "protectcomment": "Adhbhar:",
        "protectexpiry": "Falbhaidh an ùine air:",
        "protect_expiry_invalid": "Tha an t-àm-crìochnachaidh mì-dhligheach.",
        "protect_expiry_old": "Tha an t-àm crìochnachaidh seachad mu thràth.",
+       "protect-unchain-permissions": "Thoir a' ghlas far na roghainnean dìona a bharrachd",
        "protect-text": "Chì thu an ìre dìon dhen duilleag <strong>$1</strong> an-seo agus is urrainn dhut atharrachadh an-seo.",
+       "protect-locked-blocked": "Chan urrainn dhut ìre an dìon atharrachadh rè bacaidh.\nSeo na roghainnean aig an duilleag <strong>$1</strong>:",
+       "protect-locked-dblock": "Chan urrainn dhut ìre an dìon atharrachadh on a tha an stòr-dàta glaiste an-dràsta.\nSeo na roghainnean aig an duilleag <strong>$1</strong>:",
        "protect-locked-access": "Chan eil cead aig a' chunntas agad an ìre dìon de dhuilleag atharrachadh.\nSeo roghainnean làithreach na duilleige <strong>$1</strong>:",
        "protect-cascadeon": "Tha an duilleag seo fo dhìon an-dràsta a chionn 's gu bheil e air a ghabhail a-steach {{PLURAL:$1|$1 duilleag|$1 dhuilleag|$1 duilleagan|$1 duilleag}} a leanas aig a bheil dìon o bhith mar eas air.\n'S urrainn dhut ìre dìon na duilleige seo atharrachadh ach cha bhi buaidh air an dìon o bhith mar eas.",
        "protect-default": "Ceadaich a h-uile cleachdaiche",
        "undelete": "Seal na duilleagan air an sguabadh às",
        "undeletepage": "Seall 's aisig duilleagan air an sguabadh às",
        "undeletepagetitle": "<strong>Chan e ach mùthaidhean de [[:$1|$1]] a chaidh a sguabadh às a tha sna leanas</strong>.",
+       "viewdeletedpage": "Seal na duilleagan air an sguabadh às",
+       "undeletepagetext": "Chaidh {{PLURAL:$1|an $1 duilleag|an $1 dhuilleag|na $1 duilleagan|am $1 duilleag}} a sguabadh às ach tha {{PLURAL:$1|i|iad}} san tasglann fhathast 's gabhaidh {{PLURAL:$1|a h-aiseag|an aiseag}}.\nDh'fhaoidte gun dèid an tasglann a ghlanadh gu cunbhalach.",
        "undelete-fieldset-title": "Aisig mùthaidhean",
+       "undeleteextrahelp": "Gus eachdraidh shlàn na duilleige aiseag, fàg gach bogsa bàn 's briog air <strong><em>{{int:undeletebtn}}</em></strong>.\nGus cuid dheth aiseag, cuir cromag sna bogsaichean airson nam mùthaidhean a tha thu airson aiseag 's briog air <strong><em>{{int:undeletebtn}}</em></strong>.",
        "undeleterevisions": "Chaidh {{PLURAL:$1|$1 mhùthadh|$1 mhùthadh|$1 mùthaidhean|$1 mùthadh}} a chur san tasg-lann",
+       "undeletehistory": "Ma dh'aisigeas tu an duilleag, thèid gach mùthadh aiseag dhan eachdraidh.\nMa chaidh duilleag air a bheil an aon ainm a chruthachadh às dèidh an sguabaidh às, nochdaidh na mùthaidhean air an aiseag san eachdraidh roimhpe.",
+       "undeleterevdel": "Cha dèid an sguabadh às a neo-dhèanamh ma sguabadh seo às pàirt de mhùthadh na duilleige no an fhaidhle as ùire.\nMas e seo na thachradh, feumaidh tu a' chromag a thoirt far a' mhùthaidh as ùire a chaidh a sguabadh às no gun a bhith 'ga fhalach tuilleadh.",
        "undeletehistorynoadmin": "Chaidh an duilleag seo a sguabadh às.\nChì thu adhbhar an sguabaidh às sa ghearr-chunntas gu h-ìosal cho math ri fiosrachadh mu na chleachdaichean a dheasaich an duilleag seo mus deach a sguabadh às.\nChan fhaic ach rianairean an teacsa fhèin aig na mùthaidhean air an sguabadh às.",
+       "undelete-revision": "Mùthadh de $1 air a sguabadh às (o $4 $5) le $3:",
+       "undeleterevision-missing": "Mùthadh mì-dhligheach no a dhìth.\n'S dòcha gu bheil droch cheangal agad no gun deach am mùthadh aiseag no a thoirt far na tasglainn.",
+       "undelete-nodiff": "Cha deach mùthadh as sine a lorg.",
+       "undeletebtn": "Aisig",
        "undeletelink": "seall/aisig",
        "undeleteviewlink": "seall",
+       "undeleteinvert": "Ais-thionndaidh na thagh thu",
+       "undeletecomment": "Adhbhar:",
+       "undeletedrevisions": "Chaidh $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} aiseag",
+       "undeletedrevisions-files": "Chaidh $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} agus $2 {{PLURAL:$2|fhaidhle|fhaidhle|faidhlichean|faidhle}} aiseag",
+       "undeletedfiles": "Chaidh $1 {{PLURAL:$1|fhaidhle|fhaidhle|faidhlichean|faidhle}} aiseag",
+       "cannotundelete": "Cha deach leinn an sguabadh às a neo-dhèanamh:\n$1",
+       "undeletedpage": "<strong>Chaidh $1 aiseag</strong>\n\nThoir sùil air [[Special:Log/delete|loga an sguabaidh às]] airson clàr air na chaidh a sguabadh às no aiseag o chionn goirid.",
+       "undelete-header": "Faic [[Special:Log/delete|loga an sguabaidh às]] airson duilleagan a chaidh a sguabadh às o chionn goirid.",
+       "undelete-search-title": "Lorg sna duilleagan air an sguabadh às",
+       "undelete-search-box": "Lorg sna duilleagan air an sguabadh às",
+       "undelete-search-prefix": "Seall na duilleagan a thòisicheas le:",
+       "undelete-search-submit": "Lorg",
+       "undelete-no-results": "Cha deach duilleag a dh'fhreagradh a lorg ann an tasglann nan sguabaidhean às.",
+       "undelete-filename-mismatch": "Cha ghabh mùthadh an fhaidhle aiseag air a bheil an stampa-tìde $1: Chan fhreagair ainmean nam faidhlichean ri chèile.",
+       "undelete-bad-store-key": "Cha ghabh mùthadh an fhaidhle aiseag air a bheil an stampa-tìde $1: Bha am faidhle a dhìth mar-thà mus deach a sguabadh às.",
+       "undelete-cleanup-error": "Mearachd a' sguabadh às faidhle tasglainn \"$1\" nach eil 'ga chleachdadh.",
+       "undelete-missing-filearchive": "Cha ghabh tasglann an fhaidhle air a bheil an ID $1 aiseag o nach eil e san stòr-dàta.\n'S dòcha gun deach an sguabadh às a neo-dhèanamh mar-thà.",
+       "undelete-error": "Mearachd a' neo-dhèanamh sguabadh às na duilleige",
+       "undelete-error-short": "Mearachd a' neo-dhèanamh sguabadh às an fhaidhle: $1",
+       "undelete-error-long": "Thachair mearachd le neo-dhèanamh sguabadh às an fhaidhle:\n\n$1",
+       "undelete-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?",
+       "undelete-show-file-submit": "Tha",
+       "undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
        "namespace": "Ainm-spàs:",
        "invert": "Cuir na thagh mi bun os cionn",
        "tooltip-invert": "Cuir cromag sa bhogsa seo gus atharraichean air an duilleag seo fhalach am broinn an ainm-spàs a thagh thu ('s an ainm-spàs co-cheangailte riutha ma tha cromag ris)",
        "contributions-title": "Obair a rinn $1",
        "mycontris": "M' obair",
        "contribsub2": "Airson $1 ($2)",
+       "contributions-userdoesnotexist": "Cha deach an cunntas cleachdaiche \"$1\" a chlàradh.",
+       "nocontribs": "Cha deach atharrachadh a lorg a dh'fhreagradh ris na cuspairean-luirg seo.",
        "uctop": "(làithreach)",
        "month": "On mhìos (agus na bu tràithe):",
        "year": "On bhliadhna (agus na bu tràithe):",
        "sp-contributions-newbies": "Seall obair le cunntasan ùra a-mhàin",
+       "sp-contributions-newbies-sub": "Airson cunntasan ùra",
        "sp-contributions-newbies-title": "Obair le cunntasan ùra",
        "sp-contributions-blocklog": "an loga bacaidh",
        "sp-contributions-suppresslog": "obair a chaidh a mhùchadh",
        "sp-contributions-logs": "logaichean",
        "sp-contributions-talk": "deasbaireachd",
        "sp-contributions-userrights": "stiùireadh ceadan a' chleachdaiche",
+       "sp-contributions-blocked-notice": "Tha an cleachdaiche seo 'ga bhacadh an-dràsta.\nSeo dhut loga a' bhacaidh mu dheireadh gu h-ìosal:",
+       "sp-contributions-blocked-notice-anon": "Tha an seòladh IP seo 'ga bhacadh an-dràsta.\nSeo dhut loga a' bhacaidh mu dheireadh gu h-ìosal:",
        "sp-contributions-search": "Lorg airson obair a rinneadh",
        "sp-contributions-username": "Seòladh IP no ainm-cleachdaiche:",
        "sp-contributions-toponly": "Na seall deasachaidhean ach na mùthaidhean as ùire",
+       "sp-contributions-newonly": "Na seall ach na deasachaidhean a tha 'nan cruthachadh duilleige",
        "sp-contributions-submit": "Lorg",
        "whatlinkshere": "Na tha a' ceangal a-nall an-seo",
        "whatlinkshere-title": "Duilleagan a tha a' ceangal ri \"$1\"",
        "whatlinkshere-hidelinks": "$1 ceanglaichean",
        "whatlinkshere-hideimages": "$1 ceanglaichean nam faidhlichean",
        "whatlinkshere-filters": "Criathairean",
+       "autoblockid": "Fèin-bhacadh $1",
        "block": "Bac an cleachdaiche",
        "unblock": "Neo-bhac an cleachdaiche",
        "blockip": "Bac an cleachdaiche",
+       "blockip-legend": "Bac an cleachdaiche",
+       "blockiptext": "Cleachd am foirm gu h-ìosal gus seòladh IP no cleachdaiche sònraichte a bhacadh o sgrìobhadh.\nNa dèan seo ach gus dìon o bhandalachd agus a-rèir [[{{MediaWiki:Policy-url}}|a' phoileasaidh]].\nLìon an t-adhbhar sònraichte gu h-ìosal (mar eisimpleir le iomradh air na duilleagan le bhandalachd orra).",
+       "ipaddressorusername": "Seòladh IP no ainm-cleachdaiche:",
+       "ipbexpiry": "Falbhaidh an ùine air:",
        "ipbreason": "Adhbhar:",
+       "ipbreason-dropdown": "*Adhbharan bacaidh cumanta\n** Cur fiosrachadh cearr a-steach\n** Toirt susbaint far duilleagan\n** Cur ceanglaichean-spama gu làraichean a-muigh ris\n** Cur a-steach amaideas/mablais air duilleagan\n** Smàdadh/sàrachadh\n** Ana-chleachdadh air iomadh cunntas\n** Ainm-cleachdaiche neo-thaitneach",
+       "ipb-hardblock": "Bac cleachdaichean on deasachadh a nì logadh a-steach on t-seòladh IP seo",
+       "ipbcreateaccount": "Bac cruthachadh cunntais",
+       "ipbemailban": "Bac cleachdaiche o chur puist-d",
+       "ipbenableautoblock": "Bac an seòladh IP mu dheireadh a chleachd an cleachdaiche seo gu fèin-obrachail 's gach seòladh IP a dh'fheuchas e ri deasachadh uaithe an uairsin",
        "ipbsubmit": "Bac an cleachdaiche seo",
+       "ipbother": "Àm eile:",
        "ipboptions": "2 uair a thìde:2 hours, 1 latha:1 day, 3 làithean:3 days, 1 seachdain:1 week, 2 sheachdain:2 weeks, 1 mhìos:1 month, 3 mìosan:3 months, 6 mìosan:6 months, 1 bhliadhna:1 year,buan:infinite",
+       "ipbhidename": "Falaich an t-ainm-cleachdaiche o dheasachaidhean 's liostaichean",
        "ipbwatchuser": "Cum sùil air duilleagan a' chleachdaiche 's deasbaireachd aig a' chleachdaiche seo",
        "ipb-disableusertalk": "Chan fhaod an cleachdaiche seo an duilleag deasbaireachd aige fhèin a dheasachadh fhad 's a bhios e bacte",
+       "ipb-change-block": "Bac an cleachdaiche a-rithist leis na roghainnean seo",
+       "ipb-confirm": "Dearbhaich am bacadh",
        "badipaddress": "Chan eil an seòladh IP aig a' cleachdair seo iomchaidh",
        "blockipsuccesssub": "Shoirbhich leat leis a' bhacadh",
        "blockipsuccesstext": "Chaidh [[Special:Contributions/$1|$1]] a bhacadh.\n<br />Faic [[Special:BlockList|liosta nan IP bacte]] gus sùile a thoirt air na bacaidhean.",
+       "ipb-blockingself": "Chuir thu romhad thu fhèin a bhacadh! A bheil thu cinnteach gu bheil thu airson seo a dhèanamh?",
        "ipb-confirmhideuser": "Cha thu an impis cleachdaiche a bhacadh le \"falaich cleachdaiche\" an comas. Mùchaidh seo ainm a' chleachdaiche anns gach uile liosta 's nì loga. A bheil thu cinnteach gu bheil thu airson seo a dhèanamh?",
+       "ipb-confirmaction": "Ma tha thu cinnteach gu bheil thu airson seo a dhèanamh, cuir cromag san raon \"{{int:ipb-confirm}}\" aig a' bhonn.",
+       "ipb-edit-dropdown": "Deasaich adhbharan a' bhacaidh",
+       "ipb-unblock-addr": "Neo-bhac $1",
+       "ipb-unblock": "Neo-bhac ainm-chleachdaiche no seòladh IP",
+       "ipb-blocklist": "Seall na bacaidhean a tha ann",
        "ipb-blocklist-contribs": "Obair a rinn $1",
        "unblockip": "Neo-bhac an cleachdaiche",
+       "unblockiptext": "Cleachd am foirm gu h-ìosal gus cead sgrìobhaidh aiseag gu seòladh IP no ainm-cleachdaiche a chaidh a bhacadh roimhe.",
        "ipusubmit": "Thoir air falbh am bacadh seo",
+       "unblocked": "Chaidh [[User:$1|$1]] a neo-bhacadh.",
+       "unblocked-range": "Chaidh $1 a neo-bhacadh.",
+       "unblocked-id": "Chaidh am bacadh $1 a thoirt air falbh.",
+       "blocklist": "Cleachdaichean a chaidh a bhacadh",
        "ipblocklist": "Cleachdaichean a chaidh a bhacadh",
+       "ipblocklist-legend": "Lorg cleachdaiche a chaidh a bhacadh",
+       "blocklist-userblocks": "Falaich bacaidhean cunntais",
+       "blocklist-tempblocks": "Falaich bacaidhean sealach",
+       "blocklist-addressblocks": "Falaich bacaidhean air aon IP",
+       "blocklist-rangeblocks": "Falaich bacaidhean air rainse",
+       "blocklist-timestamp": "Stampa-tìde",
+       "blocklist-target": "Amas",
+       "blocklist-expiry": "Falbhaidh an ùine air",
+       "blocklist-by": "Rianaire a rinn bacadh",
+       "blocklist-params": "Roghainnean a' bhacaidh",
+       "blocklist-reason": "Adhbhar",
+       "ipblocklist-submit": "Lorg",
+       "ipblocklist-localblock": "Bacadh ionadail",
+       "ipblocklist-otherblocks": "{{PLURAL:$1|Bacadh|Bacaidhean}} eile",
+       "infiniteblock": "buan",
+       "expiringblock": "falbhaidh an ùine air $1 $2",
+       "anononlyblock": "gun ainm a-mhàin",
+       "noautoblockblock": "chaidh fèin-bhacadh a chur à comas",
+       "createaccountblock": "chaidh cruthachadh chunntasan ùra a chur à comas",
+       "emailblock": "chaidh puist-d a chur à comas",
        "blocklist-nousertalk": "chan fhaod e an duilleag deasbaireachd aige fhèin a dheasachadh",
+       "ipblocklist-empty": "Tha liosta nam bacaidhean falamh.",
+       "ipblocklist-no-results": "Cha deach an seòladh IP no ainm-cleachdaiche a dh'iarradh bacadh.",
        "blocklink": "bac",
        "unblocklink": "neo-bhac",
        "change-blocklink": "mùth bacadh",
        "contribslink": "mùthaidhean",
+       "emaillink": "cuir post-d",
+       "autoblocker": "Chaidh do bhacadh gu fèin-obrachail on a chaidh an seòladh IP agad a cleachdadh le \"[[User:$1|$1]]\" o chionn goirid.\nIs \"$2\" an t-adhbhar a chaidh $1 a bhacadh",
        "blocklogpage": "Loga nam bacadh",
+       "blocklog-showlog": "Chaidh an cleachdaiche seo a bhacadh roimhe.\nSeo dhut loga a' bhacaidh:",
        "blocklog-showsuppresslog": "Chaidh an cleachdaiche seo a bhacadh 's a mhùchadh roimhe.\nSeo dhut loga a' mhùchaidh:",
        "blocklogentry": "Chaidh bacadh a chrìochnaicheas ann an $2 a chur air [[$1]] $3",
+       "reblock-logentry": "chaidh roghainnean a' bhacaidh atharrachadh airson [[$1]] 's falbhaidh an ùine air $2 $3",
+       "blocklogtext": "Seo loga dhe na bacaidhean 's neo-bhacaidhean air cleachdaichean.\nCha nochd na seòlaidhean IP a chaidh a bhacadh gu fèin-obrachail an-seo.\nFaic [[Special:BlockList|liosta nam bacaidhean]] airson nan toirmeasgan 's bacaidhean a tha gnìomhach an-dràsta.",
        "unblocklogentry": "\"$1\" air a neo-bhacadh",
+       "block-log-flags-anononly": "buill gun ainm a-mhàin",
        "block-log-flags-nocreate": "cruthachadh de chunntasan ùra à comas",
+       "block-log-flags-noautoblock": "chaidh fèin-bhacadh a chur à comas",
+       "block-log-flags-noemail": "chaidh puist-d a chur à comas",
        "block-log-flags-nousertalk": "chan fhaod e an duilleag deasbaireachd aige fhèin a dheasachadh",
+       "block-log-flags-angry-autoblock": "chaidh am fèin-bhacadh adhartach a chur an comas",
+       "block-log-flags-hiddenname": "chaidh an t-ainm-cleachdaiche fhalach",
+       "range_block_disabled": "Tha comas nan rianairean gus bacadh le rainse a chruthachadh a chur à comas.",
        "ipb_expiry_invalid": "Tha an t-àm-crìochnachaidh mì-dhligheach.",
+       "ipb_expiry_temp": "Feumaidh bacadh air ainm-cleachdaiche falaichte a bhith buan.",
        "ipb_hide_invalid": "Cha ghabh an cunntas seo a mhùchadh on a tha barrachd air $1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}} aige.",
+       "ipb_already_blocked": "Chaidh \"$1\" a bhacadh mar-thà.",
+       "ipb-needreblock": "Chaidh $1 a bhacadh mar-thà. A bheil thu airson na roghainnean atharrachadh?",
+       "ipb-otherblocks-header": "{{PLURAL:$1|Bacadh|Bacaidhean}} eile",
+       "unblock-hideuser": "Chan urrainn dhut an cleachdaiche seo a neo-bhacadh on a chaidh ainm-cleachdaiche fhalach.",
+       "ipb_cant_unblock": "Mearachd: Cha deach am bacadh air a bheil an ID $1 a lorg. Dh'fhaoidte gun deach a neo-bhacadh mar-thà.",
+       "ipb_blocked_as_range": "Mearachd: Cha deach an t-seòladh IP $1 a bhacadh gu dìreach 's cha ghabh a neo-bhacadh.\nChaidh a bhacadh 'na phàirt dhen rainse $2 co-dhiù a ghabhas neo-bhacadh.",
        "ip_range_invalid": "Raon IP neo-iomchaidh.",
+       "ip_range_toolarge": "Chan eil bacadh le rainse nas motha na /$1 ceadaichte.",
+       "proxyblocker": "Bacaiche nam progsaidh",
+       "proxyblockreason": "Chaidh an seòladh IP agad a bhacadh air sgàth 's gur e progsaidh fhosgailte a th' ann.\nCuir fios gu solaraiche seirbheis eadar-lìn no sgioba taice a' bhuidhinn agad 's innis dhaibh mun duilgheadas mhòr leis an tèarainteachd a tha seo.",
+       "sorbs": "DNSBL",
+       "sorbsreason": "Nochdaidh an seòladh IP agad mar phrogsaidh fhosgailte air an liosta DNSBL a tha 'ga chleachdadh le {{SITENAME}}.",
+       "sorbs_create_account_reason": "Nochdaidh an seòladh IP agad mar phrogsaidh fhosgailte air an liosta DNSBL a tha 'ga chleachdadh le {{SITENAME}}.\nChan urrainn dhut cunntas a chruthachadh.",
+       "xffblockreason": "Chaidh seòladh IP a tha sa bhann-chinn X-Forwarded-For a bhacadh, seo an t-seòladh agad fhèin no fear aig frithealaiche progsaidh a tha thu a' chleachdadh. Seo adhbhar a' bhacaidh thùsail: $1",
+       "cant-see-hidden-user": "Chaidh an cleachdaiche a tha thu airson bacadh a bhacadh no fhalach mar-thà.\nChan urrainn dhut am bacadh aig a' chleachdaiche a shealltainn no a dheasachadh air sgath 's nach eil cead agad gus cleachdaiche fhalach.",
+       "ipbblocked": "Chan urrainn dhut cleachdaichean eile a bhacadh no a neo-bhacadh on a chaidh do bacadh fhèin.",
+       "ipbnounblockself": "Chan fhaod thu thu fhèin a neo-bhacadh.",
        "lockdb": "Glais an stòr-dàta",
-       "lockconfirm": "Seadh, is ann a tha mi ag iarraidh an stòr-dàta a ghlasadh.",
+       "unlockdb": "Thoir a' ghlas far an stòr-dàta",
+       "lockdbtext": "Ma ghlaiseas tu an stòr-dàta, chan urrainn do chleachdaiche sam bith duilleagan a dheasachadh, na roghainnean aige atharrachadh, an clàr-faire aige a dheasachadh no rud sam bith eile a dhèanamh a rinneadh atharrachadh air an stòr-dàta.\nDearbhaich gur e seo na tha thu airson dèanamh is gun toir thu a' ghlas far an stòr-dàta nuair a bhios tu deiseil le do chuid obrach-glèidhidh.",
+       "unlockdbtext": "Ma bheirh thu a' ghlas far an stòir-dhàta, 's urrainn do chleachdaiche sam bith duilleagan a dheasachadh, na roghainnean aige atharrachadh, an clàr-faire aige a dheasachadh no rud sam bith eile a dhèanamh a rinneadh atharrachadh air an stòr-dàta.\nDearbhaich gur e seo na tha thu airson dèanamh.",
+       "lockconfirm": "Seadh, is ann a tha mi airson an stòr-dàta a ghlasadh.",
+       "unlockconfirm": "Seadh, is ann a tha mi airson a' ghlas a thoirt far an stòir-dhàta.",
        "lockbtn": "Glais an stòr-dàta",
+       "unlockbtn": "Thoir a' ghlas far an stòr-dàta",
+       "locknoconfirm": "Cha dug thu cromag sa bhogsa dhearbhaidh.",
        "lockdbsuccesssub": "Shoirbhich leat le glasadh an stòir-dhàta",
+       "unlockdbsuccesssub": "Thug thu a' ghlas far an stòir-dhàta",
+       "lockdbsuccesstext": "Chaidh an stòr-dàta a ghlasadh.<br />\nCuimhnich gun [[Special:UnlockDB|doir thu a' ghlas far an stòir-dhàta]] nuair a bhios do chuid obrach-glèidhidh dèanta.",
+       "unlockdbsuccesstext": "Chaidh a' ghlas a thoirt far an stòir-dhàta.",
+       "lockfilenotwritable": "Cha ghabh sgrìobhadh ann am faidhle glasaidh an stòir-dhàta.\nFeumaidh comas sgrìobhaidh leis an fhrithealaiche-lìn a bhith ann ach an gabh an stòr-dàta a ghlasadh no a' ghlas a thoirt fo bharr.",
+       "databasenotlocked": "Chan eil an stòr-dàta glaiste.",
        "lockedbyandtime": "(le $1 $2 $3)",
+       "move-page": "Gluais $1",
        "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 <strong>nach dèid</strong> 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<strong>Rabhadh!</strong>\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.",
+       "movepagetext-noredirectfixer": "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-stiùireadh dhan tiotal ùr an uairsin.\nDearbhaich nach bi ath-sheòlaidhean [[Special:DoubleRedirects|dùbailte]] no [[Special:BrokenRedirects|briste]] ann.\n'S ann ort-sa a tha an t-uallach airson dèanamh cinnteach gu bheil na ceanglaichean a' dol dha na h-àitichean a bu chòir.\n\nThoir an aire <strong>nach dèid</strong> 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 gur 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<strong>Rabhadh!</strong>\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 <strong>ach:</strong>\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.",
+       "moveuserpage-warning": "<strong>Rabhadh:</strong> Tha thu airson duilleag cleachdaiche a ghluasad. Thoir an aire nach dèid ach an duilleag a ghluasad 's <em>gur ann nach dèid</em> ainm ùr a thoirt air a' chleachdaiche.",
+       "movecategorypage-warning": "<strong>Rabhadh:</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.",
+       "movenologintext": "Feumaidh tu a bhith 'nad bhall clàraichte 's air [[Special:UserLogin|logadh a-steach]] mus gluais thu duilleag.",
+       "movenotallowed": "Chan eil cead agad duilleagan a ghluasad.",
+       "movenotallowedfile": "Chan eil cead agad faidhlichean a ghluasad.",
+       "cant-move-user-page": "Chan eil cead agad duilleagan cleachdaiche a ghluasad (ach fo-dhuilleagan).",
+       "cant-move-to-user-page": "Chan eil cead agad duilleag a ghluasad gu duilleag cleachdaiche (ach gu fo-dhuilleag cleachdaiche).",
        "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:",
        "movepagebtn": "Gluais duilleag",
        "pagemovedsub": "Shoirbhich leat leis a' ghluasad",
        "movepage-moved": "<strong>Chaidh \"$1\" a ghluasad a \"$2\"</strong>",
+       "movepage-moved-redirect": "Chaidh ath-stiùireadh a chruthachadh.",
        "movepage-moved-noredirect": "Chaidh cruthachadh an ath-stiùiridh seo a mhùchadh.",
        "articleexists": "Tha duilleag ann mu thràth air a bheil an t-ainm seo no chan eil an t-ainm a thagh thu dligheachd.\nNach tagh thu ainm eile?",
+       "cantmove-titleprotected": "Chan urrainn dhut duilleag a ghluasad dhan ionad seo on a chaidh an tiotal ùr a dhìon o chruthachadh",
        "movetalk": "Gluais an duilleag deasbaireachd a tha co-cheangailte ris",
+       "move-subpages": "Gluais fo-duilleagan (suas ri $1)",
        "move-talk-subpages": "Gluais na fo-dhuilleagan aig duilleag deasbaireachd (suas ri $1)",
+       "movepage-page-exists": "Chan duilleag air a bheil $1 ann mar-thà 's cha ghabh sgrìobhadh thairis oirre gu fèin-obrachail.",
+       "movepage-page-moved": "Chaidh duilleag $1 a ghluasad gu $2.",
+       "movepage-page-unmoved": "Cha b' urrainn dhuinn duilleag $1 a ghluasad gu $2.",
+       "movepage-max-pages": "Tha na tha ceadaichte de $1 {{PLURAL:$1|duilleag|dhuilleag|duilleagan|duilleag}} a ghluasad 's cha dèid a bharrachd dhiubh a ghluasad gu fèin-obrachail.",
        "movelogpage": "Loga nan gluasadan",
+       "movelogpagetext": "Chì thu liosta dhe na duilleagan a chaidh gluasad gu h-ìosal.",
        "movesubpage": "{{PLURAL:$1|Fo-dhuilleag|Fo-dhuilleagan}}",
+       "movesubpagetext": "Tha $1 {{PLURAL:$1|fho-dhuilleag|fho-dhuilleag|fo-dhuilleagan|fo-dhuilleag}} aig an duilleag seo a chì thu gu h-ìosal.",
+       "movenosubpage": "Chan eil fo-dhuilleag aig an duilleag seo.",
        "movereason": "Adhbhar:",
        "revertmove": "till",
        "delete_and_move": "Sguab às agus gluais",
+       "delete_and_move_text": "== Tha sguabadh às a dhìth ==\nTha an duilleag-uidhe \"[[:$1]]\" ann mar-thà.\nA bheil thu airson a sguabadh às ach am bidh rum airson a' ghluasaid ann?",
        "delete_and_move_confirm": "Siuthad, sguab às an duilleag",
+       "delete_and_move_reason": "Chaidh a sguabadh às gus rum a airson a' ghluasaid o \"[[$1]]\" a chruthachadh",
+       "selfmove": "Tha tiotalan an tùis a' chinn-uidhe co-ionnann;\nchan urrainn dhut duilleag a ghluasad dhan ionad aice fhèin.",
        "immobile-source-namespace": "Cha ghabh duilleagan a ghluasad san ainm-spàs \"$1\"",
        "immobile-target-namespace": "Cha ghabh duilleagan a ghluasad dhan ainm-spàs \"$1\"",
+       "immobile-target-namespace-iw": "Chan eil ceangal eadar-uicidh 'na cheann-uidhe dligheach airson gluasad duilleige.",
+       "immobile-source-page": "Cha ghabh an duilleag seo gluasad.",
+       "immobile-target-page": "Cha ghabh gluasad gu tiotal a' chinn-uidhe seo.",
+       "bad-target-model": "Tha an ceann-uidhe a dh'iarr thu a' chleachdadh modail susbainte eadar-dhealaichte. Cha ghabh iompachadh o $1 gu $2,",
        "imagenocrossnamespace": "Cha ghabh faidhle a ghluasad gu ainm-spàs nach eil 'na fhaidhle",
        "nonfile-cannot-move-to-file": "Cha ghabh rud nach eil 'na fhaidhle a ghluasad gu ainm-spàs a bheil 'na fhaidhle",
+       "imagetypemismatch": "Cha fhreagair leudachan an fhaidhle ùir ri a sheòrsa",
+       "imageinvalidfilename": "Tha ainm-uidhe an fhaidhle mì-dhligheach",
+       "fix-double-redirects": "Ùraich gach ath-stiùireadh a thomhas ris an tiotail tùsail",
+       "move-leave-redirect": "Fàg ath-stiùireadh ann",
+       "protectedpagemovewarning": "<strong>Rabhadh: Chaidh an duilleag seo a dhìon 's chan urrainn ach dhan fheadhainn aig a bheil ùghdarras rianaire a ghluasad.</strong>\nChì thu an clàr mu dheireadh san loga mar fhiosrachadh dhut gu h-ìosal:",
+       "semiprotectedpagemovewarning": "<strong>An aire:</strong> Chaidh an duilleag seo a dhìon 's chan fhaod ach cleachdaichean clàraichte a ghluasad.\nSeo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
        "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",
+       "exporttext": "'S urrainn dhut teacsa is eachdraidh an deasachaidh aig duilleag no duilleagan sònraichte às-phortachadh le XML timcheall air.\nGabhaidh seo ion-phortachadh gu uicidh eile a chleachdas MediaWiki air an [[Special:Import|duilleag ion-phortachaidh]].\n\nGus duilleagan às-phortachadh, cuir a-steach na tiotalan sa bhogsa-teacsa gu h-ìosal, gach tiotal air loidhne fa leth, agus tagh a bheil thu ag iarraidh am mùthadh làithreach cho math ri seann mhùthaidhean le loidhnichean eachdraidh nan duilleagan no a bheil thu ag iarraidh am mùthadh làithreach le fiosrachadh mun deasachadh mu dheireadh.\n\nMa chuir thu an roghainn eile romhad, 's urrainn dhut ceangal a chleachdadh cuideachd, mar eisimpleir [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] airson na duilleige \"[[{{MediaWiki:Mainpage}}]]\".",
+       "exportall": "Às-phortaich na duilleagan uile",
+       "exportcuronly": "Cha ghabh a-steach ach an tionndadh làithreach seach an eachdraidh slàn",
+       "exportnohistory": "----\n<strong>An aire:</strong> Chaidh às-phortachadh na h-eachdraidh slàin aig na duilleagan seo leis an foirm seo a chur à comas air sàilleibh dèanadais.",
        "exportlistauthors": "Cuir liosta shlàn dhe na deasaichean ris gach duilleag",
+       "export-submit": "Às-phortaich",
        "export-addcattext": "Cuir duilleagan ris o roinn-seòrsa:",
+       "export-addcat": "Cuir ris",
        "export-addnstext": "A h-uile duilleag on ainm-spàs:",
+       "export-addns": "Cuir ris",
+       "export-download": "Sàbhail mar fhaidhle",
+       "export-templates": "Gabh a-steach na teamplaidean",
+       "export-pagelinks": "Gabh a-steach na duilleagan ceangailte gu doimhe de:",
        "allmessages": "Teachdaireachdan an t-siostaim",
        "allmessagesname": "Ainm",
        "allmessagesdefault": "Teacsa bunaiteach na teachdaireachd",
+       "allmessagescurrent": "Teacsa na teachdaireachd an-dràsta",
        "allmessagestext": "Seo liosta de theachdaireachdan an t-siostaim a tha ri làimh ann an ainm-spàs MediaWiki.\nTadhail air [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Ionadaileadh MediaWiki] is [//translatewiki.net translatewiki.net] ma tha thu airson pàirt a ghabhail ann an ionadaileadh MediaWiki.",
+       "allmessagesnotsupportedDB": "Cha ghabh an duilleag seo cleachdadh on a chaidh <strong>$wgUseDatabaseMessages</strong> a chur à comas.",
+       "allmessages-filter-legend": "Criathrag",
+       "allmessages-filter": "Criathraich le staid a' ghnàthachaidh:",
+       "allmessages-filter-unmodified": "Gun atharrachadh",
+       "allmessages-filter-all": "Na h-uile",
+       "allmessages-filter-modified": "Air atharrachadh",
+       "allmessages-prefix": "Criathraich le ro-leasachan:",
+       "allmessages-language": "Cànan:",
+       "allmessages-filter-submit": "Siuthad",
+       "allmessages-filter-translate": "Eadar-theangachaich",
        "thumbnail-more": "Meudaich",
        "filemissing": "Faidhle a dhìth",
        "thumbnail_error": "Mearachd le cruthachadh na dealbhaige: $1",
+       "thumbnail_error_remote": "Teachdaireachd na mearachd o $1:\n$2",
+       "djvu_page_error": "Tha duilleag DjVu a-mach às an rainse",
+       "djvu_no_xml": "Cha b' urrainn dhuinn an XML fhaighinn airson an fhaidhle DjVu",
        "thumbnail-temp-create": "Cha deach leinn faidhle sealach na dealbhaige a chruthachadh",
        "thumbnail-dest-create": "Cha deach leinn an dealbhag a shàbhaladh gun cheann-uidhe",
        "thumbnail_invalid_params": "Paramadairean na dealbhaige mì-dhligheach",
+       "thumbnail_dest_directory": "Cha b' urrainn dhuinn am pasgan-uidhe a chruthachadh",
+       "thumbnail_image-type": "Cha chuirear taic ris an t-seòrsa deilbh",
+       "thumbnail_gd-library": "Chan eil rèiteachadh na tasglainn GD coileanta: Tha am foincsean $1 a dhìth",
+       "thumbnail_image-missing": "Tha faidhle a dhìth a-rèit coltais: $1",
        "thumbnail_image-failure-limit": "Chaidh feuchainn cus tursan ($1 no a bharrachd) o chionn goirid gus an dealbhag seo a reandaradh. Feuch ris a-rithist uaireigin eile.",
+       "import": "Ion-phortaich duilleagan",
+       "importinterwiki": "Ion-phortachadh tar-uicidh",
+       "import-interwiki-text": "Tagh uicidh 's tiotal na duilleige airson ion-phortachadh.\nThèid cinn-là nam mùthaidhean 's ainmean nan deasaichean a ghlèidheadh.\nThèid gach gnìomh ion-phortachadh tar-uicidh a chur ris an [[Special:Log/import|loga ion-phortachaidh]].",
+       "import-interwiki-source": "An uicidh/duilleag thùsail:",
+       "import-interwiki-history": "Dèan lethbhreac de dh'eachdraidh nam mùthaidhean slàna airson na duilleige seo",
+       "import-interwiki-templates": "Gabh a-steach na teamplaidean uile",
+       "import-interwiki-submit": "Ion-phortaich",
        "import-interwiki-namespace": "Ainm-spàs-uidhe:",
+       "import-interwiki-rootpage": "Duilleag freumha a' chinn-uidhe (roghainneil):",
+       "import-upload-filename": "Ainm an fhaidhle:",
+       "import-comment": "Beachd:",
+       "importtext": "Às-phortaich am faidhle on uicidh tùsail le [[Special:Export|goireas an às-phortachaidh]].\nSàbhail e air a' choimpiutair agad is luchdaich suas e an-seo.",
+       "importstart": "Af ion-phortachadh duilleagan...",
        "import-revision-count": "$1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mhùthadh}}",
+       "importnopages": "Chan eil duilleag ri ion-phortachadh ann.",
+       "imported-log-entries": "Chaidh $1 {{PLURAL:$1|innteart|innteart|innteartan|innteart}} an loga ion-phortachadh.",
+       "importfailed": "Dh'fhàillig leis an ion-phortachadh: <nowiki>$1</nowiki>",
+       "importunknownsource": "Chan aithnich sinn seòrsa an tùis airson an ion-phortachaidh",
+       "importcantopen": "Cha deach leinn am faidhle ion-phortachaidh fhosgladh.",
+       "importbadinterwiki": "Droch cheangal eadar-uicodh",
+       "importsuccess": "Tha an t-ion-phortachadh coileanta!",
+       "importnosources": "Cha deach tùs ion-phortachadh tar-uicidh a mhìneachadh agus tha luchdadh suas dìreach nan eachdraidhean à comas.",
+       "importnofile": "Cha deach faidhle ion-phortachaidh a luchdadh suas.",
+       "importuploaderrorsize": "Dh'fhàillig le luchdadh suas an fhaidhle ion-phortachaidh.\nTha am faidhle nas motha na tha ceadaichte.",
+       "importuploaderrorpartial": "Dh'fhàillig le luchdadh suas an fhaidhle ion-phortachaidh.\nCha deach ach pàirt dhen fhaidhle a luchdadh suas.",
+       "importuploaderrortemp": "Dh'fhàillig le luchdadh suas an fhaidhle ion-phortachaidh.\nTha pasgan sealach a dhìth.",
+       "import-parse-failure": "Dh'fhàillig le parsadh an XML ion-phortachaidh",
+       "import-noarticle": "Chan eil duilleag ri ion-phortachadh ann!",
+       "import-nonewrevisions": "Cha deach mùthadh ion-phortachadh (bha iad uile ann roimhe no chaidh an leigeil seachad ri linn mhearachdan).",
+       "xml-error-string": "$1 air loidhne $2, colbh $3 (baidht $4): $5",
+       "import-upload": "Luchdaich suas dàta XML",
+       "import-token-mismatch": "Chaidh dàta an t-seisein air chall.\nFeuch ris a-rithist.",
+       "import-invalid-interwiki": "Cha ghabh ion-phortachadh in uicidh a shònraich thu.",
+       "import-error-edit": "Cha deach an duilleag \"$1\" ion-phortachadh o nach fhaod thu a deasachadh.",
+       "import-error-create": "Cha deach an duilleag \"$1\" ion-phortachadh o nach fhaod thu a cruthachadh.",
+       "import-error-interwiki": "Cha deach an duilleag \"$1\" ion-phortachadh on a chaidh ainm a ghlèidheadh airson ceangal a-mach (eadar-uicidh).",
        "import-error-special": "Cha deach an duilleag \"$1\" ion-phortadh on a bhuineas i ri ainm-spàs sònraichte nach ceadaich duilleagan.",
+       "import-error-invalid": "Cha deach an duilleag \"$1\" ion-phortachadh on a tha ainm mì-dhligheach.",
+       "import-error-unserialize": "Cha ghabh mùthadh $2 dhen duilleag \"$1\" a thogail on tionndadh serialized. Chaidh aithris gun cleachd am mùthadh modail susbaint $3 a tha serialized mar $4.",
+       "import-error-bad-location": "Cha ghabh am mùthadh $2 a chleachdas modail susbainte $3 a stòradh air \"$1\" air an uicidh seo o nach cuir an duilleag ud taic ris a' mhodail seo.",
+       "import-options-wrong": "{{PLURAL:$2|Roghainn cearr|Roghainnean cearra}}: <nowiki>$1</nowiki>",
+       "import-rootpage-invalid": "Tha an duilleag freumha a chaidh a thoirt seachad 'na thiotal mì-dhligheach.",
        "import-rootpage-nosubpage": "Cha cheadaich an t-ainm-spàs \"$1\" aig an duilleag freumha fo-duilleagan.",
+       "importlogpage": "Loga an ion-phortachaidh",
+       "importlogpagetext": "Ion-phortachadh rianachd de dhuilleagan aig a bheil eachdraidh mhùthaidhean o uicidhean eile.",
+       "import-logentry-upload": "chaidh [[$1]] ion-phortachadh le luchdadh suas faidhle",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|mhùthadh|mùthadh|mùthaidhean|mùthadh}}",
+       "import-logentry-interwiki": "air fhaighinn 'na thar-uicidh $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} o $2",
+       "javascripttest": "Deuchainn air JavaScript",
+       "javascripttest-title": "A' ruith deuchainnean aig $1",
+       "javascripttest-pagetext-noframework": "Tha an duilleag seo glèidhte airson deuchainnean JavaScript a ruith.",
+       "javascripttest-pagetext-unknownframework": "Framework deuchainn \"$1\" neo-aithnichte.",
+       "javascripttest-pagetext-frameworks": "Feuch an tagh thu aon dhe na frameworks deuchainn seo: $1",
+       "javascripttest-pagetext-skins": "Tagh craiceann airson ruith nan deuchainnean:",
+       "javascripttest-qunit-intro": "Faic [$1 docamaideadh nan deuchainnean] air mediawiki.org.",
+       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
        "tooltip-pt-userpage": "An duilleag phearsanta agad",
+       "tooltip-pt-anonuserpage": "Duilleag a' chleachdaiche airson an t-seòlaidh IP leis a bheil thu a' deasachadh",
        "tooltip-pt-mytalk": "Duilleag do dheasbaireachd",
+       "tooltip-pt-anontalk": "deasbaireachd mu dheasachaidhean on t-seòladh IP seo",
        "tooltip-pt-preferences": "Do roghainnean",
        "tooltip-pt-watchlist": "Seo liosta nan duilleagan a tha thu a' cumail sùil orra a thaobh mhùthaidhean a nithear orra",
        "tooltip-pt-mycontris": "Liosta na h-obrach a rinn thu",
        "tooltip-ca-viewsource": "Tha an duilleag seo fo dhìon.\n'S urrainn dhut a tùs fhaicinn",
        "tooltip-ca-history": "Seann mhùthaidhean na duilleige seo",
        "tooltip-ca-protect": "Dìon an duilleag seo",
+       "tooltip-ca-unprotect": "Atharraich dìon na duilleige seo",
        "tooltip-ca-delete": "Sguab às an duilleag seo",
+       "tooltip-ca-undelete": "Aisig na deasachaidhean a chaidh a dhèanamh air an duilleag seo mus deach a sguabadh às",
        "tooltip-ca-move": "Gluais an duilleag seo",
        "tooltip-ca-watch": "Cuir an duilleag seo air mo chlàr-faire",
        "tooltip-ca-unwatch": "Thoir an duilleag seo far mo chlàir-fhaire",
        "tooltip-t-permalink": "Dèan ceangal buan gu mùthadh seo na duilleige",
        "tooltip-ca-nstab-main": "Seall duilleag na susbainte",
        "tooltip-ca-nstab-user": "Seall duilleag a' chleachdaiche",
+       "tooltip-ca-nstab-media": "Seall duilleag a' mheadhain",
        "tooltip-ca-nstab-special": "Seo duilleag shònraichte, chan urrainn dhut an duilleag fhèin a dheasachadh",
        "tooltip-ca-nstab-project": "Seall duilleag a' phròiseict",
        "tooltip-ca-nstab-image": "Seall duilleag an fhaidhle",
+       "tooltip-ca-nstab-mediawiki": "Seall teachdaireachd an t-siostaim",
        "tooltip-ca-nstab-template": "Seall an teamplaid",
+       "tooltip-ca-nstab-help": "Seall duilleag na cobharach",
        "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-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-normal-submit": "Thoir tiotalan air falbh",
        "tooltip-watchlistedit-raw-submit": "Ùraich an clàr-faire",
+       "tooltip-recreate": "Ath-chruthaich an duilleag seo ged a chaidh a sguabadh às",
+       "tooltip-upload": "Tòisich air an luchdadh suas",
        "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-preferences-save": "Sàbhail na roghainnean",
        "tooltip-summary": "Cuir a-steach gearr-chunntas",
+       "interlanguage-link-title": "$1 – $2",
+       "interlanguage-link-title-nonlang": "$1 – $2",
+       "common.css": "/* Thèid an CSS a chuireas tu an-seo a chur an sàs air a h-uile craiceann */",
+       "print.css": "/* Bidh buaidh aig an CSS a chuireas tu an-seo air às-chur a' clò-bhualaidh */",
+       "noscript.css": "/* Bidh buaidh aig an CSS a chuireas tu an-seo air na daoine aig a bheil JavaScript à comas */",
+       "group-autoconfirmed.css": "/* Cha bhi buaidh aig an CSS a chuireas tu an-seo ach air cleachdaichean fèin-dearbhte */",
+       "group-user.css": "/* Cha bhi buaidh aig an CSS a chuireas tu an-seo ach air cleachdaichean clàraichte */",
+       "group-bot.css": "/* Cha bhi buaidh aig an CSS a chuireas tu an-seo ach air botaichean */",
+       "group-sysop.css": "/* Cha bhi buaidh aig an CSS a chuireas tu an-seo ach air rianairean */",
+       "group-bureaucrat.css": "/* Cha bhi buaidh aig an CSS a chuireas tu an-seo ach air biurocratan */",
+       "common.js": "/* Thèid gach JavaScript a chuireas tu an-seo a luchdadh leis gach luchdadh duilleige airson a h-uile cleachdaiche. */",
+       "group-autoconfirmed.js": "/* Cha dèid an JavaScript a chuireas tu an-seo a luchdadh ach airson nan cleachdaichean fèin-dearbhte */",
+       "group-user.js": "/* Cha dèid an JavaScript a chuireas tu an-seo a luchdadh ach airson nan cleachdaichean clàraichte */",
+       "group-bot.js": "/* Cha dèid an JavaScript a chuireas tu an-seo a luchdadh ach airson botaichean */",
+       "group-sysop.js": "/* Cha dèid an JavaScript a chuireas tu an-seo a luchdadh ach airson rianairean */",
+       "group-bureaucrat.js": "/* Cha dèid an JavaScript a chuireas tu an-seo a luchdadh ach airson biurocratan */",
        "anonymous": "{{PLURAL:$1|Cleachdaiche|Cleachdaichean}} gun ainm o {{SITENAME}}",
        "siteuser": "cleachdaiche {{SITENAME}} $1",
+       "anonuser": "{{SITENAME}} cleachdaiche gun ainm $1",
+       "lastmodifiedatby": "Chaidh an duilleag seo a mhùthadh $1 $2 le $3 an turas mu dheireadh.",
        "othercontribs": "Stèidhichte air obair le $1.",
        "others": "eile",
        "siteusers": "{{PLURAL:$2|Cleachdaiche|Cleachdaichean}} {{SITENAME}} $1",
+       "anonusers": "{{PLURAL:$2|Cleachdaiche|Cleachdaichean}} {{SITENAME}} gun ainm $1",
+       "creditspage": "Cliù airson na duilleige",
+       "nocredits": "Chan eil fiosrachadh cliùtha ri làimh airson na duilleige seo.",
+       "spamprotectiontitle": "Chriathrag dìona o spama",
+       "spamprotectiontext": "Chaidh an teacsa a bha thu airson a shàbhaladh a bhacadh le criathrag an spama.\nDh'fhaoidte gun do dh'adhbharaich ceangal seo a cheanglas ri làrach a-muigh a tha air an dubh-liosta.",
+       "spamprotectionmatch": "Seo an teacsa a thug aire air a' chriathrag spama againn: $1",
+       "spambot_username": "Sgioblachadh spama aig MediaWiki",
+       "spam_reverting": "A' tilleadh dhan mhùthadh mu dheireadh anns nach eil ceangal gu $1",
+       "spam_blanking": "Cha ceangal gu $1 anns gach mùthadh, 'ga bhànachadh",
+       "spam_deleting": "Cha ceangal gu $1 anns gach mùthadh, 'ga sguabadh às",
+       "simpleantispam-label": "Dearbhadh an aghaidh spama.\n<strong>NA</strong> lìon seo!",
+       "pageinfo-title": "Fiosrachadh airson \"$1\"",
+       "pageinfo-not-current": "Duilich, ach cha ghabh am fiosrachadh seo a thoirt seachad airson seann mhùthaidhean.",
+       "pageinfo-header-basic": "Fiosrachadh bunasach",
+       "pageinfo-header-edits": "Eachdraidh an deasachaidh",
+       "pageinfo-header-restrictions": "Dìon na duilleige",
+       "pageinfo-header-properties": "Roghainnean na duilleige",
+       "pageinfo-display-title": "Tiotal a thèid a shealltainn",
+       "pageinfo-default-sort": "Iuchair bunaiteach an t-seòrsachaidh \\",
+       "pageinfo-length": "Faid na duilleige (ann am baidhtichean)",
+       "pageinfo-article-id": "ID na duilleige",
+       "pageinfo-language": "Cànan susbaint na duilleige",
+       "pageinfo-content-model": "Modail susbaint na duilleige",
+       "pageinfo-robot-policy": "Inneacsadh le robotairean",
+       "pageinfo-robot-index": "Ceadaichte",
+       "pageinfo-robot-noindex": "Neo-cheadaichte",
+       "pageinfo-views": "Air a sealltainn",
+       "pageinfo-watchers": "A' cumail sùil air",
+       "pageinfo-few-watchers": "Tha nas lugha na $1 a' cumail sùil air",
+       "pageinfo-redirects-name": "Ath-stiùiridhean dhan duilleag seo",
+       "pageinfo-redirects-value": "$1",
+       "pageinfo-subpages-name": "Fo-dhuilleagan",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|ath-stiùireadh|ath-stiùireadh|ath-stiùiridhean|ath-stiùireadh}}; $3 {{PLURAL:$3|nach eil 'na ath-stiùireadh|nach eil 'nan ath-stiùireadh}})",
+       "pageinfo-firstuser": "Cruthaichear na duilleige",
+       "pageinfo-firsttime": "Ceann-là a chaidh a chruthachadh",
+       "pageinfo-lastuser": "An deasaiche mu deireadh",
+       "pageinfo-lasttime": "Ceann-là an deasachaidh mu dheireadh",
+       "pageinfo-edits": "Uiread nan deasachaidhean",
+       "pageinfo-authors": "Uiread nan ùghdaran fa leth",
+       "pageinfo-recent-edits": "Uiread nan deasachaidhean o chionn goirid (o chionn $1)",
+       "pageinfo-recent-authors": "Uiread nan ùghdaran fa leth o chionn goirid",
+       "pageinfo-magic-words": "{{PLURAL:$1|Facal|Faclan}} draoidheach ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Roinn-seòrsa fhalaichte|Roinnean-seòrsa falaichte}} ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|Teamplaid 'ga gabhail a-steach 'na iomradh|Teamplaidean 'gan gabhail a-steach 'nan iomradh}} ($1)",
+       "pageinfo-transclusions": "{{PLURAL:$1|Duilleag 'ga gabhail a-steach 'na iomradh|Duilleagan 'gan gabhail a-steach 'nan iomradh}} air ($1)",
        "pageinfo-toolboxlink": "Fiosrachadh mun duilleag",
+       "pageinfo-redirectsto": "'Na ath-stiùireadh gu",
+       "pageinfo-redirectsto-info": "fiosrachadh",
+       "pageinfo-contentpage": "'Ga chunntadh 'na duilleag susbainte",
+       "pageinfo-contentpage-yes": "Seadh",
        "pageinfo-protect-cascading": "'Ga dhìon o bhith mar eas on a sheo",
+       "pageinfo-protect-cascading-yes": "Seadh",
        "pageinfo-protect-cascading-from": "'Ga dhìon o bhith mar eas uaithe",
        "pageinfo-category-info": "Fiosrachadh mun roinn-seòrsa",
+       "pageinfo-category-pages": "Àireamh de dhuilleagan",
        "pageinfo-category-subcats": "Àireamh de fho-roinnean-seòrsa",
+       "pageinfo-category-files": "Àireamh de dh'fhaidhlichean",
        "markaspatrolleddiff": "Cuir comharra freiceadain ris",
        "markaspatrolledtext": "Cuir comharra freiceadain ris an duilleag seo",
        "markedaspatrolled": "Comharra freiceadain 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",
+       "deletedrevision": "Chaidh an seann mhùthadh $1 a sguabadh às",
+       "filedeleteerror-short": "Mearachd a' sguabadh às an fhaidhle: $1",
+       "filedeleteerror-long": "Thachair mearachd le sguabadh às an fhaidhle:\n\n$1",
+       "filedelete-missing": "cha ghabh am faidhle \"$1\" a sguabadh às o nach eil e ann.",
+       "filedelete-old-unregistered": "chan eil am mùthadh \"$1\" aig an fhaidhle san stòr-dàta.",
+       "filedelete-current-unregistered": "chan eil am faidhle \"$1\" a chaidh a thoirt seachad san stòr-dàta.",
+       "filedelete-archive-read-only": "Chan urrainn dhan fhrithealaiche-lìn sgrìobhadh sa phasgan tasglainn \"$1\".",
        "previousdiff": "← Mùthadh nas sine",
        "nextdiff": "Deasachadh nas ùire →",
+       "mediawarning": "<strong>Rabhadh:</strong> dh'fhaoidte gu bheil còd droch-rùnach am broinn an t-seòrsa faidhle seo.\nDh'fhaoidte gun tèid tèarainteachd an t-siostaim agad a bhriseadh ma ruitheas tu e.",
        "imagemaxsize": "Crìochan air meud an deilbh:<br /><em>(airson duilleagan tuairisgeul an fhaidhle)</em>",
        "thumbsize": "Meud na dealbhaige:",
+       "widthheight": "$1 × $2",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|duilleag|dhuilleag|duilleagan|duilleag}}",
+       "file-info": "meud an fhaidhle: $1, seòrsa MIME: $2",
        "file-info-size": "$1 × $2 pixel, meud an fhaidhle: $3, seòrsa MIME: $4",
+       "file-info-size-pages": "$1 × $2 piogsail, meud an fhaidhle: $3, seòrsa MIME: $4, $5 {{PLURAL:$5|duilleag|dhuilleag|duilleagan|duilleag}}",
        "file-nohires": "Chan eil dùmhlachd-bhreacaidh nas fhearr ri fhaighinn.",
        "svg-long-desc": "Faidhle SVG, a-rèir ainm $1 × $2 pixel, meud faidhle: $3",
+       "svg-long-desc-animated": "Faidhle SVG beòthaichte, a-rèir ainm $1 × $2 pixel, meud faidhle: $3",
+       "svg-long-error": "Faidhle SVG mì-dhligheach: $1",
        "show-big-image": "Am faidhle tùsail",
+       "show-big-image-preview": "Meud an ro-sheallaidh seo: $1.",
+       "show-big-image-other": "{{PLURAL:$2|Dùmhlachd-bhreacaidh|Dùmhlachdan-breacaidh}} eile: $1.",
+       "show-big-image-size": "$1 × $2 piogsail",
+       "file-info-gif-looped": "lùbte",
+       "file-info-gif-frames": "$1 {{PLURAL:$1|fhrèam|fhrèam|frèaman|frèam}}",
+       "file-info-png-looped": "lùbte",
+       "file-info-png-repeat": "air a chluich $1 {{PLURAL:$1|turas|thuras|tursan|turas}}",
+       "file-info-png-frames": "$1 {{PLURAL:$1|fhrèam|fhrèam|frèaman|frèam}}",
        "file-no-thumb-animation": "<strong>An aire: Cha bhi beòthachadh air dealbhagan an fhaidhle seo ri linn cuingeachaidhean teicnigeach.</strong>",
        "file-no-thumb-animation-gif": "<strong>An aire: Cha bhi beòthachadh air dealbhagan airson dealbhan GIF le dùmhlachd-bhreacaidh àrd mar an tè seo ri linn cuingeachaidhean teicnigeach.</strong>",
+       "newimages": "Gailearaidh nan dealbhan ùra",
+       "imagelisttext": "Chì thu liosta dhe <strong>$1</strong> {{PLURAL:$1|fhaidhle|fhaidhle|faidhlichean|faidhle}} gu h-ìosal air {{PLURAL:$1|a sheòrsachadh|an seòrsachadh}} $2.",
+       "newimages-summary": "Seallaidh an duilleag shònraichte seo na faidhlichean as ùire a chaidh a luchdadh suas.",
+       "newimages-legend": "Criathrag",
+       "newimages-label": "Ainm faidhle (no pàirt dheth):",
+       "newimages-showbots": "Seall luchdaidhean suas le botaichean",
+       "noimages": "Chan eil dad ri fhaicinn an-seo.",
        "ilsubmit": "Rannsaich",
        "bydate": "air ceann-latha",
+       "sp-newimages-showfrom": "Seall na faidhlichean ùra a-mach o $1 $2",
+       "video-dims": "$1, $2 × $3",
+       "seconds-abbrev": "$1 diog",
+       "minutes-abbrev": "$1 mion",
+       "hours-abbrev": "$1 uair",
+       "days-abbrev": "$1 là",
+       "seconds": "{{PLURAL:$1|$1 diog|$1 dhiog|$1 diogan|$1 diog}}",
+       "minutes": "{{PLURAL:$1|$1 mhionaid|$1 mhionaid|$1 mionaidean|$1 mionaid}}",
+       "hours": "{{PLURAL:$1|$1 uair|$1 uair|$1 uairean|$1 uair}}",
+       "days": "{{PLURAL:$1|$1 latha|$1 latha|$1 làithean|$1 latha}}",
+       "weeks": "{{PLURAL:$1|$1 seachdain|$1 sheachdain|$1 seachdainean|$1 seachdain}}",
+       "months": "{{PLURAL:$1|$1 mhìos|$1 mhìos|$1 mìosan|$1 mìos}}",
+       "years": "{{PLURAL:$1|$1 bhliadhna|$1 bhliadhna|$1 bliadhnaichean|$1 bliadhna}}",
+       "ago": "o chionn $1",
+       "just-now": "an-dràsta fhèin",
+       "hours-ago": "o chionn $1 {{PLURAL:$1|uair|uair|uairean|uair}}",
+       "minutes-ago": "o chionn $1 {{PLURAL:$1|mhionaid|mhionaid|mionaidean|mionaid}}",
+       "seconds-ago": "o chionn $1 {{PLURAL:$1|diog|dhiog|diogan|diog}}",
+       "monday-at": "DiLuain $1",
+       "tuesday-at": "DiMàirt $1",
+       "wednesday-at": "DiChiadain $1",
+       "thursday-at": "DiarDaoin $1",
+       "friday-at": "DihAoine $1",
+       "saturday-at": "DiSathairne $1",
+       "sunday-at": "DiDòmhnaich $1",
+       "yesterday-at": "An-dè $1",
        "bad_image_list": "Seo mar a tha am fòrmat:\n\nCha bheachdaichear ach air buill liosta (loidhniche a tha * air am beulaibh).\nFeumaidh a' chiad cheangal air loidhne a bhith 'na cheangal ri droch fhaidhle.\nThathar a' coimhead air ceangal sam bith eile san loidhne sin mar eisgeachdan, 's e sin duilleagan far am faod am faidhle a bhith sa loidhne.",
        "metadata": "Metadata",
        "metadata-help": "Tha fiosrachadh a bharrachd san fhaidhle seo, 's mathaid o chamara digiteach no sganair a chaidh a chleachdadh gus a chruthachadh no a dhigiteachadh.\nMa chaidh am faidhle tùsail atharrachadh, faodaidh nach eil cuid dhen fhiosrachadh ceart a thaobh an fhaidhle atharraichte tuilleadh.",
        "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",
+       "metadata-langitem": "<strong>$2:</strong> $1",
+       "metadata-langitem-default": "$1",
+       "exif-imagewidth": "Leud",
+       "exif-imagelength": "Àirde",
+       "exif-bitspersample": "Biod sa cho-phàirt",
+       "exif-compression": "Sgeama an dùmhlachaidh",
+       "exif-photometricinterpretation": "Co-dhèanamh nam piogsail",
+       "exif-orientation": "Comhair",
+       "exif-samplesperpixel": "Àireamh nan co-phàirtean",
+       "exif-planarconfiguration": "Rian an dàta",
+       "exif-xresolution": "Dùmhlachd-bhreacaidh chòmhnard",
+       "exif-yresolution": "Dùmhlachd-bhreacaidh inghearach",
+       "exif-stripoffsets": "Ionad dàta an deilbh",
+       "exif-jpeginterchangeformatlength": "Baidhtichean de dhàta JPEG",
+       "exif-datetime": "Ceann-là 's àm aig atharrachadh an fhaidhle",
+       "exif-imagedescription": "Tiotal an deilbh",
+       "exif-make": "Dèanadair a' chamara",
+       "exif-model": "Modail a' chamara",
+       "exif-software": "Am bathar-bog a chleachdadh",
+       "exif-artist": "Ùghdar",
        "exif-copyright": "Seilbheadair na còrach-lethbhreac",
+       "exif-exifversion": "Tionndadh de Exif",
+       "exif-flashpixversion": "An tionndadh de Flashpix ris an cuirear taic",
+       "exif-compressedbitsperpixel": "Modh dùmhlachd-bhreacaidh an deilbh",
+       "exif-pixelydimension": "Leud an deilbh",
+       "exif-pixelxdimension": "Àirde an deilbh",
+       "exif-usercomment": "Beachdan nan cleachdaichean",
+       "exif-relatedsoundfile": "Faidhle fuaime co-cheangailte ris",
+       "exif-datetimeoriginal": "Ceann-là 's àm a chaidh an dàta a chruthachadh",
+       "exif-datetimedigitized": "Ceann-là 's àm a chaidh cruth digiteach a chur air an dàta",
+       "exif-exposuretime-format": "$1 diog ($2)",
+       "exif-flash": "Solas-boillsgidh",
+       "exif-focallength-format": "$1 mm",
+       "exif-filesource": "Tùs an fhaidhle",
        "exif-devicesettingdescription": "Tuairisgeul aig roghainnean an uidheim",
+       "exif-objectname": "Tiotal goirid",
+       "exif-specialinstructions": "Stiùireadh sònraichte",
+       "exif-headline": "Ceann-sgrìobhadh",
+       "exif-credit": "Cliù/Solaraiche",
+       "exif-source": "Tùs",
+       "exif-editstatus": "Staid deasachaidh an deilbh",
+       "exif-contact": "Fiosrachadh conaltraidh",
+       "exif-writer": "Sgrìobhadair",
+       "exif-languagecode": "Cànan",
        "exif-iimcategory": "Roinn-seòrsa",
        "exif-iimsupplementalcategory": "Roinnean-seòrsa foirlionach",
+       "exif-datetimeexpires": "Na cleachd às dèidh",
+       "exif-datetimereleased": "'Ga sgaoileadh o",
+       "exif-identifier": "Aithnichear",
+       "exif-cameraownername": "Seilbheadair a' chamara",
+       "exif-label": "Leubail",
+       "exif-nickname": "Ainm neo-fhoirmeil an deilbh",
+       "exif-rating": "Rangachadh (a-mach à 5)",
        "exif-copyrighted": "Staid na còrach-lethbhreac",
        "exif-copyrightowner": "Seilbheadair na còrach-lethbhreac",
+       "exif-usageterms": "Teirmichean a' chleachdaidh",
        "exif-webstatement": "Aithris na còrach-lethbhreac air loidhne",
+       "exif-originaldocumentid": "ID fa leth na sgrìobhainn tùsail",
        "exif-licenseurl": "URL airson ceadachas na còrach-lethbhreac",
+       "exif-morepermissionsurl": "Fiosrachadh ceadachais eile",
+       "exif-attributionurl": "Nuair a chleachdas sibh an obair seo, dèanaibh ceangal gu",
+       "exif-preferredattributionname": "Nuair a chleachdas sibh an obair seo, thoiribh cliù do",
+       "exif-pngfilecomment": "Beachd faidhle PNG",
+       "exif-disclaimer": "Aithris-àichidh",
+       "exif-contentwarning": "Rabhadh susbainte",
+       "exif-giffilecomment": "Beachd faidhle GIF",
+       "exif-intellectualgenre": "Seòrsa na susbainte",
+       "exif-event": "Tachartas san dealbh",
+       "exif-organisationinimage": "Buidheann san dealbh",
+       "exif-personinimage": "Neach sa dealbh",
+       "exif-originalimageheight": "Àirde an deilbh mus deach a bhearradh",
+       "exif-originalimagewidth": "Leud an deilbh mus deach a bhearradh",
        "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-meteringmode-1": "Cuibheasach",
        "exif-meteringmode-255": "Eile",
        "exif-lightsource-0": "Chan eil fhios",
+       "exif-lightsource-4": "Solas-boillsgidh",
        "exif-lightsource-20": "D55",
        "exif-lightsource-21": "D65",
        "exif-lightsource-22": "D75",
        "exif-flash-mode-3": "modh fèin-obrachail",
        "exif-focalplaneresolutionunit-2": "òirleach",
        "exif-sensingmethod-1": "Gun mhìneachadh",
+       "exif-scenecapturetype-1": "Dreach-tìre",
+       "exif-scenecapturetype-2": "Portraid",
        "exif-gaincontrol-0": "Chan eil gin",
        "exif-gpsspeed-k": "Cilemeatair san uair",
        "exif-gpsspeed-m": "Mìle gach uair",
        "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",
+       "watchlistall2": "na h-uile",
+       "namespacesall": "na h-uile",
+       "monthsall": "na h-uile",
+       "confirmemail": "Dearbh an seòladh puist-dhealain",
+       "confirmemail_noemail": "Cha dug thu seachad seòladh puist-d dligheach ann an [[Special:Preferences|roghainnean a' chleachdaiche]] agad.",
+       "confirmemail_text": "Iarraidh {{SITENAME}} ort gun dearbh thu an seòladh puist-d agad mus cleachd thu feartan puist-d.\nCleachd am putan gu h-ìosal gus post-d dearbhaidh a chur dhan t-seòladh agad.\nBidh ceangal le còd sa phost-d ud;\nluchdaich an ceangal sa bhrabhsair agad airson dearbhadh gu bheil an seòladh puist-d agad dligheach.",
+       "confirmemail_pending": "Chaidh còd dearbhaidh a chur thugad air a' phost-d mar-thà;\nma tha thu air a' chunntas agad a chruthachadh o chionn goirid, 's math dh'fhaoidte gum b' feairrde thu feitheamh mionaid no dhà ach an ruig e thu mus iarr thu còd ùr.",
+       "confirmemail_send": "Cuir còd dearbhaidh thugam",
+       "confirmemail_sent": "Chaidh post-d dearbhaidh a chur.",
+       "confirmemail_oncreate": "Chaidh còd dearbhaidh a chur dhan t-seòladh puist-d agad.\nChan eil thu feumach air a' chòd seo airson logadh a-steach, ach feumaidh tu a thoirt seachad mus cleachd thu feart sam bith san uicidh a chleachdas post-d.",
+       "confirmemail_sendfailed": "Cha deach le {{SITENAME}} post-d dearbhaidh a chur thugad.\nDearbhaich nach eil caractar mì-dhligheach san t-seòladh puist-d agad.\n\nSeo na thill an t-inneal puist-d: $1",
+       "confirmemail_invalid": "Tha an còd dearbhaidh mì-dhligheach.\n'S dòcha gun do dh'fhalbh an ùine air.",
+       "confirmemail_needlogin": "$1 gus an seòladh puist-d agad a dhearbhadh.",
+       "confirmemail_success": "Chaidh an seòladh puist-d agad a dhearbhadh.\nFaodaidh tu [[Special:UserLogin|logadh a-steach]] a-nis 's tlachd a ghabhail às an uicidh.",
+       "confirmemail_loggedin": "Tha an seòladh puist-d agad air a dhearbhadh a-nis.",
+       "confirmemail_subject": "Dearbhadh an t-seòlaidh puist-d air {{SITENAME}}",
+       "confirmemail_body": "Chlàraich chuideigin - 's sinne an dùil gur e tusa a bh' ann - cunntas \"$2\"\nair {{SITENAME}} leis an t-seòladh puist-d seo on t-seòladh IP $1.\n\nGus dearbhadh gur an agad fhèin a tha an cunntas seo agus gus na feartan puist-d\na ghnìomhachadh air {{SITENAME}}, fosgail an ceangal seo sa bhrabhsair agad:\n\n$3\n\nMur e *tusa* a bh' ann a chlàraich an cunntas seo, lean air a' cheangal seo\ngus sgur dhen dearbhadh leis a' phost-d:\n\n$5\n\nFalbhaidh an ùine air a' chòd dearbhaidh seo $4.",
+       "confirmemail_body_changed": "Dh'atharraich chuideigin - 's sinne an dùil gur e tusa a bh' ann - an seòladh puist-d\naig a' chunntas \"$2\" air {{SITENAME}} dhan t-seòladh puist-d seo on t-seòladh IP $1.\n\nGus dearbhadh gur an agad fhèin a tha an cunntas seo agus gus na feartan puist-d\na ghnìomhachadh às ùr air {{SITENAME}}, fosgail an ceangal seo sa bhrabhsair agad:\n\n$3\n\nMur e *tusa* a bh' ann a chlàraich an cunntas seo, lean air a' cheangal seo\ngus sgur dhen dearbhadh leis a' phost-d:\n\n$5\n\nFalbhaidh an ùine air a' chòd dearbhaidh seo $4.",
+       "confirmemail_body_set": "Shuidhich chuideigin - 's sinne an dùil gur e tusa a bh' ann - an seòladh puist-d\naig a' chunntas \"$2\" air {{SITENAME}} dhan t-seòladh puist-d seo on t-seòladh IP $1.\n\nGus dearbhadh gur an agad fhèin a tha an cunntas seo agus gus na feartan puist-d\na ghnìomhachadh air {{SITENAME}}, fosgail an ceangal seo sa bhrabhsair agad:\n\n$3\n\nMur e *tusa* a bh' ann a chlàraich an cunntas seo, lean air a' cheangal seo\ngus sgur dhen dearbhadh leis a' phost-d:\n\n$5\n\nFalbhaidh an ùine air a' chòd dearbhaidh seo $4.",
+       "confirmemail_invalidated": "Chaidh sgur de dhearbhadh an t-seòlaidh puist-d",
+       "invalidateemail": "Sguir de dhearbhadh an t-seòlaidh puist-d",
+       "scarytranscludedisabled": "[Tha gabhail a-steach 'na iomradh eadar-uicidh à comas]",
+       "scarytranscludefailed": "[Dh'fhàillig le fhaighinn na teamplaid airson $1]",
+       "scarytranscludefailed-httpstatus": "[Dh'fhàillig le fhaighinn na teamplaid airson $1: HTTP $2]",
+       "scarytranscludetoolong": "[Tha an URL ro fhada]",
+       "deletedwhileediting": "<strong>Rabhadh:</strong> Chaidh an duilleag seo a sguabadh às às dèidh do thòiseachadh leis an deasachadh oirre!",
        "confirmrecreate": "Sguab [[User:$1|$1]] ([[User talk:$1|an deasbaireachd]]) an duilleag seo às às dèidh do thòiseachadh air an deasachadh air an adhbhar seo:\n: <em>$2</em>\nDearbhaich gu bheil thu airson an duilleag seo ath-chruthachadh dha-rìribh.",
        "confirmrecreate-noreason": "Sguab [[User:$1|$1]] ([[User talk:$1|an deasbaireachd]]) an duilleag seo às às dèidh do thòiseachadh air an deasachadh.\nDearbhaich gu bheil thu airson an duilleag seo ath-chruthachadh dha-rìribh.",
+       "recreate": "Ath-chruthaich",
+       "unit-pixel": "px",
+       "confirm_purge_button": "Ceart ma-thà",
+       "confirm-purge-top": "A bheil thu airson tasgadan na duilleige seo a ghlanadh?",
+       "confirm-purge-bottom": "Ma ghlanas tu duilleag, falamhaichidh seo an tasgadan 's bheir e air am mùthadh as ùire gun nochd e.",
+       "confirm-watch-button": "Ceart ma-thà",
        "confirm-watch-top": "A bheil thu airson an duilleag seo a chur ris a' chlàr-fhaire agad?",
+       "confirm-unwatch-button": "Ceart ma-thà",
        "confirm-unwatch-top": "A bheil thu airson an duilleag seo a thoirt air falbh on chlàr-fhaire agad?",
+       "semicolon-separator": ";&#32;",
+       "comma-separator": ",&#32;",
+       "colon-separator": ":&#32;",
+       "pipe-separator": "&#32;|&#32;",
+       "word-separator": "&#32;",
+       "ellipsis": "...",
+       "percent": "$1%",
+       "parentheses": "($1)",
+       "brackets": "[$1]",
+       "quotation-marks": "\"$1\"",
+       "imgmultipageprev": "← an duilleag roimhpe",
+       "imgmultipagenext": "an ath-dhuilleag →",
+       "imgmultigo": "Siuthad!",
+       "imgmultigoto": "Rach gu duilleag $1",
+       "img-lang-opt": "$2 ($1)",
+       "img-lang-default": "(an cànan tùsail)",
+       "img-lang-info": "Reandaraich an dealbh seo sa: $1. $2",
+       "img-lang-go": "Siuthad",
+       "ascending_abbrev": "a' dìreadh",
+       "descending_abbrev": "a' teàrnadh",
+       "table_pager_next": "An ath-dhuilleag",
+       "table_pager_prev": "An duilleag roimhpe",
+       "table_pager_first": "A' chiad duilleag",
+       "table_pager_last": "An duilleag mu dheireadh",
+       "table_pager_limit": "Seall $1 nithean air gach duilleag",
+       "table_pager_limit_label": "Nithean air gach duilleag:",
+       "table_pager_limit_submit": "Siuthad",
+       "table_pager_empty": "Gun toradh",
+       "autosumm-blank": "Chaidh an duilleag a bhànachadh",
+       "autosumm-replace": "Chaidh \"$1\" a chur an àite na susbaint",
+       "autoredircomment": "Chaidh an duilleag ath-stiùireadh gu [[$1]]",
+       "autosumm-new": "Chaidh duilleag le \"$1\" a chruthachadh",
+       "size-bytes": "$1 B",
+       "size-kilobytes": "$1 KB",
+       "size-megabytes": "$1 MB",
+       "size-gigabytes": "$1 GB",
+       "size-terabytes": "$1 TB",
+       "size-petabytes": "$1 PB",
+       "size-exabytes": "$1 EB",
+       "size-zetabytes": "$1 ZB",
+       "size-yottabytes": "$1 YB",
+       "bitrate-bits": "$1 bps",
+       "bitrate-kilobits": "$1 kbps",
+       "bitrate-megabits": "$1 Mbps",
+       "bitrate-gigabits": "$1 Gbps",
+       "bitrate-terabits": "$1 Tbps",
+       "bitrate-petabits": "$1 Pbps",
+       "bitrate-exabits": "$1 Ebps",
+       "bitrate-zetabits": "$1 Zbps",
+       "bitrate-yottabits": "$1 Ybps",
+       "lag-warn-normal": "Dh'fhaoidte nach nochd atharraichean nas ùire na $1 {{PLURAL:$1|diog|dhiog|diogan|diog}} air an liosta seo.",
+       "lag-warn-high": "Air sàilleibh eallach air frithealaiche an stòir-dhàta, dh'fhaoidte nach nochd atharraichean nas ùire na $1 {{PLURAL:$1|diog|dhiog|diogan|diog}} air an liosta seo.",
        "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-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-explain": "Chì thu na tiotalan air a' chlàr-fhaire agad gu h-ìosal agus 's urrainn dhut an deasachadh 's tu an cur ris 's a thoirt air falbh on liosta;\naon tiotal air gach loidhne.\nNuair a bhios tu deiseil, briog air \"{{int:Watchlistedit-raw-submit}}\".\n'S urrainn dhut [[Special:EditWatchlist|an deasaiche àbhaisteach]] a cleachdadh cuideachd.",
+       "watchlistedit-raw-titles": "Tiotalan:",
        "watchlistedit-raw-submit": "Ùraich an clàr-faire",
+       "watchlistedit-raw-done": "Chaidh an clàr-faire agad ùrachadh.",
+       "watchlistedit-raw-added": "Chaidh $1 {{PLURAL:$1|tiotal|thiotal|tiotalan|tiotal}} a chur ris:",
+       "watchlistedit-raw-removed": "Chaidh $1 {{PLURAL:$1|tiotal|thiotal|tiotalan|tiotal}} a thoirt air falbh:",
+       "watchlistedit-clear-title": "Clàr-faire air a ghlanadh",
+       "watchlistedit-clear-legend": "Glan an clàr-faire",
+       "watchlistedit-clear-explain": "Thèid a h-uile tiotal a thoirt far a' chlàr-fhaire agad",
+       "watchlistedit-clear-titles": "Tiotalan:",
+       "watchlistedit-clear-submit": "Glan an clàr-faire (falbhaidh iad gu buan!)",
+       "watchlistedit-clear-done": "Chaidh an clàr-faire agad a ghlanadh.",
+       "watchlistedit-clear-removed": "Chaidh $1 {{PLURAL:$1|tiotal|thiotal|tiotalan|tiotal}} a thoirt air falbh:",
+       "watchlistedit-too-many": "Tha cus duilleagan ann gus an sealltainn an-seo.",
+       "watchlisttools-clear": "Glan 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",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|an deasbaireachd]])",
+       "timezone-utc": "UTC",
+       "unknown_extension_tag": "Taga leudachain \"$1\" neo-aithnichte",
        "duplicate-defaultsort": "<strong>Rabhadh:</strong> Tha an iuchair seòrsachaidh bhunaiteach \"$2\" a' dol thairis air seann iuchair eile, \"$1\".",
        "version": "Tionndadh",
+       "version-extensions": "Leudachain air an stàladh",
+       "version-skins": "Craicnean",
+       "version-specialpages": "Duilleagan sònraichte",
+       "version-parserhooks": "Hooks a' pharsair",
+       "version-variables": "Caochladairean",
+       "version-antispam": "Dìon o spama",
+       "version-api": "API",
+       "version-other": "Eile",
+       "version-mediahandlers": "Làimhsichearan mheadhanan",
+       "version-hooks": "Hooks",
+       "version-parser-extensiontags": "Tagaichean leudachadh a' pharsair",
+       "version-parser-function-hooks": "Hooks foincsean a' pharsair",
+       "version-hook-name": "Ainm a' hook",
+       "version-hook-subscribedby": "'Ga fho-sgrìobhadh le",
+       "version-version": "($1)",
+       "version-no-ext-name": "[gun ainm]",
+       "version-svn-revision": "r$1",
+       "version-license": "Ceadachas MediaWiki",
+       "version-ext-license": "Ceadachas",
+       "version-ext-colheader-name": "Leudachan",
+       "version-skin-colheader-name": "Craiceann",
+       "version-ext-colheader-version": "Tionndadh",
+       "version-ext-colheader-license": "Ceadachas",
        "version-ext-colheader-description": "Tuairisgeul",
+       "version-ext-colheader-credits": "Ùghdaran",
+       "version-license-title": "Ceadachas airson $1",
+       "version-license-not-found": "Cha deach fiosrachadh mionaideach a' cheadachais a lorg airson an leudachain seo.",
+       "version-credits-title": "Cliù airson $1",
+       "version-credits-not-found": "Cha deach fiosrachadh mionaideach a' chliùtha a lorg airson an leudachain seo.",
        "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.",
+       "version-poweredby-others": "eile",
+       "version-poweredby-translators": "eadar-theangadairean translatewiki.net",
        "version-credits-summary": "Bu toigh leinn urram a thoirt air na daoine a leanas air sgàth 's an cuid obrach airson [[Special:Version|MediaWiki]].",
+       "version-software": "Bathar-bog air a stàladh",
+       "version-software-product": "Bathar",
+       "version-software-version": "Tionndadh",
+       "version-entrypoints": "URLaichean puing-inntrigidh",
+       "version-entrypoints-header-entrypoint": "Puing-inntrigidh",
+       "version-entrypoints-header-url": "URL",
+       "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Slighe artaigil]",
+       "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath slighe sgriobt]",
+       "redirect": "Ath-stiùireadh le faidhle, cleachdaiche, duilleag no ID a' mhùthaidh",
+       "redirect-legend": "Cruthaich ath-stiùireadh gu faidhle no duilleag",
+       "redirect-summary": "Nì an duilleag shònraichte seo ath-stiùireadh gu faidhle (le ainm faidhle), duilleag (le ID a' mhùthaidh no ID na duilleige) no duilleag cleachdaiche (le àireamh ID a' chleachdaiche). Seo mar a chleachdas tu e: [[{{#Special:Redirect}}/file/Ball-eisimpleir.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] no [[{{#Special:Redirect}}/user/101]].",
+       "redirect-submit": "Siuthad",
+       "redirect-lookup": "Rannsaich:",
+       "redirect-value": "Luach:",
+       "redirect-user": "ID a' chleachdaiche",
+       "redirect-page": "ID na duilleige",
+       "redirect-revision": "Mùthadh na duilleige",
+       "redirect-file": "Ainm am fhaidhle",
+       "redirect-not-exists": "Cha deach an luach a lorg",
+       "fileduplicatesearch": "Lorg airson faidhlichean dùblaichte",
+       "fileduplicatesearch-summary": "Lorg airson faidhlichean dùblaichte, stèidhichte air luachan hais.",
+       "fileduplicatesearch-legend": "Lorg airson dùblachadh",
+       "fileduplicatesearch-filename": "Ainm an fhaidhle:",
+       "fileduplicatesearch-submit": "Lorg",
+       "fileduplicatesearch-info": "$1 × $2 piogsail<br />Meud an fhaidhle: $3<br />Seòrsa MIME: $4",
+       "fileduplicatesearch-result-1": "Chan eil dùblachadh co-ionnann aig an fhaidhle \"$1\".",
+       "fileduplicatesearch-result-n": "Tha $2 {{PLURAL:$2|dùblachadh co-ionnann|dhùblachadh co-ionnann|dùblachaidhean co-ionnann|dùblachadh co-ionnann}} aig an fhaidhle \"$1\".",
+       "fileduplicatesearch-noresults": "Cha deach faidhle air a bheil \"$1\" a lorg.",
        "specialpages": "Duilleagan sònraichte",
        "specialpages-note-top": "Treòir",
+       "specialpages-note": "* Duilleagan sònraichte coitcheann.\n* <span class=\"mw-specialpagerestricted\">Duilleagan sònraichte cuingichte.</span>",
+       "specialpages-group-maintenance": "Aithrisean na h-obrach-glèidhidh",
+       "specialpages-group-other": "Duilleagan sònraichte eile",
+       "specialpages-group-login": "Log a-steach / cruthaich cunntas",
+       "specialpages-group-changes": "Atharraichean 's logaichean o chionn goirid",
+       "specialpages-group-media": "Aithrisean mheadhanan 's luchdaidhean suas",
+       "specialpages-group-users": "Cleachdaichean 's ceadan",
+       "specialpages-group-highuse": "Duilleagan 'gan cleachdadh gu tric",
+       "specialpages-group-pages": "Liosta dhe na duilleagan",
+       "specialpages-group-pagetools": "Innealan nan duilleag",
+       "specialpages-group-wiki": "Ceann-là 's innealan",
+       "specialpages-group-redirects": "Duilleagan sònraichte a nì ath-stiùireadh",
+       "specialpages-group-spam": "Innealan spama",
+       "blankpage": "Duilleag bhàn",
+       "intentionallyblankpage": "Tha an duilleag seo bàn a dh'aona-ghothach.",
        "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>",
+       "tags": "Tagaichean atharrachaidh dligheach",
        "tag-filter": "Criathrag [[Special:Tags|thagaichean]]:",
+       "tag-filter-submit": "Criathraich",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Taga|Tagaichean}}]]: $2)",
+       "tags-title": "Tagaichean",
+       "tags-intro": "Seallaidh an duilleag seo na tagaichean a chleachdas am bathar-bog gus deasachadh a chomharrachadh 's an ciall a th' orra.",
+       "tags-tag": "Ainm an taga",
+       "tags-display-header": "Dreach air liostaichean nan atharraichean",
        "tags-description-header": "Tuairisgeul slàn a' chèill",
+       "tags-active-header": "Gnìomhach?",
+       "tags-hitcount-header": "Atharraichean le tagaichean riutha",
+       "tags-active-yes": "Seadh",
+       "tags-active-no": "Chan eadh",
+       "tags-edit": "deasaich",
+       "tags-hitcount": "$1 {{PLURAL:$1|atharrachadh|atharrachadh|atharraichean|atharrachadh}}",
+       "comparepages": "Coimeas duillegan",
+       "compare-page1": "Duilleag 1",
+       "compare-page2": "Duilleag 2",
+       "compare-rev1": "Mùthadh 1",
+       "compare-rev2": "Mùthadh 2",
+       "compare-submit": "Coimeas",
+       "compare-invalid-title": "Tha an tiotal a shònraich thu mì-dhligheach.",
+       "compare-title-not-exists": "Chan eil an tiotal a shònraich thu ann.",
+       "compare-revision-not-exists": "Chan eil am mùthadh a shònraich thu ann.",
+       "dberr-problems": "Duilich! Tha trioblaid teicnigeach aig an làrach seo.",
+       "dberr-again": "Feitheamh mionaid no dhà 's ath-luchdaich i.",
+       "dberr-info": "(Chan obraich an conaltradh ri frithealaiche an stòir-dhàta: $1)",
+       "dberr-info-hidden": "(Chan obraich an conaltradh ri frithealaiche an stòir-dhàta)",
+       "dberr-usegoogle": "Feuch lorg le Google san eadar-àm.",
+       "dberr-outofdate": "Thoir an aire nach eil an clàr acasan air an t-susbaint againn cho ùr sa ghabhas ma dh'fhaoidte.",
+       "dberr-cachederror": "Seo lethbhreac dhen duilleag a dh'iarr thu on tasgadan 's chan eil e cho ùr 's a ghabhas, ma dh'fhaoidte.",
+       "htmlform-invalid-input": "Cha duilgheadas le cuid dhe na chuir thu a-steach.",
+       "htmlform-select-badoption": "Chan eil an luach a thug thu seachad 'na roghainn dhligheach.",
+       "htmlform-int-invalid": "Chan eil an luach a thug thu seachad 'na àireamh shlàn.",
+       "htmlform-float-invalid": "Chan eil an luach a thug thu seachad 'na àireamh.",
+       "htmlform-int-toolow": "Tha an luach a thug thu seachad ro bheag on a tha e nas lugha na $1.",
+       "htmlform-int-toohigh": "Tha an luach a thug thu seachad ro mhòr on a tha e nas motha na $1.",
+       "htmlform-required": "Tha an luach seo riatanach.",
+       "htmlform-submit": "Cuir a-null",
+       "htmlform-reset": "Neo-dhèan na h-atharraichean",
+       "htmlform-selectorother-other": "Eile",
+       "htmlform-no": "Chan eil",
+       "htmlform-yes": "Tha",
+       "htmlform-chosen-placeholder": "Tagh roghainn",
+       "htmlform-cloner-create": "Cuir barrachd ris",
+       "htmlform-cloner-delete": "Thoir air falbh",
+       "htmlform-cloner-required": "Tha luach a dhìth.",
+       "sqlite-has-fts": "$1 le taic ri lorg teacsa shlàin",
+       "sqlite-no-fts": "$1 gun taic ri lorg teacsa shlàin",
        "logentry-delete-delete": "Sguab $1 às duilleag $3",
        "logentry-delete-restore": "Dh'aisig $1 duilleag $3",
        "logentry-delete-event": "Dh'atharraich $1 an fhaicsinneachd aig $5 {{PLURAL:$5|tachartas|thachartas|tachartasan|tachartas}} an loga air $3: $4",
        "logentry-suppress-revision": "Dh'atharraich $1 an fhaicsinneachd aig $5 {{PLURAL:$5|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} air $3 gu dìomhair: $4",
        "logentry-suppress-event-legacy": "Dh'atharraich $1 an fhaicsinneachd aig tachartasan an loga air $3 gu dìomhair",
        "logentry-suppress-revision-legacy": "Dh'atharraich $1 an fhaicsinneachd aig mùthaidhean air $3 gu dìomhair",
+       "revdelete-content-hid": "chaidh susbaint fhalach",
        "revdelete-summary-hid": "chaidh gearr-chunntas an deasachaidh fhalach",
+       "revdelete-uname-hid": "chaidh ainm-cleachdaiche fhalach",
+       "revdelete-content-unhid": "chaidh susbaint a neo-fhalach",
        "revdelete-summary-unhid": "chaidh gearr-chunntas an deasachaidh a nochdadh",
+       "revdelete-uname-unhid": "chaidh ainm-cleachdaiche a neo-fhalach",
+       "revdelete-restricted": "chaidh cuingeachaidhean a chur an sàs air rianairean",
+       "revdelete-unrestricted": "chaidh cuingeachaidhean a thoirt air falbh airson rianairean",
        "logentry-move-move": "Ghluais $1 duilleag $3 gu $4",
        "logentry-move-move-noredirect": "Ghluais $1 duilleag $3 gu $4 's cha do {{GENDER:$2|dh'fhàg e|dh'fhàg i|dh'fhàgadh}} ath-stiùireadh ann",
        "logentry-move-move_redir": "Ghluais $1 duilleag $3 gu $4 slighe ath-stiùiridh",
        "logentry-rights-rights-legacy": "Dh'atharraich $1 {{GENDER:$2|a bhallrachd|a ballrachd}} ann am buidheann airson $3",
        "logentry-rights-autopromote": "Chaidh $1 àrdachadh o $4 gu $5 gu fèin-obrachail",
        "rightsnone": "(chan eil gin)",
+       "feedback-bugornote": "Ma tha fiosrachadh mionaideach agad air duilgheadas teicnigeach, feuch an dèan thu [$1 aithris air buga].\nMur eil, 's urrainn dhut am foirm furasta a chleachdadh gu h-ìosal. Thèid do bheachd a chur ris an duilleag \"[$3 $2]\" is d' ainm-cleachdaiche a chur ris.",
+       "feedback-subject": "Cuspair:",
+       "feedback-message": "Teachdaireachd:",
+       "feedback-cancel": "Sguir dheth",
+       "feedback-submit": "Cuir do bheachd a-null",
+       "feedback-adding": "A' cur beachd ri duilleag...",
+       "feedback-error1": "Mearachd: Chan aithnich sinn toradh an API",
+       "feedback-error2": "Mearachd: Dh'fhàillig leis an deasachadh",
+       "feedback-error3": "Mearachd: Cha d' fhuair sinn freagairt on API",
+       "feedback-thanks": "Mòran taing! Chaidh do bheachd a phostadh air an duilleag \"[$2 $1]\".",
+       "feedback-close": "Dèanta",
+       "feedback-bugcheck": "Taghta! Dearbh nach eil e air [$1 liosta nam bugaichean air a bheil sinn eòlach] mar-thà.",
+       "feedback-bugnew": "Dhearbh mi seo. Dèan aithris air buga ur",
+       "searchsuggest-search": "Lorg",
        "searchsuggest-containing": "anns a bheil...",
+       "api-error-badaccess-groups": "Chan eil cead agad gus faidhlichean a luchdadh suas dhan uicidh seo.",
+       "api-error-badtoken": "Mearachd taobh a-staigh: Droch thòcan.",
+       "api-error-copyuploaddisabled": "Tha luchdadh suas le URL à comas air an fhrithealaiche seo.",
+       "api-error-duplicate": "Tha {{PLURAL:$1|[$2 faidhle eile]|are [$2 faidhlichean eile]}} air an làrach seo mar-thà sa bheil an aon susbaint.",
+       "api-error-duplicate-archive": "Tha {{PLURAL:$1|[$2 faidhle eile]|are [$2 faidhlichean eile]}} air an làrach seo mar-thà sa bheil an aon susbaint ach chaidh {{PLURAL:$1|a sguabadh|an sguabadh}} às.",
+       "api-error-duplicate-archive-popup-title": "Bha {{PLURAL:$1|am faidhle|na faidhlichean}} dùblaichte air {{PLURAL:$1|a|an}} sguabadh às mar-thà.",
+       "api-error-duplicate-popup-title": "{{PLURAL:$1|Faidhle|Faidhlichean}} dùblaichte.",
+       "api-error-empty-file": "Tha am faidhle a chuir thu a-null falamh.",
+       "api-error-emptypage": "Chan fhaodar duilleagan falamh ùra a chruthachadh.",
+       "api-error-fetchfileerror": "Mearachd taobh a-staigh: Chaidh rudeigin cearr le faighinn an fhaidhle.",
+       "api-error-fileexists-forbidden": "Tha faidhle air a bheil \"$1\" ann mar-thà 's cha ghabh sgrìobhadh thairis air.",
        "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.",
+       "api-error-file-too-large": "Tha am faidhle a chuir thu a-null ro mhòr.",
+       "api-error-filename-tooshort": "Tha ainm an fhaidhle ro ghoirid.",
+       "api-error-filetype-banned": "Tha an seòrsa faidhle seo toirmisgte.",
+       "api-error-filetype-banned-type": "Chan eil $1 {{PLURAL:$4|'na seòrsa faidhle|'nan seòrsaichean faidhle}} ceadaichte. Is $2 {{PLURAL:$3|an seòrsa faidhle|na seòrsaichean faidhle}} ceadaichte.",
+       "api-error-filetype-missing": "Tha leudachan a dhìth air an fhaidhle.",
+       "api-error-hookaborted": "Chaidh sgur dhen atharrachadh a dh'fheuch thu ri dèanamh le leudachan.",
+       "api-error-http": "Mearachd taobh a-staigh: Cha b' urrainn dhuinn ceangal ris an fhrithealaiche.",
+       "api-error-illegal-filename": "Chan eil ainm an fhaidhle ceadaichte.",
+       "api-error-internal-error": "Mearachd tabh a-staigh: chaidh rudeigin cearr rè an luchdaidh suas agad dhan uicidh.",
+       "api-error-invalid-file-key": "Mearachd taobh a-staigh: Cha deach am faidhle a lorg san stòras shealach.",
+       "api-error-missingparam": "Mearachd taobh a-staigh: Tha paramadair a dhìth air an iarrtas.",
+       "api-error-missingresult": "Mearachd taobh a-staigh: Cha d' fhuair sinn a-mach co-dhiù an do shoirbhich leis an lethbhreac gus nach do shoirbhich.",
+       "api-error-mustbeloggedin": "Feumaidh tu logadh a-steach mus luchdaich thu suas faidhle.",
+       "api-error-mustbeposted": "Mearachd taobh a-staigh: Tha an t-iarrtas ag iarraidh HTTP POST.",
+       "api-error-noimageinfo": "Shoirbhich leis an luchdadh suas, ach cha dug am frithealaiche fiosrachadh sam bith dhuinn mun fhaidhle.",
+       "api-error-nomodule": "Mearachd taobh a-staigh: cha deach mòideal luchdaidh suas a shuidheachadh.",
+       "api-error-ok-but-empty": "Mearachd taobh a-staigh: Cha d' fhuair sinn freagairt on fhrithealaiche.",
+       "api-error-overwrite": "Chan fhaodar sgrìobhadh thairis air faidhle a tha ann mar-thà.",
+       "api-error-stashfailed": "Mearachd taobh a-staigh: Cha deach leis an fhrithealaiche faidhle sealach a stòradh.",
+       "api-error-publishfailed": "Mearachd taobh a-staigh: Cha deach leis an fhrithealaiche faidhle sealach fhoillseachadh.",
        "api-error-stasherror": "Thachair mearachd le luchdadh suas an fhaidhle dhan tasgadan.",
-       "expand_templates_remove_nowiki": "Mùch tagaichean <nowiki> san toradh"
+       "api-error-timeout": "Cha d' fhuair sinn freagairt on fhrithealaiche ri àm.",
+       "api-error-unclassified": "Thachair mearachd neo-aithnichte.",
+       "api-error-unknown-code": "Mearachd neo-aithnichte: \"$1\".",
+       "api-error-unknown-error": "Mearachd tabh a-staigh: Chaidh rudeigin cearr rè luchdadh suas an fhaidhle agad.",
+       "api-error-unknown-warning": "Rabhadh neo-aithnichte: \"$1\".",
+       "api-error-unknownerror": "Mearachd neo-aithnichte: \"$1\".",
+       "api-error-uploaddisabled": "Tha luchdadh suas à comas air an uicidh seo.",
+       "api-error-verification-error": "Dh'fhaoidte gu bheil am faidhle seo coirbte no gu bheil an leudachan cearr air.",
+       "duration-seconds": "$1 {{PLURAL:$1|diog|dhiog|diogan|diog}}",
+       "duration-minutes": "$1 {{PLURAL:$1|mhionaid|mhionaid|mionaidean|mionaid}}",
+       "duration-hours": "$1 {{PLURAL:$1|uair|uair|uairean|uair}}",
+       "duration-days": "$1 {{PLURAL:$1|latha|latha|làithean|latha}}",
+       "duration-weeks": "$1 {{PLURAL:$1|seachdain|sheachdain|seachdainean|seachdain}}",
+       "duration-years": "$1 {{PLURAL:$1|bhliadhna|bhliadhna|bliadhnaichean|bliadhna}}",
+       "duration-decades": "$1 {{PLURAL:$1|deichead|dheichead|deicheadan|deichead}}",
+       "duration-centuries": "$1 {{PLURAL:$1|linn|linn|linntean|linn}}",
+       "duration-millennia": "$1 {{PLURAL:$1|mhìle bliadhna|mhìle bliadhna|mìle bliadhna|mìle bliadhna}}",
+       "rotate-comment": "Chaidh an dealbh a chuairteachadh le $1 {{PLURAL:$1|cheum|cheum|ceuman|ceum}} gu tuathal",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|diog|dhiog|diogan|diog}}",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|diog|dhiog|diogan|diog}}",
+       "limitreport-ppvisitednodes-value": "$1/$2",
+       "limitreport-ppgeneratednodes-value": "$1/$2",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bhaidht|bhaidht|baidhtichean|baidht}}",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bhaidht|bhaidht|baidhtichean|baidht}}",
+       "limitreport-expansiondepth-value": "$1/$2",
+       "limitreport-expensivefunctioncount-value": "$1/$2",
+       "expandtemplates": "Leudaich na templaidean",
+       "expand_templates_intro": "Gabhaidh an duilleag shònraichte seo ri teacsa agus leudaichidh i a h-uile teamplaid na broinn gu ath-chùrsach.\nLeudaichidh i cuideachd foincseanan parsair ris a chuirear taic, can\n<code><nowiki>{{</nowiki>#language:…}}</code> agus caochladairean mar\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nAir deireadh na sgeòil, leudaichidh i cha mhòr gach rud eadar camagan dualach dùbailte.",
+       "expand_templates_title": "Tiotal a' cho-theacsa airson {{FULLPAGENAME}} is msaa.:",
+       "expand_templates_input": "Teacsa ion-chuir:",
+       "expand_templates_output": "Toradh",
+       "expand_templates_xml_output": "Às-chur XML",
+       "expand_templates_html_output": "Bun-tùs a' chòd HTML",
+       "expand_templates_ok": "Ceart ma-thà",
+       "expand_templates_remove_comments": "Thoir na beachdan air falbh",
+       "expand_templates_remove_nowiki": "Mùch tagaichean <nowiki> san toradh",
+       "expand_templates_generate_xml": "Seall craobh parsaidh an XML",
+       "expand_templates_generate_rawhtml": "Seall bun-tùs an HTML",
+       "expand_templates_preview": "Ro-sheall",
+       "pagelanguage": "Roghnaichear cànan nan duilleag",
+       "pagelang-name": "Duilleag",
+       "pagelang-language": "Cànan",
+       "pagelang-use-default": "Cleachd an cànan tùsail",
+       "pagelang-select-lang": "Tagh cànan",
+       "right-pagelang": "Atharraich cànan nan duilleagan",
+       "action-pagelang": "atharraich cànan nan duilleagan",
+       "log-name-pagelang": "Loga air atharrachadh nan cànan",
+       "log-description-pagelang": "Seo loga dhe na h-atharraichean air cànanan nan duilleagan.",
+       "logentry-pagelang-pagelang": "Dh'atharraich $1 cànan nan duilleagan airson $3 o $4 gu $5."
 }
index 72a0004..d72e97a 100644 (file)
        "qbmyoptions": "As miñas páxinas",
        "faq": "Preguntas máis frecuentes",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Nova sección",
-       "vector-action-delete": "Borrar",
-       "vector-action-move": "Mover",
-       "vector-action-protect": "Protexer",
-       "vector-action-undelete": "Restaurar",
-       "vector-action-unprotect": "Cambiar a protección",
-       "vector-view-create": "Crear",
-       "vector-view-edit": "Editar",
-       "vector-view-history": "Ver o historial",
-       "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",
        "searchall": "todo",
        "showingresults": "{{PLURAL:$1|Móstrase '''1''' resultado|Móstranse '''$1''' resultados}}, comezando polo número '''$2'''.",
        "showingresultsinrange": "{{PLURAL:$1|Móstrase <strong>1</strong> resultado|Móstranse <strong>$1</strong> resultados}}, comezando polo número <strong>$2</strong> e rematando polo número <strong>$3</strong>.",
-       "showingresultsnum": "A continuación {{PLURAL:$3|móstrase '''1''' resultado|móstranse '''$3''' resultados}}, comezando polo número '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados do '''$1''' ao '''$2''', dun total de '''$3''',}} para \"'''$4'''\"",
        "search-nonefound": "Non se atopou ningún resultado que coincidise coa procura.",
        "powersearch-legend": "Busca avanzada",
        "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 */",
-       "monobook.css": "/* O CSS que se coloque aquí afectará a quen use a aparencia Monobook */",
-       "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-autoconfirmed.css": "/* O CSS que se coloque aquí afectará soamente aos usuarios autoconfirmados */",
        "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. */",
-       "monobook.js": "/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia MonoBook */",
-       "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 */",
        "group-sysop.js": "/* Calquera JavaScript que haxa aquí será cargado soamente para os administradores */",
        "pageinfo-category-pages": "Número de páxinas",
        "pageinfo-category-subcats": "Número de subcategorías",
        "pageinfo-category-files": "Número de ficheiros",
-       "skinname-monobook": "MonoBook",
        "markaspatrolleddiff": "Marcar como revisada",
        "markaspatrolledtext": "Marcar esta páxina como revisada",
        "markedaspatrolled": "Marcar como revisado",
index 95e9f9b..36237d0 100644 (file)
        "qbmyoptions": "Οἱ δέλτοι μου",
        "faq": "Τὰ πολλάκις αἰτηθέντα",
        "faqpage": "Project:Πολλάκις αἰτηθέντα",
-       "vector-action-addsection": "Θέμα προστιθέναι",
-       "vector-action-delete": "Σβεννύναι",
-       "vector-action-move": "Κινεῖν",
-       "vector-action-protect": "Φυλάττειν",
-       "vector-action-undelete": "Ἀποκαθιστάναι",
-       "vector-action-unprotect": "Ἄλλαξον τὴν φύλαξιν",
-       "vector-view-create": "Ποιεῖν",
-       "vector-view-edit": "Μεταγράφειν",
-       "vector-view-history": "Ἱστορίαν ὁρᾶν",
-       "vector-view-view": "Ἀναγνῶναι",
-       "vector-view-viewsource": "Ὁρᾶν τὴν πηγήν",
        "actions": "Δράσεις",
        "namespaces": "Ὀνοματεῖα",
        "variants": "Παραλλαγαί",
        "editundo": "ἀναίρεσις",
        "searchresults": "Ἀποτελέσματα ἀναζητήσεως",
        "searchresults-title": "Ἀποτελέσματα ζητήσεως διὰ \"$1\"",
-       "toomanymatches": "Αἱ ἀπαντήσασαι ἀντιστοιχίαι εἰσὶν ὑπὲρ τὸ δέον πλείονες· πείρασον ἑτέραν πεῦσιν τινά",
        "titlematches": "Ἡ ἐπιγραφὴ τῆς δέλτου ἀντιστοιχεῖ",
        "textmatches": "Τὸ κείμενον τῆς δέλτου ἀντιστοιχεῖ",
        "notextmatches": "Οὐδὲν κείμενον τῆς δέλτου ἀντιστοιχεῖ",
        "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'''.",
-       "showingresultsnum": "Δεικνύναι {{PLURAL:$3|'''1''' ἀποτέλεσμα|'''$3''' ἀποτελέσματα}}· ἐκκίνησις ἐκ τοῦ #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Ἀποτέλεσμα'''$1''' ἀπὸ '''$3'''|Ἀποτελέσματα '''$1 - $2''' ἀπὸ '''$3'''}} περὶ '''$4'''",
        "search-nonefound": "Οὐδὲν ἀποτέλεσμα ἀντίστοιχον τῆς πεύσεως.",
        "powersearch-legend": "Ἀνωτέρα ἀναζήτησις",
        "allowemail": "Ἐπιτρέπειν τὴν χρῆσιν ἠλ-ταχυδρομείου ὑφ'ἑτέρων χρωμένων",
        "prefs-searchoptions": "Ἐπιλογαὶ ζητήσεως",
        "prefs-namespaces": "Ὄνοματικὸς χῶρος",
-       "defaultns": "Εἰ δὲ ἄλλως, ζήτησον ἐν τοῖσδε ὀνοματικοῖς χώροις:",
        "default": "προκαθωρισμένον",
        "prefs-files": "Ἀρχεῖα",
        "prefs-custom-css": "CSS παραγγελτόν",
        "prefs-emailconfirm-label": "Ἐπιβεβαίωσις ἠλ.-διευθύνσεως:",
        "youremail": "Ἠλεκτρονικαὶ ἐπιστολαί:",
        "username": "Ὄνομα χρωμένου:",
-       "uid": "Ταυτότης χρωμένου:",
        "prefs-memberingroups": "Μέλος {{PLURAL:$1|ομάδoς|ομάδων}}:",
        "prefs-registration": "Χρόνος ἐγγραφῆς:",
        "yourrealname": "Τὸ ἀληθὲς ὄνομα:",
        "logempty": "Μὴ ἀντιστοιχοῦντα τὰ τεμάχια ἐν τῷδε τῷ καταλόγῳ.",
        "log-title-wildcard": "Ζητεῖν ἐπιγραφὰς ἐκκινουμένας ἐκ τοῦδε τοῦ κειμένου",
        "allpages": "Πᾶσαι αἱ δέλτοι",
-       "alphaindexline": "$1 ἕως $2",
        "nextpage": "Ἡ δέλτος ἡ ἑπομένη ($1)",
        "prevpage": "Ἡ δέλτος ἡ προτέρα ($1)",
        "allpagesfrom": "Ἐπιδεικνύναι τὰς δέλτους ἐκ:",
index 8135f65..d47eab5 100644 (file)
        "qbmyoptions": "Ystellige",
        "faq": "Froge, wo vilmol gstellt wäre",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Abschnitt zuefiege",
-       "vector-action-delete": "Lesche",
-       "vector-action-move": "Verschiebe",
-       "vector-action-protect": "Schitze",
-       "vector-action-undelete": "Widerhärstelle",
-       "vector-action-unprotect": "Syteschutz ändere",
-       "vector-view-create": "Aalege",
-       "vector-view-edit": "Bearbeite",
-       "vector-view-history": "Versionsgschicht",
-       "vector-view-view": "Läse",
-       "vector-view-viewsource": "Quälltext aaluege",
        "actions": "Aktione",
        "namespaces": "Namensryym",
        "variants": "Variante",
        "searchrelated": "verwandt",
        "searchall": "alli",
        "showingresults": "Do {{PLURAL:$1|isch '''1''' Ergebnis|sin '''$1''' Ergebniss}}, s fangt aa mit dr Nummerer '''$2.'''",
-       "showingresultsnum": "Do {{PLURAL:$3|isch '''1''' Ergebnis|sin '''$3''' Ergebniss}}, s fangt aa mit dr Nummere '''$2.'''",
        "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' vu '''$3'''|Ergebnis '''$1 - $2''' vu '''$3'''}} fir '''$4'''",
        "search-nonefound": "Fir Dyyni Suechaafrog sin keini Ergebniss gfunde wore.",
        "powersearch-legend": "Erwytereti Suech",
index d5ef0ed..46f1539 100644 (file)
        "qbmyoptions": "મારાં પાનાં",
        "faq": "FAQ\nવારંવાર પુછાતા પ્રશ્નો",
        "faqpage": "Project:વારંવાર પુછાતા પ્રશ્નો",
-       "vector-action-addsection": "નવી ચર્ચા",
-       "vector-action-delete": "રદ કરો",
-       "vector-action-move": "ખસેડો",
-       "vector-action-protect": "સુરક્ષિત કરો",
-       "vector-action-undelete": "રદ કરેલું પાછું વાળો",
-       "vector-action-unprotect": "સુરક્ષા બદલો",
-       "vector-view-create": "બનાવો",
-       "vector-view-edit": "ફેરફાર કરો",
-       "vector-view-history": "ઇતિહાસ જુઓ",
-       "vector-view-view": "વાંચો",
-       "vector-view-viewsource": "સ્રોત જુઓ",
        "actions": "ક્રિયાઓ",
        "namespaces": "નામાવકાશો",
        "variants": "ભિન્ન રૂપો",
        "searchrelated": "શોધ સંબંધિત",
        "searchall": "બધા",
        "showingresults": " {{PLURAL:$1|'''1''' પરિણામ|'''$1''' પરિણામો}} સુધી #'''$2''' થી શરૂ  કરી",
-       "showingresultsnum": "#'''$2''' થી શરૂ કરી {{PLURAL:$3|'''1''' પરિણામresult|'''$3''' પરિણામો}} અહીં બતાવ્યાં છે",
        "showingresultsheader": "'''$4''' માટે {{PLURAL:$5|પરિણામ  '''$1''' of '''$3'''|પરિણામો '''$1 - $2''' of '''$3'''}}",
        "search-nonefound": "તમે આપેલી માહિતી ને મળતાં આવતાં કોઈ પરિણામો નથી",
        "powersearch-legend": "વધુ પર્યાયો સાથે શોધો",
index cb5b009..23cbf79 100644 (file)
        "qbmyoptions": "My ghuillagyn",
        "faq": "FC",
        "faqpage": "Project:FC",
-       "vector-action-addsection": "Cur cooish noa rish",
-       "vector-action-delete": "Scryss",
-       "vector-action-move": "Scugh",
-       "vector-action-protect": "Coadee",
-       "vector-action-undelete": "Jee-scryss",
-       "vector-action-unprotect": "Caghlaa coadey",
-       "vector-view-create": "Croo",
-       "vector-view-edit": "Reagh",
-       "vector-view-history": "Jeeagh er shennaghys",
-       "vector-view-view": "Lhaih",
-       "vector-view-viewsource": "Jeeagh er bun",
        "actions": "Jantyssyn",
        "namespaces": "Reamyssyn",
        "variants": "Cummaghyn elley",
        "viewprevnext": "Jeeagh er ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "'''Croo yn duillag \"[[:$1]]\" er y wiki shoh!'''",
        "searchprofile-articles": "Duillagyn cummal",
-       "searchprofile-project": "Duillagyn Coonee as Shalee",
        "searchprofile-everything": "Dagh red",
        "searchprofile-articles-tooltip": "Ronsee ayns $1",
-       "searchprofile-project-tooltip": "Ronsee ayns $1",
        "searchprofile-images-tooltip": "Ronsee coadanyn",
        "searchprofile-everything-tooltip": "Ronsee dagh red (goaill stiagh duillagyn resoonaght)",
        "search-result-size": "$1 ({{PLURAL:$2|1 fockle|$2 'ockle|$2 'ockle|$2 focklyn}})",
        "prefs-files": "Coadanyn",
        "youremail": "Post-L:",
        "username": "Dt'ennym ymmydeyr:",
-       "uid": "Enney ymmydeyr:",
        "prefs-memberingroups": "Oltey {{PLURAL:$1|possan|phossan|phossan|possanyn}} heese:",
        "prefs-registration": "Traa listal",
        "yourrealname": "Feer-ennym:",
        "log": "Lioaryn cooishyn",
        "all-logs-page": "Dagh ooilley lioar chooishyn",
        "allpages": "Dagh ooilley ghuillag",
-       "alphaindexline": "$1 gys $2",
        "nextpage": "Yn chied duillag elley ($1)",
        "prevpage": "Yn duillag roish ($1)",
        "allpagesfrom": "Taishbyn ny duillagyn ta toshiaghey lesh:",
index f081ee5..a900ad5 100644 (file)
        "qbmyoptions": "𠊎嘅頁面",
        "faq": "常見問題解答",
        "faqpage": "Project:常見問題解答",
-       "vector-action-addsection": "加入話題",
-       "vector-action-delete": "刪除",
-       "vector-action-move": "移動",
-       "vector-action-protect": "保護",
-       "vector-action-undelete": "恢復",
-       "vector-action-unprotect": "更改保護",
-       "vector-view-create": "建立",
-       "vector-view-edit": "編寫",
-       "vector-view-history": "查看歷史",
-       "vector-view-view": "閱讀",
-       "vector-view-viewsource": "查看源碼",
        "actions": "動作",
        "namespaces": "名字空間",
        "variants": "變換",
        "last": "上一隻",
        "page_first": "最早",
        "page_last": "最尾",
-       "histlegend": "差別選擇:標記愛比較修訂版本嘅單選按鈕並點擊底部嘅按鈕進行比較。<br />\n說明:'''({{int:cur}})''' 指撈最新修訂版本比較,'''({{int:last}})''' 指撈上隻修訂版本比較,'''{{int:minoreditletter}}''' = 細微修改。",
+       "histlegend": "差別選擇:標記愛比較版本嘅單選按鈕並點擊底部嘅按鈕進行比較。<br />\n說明:'''({{int:cur}})''' 指撈最新版本比較,'''({{int:last}})''' 指撈上隻版本比較,'''{{int:minoreditletter}}''' = 細微修改。",
        "history-fieldset-title": "瀏覽歷史",
        "history-show-deleted": "單淨係已刪除嘅",
        "histfirst": "最早",
        "searchrelated": "相關",
        "searchall": "全部",
        "showingresults": "Ha-mien hién-sṳ chhiùng thi-'''$2'''-thiàu khôi-sṳ́ ke '''$1'''-thiàu kiet-kó:",
-       "showingresultsnum": "下背展示從第'''$2'''條開始嘅'''{{PLURAL:$3|1|$3}}'''條結果。",
        "showingresultsheader": "對'''$4'''嘅{{PLURAL:$5|第'''$1'''到第'''$3'''隻結果|第'''$1 - $2'''隻,共'''$3'''隻結果}}",
        "search-nonefound": "在查詢肚無結果相符。",
        "powersearch-legend": "高級搜尋",
        "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",
        "tooltip-save": "保存汝嘅修改",
        "tooltip-preview": "預覽汝嘅編寫,請先使用本功能後再保存!",
        "tooltip-diff": "展示汝對頁面嘅貢獻",
-       "tooltip-compareselectedversions": "查看本頁分點選嘅兩個修訂版本間嘅差別",
+       "tooltip-compareselectedversions": "查看本頁分點選嘅兩個版本間嘅差別",
        "tooltip-watch": "加邇頁入監視列表",
        "tooltip-recreate": "Chhùng-kien ke-vùn-chông, mò-lun he-feu pûn chhù-chhîn",
        "tooltip-rollback": "撳“打轉頭”恢復上一位貢獻人對本頁面嘅編寫",
        "tooltip-undo": "“撤銷”做得在編寫模式上開啟編輯寫表格來方便復原。其允許在摘要肚加入原因。",
        "tooltip-summary": "輸入一條簡短嘅摘要",
        "common.css": "/* Chhṳ́-chhu ke CSS chiông-chhiu yin-yung chhai só-yû ke mien-pán */",
-       "monobook.css": "/* Chhṳ́-chhu ke CSS chiông-voi yáng-hióng sṳ́-yung Monobook mien-pán ke yung-fu */",
        "common.js": "/* Chhṳ́-chhu ke JavaScript chiông chai-ngi̍p yî só-yû ying-fu mî yit-ke vùn-chông. */",
-       "monobook.js": "/* Yí-kîn put-chai sṳ́-yung; chhiáng-yung [[MediaWiki:common.js]] */",
        "anonymous": "{{SITENAME}} ke ngia̍k-miàng yung-fu",
        "siteuser": "{{SITENAME}} Yung-fu-chá $1",
        "lastmodifiedatby": "Chhṳ́-chông yù $3 yî $1 $2 ke chui-heu kiên-kói.",
index a78042e..bfba9bb 100644 (file)
        "qbmyoptions": "Ka‘u mau ‘ao‘ao",
        "faq": "NNP",
        "faqpage": "Project:NNP",
-       "vector-action-addsection": "Hoʻohui kumuhana",
-       "vector-action-delete": "Holoi",
-       "vector-action-move": "E hoʻoneʻe",
-       "vector-action-protect": "E hoʻomalu",
-       "vector-action-undelete": "Holoiʻole",
-       "vector-action-unprotect": "E hoʻololi i ka hoʻomalu",
-       "vector-view-create": "Haku",
-       "vector-view-edit": "Hoʻololi",
-       "vector-view-history": "Nānā i ka mōʻaukala",
-       "vector-view-view": "Heluhelu",
-       "vector-view-viewsource": "Nānā i ke kumu",
        "actions": "Nā Hana",
        "namespaces": "Lewainoa",
        "variants": "Nā Lolina",
        "recreate-moveddeleted-warn": "<strong>E akahele: Ke haku nei ʻoe i kekahi ʻaoʻao i holoi ʻia.</strong>\n\nPono ʻoe e noʻonoʻo e pili ana ka pono o ka hoʻomau ʻana o ka hoʻololi ʻana o kēia ʻaoʻao.\nAia ka moʻolelo holoi a hoʻoneʻe no kēia ʻaoʻao ma ʻaneʻi:",
        "moveddeleted-notice": "Ua holoi ʻia kēia ʻaoʻao.\nHoʻolako ʻia ka moʻolelo holoi a hoʻoneʻe no kēia ʻaoʻao i lalo no ke kūmole.",
        "log-fulllog": "Nānā i ka moʻolelo piha",
-       "postedit-confirmation": "Ua mālama ʻia kāu hoʻololi",
+       "postedit-confirmation-saved": "Ua mālama ʻia kāu hoʻololi",
        "defaultmessagetext": "Kikokikona pūlono pa‘amau",
        "content-model-wikitext": "kikokikonawiki",
        "content-model-javascript": "IawaSikulipa",
        "searchmenu-exists": "<strong>Aia kekahi ʻaoʻao i kapa ʻia o \"[[:$1]]\" ma kēia wiki.</strong> {{PLURAL:$2|0=|ʻIke hoʻi i na hualoaʻa huli ʻē aʻe i loaʻa ʻia.}}",
        "searchmenu-new": "<strong>Haku i ka ʻaoʻao \"[[:$1]]\" ma kēia wiki!</strong> {{PLURAL:$2|0=|\"ʻIke hoʻi i ka ʻaoʻao i loaʻa ʻia ma kou huli ʻana.|ʻIke hoʻi nā hualoaʻa huli i loaʻa ʻia.}}",
        "searchprofile-articles": "Nā ʻAoʻao mealoko",
-       "searchprofile-project": "Nā ʻaoʻao Kōkua a me Papahana",
        "searchprofile-images": "Laupāpaho",
        "searchprofile-everything": "Nā mea apau",
        "searchprofile-advanced": "Kiʻelē",
        "searchprofile-articles-tooltip": "Huli i loko o $1",
-       "searchprofile-project-tooltip": "Huli i loko o $1",
        "searchprofile-images-tooltip": "Huli no nā waihona",
        "searchprofile-everything-tooltip": "Huli i nā mea apau (nā walaʻau nō hoʻi)",
        "searchprofile-advanced-tooltip": "Huli iā lewainoa pilikino",
        "search-interwiki-default": "Nā hualoaʻa mai $1:",
        "search-interwiki-more": "(hou aʻe)",
        "search-relatedarticle": "Nā Mea ʻālike",
-       "searcheverything-enable": "Huli i nā lewainoa apau",
        "searchrelated": "na mea ʻālike",
        "searchall": "nā mea apau",
        "showingresultsheader": "{{PLURAL:$5|<strong>$1</strong> hualoaʻa o <strong>$3</strong> mau hualoaʻa|<strong$1-$2</strong> mau hualoaʻa o <strong>$3</strong> mau hualoaʻa}} no <strong>$4</strong>",
        "prefs-files": "Waihona",
        "youremail": "Lekauila:",
        "username": "{{GENDER:$1|Inoa mea hoʻohana}}:",
-       "uid": "{{GENDER:$1|Mea hoʻohana}} ID:",
        "prefs-memberingroups": "{{GENDER:$2|He lālā}} o {{PLURAL:$1|hui|mau hui}}:",
        "prefs-registration": "Hola kāinoa:",
        "yourrealname": "Inoa ʻoiaʻiʻo:",
        "log": "Nā Mo‘olelo",
        "all-logs-page": "Nā Moʻolelo lehulehu apau",
        "allpages": "Nā ‘Ao‘ao apau",
-       "alphaindexline": "$1 i $2",
        "nextpage": "Mea aʻe ($1)",
        "prevpage": "Mea ma mua aʻe ($1)",
        "allarticles": "Nā ʻAoʻao apau",
        "show-big-image-preview": "Ka nui o kēia nāmua: $1.",
        "show-big-image-size": "$1 × $2 mau pikela",
        "newimages-legend": "Kānana",
-       "showhidebots": "($1 mau lopako)",
        "noimages": "ʻAʻohe mea.",
        "ilsubmit": "Huli",
        "bydate": "e ka lā",
index ac2fc27..d4e2ecf 100644 (file)
        "qbmyoptions": "האפשרויות שלי",
        "faq": "שאלות ותשובות",
        "faqpage": "Project:שאלות ותשובות",
-       "vector-action-addsection": "הוספת נושא",
-       "vector-action-delete": "מחיקה",
-       "vector-action-move": "העברה",
-       "vector-action-protect": "הגנה",
-       "vector-action-undelete": "ביטול מחיקה",
-       "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": "תפריט הניווט",
        "searchall": "הכול",
        "showingresults": "{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} החל ממספר <strong>$2</strong>:",
        "showingresultsinrange": "{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} בין המספרים <strong>$2</strong> ו‏‏־<strong>$3</strong>:",
-       "showingresultsnum": "{{PLURAL:$3|מוצגת תוצאה '''אחת'''|מוצגות '''$3''' תוצאות}} החל ממספר '''$2''':",
        "showingresultsheader": "{{PLURAL:$5|תוצאה '''$1''' מתוך '''$3'''|תוצאות '''$1 - $2''' מתוך '''$3'''}} עבור '''$4'''",
        "search-nonefound": "לא נמצאו תוצאות המתאימות לחיפוש.",
        "powersearch-legend": "חיפוש מתקדם",
        "tooltip-preferences-save": "שמירת ההעדפות",
        "tooltip-summary": "להכנסת תקציר קצר",
        "common.css": "/* הסגנונות הנכתבים כאן ישפיעו על כל העיצובים */",
-       "monobook.css": "/* הסגנונות הנכתבים כאן ישפיעו על העיצוב MonoBook בלבד */",
-       "vector.css": "/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Vector בלבד */",
        "print.css": "/* הסגנונות הנכתבים כאן ישפיעו על הפלט בהדפסה בלבד */",
        "noscript.css": "/* הסגנונות הנכתבים כאן ישפיעו על משתמשים עם JavaScript מבוטל */",
        "group-autoconfirmed.css": "/* הסגנונות הנכתבים כאן ישפיעו על משתמשים ותיקים בלבד */",
        "group-sysop.css": "/* הסגנונות הנכתבים כאן ישפיעו על מפעילי מערכת בלבד */",
        "group-bureaucrat.css": "/* הסגנונות הנכתבים כאן ישפיעו על ביורוקרטים בלבד */",
        "common.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ עבור כל המשתמשים בכל טעינת עמוד */",
-       "monobook.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Monobook */",
-       "vector.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Vector */",
        "group-autoconfirmed.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ עבור משתמשים ותיקים בלבד */",
        "group-user.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ עבור משתמשים רשומים בלבד */",
        "group-bot.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ עבור בוטים בלבד */",
        "pageinfo-category-pages": "מספר הדפים",
        "pageinfo-category-subcats": "מספר קטגוריות המשנה",
        "pageinfo-category-files": "מספר הקבצים",
-       "skinname-monobook": "מונובוק",
-       "skinname-vector": "וקטור",
        "markaspatrolleddiff": "סימון השינוי כבדוק",
        "markaspatrolledtext": "סימון דף זה כבדוק",
        "markedaspatrolled": "השינוי סומן כבדוק",
        "duplicate-defaultsort": "'''אזהרה:''' המיון הרגיל \"$2\" דורס את המיון הרגיל המוקדם ממנו \"$1\".",
        "version": "גרסת התוכנה",
        "version-extensions": "הרחבות מותקנות",
+       "version-skins": "עיצובים מותקנים",
        "version-specialpages": "דפים מיוחדים",
        "version-parserhooks": "הרחבות מפענח",
        "version-variables": "משתנים",
        "version-antispam": "מניעת ספאם",
-       "version-skins": "עיצובים",
        "version-other": "אחר",
        "version-mediahandlers": "מציגי מדיה",
        "version-hooks": "מבני Hook",
        "version-hook-name": "שם ה־Hook",
        "version-hook-subscribedby": "הפונקציה הרושמת",
        "version-version": "($1)",
+       "version-no-ext-name": "[ללא שם]",
        "version-license": "רישיון עבור מדיה־ויקי",
        "version-ext-license": "רישיון",
        "version-ext-colheader-name": "הרחבה",
+       "version-skin-colheader-name": "עיצוב",
        "version-ext-colheader-version": "גרסה",
        "version-ext-colheader-license": "רישיון",
        "version-ext-colheader-description": "תיאור",
        "expand_templates_remove_nowiki": "הסרת תגי <nowiki> בתוצאה",
        "expand_templates_generate_xml": "הצגת עץ הפענוח של XML",
        "expand_templates_generate_rawhtml": "הצגת HTML גולמי",
-       "expand_templates_preview": "תצוגה מקדימה"
+       "expand_templates_preview": "תצוגה מקדימה",
+       "pagelanguage": "בורר שפת הדף",
+       "pagelang-name": "דף",
+       "pagelang-language": "שפה",
+       "pagelang-use-default": "להשתמש בשפה הרגילה",
+       "pagelang-select-lang": "בחירת שפה",
+       "right-pagelang": "שינוי שפת הדף",
+       "action-pagelang": "לשנות את שפת הדף",
+       "log-name-pagelang": "יומן שינוי שפה",
+       "log-description-pagelang": "זהו יומן של שינויים בשפות של הדפים.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|שינה|שינתה}} את שפת הדף $3 מ$4 ל$5."
 }
index ce3cd48..6845717 100644 (file)
        "qbmyoptions": "मेरे पृष्ठ",
        "faq": "बहुधा पूछे प्रश्न",
        "faqpage": "Project:अक्सर पूछे जाने वाले सवाल",
-       "vector-action-addsection": "विषय जोड़ें",
-       "vector-action-delete": "हटाएँ",
-       "vector-action-move": "स्थानांतरण करें",
-       "vector-action-protect": "सुरक्षित करें",
-       "vector-action-undelete": "हटाना वापस लें",
-       "vector-action-unprotect": "सुरक्षा बदलें",
-       "vector-view-create": "बनाएँ",
-       "vector-view-edit": "सम्पादन",
-       "vector-view-history": "इतिहास देखें",
-       "vector-view-view": "पढ़ें",
-       "vector-view-viewsource": "स्रोत देखें",
        "actions": "क्रियाएँ",
        "namespaces": "नामस्थान",
        "variants": "संस्करण",
        "searchrelated": "सम्बंधित",
        "searchall": "सभी",
        "showingresults": "नीचे क्रमांक '''$2''' से प्रारंभ कर के अधिकतम '''$1''' परिणाम {{PLURAL:$1|दिखाया गया है|दिखाए गए हैं}}।",
-       "showingresultsnum": "नीचे क्रमांक '''$2''' से प्रारंभ कर के अधिकतम '''$3''' परिणाम {{PLURAL:$3|दिखाया गया है|दिखाए गए हैं}}।",
        "showingresultsheader": "'''$4''' के खोज परिणाम {{PLURAL:$5|कुल '''$3''' में से #'''$1'''|कुल '''$3''' में से क्रं. '''$1 - $2'''}}",
        "search-nonefound": "आपकी खोज से मेल खाते कोई परिणाम नहीं मिले।",
        "powersearch-legend": "उन्नत खोज",
        "tooltip-preferences-save": "वरीयताएं सहेजें",
        "tooltip-summary": "एक संक्षिप्त सारांश दर्ज करें",
        "common.css": "/* यहां रखी css सभी त्वचाओंपर असर करेगी */",
-       "monobook.css": "/* यहां रखी गई css मोनोबुक त्वचा का इस्तेमाल करने वाले सभी सदस्योंपर असर करेगी */",
        "common.js": "/* यहां लिखी गई जावास्क्रीप्ट सभी सदस्योंके लिये इस्तेमाल में लाई जायेगी। */",
-       "monobook.js": "/* यहाँ पर दी गई जावास्क्रिप्ट मोनोबुक त्वचा का प्रयोग कर रहे सदस्यों के लिए लोड होगी */",
        "anonymous": "{{SITENAME}} के {{PLURAL:$1||}} बेनामी सदस्य",
        "siteuser": "विकिपीडिया सदस्य  $1",
        "anonuser": "{{SITENAME}} अज्ञात उपयोगकर्ता $1",
index fda5f14..21f50ce 100644 (file)
        "qbmyoptions": "Hamar panna",
        "faq": "Sab time puchhe waala sawal",
        "faqpage": "Project:Sab time puchhe waala sawal",
-       "vector-action-addsection": "Topic jorro",
-       "vector-action-delete": "Mitao",
-       "vector-action-move": "Naam badlo",
-       "vector-action-protect": "Bachao",
-       "vector-action-undelete": "Pahile jaise karo",
-       "vector-action-unprotect": "Surakchha ke badlo",
-       "vector-view-create": "Banao",
-       "vector-view-edit": "Badlo",
-       "vector-view-history": "Itihaas dekho",
-       "vector-view-view": "Parrho",
-       "vector-view-viewsource": "Source dekho",
        "actions": "Karam",
        "namespaces": "Naam",
        "variants": "Antar",
        "difference-missing-revision": "Ii badlao ($1) {{PLURAL:$2|was|were}} pe {{PLURAL:$2|One revision|$2 revisions}} nai pawa gais hae\nIske kaaran ii hoe sake hae ki ek mitawa gais panna se link karaa jaawe hae.\nIske baare me aur jaankari [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] me paawa jaae sake hae.",
        "searchresults": "Khoj ke natija",
        "searchresults-title": "\"$1\" ke natija ke khojo",
-       "toomanymatches": "Bahut dher match mila, duusra query se kosis karo",
        "titlematches": "Panna ke jon naam mile hai",
        "textmatches": "Panna ke jon text mile hai",
        "notextmatches": "Koi panna see text nai mile hae",
        "searchrelated": "sambhand rakkhe hai",
        "searchall": "sab",
        "showingresults": "Niche dekhae hai {{PLURAL:$1|'''1''' result|'''$1''' results}} #'''$2''' se suruu hoe ke.",
-       "showingresultsnum": "Niche dekhawa jae hai {{PLURAL:$3|'''1''' result|'''$3''' results}}, #'''$2''' se suruu hoe ke.",
        "showingresultsheader": "{{PLURAL:$5|Natija '''$1''' of '''$3'''|Natija '''$1 - $2''' of '''$3'''}} '''$4''' khatir",
        "search-nonefound": "Ii sawaal ke koi jawab nai hae.",
        "powersearch-legend": "Gahira khoj",
index 1de9987..255e77f 100644 (file)
        "qbmyoptions": "Akon mga panid",
        "faq": "Mga masami pamangkoton",
        "faqpage": "Project:MMP",
-       "vector-action-addsection": "Magdugang sang topiko",
-       "vector-action-delete": "Panason",
-       "vector-action-move": "Saylohon",
-       "vector-action-protect": "Pangapinan",
-       "vector-action-undelete": "Dulaon ang pagpanas",
-       "vector-action-unprotect": "Ilisan ang pagpangapin",
-       "vector-view-create": "Himuon",
-       "vector-view-edit": "Ilisan",
-       "vector-view-history": "Lantawon ang kasaysayan",
-       "vector-view-view": "Magbasa",
-       "vector-view-viewsource": "Lantawon ang ginhalinan",
        "actions": "Mga hulag",
        "namespaces": "Ngalan-espasyo",
        "variants": "Mga nagkalain-lain",
        "difference-missing-revision": "May {{PLURAL:$2|isa ka pagbag-o|$2 ka mga pagbag-o}} san sini nga kinalain ($1) ang wala makita.\n\nIni kalabanan ginabuhat sang nagasunod nga wala na mabag-o nga link sang isa ka panid nga gindula na.\nAng mga detalye mahimo nga makita sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "searchresults": "Resulta sang Pagpangita",
        "searchresults-title": "Resulta sang Pagpangita para \"$1\"",
-       "toomanymatches": "Tuman ka madamo nga pareho ang nagbalik, palihog tilaw sang lain nga pagpangita",
        "titlematches": "Mga pareho nga titulo sang panid",
        "textmatches": "Mga pareho nga teksto sang panid",
        "notextmatches": "Wala sang pahina nga parehas teksto",
        "searchmenu-exists": "'''May yara sang panid nga ginhingalanan nga \"[[:$1]]\" sa sini nga wiki.'''",
        "searchmenu-new": "'''Gintuga ang panid nga \"[[:$1]]\" sa sini nga wiki!'''",
        "searchprofile-articles": "Mga panid sang unod",
-       "searchprofile-project": "Mga panid sang Bulig kag Proyekto",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tanan-tanan",
        "searchprofile-advanced": "Mas mauna",
        "searchprofile-articles-tooltip": "Pangitaa sa $1",
-       "searchprofile-project-tooltip": "Pangitaa sa $1",
        "searchprofile-images-tooltip": "Mangita sang mga hilera",
        "searchprofile-everything-tooltip": "Pangitaon ang tanan nga kaundan (dala na ang mga panid sang pag-estorya)",
        "searchprofile-advanced-tooltip": "Pangitaon sa pahungod nga espasyo sang pangalan",
        "search-interwiki-default": "$1 mga resulta:",
        "search-interwiki-more": "(damu)",
        "search-relatedarticle": "Konektado",
-       "searcheverything-enable": "Pangitaon sa tanan nga espasyo sang pangalan",
        "searchrelated": "konektado",
        "searchall": "tanan",
        "showingresults": "Ginapakita sa dalom pakadto sa {{PLURAL:$1|'''1''' ka resulta|'''$1''' ka mga resulta}} umpisa ang #'''$2'''.",
-       "showingresultsnum": "Ginapakita sa dalom ang {{PLURAL:$3|'''1''' ka resulta|'''$3''' ka mga resulta}} umpisa ang #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resulta nga '''$1''' sang '''$3'''|Mga resulta nga '''$1 - $2''' sang '''$3'''}} para sa '''$4'''",
        "search-nonefound": "Wala sang mga resulta nga nagsanto sa imo nga ginapangita.",
        "powersearch-legend": "Abanse nga pagpangita",
        "allowemail": "Paganahon ang e-mail halin sa iban nga manuggamit",
        "prefs-searchoptions": "Mga pililian sa pagpangita",
        "prefs-namespaces": "Ngalan-espasyo",
-       "defaultns": "Kon indi magpangita na lang sa sini nga mga ngalan-espasyo",
        "default": "default",
        "prefs-files": "Mga hilera",
        "prefs-custom-css": "Ginhungod nga CSS",
        "prefs-emailconfirm-label": "Paagkumperma sang e-mail:",
        "youremail": "E-mail:",
        "username": "Ngalan sang Manog-gamit:",
-       "uid": "ID sang manuggamit:",
        "prefs-memberingroups": "Miyembro sang {{PLURAL:$1|grupo|mga grupo}}:",
        "prefs-registration": "Oras sang pagparehistro:",
        "yourrealname": "Matood-tood nga pangalan:",
        "booksources-go": "Lakat",
        "log": "Logs",
        "allpages": "Tanan nga mga pahina",
-       "alphaindexline": "$1 sa $2",
        "prevpage": "Antes nga pahina ($1)",
        "allpagesfrom": "Ipakita ang mga pahina sugod sa:",
        "allpagesto": "Ipakita ang mga pahina nga nagakatapos sa:",
index eccf94d..53180a8 100644 (file)
        "qbmyoptions": "Moje stranice",
        "faq": "Najčešća pitanja",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Dodaj temu",
-       "vector-action-delete": "Izbriši",
-       "vector-action-move": "Premjesti",
-       "vector-action-protect": "Zaštiti",
-       "vector-action-undelete": "Vrati",
-       "vector-action-unprotect": "Promijeni zaštitu",
-       "vector-view-create": "Započni",
-       "vector-view-edit": "Uredi",
-       "vector-view-history": "Vidi stare izmjene",
-       "vector-view-view": "Čitaj",
-       "vector-view-viewsource": "Vidi izvor",
        "actions": "Radnje",
        "namespaces": "Imenski prostori",
        "variants": "Inačice",
        "searchall": "sve",
        "showingresults": "Dolje {{PLURAL:$1|je prikazan '''$1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}}, počevši od '''$2'''.",
        "showingresultsinrange": "Dolje {{PLURAL:$1|je prikazan '''$1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}}, u rasponu od '''$2''' do '''$3'''.",
-       "showingresultsnum": "Dolje {{PLURAL:$3|je prikazan '''$3''' rezultat|su prikazana '''$3''' rezultata|je prikazano '''$3''' rezultata}}, počevši s brojem '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Rezultat '''$1''' od '''$3'''|Rezultati '''$1 - $2''' od '''$3'''}} za '''$4'''",
        "search-nonefound": "Ne postoje rezultati koji se podudaraju s upitom.",
        "powersearch-legend": "Napredno pretraživanje",
        "right-bot": "Izmjene su tretirane kao automatski proces (bot)",
        "right-nominornewtalk": "Bez manjih izmjena na novim stranicama za razgovor",
        "right-apihighlimits": "Korištenje viših granica kod API upita",
-       "right-writeapi": "Mogućnost pisanja API",
+       "right-writeapi": "Mogućnost pisanja API-ja",
        "right-delete": "Brisanje stranica",
        "right-bigdelete": "Brisanje stranica koje imaju veliku povijest",
        "right-deletelogentry": "Brisanje i vraćanje određenih zapisa u evidenciji",
        "right-block": "Blokiranje suradnika u uređivanju",
        "right-blockemail": "Blokiranje suradnika u slanju elektroničke pošte",
        "right-hideuser": "Blokiranje suradničkog imena, skrivajući ga od javnosti",
-       "right-ipblock-exempt": "Imunitet na IP blokiranje, auto-blok i blokiranje opsega",
-       "right-proxyunbannable": "Imunitet na automatska blokiranja posrednika (proxya)",
+       "right-ipblock-exempt": "Iznimka od blokiranja IP adresa, auto-bloka i blokiranja opsega",
+       "right-proxyunbannable": "Iznimka od automatskih blokiranja posrednika (proxya)",
        "right-unblockself": "Odblokirati se",
        "right-protect": "Mijenjanje razina zaštićivanja i uređivanje zaštićenih stranica",
        "right-editprotected": "Uređivanje zaštićenih stranica (bez prenosive zaštite)",
+       "right-editsemiprotected": "Uređivanje zaštićenih stranica kao \"{{int: zaštititi-nivo-autoconfirmed}}\"",
        "right-editinterface": "Uređivanje suradničkog sučelja",
        "right-editusercssjs": "Uređivanje CSS i JS stranica drugih suradnika",
        "right-editusercss": "Uređivanje CSS stranica drugih suradnika",
        "right-edituserjs": "Uređivanje JS stranica drugih suradnika",
+       "right-editmyusercss": "Uređivanje vlastitih CSS stranica",
+       "right-editmyuserjs": "Uređivanje vlastitih JavaScript stranica",
        "right-viewmywatchlist": "Pregled svojeg popisa praćenih stranica",
+       "right-editmywatchlist": "Uređivanje vlastitog popisa praćenja. Određenim djelovanjima moguće je dodavati stranice i bez ovoga dopuštenja.",
        "right-viewmyprivateinfo": "Vidite svoje privatne podatke (npr. adresu e-pošte, stvarno ime)",
        "right-editmyprivateinfo": "Uredite svoje privatne podatke (npr. adresa e-pošte, stvarno ime)",
        "right-editmyoptions": "Uredite svoje postavke",
        "listgrouprights-removegroup-self": "Ukloni {{PLURAL:$2|skupinu|skupine}} iz vlastitog računa: $1",
        "listgrouprights-addgroup-self-all": "Dodaj sve skupine vlastitom računu",
        "listgrouprights-removegroup-self-all": "Uklonite sve skupine iz vlastitog računa",
+       "trackingcategories-nodesc": "Opis nije dostupan.",
        "mailnologin": "Nema adrese pošiljaoca",
        "mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]]\ni imati valjanu adresu e-pošte u svojim [[Special:Preferences|postavkama]]\nda bi mogli slati poštu drugim suradnicima.",
        "emailuser": "Pošalji mu e-poruku",
        "delete_and_move": "Izbriši i premjesti",
        "delete_and_move_text": "==Nužno brisanje==\n\nOdredišni članak \"[[:$1]]\" već postoji. Želite li ga obrisati da biste napravili mjesto za premještaj?",
        "delete_and_move_confirm": "Da, izbriši stranicu",
-       "delete_and_move_reason": "Obrisano kako bi se napravilo mjesta za premještaj, stari naziv \"[[$1]]\"",
+       "delete_and_move_reason": "obrisano kako bi se napravilo mjesto za premještaj, stari naziv \"[[$1]]\"",
        "selfmove": "Izvorni i odredišni naslov su isti; ne mogu premjestiti stranicu na nju samu.",
        "immobile-source-namespace": "Ne mogu premjestiti stranice u imenski prostor \"$1\"",
        "immobile-target-namespace": "Ne mogu premjestiti stranice u imenski prostor \"$1\"",
        "tooltip-preferences-save": "Spremi postavke",
        "tooltip-summary": "Unesite kratki sažetak",
        "common.css": "/** Uređivanje ove CSS datoteke će se odraziti na sve skinove */",
-       "monobook.css": "/** Ovdje idu izmjene monobook stylesheeta */",
        "common.js": "/* JavaScript kod na ovoj stranici će biti izvršen kod svakog suradnika pri svakom učitavanju svake stranice wikija. */",
-       "monobook.js": "/* Ne rabi se više; molimo rabite [[MediaWiki:common.js]] */",
        "anonymous": "Neprijavljeni {{PLURAL:$1|suradnik|suradnici}} projekta {{SITENAME}}",
        "siteuser": "Suradnik $1 na projektu {{SITENAME}}",
        "anonuser": "{{SITENAME}} anonimni suradnik $1",
        "pageinfo-category-pages": "Broj stranica",
        "pageinfo-category-subcats": "Broj podkategorija",
        "pageinfo-category-files": "Broj datoteka",
-       "skinname-monobook": "MonoBook",
        "markaspatrolleddiff": "Označi za pregledano",
        "markaspatrolledtext": "Označi ovaj članak pregledanim",
        "markedaspatrolled": "Pregledano",
        "scarytranscludefailed": "[Dobava predloška nije uspjela za $1]",
        "scarytranscludefailed-httpstatus": "[Preuzimanje predloška nije uspjelo za $1: HTTP $2]",
        "scarytranscludetoolong": "[URL je predug]",
-       "deletedwhileediting": "'''Upozorenje''': Ova stranica je obrisana nakon što ste počeli uređivati!",
+       "deletedwhileediting": "'''Upozorenje''': ova stranica je obrisana nakon što ste počeli uređivati!",
        "confirmrecreate": "Suradnik [[User:$1|$1]] ([[User talk:$1|talk]]) izbrisao je ovaj članak nakon što ste ga počeli uređivati. Razlog brisanja\n: ''$2''\nPotvrdite namjeru vraćanja ovog članka.",
        "confirmrecreate-noreason": "Suradnik [[User:$1|$1]] ([[User talk:$1|razgovor]]) je obrisao ovaj članak nakon što ste ga počeli uređivati. Molimo potvrdite da stvarno želite ponovo započeti ovaj članak.",
        "recreate": "Vrati",
        "duplicate-defaultsort": "'''Upozorenje:''' Razvrstavanje po \"$2\" poništava ranije razvrstavanje po \"$1\".",
        "version": "Inačica softvera",
        "version-extensions": "Instalirana proširenja",
+       "version-skins": "Izgledi",
        "version-specialpages": "Posebne stranice",
        "version-parserhooks": "Kuke parsera",
        "version-variables": "Varijable",
        "version-antispam": "Sprječavanje spama",
-       "version-skins": "Izgledi",
        "version-other": "Ostalo",
        "version-mediahandlers": "Rukovatelji medijima",
        "version-hooks": "Kuke",
        "specialpages-note": "* Normalne posebne stranice\n* <span class=\"mw-specialpagerestricted\">Posebne stranice s ograničenim pristupom.</span>",
        "specialpages-group-maintenance": "Izvještaji za održavanje",
        "specialpages-group-other": "Ostale posebne stranice",
-       "specialpages-group-login": "Prijava / Otvaranje računa",
+       "specialpages-group-login": "Prijava/otvaranje računa",
        "specialpages-group-changes": "Nedavne promjene i evidencije",
        "specialpages-group-media": "Izvještaji i postavljanje datoteka",
        "specialpages-group-users": "Suradnici i suradnička prava",
        "api-error-mustbeloggedin": "Morate biti prijavljeni da bi mogli postavljati datoteke.",
        "api-error-mustbeposted": "Postoji pogreška u ovom softveru; ne rabi ispravnu HTTP metodu.",
        "api-error-noimageinfo": "Postavljanje je uspjelo, ali poslužitelj nije vratio nikakvu informaciju o datoteci.",
-       "api-error-nomodule": "Interna pogrješka: Nije postavljen modul za postavljanje.",
-       "api-error-ok-but-empty": "Interna pogrješka: Nema odgovora od poslužitelja.",
+       "api-error-nomodule": "Interna pogrješka: nije postavljen modul za postavljanje.",
+       "api-error-ok-but-empty": "Interna pogrješka: nema odgovora od poslužitelja.",
        "api-error-overwrite": "Postavljanje preko postojeće datoteke nije dopušteno.",
        "api-error-stashfailed": "Interna pogrješka: Poslužitelj nije uspio spremiti privremenu datoteku.",
-       "api-error-publishfailed": "Interna pogrješka: Poslužitelj nije uspio objaviti privremenu datoteku.",
+       "api-error-publishfailed": "Interna pogrješka: poslužitelj nije uspio objaviti privremenu datoteku.",
        "api-error-timeout": "Poslužitelj nije odgovorio unutar očekivanog vrjemena.",
        "api-error-unclassified": "Dogodila se nepoznata pogrješka.",
        "api-error-unknown-code": "Nepoznata pogrješka: \"$1\"",
-       "api-error-unknown-error": "Interna pogrješka: Dogodila se pogrješka pri pokušaju postavljanja vaše datoteke.",
+       "api-error-unknown-error": "Interna pogrješka: dogodila se pogrješka pri pokušaju postavljanja vaše datoteke.",
        "api-error-unknown-warning": "Nepoznato upozorenje: $1",
        "api-error-unknownerror": "Nepoznata pogrješka: \"$1\"",
        "api-error-uploaddisabled": "Postavljanje datoteka je onemogućeno na ovom wikiprojektu.",
index 3f2d2f3..b952766 100644 (file)
        "qbmyoptions": "Meine Seite",
        "faq": "Häifich gestellte Froche",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Abschnitt hinzufüche",
-       "vector-action-delete": "Lösche",
-       "vector-action-move": "Verschiebe",
-       "vector-action-protect": "Schütz",
-       "vector-action-undelete": "Wiederherstelle",
-       "vector-action-unprotect": "Seiteschutz ännre",
-       "vector-view-create": "Erstell",
-       "vector-view-edit": "Beoorbeite",
-       "vector-view-history": "Versionsgeschicht",
-       "vector-view-view": "Lese",
-       "vector-view-viewsource": "Quelltext oonzeiche",
        "actions": "Aktione",
        "namespaces": "Noomeräume",
        "variants": "Variante",
        "searchall": "alle",
        "showingresults": "Hier {{PLURAL:$1|ist '''1''' Ergebnis|sind '''$1''' Ergebnisse}}, beginnend mit Nummer '''$2.'''",
        "showingresultsinrange": "Unne {{PLURAL:$1|weard <strong>en</strong> Ergebnis|werre bis zu <strong>$1</strong> Ergebnisse}} im Bereich <strong>$2</strong> bis <strong>$3</strong> oongezeicht.",
-       "showingresultsnum": "Hier {{PLURAL:$3|ist '''1''' Ergebnis|sind '''$3''' Ergebnisse}}, beginnend mit Nummer '''$2.'''",
        "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' von '''$3'''|Ergebnisse '''$1–$2''' von '''$3'''}} für '''$4'''",
        "search-nonefound": "Zu deiner Suchoonfroch wore ken Ergebnisse gefund.",
        "powersearch-legend": "Erweiterte Such",
index b23073b..3677994 100644 (file)
        "qbmyoptions": "Moje strony",
        "faq": "Husto stajene prašenja (FAQ)",
        "faqpage": "Project:Husto stajene prašenja (FAQ)",
-       "vector-action-addsection": "Temu přidać",
-       "vector-action-delete": "wušmórnyć",
-       "vector-action-move": "přesunyć",
-       "vector-action-protect": "škitać",
-       "vector-action-undelete": "Wobnowić",
-       "vector-action-unprotect": "Škit wotstronić",
-       "vector-view-create": "Wutworić",
-       "vector-view-edit": "Wobdźěłać",
-       "vector-view-history": "Stawizny",
-       "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",
        "searchall": "wšě",
        "showingresults": "Deleka so hač {{PLURAL:$1|'''1''' wuslědk pokazuje|'''$1''' wuslědkaj pokazujetej|'''$1''' wuslědki pokazuja|'''$1''' wuslědkow pokazuje}}, započinajo z #'''$2'''.",
        "showingresultsinrange": "Deleka so do {{PLURAL:$1|<strong>1</strong> wuslědka|<strong>$1</strong> wuslědkow}} we wobłuku <strong>$2</strong> hač do <strong>$3</strong> pokazuje.",
-       "showingresultsnum": "Deleka so {{PLURAL:$3|'''1''' wuslědk pokazuje|'''$3''' wuslědkaj pokazujetej|'''$3''' wuslědki pokazuja|'''$3''' wuslědkow pokazuje}}, započinajo z #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Wuslědk '''$1''' z '''$3'''|Wuslědki '''$1 - $2''' z '''$3'''}} za '''$4'''",
        "search-nonefound": "Njebuchu wuslědki namakane, kotrež naprašowanju wotpowěduja.",
        "powersearch-legend": "Rozšěrjene pytanje",
        "tooltip-summary": "Zapodaj krótke zjeće",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* CSS w tutej dataji budźe so na wšěch stronow wuskutkować. */",
-       "monobook.css": "/* CSS wobdźěłać, zo by so skin „monobook” za wšěčh wužiwarjow tutoho skina priměrił */",
        "common.js": "/* Kóždy JavaScript tu so za wšěch wužiwarjow při kóždym zwobraznjenju někajkeje strony začita. */",
-       "monobook.js": "/* Slědowacy JavaScript začita so za wužiwarjow, kotřiž šat MonoBook wužiwaja */",
        "anonymous": "{{PLURAL:$1|Anonymny wužiwar|Anonymnaj wužiwarjej|Anonymni wužiwarjo|Anonymni wužiwarjo}} we {{GRAMMAR:lokatiw|{{SITENAME}}}}",
        "siteuser": "wužiwarja $1 na {{GRAMMAR:lokatiw|{{SITENAME}}}}",
        "anonuser": "anonymny wužiwar $1 na {{GRAMMAR:lokatiw|{{SITENAME}}}}",
        "pageinfo-category-pages": "Ličba rěkow",
        "pageinfo-category-subcats": "Ličba podkategorijow",
        "pageinfo-category-files": "Ličba datajow",
-       "skinname-monobook": "MonoBook",
        "markaspatrolleddiff": "Změnu jako přepruwowanu woznamjenić",
        "markaspatrolledtext": "Tutu změnu nastawka jako přepruwowanu woznamjenić",
        "markedaspatrolled": "Změna bu jako přepruwowana woznamjenjena.",
        "duplicate-defaultsort": "Warnowanje: Standardny sortěrowonski kluč (DEFAULTSORTKEY) \"$2\" přepisa prjedawšu sortěrowanski kluč \"$1\".",
        "version": "Wersija",
        "version-extensions": "Instalowane rozšěrjenja",
+       "version-skins": "Šaty",
        "version-specialpages": "Specialne strony",
        "version-parserhooks": "Parserowe hoki",
        "version-variables": "Wariable",
        "version-antispam": "Škit přećiwo spamej",
-       "version-skins": "Šaty",
        "version-other": "Druhe",
        "version-mediahandlers": "Předźěłaki medijow",
        "version-hooks": "Hoki",
index 172e3a4..6759eb6 100644 (file)
        "qbmyoptions": "Paj mwen yo",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Ajoute yon sijè",
-       "vector-action-delete": "Efase",
-       "vector-action-move": "Chanje non",
-       "vector-action-protect": "Pwoteje",
-       "vector-action-undelete": "Retabli",
-       "vector-action-unprotect": "Pa pwoteje",
-       "vector-view-create": "Kreye",
-       "vector-view-edit": "Modifye",
-       "vector-view-history": "Gade istorik",
-       "vector-view-view": "Li",
-       "vector-view-viewsource": "Wè kòd tèks sa a",
        "actions": "Aksyon yo",
        "namespaces": "Espas non yo",
        "variants": "Varyant yo",
        "skin-preview": "Voye kout je",
        "youremail": "Adrès imèl :",
        "username": "Non itilizatè a:",
-       "uid": "Nimewo ID itilizatè a:",
        "prefs-memberingroups": "Manm {{PLURAL:$1|nan gwoup sa|nan gwoup sa yo }} :",
        "yourrealname": "Vre non ou:",
        "yourlanguage": "Lang:",
        "log": "Jounal yo",
        "all-logs-page": "Tout jounal yo (istorik yo)",
        "allpages": "Tout paj yo",
-       "alphaindexline": "$1 jiska $2",
        "nextpage": "Paj swivan ($1)",
        "prevpage": "Paj presedan ($1)",
        "allpagesfrom": "Afiche paj yo depi :",
index 6480f84..bf56976 100644 (file)
        "qbmyoptions": "Lapjaim",
        "faq": "GyIK",
        "faqpage": "Project:GyIK",
-       "vector-action-addsection": "Új téma nyitása",
-       "vector-action-delete": "Törlés",
-       "vector-action-move": "Átnevezés",
-       "vector-action-protect": "Lapvédelem",
-       "vector-action-undelete": "Visszaállítás",
-       "vector-action-unprotect": "Védelem módosítása",
-       "vector-view-create": "Létrehozás",
-       "vector-view-edit": "Szerkesztés",
-       "vector-view-history": "Laptörténet",
-       "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ü",
        "currentrev": "Aktuális változat",
        "currentrev-asof": "A lap jelenlegi, $1-kori változata",
        "revisionasof": "A lap $1-kori változata",
-       "revision-info": "A lap korábbi változatát látod, amilyen $2 $1-kor történt szerkesztése után volt.",
+       "revision-info": "A lap korábbi változatát látod, amilyen {{GENDER:$6|$2}} $1-kor történt szerkesztése után volt.$7",
        "previousrevision": "←Régebbi változat",
        "nextrevision": "Újabb változat→",
        "currentrevisionlink": "Aktuális változat",
        "shown-title": "{{PLURAL:$1|Egy|$1}} találat laponként",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''A wikin már van „[[:$1]]” nevű lap'''",
-       "searchmenu-new": "'''Hozd létre a(z) „[[:$1]]” nevű lapot ezen a wikin!'''",
+       "searchmenu-new": "<strong>Hozd létre a(z) „[[:$1]]” nevű lapot ezen a wikin!</strong>\n{{PLURAL:$2|0=|Lásd még a keresés során talált lapot.|Lásd még a keresés eredményét.}}",
        "searchprofile-articles": "Tartalmi oldalak",
        "searchprofile-images": "Médiafájlok",
        "searchprofile-everything": "Minden lap",
        "searchrelated": "kapcsolódó",
        "searchall": "mind",
        "showingresults": "Lent '''{{PLURAL:$1|egy|$1}}''' találat látható, az eleje '''$2'''.",
-       "showingresultsnum": "Lent '''{{PLURAL:$3|egy|$3}}''' találat látható, az eleje '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|'''$1'''|'''$1 - $2'''}}. találat a(z) '''$4''' kifejezésre (összesen: '''$3''')",
        "search-nonefound": "Nincs egyezés a megadott szöveggel.",
        "powersearch-legend": "Részletes keresés",
        "filedelete-maintenance": "A fájlok törlése és helyreállítása ideiglenesen le van tiltva karbantartás miatt.",
        "filedelete-maintenance-title": "Nem lehet törölni a fájlt",
        "mimesearch": "Keresés MIME-típus alapján",
-       "mimesearch-summary": "Ez az oldal engedélyezi a fájlok MIME-típus alapján történő szűrését. Bevitel: tartalomtípus/altípus, pl. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Ez az oldal engedélyezi a fájlok MIME-típus alapján történő szűrését. Bevitel: tartalomtípus/altípus vagy tartalomtípus/*, pl. <code>image/jpeg</code>.",
        "mimetype": "MIME-típus:",
        "download": "letöltés",
        "unwatchedpages": "Nem figyelt lapok",
        "doubleredirects": "Dupla átirányítások",
        "doubleredirectstext": "Ez a lap azokat a lapokat listázza, melyek átirányító lapokra irányítanak át.\nMinden sor tartalmaz egy hivatkozást az első, valamint a második átirányításra, valamint a második átirányítás céljára, ami általában a valódi céllap, erre kellene az első átirányításnak mutatnia.\nAz <del>áthúzott</del> sorok a lista elkészülése óta javítva lettek.",
        "double-redirect-fixed-move": "[[$1]] átnevezve, a továbbiakban átirányításként működik a(z) [[$2]] lapra",
-       "double-redirect-fixed-maintenance": "[[$1]] dupla átirányítás javítása a következőre: [[$2]]",
+       "double-redirect-fixed-maintenance": "[[$1]] dupla átirányítás automatikus javítása karbantartás során a következőre: [[$2]]",
        "double-redirect-fixer": "Átirányításjavító",
        "brokenredirects": "Nem létező lapra mutató átirányítások",
        "brokenredirectstext": "A következő átirányítások nem létező lapokra hivatkoznak:",
        "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 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.",
+       "undeleterevdel": "A törlés visszavonása nem hajtható végre, ha a legfrissebb lapváltozat részleges törlését eredményezi.\nIlyen esetekben vissza kell vonnod a legújabb törölt változatok kijelölését vagy azok elrejtését.",
        "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-undo": "„Visszavonás”: visszavonja ezt a szerkesztést, valamint megnyitja a szerkesztőt előnézet módban. A szerkesztési összefoglalóban meg lehet adni a visszavonás okát.",
        "tooltip-preferences-save": "Beállítások mentése",
        "tooltip-summary": "Adj meg egy rövid összefoglalót",
+       "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/* Közös CSS az összes felületnek */",
-       "monobook.css": "/* Az ide elhelyezett CSS hatással lesz a Monobook 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-autoconfirmed.css": "/* Az ide elhelyezett CSS az automatikusan megerősített felhasználókra lesz hatással */",
        "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. */",
-       "monobook.js": "/* A Monobook 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 */",
        "group-sysop.js": "/* Az ide elhelyezett JavaScript csak adminisztrátoroknak 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-monobook": "MonoBook",
        "markaspatrolleddiff": "Ellenőrzöttnek jelölöd",
        "markaspatrolledtext": "Ellenőriztem",
        "markedaspatrolled": "Ellenőrzöttnek jelölve",
        "duplicate-defaultsort": "Figyelem: a(z) „$2” rendezőkulcs felülírja a korábbit („$1”).",
        "version": "Névjegy",
        "version-extensions": "Telepített kiterjesztések",
+       "version-skins": "Telepített felületek",
        "version-specialpages": "Speciális lapok",
        "version-parserhooks": "Értelmező hookok",
        "version-variables": "Változók",
        "version-antispam": "Spammegelőzés",
-       "version-skins": "Felületek",
        "version-other": "Egyéb",
        "version-mediahandlers": "Médiafájl-kezelők",
        "version-hooks": "Hookok",
        "version-license": "MediaWiki licenc",
        "version-ext-license": "Licenc",
        "version-ext-colheader-name": "Kiterjesztés",
+       "version-skin-colheader-name": "Felület",
        "version-ext-colheader-version": "Verzió",
        "version-ext-colheader-license": "Licenc",
        "version-ext-colheader-description": "Leírás",
index 606ff5b..52c0fa0 100644 (file)
        "qbmyoptions": "Իմ էջերը",
        "faq": "ՀՏՀ",
        "faqpage": "Project:ՀՏՀ",
-       "vector-action-addsection": "Ավելացնել քննարկում",
-       "vector-action-delete": "Ջնջել",
-       "vector-action-move": "Տեղափոխել այս էջը",
-       "vector-action-protect": "Պաշտպանել",
-       "vector-action-undelete": "Վերականգնել",
-       "vector-action-unprotect": "Փոխել պաշտպանումը",
-       "vector-view-create": "Ստեղծել",
-       "vector-view-edit": "Խմբագրել",
-       "vector-view-history": "Դիտել պատմությունը",
-       "vector-view-view": "Կարդալ",
-       "vector-view-viewsource": "Դիտել ելատեքստը",
        "actions": "Գործողություններ",
        "namespaces": "Անվանատարածքներ",
        "variants": "Տարբերակներ",
        "searchrelated": "հարակից",
        "searchall": "բոլոր",
        "showingresults": "Ստորև բերված է մինչև {{PLURAL:$1|'''1''' արդյունք|'''$1''' արդյունք}}՝ սկսած №&nbsp;<strong>$2</strong>-ից։",
-       "showingresultsnum": "Ստորև բերված է {{PLURAL:$3|'''1''' արդյունք|'''$3''' արդյունք}}` սկսած №&nbsp;<strong>$2</strong>-ից։",
        "showingresultsheader": "{{PLURAL:$5|'''$1''' արդյունք '''$3'''-ից|'''$1 - $2''' արդյունքներ '''$3'''-ից}}  '''$4'''-ի համար",
        "search-nonefound": "Որոնմանը համապատասխանող արդյունքներ չեն գտնվել։",
        "powersearch-legend": "Ընդլայնված որոնում",
        "tooltip-rollback": "Մեկ սեղմումով հետ շրջել վերջին մասնակցի կատարած բոլոր խմբագրումները",
        "tooltip-undo": "Հետ շրջել կատարված փոփոխությունը և բացել խմբագրման ձևը նախադիտման ռեժիմով՝ թույլ տալով ավելացնել հետ շրջման պատճառը։",
        "common.css": "/** Այստեղ տեղադրված CSS կոդը կկիրառվի բոլոր տեսքերի վրա */",
-       "monobook.css": "/* Այստեղ տեղադրված CSS կոդը կկիրառվի Monobook տեսքի վրա*/",
        "common.js": "/* Այստեղ տեղադրված JavaScript կոդը կբեռնվի բոլոր մասնակիցների համար էջերի բոլոր դիմումների ժամանակ */",
-       "monobook.js": "/* Հնացած է. օգտագործեք [[MediaWiki:common.js]] */",
        "anonymous": "{{SITENAME}}ի անանուն {{PLURAL:$1|մասնակից|մասնակիցներ}}",
        "siteuser": "{{grammar:genitive|{{SITENAME}}}} մասնակից $1",
        "lastmodifiedatby": "Այս էջը վերջին անգամ փոփոխվել է ժամը $2-ին, $1 թվին՝ $3 մասնակցի կողմից։",
        "pageinfo-contentpage": "Հաշվառված որպես բովանդակային էջ",
        "pageinfo-contentpage-yes": "Այո",
        "pageinfo-protect-cascading-yes": "Այո",
-       "skinname-monobook": "ՄիաԳիրք",
-       "skinname-vector": "Սովորական",
        "markaspatrolleddiff": "Նշել որպես ստուգված",
        "markaspatrolledtext": "Նշել այս էջը որպես ստուգված",
        "markedaspatrolled": "Նշված է որպես ստուգված",
index e64502d..63fd98e 100644 (file)
        "qbmyoptions": "Mi paginas",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Adder topico",
-       "vector-action-delete": "Deler",
-       "vector-action-move": "Renominar",
-       "vector-action-protect": "Proteger",
-       "vector-action-undelete": "Restaurar",
-       "vector-action-unprotect": "Cambiar protection",
-       "vector-view-create": "Crear",
-       "vector-view-edit": "Modificar",
-       "vector-view-history": "Vider historia",
-       "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",
        "mergehistory-empty": "Nulle versiones pote esser fusionate.",
        "mergehistory-success": "$3 {{PLURAL:$3|version|versiones}} de [[:$1]] fusionate in [[:$2]] con successo.",
        "mergehistory-fail": "Impossibile executar le fusion del historia. Per favor reverifica le parametros del pagina e del tempore.",
+       "mergehistory-fail-toobig": "Le historias de versiones non pote esser fusionate con plus de $1 {{PLURAL:$1|version|versiones}} a displaciar.",
        "mergehistory-no-source": "Le pagina de origine $1 non existe.",
        "mergehistory-no-destination": "Le pagina de destination $1 non existe.",
        "mergehistory-invalid-source": "Le pagina de origine debe esser un titulo valide.",
        "searchall": "totes",
        "showingresults": "Infra se monstra non plus de {{PLURAL:$1|'''1''' resultato|'''$1''' resultatos}} a partir del numero '''$2'''.",
        "showingresultsinrange": "In basso es monstrate usque a {{PLURAL:$1|<strong>1</strong> resultato|<strong>$1</strong> resultatos}} inter #<strong>$2</strong> e #<strong>$3</strong>.",
-       "showingresultsnum": "Infra se monstra {{PLURAL:$3|'''1''' resultato|'''$3''' resultatos}} a partir del numero '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultato '''$1'''|Resultatos '''$1 - $2'''}} de '''$3''' pro '''$4'''",
        "search-nonefound": "Le recerca non ha producite resultatos.",
        "powersearch-legend": "Recerca avantiate",
        "windows-nonascii-filename": "Iste wiki non supporta nomines de file con characteres special.",
        "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-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>\nConsidera usar un nomine plus distincte.",
        "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.",
        "file-thumbnail-no": "Le nomine del file comencia con <strong>$1</strong>.\nIllo pare esser un imagine a grandor reducite ''(miniatura)''.\nSi tu possede iste imagine in plen resolution, incarga lo, alteremente cambia le nomine del file per favor.",
        "fileexists-forbidden": "Un file con iste nomine existe ja, e non pote esser superscribite.\nSi tu vole ancora incargar iste file, per favor retorna e usa un nove nomine. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Deletion e restauration de files temporarimente disactivate durante mantenentia.",
        "filedelete-maintenance-title": "Non pote deler file",
        "mimesearch": "Recerca de typo MIME",
-       "mimesearch-summary": "Iste pagina permitte filtrar le files a base de lor typos MIME.\nSyntaxe: typo/subtypo, p.ex. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Iste pagina permitte filtrar le files a base de lor typos MIME.\nSyntaxe: typodecontento/subtypo o typodecontento/*, p.ex. <code>image/jpeg</code>.",
        "mimetype": "Typo MIME:",
        "download": "discargar",
        "unwatchedpages": "Paginas non observate",
        "tooltip-summary": "Entra un curte summario",
        "interlanguage-link-title": "$1 (in $2)",
        "common.css": "/* Le CSS placiate hic se applicara a tote le stilos */",
-       "monobook.css": "/* Le CSS placiate hic afficera le usatores del apparentia MonoBook */",
-       "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. */",
-       "monobook.js": "/* Omne JavaScript hic se executara pro le usatores del apparentia MonoBook */",
-       "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}}",
        "anonuser": "le usator anonyme $1 de {{SITENAME}}",
        "pageinfo-category-pages": "Numero de paginas",
        "pageinfo-category-subcats": "Numero de subcategorias",
        "pageinfo-category-files": "Numero de files",
-       "skinname-monobook": "MonoBook",
        "markaspatrolleddiff": "Marcar como patruliate",
        "markaspatrolledtext": "Marcar iste pagina como patruliate",
        "markedaspatrolled": "Marcate como patruliate",
        "duplicate-defaultsort": "Attention: Le clave de ordination predefinite \"$2\" supplanta le anterior clave de ordination predefinite \"$1\".",
        "version": "Version",
        "version-extensions": "Extensiones installate",
+       "version-skins": "Apparentias installate",
        "version-specialpages": "Paginas special",
        "version-parserhooks": "Uncinos del analysator syntactic",
        "version-variables": "Variabiles",
        "version-antispam": "Prevention de spam",
-       "version-skins": "Apparentias",
        "version-other": "Altere",
        "version-mediahandlers": "Executores de media",
        "version-hooks": "Uncinos",
        "version-hook-name": "Nomine del uncino",
        "version-hook-subscribedby": "Subscribite per",
        "version-version": "(Version $1)",
+       "version-no-ext-name": "[sin nomine]",
        "version-license": "Licentia pro MediaWiki",
        "version-ext-license": "Licentia",
        "version-ext-colheader-name": "Extension",
+       "version-skin-colheader-name": "Apparentia",
        "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "Licentia",
        "version-ext-colheader-description": "Description",
index 1707b5d..b23e77e 100644 (file)
        "qbmyoptions": "Halaman saya",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Bagian baru",
-       "vector-action-delete": "Hapus",
-       "vector-action-move": "Pindahkan",
-       "vector-action-protect": "Lindungi",
-       "vector-action-undelete": "Pembatalan penghapusan",
-       "vector-action-unprotect": "Ubah perlindungan",
-       "vector-view-create": "Buat",
-       "vector-view-edit": "Sunting",
-       "vector-view-history": "Versi terdahulu",
-       "vector-view-view": "Baca",
-       "vector-view-viewsource": "Lihat sumber",
        "actions": "Tindakan",
-       "vector-more-actions": "Lainnya",
        "namespaces": "Ruang nama",
        "variants": "Varian",
        "navigation-heading": "Menu navigasi",
        "eauthentsent": "Sebuah surel untuk konfirmasi telah dikirim ke alamat surel. Sebelum surel lainnya dikirim ke akun tersebut, Anda harus mengikuti instruksi di dalam surel tersebut, untuk melakukan konfirmasi bahwa alamat tersebut adalah benar kepunyaan Anda.",
        "throttled-mailpassword": "Suatu pengingat kata sandi telah dikirimkan dalam {{PLURAL:$1|$1 jam}} terakhir.\nUntuk menghindari penyalahgunaan, hanya satu kata sandi yang akan dikirimkan setiap {{PLURAL:$1|$1 jam}}.",
        "mailerror": "Kesalahan dalam mengirimkan surel: $1",
-       "acct_creation_throttle_hit": "Pengunjung wiki ini dengan alamat IP yang sama dengan Anda telah membuat {{PLURAL:$1|1 akun|$1 akun}} dalam satu hari terakhir, hingga jumlah maksimum yang diijinkan.\nKarenanya, pengunjung dengan alamat IP ini tidak dapat lagi membuat akun lain untuk sementara.",
+       "acct_creation_throttle_hit": "Pengunjung wiki ini dengan alamat IP yang sama dengan Anda telah membuat {{PLURAL:$1|1 akun|$1 akun}} dalam satu hari terakhir, hingga jumlah maksimum yang diizinkan.\nKarenanya, pengunjung dengan alamat IP ini tidak dapat lagi membuat akun lain untuk sementara.",
        "emailauthenticated": "Alamat surel Anda telah dikonfirmasi pada $3, $2.",
        "emailnotauthenticated": "Alamat surel Anda belum dikonfirmasi.\nSebelum dikonfirmasi Anda tidak akan menerima surel dari fitur berikut.",
        "noemailprefs": "Anda harus memasukkan alamat surel di preferensi Anda untuk dapat menggunakan fitur-fitur ini.",
        "searchall": "semua",
        "showingresults": "Di bawah ini ditampilkan hingga {{PLURAL:$1|'''1''' hasil|'''$1''' hasil}}, dimulai dari #'''$2'''.",
        "showingresultsinrange": "Menampilkan sampai dengan {{PLURAL:$1|<strong>1</strong> hasil|<strong>$1</strong> hasil}} dalam jangkauan #<strong>$2</strong> sampai #<strong>$3</strong>.",
-       "showingresultsnum": "Di bawah ini ditampilkan {{PLURAL:$3|'''1'''|'''$3'''}} hasil, dimulai dari #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Hasil '''$1''' dari '''$3'''|Hasil '''$1 - $2''' dari '''$3'''}} untuk '''$4'''",
        "search-nonefound": "Tidak ada hasil yang sesuai dengan kriteria.",
        "powersearch-legend": "Pencarian lanjut",
        "filetype-mime-mismatch": "Ekstensi berkas \".$1\" tidak cocok dengan jenis MIME yang terdeteksi dari berkas ($2).",
        "filetype-badmime": "Berkas dengan tipe MIME \"$1\" tidak diperkenankan untuk dimuat.",
        "filetype-bad-ie-mime": "Tidak dapat memuat berkas ini karena Internet Explorer mendeteksinya sebagai \"$1\", yang tak diizinkan dan merupakan tipe berkas yang memiliki potensi bahaya.",
-       "filetype-unwanted-type": "'''\".$1\"''' termasuk jenis berkas yang tidak diijinkan.\n{{PLURAL:$3|Jenis berkas yang disarankan adalah|Jenis berkas yang disarankan adalah}} $2.",
+       "filetype-unwanted-type": "'''\".$1\"''' termasuk jenis berkas yang tidak diizinkan.\n{{PLURAL:$3|Jenis berkas yang disarankan adalah|Jenis berkas yang disarankan adalah}} $2.",
        "filetype-banned-type": "'''\".$1\"''' {{PLURAL:$4|adalah ekstensi berkas yang tidak diizinkan|adalah ekstensi berkas yang tidak diizinkan}}.\n{{PLURAL:$3|Jenis berkas yang diperolehkan adalah|Jenis berkas yang diperolehkan adalah}} $2.",
        "filetype-missing": "Berkas tak memiliki ekstensi (misalnya \".jpg\").",
        "empty-file": "Berkas yang Anda kirim kosong.",
        "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-suppresslog": "kontribusi pengguna yang disembunyikan",
        "sp-contributions-deleted": "kontribusi pengguna yang dihapus",
        "sp-contributions-uploads": "unggahan",
        "sp-contributions-logs": "log",
        "tooltip-preferences-save": "Simpan preferensi",
        "tooltip-summary": "Masukkan sebuah ringkasan pendek",
        "common.css": "/* CSS yang ada di sini akan diterapkan pada semua kulit. */",
-       "monobook.css": "/* CSS yang ada di sini akan diterapkan pada kulit Monobook. */",
-       "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-autoconfirmed.css": "/* CSS di sini hanya mempengaruhi pengguna terkonfirmasi otomatis */",
        "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. */",
-       "monobook.js": "/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit MonoBook */",
-       "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 */",
        "group-sysop.js": "/* Semua JavaScript di sini hanya dimuatkan untuk pengurus */",
        "pageinfo-category-pages": "Jumlah halaman",
        "pageinfo-category-subcats": "Jumlah subkategori",
        "pageinfo-category-files": "Jumlah berkas",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Tandai telah dipatroli",
        "markaspatrolledtext": "Tandai halaman ini telah dipatroli",
        "markedaspatrolled": "Ditandai telah dipatroli",
        "duplicate-defaultsort": "Peringatan: Kunci pengurutan baku \"$2\" mengabaikan kunci pengurutan baku \"$1\" sebelumnya.",
        "version": "Versi",
        "version-extensions": "Ekstensi terinstal",
+       "version-skins": "Kulit",
        "version-specialpages": "Halaman istimewa",
        "version-parserhooks": "Kait parser",
        "version-variables": "Variabel",
        "version-antispam": "Pencegahan spam",
-       "version-skins": "Kulit",
        "version-api": "API",
        "version-other": "Lain-lain",
        "version-mediahandlers": "Penanganan media",
index ba845bb..6e09f82 100644 (file)
        "qbpageoptions": "Págine de optiones",
        "qbmyoptions": "Mi optiones",
        "faq": "FAQ",
-       "vector-action-addsection": "Adjunter tema",
-       "vector-action-delete": "Deleter",
-       "vector-action-move": "Mover",
-       "vector-action-protect": "Gardar",
-       "vector-action-undelete": "Restituer",
-       "vector-action-unprotect": "Desgardar",
-       "vector-view-create": "Crear",
-       "vector-view-edit": "Redacter",
-       "vector-view-history": "Historie de versiones",
-       "vector-view-view": "Leer",
-       "vector-view-viewsource": "Vider fonte",
        "actions": "Actiones",
        "namespaces": "Spacies de nómine",
        "variants": "Variantes",
        "editundo": "anullar",
        "searchresults": "Serch-resultates",
        "searchresults-title": "Serch-resultates por «$1»",
-       "toomanymatches": "Anc mult concurses esset retornat, pleser prova un question diferent",
        "titlematches": "Resultates in li titules de págines",
        "textmatches": "Resultates in textu de págines",
        "prevn": "anteyan {{PLURAL:$1|$1}}",
        "searchmenu-exists": "'''Vi un págine nominat \"[[:$1]]\" in ti wiki.'''",
        "searchmenu-new": "'''Crear li págine «[[:$1]]» in ti wiki.'''",
        "searchprofile-articles": "Págines de contenete",
-       "searchprofile-project": "Auxilie e Págines de projecte",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Omnicós",
        "searchprofile-advanced": "Avansat",
        "searchprofile-articles-tooltip": "Serchar in $1",
-       "searchprofile-project-tooltip": "Serchar in $1",
        "searchprofile-images-tooltip": "Serchar files",
        "searchprofile-everything-tooltip": "Serchar in li tot contenete (includent págines de conversation)",
        "searchprofile-advanced-tooltip": "Serchar in special spacies de nómine",
        "timezoneregion-pacific": "Ocean Pacific",
        "youremail": "E-mail:",
        "username": "Nómine de usator:",
-       "uid": "Identification de usator:",
        "yourrealname": "Nómine real:",
        "yourlanguage": "Lingue:",
        "yourvariant": "Variante:",
        "log": "Diariumes",
        "all-logs-page": "Omni li diariumes public",
        "allpages": "Omni li págines",
-       "alphaindexline": "$1 till $2",
        "nextpage": "Proxim págine ($1)",
        "prevpage": "Ultim págine ($1)",
        "allarticles": "Omni li articules",
        "tooltip-undo": "«Desfar» reverte solmen ti-ci redaction e monstra li resultate in prevision, porque tu posse indicar un rason in li linea de resumé.",
        "tooltip-preferences-save": "Conservar preferenties",
        "tooltip-summary": "Ples intrar un curt resummation.",
-       "vector.css": "/* CSS colocat ci va afectar usatores de pelle Vector */",
-       "vector.js": "/* Alquel JavaScript ci va esser cargat por usatores que usa li pelle Vector */",
        "previousdiff": "← Redaction anteriori",
        "nextdiff": "Proxim redaction →",
        "thumbsize": "Mesura de miniatura:",
index 0289610..88015ef 100644 (file)
        "qbmyoptions": "Ihüm",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Tinyé Okwu",
-       "vector-action-delete": "Kàcha",
-       "vector-action-move": "Páfụ",
-       "vector-action-protect": "Cẹdolu",
-       "vector-action-undelete": "Á gbàkashikwà",
-       "vector-action-unprotect": "Nchẹdo mgbanwe",
-       "vector-view-create": "Ké",
-       "vector-view-edit": "Mèzi",
-       "vector-view-history": "Zí ịta",
-       "vector-view-view": "Gụ́",
-       "vector-view-viewsource": "Zi mkpurụ",
        "actions": "Mmèmé",
        "namespaces": "Ámááhà",
        "variants": "Nke ichè ichè",
        "viewprevnext": "Lé ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "'''Ké ihü \"[[:$1]]\" na wiki nke á!'''",
        "searchprofile-articles": "Ihü ihe dị",
-       "searchprofile-project": "Ihü Nkwádo na Orürü",
        "searchprofile-images": "Nkaníle",
        "searchprofile-everything": "Iheníle",
        "searchprofile-advanced": "Nke kárí",
        "searchprofile-articles-tooltip": "Chọwa na $1",
-       "searchprofile-project-tooltip": "Chọwa na $1",
        "searchprofile-images-tooltip": "Chọwa màkà usòrò",
        "searchprofile-everything-tooltip": "Tùwé ihe nile (na okwu ihü)",
        "searchprofile-advanced-tooltip": "Chọwa na ímé áhàámá nke gí Í kèrè",
        "search-interwiki-default": "$1 nke ziri:",
        "search-interwiki-more": "(dikarírí)",
        "search-relatedarticle": "Nwanne",
-       "searcheverything-enable": "Chọwa na ébé nílé",
        "searchrelated": "nke kọlu",
        "searchall": "nke níle",
        "powersearch-legend": "Nchöwá nkè íshí",
        "prefs-custom-js": "JavaScript na áká mádu",
        "youremail": "E-mail:",
        "username": "Áhà ọ'bànifé:",
-       "uid": "ID ọ'bànifé:",
        "prefs-memberingroups": "Onyé otu nke {{PLURAL:$1|ọtú|ọtú}}:",
        "yourrealname": "Ézíbóté áhà:",
        "yourlanguage": "Ásụ̀sụ̀:",
        "speciallogtitlelabel": "Ishi:",
        "log": "Ndetu-nchétá",
        "allpages": "Ihü níle",
-       "alphaindexline": "$1 ruó $2",
        "nextpage": "Ihü sò ($1)",
        "prevpage": "Ihü nke búzọr ($1)",
        "allpagesfrom": "Zi ihü bídóró na:",
        "block": "Gbàchí ọ'bànifé",
        "blockip": "Gbàchí ọ'bànifé",
        "blockip-legend": "Gbàchí ọ'bànifé",
-       "ipadressorusername": "IP mà ọ bu áhà ọ'bànifé:",
+       "ipaddressorusername": "IP mà ọ bu áhà ọ'bànifé:",
        "ipbexpiry": "Gbá okà:",
        "ipbreason": "Mgbághapụtà:",
        "ipbsubmit": "Kwàchí ọ'bànifé nkèá",
        "show-big-image": "Hü ya ka o dị",
        "file-info-gif-looped": "etemte",
        "newimages-legend": "Nzàtà",
-       "showhidebots": "(bot $1)",
        "noimages": "Ọ díghì ihe di ngá Í lé.",
        "ilsubmit": "Chọwa",
        "bydate": "shi afọ",
index ec5300a..617110a 100644 (file)
        "qbmyoptions": "Pampanidko",
        "faq": "MAS",
        "faqpage": "Project:MAS",
-       "vector-action-addsection": "Agnayon ti topiko",
-       "vector-action-delete": "Ikkaten",
-       "vector-action-move": "Iyalis",
-       "vector-action-protect": "Salakniban",
-       "vector-action-undelete": "Isubli ti inikkat",
-       "vector-action-unprotect": "Sukatan ti salaknib",
-       "vector-view-create": "Agaramid",
-       "vector-view-edit": "Urnosen",
-       "vector-view-history": "Kitaen ti pakasaritaan",
-       "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",
        "searchall": "amin",
        "showingresults": "Maiparang dita baba agingga {{PLURAL:$1|iti '''1''' a nagbanagan|dagiti '''$1''' a nagbanagan}} a mangrugi iti #'''$2'''.",
        "showingresultsinrange": "Mangipakpakita aginggana {{PLURAL:$1|iti <strong>1</strong> a resulta|dagiti <strong>$1</strong> a resulta}} iti sakop ti #<strong>$2</strong> aginggana ti #<strong>$3</strong>.",
-       "showingresultsnum": "Maipakpakita dita baba  {{PLURAL:$3|iti '''1''' a nagbanagan|dagiti '''$3''' a nagbanagan}} a mangrugi iti #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Nagbanagan a '''$1''' iti '''$3'''|Dagiti Nagbanagan a '''$1 - $2''' iti '''$3'''}} para iti '''$4'''",
        "search-nonefound": "Awan ti nagbanagan a kapadpada ti sinapul.",
        "powersearch-legend": "Napasayat a panagbiruk",
index bcbdc91..5ed80a3 100644 (file)
        "qbmyoptions": "Са оттамаш",
        "faq": "Каст-каста хаттараш",
        "faqpage": "Project:Каст-каста хаттараш",
-       "vector-action-addsection": "БӀагал тӀатоха",
-       "vector-action-delete": "ДӀадаккха",
-       "vector-action-move": "ЦӀи хувца",
-       "vector-action-protect": "Лораде",
-       "vector-action-undelete": "Юхаоттаде",
-       "vector-action-unprotect": "Лорам хувца",
-       "vector-view-create": "Кхолларле",
-       "vector-view-edit": "Хувцам",
-       "vector-view-history": "Искар",
-       "vector-view-view": "Дешар",
-       "vector-view-viewsource": "Зембакхама бӀаргтассам",
        "actions": "ДулархIамаш",
        "namespaces": "ЦӀерий аренаш",
        "variants": "Доштайпарленаш",
        "searchmenu-exists": "'''Укх масса-хьахьоадайтамач ер оаг|ув \"[[:$1]]\" я'''",
        "searchmenu-new": "'''Укх \"[[:$1]]\" масса-хьахоадайтамач оагIув хьае!'''",
        "searchprofile-articles": "Гомлен оагIувнаш",
-       "searchprofile-project": "Дагарлеи хьахоадайтами оагIувнаш",
        "searchprofile-images": "Медифаг",
        "searchprofile-everything": "Массана",
        "searchprofile-advanced": "Шера я",
        "searchprofile-articles-tooltip": "$1чу лахар",
-       "searchprofile-project-tooltip": "$1чу лахар",
        "searchprofile-images-tooltip": "Паьлий лахар",
        "searchprofile-everything-tooltip": "Массадола оагIувний лахар (дувцама оагIувнаш чулоацаш)",
        "searchprofile-advanced-tooltip": "Iочуязаяь цIераренашках лаха",
        "booksources-go": "Лаха",
        "log": "Тептараш",
        "allpages": "Еррига оагIувнаш",
-       "alphaindexline": "$1гIара $2гIачу",
        "prevpage": "($1) хьалхара оагIув",
        "allpagesfrom": "Цу тайпара ювлаж йола оагIувнаш белгал е:",
        "allpagesto": "Укх оагIувнаш тIа бIарга дита:",
index 1362c8e..01f4b3e 100644 (file)
        "qbedit": "Redaktar",
        "qbpageoptions": "Ica pagino",
        "qbmyoptions": "Mea pagini",
-       "vector-action-addsection": "Adjuntar topiko",
-       "vector-action-delete": "Efacar",
-       "vector-action-move": "Movar",
-       "vector-action-protect": "Protektar",
-       "vector-action-undelete": "Rekuperar",
-       "vector-action-unprotect": "Desprotektar",
-       "vector-view-create": "Krear",
-       "vector-view-edit": "Redaktar",
-       "vector-view-history": "Vidar versionaro",
-       "vector-view-view": "Lektar",
-       "vector-view-viewsource": "Vidar fonto",
        "actions": "Agi",
        "namespaces": "Nomari",
        "variants": "Varianti",
        "viewprevnext": "Vidar ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-new": "'''Kreez la pagino \"[[:$1]]\" in ca wiki!'''",
        "searchprofile-articles": "Temala pagini",
-       "searchprofile-project": "Helpo",
        "searchprofile-images": "''Media''",
        "searchprofile-everything": "Omno",
        "searchprofile-articles-tooltip": "Serchez en $1",
-       "searchprofile-project-tooltip": "Serchez en $1",
        "searchprofile-images-tooltip": "Serchez arkivi",
        "search-result-size": "$1 ({{PLURAL:$2|1 vorto|$2 vorti}})",
        "search-result-score": "Importo: $1%",
        "search-interwiki-more": "(plusa)",
        "searchall": "omna",
        "showingresults": "Montrante infre {{PLURAL:$1|'''1''' rezulto|'''$1''' rezulti}}, qui komencas kun numero #'''$2'''.",
-       "showingresultsnum": "Montrante infre {{PLURAL:$3|'''1''' rezulto|'''$3''' rezulti}}, qui komencas kun numero #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Rezultajo '''$1''' ek '''$3'''|Rezultaji '''$1 - $2''' ek '''$3'''}} di '''$4'''",
        "powersearch-legend": "Avancita sercho",
        "powersearch-ns": "Serchez en nomari:",
        "timezoneregion-pacific": "Pacifico",
        "allowemail": "Permisez e-posti de altra uzanti",
        "prefs-namespaces": "Nomari",
-       "defaultns": "Altre serchar en ca nomari:",
        "prefs-files": "Arkivi",
        "youremail": "Vua e-adreso:",
        "username": "Uzantonomo:",
-       "uid": "ID dil uzanto:",
        "prefs-memberingroups": "Membro di la {{PLURAL:$1|grupo|grupi}}:",
        "yourrealname": "Reala nomo:",
        "yourlanguage": "Linguo:",
        "log": "Registrari",
        "all-logs-page": "Omna publika registrari",
        "allpages": "Omna pagini",
-       "alphaindexline": "$1 til $2",
        "nextpage": "Sequanta pagino ($1)",
        "prevpage": "Antea pagino ($1)",
        "allpagesfrom": "Montrez pagini de:",
        "whatlinkshere-filters": "Filtrili",
        "blockip": "Blokusado di IP-adresi",
        "blockip-legend": "Blokusar uzanto",
-       "ipadressorusername": "IP-adreso od uzantonomo:",
+       "ipaddressorusername": "IP-adreso od uzantonomo:",
        "ipbexpiry": "Expiro:",
        "ipbreason": "Motivo:",
        "ipbreason-dropdown": "*Ordinara motivi por blokuso\n** Insertar nevera informi\n** Efacar kontenajo de pagini\n** Insertadar ligili ad extera reti\n** Insertar radoto aden pagini\n** Timidiganta ago\n** Trouzar multa konti\n** Neaceptebla uzanto-nomo",
        "newimages": "Galerio di nova arkivi",
        "imagelisttext": "Infre esas listo di '''$1''' {{PLURAL:$1|arkivo|arkivi}} rangizita $2.",
        "newimages-legend": "Filtrilo",
-       "showhidebots": "($1 roboti)",
        "ilsubmit": "Serchar",
        "bydate": "per dato",
        "metadata": "Metadonaji",
index 8cd7cef..6f2334c 100644 (file)
        "qbmyoptions": "Mínar síður",
        "faq": "Algengar spurningar",
        "faqpage": "Project:Algengar spurningar",
-       "vector-action-addsection": "Bæta við umræðu",
-       "vector-action-delete": "Eyða",
-       "vector-action-move": "Færa",
-       "vector-action-protect": "Vernda",
-       "vector-action-undelete": "Hætta við eyðingu",
-       "vector-action-unprotect": "Breyta verndunarstigi",
-       "vector-view-create": "Skapa",
-       "vector-view-edit": "Breyta",
-       "vector-view-history": "Breytingaskrá",
-       "vector-view-view": "Lesa",
-       "vector-view-viewsource": "Sýna frumkóða",
        "actions": "Aðgerðir",
        "namespaces": "Nafnrými",
        "variants": "Útgáfur",
        "searchrelated": "tengt",
        "searchall": "öllum",
        "showingresults": "Sýni <strong>$1</strong> {{PLURAL:$1|niðurstöðu|niðurstöður}} frá og með #<strong>$2</strong>.",
-       "showingresultsnum": "Sýni {{PLURAL:$3|'''$3''' niðurstöðu|'''$3''' niðurstöður}} frá og með #<b>$2</b>.",
        "showingresultsheader": "{{PLURAL:$5|Niðurstaða '''$1''' af '''$3'''|Niðurstöður'''$1 - $2''' af '''$3'''}} fyrir '''$4'''",
        "search-nonefound": "Engar niðurstöður pössuðu við fyrirspurnina.",
        "powersearch-legend": "Ítarlegri leit",
        "tooltip-preferences-save": "Vista stillingar",
        "tooltip-summary": "Bættu við stuttu ágripi",
        "common.css": "/* Allt CSS sem sett er hér mun virka á öllum þemum. */",
-       "monobook.css": "/* Það sem sett er hingað er bætt við Monobook stilsniðið fyrir allan vefinn */",
        "common.js": "/* Allt JavaScript sem sett er hér mun virka í hvert skipti sem að síða hleðst. */",
        "anonymous": "$1 {{PLURAL:$1|óþekktur notandi|óþekktir notendur}} á {{SITENAME}}",
        "siteuser": "{{SITENAME}} notandi $1",
        "pageinfo-category-pages": "Fjöldi síðna",
        "pageinfo-category-subcats": "Fjöldi undirflokka",
        "pageinfo-category-files": "Fjöldi skráa",
-       "skinname-monobook": "EinBók",
        "markaspatrolleddiff": "Merkja sem yfirfarið",
        "markaspatrolledtext": "Merkja þessa síðu sem yfirfarna",
        "markedaspatrolled": "Merkja sem yfirfarið",
index fa7872b..6e0c06f 100644 (file)
        "qbmyoptions": "Le mie pagine",
        "faq": "Domande frequenti",
        "faqpage": "Project:Domande frequenti",
-       "vector-action-addsection": "Aggiungi discussione",
-       "vector-action-delete": "Cancella",
-       "vector-action-move": "Sposta",
-       "vector-action-protect": "Proteggi",
-       "vector-action-undelete": "Ripristina",
-       "vector-action-unprotect": "Cambia la protezione",
-       "vector-view-create": "Crea",
-       "vector-view-edit": "Modifica",
-       "vector-view-history": "Cronologia",
-       "vector-view-view": "Leggi",
-       "vector-view-viewsource": "Visualizza sorgente",
        "actions": "Azioni",
-       "vector-more-actions": "Altro",
        "namespaces": "Namespace",
        "variants": "Varianti",
        "navigation-heading": "Menu di navigazione",
        "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-fail-toobig": "Impossibile eseguire l'unione della cronologia con oltre $1 {{PLURAL:$1|revisione|revisioni}} da spostare.",
        "mergehistory-no-source": "La pagina di origine $1 non esiste.",
        "mergehistory-no-destination": "La pagina di destinazione $1 non esiste.",
        "mergehistory-invalid-source": "La pagina di origine deve avere un titolo corretto.",
        "searchall": "tutti",
        "showingresults": "Di seguito {{PLURAL:$1|viene presentato al massimo '''1''' risultato|vengono presentati al massimo '''$1''' risultati}} a partire dal numero '''$2'''.",
        "showingresultsinrange": "{{PLURAL:$1|Viene mostrato|Vengono mostrati}} sotto {{PLURAL:$1|<strong>1</strong> risultato|<strong>$1</strong> risultati}} dal <strong>$2</strong> al <strong>$3</strong>.",
-       "showingresultsnum": "Di seguito {{PLURAL:$3|viene presentato '''1''' risultato|vengono presentati '''$3''' risultati}} a partire dal numero '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Risultato '''$1''' di '''$3'''|Risultati '''$1 - $2''' di '''$3'''}} per '''$4'''",
        "search-nonefound": "La ricerca non ha prodotto risultati.",
        "powersearch-legend": "Ricerca avanzata",
        "windows-nonascii-filename": "Questo wiki non supporta nomi di file con caratteri speciali.",
        "fileexists": "Un file con questo nome esiste già.\nVerificare prima <strong>[[:$1]]</strong> se non si è sicuri di volerlo sovrascrivere.\n[[$1|thumb]]",
        "filepageexists": "La pagina di descrizione di questo file è già stata creata all'indirizzo <strong>[[:$1]]</strong>, anche se non esiste ancora un file con questo nome. La descrizione dell'oggetto inserita in fase di caricamento non apparirà sulla pagina di descrizione. Per far sì che l'oggetto compaia sulla pagina di descrizione, sarà necessario modificarla manualmente.\n[[$1|thumb]]",
-       "fileexists-extension": "Un file con nome simile a questo esiste già: [[$2|thumb]]\n* Nome del file caricato: <strong>[[:$1]]</strong>\n* Nome del file esistente: <strong>[[:$2]]</strong>\nScegliere un nome diverso.",
+       "fileexists-extension": "Un file con nome simile a questo esiste già: [[$2|thumb]]\n* Nome del file caricato: <strong>[[:$1]]</strong>\n* Nome del file esistente: <strong>[[:$2]]</strong>\nForse vuoi scegliere un nome più caratteristico?.",
        "fileexists-thumbnail-yes": "Il file caricato sembra essere una miniatura ''(thumbnail)''. [[$1|thumb]]\nVerificare, per confronto, il file <strong>[[:$1]]</strong>.\nSe si tratta della stessa immagine, nelle dimensioni originali, non è necessario caricarne altre miniature.",
        "file-thumbnail-no": "Il nome del file inizia con <strong>$1</strong>; sembra quindi essere una miniatura ''(thumbnail)''.\nSe si dispone dell'immagine nella risoluzione originale, si prega di caricarla. In caso contrario, si prega di cambiare il nome del file.",
        "fileexists-forbidden": "Un file con questo nome esiste già e non può essere sovrascritto. Tornare indietro e modificare il nome con il quale caricare il file. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Cancellazione e recupero di file temporaneamente disattivati durante la manutenzione.",
        "filedelete-maintenance-title": "Impossibile eliminare il file",
        "mimesearch": "Ricerca in base al tipo MIME",
-       "mimesearch-summary": "Questa pagina consente di filtrare i file in base al tipo MIME. Inserire la stringa di ricerca nella forma tipo/sottotipo, ad es. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Questa pagina consente di filtrare i file in base al tipo MIME.\nInserire la stringa di ricerca nella forma tipo/sottotipo o tipo/*, ad es. <code>image/jpeg</code>.",
        "mimetype": "Tipo MIME:",
        "download": "scarica",
        "unwatchedpages": "Pagine non osservate",
        "tooltip-summary": "Inserire una breve sintesi",
        "interlanguage-link-title": "$1 - $2",
        "common.css": "/* Gli stili CSS inseriti qui si applicano a tutte le skin */",
-       "monobook.css": "/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Monobook */",
-       "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-autoconfirmed.css": "/ * Gli stili CSS inseriti qui si applicheranno solo ad utenti autoconvalidati * /",
        "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. */",
-       "monobook.js": "/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin MonoBook */",
-       "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 * /",
        "group-bot.js": "/ * Il codice JavaScript inserito qui viene caricato solo per i bot * /",
        "duplicate-defaultsort": "Attenzione: la chiave di ordinamento predefinita \"$2\" sostituisce la precedente \"$1\".",
        "version": "Versione",
        "version-extensions": "Estensioni installate",
+       "version-skins": "Skin installate",
        "version-specialpages": "Pagine speciali",
        "version-parserhooks": "Hook del parser",
        "version-variables": "Variabili",
        "version-antispam": "Prevenzione dello spam",
-       "version-skins": "Skin",
        "version-other": "Altro",
        "version-mediahandlers": "Gestori di contenuti multimediali",
        "version-hooks": "Hook",
        "version-hook-name": "Nome dell'hook",
        "version-hook-subscribedby": "Sottoscrizioni",
        "version-version": "($1)",
+       "version-no-ext-name": "[senza nome]",
        "version-license": "Licenza MediaWiki",
        "version-ext-license": "Licenza",
        "version-ext-colheader-name": "Estensione",
+       "version-skin-colheader-name": "Skin",
        "version-ext-colheader-version": "Versione",
        "version-ext-colheader-license": "Licenza",
        "version-ext-colheader-description": "Descrizione",
index e5fbb04..464c083 100644 (file)
@@ -58,7 +58,9 @@
                        "蝋燭α",
                        "青子守歌",
                        "아라",
-                       "Rxy"
+                       "Rxy",
+                       "Mfuji",
+                       "Takot"
                ]
        },
        "tog-underline": "リンクの下線:",
        "qbmyoptions": "自分のページ",
        "faq": "よくある質問と回答",
        "faqpage": "Project:よくある質問と回答",
-       "vector-action-addsection": "話題追加",
-       "vector-action-delete": "削除",
-       "vector-action-move": "移動",
-       "vector-action-protect": "保護",
-       "vector-action-undelete": "復元",
-       "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": "案内メニュー",
        "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|仮パスワードをメールで受け取るにはいずれかの欄に記入してください。}}",
        "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": "削除されたファイルの版はファイルの履歴に表示されつづけますが、一般の利用者はその内容の一部を閲覧できなくなります。",
        "mergehistory-empty": "統合できる版がありません。",
        "mergehistory-success": "[[:$1]]の $3 {{PLURAL:$3|版}}を[[:$2]]に統合しました。",
        "mergehistory-fail": "履歴の統合を実行できません。ページと時刻の引数を再確認してください。",
+       "mergehistory-fail-toobig": "移動させた{{PLURAL:$1|版}}の数が上限を超えているため、履歴の統合を実行できません。",
        "mergehistory-no-source": "統合元ページ $1 が存在しません。",
        "mergehistory-no-destination": "統合先ページ $1 が存在しません。",
        "mergehistory-invalid-source": "統合元のページは有効な名前でなければなりません。",
        "searchall": "すべて",
        "showingresults": "<strong>$2</strong> 件目以降の最大 {{PLURAL:$1|<strong>$1</strong> 件の結果}}を表示しています。",
        "showingresultsinrange": "<strong>$2</strong> 件目から<strong>$3</strong> 件目までの範囲内で最大 {{PLURAL:$1|<strong>$1</strong> 件の結果}}を表示しています。",
-       "showingresultsnum": "<strong>$2</strong> 件目以降の {{PLURAL:$3|<strong>$3</strong> 件の結果}}を表示しています。",
        "showingresultsheader": "「<strong>$4</strong>」の検索結果 {{PLURAL:$5|<strong>$3</strong> 件中の <strong>$1</strong> 件目|<strong>$3</strong> 件中の <strong>$1</strong> 件目から <strong>$2</strong> 件目}}",
        "search-nonefound": "問い合わせに合致する検索結果はありませんでした。",
        "powersearch-legend": "高度な検索",
        "powersearch-togglelabel": "チェックを入れる:",
        "powersearch-toggleall": "すべて",
        "powersearch-togglenone": "すべて外す",
+       "powersearch-remember": "この選択を今後の検索のために記憶させる",
        "search-external": "外部検索",
        "searchdisabled": "{{SITENAME}}の検索機能は無効化されています。\nさしあたってはGoogleなどで検索できます。\nただし外部の検索エンジンの索引にある{{SITENAME}}のコンテンツは古い場合があります。",
        "search-error": "検索する際にエラーが発生しました: $1",
        "windows-nonascii-filename": "このウィキではファイル名に特殊文字を使用できません。",
        "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-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": "ファイル名が <strong>$1</strong> で始まっています。\n他の画像から縮小されたもの <em>(サムネイル)</em> のようです。\nより高精細な画像をお持ちの場合はそれをアップロードしてください。お持ちではない場合はファイル名を変更してください。",
        "fileexists-forbidden": "この名前のファイルは既に存在しており、上書きできません。\nアップロードを継続したい場合は、前のページに戻り、別のファイル名を使用してください。\n[[File:$1|thumb|center|$1]]",
        "pageswithprop-prophidden-binary": "プロパティ値のバイナリが長いため非表示 ($1)",
        "doubleredirects": "二重転送",
        "doubleredirectstext": "このページでは、転送ページへの転送ページを列挙します。\n最初の転送ページ、その転送先にある転送ページ、さらにその転送先にあるページ、それぞれへのリンクを各行に表示しています。多くの場合は最終的な転送先が「正しい」転送先であり、最初の転送ページの転送先は最終的な転送先に直接向けるべきです。\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": "迷子のリダイレクト",
        "wantedtemplates": "呼び出し先が存在しないテンプレート呼び出し",
        "mostlinked": "被リンク数の多いページ",
        "mostlinkedcategories": "被リンク数の多いカテゴリ",
-       "mostlinkedtemplates": "使用箇所の多いテンプレート",
+       "mostlinkedtemplates": "もっとも使用箇所の多いテンプレート",
        "mostcategories": "カテゴリの多いページ",
        "mostimages": "被リンク数の多いファイル",
        "mostinterwikis": "ウィキ間リンクの多いページ",
        "allarticles": "全ページ",
        "allinnamespace": "全ページ ($1名前空間)",
        "allpagessubmit": "表示",
-       "allpagesprefix": "次の文字列から始まるページを表示:",
+       "allpagesprefix": "表示するページ名の先頭:",
        "allpagesbadtitle": "指定したページ名は無効か、言語間またはインターウィキ接頭辞を含んでいます。\nページ名に使用できない文字が1つ以上含まれている可能性があります。",
        "allpages-bad-ns": "{{SITENAME}}に「$1」という名前空間はありません。",
        "allpages-hide-redirects": "リダイレクトを隠す",
        "import-error-special": "ページ「$1」は、ページが許可されない特別名前空間に属しているため取り込みません。",
        "import-error-invalid": "名前が正しくないため、ページ「$1」を取り込みませんでした。",
        "import-error-unserialize": "ページ「$1」の版 $2 はシリアライズ解除できませんでした。この版は $4 としてシリアライズされたコンテンツモデル $3 を使用していると報告されています。",
+       "import-error-bad-location": "コンテンツモデル $3 はこのページではサポート外のため、モデル $3 を使っているリビジョン $2 はこのウィキ上の $1 に保存できません。",
        "import-options-wrong": "間違った{{PLURAL:$2|オプション}}です: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "入力したルートページの名前は無効です。",
        "import-rootpage-nosubpage": "ルートページの名前空間「$1」では、下位ページが許可されていません。",
        "tooltip-summary": "短い要約を入力してください",
        "interlanguage-link-title": "$2: $1",
        "common.css": "/* ここに記述したCSSはすべての外装に反映されます */",
-       "monobook.css": "/* ここに記述したCSSはモノブック外装の利用者に影響します */",
-       "vector.css": "/* ここに記述したCSSはベクター外装の利用者に影響します */",
        "print.css": "/* ここに記述したCSSは印刷出力に影響します */",
        "noscript.css": "/* ここに記述したCSSはJavaScriptを無効にしている利用者に影響します */",
        "group-autoconfirmed.css": "/* ここに記述したCSSは自動承認された利用者のみに影響します */",
        "group-sysop.css": "/* ここに記述したCSSは管理者のみに影響します */",
        "group-bureaucrat.css": "/* ここに記述したCSSはビューロクラットのみに影響します */",
        "common.js": "/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */",
-       "monobook.js": "/* ここにあるすべてのJavaScriptは、モノブック外装を使用している利用者に対して読み込まれます */",
-       "vector.js": "/* ここにあるすべてのJavaScriptは、ベクター外装を使用している利用者に対して読み込まれます */",
        "group-autoconfirmed.js": "/* ここにあるすべてのJavaScriptは、自動承認された利用者のみに読み込まれます */",
        "group-user.js": "/* ここにあるすべてのJavaScriptは、登録利用者のみに読み込まれます */",
        "group-bot.js": "/* ここにあるすべてのJavaScriptは、ボットのみに読み込まれます */",
        "pageinfo-category-pages": "ページ数",
        "pageinfo-category-subcats": "下位カテゴリ数",
        "pageinfo-category-files": "ファイル数",
-       "skinname-monobook": "モノブック",
-       "skinname-vector": "ベクター",
        "markaspatrolleddiff": "巡回済みにする",
        "markaspatrolledtext": "このページを巡回済みにする",
        "markedaspatrolled": "巡回済みにしました",
        "watchlistedit-clear-removed": "{{PLURAL:$1|$1 件のページ}}を除去しました:",
        "watchlistedit-too-many": "ページ数が多すぎるため表示できません。",
        "watchlisttools-clear": "ウォッチリストの全消去",
-       "watchlisttools-view": "関連する変更を閲覧",
-       "watchlisttools-edit": "ウォッチリストの閲覧と編集",
+       "watchlisttools-view": "関連する変更を表示",
+       "watchlisttools-edit": "ウォッチリストの表示と編集",
        "watchlisttools-raw": "ウォッチリストをテキストで編集",
        "iranian-calendar-m1": "ファルヴァルディーン",
        "iranian-calendar-m2": "オルディーベヘシュト",
        "duplicate-defaultsort": "<strong>警告:</strong> 既定のソートキー「$2」が、その前に書かれている既定のソートキー「$1」を上書きしています。",
        "version": "バージョン情報",
        "version-extensions": "インストール済み拡張機能",
+       "version-skins": "インストール済み外装",
        "version-specialpages": "特別ページ",
        "version-parserhooks": "構文解析フック",
        "version-variables": "変数",
        "version-antispam": "スパム対策",
-       "version-skins": "外装",
        "version-other": "その他",
        "version-mediahandlers": "メディアハンドラー",
        "version-hooks": "フック",
        "version-hook-name": "フック名",
        "version-hook-subscribedby": "使用個所",
        "version-version": "(バージョン $1)",
+       "version-no-ext-name": "[名前なし]",
        "version-license": "MediaWiki のライセンス",
        "version-ext-license": "ライセンス",
        "version-ext-colheader-name": "拡張機能",
+       "version-skin-colheader-name": "外装",
        "version-ext-colheader-version": "バージョン",
        "version-ext-colheader-license": "ライセンス",
        "version-ext-colheader-description": "説明",
        "htmlform-no": "いいえ",
        "htmlform-yes": "はい",
        "htmlform-chosen-placeholder": "選択してください",
+       "htmlform-cloner-create": "さらに追加",
        "htmlform-cloner-delete": "除去",
+       "htmlform-cloner-required": "少なくとも 1 つの値が必要です。",
        "sqlite-has-fts": "$1 (全文検索あり)",
        "sqlite-no-fts": "$1 (全文検索なし)",
        "logentry-delete-delete": "$1 がページ「$3」を{{GENDER:$2|削除しました}}",
index 571ed7d..d7054bf 100644 (file)
        "qbmyoptions": "Mi piejdem",
        "faq": "FAK",
        "faqpage": "Project:FAK",
-       "vector-action-addsection": "Ad tapik",
-       "vector-action-delete": "Diliit",
-       "vector-action-move": "Muuv",
-       "vector-action-protect": "Protek",
-       "vector-action-undelete": "Andiliit",
-       "vector-action-unprotect": "Neu protektian",
-       "vector-view-create": "Kriet",
-       "vector-view-edit": "Hedit",
-       "vector-view-history": "Vyuu ischri",
-       "vector-view-view": "Riid",
-       "vector-view-viewsource": "Vyuu Suos",
        "actions": "Akshan",
        "namespaces": "Niemspies",
        "variants": "Vieriant",
        "booksources-go": "Gwaan",
        "log": "Lagdem",
        "allpages": "Aal piej",
-       "alphaindexline": "$1 tu $2",
        "prevpage": "Priivos piej ($1)",
        "allpagesfrom": "Displie piej taat a:",
        "allpagesto": "Displie piej en a:",
index 80a3da2..3a6b61b 100644 (file)
        "qbmyoptions": "Opsiku",
        "faq": "FAQ (Pitakonan sing kerep diajokaké)",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Tambah topik",
-       "vector-action-delete": "Busak",
-       "vector-action-move": "Pindhahna",
-       "vector-action-protect": "Reksa",
-       "vector-action-undelete": "Batalna pambusakan",
-       "vector-action-unprotect": "Owahi pangreksan",
-       "vector-view-create": "Gawé",
-       "vector-view-edit": "Sunting",
-       "vector-view-history": "Sajarah kaca",
-       "vector-view-view": "Waca",
-       "vector-view-viewsource": "Pirsani sumber",
        "actions": "Tindakan",
        "namespaces": "Ruang jeneng",
        "variants": "Varian",
        "searchrelated": "kagandhèng",
        "searchall": "kabèh",
        "showingresults": "Ing ngisor iki dituduhaké {{PLURAL:$1|'''1''' kasil|'''$1''' kasil}}, wiwitané saking #<strong>$2</strong>.",
-       "showingresultsnum": "Ing ngisor iki dituduhaké {{PLURAL:$3|'''1''' kasil|'''$3''' kasil}}, wiwitané saka #<strong>$2</strong>.",
        "showingresultsheader": "{{PLURAL:$5|Asil '''$1''' saka '''$3'''|Asil '''$1 - $2''' saka '''$3'''}} kanggo '''$4'''",
        "search-nonefound": "Ora ana kasil sing cocog karo pitakonan (''query'').",
        "powersearch-legend": "Panggolèkan sabanjuré (''advance search'')",
index 092a97f..857fa17 100644 (file)
        "qbmyoptions": "ჩემი გვერდები",
        "faq": "ხშირი შეკითხვები",
        "faqpage": "Project:ხშირი შეკითხვები",
-       "vector-action-addsection": "თემის ჩამატება",
-       "vector-action-delete": "წაშლა",
-       "vector-action-move": "გადატანა",
-       "vector-action-protect": "დაცვა",
-       "vector-action-undelete": "აღდგენა",
-       "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": "სანავიგაციო მენიუ",
        "searchrelated": "მიბმული",
        "searchall": "ყველა",
        "showingresults": "ქვემოთ იხილეთ <b>$1</b>-მდე შედეგი დაწყებული #<b>$2</b>-იდან.",
-       "showingresultsnum": "ქვემოთ იხილეთ <b>$3</b> შედეგი დაწყებული #<b>$2</b>-იდან.",
        "showingresultsheader": "{{PLURAL:$5|რეზულტატი '''$1'''  '''$3'''-დან|რეზულტატები '''$1 — $2''' -დან '''$3'''}}  '''$4'''-თვის",
        "search-nonefound": "მოთხოვნის შესაბამისობა არ არის ნაპოვნი.",
        "powersearch-legend": "გაფართოებული ძიება",
        "tooltip-summary": "შეიყვანეთ მოკლე სქოლიო",
        "interlanguage-link-title": "$1 — $2",
        "common.css": "/** აქ ჩასმული CSS გამოყენებული იქნება გაფორმების ყველა გარეკანზე */",
-       "monobook.css": "/* აქ ჩასმული CSS გავლენას იქონიებს Monobook ინტერფეისის მომხმარებლებზე */",
-       "vector.css": "/* აქ ჩასმული CSS გამოყენებული იქნება ვექტორული გაფორმების თემაში */",
        "group-autoconfirmed.css": "/* აქ განთავსებული CSS გამოყენებული იქნება მხოლოდ ავტომატურად დადასტურებული მომხმარებლებისათვის */",
        "group-bot.css": "/* აქ განთავსებული CSS გამოყენებული იქნება მხოლოდ ბოტებისათვის */",
        "group-sysop.css": "/* აქ განთავსებული CSS გამოყენებული იქნება მხოლოდ ადმინისტრატორებისათვის */",
        "pageinfo-category-pages": "გვერდების რაოდენობა",
        "pageinfo-category-subcats": "ქვეკატეგორიების რაოდენობა",
        "pageinfo-category-files": "ფაილების რაოდენობა",
-       "skinname-monobook": "მონობუკი",
-       "skinname-vector": "ვექტორული",
        "markaspatrolleddiff": "მონიშნე როგორც პატრულირებული",
        "markaspatrolledtext": "მონიშნე ეს სტატია როგორც პატრულირებული",
        "markedaspatrolled": "მონიშნულია როგორც პატრულირებული",
index 8e1db50..8380ac5 100644 (file)
        "qbmyoptions": "Menin' betlerim",
        "faq": "KBS",
        "faqpage": "Project:KBS",
-       "vector-action-addsection": "Tema qosıw",
-       "vector-action-delete": "O'shiriw",
-       "vector-action-move": "Ko'shiriw",
-       "vector-action-protect": "Qorg'aw",
-       "vector-action-undelete": "Qayta tiklew",
-       "vector-action-unprotect": "Qorg'awdı o'zgertiw",
-       "vector-view-create": "Jaratıw",
-       "vector-view-edit": "O'zgertiw",
-       "vector-view-history": "Tariyxın ko'riw",
-       "vector-view-view": "Oqıw",
-       "vector-view-viewsource": "Deregin ko'riw",
        "actions": "Ha'reketler",
        "namespaces": "İsimler ko'plikleri",
        "variants": "Variantlar",
        "editundo": "qaytar",
        "searchresults": "İzlew na'tiyjeleri",
        "searchresults-title": "\"$1\" sorawnaması boyınsha tabılg'an na'tiyjeler",
-       "toomanymatches": "Dım ko'p sa'ykeslikler qaytarıldı, basqa sorawdı isletip ko'rin'",
        "titlematches": "Bet ataması sa'ykes keledi",
        "textmatches": "Bet tekstinin' tuwra kelgenleri",
        "notextmatches": "Hesh qanday bet teksti tuwra kelmedi",
        "searchmenu-exists": "'''Bul wikide \"[[:$1]]\" atamalı bet bar'''",
        "searchmenu-new": "'''Bul wikide \"[[:$1]]\" betin jaratıw!'''",
        "searchprofile-articles": "Mag'lıwmat betleri",
-       "searchprofile-project": "Ja'rdem ha'm Proekt betleri",
        "searchprofile-images": "Multimediya",
        "searchprofile-everything": "Barlıq jerde",
        "searchprofile-advanced": "Ken'eytilgen",
        "searchprofile-articles-tooltip": "$1 izlew",
-       "searchprofile-project-tooltip": "$1 izlew",
        "searchprofile-images-tooltip": "Fayllardı izlew",
        "searchprofile-everything-tooltip": "Barlıq betlerde izlew (sa'wbet betlerin qosıp)",
        "searchprofile-advanced-tooltip": "Berilgen isimler ko'pliginde izlew",
        "searchrelated": "baylanıslı",
        "searchall": "barlıq",
        "showingresults": "To'mende '''$2''' ornınan baslap {{PLURAL:$1|'''1''' na'tiyje|'''$1''' shekemgi na'tiyjeler}} ko'rsetilgen.",
-       "showingresultsnum": "To'mende '''$2''' ornınan baslap {{PLURAL:$3|'''1''' na'tiyje|'''$3''' na'tiyje}} ko'rsetilgen.",
        "search-nonefound": "Sorawg'a sa'ykes na'tiyje tabılmadı.",
        "powersearch-legend": "Ken'eytilgen izlew",
        "powersearch-ns": "Usı isimler ko'pliginen izlew:",
        "allowemail": "Basqalardan xat qabıllawdı qos",
        "prefs-searchoptions": "İzlew sazlawları",
        "prefs-namespaces": "İsimler ko'plikleri",
-       "defaultns": "Bolmasa usı isimler ko'plikleri boyınsha izlew:",
        "default": "defolt",
        "prefs-files": "Fayllar",
        "youremail": "E-mail:",
        "username": "Paydalanıwshı atı:",
-       "uid": "Paydalanıwshı IDsı:",
        "prefs-memberingroups": "Kirgen {{PLURAL:$1|toparın'ız|toparların'ız}}:",
        "yourrealname": "Haqıyqıy isimin'iz:",
        "yourlanguage": "Til:",
        "all-logs-page": "Barlıq ashıq jurnallar",
        "log-title-wildcard": "Usı tekstten baslang'an atamalardı izlew",
        "allpages": "Ha'mme betler",
-       "alphaindexline": "$1 — $2",
        "nextpage": "Keyingi bet ($1)",
        "prevpage": "Aldıng'ı bet ($1)",
        "allpagesfrom": "Mına betten baslap ko'rsetiw:",
        "whatlinkshere-filters": "Filtrler",
        "blockip": "Paydalanıwshını bloklaw",
        "blockip-legend": "Paydalanıwshını bloklaw",
-       "ipadressorusername": "IP Adres yamasa paydalanıwshı atı:",
+       "ipaddressorusername": "IP Adres yamasa paydalanıwshı atı:",
        "ipbexpiry": "Ku'shin joytıw waqtı:",
        "ipbreason": "Sebep:",
        "ipbcreateaccount": "Akkaunt jaratıwdı qadag'an etiw",
        "svg-long-desc": "SVG fayl, $1 × $2 piksel belgilengen, fayldın' ha'jmi: $3",
        "show-big-image": "Joqarı imkaniyatlı",
        "newimages": "Taza fayllar galereyasi",
-       "showhidebots": "(botlardı $1)",
        "noimages": "Ko'riwge su'wret joq.",
        "ilsubmit": "İzle",
        "bydate": "sa'ne boyınsha",
index 4153104..acd010c 100644 (file)
        "qbmyoptions": "isebtar inu",
        "faq": "Isteqsiyen",
        "faqpage": "Project:Isteqsiyen",
-       "vector-action-addsection": "Rnud ameggay",
-       "vector-action-delete": "Mḥu",
-       "vector-action-move": "Smimeḍ",
-       "vector-action-protect": "Mmesten",
-       "vector-action-undelete": "Uɣaled",
-       "vector-action-unprotect": "Beddel amesten",
-       "vector-view-create": "Snulfu",
-       "vector-view-edit": "Ẓẓiẓreg",
-       "vector-view-history": "Ẓeṛ amazray",
-       "vector-view-view": "Ɣer",
-       "vector-view-viewsource": "Ẓer aɣbalu",
        "actions": "Tigawtin",
        "namespaces": "Talluntin n isemawen",
        "variants": "Tineḍwa",
        "searchrelated": "ineqqes",
        "searchall": "akk",
        "showingresults": "Tamuli n {{PLURAL:$1|'''Yiwen''' wegmud|'''$1''' n yigmad}} seg  #'''$2'''.",
-       "showingresultsnum": "Tamuli n {{PLURAL:$3|'''Yiwen''' wegmud|'''$3''' n yigmad}} seg  #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Agmud '''$1'''|Igmad '''$1–$2'''}} n '''$3''' i '''$4'''",
        "search-nonefound": "Ulac igmad i usuter agi.",
        "powersearch-legend": "Anadi amahlan",
index c39bc1e..0ccb278 100644 (file)
        "qbmyoptions": "Уи зэгъэзэхуэгъуэхэр",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Теухугъуэ щӀэуэ щӀэдзэн",
-       "vector-action-delete": "Ихын",
-       "vector-action-move": "ЦӀэр хъуэжын",
-       "vector-action-protect": "Хъумэн",
-       "vector-action-undelete": "ЗыфӀэгъэувэжын",
-       "vector-action-unprotect": "Хъумэныр техыжын",
-       "vector-view-create": "ЩӀын",
-       "vector-view-edit": "Гъэтэрэзын",
-       "vector-view-history": "Тхыдэм еплъын",
-       "vector-view-view": "Еджэн",
-       "vector-view-viewsource": "КъызхэкӀам еплъын",
        "actions": "ЩӀыгъэхэр",
        "namespaces": "ЦӀэхэм я пӀэр",
        "variants": "Вариантхэр",
        "nextn": "яуж кӀуэр {{PLURAL:$1|$1}}",
        "viewprevnext": "Еплъын ($1 {{int:pipe-separator}} $2) ($3)",
        "searchprofile-articles-tooltip": "Лъыхъуэн $1-м",
-       "searchprofile-project-tooltip": "Лъыхъуэн $1-м",
        "search-result-size": "$1 ({{PLURAL:$2|псалъэу $2|псалъэу $2|псалъэу $2}})",
        "search-redirect": "(егъэкӀуэкӀын $1)",
        "search-section": "(секцэ $1)",
        "booksources-go": "Къэгъуэтын",
        "log": "Тхылъхэр",
        "allpages": "НапэкIуэцIухъуар",
-       "alphaindexline": "$1-м щыщIэдзауэ $2-м нэс",
        "prevpage": "Япэреуэ кӀуа напэкӀуэцӀыр ($1)",
        "allpagesfrom": "МыбыкIэ щIидзэ напэкIуэцIхэр къихын:",
        "allpagesto": "Къихыныр къэгъэувыIэн:",
index 6cb8209..9a5181c 100644 (file)
        "qbmyoptions": "مہ صفحات",
        "faq": "عام معلومات",
        "faqpage": "Project:معلوماتِ عامہ",
-       "vector-action-addsection": "نوغ موضوع",
-       "vector-action-delete": "بوغاوے",
-       "vector-action-move": "منتقل کورے",
-       "vector-action-protect": "محفوظ کورے",
-       "vector-action-undelete": "اچی انگیے",
-       "vector-action-unprotect": "غیر محفوظ",
-       "vector-view-create": "ساوزاوے",
-       "vector-view-edit": "ایڈٹ کورے",
-       "vector-view-history": "تاریخچہ",
-       "vector-view-view": "راوے",
-       "vector-view-viewsource": "مسودہ",
        "actions": "ایکشنز",
        "namespaces": "نامان ژاغہ",
        "variants": "الگ",
        "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": "کسٹم نیم اسپیسا تلاش کورے",
        "skin-preview": "نمائش",
        "youremail": "بشلی کغاز",
        "username": "ممبارو نم",
-       "uid": "ممبارو لمبار:",
        "prefs-memberingroups": "{{PLURAL:$1|گروہ|گروہاں}} رُکن:",
        "prefs-registration-date-time": "$1",
        "yourrealname": "* اصلی نم",
        "speciallogtitlelabel": "عنوان:",
        "log": "نوشتہ جات",
        "allpages": "سف صفحات",
-       "alphaindexline": "$1 تا $2",
        "prevpage": "آچھو صفحہ ($1)",
        "allpagesfrom": "مطلوبہ حرفاری شروع باک صفحاتن نمائش:",
        "allpagesto": "مطلوبہ حرفاری ختم باک صفحاتن نمائش:",
diff --git a/languages/i18n/ki.json b/languages/i18n/ki.json
new file mode 100644 (file)
index 0000000..ed5523a
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Stephenwanjau"
+               ]
+       },
+       "gotaccountlink": "Ingira",
+       "protectedarticle": "nimenyeriri [[$1]]",
+       "watchlistall2": "ciothi"
+}
index bd13cab..c5d401d 100644 (file)
        "qbmyoptions": "Pelê mı",
        "faq": "PZP (Persê ke zaf perşinê)",
        "faqpage": "Project:PZP",
-       "vector-action-addsection": "Mewzu ilawe ke",
-       "vector-action-delete": "Bestere",
-       "vector-action-move": "Bere",
-       "vector-action-protect": "Bısevekne",
-       "vector-action-undelete": "Esterıtene peyser bıcê",
-       "vector-action-unprotect": "Rake",
-       "vector-view-create": "Vıraze",
-       "vector-view-edit": "Bıvurne",
-       "vector-view-history": "Tarixi basne",
-       "vector-view-view": "Bıwane",
-       "vector-view-viewsource": "Çımey bıvêne",
        "actions": "Kerdey",
        "namespaces": "Caê namey",
        "variants": "Varyanti",
index ec41fcf..97df37b 100644 (file)
        "compareselectedversions": "بولەكتەنگەن نۇسقالاردى سالىستىرۋ",
        "editundo": "جوققا شىعارۋ",
        "searchresults": "ىزدەۋ ناتىيجەلەرى",
-       "toomanymatches": "تىم كوپ سايكەس قايتارىلدى, وزگە سۇرانىمدى بايقاپ كورىڭىز",
        "titlematches": "بەت تاقىرىبىن اتى سايكەس كەلەدى",
        "textmatches": "بەت ٴماتىنى سايكەس كەلەدى",
        "notextmatches": "ەش بەت ٴماتىنى سايكەس ەمەس",
        "searchrelated": "قاتىستى",
        "searchall": "بارلىق",
        "showingresults": "تومەندە ٴنومىر '''$2''' ورنىنان باستاپ بارىنشا '''$1''' ناتىيجە كورسەتىلەدى.",
-       "showingresultsnum": "تومەندە ٴنومىر '''$2''' ورنىنان باستاپ '''$3''' ناتىيجە كورسەتىلەدى.",
        "powersearch-legend": "كەڭەيتىلگەن ىزدەۋ",
        "powersearch-ns": "مىنا ەسىم ايالاردا ىزدەۋ:",
        "search-external": "شەتتىك ىزدەگىش",
        "allowemail": "باسقادان حات قابىلداۋىن قوس",
        "prefs-searchoptions": "ىزدەۋ باپتالىمدارى",
        "prefs-namespaces": "ەسىم ايالارى",
-       "defaultns": "مىنا ەسىم ايالاردا ادەپكىدەن ىزدەۋ:",
        "default": "ادەپكى",
        "prefs-files": "فايلدار",
        "youremail": "ە-پوشتاڭىز:",
        "username": "قاتىسۋشى اتىڭىز:",
-       "uid": "قاتىسۋشى تەڭدەستىرگىشىڭىز:",
        "prefs-memberingroups": "كىرگەن {{PLURAL:$1|توبىڭىز|توپتارىڭىز}}:",
        "yourrealname": "ناقتى اتىڭىز:",
        "yourlanguage": "ٴتىلىڭىز:",
        "logempty": "جۋرنالدا سايكەس دانالار جوق.",
        "log-title-wildcard": "مىنا ماتىننەڭ باستالىتىن تاقىرىپ اتتارىن ىزدەۋ",
        "allpages": "بارلىق بەتتەر",
-       "alphaindexline": "$1 — $2",
        "nextpage": "كەلەسى بەتكە ($1)",
        "prevpage": "الدىڭعى بەتكە ($1)",
        "allpagesfrom": "مىنا بەتتەن باستاپ كورسەتۋ:",
        "blockip": "قاتىسۋشىنى بۇعاتتاۋ",
        "blockip-legend": "قاتىسۋشىنى بۇعاتتاۋ",
        "blockiptext": "تومەندەگى ٴپىشىن قاتىسۋشىنىڭ جازۋ رۇقساتىن بەلگىلى IP مەكەنجايىمەن نە اتىمەن بۇعاتتاۋ ٴۇشىن قولدانىلادى.\nبۇنى تەك بۇزاقىلىقتى قاقپايلاۋ ٴۇشىن جانە دە [[{{{{ns:mediawiki}}:Policy-url}}|ەرەجەلەر]] بويىنشا اتقارۋىڭىز ٴجون.\nتومەندە ٴتىيىستى سەبەبىن تولتىرىپ كورسەتىڭىز (مىسالى, دايەككە بۇزاقىلىقپەن وزگەرتكەن بەتتەردى كەلتىرىپ).",
-       "ipadressorusername": "IP مەكەنجايى نە قاتىسۋشى اتى:",
+       "ipaddressorusername": "IP مەكەنجايى نە قاتىسۋشى اتى:",
        "ipbexpiry": "مەرزىمى بىتپەك:",
        "ipbreason": "سەبەبى:",
        "ipbreason-dropdown": "* بۇعاتتاۋدىڭ جالپى سەبەبتەرى\n** جالعان مالىمەت ەنگىزۋ\n** بەتتەردەگى ماعلۇماتتى الاستاۋ\n** شەتتىك توراپتار سىلتەمەلەرىن جاۋدىرۋ\n** بەتتەرگە ماعىناسىزدىق/بالدىرلاۋ كىرىستىرۋ\n** قوقانداۋ/قۋعىنداۋ مىنەزقۇلىق\n** بىرنەشە رەت تىركەلىپ قىيياناتتاۋ\n** ورەسكەل قاتىسۋشى اتى",
        "tooltip-recreate": "بەت جويىلعانىنا قاراماستان قايتا باستاۋ",
        "tooltip-upload": "قوتارىپ بەرۋدى باستاۋ",
        "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}} تىركەلگىسىز قاتىسۋشى(لارى)",
        "siteuser": "{{SITENAME}} قاتىسۋشى $1",
        "lastmodifiedatby": "بۇل بەتتى $3 قاتىسۋشى سوڭعى وزگەرتكەن كەزى: $2, $1.",
        "spambot_username": "MediaWiki spam cleanup",
        "spam_reverting": "$1 دەگەنگە سىلتەمەلەرى جوق سوڭعى نۇسقاسىنا قايتارىلدى",
        "spam_blanking": "$1 دەگەنگە سىلتەمەلەرى بار بارلىق تۇزەتۋلەر تازارتىلدى",
-       "skinname-cologneblue": "كولن زەڭگىرلىگى (cologneblue)",
-       "skinname-monobook": "دارا كىتاپ (monobook)",
-       "skinname-modern": "زاماناۋىي (modern)",
        "markaspatrolleddiff": "زەرتتەلدى دەپ بەلگىلەۋ",
        "markaspatrolledtext": "بۇل بەتتى زەرتتەلدى دەپ بەلگىلە",
        "markedaspatrolled": "زەرتتەلدى دەپ بەلگىلەندى",
        "newimages": "جاڭا فايلدار كورمەسى",
        "imagelisttext": "تومەندە $2 سۇرىپتالعان '''$1''' فايل ٴتىزىمى.",
        "newimages-summary": "بۇل ارنايى بەتىندە سوڭعى قوتارىپ بەرىلگەن فايلدار كورسەتىلەدى",
-       "showhidebots": "(بوتتاردى $1)",
        "noimages": "كورەتىن ەشتەڭە جوق.",
        "ilsubmit": "ىزدە",
        "bydate": "كۇن-ايىمەن",
index 43b7a19..884aac4 100644 (file)
        "qbmyoptions": "Беттерім",
        "faq": "Жиі қойылатын сұрақтар",
        "faqpage": "Project:Жиі қойылатын сұрақтар",
-       "vector-action-addsection": "Тақырып қосу",
-       "vector-action-delete": "Жою",
-       "vector-action-move": "Атауын өзгерту",
-       "vector-action-protect": "Қорғау",
-       "vector-action-undelete": "Жоймау",
-       "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": "Бағыттау мәзірі",
        "search-section": "(бөлім $1)",
        "search-suggest": "Мүмкін осы болар: $1",
        "search-interwiki-caption": "Бауырлас жобалар",
-       "search-interwiki-default": "$1 нәтиже:",
+       "search-interwiki-default": "$1 Ð´ÐµÐ³ÐµÐ½Ð½ÐµÐ½ Ð½Ó\99Ñ\82иже:",
        "search-interwiki-more": "(көбірек)",
        "search-relatedarticle": "Қатысты",
        "searchrelated": "қатысты",
        "searchall": "барлық",
        "showingresults": "Төменде нөмір '''$2''' орнынан бастап барынша '''$1''' нәтиже көрсетіледі.",
-       "showingresultsnum": "Төменде нөмір '''$2''' орнынан бастап '''$3''' нәтиже көрсетіледі.",
        "showingresultsheader": "«<strong>$4</strong>» сұранысына {{PLURAL:$5|тек <strong>$1</strong> нәтиже табылды|табылған <strong>$3</strong> нәтиженің <strong>$1 - $2</strong> аралығы көрсетілген}}",
        "search-nonefound": "Сұрауға сәйкес нәтижелер табылмады.",
        "powersearch-legend": "Кеңейтілген іздеу",
        "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": "бұл бар файлдың үстіне жазу",
        "backend-fail-read": "«$1» файлы оқылмайды.",
        "backend-fail-create": "«$1» файлы жазылмайды.",
        "backend-fail-maxsize": "\"$1\" файлы жазылмайды, себебі {{PLURAL:$2|1 байттан|$2 байттан}} үлкенірек.",
+       "img-auth-accessdenied": "Қатынау шектелген",
        "http-invalid-url": "Жарамсыз URL: $1",
        "http-read-error": "HTTP оқудағы қате.",
        "upload-curl-error6": "URL жетілмеді",
        "pageswithprop-submit": "Өту",
        "doubleredirects": "Екі мәрте айдағыштар",
        "doubleredirectstext": "Бұл бетте басқа айдату беттерге сілтейтін беттер тізімделінеді. Әрбір жолақта бірінші және екінші айдағышқа сілтемелер бар, сонымен бірге екінші айдағыш нысанасы бар, әдетте бұл бірінші айдағыш бағыттайтын «нақты» нысана бет атауы болуы керек.",
-       "double-redirect-fixed-move": "[[$1]] Ð¶Ñ\8bлжÑ\8bÑ\82Ñ\8bлдÑ\8b.\nоÒ\93ан Ò\9bазÑ\96Ñ\80 [[$2]] Ð´ÐµÐ³ÐµÐ½Ð³Ðµ Ð°Ð¹Ð´Ð°Ñ\82Ñ\8bлды.",
+       "double-redirect-fixed-move": "[[$1]] Ð¶Ñ\8bлжÑ\8bÑ\82Ñ\8bлдÑ\8b.\nÐ\9eл Ó©Ð·Ð´Ñ\96кÑ\82Ñ\96 Ñ\82Ò¯Ñ\80де Ð¶Ð°Ò£Ð°Ñ\80Ñ\82Ñ\8bладÑ\8b Ð¶Ó\99не Ð¾Ò\93ан Ò\9bазÑ\96Ñ\80 [[$2]] Ð´ÐµÐ³ÐµÐ½Ð³Ðµ Ð±Ð°Ò\93Ñ\8bÑ\82Ñ\82алады.",
        "brokenredirects": "Сынық айдағыштар",
        "brokenredirectstext": "Келесі айдағыштар жоқ беттерге сілтейді:",
        "brokenredirects-edit": "өңдеу",
        "wantedtemplates": "Басталмаған үлгілер",
        "mostlinked": "Ең көп сілтенген беттер",
        "mostlinkedcategories": "Ең көп сілтенген санаттар",
-       "mostlinkedtemplates": "Ең көп сілтенген үлгілер",
+       "mostlinkedtemplates": "Ең көп кірістірілген (қолданылған) үлгілер",
        "mostcategories": "Ең көп санаты бар беттер",
        "mostimages": "Ең көп сілтенген файлдар",
        "mostinterwikis": "Ең көп интеруикилері бар беттер",
        "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": "Қатысушыға хат жазу",
        "usermaildisabledtext": "Бұл уикиде басқа қатысушыларға хат жібере алмайсыз",
        "noemailtitle": "Еш е-пошта мекенжайы жоқ",
        "noemailtext": "Бұл қатысушы жарамды е-пошта мекенжайын келтірмеген.",
+       "nowikiemailtext": "Бұл қатысушы басқа қатысушылардан хат хабылдамауды таңдаған.",
        "emailusername": "Қатысушы аты:",
        "emailusernamesubmit": "Жіберу",
        "email-legend": "Басқа {{SITENAME}} қатысушысына хат жіберу",
        "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": "Мына айдан (және ертеректен):",
        "movepagetalktext": "Келесі жағдай орын алса, қатысты талқылау беті '''жылжытылмайды''':\n*жаңа атаумен аталатын беттің талқылау беті әлдеқашан бар болған кезде (бұл жағдайда талқылауын қолмен көшіруге болады, бірақ түйіндемесіне қай беттен көшірілгендігін міндетті түрде жазыңыз)\n*төмендегі қорапшадан құсбелгі алынып тасталғанда.\n\nАл мақаланың атауын өзгертем деп мағлұматын қолмен көшіруге болмайды, себебі беттің түзету тарихын өшіреді.",
        "movearticle": "Бетті жылжыту:",
        "moveuserpage-warning": "<strong>Ескерту:</strong> Сіз қатысушы бетін жылжытпақшысыз. Назар аударыңыз, қатысушы беті ғана жылжытылуы мүмкін және қатысушы аты <em>өзгертілмейді</em>.",
+       "movecategorypage-warning": "<strong>Ескерту:</strong> Сіз санат бетінің атауын өзгерткелі жатырсыз. Бұл әрекетіңізде санат атауы ғана өзгерте аласыз сондықтан санаттың бұрыңғы атауындағы қандай да бір бет санаттың жаңа атауына өздігінен <em>санатталмайтыны</em> есіңізде болсын. Санаттың бұрыңғы атауындағы беттері мен санатшаларын жаңа атауына қайта санаттап шығуға тура келеді.",
        "movenologintext": "Бетті жылжыту үшін тіркелген қатысуышы болуыңыз және [[Special:UserLogin|кіруіңіз]] керек.",
        "movenotallowed": "{{SITENAME}} жобасында беттерді жылжытуға рұқсатыңыз жоқ.",
        "movenotallowedfile": "Файлдарды жылжытуға рұқсатыңыз жоқ.",
        "cant-move-user-page": "Қатысушы беттерін жылжытуға рұқсатыңыз жоқ (төменгі беттерінен басқа).",
        "cant-move-to-user-page": "Бетті қатысушы бетіне жылжытуға рұқсатыңыз жоқ (төменгі беттерін қоспағанда).",
+       "cant-move-category-page": "Сізде санат беттерінің атауын өзгертуге рұқсатыңыз жоқ.",
+       "cant-move-to-category-page": "Сізде бетті санат бетіне жылжытуға рұқсатыңыз жоқ.",
        "newtitle": "Жаңа бет атауы:",
        "move-watch": "Бұл бетті бақылау",
        "movepagebtn": "Бетті жылжыту",
        "tooltip-rollback": "\"Шегіндіру\" сілтемесін бір рет басу арқылы соңға редактордың барлық қатар өңдемелерін өшіру",
        "tooltip-preferences-save": "Бапталымдарыңызды сақтау",
        "tooltip-summary": "Қысқаша түйіндемесін енгізіңіз",
+       "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/* Мында орналастырылған CSS барлық мәнерлерде қолданылады */",
-       "monobook.css": "/* Мында орналастырылған CSS тек «Дара кітап» (monobook) мәнерін пайдаланушыларына ықпал етеді */",
        "common.js": "/* Мындағы әртүрлі JavaScript кез келген бет қотарылғанда барлық пайдаланушылар үшін жегіледі. */",
-       "monobook.js": "/* Мындағы JavaScript тек «Дара кітап» (monobook) мәнерін пайдаланушылар үшін жегіледі */",
        "anonymous": "{{SITENAME}} тіркелгісіз {{PLURAL:$1|қатысушысы|қатысушылары}}",
        "siteuser": "{{SITENAME}} қатысушы $1",
        "anonuser": "{{SITENAME}} анонимді қатысушы: $1",
        "pageinfo-category-pages": "Беттер саны",
        "pageinfo-category-subcats": "Санатшалар саны",
        "pageinfo-category-files": "Файлдар саны",
-       "skinname-monobook": "Жеке кітап (monobook)",
        "markaspatrolleddiff": "Зерттелді деп белгілеу",
        "markaspatrolledtext": "Бұл бетті тексерілді деп белгілеу",
        "markedaspatrolled": "Тексерілді деп белгіленді",
        "watchlistedit-raw-done": "Бақылау тізіміңіз жаңартылды.",
        "watchlistedit-raw-added": "$1 тақырып аты үстелді:",
        "watchlistedit-raw-removed": "$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 бет атауы}} аласталды:",
+       "watchlistedit-too-many": "Мұнда өте көп беттер көрсетілген.",
+       "watchlisttools-clear": "Бақылау тізімін тазарту",
        "watchlisttools-view": "Қатысты өзгерістерді қарау",
        "watchlisttools-edit": "Бақылау тізімді қарау және өңдеу",
        "watchlisttools-raw": "Бақылау тізімін өңдеу",
        "unknown_extension_tag": "Белгісіз кеңейтпе белгісі \"$1\"",
        "version": "Нұсқа",
        "version-extensions": "Орнатылған кеңейтімдер",
+       "version-skins": "Орнатылған мәнерлер",
        "version-specialpages": "Арнайы беттер",
        "version-parserhooks": "Құрылымдық талдатқыштың тұзақтары",
        "version-variables": "Айнымалылар",
        "version-antispam": "Спамнан қорғау",
-       "version-skins": "Мәнерлер",
        "version-other": "Тағы басқалар",
        "version-mediahandlers": "Медиа өңдеткіштері",
        "version-hooks": "Жете тұзақтары",
        "version-hook-name": "Тұзақ атауы",
        "version-hook-subscribedby": "Тұзақ тартқыштары",
        "version-version": "(Нұсқасы: $1)",
+       "version-no-ext-name": "[аты жоқ]",
        "version-license": "MediaWiki Лицензиясы",
        "version-ext-license": "Лицензия",
        "version-ext-colheader-name": "Кеңейтілім",
+       "version-skin-colheader-name": "Мәнер",
        "version-ext-colheader-version": "Нұсқасы",
        "version-ext-colheader-license": "Лицензиясы",
        "version-ext-colheader-description": "Сипаттамасы",
        "htmlform-selectorother-other": "Басқа",
        "htmlform-no": "Жоқ",
        "htmlform-yes": "Иә",
+       "htmlform-cloner-create": "Тағы қосу",
+       "htmlform-cloner-delete": "Аластау",
        "logentry-delete-delete": "$1 $3 деген бетті {{GENDER:$2|жойды}}",
        "logentry-delete-restore": "$1 $3 деген бетті {{GENDER:$2|қалпына келтірді}}",
        "logentry-delete-event": "$1 $3 бетіндегі {{PLURAL:$5|журнал оқиғасы|$5 журнал оқиғасы}} көрінісін {{GENDER:$2|өзгертті}}: $4",
index 968cd64..cbec7b2 100644 (file)
        "compareselectedversions": "Bölektengen nusqalardı salıstırw",
        "editundo": "joqqa şığarw",
        "searchresults": "İzdew nätïjeleri",
-       "toomanymatches": "Tım köp säýkes qaýtarıldı, özge suranımdı baýqap köriñiz",
        "titlematches": "Bet taqırıbın atı säýkes keledi",
        "textmatches": "Bet mätini säýkes keledi",
        "notextmatches": "Eş bet mätini säýkes emes",
        "searchrelated": "qatıstı",
        "searchall": "barlıq",
        "showingresults": "Tömende nömir '''$2''' ornınan bastap barınşa '''$1''' nätïje körsetiledi.",
-       "showingresultsnum": "Tömende nömir '''$2''' ornınan bastap '''$3''' nätïje körsetiledi.",
        "powersearch-legend": "Keñeýtilgen izdew",
        "powersearch-ns": "Usı isimler ko'pliginen izlew:",
        "search-external": "Şettik izdegiş",
        "allowemail": "Basqadan xat qabıldawın qos",
        "prefs-searchoptions": "İzdew baptalımdarı",
        "prefs-namespaces": "Esim ayaları",
-       "defaultns": "Mına esim ayalarda ädepkiden izdew:",
        "default": "ädepki",
        "prefs-files": "Faýldar",
        "youremail": "E-poştañız:",
        "username": "Qatıswşı atıñız:",
-       "uid": "Qatıswşı teñdestirgişiñiz:",
        "prefs-memberingroups": "Kirgen {{PLURAL:$1|tobıñız|toptarıñız}}:",
        "yourrealname": "Naqtı atıñız:",
        "yourlanguage": "Tiliñiz:",
        "logempty": "Jwrnalda säýkes danalar joq.",
        "log-title-wildcard": "Mına mätinneñ bastalıtın taqırıp attarın izdew",
        "allpages": "Barlıq better",
-       "alphaindexline": "$1 — $2",
        "nextpage": "Kelesi betke ($1)",
        "prevpage": "Aldıñğı betke ($1)",
        "allpagesfrom": "Mına betten bastap körsetw:",
        "blockip": "Qatıswşını buğattaw",
        "blockip-legend": "Qatıswşını buğattaw",
        "blockiptext": "Tömendegi pişin qatıswşınıñ jazw ruqsatın belgili IP mekenjaýımen ne atımen buğattaw üşin qoldanıladı.\nBunı tek buzaqılıqtı qaqpaýlaw üşin jäne de [[{{{{ns:mediawiki}}:Policy-url}}|erejeler]] boýınşa atqarwıñız jön.\nTömende tïisti sebebin toltırıp körsetiñiz (mısalı, däýekke buzaqılıqpen özgertken betterdi keltirip).",
-       "ipadressorusername": "IP mekenjaýı ne qatıswşı atı:",
+       "ipaddressorusername": "IP mekenjaýı ne qatıswşı atı:",
        "ipbexpiry": "Merzimi bitpek:",
        "ipbreason": "Sebebi:",
        "ipbreason-dropdown": "* Buğattawdıñ jalpı sebebteri\n** Jalğan mälimet engizw\n** Betterdegi mağlumattı alastaw\n** Şettik toraptar siltemelerin jawdırw\n** Betterge mağınasızdıq/baldırlaw kiristirw\n** Qoqandaw/qwğındaw minezqulıq\n** Birneşe ret tirkelip qïyanattaw\n** Öreskel qatıswşı atı",
        "tooltip-recreate": "Bet joýılğanına qaramastan qaýta bastaw",
        "tooltip-upload": "Qotarıp berwdi bastaw",
        "common.css": "/* Mında ornalastırılğan CSS barlıq mänerlerde qoldanıladı */",
-       "cologneblue.css": "/* Mında ornalastırılğan CSS tek «Köln zeñgirligi» (cologneblue) mänerin paýdalanwşılarına ıqpal etedi skin */",
-       "monobook.css": "/* Mında ornalastırılğan CSS tek «Dara kitap» (monobook) mänerin paýdalanwşılarına ıqpal etedi */",
-       "modern.css": "/* Mında ornalastırılğan CSS tek «Zamanawï» (modern) mänerin paýdalanwşılarına ıqpal etedi */",
        "common.js": "/* Mındağı ärtürli JavaScript kez kelgen bet qotarılğanda barlıq paýdalanwşılar üşin jegiledi. */",
-       "cologneblue.js": "/* Mındağı JavaScript tek «Köln zeñgirligi» (cologneblue) mänerin paýdalanwşılar üşin jegiledi */",
-       "monobook.js": "/* Mındağı JavaScript tek «Dara kitap» (monobook) mänerin paýdalanwşılar üşin jegiledi */",
-       "modern.js": "/* Mındağı JavaScript tek «Zamanawï» (modern) mänerin paýdalanwşılar üşin jegiledi */",
        "anonymous": "{{SITENAME}} tirkelgisiz qatıswşı(ları)",
        "siteuser": "{{SITENAME}} qatıswşı $1",
        "lastmodifiedatby": "Bul betti $3 qatıswşı soñğı özgertken kezi: $2, $1.",
        "spambot_username": "MediaWiki spam cleanup",
        "spam_reverting": "$1 degenge siltemeleri joq soñğı nusqasına qaýtarıldı",
        "spam_blanking": "$1 degenge siltemeleri bar barlıq tüzetwler tazartıldı",
-       "skinname-cologneblue": "Köln zeñgirligi (cologneblue)",
-       "skinname-monobook": "Dara kitap (monobook)",
-       "skinname-modern": "Zamanawï (modern)",
        "markaspatrolleddiff": "Zertteldi dep belgilew",
        "markaspatrolledtext": "Bul betti zertteldi dep belgile",
        "markedaspatrolled": "Zertteldi dep belgilendi",
        "newimages": "Jaña faýldar körmesi",
        "imagelisttext": "Tömende $2 surıptalğan '''$1''' faýl tizimi.",
        "newimages-summary": "Bul arnaýı betinde soñğı qotarıp berilgen faýldar körsetiledi",
-       "showhidebots": "(bottardı $1)",
        "noimages": "Köretin eşteñe joq.",
        "ilsubmit": "İzde",
        "bydate": "kün-aýımen",
index 4ea4c75..c6a3dc8 100644 (file)
        "qbmyoptions": "ទំព័ររបស់ខ្ញុំ",
        "faq": "សំណួរដែលសួរញឹកញាប់",
        "faqpage": "Project:សំណួរដែលសួរញឹកញាប់",
-       "vector-action-addsection": "បន្ថែម​ប្រធានបទ​",
-       "vector-action-delete": "លុបចោល",
-       "vector-action-move": "ប្តូរទីតាំង",
-       "vector-action-protect": "ការពារ",
-       "vector-action-undelete": "ឈប់លុបចោល",
-       "vector-action-unprotect": "ប្ដូរការការពារ",
-       "vector-view-create": "បង្កើត​",
-       "vector-view-edit": "កែប្រែ​",
-       "vector-view-history": "មើល​ប្រវត្តិ​",
-       "vector-view-view": "អាន",
-       "vector-view-viewsource": "មើល​កូដ",
        "actions": "សកម្មភាព​",
        "namespaces": "លំហឈ្មោះ",
        "variants": "សណ្ដាន",
        "searchrelated": "ទាក់ទិន",
        "searchall": "ទាំងអស់",
        "showingresults": "ខាងក្រោមកំពុងបង្ហាញរហូតដល់ {{PLURAL:$1|'''១''' លទ្ឋផល|'''$1''' លទ្ឋផល}} ចាប់ផ្ដើមពីលេខ #'''$2'''។",
-       "showingresultsnum": "កំពុងបង្ហាញ {{PLURAL:$3|'''1''' result|'''$3''' លទ្ឋផល}}ខាងក្រោម ចាប់ផ្ដើមដោយ #'''$2''' ។",
        "showingresultsheader": "{{PLURAL:$5|លទ្ឋផល '''$1''' ក្នុងចំណោមលទ្ឋផលសរុប '''$3'''|លទ្ឋផល '''$1 - $2''' ក្នុងចំណោមលទ្ឋផលសរុប '''$3'''}} សម្រាប់ '''$4'''",
        "search-nonefound": "មិនមានលទ្ធផលណាមួយ​ត្រូវគ្នានឹងសំណើសុំនេះទេ",
        "powersearch-legend": "ស្វែងរកថ្នាក់ខ្ពស់",
        "tooltip-preferences-save": "រក្សាទុកចំណង់ចំណូលចិត្ត",
        "tooltip-summary": "សរសេរចំណារពន្យល់ថ្មីមួយ",
        "common.css": "/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើគ្រប់សំបកទាំងអស់ */",
-       "monobook.css": "/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Monobook */",
-       "vector.css": "/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Vector */",
        "anonymous": "{{PLURAL:$1|user|អ្នកប្រើប្រាស់}}អនាមិកនៃ {{SITENAME}}",
        "siteuser": "អ្នកប្រើប្រាស់{{SITENAME}} $1",
        "anonuser": "អ្នកប្រើប្រាស់{{SITENAME}}អនាមិក $1",
        "pageinfo-category-pages": "ចំនួនទំព័រ",
        "pageinfo-category-subcats": "ចំនួនកូនចំណាត់ថ្នាក់ក្រុម",
        "pageinfo-category-files": "ចំនួនឯកសារ",
-       "skinname-monobook": "សៀវភៅឯក",
-       "skinname-vector": "វ៉ិចទ័រ​​",
        "markaspatrolleddiff": "ចំណាំថាបានល្បាត",
        "markaspatrolledtext": "ចំណាំទំព័រនេះថាបានល្បាត",
        "markedaspatrolled": "បានចំណាំថាបានល្បាត",
index cc392e1..cbd849c 100644 (file)
        "qbmyoptions": "ನನ್ನ ಪುಟಗಳು",
        "faq": "ಸಾಮಾನ್ಯವಾಗಿ ಕೇಳಲಾಗುವ ಪ್ರಶ್ನೆಗಳು",
        "faqpage": "Project:ಸಾಮಾನ್ಯವಾಗಿ ಕೇಳಲಾಗುವ ಪ್ರಶ್ನೆಗಳು",
-       "vector-action-addsection": "ವಿಷಯ ಸೇರಿಸಿ",
-       "vector-action-delete": "ಅಳಿಸು",
-       "vector-action-move": "ಸ್ಥಳಾಂತರಿಸಿ",
-       "vector-action-protect": "ಸಂರಕ್ಷಿಸು",
-       "vector-action-undelete": "ಅಳಿಸಬೇಡ",
-       "vector-action-unprotect": "ರಕ್ಷಣೆಯನ್ನು ಬದಲಾವಣೆ",
-       "vector-view-create": "ಸೃಷ್ಟಿಸು",
-       "vector-view-edit": "ಸಂಪಾದಿಸಿ",
-       "vector-view-history": "ಇತಿಹಾಸವನ್ನು ನೋಡಿ",
-       "vector-view-view": "ಓದು",
-       "vector-view-viewsource": "ಆಕರ ವೀಕ್ಷಿಸು",
        "actions": "ಕ್ರಿಯೆಗಳು",
        "namespaces": "ನಾಮವರ್ಗಗಳು",
        "variants": "ಹಲವು",
        "editundo": "ಹಿಂದಿನಂತೆ",
        "searchresults": "ಶೋಧನೆಯ ಫಲಿತಾಂಶಗಳು",
        "searchresults-title": "\"$1\" ಅನ್ನು ಹುಡುಕಿದ ಫಲಿತಾಂಶಗಳು",
-       "toomanymatches": "ತುಂಬಾ ಫಲಿತಾಂಶಗಳು ದೊರೆತಿವೆ, ದಯವಿಟ್ಟು ಬೇರೆ ಪದಪುಂಜವನ್ನು ಪ್ರಯತ್ನಿಸಿ",
        "titlematches": "ಹೊಂದಿಕೆಯಿರುವ ಪುಟ ಶೀರ್ಷಿಕೆಗಳು",
        "textmatches": "ಪುಟದ ಪಠ್ಯದಲ್ಲಿನ ಹೋಲಿಕೆಗಳು",
        "notextmatches": "ಯಾವ ಪುಟದ ಪಠ್ಯದಲ್ಲೂ ಹೋಲಿಕೆಗಳಿಲ್ಲ",
        "searchrelated": "ಸಂಬಂಧಿತ",
        "searchall": "ಎಲ್ಲಾ",
        "showingresults": "ಕೆಳಗೆ #'''$2''' ಇಂದ ಶುರುವಾದ {{PLURAL:$1|'''೧''' ಫಲಿತಾಂಶದ|'''$1''' ಫಲಿತಾಂಶಗಳ}}ವರೆಗೂ ತೋರಿಸಲಾಗುತ್ತಿದೆ.",
-       "showingresultsnum": "ಕೆಳಗೆ #'''$2''' ಇಂದ ಶುರುವಾಗಿ {{PLURAL:$3|'''೧''' ಫಲಿತಾಂಶವನ್ನು|'''$3''' ಫಲಿತಾಂಶಗಳನ್ನು}} ತೋರಿಸಲಾಗುತ್ತಿದೆ.",
        "showingresultsheader": "'''$4''' ಗೆ {{PLURAL:$5|'''$3''' ರಲ್ಲಿ '''$1'''  ಫಲಿತಾಂಶ|'''$3''' ರಲ್ಲಿ '''$1 - $2'''  ಫಲಿತಾಂಶಗಳು}}",
        "search-nonefound": "ನಿಮ್ಮ ವಿಚಾರಣೆಗೆ ತಕ್ಕ ಫಲಿತಾಂಶಗಳಿಲ್ಲ.",
        "powersearch-legend": "ಮುಂದುವರೆದ ಹುಡುಕಾಟ",
index 5d63978..159b32b 100644 (file)
        "qbmyoptions": "내 사용자 문서",
        "faq": "자주 묻는 질문",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "새 주제",
-       "vector-action-delete": "삭제",
-       "vector-action-move": "옮기기",
-       "vector-action-protect": "보호",
-       "vector-action-undelete": "삭제 취소",
-       "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": "둘러보기 메뉴",
        "user-mail-no-addy": "받는 이의 이메일 주소가 없으면 이메일을 보낼 수 없습니다.",
        "user-mail-no-body": "비어 있거나 지나치게 짧은 본문으로 이메일을 보내려고 했습니다.",
        "changepassword": "비밀번호 바꾸기",
-       "resetpass_announce": "ë¡\9cê·¸ì\9d¸ì\9d\84 ë§\88ì¹\98려면 ì\83\88 ë¹\84ë°\80ë²\88í\98¸ë¥¼ ì\97¬ê¸°ì\97\90ì\84\9c ì\84¤ì \95í\95´ì\95¼ í\95©ë\8b\88ë\8b¤:",
+       "resetpass_announce": "ë¡\9cê·¸ì\9d¸ì\9d\84 ë§\88ì¹\98려면 ì\83\88 ë¹\84ë°\80ë²\88í\98¸ë¥¼ ì\84¤ì \95í\95´ì\95¼ í\95©ë\8b\88ë\8b¤.",
        "resetpass_text": "<!-- 여기에 텍스트를 추가하세요 -->",
        "resetpass_header": "비밀번호 바꾸기",
        "oldpassword": "이전 비밀번호:",
        "resetpass-submit-cancel": "취소",
        "resetpass-wrong-oldpass": "비밀번호가 잘못되었거나 현재의 비밀번호와 같습니다.\n이미 비밀번호를 성공적으로 바꾸었거나 새 임시 비밀번호를 요청했을 수 있습니다.",
        "resetpass-recycled": "현재 비밀번호와 다른 비밀번호로 재설정해주세요.",
-       "resetpass-temp-emailed": "임시 이메일 코드로 로그인되어 있습니다.\n로그인을 마치려면 여기서 새로운 비밀번호를 설정해야 합니다:",
+       "resetpass-temp-emailed": "임시 이메일 코드로 로그인되어 있습니다.\n로그인을 마치려면, 여기서 새 비밀번호를 설정해야 합니다:",
        "resetpass-temp-password": "임시 비밀번호:",
        "resetpass-abort-generic": "비밀번호 바꾸기가 확장 기능에 의해 중단되었습니다.",
-       "resetpass-expired": "비밀번호가 만료되었습니다. 로그인하려면 새로운 비밀번호를 설정해야 합니다.",
+       "resetpass-expired": "비밀번호가 만료되었습니다. 로그인하려면 새 비밀번호를 설정해야 합니다.",
        "resetpass-expired-soft": "비밀번호가 만료되어 재설정해야 합니다. 지금 새로운 비밀번호를 선택하거나, \"{{int:resetpass-submit-cancel}}\"를 클릭하고 나중에 재설정해주세요.",
        "resetpass-validity-soft": "귀하의 비밀번호는 유효하지 않습니다: $1\n\n새로운 비밀번호를 지금 설정하거나, \"{{int:resetpass-submit-cancel}}\"을 눌러 나중에 재설정하세요.",
        "passwordreset": "비밀번호 재설정",
        "mergehistory-empty": "합칠 수 있는 판이 없습니다.",
        "mergehistory-success": "[[:$1]] 문서의 {{PLURAL:$3|판}} $3개가 [[:$2]]에 성공적으로 합쳐졌습니다.",
        "mergehistory-fail": "역사 합치기를 수행할 수 없습니다, 문서와 시간 변수를 다시 확인하세요.",
+       "mergehistory-fail-toobig": "옮기려는 {{PLURAL:$1|판}} $1개 제한보다 많이 역사 병합을 수행할 수 없습니다.",
        "mergehistory-no-source": "원본인 $1 문서가 존재하지 않습니다.",
        "mergehistory-no-destination": "대상인 $1 문서가 존재하지 않습니다.",
        "mergehistory-invalid-source": "원본 문서는 올바른 제목이어야 합니다.",
        "searchall": "모두",
        "showingresults": "'''$2'''번 부터의 {{PLURAL:$1|결과 '''1'''개|결과 '''$1'''개}}입니다.",
        "showingresultsinrange": "#<strong>$2</strong>부터 #<strong>$3</strong>까지의 범위에서 <strong>$1</strong>개의 {{PLURAL:$1|결과}}가 아래에 보입니다.",
-       "showingresultsnum": "'''$2'''번 부터의 {{PLURAL:$3|결과 '''1'''개|결과 '''$3'''개}}입니다.",
        "showingresultsheader": "'''$4''' 검색어에 대한 {{PLURAL:$5|결과 '''$3'''개 중 '''$1'''개|결과 '''$3'''개 중 '''$1 - $2'''번째}}",
        "search-nonefound": "검색어와 일치하는 결과가 없습니다.",
        "powersearch-legend": "고급 검색",
        "gender-unknown": "밝히고 싶지 않습니다",
        "gender-male": "위키 문서를 편집하는 남자입니다",
        "gender-female": "위키 문서를 편집하는 여자입니다",
-       "prefs-help-gender": "ì\9d´ í\95­ëª©ì\9d\80 ì\84 í\83\9d ì\82¬í\95­ì\9e\85ë\8b\88ë\8b¤.\nì \81ì \88í\95\9c ë¬¸ë²\95ì \81 ì\84±ë³\84ì\9d\84 ì\82¬ì\9a©í\95\98ì\97¬ ë\8b¹ì\8b ì\9d\84 ì§\80ì¹­í\95\98ê±°ë\82\98 ë\8b¤ë¥¸ ì\82¬ë\9e\8cë\93¤ì\97\90ê²\8c ë\8b¹ì\8b ì\9d\84 ì\96¸ê¸\89í\95\98ë\8a\94 ê²½ì\9a°ì\97\90 ì\9d´ í\95­ëª©ì\9d\98 ê°\92ì\9d´ ì\82¬ì\9a©ë\90©ë\8b\88ë\8b¤.\nì\9d´ê²\83ì\9d\80 ê³µê°\9c í\95­ëª©ì\9e\85니다.",
+       "prefs-help-gender": "ì\9d´ í\99\98ê²½ ì\84¤ì \95ì\9d\80 ì\84 í\83\9d ì\82¬í\95­ì\9e\85ë\8b\88ë\8b¤.\nì\86\8cí\94\84í\8a¸ì\9b¨ì\96´ë\8a\94 ì \81ì \88í\95\9c ì\84±ë³\84 ë¬¸ë²\95ì\9d\84 ì\82¬ì\9a©í\95\98ì\97¬ ë\8b¤ë¥¸ ì\82¬ì\9a©ì\9e\90ì\97\90ê²\8c ë\8b¹ì\8b ì\9d\84 ì\96¸ê¸\89í\95\98ë\8a\94 ê²\83ì\9d\84 í\95´ê²°í\95\98기 ì\9c\84í\95´ ì\82¬ì\9a©ë\90©ë\8b\88ë\8b¤.\nì\9d´ ì \95ë³´ë\8a\94 ê³µê°\9cë\90©니다.",
        "email": "이메일",
        "prefs-help-realname": "실명은 선택 사항입니다.\n실명을 입력하면 문서 기여에 자신의 이름이 들어가게 됩니다.",
        "prefs-help-email": "이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호를 재설정하기 위해 필요합니다.",
        "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-extension": "비슷한 이름의 파일이 존재합니다: [[$2|thumb]]\n* 올리려는 파일 이름: <strong>[[:$1]]</strong>\n* 존재하는 파일 이름: <strong>[[:$2]]</strong>\n아마도 더 독특한 이름을 사용하고 싶으신가요?",
        "fileexists-thumbnail-yes": "파일은 그림의 크기를 줄인 (섬네일) 파일인 것 같습니다.\n[[$1|thumb]]\n<strong>[[:$1]]</strong> 파일을 확인하세요.\n해당 파일이 현재 올리려는 파일과 같다면 더 작은 크기의 그림을 올릴 필요는 없습니다.",
        "file-thumbnail-no": "파일 이름이 <strong>$1</strong>으로 시작합니다.\n이 파일은 그림의 크기를 줄인 (섬네일) 파일인 것 같습니다.\n더 해상도가 좋은 파일이 있다면 그 파일을 올리거나 아니면 올리려는 파일 이름을 바꾸세요.",
        "fileexists-forbidden": "같은 이름의 파일이 이미 있고, 덮어쓸 수 없습니다.\n그래도 파일을 올리시려면, 뒤로 돌아가서 다른 이름으로 시도해 주시기 바랍니다.\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "같은 이름의 파일이 이미 위키미디어 공용에 있습니다.\n그래도 파일을 올리려면 뒤로 돌아가서 다른 이름으로 시도해 주시기 바랍니다.\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "현재 올리고 있는 {{PLURAL:$1|파일}}이 아래 파일과 중복됩니다:",
        "file-deleted-duplicate": "이 파일과 같은 파일 ([[:$1]])이 이전에 삭제된 적이 있습니다. 파일을 다시 올리기 전에 문서의 삭제 기록을 확인해 주시기 바랍니다.",
-       "file-deleted-duplicate-notitle": "ì\9d´ í\8c\8cì\9d¼ê³¼ ê°\99ì\9d\80 í\8c\8cì\9d¼ì\9d´ ì\82­ì \9cë\90\9c ì\9d´ë ¥ì\9d´ ì\9e\88ì\8aµë\8b\88ë\8b¤. ì\97\85ë¡\9cë\93\9cí\95\98기ì\97\90 ì\95\9eì\84\9c, ì\82­ì \9cë\90\9c í\8c\8cì\9d¼ì\9d\98 ì\9d´ë ¥ì\9d\84 í\99\95ì\9d¸í\95  ì\88\98 ì\9e\88ë\8a\94 ê¶\8cí\95\9cì\9d\84 ê°\80ì§\84 ë\8b´ë\8b¹ì\9e\90ì\97\90ê²\8c ë¨¼ì \80 ë¬¸ì\9d\98í\95\98기 ë°\94ë\9e\8d니다.",
+       "file-deleted-duplicate-notitle": "ì\9d´ í\8c\8cì\9d¼ê³¼ ê°\99ì\9d\80 í\8c\8cì\9d¼ì\9d´ ì\9d´ì \84ì\97\90 ì\82­ì \9cë\90\9c ì \81ì\9d´ ì\9e\88ì\9c¼ë©°, ì \9c목ì\9d\80 ì\88¨ê²¨ì ¸ ì\9e\88ì\8aµë\8b\88ë\8b¤.\në\8b¤ì\8b\9c ì\98¬ë¦¬ê¸° ì \84ì\97\90 ì\83\81í\99\95ì\9d\80 ê²\80í\86 í\95\98기 ì\9c\84í\95´ ì\88¨ê²¨ì§\84 í\8c\8cì\9d¼ ë\8d°ì\9d´í\84°ë¥¼ ë³¼ ì\88\98 ì\9e\88ë\8a\94 ë\88\84êµ°ê°\80ì\97\90ê²\8c ë¬¼ì\96´ë´\90ì\95¼ í\95©니다.",
        "uploadwarning": "올리기 경고",
        "uploadwarning-text": "아래의 파일 설명을 수정하고 다시 시도해 주세요.",
        "savefile": "파일 저장",
        "filedelete-maintenance": "점검 중에는 임시적으로 삭제와 되살리기를 할 수 없습니다.",
        "filedelete-maintenance-title": "파일을 삭제할 수 없습니다",
        "mimesearch": "MIME 검색",
-       "mimesearch-summary": "MIME 유형에 해당하는 파일을 검색합니다.\n다음 형태로 입력해주세요: 내용종류/하위종류, 예를 들어 <code>image/jpeg</code>",
+       "mimesearch-summary": "이 페이지는 MIME 유형에 해당하는 파일을 필터합니다.\n입력: 내용종류/하위종류나 내용종류/*, 예를 들어 <code>image/jpeg</code>",
        "mimetype": "MIME 형식:",
        "download": "다운로드",
        "unwatchedpages": "주시되지 않는 문서 목록",
        "wantedtemplates": "필요한 틀 목록",
        "mostlinked": "가장 많이 연결된 문서 목록",
        "mostlinkedcategories": "가장 많이 연결된 분류 목록",
-       "mostlinkedtemplates": "가장 많이 사용된 틀 목록",
+       "mostlinkedtemplates": "가장 많이 끼워진 문서",
        "mostcategories": "가장 많이 분류된 문서 목록",
        "mostimages": "가장 많이 사용된 파일 목록",
        "mostinterwikis": "가장 많이 인터위키가 달린 문서 목록",
        "delete-edit-reasonlist": "삭제 이유 편집",
        "delete-toobig": "이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 있습니다.\n편집 역사가 긴 문서를 삭제하면 {{SITENAME}}에 큰 혼란을 줄 수 있기 때문에 삭제할 수 없습니다.",
        "delete-warning-toobig": "이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 있습니다.\n편집 역사가 긴 문서를 삭제하면 {{SITENAME}} 데이터베이스 동작에 큰 영향을 줄 수 있습니다.\n주의해 주세요.",
-       "deleting-backlinks-warning": "'''경고:''' 삭제하려는 문서가 [[Special:WhatLinksHere/{{FULLPAGENAME}}|다른 문서에 연결]]되거나 삽입되어 있습니다.",
+       "deleting-backlinks-warning": "'''경고:''' 삭제하려는 문서가 [[Special:WhatLinksHere/{{FULLPAGENAME}}|다른 문서]]에 링크되어 있거나 끼워져 있습니다.",
        "rollback": "편집 되돌리기",
        "rollback_short": "되돌리기",
        "rollbacklink": "되돌리기",
        "tooltip-summary": "짧은 요약을 적어주세요",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* 이 CSS 설정은 모든 스킨에 동일하게 적용됩니다 */",
-       "monobook.css": "/* 이 CSS 설정은 모노북 스킨을 사용하는 사용자에게 적용됩니다 */",
-       "vector.css": "/* 이 CSS 설정은 벡터 스킨을 사용하는 사용자에게 적용됩니다 */",
        "print.css": "/* 이 CSS 설정은 인쇄 출력 화면에 적용됩니다 */",
        "noscript.css": "/* 이 CSS 설정은 자바스크립트를 비활성화한 사용자에 적용됩니다 */",
        "group-autoconfirmed.css": "/* 이 CSS 설정은 자동 인증된 사용자에만 적용됩니다 */",
        "group-sysop.css": "/* 이 CSS 설정은 관리자에만 적용됩니다 */",
        "group-bureaucrat.css": "/* 이 CSS 설정은 사무관에만 적용됩니다 */",
        "common.js": "/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */",
-       "monobook.js": "/* 이 자바스크립트 설정은 모노북 스킨을 사용하는 사용자에게 적용됩니다 */",
-       "vector.js": "/* 이 자바스크립트 설정은 벡터 스킨을 사용하는 사용자에게 적용됩니다 */",
        "group-autoconfirmed.js": "/* 이 자바스크립트 설정은 자동 인증된 사용자에만 적용됩니다 */",
        "group-bot.js": "/* 이 자바스크립트 설정은 봇에만 적용됩니다 */",
        "group-sysop.js": "/* 이 자바스크립트 설정은 관리자에만 적용됩니다 */",
        "pageinfo-category-pages": "문서 수",
        "pageinfo-category-subcats": "하위 분류 수",
        "pageinfo-category-files": "파일 수",
-       "skinname-monobook": "모노북",
-       "skinname-vector": "벡터",
        "markaspatrolleddiff": "검토한 문서로 표시",
        "markaspatrolledtext": "이 문서를 검토한 것으로 표시",
        "markedaspatrolled": "검토한 문서로 표시",
        "duplicate-defaultsort": "'''경고:''' 기본 정렬 키 \"$2\"가 이전의 기본 정렬 키 \"$1\"를 덮어쓰고 있습니다.",
        "version": "버전",
        "version-extensions": "설치된 확장 기능",
+       "version-skins": "설치된 스킨",
        "version-specialpages": "특수 문서",
        "version-parserhooks": "파서 훅",
        "version-variables": "변수",
        "version-antispam": "스팸 막기",
-       "version-skins": "스킨",
        "version-other": "기타",
        "version-mediahandlers": "미디어 핸들러",
        "version-hooks": "훅",
        "version-parser-function-hooks": "파서 함수 훅",
        "version-hook-name": "훅 이름",
        "version-hook-subscribedby": "훅이 사용된 위치",
-       "version-version": "(버전 $1)",
+       "version-version": "($1)",
+       "version-no-ext-name": "[이름 없음]",
        "version-license": "미디어위키 라이선스",
        "version-ext-license": "라이선스",
        "version-ext-colheader-name": "확장 기능",
+       "version-skin-colheader-name": "스킨",
        "version-ext-colheader-version": "버전",
        "version-ext-colheader-license": "라이선스",
        "version-ext-colheader-description": "설명",
        "version-ext-colheader-credits": "저자",
        "version-license-title": "$1용 라이센스",
-       "version-license-not-found": "이 확장기능에 대한 라이선스 세부 정보가 없습니다.",
+       "version-license-not-found": "이 확장 기능에 대한 자세한 라이선스 정보가 없습니다.",
        "version-credits-title": "$1의 작성자",
-       "version-credits-not-found": "이 확장기능에 대한 크레딧 세부 정보가 없습니다.",
+       "version-credits-not-found": "이 확장 기능에 대한 자세한 제작진 정보가 없습니다.",
        "version-poweredby-credits": "이 위키는 '''[https://www.mediawiki.org/ MediaWiki]'''(미디어위키)를 기반으로 작동합니다. Copyright © 2001-$1 $2.",
        "version-poweredby-others": "그 외 다른 개발자",
        "version-poweredby-translators": "translatewiki.net 번역자",
index 7ecbb05..fdd1d4e 100644 (file)
        "qbmyoptions": "Бетлерим",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Джангы тема къош",
-       "vector-action-delete": "Кетер",
-       "vector-action-move": "Атын ауушдур",
-       "vector-action-protect": "Джакъла",
-       "vector-action-undelete": "Къайтар",
-       "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": "Навигация меню",
        "titleprotectedwarning": "'''Эсгертиу: Бу бет джакъланыбды. Джангыз [[Special:ListGroupRights|энчи хакълары]] болгъанла текстни салыргъа боллукъдула.'''\nТюбюнде, билги ючюн журналдан ахыр джазыу берилгенди:",
        "templatesused": "Бу бетде хайырланылгъан {{PLURAL:$1|шаблон|шаблонла}}:",
        "templatesusedpreview": "Ал къаралыучу бетде хайырланнган {{PLURAL:$1|1=шаблон|шаблонла}}:",
-       "templatesusedsection": "Бу бетде хайырланнган {{PLURAL:$1|1=шаблон|шаблонла}}:",
+       "templatesusedsection": "Бу бёлюмде хайырланылгъан {{PLURAL:$1|шаблон|шаблонла}}:",
        "template-protected": "(джакъланнган)",
        "template-semiprotected": "(джарты джакъланыбды)",
        "hiddencategories": "Бу бет $1 {{PLURAL:$1|1 джашырылгъан категориягъа|$1 джашырылгъан категориягъа}} киреди:",
        "nocreate-loggedin": "Джангы бетле къураргъа эркинлигигиз джокъду.",
        "sectioneditnotsupported-title": "Бёлюмлени тюрлендирир мадар джокъду.",
        "sectioneditnotsupported-text": "Бу бетде бёлюмлени тюрлендирирге болмайды.",
-       "permissionserrors": "Эркинликлени халатлары",
-       "permissionserrorstext": "Ð\91Ñ\8bлайдагÑ\8aÑ\8b {{PLURAL:$1|1=Ñ\87Ñ\83Ñ\80Ñ\83м|Ñ\87Ñ\83Ñ\80Ñ\83мла}} Ñ\8eÑ\87Ñ\8eн, Ð±Ñ\83нÑ\83 Ñ\8dÑ\82еÑ\80ге Ñ\85акÑ\8aÑ\8bгÑ\8aÑ\8bз Ð´Ð¶Ð¾ÐºÑ\8aдÑ\83:",
+       "permissionserrors": "Эркинликлени халаты",
+       "permissionserrorstext": "Ð\91Ñ\83 Ð¾Ð¿ÐµÑ\80аÑ\86иÑ\8fнÑ\8b Ñ\8dÑ\82еÑ\80ге Ñ\8dÑ\80кинлигигиз Ð´Ð¶Ð¾ÐºÑ\8aдÑ\83, Ð±Ñ\8bлайдагÑ\8aÑ\8b {{PLURAL:$1|1=Ñ\87Ñ\83Ñ\80Ñ\83м|Ñ\87Ñ\83Ñ\80Ñ\83мла}} Ñ\8eÑ\87Ñ\8eн:",
        "permissionserrorstext-withaction": "«'''$2'''» этерге амалыгъыз джокъду. {{PLURAL:$1|1=Чуруму|Чурумлары}}:",
        "recreate-moveddeleted-warn": "'''Эс бёлюгюз! Сиз алгъын кетерилген бетни джангыдан къураргъа излейсиз'''\n\nБетни джангыдан къураргъа кереклигине сагъыш этигиз.\nБетни кетериу бла атын тюрлендирилиуню журналы тюбюнде кёргюзюлгенди.",
        "moveddeleted-notice": "Бу бет кетерилгенди.\nХапарлашдырыу ючюн тюбюрек кетериуле бла ат тюрлендириулени журналы берилгенди.",
        "searchrelated": "бейламлы",
        "searchall": "бютеу",
        "showingresults": "Тюбюрек №&nbsp;<strong>$2</strong> башлаб <strong>$1</strong> {{PLURAL:$1|1=эсеб|эсебле}} {{PLURAL:$1|1=кёргюзюлгенди|кёргюзюлгендиле}}.",
-       "showingresultsnum": "Тюбюрек №&nbsp;<strong>$2</strong> башлаб <strong>$3</strong> {{PLURAL:$3|1=эсеб|эсебле}} {{PLURAL:$3|1=кёргюзюлгенди|кёргюзюлгендиле}}.",
        "showingresultsheader": "'''$4''' ючюн {{PLURAL:$5|1='''$3''' эсебден '''$1'''|'''$1 — $2''' арасы '''$3''' эсеб}}",
        "search-nonefound": "Соруу бла келишген эсеб джокъду",
        "powersearch-legend": "Кенг излеу",
        "pageinfo-category-pages": "Бетлени саны",
        "pageinfo-category-subcats": "Тюбкатегорияланы саны",
        "pageinfo-category-files": "Файлланы саны",
-       "skinname-monobook": "Моно-китаб",
-       "skinname-vector": "Вектор",
        "markaspatrolleddiff": "Контроль этилгенин белгиле",
        "markaspatrolledtext": "Сыналгъан статья кибик белгиле",
        "markedaspatrolled": "Сыналгъан кибик белгиленнгенди",
        "duplicate-defaultsort": "'''Эсгериу:''' Бар саналгъан \"$2\" сыныфлама ачхыч, аллындагъы \"$1\" сыныфлама ачхычны джараусуз этеди.",
        "version": "Версия",
        "version-extensions": "Салыннган кенгертиуле",
+       "version-skins": "Джасауну темалары",
        "version-specialpages": "Къуллукъ бетле",
        "version-parserhooks": "Синтаксис анализаторну тутуучула",
        "version-variables": "Тюрленнгенле",
        "version-antispam": "Антиспам",
-       "version-skins": "Джасауну темалары",
        "version-other": "Башха",
        "version-mediahandlers": "Медияны джарашдырыучула",
        "version-hooks": "Тутуучула",
index dba8e84..aba2a76 100644 (file)
        "qbmyoptions": "Ming Sigge",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Ne neue Afschnet onge draan!",
-       "vector-action-delete": "Fottschmiiße!",
-       "vector-action-move": "Ömnänne!",
-       "vector-action-protect": "Schöze!",
-       "vector-action-undelete": "Zerökholle!",
-       "vector-action-unprotect": "Schoz ändere!",
-       "vector-view-create": "Neu Schriive!",
-       "vector-view-edit": "Ändere!",
-       "vector-view-history": "Versione zeije!",
-       "vector-view-view": "Lesse!",
-       "vector-view-viewsource": "Wikitex aanlooere!",
        "actions": "Akßjuhne",
        "namespaces": "Appachtemangs",
        "variants": "Variante",
        "searchall": "all",
        "showingresults": "Onge {{PLURAL:$1|weed <strong>eine</strong>|wääde bes <strong>$1</strong>|weed <strong>keine</strong>}} vun de jefonge Endrähsch jezeisch, vun de Nommer <strong>$2</strong> av.",
        "showingresultsinrange": "{{PLURAL:$1|<strong>Ein</strong> Saachjropp|<strong>$1</strong> Saachjroppe|Kein Saachjropp}}, vun Nommer <strong>$2</strong> bes Nommer <strong>$3</strong> {{PLURAL:$1|weed|wääde|weed}} heh opjeleß.",
-       "showingresultsnum": "Onge {{PLURAL:$3|es ein|sin <strong>$3</strong>|sin <strong>kein</strong>}} vun de jefonge Endrähsch opjeleß, vun de Nommer <strong>$2</strong> av.",
        "showingresultsheader": "Jefonge un aanjezeisch: {{PLURAL:$5|'''$1''' vun '''$3'''|'''$1''' beß '''$2''' vun '''$3'''|nix}} för '''$4'''",
        "search-nonefound": "Mer han nix zopaß jefonge för Ding Aanfrohch.",
        "powersearch-legend": "Extra Söhke",
        "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 */",
-       "monobook.css": "/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Monobooch“ */",
-       "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-autoconfirmed.css": "/* Dat CSS heh aan dä Stell krijje nur de automattesch beshtääteshte Metmacher 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 */",
-       "monobook.js": "/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch \"Monnobooch\" 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 */",
        "group-sysop.js": "/* De JavaSkreppte fun hee krijje bloß de Wiki_Köbeße jescheck */",
        "pageinfo-category-pages": "De Aanzahl Sigge",
        "pageinfo-category-subcats": "De Aanzahl Ongerjroppe",
        "pageinfo-category-files": "De Aanzahl Dateie",
-       "skinname-monobook": "MonoBoch",
-       "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Nohjeluurt. Dun dat fasshallde.",
        "markaspatrolledtext": "De Änderung es nohjeluert, dun dat fasshallde",
        "markedaspatrolled": "Et Kennzeiche „Nohjeluurt“ speichere",
index 689a9ad..f4ecf82 100644 (file)
        "qbmyoptions": "Rûpelên min",
        "faq": "PGP",
        "faqpage": "Project:PGP",
-       "vector-action-addsection": "Mijarekê lê zêde bike",
-       "vector-action-delete": "Jê bibe",
-       "vector-action-move": "Nav biguherîne",
-       "vector-action-protect": "Biparêze",
-       "vector-action-undelete": "Jê nebe",
-       "vector-action-unprotect": "Parastinê rake",
-       "vector-view-create": "Çêke",
-       "vector-view-edit": "Biguherîne",
-       "vector-view-history": "Dîrokê bibîne",
-       "vector-view-view": "Bixwîne",
-       "vector-view-viewsource": "Çavkaniyan bibîne",
        "actions": "Çalakî",
        "namespaces": "Valahiya nav",
        "variants": "Variyant",
        "searchrelated": "pêwendîdar",
        "searchall": "hemû",
        "showingresults": "{{PLURAL:$1|Encamek|'''$1''' encam}}, bi #'''$2''' dest pê dike.",
-       "showingresultsnum": "{{PLURAL:$3|'''1'''|'''$3'''}} encam, bi #<b>$2</b> dest pê dike.",
        "showingresultsheader": "{{PLURAL:$5|Encam '''$1''' ên '''$3'''|Encam '''$1 - $2''' ên '''$3'''}} ji bo '''$4'''",
        "search-nonefound": "Ti rûpelên wek ya daxwazkirî nînin.",
        "powersearch-legend": "Lê bigere",
        "tooltip-compareselectedversions": "Cudatiyên guhertoyên hilbijartî yên vê rûpelê bibîne.",
        "tooltip-watch": "Vê rûpelê têke nav lîsteya te ya şopandinê",
        "tooltip-upload": "Barkirinê destpêke",
-       "monobook.css": "/* CSS placed here will affect users of the Monobook skin */",
        "common.js": "/* Any JavaScript here will be loaded for all users on every page load. */",
        "anonymous": "Bikarhênera/ê nediyarkirî ya/yê {{SITENAME}}",
        "siteuser": "Bikarhênera $1 ê {{SITENAME}}",
index bbaef68..5461859 100644 (file)
        "qbpageoptions": "An folen-ma",
        "qbmyoptions": "Ow folennow",
        "faq": "FAQ",
-       "vector-action-addsection": "Keworra testen",
-       "vector-action-delete": "Dilea",
-       "vector-action-move": "Gwaya",
-       "vector-action-protect": "Difres",
-       "vector-action-undelete": "Disdhilea",
-       "vector-action-unprotect": "Chanjya difresans",
-       "vector-view-create": "Gwruthyl",
-       "vector-view-edit": "Chanjya",
-       "vector-view-history": "Gweles an istori",
-       "vector-view-view": "Redya",
-       "vector-view-viewsource": "Gweles an bennfenten",
        "actions": "Gwriansow",
        "namespaces": "Spasys hanow",
        "variants": "Variennow",
        "searchmenu-exists": "''Yma folen henwys \"[[:$1]]\" war an wiki-ma'''",
        "searchmenu-new": "'''Gwruthyl an folen \"[[:$1]]\" war an wiki-ma!'''",
        "searchprofile-articles": "Folennow dalgh",
-       "searchprofile-project": "Folennow gweres ha ragdres",
        "searchprofile-images": "Liesmedia",
        "searchprofile-everything": "Puptra",
        "searchprofile-advanced": "Avonsys",
        "searchprofile-articles-tooltip": "Hwilas yn $1",
-       "searchprofile-project-tooltip": "Hwilas yn $1",
        "searchprofile-images-tooltip": "Hwilas restrennow",
        "searchprofile-everything-tooltip": "Hwilas pub le (yn folennow keskows ynwedh)",
        "searchprofile-advanced-tooltip": "Hwilas yn spasys hanow personelhes",
        "search-interwiki-default": "$1 sewyansow:",
        "search-interwiki-more": "(moy)",
        "search-relatedarticle": "Kelmys",
-       "searcheverything-enable": "Hwilas yn pub spas-hanow",
        "searchrelated": "kelmys",
        "searchall": "oll",
        "showingresultsheader": "{{PLURAL:$5|Sewyans '''$1''' a '''$3'''|Sewyansow '''$1 - $2''' a '''$3'''}} rag '''$4'''",
        "prefs-emailconfirm-label": "Afydhyans an ebost:",
        "youremail": "Ebost:",
        "username": "{{GENDER:$1|Hanow devnydhyer}}:",
-       "uid": "{{GENDER:$1|ID an devnydhyer}}:",
        "prefs-memberingroups": "{{GENDER:$2|Esel}} a'n {{PLURAL:$1|bagas|bagasow}}:",
        "prefs-registration": "Termyn kovskrifa:",
        "yourrealname": "Hanow gwir:",
        "log": "Kovnotennow",
        "logempty": "Nyns eus tra vyth owth omdhesedha y'n govnoten.",
        "allpages": "Keniver folen",
-       "alphaindexline": "$1 dhe $2",
        "prevpage": "Folen gyns ($1)",
        "allpagesfrom": "Diskwedhes folennow yn unn dhalleth orth:",
        "allpagesto": "Diskwedhes folennow yn unn dhiwedha orth:",
        "whatlinkshere-hideimages": "$1 kevrennow restren",
        "whatlinkshere-filters": "Sidhlow",
        "blockip": "Lettya devnydhyer",
-       "ipadressorusername": "Trigva IP po hanow-usyer:",
+       "ipaddressorusername": "Trigva IP po hanow-usyer:",
        "ipbreason": "Acheson:",
        "ipboptions": "2 our:2 hours,1 jydh:1 day,3 dydh:3 days,1 seythen:1 week,2 seythen:2 weeks,1 vis:1 month,3 mis:3 months,6 mis:6 months,1 vledhen:1 year,heb diwedh:infinite",
        "ipb-blocklist-contribs": "Kevrohow rag $1",
index d0a703d..a64f675 100644 (file)
        "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": "Ички категориялар",
        "newwindow": "(жаңы терезеде ачылат)",
        "cancel": "Жокко чыгаруу",
        "moredotdotdot": "Көбүрөөк...",
-       "morenotlisted": "Бөлөк эч нерсе жок...",
+       "morenotlisted": "Бул тизме толук эмес.",
        "mypage": "Барак",
        "mytalk": "Талкуу",
        "anontalk": "Бул IP-дарек үчүн талкуулоо",
        "qbmyoptions": "Барактарым",
        "faq": "КБС",
        "faqpage": "Project:КБС",
-       "vector-action-addsection": "Тема кошуу",
-       "vector-action-delete": "Өчүрүү",
-       "vector-action-move": "Аталышын өзгөртүү",
-       "vector-action-protect": "Коргоо",
-       "vector-action-undelete": "Калыбына келтирүү",
-       "vector-action-unprotect": "Коргоону өзгөртүү",
-       "vector-view-create": "Түзүү",
-       "vector-view-edit": "Оңдоо",
-       "vector-view-history": "Тарыхын кароо",
-       "vector-view-view": "Окуу",
-       "vector-view-viewsource": "Кайнарын кароо",
        "actions": "Аракеттер",
        "namespaces": "Аталыштар мейкиндиги",
        "variants": "Варианттар",
        "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": "Белгисиз ката",
        "thisisdeleted": "$1 көрүү же калыбына келтирүү?",
        "viewdeleted": "Көрүү $1?",
        "restorelink": "{{PLURAL:$1|$1 өчүрүлгөн оңдоо}}",
+       "feedlinks": "Дубал:",
        "feed-unavailable": "Синдикация лентасы жеткиликтүү эмес",
        "site-rss-feed": "$1 RSS тилкеси",
        "site-atom-feed": "$1 Atom агымы",
        "nosuchspecialpage": "Мындай кызматтык барак жок",
        "error": "Ката",
        "databaseerror": "Маалымат базасынын катасы",
+       "databaseerror-query": "Талап: $1",
+       "databaseerror-function": "Функция: $1",
+       "databaseerror-error": "Ката: $1",
        "laggedslavemode": "'''Эскертүү:''' баракта акыркы жаңыртуулар жок болуп калышы мүмкүн.",
        "readonly": "Маалымат базасы бөгөттөлгөн",
        "enterlockreason": "Бөгөттөөнүн себебин жана мөөнөтүн көрсөтүңүз",
        "ns-specialprotected": "Кызматык барактарды оңдоого мүмкүн эмес.",
        "invalidtitle-unknownnamespace": "Туура эмес баш сөз",
        "exception-nologin": "Сиз системге кирген жоксуз",
-       "exception-nologin-text": "Ð\91Ñ\83л Ð±Ð°Ñ\80ак Ð¶Ðµ Ð°Ñ\80акеÑ\82 Ñ\81издин ÐºÐ¾Ð»Ð´Ð¾Ð½Ñ\83Ñ\83Ñ\87Ñ\83 Ð°Ñ\82Ñ\8bÒ£Ñ\8bз Ð¼ÐµÐ½ÐµÐ½ Ñ\81иÑ\81Ñ\82емге ÐºÐ¸Ñ\80иÑ\88иңизди Ñ\82алап ÐºÑ\8bлаÑ\82.",
+       "exception-nologin-text": "СÑ\83Ñ\80анÑ\8bÑ\87 Ð±Ñ\83л Ð±Ð°Ñ\80акка Ð¶Ðµ Ð°Ñ\80акеÑ\82Ñ\82и Ð°Ñ\82каÑ\80Ñ\83Ñ\83 Ò¯Ñ\87үн[[Special:Userlogin|киÑ\80Ñ\88иңиз]]кеÑ\80ек.",
        "virus-badscanner": "Ырастоо катасы. Белгисиз вирус сканери: ''$1''",
        "virus-scanfailed": "скандоо катасы (код $1)",
        "virus-unknownscanner": "белгисиз антивирус:",
        "gotaccountlink": "Кирүү",
        "userlogin-resetlink": "Кирүүчү маалыматарыңызды эсиңизден чыгардыңызбы?",
        "userlogin-resetpassword-link": "Сырсөздү алмаштыруу",
+       "userlogin-loggedin": "Сиз эчак эле {{GENDER:$1|$1}} деп киргенсиз.\nБашка колдонуучунун атынан кириш үчүн асытдагы форманы колдонуңуз.",
        "createacct-emailrequired": "Эмейл дарек",
        "createacct-emailoptional": "Эмейл дарек (милдеттүү эмес)",
        "createacct-email-ph": "Эмейл дарегиңизди киргизиңиз",
        "login-throttled": "Сиз системге кирүүгө өтө көп аракет кылдыңыз. Сураныч, аракетиңизди бир аз тыныгуудан соң улантыңыз.",
        "login-abort-generic": "Сиздин кирүүңүз ийгиликсиз болду - Үзүлдү",
        "loginlanguagelabel": "Тили: $1",
+       "suspicious-userlogout": "Сиздин чыгуу талабыңыз сиздин браузериңиздин туура эмес аткарылышынан же прокси кеширлөөсүнөн улам аткарылган жок.",
+       "pt-login": "Кирүү",
+       "pt-userlogout": "Чыгуу",
        "php-mail-error-unknown": "PHP'нин mail() функциясындагы белгисиз ката.",
        "changepassword": "Сырсөздү өзгөртүү",
        "resetpass_header": "Эсеп жазуунун сырсөзүн өзгөртүү",
        "resetpass-submit-loggedin": "Сырсөздү өзгөртүү",
        "resetpass-submit-cancel": "Жокко чыгаруу",
        "resetpass-temp-password": "Убактылуу сырсөз:",
+       "resetpass-expired": "Сиздин сырсөзүңүз эскирген. Сураныч жаңы сырсөзүңүз менен кириңиз.",
        "passwordreset": "Сырсөздү түшүрүү",
        "passwordreset-text-one": "Сырсөздү алмаштыруу үчүн бул үлгүнү толтуруңуз.",
        "passwordreset-legend": "Сырсөздү түшүрүү",
        "moveddeleted-notice": "Бул барак өчүрүлгөн.\nМаалымат үчүн төмөндө өчүрүүлөрдүн жана өзгөртүүлөрдүн тизмеси берилген.",
        "log-fulllog": "Журналды бүтүн бойдон көрүү",
        "edit-conflict": "Оңдоолор конфликти",
-       "postedit-confirmation": "Оңдооңуз сакталды",
+       "postedit-confirmation-saved": "Оңдооңуз сакталды",
        "edit-already-exists": "Жаңы барак түзүү мүмкүн эмес. Мындай барак бар",
        "defaultmessagetext": "Жарыяланбасча текст",
        "content-model-wikitext": "уики-текст",
        "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": "'''$4''' үчүн {{PLURAL:$5|'''$3''' жыйынтыктан '''$1'''-и|'''$1 - $2''' -дан '''$3''' жыйынтык}}",
        "prefs-emailconfirm-label": "Эл. почтаны аныктоо:",
        "youremail": "Электрондук дарек:",
        "username": "{{GENDER:$1|Колдонуучу аты}}:",
-       "uid": "{{GENDER:$1|Колдонуучунун}} коду:",
        "prefs-memberingroups": "{{GENDER:$2|Мүчөсү}} болгон {{PLURAL:$1|топ|топтор}}:",
        "prefs-registration": "Катталуу убактысы:",
        "yourrealname": "Өз ысымыңыз:",
        "yournick": "Жаңы кол тамгаңыз:",
        "badsig": "Туура эмес кол тамга.\nHTML-тегдеринин тууралыгын текшериңиз.",
        "yourgender": "Жыныс:",
+       "gender-unknown": "Айткым келген жок",
        "gender-male": "Эркек",
        "gender-female": "Аялзат",
        "email": "Электрондук дарек",
        "upload": "Файлды жүктөө",
        "uploadbtn": "Файлды жүктөө",
        "uploaderror": "Жүктөө катасы",
-       "uploadtext": "Cүрөт жүктөш үчүн астыдагы форманы колдонуңуз.\nМурда жүктөлгөн сүрөттөрдү издеп көрүш үчүн  [[Special:FileList|жүктөлгөн сүрөттөрдүн тизмеси]]не кириңиз, кайра жүктөлгөндөр да [[Special:Log/upload|жүктөлгөндөр тизмеси]] журналында жазылышат, өчүрүлгөндөр да [[Special:Log/delete|өчүрүлгөндөр тизмеси]] журналында сакталат.\n\nTo include a file in a page, use a link in one of the following forms:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' to use the full version of the file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' to use a 200 pixel wide rendition in a box in the left margin with 'alt text' as description\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' for directly linking to the file without displaying the file",
+       "uploadtext": "'''Cүрөт жүктөш үчүн астыдагы форманы колдонуңуз'''.\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|alt text]]</nowiki></code>''' туурасы 200 пикселдик кеңдиктеги үкөкчөдө сол талаада , \"алтетрнативдик текст\" менен чогуу жайгаштырганга \n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' файлдын өзү көрсөтүлбөгөн, түз шилтеме",
        "upload-permitted": "Уруксат болгон файл типтери: $1.",
        "uploadlogpage": "Жүктөөлөр журналы",
        "filename": "Файл аталышы",
        "upload-maxfilesize": "Максималдуу файл өлчөмү: $1",
        "upload-description": "Файл баяндамасы",
        "upload-options": "Жүктөө варианты",
+       "watchthisupload": "Бул файлды көзөмөлгө алуу",
        "upload-success-subj": "Ийгиликтүү жүктөлдү",
        "upload-failure-subj": "Жүктөө көйгөйү",
        "upload-proto-error": "Туура эмес протокол",
        "http-invalid-url": "Туура эмес URL: $1",
        "license": "Лицензиялоо:",
        "license-header": "Лицензиялоо",
+       "nolicense": "Тандалган жок",
+       "upload_source_file": "сиздин компьютердеги файл өлчөмү",
        "imgfile": "файл",
        "listfiles": "Файлдар тизмеси",
        "listfiles_thumb": "Миниатюра",
        "speciallogtitlelabel": "Максаты (аталышы же колдонуучу):",
        "log": "Журналдар",
        "allpages": "Бардык барактар",
-       "alphaindexline": "$1 -дан $2 чейин",
        "nextpage": "Кийинки барак ($1)",
        "prevpage": "Мурунку барак ($1)",
        "allpagesfrom": "-дан башталган барактарды көрсөтүү:",
        "block": "Колдонуучуну бөгөттөө",
        "blockip": "Колдонуучуну бөгөттөө",
        "blockip-legend": "Колдонуучуну бөгөттөө",
-       "ipadressorusername": "IP-дарек же колдонуучунун аты:",
+       "ipaddressorusername": "IP-дарек же колдонуучунун аты:",
        "ipbreason": "Себеп:",
        "ipbsubmit": "Бул колдонуучуну бөгөттөө",
        "ipbother": "Башка убакыт:",
        "newimages": "Жаңы файлдардын галереясы",
        "newimages-legend": "Чыпка",
        "newimages-label": "Файл аты (же анын жартысы):",
-       "showhidebots": "($1 боттор)",
        "noimages": "Көрүүгө эчтеке жок.",
        "ilsubmit": "Издөө",
        "bydate": "дата боюнча",
        "duplicate-defaultsort": "'''Эскертүү:''' \"$2\" белгиленген ылгоочу ачкыч \"$1\" мурунку белгиленген ылгоочу ачкычты жокко чыгарат.",
        "version": "Версия",
        "version-extensions": "Орнотулган кеңейтүүлөр",
+       "version-skins": "Темалар",
        "version-specialpages": "Кызматтык барактар",
        "version-variables": "Өзгөрмөлөр",
-       "version-skins": "Темалар",
        "version-other": "Башка",
        "version-version": "(Версия $1)",
        "version-license": "Лицензия",
index 019ed05..14f9fa3 100644 (file)
        "qbmyoptions": "Paginae meae",
        "faq": "Quaestiones frequentes",
        "faqpage": "Project:Quaestiones frequentes",
-       "vector-action-addsection": "Partem novam addere",
-       "vector-action-delete": "Delere",
-       "vector-action-move": "Movere",
-       "vector-action-protect": "Protegere",
-       "vector-action-undelete": "Restituere",
-       "vector-action-unprotect": "Protectionem mutare",
-       "vector-view-create": "Creare",
-       "vector-view-edit": "Recensere",
-       "vector-view-history": "Historiam inspicere",
-       "vector-view-view": "Legere",
-       "vector-view-viewsource": "Fontem inspicere",
        "actions": "Actiones",
-       "vector-more-actions": "Plus",
        "namespaces": "Spatia nominalia",
        "variants": "Variantes",
        "errorpagetitle": "Erratum",
        "searchrelated": "relata",
        "searchall": "omnia",
        "showingresults": "Subter monstrans {{PLURAL:$1|'''1''' eventu|'''$1''' eventibus}} tenus incipiens ab #'''$2'''.",
-       "showingresultsnum": "Subter monstrans {{PLURAL:$3|'''1''' eventum|'''$3''' eventus}} incipiens ab #'''$2'''.",
        "search-nonefound": "Nullae paginae quaesitionem tuam adaequant.",
        "powersearch-legend": "Quaerere callidissime",
        "powersearch-ns": "Quaerere in spatiis nominalibus:",
        "right-edit": "Paginas recensere",
        "right-createpage": "Paginas creare (sine paginis disputationis)",
        "right-createtalk": "Paginas disputationis creare",
-       "right-createaccount": "Rationes usoris novas creare",
+       "right-createaccount": "Rationes usorum novas creare",
        "right-minoredit": "Recensiones minores designare",
        "right-move": "Paginas movere",
        "right-move-subpages": "Paginas una cum subpaginis movere",
index 10396bb..c1e5ee6 100644 (file)
        "qbmyoptions": "Mis hojas",
        "faq": "DDS",
        "faqpage": "Project:DDS",
-       "vector-action-addsection": "Ajustar sujeto",
-       "vector-action-delete": "Efassar",
-       "vector-action-move": "Taşirear",
-       "vector-action-protect": "Guadrar",
-       "vector-action-undelete": "Traer atrás",
-       "vector-action-unprotect": "Trocar proteksyon",
-       "vector-view-create": "Criar",
-       "vector-view-edit": "Trocar",
-       "vector-view-history": "Ver la istoria",
-       "vector-view-view": "Meldar",
-       "vector-view-viewsource": "Ver su manadero",
        "actions": "Aksiones",
        "namespaces": "Espacios de nombres",
        "variants": "Variantes",
        "searchmenu-exists": "Egziste una oja yamada \"[[:$1]]\" en esta viki",
        "searchmenu-new": "<strong>Criar la hoja «[[:$1]]» en este viki!</strong>{{PLURAL:$2|0=|También ver la hoja topada con tu búxquida.|También ver las resultas de tu búxquida.}}",
        "searchprofile-articles": "Hojas de contènido",
-       "searchprofile-project": "Hojas de ayudo y hojas de projeto",
        "searchprofile-images": "Multimedya",
        "searchprofile-everything": "Todo",
        "searchprofile-advanced": "Adelantado",
        "searchprofile-articles-tooltip": "Buxcar en $1",
-       "searchprofile-project-tooltip": "Buxcar en $1",
        "searchprofile-images-tooltip": "Buxcar dosyas",
        "searchprofile-everything-tooltip": "Buxca en todo el contènido (y mismo en las hojas de diskusyón)",
        "searchprofile-advanced-tooltip": "Buxcar en espacios de nombres partikolares",
        "booksources-go": "Ir",
        "log": "Rejistros",
        "allpages": "Todas las hojas",
-       "alphaindexline": "De $1 fina $2",
        "nextpage": "La sigiente pajina ($1)",
        "prevpage": "Hoja de antés ($1)",
        "allpagesfrom": "Mostrar hojas que empecen por:",
        "whatlinkshere-hideimages": "$1 atamientos a dosyas",
        "whatlinkshere-filters": "Filtres",
        "blockip": "Bloquear usuario",
-       "ipadressorusername": "Adreso de IP o nombre de usuario:",
+       "ipaddressorusername": "Adreso de IP o nombre de usuario:",
        "ipbreason": "Razon:",
        "ipboptions": "2 oras:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,parâ siempre:infinite",
        "badipaddress": "Adreso de IP invalido",
        "file-nohires": "No disponible a mayor resolución.",
        "svg-long-desc": "arxivo SVG, nominalmente $1 × $2 píkseles, boy del arxivo: $3",
        "show-big-image": "Dosya orijinal",
-       "showhidebots": "($1 bots)",
        "ilsubmit": "Bushkar",
        "bydate": "por data",
        "seconds": "{{PLURAL:$1|$1 segundo|$1 segundos}}",
index bb14bcb..0eced07 100644 (file)
        "qbmyoptions": "Meng Säiten",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Sujet derbäisetzen",
-       "vector-action-delete": "Läschen",
-       "vector-action-move": "Réckelen",
-       "vector-action-protect": "Spären",
-       "vector-action-undelete": "Restauréieren",
-       "vector-action-unprotect": "Spär änneren",
-       "vector-view-create": "Uleeën",
-       "vector-view-edit": "Änneren",
-       "vector-view-history": "Versioune weisen",
-       "vector-view-view": "Liesen",
-       "vector-view-viewsource": "Quellcode weisen",
        "actions": "Aktiounen",
-       "vector-more-actions": "Méi",
        "namespaces": "Nummraim",
        "variants": "Varianten",
        "navigation-heading": "Navigatiounsmenü",
        "searchrelated": "a Verbindng",
        "searchall": "all",
        "showingresults": "Hei gesitt der  {{PLURAL:$1| '''1''' Resultat|'''$1''' Resultater}}, ugefaange mat #'''$2'''.",
-       "showingresultsnum": "Hei gesitt der  {{PLURAL:$3|'''1''' Resultat|'''$3''' Resultater}}, ugefaange mat #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' vu(n) '''$3'''|Resultater '''$1 - $2''' vu(n) '''$3'''}} fir '''$4'''",
        "search-nonefound": "Fir Är Ufro gouf näischt fonnt.",
        "powersearch-legend": "Erweidert Sich",
        "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> 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-extension": "E Fichier mat engem ähnlechen Numm gëtt et schonn: [[$2|thumb]]\n* Numm vum Fichier fir eropzelueden: <strong>[[:$1]]</strong>\n* Numm vum Fichier deen et scho gëtt: <strong>[[:$2]]</strong>\nWëllt Dir eventuell méi en expliziten Numm benotzen?",
        "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.",
        "file-thumbnail-no": "Den Numm vum Fichier fänkt mat <strong>$1</strong> un.\nDa deit drop hin datt et eng Minitaur ''(thumbnail)'' ass.\nWann Dir dat Bild a méi enger grousser Opléisung hutt, da luet dëst erop, wann net dann ännert w.e.g. den Numm vum Fichier.",
        "fileexists-forbidden": "Et gëtt schonn e Fichier mat dësem Numm an dee kann net iwwerschriwwe ginn.\nWann Dir de Fichier nach ëmmer eropluede wëllt, da gitt w.e.g. zréck a benotzt en neien Numm. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Läschen a Restauréiere vu Fichieren temporär ausgeschalt wéinst Maintenance.",
        "filedelete-maintenance-title": "De Fichier kann net geläscht ginn",
        "mimesearch": "No MIME-Zort sichen",
-       "mimesearch-summary": "Op dëser Spezialsäit kënnen d'Fichieren no hirem MIME-Typ gefiltert ginn.\nDir musst ëmmer de Medien- a Subtyp aginn: z. Bsp. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Op dëser Spezialsäit kënnen d'Fichieren no hirem MIME-Typ gefiltert ginn.\nDir musst de Medien- a Subtyp respektiv den Typ vum Inhalt aginn: z. Bsp. <code>image/jpeg</code>.",
        "mimetype": "MIME-Typ:",
        "download": "eroflueden",
        "unwatchedpages": "Net iwwerwaacht Säiten",
        "tooltip-preferences-save": "Astellunge späicheren",
        "tooltip-summary": "Gitt e kuerze Resumé an",
        "interlanguage-link-title": "$1 - $2",
+       "interlanguage-link-title-nonlang": "$1 - $2",
        "common.css": "/* Dës CSS huet nëmmen Afloss op de Skin ''Chick''  */",
-       "monobook.css": "/* Dës CSS huet nëmmen Afloss op de Skin ''Monobook''  */",
        "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-monobook": "MonoBook",
        "markaspatrolleddiff": "Als nogekuckt markéieren",
        "markaspatrolledtext": "Dës Säit als nogekuckt markéieren",
        "markedaspatrolled": "ass als nogekuckt markéiert",
        "duplicate-defaultsort": "'''Opgepasst:''' Den Zortéierschlëssel \"$2\" iwwerschreift de virege Standard-Zortéierschlëssel \"$1\".",
        "version": "Versioun",
        "version-extensions": "Installéiert Erweiderungen",
+       "version-skins": "Installéiert Skins/Layout",
        "version-specialpages": "Spezialsäiten",
        "version-parserhooks": "Parser-Erweiderungen",
        "version-variables": "Variabelen",
        "version-antispam": "Spam-Preventioun",
-       "version-skins": "Skins/Layout",
        "version-other": "Aner",
        "version-mediahandlers": "Medien-Ënnerstëtzung",
        "version-hooks": "Klameren",
        "version-hook-name": "Numm vun der Klamer",
        "version-hook-subscribedby": "Opruff vum",
        "version-version": "(Versioun $1)",
+       "version-no-ext-name": "[keen Numm]",
        "version-license": "MediaWiki-Lizenz",
        "version-ext-license": "Lizenz",
        "version-ext-colheader-name": "Erweiderung",
+       "version-skin-colheader-name": "Ausgesinn",
        "version-ext-colheader-version": "Versioun",
        "version-ext-colheader-license": "Lizenz",
        "version-ext-colheader-description": "Beschreiwung",
        "expand_templates_remove_nowiki": "<nowiki>-Taggen am Resultat suppriméieren",
        "expand_templates_generate_xml": "Weis d'Struktur vum XML",
        "expand_templates_generate_rawhtml": "HTML-Format weisen",
-       "expand_templates_preview": "Kucken ouni ofzespäicheren"
+       "expand_templates_preview": "Kucken ouni ofzespäicheren",
+       "pagelang-name": "Säit",
+       "pagelang-language": "Sprooch",
+       "pagelang-use-default": "Standard-Sprooch benotzen",
+       "pagelang-select-lang": "Sprooch eraussichen",
+       "right-pagelang": "Sprooch vun der Säit änneren",
+       "action-pagelang": "d'Sprooch vun der Säit änneren"
 }
index a301c5a..3cbf19c 100644 (file)
        "qbmyoptions": "Зи ччинар",
        "faq": "Фад-фад гузвай жузунар (ФГЖ)",
        "faqpage": "Project:ФГС",
-       "vector-action-addsection": "Тема алава авун",
-       "vector-action-delete": "Алудун",
-       "vector-action-move": "ТӀвар эхцигун",
-       "vector-action-protect": "Хуьн",
-       "vector-action-undelete": "ТуькӀуьр хъувун",
-       "vector-action-unprotect": "Хуьн дегишарун",
-       "vector-view-create": "ТуькӀуьрун",
-       "vector-view-edit": "Дуьзарин",
-       "vector-view-history": "Тарихдиз килигун",
-       "vector-view-view": "КӀелун",
-       "vector-view-viewsource": "Чешме къалурун",
        "actions": "Крар",
        "namespaces": "ТӀварарин генгвилер",
        "variants": "Жуьреяр",
index a93b27d..f11f156 100644 (file)
        "log": "Lista de atas",
        "all-logs-page": "Tota catalogos",
        "allpages": "Tota pajes",
-       "alphaindexline": "$1 a $2",
        "nextpage": "Paje seguente ($1)",
        "prevpage": "Paje presedente ($1)",
        "allpagesfrom": "Mostra pajes comensante a:",
index f3911bf..25010fe 100644 (file)
        "qbmyoptions": "Empapula zange",
        "faq": "Ebitera okubuuzibwa",
        "faqpage": "Project:Ebitera okubuuzibwa ku",
-       "vector-action-addsection": "Tandikawo emboozi endala",
-       "vector-action-delete": "Gyawo olupapula luno",
-       "vector-action-move": "Simbuliza",
-       "vector-action-protect": "Ssiba",
-       "vector-action-undelete": "Zawo",
-       "vector-action-unprotect": "Kyusa ebikugizo",
-       "vector-view-create": "Lukolewo",
-       "vector-view-edit": "Kyusa",
-       "vector-view-history": "Ennanda ya fayiro eno",
-       "vector-view-view": "Soma",
-       "vector-view-viewsource": "Kebera obulambike obw'ennono obw'olupapula luno",
        "actions": "By'oyinza okukola",
        "namespaces": "Makuŋaanyizo",
        "errorpagetitle": "Kiremya",
        "editundo": "julula enkyukakyuka",
        "searchresults": "Noonyeza mu bizuulidwa",
        "searchresults-title": "Ebizuulidwa ku \"$1\"",
-       "toomanymatches": "Ebikwataganya by'onoonyezesazza biyitiridde obungi. Ky'onoonyezesa kikyusemu",
        "titlematches": "Empapula ezirina emitwe egyefaananyiriza guno",
        "textmatches": "Empapula eziriko ebigambo by'onoonyezesezza",
        "notextmatches": "Tewali mpapula ziriko bigambo bino",
        "searchmenu-exists": "'''Olupapula \"[[:$1]]\" gyeruli ku wiki eno.'''",
        "searchmenu-new": "'''Oba oyagala, olupapula \"[[:$1]]\" gwe osobola okulukolawo ku wiki eno.'''",
        "searchprofile-articles": "Empapula ez'ensonga",
-       "searchprofile-project": "Empapula eziriko obuyambi n'eza Kawefube",
        "searchprofile-images": "Mediya ey'ekintabuli - Bifaananyi, Vidiyo n'ebiWulirizibwa",
        "searchprofile-everything": "Wonna",
        "searchprofile-articles-tooltip": "Noonyeza mu $1",
-       "searchprofile-project-tooltip": "Noonyeza mu $1",
        "searchprofile-images-tooltip": "Noonya fayiro",
        "search-result-size": "$1 ({{PLURAL:$2|kigambo 1 | bigambo $2}})",
        "search-redirect": "(olupapula '$1' lukuggusiza wano)",
        "specialloguserlabel": "Memba:",
        "log": "Empapula ez'ebyafaayo eby'emirimu egitaligimu",
        "allpages": "Empapula zonna",
-       "alphaindexline": "okuva ku $1 kutuuka ku $2",
        "nextpage": "Dda ku luddirira luno ($1)",
        "prevpage": "Dda ku lukulembera luno ($1)",
        "allpagesfrom": "Laga empapula okuva ku:",
index 743e9cf..255d832 100644 (file)
        "qbmyoptions": "mien opties",
        "faq": "FAQ (väölgesjtèlde vraoge)",
        "faqpage": "Project:Väölgestjèlde vraoge",
-       "vector-action-addsection": "Voog köpke toe",
-       "vector-action-delete": "Ewegsjaffe",
-       "vector-action-move": "Verplaats",
-       "vector-action-protect": "Besjirm",
-       "vector-action-undelete": "Plaats trök",
-       "vector-action-unprotect": "Anger beveiliging",
-       "vector-view-create": "Maak aan",
-       "vector-view-edit": "Bewirk",
-       "vector-view-history": "Bekiek de gesjiedenis",
-       "vector-view-view": "Laes",
-       "vector-view-viewsource": "Bekiek bróntèks",
        "actions": "Hanjeling",
        "namespaces": "Naamruumdes",
        "variants": "Anger vorme",
        "diff-multi-manyusers": "($1 tösseligkende versies door mier es $2 gebroekers waere neet waergaeve)",
        "searchresults": "Zeukresultate",
        "searchresults-title": "Zeukresultate veur \"$1\"",
-       "toomanymatches": "d'r Wore te väöl resultate. Probeer estebleef  'n anger zeukopdrach.",
        "titlematches": "Overeinkoms mèt volgende titels",
        "textmatches": "Euvereinkoms mèt artikelinhoud",
        "notextmatches": "Geen artikel gevonden met opgegeven zoekterm",
        "searchmenu-exists": "* Pagina '''[[$1]]'''",
        "searchmenu-new": "'''De pagina \"[[:$1]]\" aanmake op deze wiki'''",
        "searchprofile-articles": "Inhaudelike pagina's",
-       "searchprofile-project": "Help- en projekpagina's",
        "searchprofile-images": "Bestenj",
        "searchprofile-everything": "Alles",
        "searchprofile-advanced": "Oetgebreid",
        "searchprofile-articles-tooltip": "Zeuke in $1",
-       "searchprofile-project-tooltip": "Zeuke in $1",
        "searchprofile-images-tooltip": "Zeuke naor besjtandje",
        "searchprofile-everything-tooltip": "Alle inhaud doorzeuke (inklusief euverlèkpagina's)",
        "searchprofile-advanced-tooltip": "Zeuke in aongegeve naamruumdes",
        "search-interwiki-default": "$1 resultate:",
        "search-interwiki-more": "(meer)",
        "search-relatedarticle": "Gerelateerd",
-       "searcheverything-enable": "Zeuke in alle naamruumdes",
        "searchrelated": "gerelateerd",
        "searchall": "alle",
        "showingresults": "Hieonger staon de <b>$1</b> {{PLURAL:$1|resultaat|resultaat}}, vanaaf #<b>$2</b>.",
-       "showingresultsnum": "Hieonger {{PLURAL:$3|steit '''1''' resultaat|staon '''$3''' resultate}} vanaaf #<b>$2</b>.",
        "showingresultsheader": "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultate '''$1 - $2''' van '''$3'''}} veur '''$4'''",
        "search-nonefound": "D'r zien gein resultate veur diene zeukopdrach.",
        "powersearch-legend": "Oetgebreid zeuke",
        "allowemail": "E-mail van anger gebroekers toesjtaon",
        "prefs-searchoptions": "Zeukinstellinge",
        "prefs-namespaces": "Naamruimte",
-       "defaultns": "Zeuk anges in dees naomruumdes:",
        "default": "sjtandaard",
        "prefs-files": "Bestenj",
        "prefs-custom-css": "Persoonlijke CSS",
        "prefs-emailconfirm-label": "E-mailbevestiging:",
        "youremail": "Dien e-mailadres",
        "username": "Gebroekersnaam:",
-       "uid": "Gebroekersnómmer:",
        "prefs-memberingroups": "Lid van {{PLURAL:$1|gróp|gróppe}}:",
        "prefs-registration": "Registratiedatum:",
        "yourrealname": "Dienen echte naam*",
        "log-title-wildcard": "Zeuk pagina's die met deze naam beginne",
        "showhideselectedlogentries": "Tuin of verstaek geselecteerdje logbookregels",
        "allpages": "Alle pagina's",
-       "alphaindexline": "$1 nao $2",
        "nextpage": "Volgende pazjena ($1)",
        "prevpage": "Veurige pagina ($1)",
        "allpagesfrom": "Tuin pagina's vanaaf:",
        "pageinfo-watchers": "Aantal volgers",
        "pageinfo-edits": "Aantal bewèrkinge",
        "pageinfo-authors": "Aantal versjillende sjrievers",
-       "skinname-cologneblue": "Keuls blauw",
        "markaspatrolleddiff": "Markeer es gecontroleerd",
        "markaspatrolledtext": "Markeer deze pagina es gecontroleerd",
        "markedaspatrolled": "Gemarkeerd es gecontroleerd",
index 8c1d942..98789dd 100644 (file)
        "qbmyoptions": "E mæ paggine",
        "faq": "Domande frequenti",
        "faqpage": "Project:Domande frequente",
-       "vector-action-addsection": "Azónzi discusción",
-       "vector-action-delete": "Scancella",
-       "vector-action-move": "Mescia",
-       "vector-action-protect": "Protezi",
-       "vector-action-undelete": "Recuppera",
-       "vector-action-unprotect": "Cangia a proteçion",
-       "vector-view-create": "Crea",
-       "vector-view-edit": "Càngia",
-       "vector-view-history": "Fanni védde a Stöia",
-       "vector-view-view": "Lêzi",
-       "vector-view-viewsource": "Veddi a sorgénte",
        "actions": "Açioìn",
        "namespaces": "Namespaces",
        "variants": "Diferense",
        "searchmenu-exists": "'''Inte questa wiki gh'è za 'na pàgina co-o nómme \"[[:$1]]\"'''",
        "searchmenu-new": "Crea a pagina \"[[:$1]]\" insce questo scito",
        "searchprofile-articles": "Pàgina di contegnûi",
-       "searchprofile-project": "Pàgine de agiùtto e relative a-o progetto",
        "searchprofile-images": "Moltimedia",
        "searchprofile-everything": "Tùtto",
        "searchprofile-advanced": "Avansæ",
        "searchprofile-articles-tooltip": "Çerca in $1",
-       "searchprofile-project-tooltip": "Çerca in $1",
        "searchprofile-images-tooltip": "Çerca file",
        "searchprofile-everything-tooltip": "Çerca in ògni dove (anche inte pàgine de discusción)",
        "searchprofile-advanced-tooltip": "Çerca inti namespace personalizæ",
        "all-logs-page": "Tûtti i registri",
        "alllogstext": "Presentaçion unega de tutti i registri do scito {{SITENAME}}.\nTi te peu strinza a vista se ti te çerni un tipo de registro, un nomme de un utente o de pagina.",
        "allpages": "Tûtte e paggine",
-       "alphaindexline": "Da $1 a $2",
        "nextpage": "Proscima paggina ($1)",
        "prevpage": "Paggina preçedente ($1)",
        "allpagesfrom": "Fanni vedde e paggine comensando da:",
index 3f7d6d8..cf83330 100644 (file)
        "qbmyoptions": "I mè paginn",
        "faq": "FAQ",
        "faqpage": "Project:Dumand frequent",
-       "vector-action-addsection": "Giunta argument",
-       "vector-action-delete": "Scancela",
-       "vector-action-move": "Sposta",
-       "vector-action-protect": "Prutegg",
-       "vector-action-undelete": "Recüpera",
-       "vector-action-unprotect": "Càmbia la protesiù",
-       "vector-view-create": "Crea",
-       "vector-view-edit": "Mudifega",
-       "vector-view-history": "Varda la storia",
-       "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ù",
index cf3e7e2..4990cb2 100644 (file)
        "searchrelated": "ກ່ຽວຂ້ອງ",
        "searchall": "ທັງໜົດ",
        "showingresults": "ສະແດງທາງລຸ່ມ ຮອດ {{PLURAL:$1|'''1''' ຜົນ|'''$1''' ຜົນ}} ເລີ່ມຈາກ  #'''$2'''.",
-       "showingresultsnum": "ສະແດງທາງລຸ່ມ  {{PLURAL:$3|'''1''' ຜົນ|'''$3''' ຜົນ}} ເລີ່ມຈາກ #'''$2'''.",
        "preferences": "ການຕັ້ງຄ່າ",
        "mypreferences": "ຕັ້ງຄ່າ",
        "prefs-edits": "ຈຳນວນການດັດແກ້:",
        "servertime": "ເວລາເຊີເວີ",
        "guesstimezone": "ເອົາເວລາຈາກໂປຣແກຣມທ່ອງເວັບ",
        "allowemail": "ອະນຸຍາດ ໃຫ້ຜູ້ໃຊ້ອື່ນ ສົ່ງອີເມລຫາຂ້ອຍ",
-       "defaultns": "ຄົ້ນຫາ ໃນ ຂອບເຂດຊື່ ນີ້ ເວລາບໍ່ມີການລະບຸ:",
        "prefs-files": "ໄຟລ໌",
        "youremail": "ອີເມລ *:",
        "username": "ຊື່ຜູ້ໃຊ້:",
-       "uid": "ເລກປະຈຳໂຕຜູ້ໃຊ້:",
        "yourrealname": "ຊື່ແທ້ *:",
        "yourlanguage": "ພາສາ:",
        "yournick": "ຊື່ຫຼິ້ນ:",
        "all-logs-page": "ທຸກໆຂໍ້ມູນບັນທຶກການນຳໃຊ້",
        "logempty": "ຍັງບໍ່ພົບເນື້ອໃນບັນທຶກ.",
        "allpages": "ທຸກໆໜ້າ",
-       "alphaindexline": "$1 ຫາ $2",
        "nextpage": "ໜ້າຕໍ່ໄປ ($1)",
        "prevpage": "ໜ້າກ່ອນ ($1)",
        "allpagesfrom": "ສະແດງທຸກໆໜ້າ ເລີ່ມແຕ່:",
index 8e097c9..fdeafee 100644 (file)
        "viewprevnext": "Kamukile ($1 {{int:pipe-separator}} $2) ($3)",
        "searchall": "xete",
        "showingresults": "Kamukile opi {{PLURAL:$1|'''1''' ekali|'''$1''' ekalina}} di #'''$2'''.",
-       "showingresultsnum": "Kamukile {{PLURAL:$3|'''1''' ekali|'''$3''' ekalina}} di #'''$2'''.",
        "preferences": "Petohoni di sebelu",
        "mypreferences": "Zwa petohoni di sebelu",
        "prefs-edits": "Hloli ye ng'inabi:",
        "prefs-files": "Imegini",
        "youremail": "Imeli:",
        "username": "Sebelu:",
-       "uid": "Sebelu ID:",
        "yourrealname": "Sebu monida:",
        "yourlanguage": "Siselect:",
        "yourvariant": "Pane:",
        "log": "Desuni",
        "all-logs-page": "Xete desu",
        "allpages": "Mukoloko di petulo",
-       "alphaindexline": "$1 di $2",
        "nextpage": "Lila petulo ($1)",
        "prevpage": "Kona petulo ($1)",
        "allpagesfrom": "Kamukile petulo di:",
        "whatlinkshere-next": "{{PLURAL:$1|lila|lila $1}}",
        "whatlinkshere-links": "← ling'ki",
        "blockip": "Bolok sebelu",
-       "ipadressorusername": "IP/sebelu:",
+       "ipaddressorusername": "IP/sebelu:",
        "ipboptions": "2 ora:2 hours,1 dia:1 day,3 dia:3 days,1 wiki:1 week,2 wiki:2 weeks,1 muna:1 month,3 muna:3 months,6 muna:6 months,1 anu:1 year,di simuluzi:infinite",
        "badipaddress": "IP ni sa",
        "ipblocklist": "Mukoloko di IP e sebelu bye sa bolok",
index eab0c70..5352d96 100644 (file)
        "qbmyoptions": "بلگيا مه",
        "faq": "اف ای كيو",
        "faqpage": "پروجه:اف اي كيو",
-       "vector-action-addsection": "موضوع اضاف بكيد",
-       "vector-action-delete": "حذف بكيد",
-       "vector-action-move": "جاوه جا بوئيت",
-       "vector-action-protect": "حمايت بكيد",
-       "vector-action-undelete": "حذف نبيئني",
-       "vector-action-unprotect": "حمايت آلشت بكيد",
-       "vector-view-create": "راس كردن",
-       "vector-view-edit": "ويرايشت",
-       "vector-view-history": "ديئن ويرگار",
-       "vector-view-view": "حنن",
-       "vector-view-viewsource": "سرچشمه نه بوينيت",
        "actions": "جمشت",
        "namespaces": "نوم جا",
        "variants": "آلشت ونی يا",
index 8d9bae3..ed606d2 100644 (file)
        "qbmyoptions": "Mano puslapiai",
        "faq": "DUK",
        "faqpage": "Project:DUK",
-       "vector-action-addsection": "Pridėti temą",
-       "vector-action-delete": "Ištrinti",
-       "vector-action-move": "Pervardyti",
-       "vector-action-protect": "Užrakinti",
-       "vector-action-undelete": "Atkurti",
-       "vector-action-unprotect": "Keisti apsaugą",
-       "vector-view-create": "Kurti",
-       "vector-view-edit": "Redaguoti",
-       "vector-view-history": "Istorija",
-       "vector-view-view": "Skaityti",
-       "vector-view-viewsource": "Žiūrėti kodą",
        "actions": "Veiksmai",
        "namespaces": "Vardų sritys",
        "variants": "Variantai",
        "diff-multi-manyusers": "(daugiau nei $2 {{PLURAL:$2|naudotojo|naudotojų|naudotojų}} $1 {{PLURAL:$1|tarpinis keitimas nėra rodomas|tarpiniai keitimai nėra rodomi|tarpinių keitimų nėra rodoma}})",
        "searchresults": "Paieškos rezultatai",
        "searchresults-title": "Paieškos rezultatai „$1“",
-       "toomanymatches": "Perdaug atitikmenų buvo grąžinta. Prašome pabandyti kitokią užklausą",
        "titlematches": "Puslapių pavadinimų atitikmenys",
        "textmatches": "Puslapio turinio atitikmenys",
        "notextmatches": "Jokių puslapių teksto atitikmenų",
        "searchmenu-exists": "'''Puslapis pavadinimu „[[$1]]“ šioje wiki'''",
        "searchmenu-new": "<strong>Sukurti puslapį „[[:$1]]“ šioje wiki!</strong> {{PLURAL:$2|0=|Taip pat peržiūrėkite šį rastą puslapį.|Taip pat peržiūrėkite šiuos paieškos rezultatus.}}",
        "searchprofile-articles": "Turinio puslapiai",
-       "searchprofile-project": "Pagalbos ir projekto puslapiai",
        "searchprofile-images": "Daugialypės terpės failai",
        "searchprofile-everything": "Viskas",
        "searchprofile-advanced": "Išplėstinė",
        "searchprofile-articles-tooltip": "Ieškoti čia: $1",
-       "searchprofile-project-tooltip": "Ieškoti čia: $1",
        "searchprofile-images-tooltip": "Ieškoti failų",
        "searchprofile-everything-tooltip": "Ieškoti viso turinio (tame tarpe aptarimų puslapių)",
        "searchprofile-advanced-tooltip": "Ieškoti skirtingose vardų srityse",
        "search-interwiki-default": "Rezultatai iš $1:",
        "search-interwiki-more": "(daugiau)",
        "search-relatedarticle": "Susiję",
-       "searcheverything-enable": "Ieškoti visose vardų srityse",
        "searchrelated": "susiję",
        "searchall": "visi",
        "showingresults": "Žemiau rodoma iki '''$1''' {{PLURAL:$1|rezultato|rezultatų|rezultatų}} pradedant #'''$2'''.",
-       "showingresultsnum": "Žemiau rodoma '''$3''' {{PLURAL:$3|rezultato|rezultatų|rezultatų}}rezultatų pradedant #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Rezultatas '''$1''' iš '''$3'''|Rezultatai '''$1 - $2''' iš '''$3'''}} pagal užklausą '''$4'''",
        "search-nonefound": "Nėra rezultatų, atitinkančių užklausą.",
        "powersearch-legend": "Išplėstinė paieška",
        "allowemail": "Leisti siųsti el. laiškus iš kitų naudotojų",
        "prefs-searchoptions": "Paieška",
        "prefs-namespaces": "Vardų sritys",
-       "defaultns": "Pagal nutylėjimą ieškoti šiose vardų srityse:",
        "default": "pagal nutylėjimą",
        "prefs-files": "Failai",
        "prefs-custom-css": "Asmeninis CSS",
        "prefs-emailconfirm-label": "El. pašto patvirtinimas:",
        "youremail": "El. paštas:",
        "username": "{{GENDER:$1Naudotojo vardas}}:",
-       "uid": "{{GENDER:$1|Naudotojo}} ID:",
        "prefs-memberingroups": "{{PLURAL:$1|Grupės|Grupių}} narys:",
        "prefs-registration": "Registravimosi laikas:",
        "yourrealname": "Tikrasis vardas:",
        "log-title-wildcard": "Ieškoti pavadinimų, prasidedančių šiuo tekstu",
        "showhideselectedlogentries": "Rodyti/slėpti pasirinktus sąrašo elementus",
        "allpages": "Visi puslapiai",
-       "alphaindexline": "Nuo $1 iki $2",
        "nextpage": "Kitas puslapis ($1)",
        "prevpage": "Ankstesnis puslapis ($1)",
        "allpagesfrom": "Rodyti puslapius pradedant nuo:",
        "tooltip-preferences-save": "Išsaugoti nustatymus",
        "tooltip-summary": "Įvesti trumpą santrauką",
        "common.css": "/** Čia įdėtas CSS bus taikomas visoms išvaizdoms */",
-       "monobook.css": "/* Čia įdėtas CSS bus rodomas Monobook išvaizdos naudotojams */",
        "common.js": "/* Bet koks čia parašytas JavaScript bus rodomas kiekviename puslapyje kievienam naudotojui. */",
-       "monobook.js": "/* Šis JavaScript bus įkeltas tik „MonoBook“ išvaizdos naudotojams. */",
        "anonymous": "{{SITENAME}} {{PLURAL:$1|anoniminis naudotojas|anoniminiai naudotojai}}",
        "siteuser": "{{SITENAME}} {{GENDER:$2|naudotojas|naudotoja}} $1",
        "anonuser": "{{SITENAME}} anoniminis naudotojas $1",
        "pageinfo-category-pages": "Puslapių skaičius",
        "pageinfo-category-subcats": "Dukterinių kategorijų skaičius",
        "pageinfo-category-files": "Failų skaičius",
-       "skinname-cologneblue": "Kelno mėlyna",
-       "skinname-monobook": "MonoBook",
-       "skinname-modern": "Moderni",
-       "skinname-vector": "Vektorinė",
        "markaspatrolleddiff": "Žymėti, kad patikrinta",
        "markaspatrolledtext": "Pažymėti, kad puslapis patikrintas",
        "markedaspatrolled": "Pažymėtas kaip patikrintas",
index e81281e..151cac7 100644 (file)
        "qbmyoptions": "Munys puslopys",
        "faq": "BUV",
        "faqpage": "Project:BUV",
-       "vector-action-addsection": "Dalikt padaļu",
-       "vector-action-delete": "Iztreit",
-       "vector-action-move": "Puorceļt",
-       "vector-action-protect": "Apsorguot",
-       "vector-action-unprotect": "Puormeit apsardzeibu",
-       "vector-view-edit": "Pataiseit",
-       "vector-view-history": "Viesture",
-       "vector-view-view": "Vērtīs",
        "actions": "Darbeibys",
        "namespaces": "Vuordu pluoti",
        "variants": "Varianti",
        "prefs-files": "Faili",
        "youremail": "Tovs e-posta adress:",
        "username": "Slāgvuords:",
-       "uid": "Lītuotuoja ID:",
        "yourrealname": "Jiusu eistyns vuords:",
        "yourlanguage": "Volūda:",
        "yourgender": "Kuorta:",
        "booksources-go": "Meklēt",
        "log": "Registri",
        "allpages": "Vysys puslopys",
-       "alphaindexline": "nu $1 da $2",
        "prevpage": "Īprīškejuo lopa ($1)",
        "allpagesfrom": "Paruodeit puslopys, kurys aizsuokys ar:",
        "allpagesto": "Paruodeit lopys da:",
index 4c75d41..a133150 100644 (file)
        "qbmyoptions": "Ka phêkte",
        "faq": "Zawhzin",
        "faqpage": "Project: Zawhzin",
-       "vector-action-addsection": "Thupui belhna",
-       "vector-action-delete": "Paihna",
-       "vector-action-move": "Sawnna",
-       "vector-action-protect": "Venhimna",
-       "vector-action-undelete": "Lak kir lehna",
-       "vector-action-unprotect": "Venhimna dinhmun tidanglam rawh",
-       "vector-view-create": "Siamna",
-       "vector-view-edit": "Siamţhatna",
-       "vector-view-history": "Hunhlui-chanchin",
-       "vector-view-view": "Chhiarna",
-       "vector-view-viewsource": "A hnar enna",
        "actions": "Thiltih",
        "namespaces": "Hminghmun",
        "variants": "Zedang",
        "searchmenu-exists": "'''He wiki-ah hian \"[[:$1]]\" tia koh phêk a awm.'''",
        "searchmenu-new": "'''[[:$1]] phek hi he wiki-ah hian siam rawh le!'''",
        "searchprofile-articles": "A chhunga thu awm",
-       "searchprofile-project": "Ţanpuina leh hna-hmachhawp phekte",
        "searchprofile-images": "Maltimedia",
        "searchprofile-everything": "A vai",
        "searchprofile-advanced": "Ràiril",
        "searchprofile-articles-tooltip": "$1-ah zawng rawh",
-       "searchprofile-project-tooltip": "$1-ah zawng rawh",
        "searchprofile-images-tooltip": "Taksa-ho zawnna",
        "searchprofile-everything-tooltip": "A chhung zawng chhuak vek rawh (sawihona tiamin)",
        "searchprofile-advanced-tooltip": "Hminghmun thlansa-ah zawng rawh",
        "search-interwiki-default": "Chhuak $1:",
        "search-interwiki-more": "(tam)",
        "search-relatedarticle": "Laichin",
-       "searcheverything-enable": "Hminghmun zawng zawngah zawng rawh",
        "searchrelated": "laichin",
        "searchall": "a vaiin",
        "showingresultsheader": "'''$4'''  tana {{PLURAL:$5|chhuak   '''$3'''  zinga  '''$1'''|chhuak  '''$3'''  zinga   '''$1 - $2'''  }}",
        "allowemail": "Hmangtu dang e-lehkhathawn phal rawh",
        "prefs-searchoptions": "Zawn duhthlanna",
        "prefs-namespaces": "Hminghmun",
-       "defaultns": "A nih loh vëk leh hêng hminghmunahte hian zawng rawh:",
        "default": "thlansa",
        "prefs-files": "Taksa",
        "prefs-custom-css": "CSS hman",
        "prefs-emailconfirm-label": "E-chenhmun tihchianna:",
        "youremail": "E-chenhmun:",
        "username": "Hmangtu hming:",
-       "uid": "Hmangtu ID",
        "prefs-memberingroups": "{{PLURAL:$1|pawl|pawlte}}-a tel.",
        "prefs-registration": "Inziahluh hun:",
        "yourrealname": "Hming tak:",
        "all-logs-page": "Chanchin-ziak vàntlang thilte:",
        "log-title-wildcard": "Hë thüa inṭan hmingte hi zawng rawh",
        "allpages": "Phek zawng zawngte",
-       "alphaindexline": "$1 aṭanga $2",
        "nextpage": "Phek dawt ($1)",
        "prevpage": "Phêk hmasa ($1)",
        "allpagesfrom": "Hemi aṭanga inṭan hian pholang rawh:",
        "whatlinkshere-filters": "Thlitfimna",
        "blockip": "Hmangtu dangbet rawh",
        "blockip-legend": "Hmangtu dangbet rawh",
-       "ipadressorusername": "Chenhmun-IP emaw hmangtuhming:",
+       "ipaddressorusername": "Chenhmun-IP emaw hmangtuhming:",
        "ipbexpiry": "Tawphun:",
        "ipbreason": "Chhan:",
        "ipbsubmit": "Hmangtu dangbet rawh",
index f55bf6f..70c362e 100644 (file)
        "qbmyoptions": "Manas lapas",
        "faq": "BUJ",
        "faqpage": "Project:BUJ",
-       "vector-action-addsection": "Jauna sadaļa",
-       "vector-action-delete": "Dzēst",
-       "vector-action-move": "Pārvietot",
-       "vector-action-protect": "Aizsargāt",
-       "vector-action-undelete": "Atjaunot",
-       "vector-action-unprotect": "Mainīt aizsardzību",
-       "vector-view-create": "Izveidot",
-       "vector-view-edit": "Labot",
-       "vector-view-history": "Hronoloģija",
-       "vector-view-view": "Skatīt",
-       "vector-view-viewsource": "Aplūkot kodu",
        "actions": "Darbības",
        "namespaces": "Vārdtelpas",
        "variants": "Varianti",
        "toc": "Satura rādītājs",
        "showtoc": "parādīt",
        "hidetoc": "paslēpt",
-       "collapsible-collapse": "Sakļaut",
-       "collapsible-expand": "Izplest",
+       "collapsible-collapse": "paslēpt",
+       "collapsible-expand": "rādīt",
        "thisisdeleted": "Apskatīt vai atjaunot $1?",
        "viewdeleted": "Skatīt $1?",
        "restorelink": "$1 {{PLURAL:$1|dzēsto versiju|dzēstās versijas}}",
        "searchrelated": "saistītais",
        "searchall": "viss",
        "showingresults": "Šobrīd ir {{PLURAL:$1|redzama|redzamas}} '''$1''' {{PLURAL:$1|lapa|lapas}}, sākot ar #'''$2'''.",
-       "showingresultsnum": "Šobrīd ir {{PLURAL:$3|redzama|redzamas}} '''$3''' {{PLURAL:$3|lapa|lapas}}, sākot ar #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Šobrīd ir redzama '''$1''' lapa no '''$3'''|Šobrīd ir redzamas '''$1 — $2''' lapas no '''$3'''}}, kas satur '''$4'''",
        "search-nonefound": "Nav atrasti pieprasījumam atbilstoši rezultāti.",
        "powersearch-legend": "Izvērstā meklēšana",
        "duplicate-defaultsort": "'''Brīdinājums:''' Noklusējuma kārtošanas atslēga \"$2\" ignorē kārtošanas atslēga \"$1\".",
        "version": "Versija",
        "version-extensions": "Ieinstalētie paplašinājumi",
+       "version-skins": "Apdares",
        "version-specialpages": "Īpašās lapas",
        "version-variables": "Mainīgie",
        "version-antispam": "Spama aizsardzība",
-       "version-skins": "Apdares",
        "version-other": "Cita",
        "version-hooks": "Aizķeres",
        "version-hook-name": "Aizķeres nosaukums",
index cab767d..967370c 100644 (file)
        "qbmyoptions": "吾好",
        "faq": "頻答問",
        "faqpage": "Project:頻答問",
-       "vector-action-addsection": "入題",
-       "vector-action-delete": "刪",
-       "vector-action-move": "遷",
-       "vector-action-protect": "緘",
-       "vector-action-undelete": "覽刪",
-       "vector-action-unprotect": "啟",
-       "vector-view-create": "立",
-       "vector-view-edit": "纂",
-       "vector-view-history": "覽史",
-       "vector-view-view": "閱",
-       "vector-view-viewsource": "覽源",
        "actions": "動",
        "namespaces": "名集",
        "variants": "變字",
        "diff-multi-manyusers": "($2多作未示之審有$1)",
        "searchresults": "得尋",
        "searchresults-title": "\"$1\"得尋",
-       "toomanymatches": "多配應之,試異詢也",
        "titlematches": "合題",
        "textmatches": "合文",
        "notextmatches": "無文合",
        "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": "見'''$1'''尋,自'''$2'''始:",
-       "showingresultsnum": "見'''$3'''尋,自'''$2'''始:",
        "showingresultsheader": "見'''$4''',{{PLURAL:$5|'''$1''''''$3'''之尋|'''$1 - $2''',共'''$3'''之尋}}",
        "search-nonefound": "詢中無結。",
        "powersearch-legend": "尋",
        "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": "始頁:",
        "tooltip-preferences-save": "存註",
        "tooltip-summary": "輸一短摘",
        "common.css": "/* 此之 CSS 用於全面也 */",
-       "cologneblue.css": "/* 此之 CSS 用於馨藍面之簿也 */",
-       "monobook.css": "/* 此之 CSS 用於單書面之簿也 */",
-       "modern.css": "/* 此之 CSS 用於時髦面之簿也 */",
-       "vector.css": "/* 此之 CSS 用於動力面之簿也 */",
        "print.css": "/* 此之 CSS 用於印之出力也 */",
        "common.js": "/* 此之JavaScript將載於全簿之頁。 */",
-       "cologneblue.js": "/* 此之JavaScript將載於用馨藍面之簿 */",
-       "monobook.js": "/* 此之JavaScript將載於用單書面之簿 */",
-       "modern.js": "/* 此之JavaScript將載於用時髦面之簿 */",
-       "vector.js": "/* 此之JavaScript將載於用動力面之簿 */",
        "anonymous": "{{SITENAME}}無{{PLURAL:$1|簿|簿}}者",
        "siteuser": "{{SITENAME}}有簿者$1",
        "anonuser": "{{SITENAME}}有匿簿者$1",
        "spam_reverting": "還新審之無鏈$1者。",
        "spam_blanking": "審皆鏈$1,遂令白頁。",
        "pageinfo-toolboxlink": "文訊",
-       "skinname-cologneblue": "馨藍",
-       "skinname-monobook": "單書",
-       "skinname-modern": "時髦",
-       "skinname-vector": "動力",
        "markaspatrolleddiff": "派哨",
        "markaspatrolledtext": "哨此報",
        "markedaspatrolled": "派哨",
index 2baf3b1..d71bd77 100644 (file)
        "qbmyoptions": "हमर पन्ना सभ",
        "faq": "त्वरित प्रश्नोत्तरी",
        "faqpage": "Project: त्वरित प्रश्नोत्तरी",
-       "vector-action-addsection": "विचार-बिन्दु जोड़ू",
-       "vector-action-delete": "मेटाउ",
-       "vector-action-move": "घसकाउ",
-       "vector-action-protect": "रक्षण करू",
-       "vector-action-undelete": "आपस लाउ",
-       "vector-action-unprotect": "सुरक्षा बदलू",
-       "vector-view-create": "बनाउ",
-       "vector-view-edit": "सम्पादन करू",
-       "vector-view-history": "इतिहास देखू",
-       "vector-view-view": "पढ़ू",
-       "vector-view-viewsource": "जड़ि देखू",
        "actions": "क्रिया सभ",
        "namespaces": "चेन्हासी समूह सभ",
        "variants": "प्रकार सभ",
        "diff-multi-manyusers": "({{PLURAL:$1|एकटा मध्यस्थ संशोधन|$1 मध्यस्थ संशोधन सभ}} $2 सँ बेसी {{PLURAL:$2|प्रयोक्ता|प्रयोक्ता सभ}} नै देखाएल)",
        "searchresults": "तकबाक फलाफल",
        "searchresults-title": "तकबाक फलाफल \"$1\" लेल",
-       "toomanymatches": "कतेको प्रयास आपस भेल, कृपा कऽ दोसर अभ्यर्थनासँ प्रयास करू।",
        "titlematches": "पन्ना शीर्ष मेल",
        "textmatches": "पन्ना पाठ मेल",
        "notextmatches": "पन्नाक पाठक किछु मेल नै खाइए",
        "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''' सँ प्रारम्भ भऽ कऽ।",
-       "showingresultsnum": "नीचाँ देखबै छी {{PLURAL:$3|'''1''' परिणाम|'''$3''' परिणाम सभ}}  #'''$2'''सँ प्रारम्भ भऽ कऽ।",
        "showingresultsheader": "{{PLURAL:$5|परिणाम '''$1''' एकर '''$3'''|परिणाम सभ '''$1 - $2''' एकर '''$3'''}} ऐ लेल '''$4'''",
        "search-nonefound": "अभ्यर्थनासँ मेल खाइत कोनो परिणाम नै भेटल।",
        "powersearch-legend": "विशेष खोज",
        "allowemail": "आन प्रयोक्ताक ई-पत्र समर्थ करू",
        "prefs-searchoptions": "खोज विकल्प",
        "prefs-namespaces": "नामस्थान सभ",
-       "defaultns": "नै तँ ऐ नामस्थान सभमे ताकू:",
        "default": "पूर्वनिर्धारित",
        "prefs-files": "संचिका सभ",
        "prefs-custom-css": "खास सी.एस.एस.",
        "prefs-emailconfirm-label": "ई-पत्र पुष्टि:",
        "youremail": "ई-पत्र:",
        "username": "प्रयोक्तानाम:",
-       "uid": "प्रयोक्ताक पहिचान:",
        "prefs-memberingroups": "{{PLURAL:$1|संवर्ग|संवर्ग सभ}}:एकर सदस्य",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "पंजीकरणक समए:",
        "logempty": "वृत्तलेखमे कोनो मेल खाइबला बौस्तु नै।",
        "log-title-wildcard": "खोज शीर्षक सभ ऐ पाठसँ प्रारम्भ",
        "allpages": "सभ पन्ना",
-       "alphaindexline": "$1 to $2",
        "nextpage": "अगिला पन्ना ($1)",
        "prevpage": "पहिलुका पन्ना ($1)",
        "allpagesfrom": "पन्ना प्रदर्शन प्रारम्भ भेल:",
        "pageinfo-watchers": "जानकारक संख्या",
        "pageinfo-edits": "सम्पादनक संख्या",
        "pageinfo-authors": "भिन्न लेखक संख्या",
-       "skinname-modern": "आधुनिक",
-       "skinname-vector": "सदिश",
        "markaspatrolleddiff": "देखि लेल गेल, एहन चिन्ह लगाऊ",
        "markaspatrolledtext": "देखि लेल गेल, एहन चिन्ह लगाऊ",
        "markedaspatrolled": "देखि लेल गेल, एहन चिन्ह लगाऊ",
index c323d43..a652ff8 100644 (file)
        "qbmyoptions": "Kaca-ne inyong",
        "faq": "FAQ (Pitakonan sing sering ditakokna)",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Nambah topik",
-       "vector-action-delete": "Busek",
-       "vector-action-move": "Pindah",
-       "vector-action-protect": "Reksa",
-       "vector-action-undelete": "Batalna pambusakan",
-       "vector-action-unprotect": "Owahi pangreksan",
-       "vector-view-create": "Gawe",
-       "vector-view-edit": "Sunting",
-       "vector-view-history": "Sajarah kaca",
-       "vector-view-view": "Waca",
-       "vector-view-viewsource": "Deleng sumbere",
        "actions": "Tindakan",
        "namespaces": "Bilik jeneng",
        "variants": "Varian",
        "diff-multi-manyusers": "Ana ({{PLURAL:$1|Siji|$1}} revisi antara gaweane lewih sekang {{PLURAL:$2|siji|$2}} panganggo sing ora ditidokna)",
        "searchresults": "Hasile penggoletan",
        "searchresults-title": "Hasile penggoletan sekang \"$1\"",
-       "toomanymatches": "Pengoletane Rika ngasilna kakehan pituwas, monggo lebokna ''query'' liyane",
        "titlematches": "Judul kaca sing cocog",
        "textmatches": "Teks kaca sing cocog",
        "notextmatches": "Ora ana teks kaca sing cocog",
        "searchmenu-exists": "''' Ana kaca nganggo jeneng \"[[:$1]]\" nang wiki kiye.'''",
        "searchmenu-new": "'''Gawe kaca \"[[:$1]]\" nang wiki kiye!'''",
        "searchprofile-articles": "Isine kaca",
-       "searchprofile-project": "Kaca pitulung lan proyèk",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Kabèh",
        "searchprofile-advanced": "Lanjutan",
        "searchprofile-articles-tooltip": "Panggolèkan nang $1",
-       "searchprofile-project-tooltip": "Goleti nang $1",
        "searchprofile-images-tooltip": "Panggolèkan berkas",
        "searchprofile-everything-tooltip": "Goleti kabeh isi (termasuke kaca dhiskusi)",
        "searchprofile-advanced-tooltip": "Goleti nang bilik jeneng biasa",
        "search-interwiki-default": "Hasil $1:",
        "search-interwiki-more": "(terusane)",
        "search-relatedarticle": "Kagandhèng",
-       "searcheverything-enable": "Goleti nang kabeh bilik jeneng",
        "searchrelated": "kagandhèng",
        "searchall": "kabèh",
        "showingresults": "Nang ngisor kiye ditidokna ana {{PLURAL:$1|'''1''' kasil|'''$1''' kasil}}, dimulai sekang #'''$2'''.",
-       "showingresultsnum": "Nang ngisor kiye ditidokna ana {{PLURAL:$3'''1''' kasil|'''$3''' kasil}}, dimulai sekang #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Asil '''$1''' sekang '''$3'''|Asil '''$1 - $2''' sekang '''$3'''}} kanggo '''$4'''",
        "search-nonefound": "Ora ana kasil sing cocog karo pitakonan (''query'').",
        "powersearch-legend": "Panggoletan lanjut",
        "allowemail": "Aktifna fitur nggo nampa imel sekang pangganggo liyane",
        "prefs-searchoptions": "Goleti",
        "prefs-namespaces": "Bilik jeneng",
-       "defaultns": "Utawa goleti nang bilik jeneng kiye:",
        "default": "baku",
        "prefs-files": "Berkas",
        "prefs-custom-css": "CSS pribadi",
        "prefs-emailconfirm-label": "Konfirmasi imel:",
        "youremail": "Imel:",
        "username": "{{GENDER:$1|Jeneng panganggo}}:",
-       "uid": "{{GENDER:$1|ID panganggo}}:",
        "prefs-memberingroups": "{{GENDER:$2|Anggota}} \n{{PLURAL:$1|klompok|klompok-klompok}}:",
        "prefs-registration": "Wektu régistrasi:",
        "yourrealname": "Jeneng asli:",
        "logempty": "Ora ditemokna entri log sing pas.",
        "log-title-wildcard": "Goleti judul sing dimolai karo teks kiye",
        "allpages": "Kabèh kaca",
-       "alphaindexline": "$1 gutul $2",
        "nextpage": "Kaca seteruse ($1)",
        "prevpage": "Kaca sedurungé ($1)",
        "allpagesfrom": "Tidokna kaca-kaca molai sekang:",
index 5bc4044..57fe8cf 100644 (file)
        "qbmyoptions": "Монь лопане",
        "faq": "Сидеста Кеподеви Кизефксне",
        "faqpage": "Project:Сидеста Кеподеви Кизефксне",
-       "vector-action-addsection": "Поладомс мезень колга корхтамс",
-       "vector-action-delete": "Нардамс",
-       "vector-action-move": "Шашфтомс",
-       "vector-action-protect": "Араламс",
-       "vector-action-undelete": "Мърдафтомс",
-       "vector-action-unprotect": "Араламать полафтомс",
-       "vector-view-create": "Тиемс",
-       "vector-view-edit": "Петнемс",
-       "vector-view-history": "История няфтемс",
-       "vector-view-view": "Морафтомс",
-       "vector-view-viewsource": "Лисьма няфтемс",
        "actions": "Тефне",
        "namespaces": "Лемботмот",
        "variants": "Вариатт",
        "editundo": "валхтомс",
        "searchresults": "Мезе мувсь",
        "searchresults-title": "Мезе мувсь \"$1\" лемс",
-       "toomanymatches": "Пяк лама вешфонди малады муфкст, эняльттяма вешентть тага весть",
        "titlematches": "Лопать коняксоц мувсь",
        "textmatches": "Лопаса сёрматфсь мувсь",
        "notextmatches": "Лопаса сёрматфсь изь мув",
        "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": "Вешендемс кърдань лемботмова",
        "searchrelated": "мала",
        "searchall": "сембе",
        "showingresults": "Ала няфтеви {{PLURAL:$1|мувсь '''1'''|мувсть '''$1'''}} '''$2'''-ста ушедомс.",
-       "showingresultsnum": "Ала няфтеви {{PLURAL:$3|мувсь '''1'''|мувсть '''$3'''}} '''$2'''-ста ушедомс.",
        "showingresultsheader": "{{PLURAL:$5|'''$1''' сафкс '''$3'''-ста|'''$1 - $2''' сафкст '''$3'''-ста}} '''$4'''нди",
        "search-nonefound": "Аш вешфксонди малады муфкст.",
        "powersearch-legend": "Анцяйняньбес вешендема",
        "allowemail": "Электрононь сёрматнень иля тиихнень эзда тиемс мярьговикс",
        "prefs-searchoptions": "Вешендема арафнемат",
        "prefs-namespaces": "Лемботмот",
-       "defaultns": "Илякс вешентть ня лемботмова:",
        "default": "апак полафтт",
        "prefs-files": "Файлхт",
        "youremail": "Электрононь адресце:",
        "username": "Тиить лемоц:",
-       "uid": "Тиить идентификациесь:",
        "prefs-memberingroups": "Полаяй {{PLURAL:$1|полга|полга}}ста:",
        "yourrealname": "Афкуксонь лемце:",
        "yourlanguage": "Кяль:",
        "logempty": "Стапт сувамот лувомаса ашет.",
        "log-title-wildcard": "Мумс конякст конат ушедыхть стама тяшкста",
        "allpages": "Сембе лопат",
-       "alphaindexline": "$1-ста $2-с",
        "nextpage": "Сай лопа ($1)",
        "prevpage": "Сядынголень лопа ($1)",
        "allpagesfrom": "Няфтемс лопат ушедомс:",
index 372b4e4..ccaae87 100644 (file)
        "qbmyoptions": "Ny pejiko",
        "faq": "FMM",
        "faqpage": "Project:FMM",
-       "vector-action-addsection": "Hanampy lohahevitra",
-       "vector-action-delete": "Fafana",
-       "vector-action-move": "Hanolo anarana",
-       "vector-action-protect": "Arovy",
-       "vector-action-undelete": "Avereno",
-       "vector-action-unprotect": "Hanala ny fiarovana",
-       "vector-view-create": "Foronona",
-       "vector-view-edit": "Hanova",
-       "vector-view-history": "Hijery ny tantara",
-       "vector-view-view": "Hamaky",
-       "vector-view-viewsource": "Hijery fango",
        "actions": "Tao",
        "namespaces": "Valam-pejy",
        "variants": "Ny ''skin'' Voasintona",
        "searchrelated": "voadinika",
        "searchall": "rehetra",
        "showingresults": "Omeo ny valiny{{PLURAL:$1||}} miisa hatramin'ny <b>$1</b> manomboka ny #<b>$2</b>.",
-       "showingresultsnum": "Omeo ny valiny miisa <b>$3</b> manomboka ny #<b>$2</b>.{{PLURAL:||}}",
        "showingresultsheader": "{{PLURAL:$5}}Valim-pikaronhana '''$1x–$2''' an'i '''$3''' ho an'i '''$4'''",
        "search-nonefound": "Tsy nahitana valiny ilay fanontaniana.",
        "powersearch-legend": "Fikarohana havanana",
        "tooltip-undo": "Manala n'io fanovàna io ilay rohy « esory ».\nMamerina ny version taloha io asa io ary afaka manometraka ny antony anatin'ny ambangovangony.",
        "tooltip-preferences-save": "Tehirizina ny safidy",
        "tooltip-summary": "Atsofohy eo ambangovangony fohifohy",
-       "monobook.css": "/* Ovay ity rakitra ity raha hampiasa takilan'angaly (stylesheet) anao manokana amin'ny wiki iray manontolo */",
        "anonymous": "Mpikambana {{PLURAL:$1}} tsy mitonona anarana eto amin'ny {{SITENAME}}",
        "siteuser": "{{SITENAME}} mpikambana $1",
        "anonuser": "ny mpikambana tsy nisoratra anarana $1 an'i {{SITENAME}}",
index 8b6be56..99d471f 100644 (file)
        "qbpageoptions": "Тиде лаштык",
        "qbmyoptions": "Мыйын лаштык-влак",
        "faq": "ЧӱВаЙо (Чӱчкыдын вашлиялтше йодыш-влак)",
-       "vector-action-addsection": "У ӱжашым тӱҥалаш",
-       "vector-action-delete": "Шӧраш",
-       "vector-action-move": "Лӱмым вашталташ",
-       "vector-action-protect": "Тӧрлатымаш деч аралаш",
-       "vector-action-undelete": "Шӧрымым пӧртылаш",
-       "vector-action-unprotect": "Оролым вашталташ",
-       "vector-view-create": "Ышташ",
-       "vector-view-edit": "Тӧрлаташ",
-       "vector-view-history": "Эртымгорным ончалаш",
-       "vector-view-view": "Лудаш",
-       "vector-view-viewsource": "Тӱҥалтыш текстым ончалаш",
        "actions": "Сомылка-влак",
        "namespaces": "Лӱм-влак ора",
        "variants": "Вариант-влак",
        "viewprevnext": "Ончал ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "'''Тиде вики-проектыште «[[:$1]]» лӱман лаштыкым ышташ!'''",
        "searchprofile-articles": "Возымо лаштык-влак",
-       "searchprofile-project": "Полыш да проект лаштык",
        "searchprofile-images": "Мультимедий",
        "searchprofile-everything": "Чыла",
        "searchprofile-advanced": "Кумдарак",
        "searchprofile-articles-tooltip": "Кычалмаш $1ште",
-       "searchprofile-project-tooltip": "Кычалмаш $1ште",
        "searchprofile-images-tooltip": "Файл-влакым кычалмаш",
        "searchprofile-everything-tooltip": "Чыла лаштык-влакыште кычалаш (каҥашымаш лаштык-влакыштат)",
        "searchprofile-advanced-tooltip": "Искать в заданных пространствах имён",
index 1ce7021..01cd28e 100644 (file)
        "qbmyoptions": "Laman denai",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Bagian baru",
-       "vector-action-delete": "Hapuih",
-       "vector-action-move": "Pindahkan",
-       "vector-action-protect": "Linduangkan",
-       "vector-action-undelete": "Pambatalan pangapuihan",
-       "vector-action-unprotect": "Tuka palinduangan",
-       "vector-view-create": "Buek",
-       "vector-view-edit": "Suntiang",
-       "vector-view-history": "Riwayaik",
-       "vector-view-view": "Baco",
-       "vector-view-viewsource": "Caliak sumber",
        "actions": "Tindakan",
        "namespaces": "Ruang namo",
        "variants": "Variasi",
        "searchrelated": "bakaitan",
        "searchall": "sado",
        "showingresults": "Di bawah ko dikaluaan sampai {{PLURAL:$1|'''$1''' hasil}}, dimulai dari #'''$2'''.",
-       "showingresultsnum": "Di bawah ko dikaluaan {{PLURAL:$3|'''$3'''}} hasil mulai dari #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Hasil '''$1 - $2''' dari '''$3'''}} untuak '''$4'''",
        "search-nonefound": "Indak ado hasil nan cocok sasuai jo parmintaan",
        "powersearch-legend": "Pencarian lanjut",
        "pageinfo-category-pages": "Jumlah laman",
        "pageinfo-category-subcats": "Jumlah subkategori",
        "pageinfo-category-files": "Jumlah berkas",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Tandoi lah dipatroli",
        "markaspatrolledtext": "Tandoi laman ko lah dipatroli",
        "markedaspatrolled": "Tandoi lah dipatroli",
index a04d955..d484acf 100644 (file)
        "qbmyoptions": "Мои страници",
        "faq": "ЧПП",
        "faqpage": "Project:ЧПП",
-       "vector-action-addsection": "Додај тема",
-       "vector-action-delete": "Избриши",
-       "vector-action-move": "Премести",
-       "vector-action-protect": "Заштити",
-       "vector-action-undelete": "Врати",
-       "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": "Навигационо мени",
        "mergehistory-empty": "Нема преработки кои можат да се спојат.",
        "mergehistory-success": "$3 {{PLURAL:$3|преработка |преработки}} на [[:$1]] успешно {{PLURAL:$3|е споена|се споени}} во [[:$2]].",
        "mergehistory-fail": "Не е возможно да се направи спојување на историјата, проверете ја страницата и временските параметри.",
+       "mergehistory-fail-toobig": "Не можам да извршам спојување на историјата бидејќи така ќе се надмине границата од {{PLURAL:$1|една преработка|$1 преработки}}.",
        "mergehistory-no-source": "Изворната страница $1 не постои.",
        "mergehistory-no-destination": "Целната страница $1 не постои.",
        "mergehistory-invalid-source": "Изворната страница мора да има важечки наслов.",
        "searchall": "сè",
        "showingresults": "Подолу {{PLURAL:$1|е прикажан '''1''' резултат|се прикажани '''$1''' резултати}} почнувајќи од бр. '''$2'''.",
        "showingresultsinrange": "Долу {{PLURAL:$1|е прикажан до <strong>еден</strong> резултат|се прикажани до <strong>$1</strong> резултати}} во опсег од <strong>$2</strong> до <strong>$3</strong>.",
-       "showingresultsnum": "Подолу {{PLURAL:$3|е прикажан '''1''' резултат|се прикажани '''$3''' резултати}} почнувајќи од '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Резултат '''$1''' од '''$3'''|Резултати '''$1 - $2''' од '''$3'''}} за '''$4'''",
        "search-nonefound": "Нема резултати што одговараат на бараното.",
        "powersearch-legend": "Напредно пребарување",
        "tooltip-preferences-save": "Зачувај",
        "tooltip-summary": "Внесете краток опис",
        "interlanguage-link-title": "$1 — $2",
+       "interlanguage-link-title-nonlang": "$1 — $2",
        "common.css": "/* Тука поставениот CSS ќе се применува врз сите рува */",
-       "monobook.css": "/* Тука поставениот CSS ќе се применува врз корисниците на рувото „Монобук“ */",
-       "vector.css": "/* Тука поставениот CSS се однесува на корисниците на рувото „Векторско“ */",
        "print.css": "/* Тука поставениот CSS ќе се применува во верзијата за печатење */",
        "noscript.css": "/* Тука поставениот CSS се однесува на корисниците што имаат оневозможено JavaScript */",
        "group-autoconfirmed.css": "/* Тука поставениот CSS ќе се применува само на автопотврдените корисници */",
        "group-sysop.css": "/* Тука поставениот CSS ќе се применува само врз системските оператори */",
        "group-bureaucrat.css": "/* Тука поставениот CSS ќе се применува само врз бирократите */",
        "common.js": "/* Тука поставениот JavaScript ќе им се вчитува на сите корисници при отворањето на секоја страница. */",
-       "monobook.js": "/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Монобук“ */",
-       "vector.js": "/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Векторско“ */",
        "group-autoconfirmed.js": "/* Тука поставениот JavaScript  ќе им се вчитува само на автопотврдените корисници */",
        "group-user.js": "/* Тука поставениот JavaScript  ќе им се вчитува само на регистрираните корисници */",
        "group-bot.js": "/* Тука поставениот JavaScript  ќе им се вчитува само на ботовите */",
        "pageinfo-category-pages": "Број на страници",
        "pageinfo-category-subcats": "Број на поткатегории",
        "pageinfo-category-files": "Број на податотеки",
-       "skinname-monobook": "Монобук",
-       "skinname-vector": "Векторско",
        "markaspatrolleddiff": "Означи како проверена верзија",
        "markaspatrolledtext": "Означи ја верзијата како проверена",
        "markedaspatrolled": "Означено како проверено",
        "duplicate-defaultsort": "Предупредување: Основниот клуч за подредување „$2“ го поништува претходниот основен клуч за подредување „$1“.",
        "version": "Верзија",
        "version-extensions": "Воспоставени додатоци",
+       "version-skins": "Воспоставени рува",
        "version-specialpages": "Специјални страници",
        "version-parserhooks": "Расчленувачки куки",
        "version-variables": "Променливи",
        "version-antispam": "Спречување на спам",
-       "version-skins": "Рува",
        "version-api": "Прилози",
        "version-other": "Друго",
        "version-mediahandlers": "Ракувачи со мултимедијални содржини",
        "version-hook-name": "Име на кука",
        "version-hook-subscribedby": "Претплатено од",
        "version-version": "(Верзија $1)",
+       "version-no-ext-name": "[нема име]",
        "version-svn-revision": "прер. $1",
        "version-license": "Лиценца на МедијаВики",
        "version-ext-license": "Лиценца",
        "version-ext-colheader-name": "Додаток",
+       "version-skin-colheader-name": "Руво",
        "version-ext-colheader-version": "Верзија",
        "version-ext-colheader-license": "Лиценца",
        "version-ext-colheader-description": "Опис",
        "expand_templates_remove_nowiki": "Притаи <nowiki> ознаки во резултатот",
        "expand_templates_generate_xml": "Прикажи XML-дрво на расчленувањето",
        "expand_templates_generate_rawhtml": "Прикажувај сиров HTML",
-       "expand_templates_preview": "Преглед"
+       "expand_templates_preview": "Преглед",
+       "pagelanguage": "Изборник за јазик на страницата",
+       "pagelang-name": "Страница",
+       "pagelang-language": "Јазик",
+       "pagelang-use-default": "Користи стандарден јазик",
+       "pagelang-select-lang": "Одберете јазик",
+       "right-pagelang": "Менување јазик на страница",
+       "action-pagelang": "менување јазик на страница",
+       "log-name-pagelang": "Дневник на менување на јазикот",
+       "log-description-pagelang": "Ова е дневник на менувања на јазикот на страницата.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|го смени}} јазикот на страницата $3 од $4 на $5."
 }
index a2de861..2244079 100644 (file)
        "qbmyoptions": "എന്റെ താളുകൾ",
        "faq": "പതിവുചോദ്യങ്ങൾ",
        "faqpage": "Project:പതിവുചോദ്യങ്ങൾ",
-       "vector-action-addsection": "വിഷയം ചേർക്കുക",
-       "vector-action-delete": "മായ്ക്കുക",
-       "vector-action-move": "തലക്കെട്ട് മാറ്റുക",
-       "vector-action-protect": "സം‌രക്ഷിക്കുക",
-       "vector-action-undelete": "മായ്ക്കപ്പെട്ടത് പുനഃസ്ഥാപിക്കുക",
-       "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": "ഗമന വഴികാട്ടി",
        "mergehistory-empty": "സം‌യോജിപ്പിക്കാവുന്ന പതിപ്പുകളൊന്നും ഇല്ല.",
        "mergehistory-success": "[[:$1]]-ന്റെ {{PLURAL:$3|പതിപ്പ്|പതിപ്പുകൾ}} [[:$2]]-ലേക്കു വിജയകരമായി സം‌യോജിപ്പിച്ചിരിക്കുന്നു.",
        "mergehistory-fail": "താളുകളുടെ നാൾവഴി സം‌യോജനം നടത്താൻ സാദ്ധ്യമല്ല. താളുകളും സമയവിവരങ്ങളും ഒന്നു കൂടി പരിശോധിക്കുക.",
+       "mergehistory-fail-toobig": "{{PLURAL:$1|ഒരു നാൾപ്പതിപ്പിൽ|$1 നാൾപ്പതിപ്പുകൾ}} മാറ്റണമെന്നതിനാൽ നാൾവഴി ലയിപ്പിക്കാൽ നടത്താനാവില്ല.",
        "mergehistory-no-source": "സ്രോതസ്സ് താളായ $1 നിലവിലില്ല.",
        "mergehistory-no-destination": "ലക്ഷ്യ താളായ $1 നിലവിലില്ല.",
        "mergehistory-invalid-source": "സ്രോതസ്സ് താളിന് നിർബന്ധമായും സാധുവായ ഒരു തലക്കെട്ടുണ്ടായിരിക്കണം.",
        "searchall": "എല്ലാം",
        "showingresults": "'''$2''' മുതലുള്ള {{PLURAL:$1|'''ഒരു''' ഫലം|'''$1''' ഫലങ്ങൾ}} താഴെ പ്രദർശിപ്പിക്കുന്നു.",
        "showingresultsinrange": "#<strong>$2</strong> മുതൽ #<strong>$3</strong> വരെയുള്ള പരിധിയിലെ {{PLURAL:$1|<strong>ഒരു</strong> ഫലം|<strong>$1</strong> ഫലങ്ങൾ}} താഴെ പ്രദർശിപിക്കുന്നു.",
-       "showingresultsnum": "'''$2''' മുതലുള്ള {{PLURAL:$3|'''ഒരു''' ഫലം|'''$3''' ഫലങ്ങൾ}} താഴെ പ്രദർശിപ്പിക്കുന്നു.",
        "showingresultsheader": "'''$4''' എന്ന പദത്തിനു ആകെ ലഭിച്ച {{PLURAL:$5| '''$3''' ഫലത്തിൽ '''$1''' എണ്ണം|'''$3''' ഫലത്തിൽ '''$1 മുതൽ $2''' വരെയുള്ളവ}}",
        "search-nonefound": "താങ്കൾ തിരഞ്ഞ പദത്തിനു യോജിച്ച ഫലങ്ങളൊന്നും ലഭിച്ചില്ല.",
        "powersearch-legend": "വിപുലീകൃത തിരച്ചിൽ",
        "windows-nonascii-filename": "പ്രത്യേകാക്ഷരങ്ങളുള്ള പ്രമാണനാമങ്ങൾ ഈ വിക്കി പിന്തുണയ്ക്കുന്നില്ല.",
        "fileexists": "ഇതേ പേരിൽ വേറെ ഒരു പ്രമാണം നിലവിലുണ്ട്.\nദയവായി <strong>[[:$1]]</strong> പരിശോധിച്ച് പ്രസ്തുത പ്രമാണം {{GENDER:|മാറ്റണമോ}} എന്നു തീരുമാനിക്കുക.\n[[$1|thumb]]",
        "filepageexists": "ഈ പ്രമാണത്തിനുള്ള വിവരണതാൾ <strong>[[:$1]]</strong> എന്നു സൃഷ്ടിക്കപ്പെട്ടിട്ടുണ്ട്, പക്ഷേ ഇതേ പേരിൽ പ്രമാണം ഒന്നും നിലവിലില്ല.\nവിവരണതാളിൽ താങ്കൾ ഇവിടെ ചേർക്കുന്ന ലഘുകുറിപ്പ് പ്രത്യക്ഷപ്പെടുന്നതല്ല.\nഅവിടെ ലഘുകുറിപ്പ് വരാൻ ആ താൾ താങ്കൾ സ്വയം തിരുത്തേണ്ടതാണ്.\n[[$1|ലഘുചിത്രം]]",
-       "fileexists-extension": "à´\87à´¤àµ\87 à´ªàµ\87രിൽ à´®à´±àµ\8dà´±àµ\8aà´°àµ\81 à´ªàµ\8dരമാണà´\82 à´¨à´¿à´²à´µà´¿à´²àµ\81à´£àµ\8dà´\9fàµ\8d: [[$2|à´²à´\98àµ\81à´\9aà´¿à´¤àµ\8dà´°à´\82]]\n* à´\87à´ªàµ\8dà´ªàµ\8bൾ à´\85à´ªàµ\8dâ\80\8cà´²àµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dà´¤ à´ªàµ\8dരമാണതàµ\8dതിനàµ\8dà´±àµ\86 à´ªàµ\87à´°àµ\8dâ\80\8c: <strong>[[:$1]]</strong>\n* à´¨à´¿à´²à´µà´¿à´²àµ\81à´³àµ\8dà´³ à´ªàµ\8dരമാണതàµ\8dതിനàµ\8dà´±àµ\86 à´ªàµ\87à´°àµ\8dâ\80\8c: <strong>[[:$2]]</strong>\nമറàµ\8dà´±àµ\8aà´°àµ\81 à´ªàµ\87à´°àµ\81 à´¤à´¿à´°à´\9eàµ\8dà´\9eàµ\86à´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´\95.",
+       "fileexists-extension": "à´\87à´¤àµ\87 à´ªàµ\87രിൽ à´®à´±àµ\8dà´±àµ\8aà´°àµ\81 à´ªàµ\8dരമാണà´\82 à´¨à´¿à´²à´µà´¿à´²àµ\81à´£àµ\8dà´\9fàµ\8d: [[$2|à´²à´\98àµ\81à´\9aà´¿à´¤àµ\8dà´°à´\82]]\n* à´\87à´ªàµ\8dà´ªàµ\8bൾ à´\85à´ªàµ\8dâ\80\8cà´²àµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dà´¤ à´ªàµ\8dരമാണതàµ\8dതിനàµ\8dà´±àµ\86 à´ªàµ\87à´°àµ\8dâ\80\8c: <strong>[[:$1]]</strong>\n* à´¨à´¿à´²à´µà´¿à´²àµ\81à´³àµ\8dà´³ à´ªàµ\8dരമാണതàµ\8dതിനàµ\8dà´±àµ\86 à´ªàµ\87à´°àµ\8dâ\80\8c: <strong>[[:$2]]</strong>\nà´\95àµ\82à´\9fàµ\81തൽ à´µàµ\8dയതàµ\8dയാസമàµ\81à´³àµ\8dà´³ à´ªàµ\87à´°àµ\81പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95à´£àµ\8b?",
        "fileexists-thumbnail-yes": "ഈ ചിത്രം വലിപ്പം കുറച്ച ഒന്നാണെന്നു ''(ലഘുചിത്രം)'' കാണുന്നു.\n[[$1|ലഘുചിത്രം]]\nദയവായി <strong>[[:$1]]</strong> എന്ന ചിത്രം പരിശോധിക്കുക.\n[[:$1]] എന്ന ചിത്രവും ഈ ചിത്രവും ഒന്നാണെങ്കിൽ ലഘുചിത്രത്തിനു വേണ്ടി മാത്രമായി ചിത്രം അപ്‌ലോഡ് ചെയ്യേണ്ടതില്ല.",
        "file-thumbnail-no": "പ്രമാണത്തിന്റെ പേര്‌  <strong>$1</strong> എന്നാണ്‌ തുടങ്ങുന്നത്.\nഇതു വലിപ്പം കുറച്ച ഒരു ചിത്രം ''(ലഘുചിത്രം)'' ആണെന്നു കാണുന്നു.\nപൂർണ്ണ റെസലൂഷൻ ഉള്ള ചിത്രം ഉണ്ടെങ്കിൽ അതു അപ്‌ലോഡ് ചെയ്യുവാൻ താല്പര്യപ്പെടുന്നു, അല്ലെങ്കിൽ പ്രമാണത്തിന്റെ പേരു മാറ്റുവാൻ അഭ്യർത്ഥിക്കുന്നു.",
        "fileexists-forbidden": "ഈ പേരിൽ ഒരു പ്രമാണം നിലവിലുണ്ട്, അതു മാറ്റി സൃഷ്ടിക്കുക സാദ്ധ്യമല്ല.\nതാങ്കൾക്ക് ഈ ചിത്രം അപ്‌ലോഡ് ചെയ്തേ മതിയാവുയെങ്കിൽ, ദയവു ചെയ്തു വേറൊരു പേരിൽ ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യുക. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "നന്നാക്കൽ പ്രവർത്തനങ്ങൾ പുരോഗമിക്കുന്നതിനാൽ പ്രമാണങ്ങളുടെ മായ്ക്കലും പുനഃസ്ഥാപിക്കലും താത്ക്കാലികമായി നിർത്തിവച്ചിരിക്കുന്നു.",
        "filedelete-maintenance-title": "പ്രമാണം മായ്ക്കാൻ കഴിയില്ല",
        "mimesearch": "മൈം(MIME) തിരയൽ",
-       "mimesearch-summary": "ഈ താൾ പ്രമാണങ്ങളെ അവയുടെ മൈം(MIME)-തരം അനുസരിച്ച് അരിച്ചെടുക്കാൻ പ്രാപ്തമാക്കുന്നു:\nനൽകേണ്ടവിധം: പ്രമാണത്തിന്റെ തരം/ഉപതരം, ഉദാ:<code>image/jpeg</code>.",
+       "mimesearch-summary": "ഈ താൾ പ്രമാണങ്ങളെ അവയുടെ മൈം(MIME)-തരം അനുസരിച്ച് അരിച്ചെടുക്കാൻ പ്രാപ്തമാക്കുന്നു:\nനൽകേണ്ടവിധം: പ്രമാണത്തിന്റെ തരം/ഉപതരം അല്ലെങ്കിൽ പ്രമാണത്തിന്റെ തരം/*, ഉദാ:<code>image/jpeg</code>.",
        "mimetype": "മൈം(MIME) തരം:",
        "download": "ഡൗൺലോഡ്",
        "unwatchedpages": "ആരും ശ്രദ്ധിക്കാത്ത താളുകൾ",
        "tooltip-preferences-save": "ക്രമീകരണങ്ങൾ ഓർത്തുവെയ്ക്കുക",
        "tooltip-summary": "ചെറിയൊരു ചുരുക്കം ചേർക്കുക",
        "common.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. എല്ലാ ദൃശ്യരൂപങ്ങൾക്കും ബാധകമായിരിക്കും */",
-       "monobook.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. മോണോബുക്ക് ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */",
-       "vector.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. വെക്റ്റർ ദൃശ്യരൂപത്തിനു ബാധകമായിരിക്കും*/",
        "noscript.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്., ജാവാസ്ക്രിപ്റ്റ് സജ്ജമാക്കിയിട്ടില്ലാത്ത ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും */",
        "group-autoconfirmed.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. യാന്ത്രികമായി സ്ഥിരീകരിച്ച ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും */",
        "group-bot.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. ബോട്ടുകൾക്ക് ബാധകമായിരിക്കും */",
        "group-sysop.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. കാര്യനിർവാഹകർക്ക് ബാധകമായിരിക്കും */",
        "group-bureaucrat.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. ബ്യൂറോക്രാറ്റുകൾക്ക് ബാധകമായിരിക്കും */",
        "common.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് എല്ലാ ഉപയോക്താക്കൾക്കും, എല്ലാ താളുകളിലും പ്രവർത്തിക്കുന്നതായിരിക്കും */",
-       "monobook.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് മോണോബുക്ക് ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */",
-       "vector.js": "/*ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് വെക്റ്റർ ദൃശ്യരൂപം ഉപയോഗിക്കുന്ന ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും*/",
        "group-autoconfirmed.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് യാന്ത്രികമായി സ്ഥിരീകരിക്കപ്പെട്ട ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും */",
        "group-bot.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് ബോട്ടുകൾക്ക് ബാധകമായിരിക്കും */",
        "group-sysop.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് കാര്യനിർവാഹകർക്ക് ബാധകമായിരിക്കും */",
        "pageinfo-category-pages": "താളുകളുടെ എണ്ണം",
        "pageinfo-category-subcats": "ഉപവർഗ്ഗങ്ങളുടെ എണ്ണം",
        "pageinfo-category-files": "പ്രമാണങ്ങളുടെ എണ്ണം",
-       "skinname-monobook": "മോണോബുക്ക്",
-       "skinname-vector": "വെക്റ്റർ",
        "markaspatrolleddiff": "റോന്തുചുറ്റിയതായി അടയാളപ്പെടുത്തുക",
        "markaspatrolledtext": "ഈ താളിൽ റോന്തുചുറ്റിയതായി രേഖപ്പെടുത്തുക",
        "markedaspatrolled": "റോന്തുചുറ്റിയതായി രേഖപ്പെടുത്തിയിരിക്കുന്നു",
        "duplicate-defaultsort": "'''മുന്നറിയിപ്പ്:''' ക്രമപ്പെടുത്താനുള്ള ചാവിയായ \"$2\" മുമ്പ് ക്രമപ്പെടുത്താനുള്ള ചാവിയായിരുന്ന \"$1\" എന്നതിനെ അതിലംഘിക്കുന്നു.",
        "version": "പതിപ്പ്",
        "version-extensions": "ഇൻസ്റ്റോൾ ചെയ്തിട്ടുള്ള അനുബന്ധങ്ങൾ",
+       "version-skins": "ദൃശ്യരൂപങ്ങൾ",
        "version-specialpages": "പ്രത്യേക താളുകൾ",
        "version-parserhooks": "പാഴ്‌സർ കൊളുത്തുകൾ",
        "version-variables": "ചരങ്ങൾ",
        "version-antispam": "പാഴെഴുത്ത് തടയൽ",
-       "version-skins": "ദൃശ്യരൂപങ്ങൾ",
        "version-other": "മറ്റുള്ളവ",
        "version-mediahandlers": "മീഡിയ കൈകാര്യോപകരണങ്ങൾ",
        "version-hooks": "കൊളുത്തുകൾ",
        "version-hook-name": "കൊളുത്തിന്റെ പേര്",
        "version-hook-subscribedby": "വരിക്കാരനായത്",
        "version-version": "(പതിപ്പ് $1)",
+       "version-no-ext-name": "[[പേര് നൽകിയിട്ടില്ല]",
        "version-license": "മീഡിയവിക്കി ഉപയോഗാനുമതി",
        "version-ext-license": "അനുമതി",
        "version-ext-colheader-name": "അനുബന്ധം",
index 1aa4d77..67e82db 100644 (file)
        "qbmyoptions": "Миний хуудсууд",
        "faq": "Тогтмол тавигддаг асуултууд",
        "faqpage": "Project:Тогтмол тавигддаг асуултууд",
-       "vector-action-addsection": "Сэдэв нэмэх",
-       "vector-action-delete": "Устгах",
-       "vector-action-move": "Зөөх",
-       "vector-action-protect": "Хамгаалах",
-       "vector-action-undelete": "Үл устгах",
-       "vector-action-unprotect": "Хамгаалалтаа солих",
-       "vector-view-create": "Үүсгэх",
-       "vector-view-edit": "Засварлах",
-       "vector-view-history": "Түүх",
-       "vector-view-view": "Унших",
-       "vector-view-viewsource": "Кодыг харах",
        "actions": "Үйлдлүүд",
        "namespaces": "Хуудсын төрөл",
        "variants": "Хувилбарууд",
        "searchrelated": "холбоотой",
        "searchall": "бүгдийг",
        "showingresults": "Доор #'''$2'''-с эхлэсэн '''$1''' илэрцийг үзүүлж байна.",
-       "showingresultsnum": "Доор #'''$2'''-с эхлэсэн '''$3''' илэрцийг үзүүлж байна.",
        "showingresultsheader": "'''$4''' хайлтын {{PLURAL:$5|'''$3'''-н '''$1''' үр дүн|'''$3'''-н '''$1 - $2''' үр дүн}}",
        "search-nonefound": "Хайлтад таарсан үр дүн илэрсэнгүй.",
        "powersearch-legend": "Сонгосон хайлт",
index a50f17d..d7c946f 100644 (file)
        "qbmyoptions": "माझी पाने",
        "faq": "नेहमी विचारण्यात येणारे प्रश्न",
        "faqpage": "Project:प्रश्नावली",
-       "vector-action-addsection": "विषय जोडा",
-       "vector-action-delete": "वगळा",
-       "vector-action-move": "स्थानांतरण",
-       "vector-action-protect": "सुरक्षित करा",
-       "vector-action-undelete": "वगळलेले पुनर्स्थापित करा",
-       "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": "दिक्चालन यादी",
        "searchall": "सर्व",
        "showingresults": "#'''$2'''पासून {{PLURAL:$1|'''1'''पर्यंतचा निकाल|'''$1'''पर्यंतचे निकाल}} खाली दाखवले आहे.",
        "showingresultsinrange": "खाली #<strong>$2</strong> ते #<strong>$3</strong> पर्यंतच्या कक्षेतील {{PLURAL:$1|<strong>१</strong> निकाल दाखविला आहे|<strong>$1</strong> निकाल दाखविले आहेत}}.",
-       "showingresultsnum": "खाली दिलेले #'''$2'''पासून सुरू होणारे  {{PLURAL:$3|'''1''' निकाल|'''$3''' निकाल}}.",
        "showingresultsheader": "'''$4''' साठी {{PLURAL:$5|'''$3'''पैकी '''$1''' निकाल|'''$3''' पैकी '''$1 - $2''' निकाल}}",
        "search-nonefound": "दिलेल्या पृच्छेशी जुळणारे निकाल नाहीत.",
        "powersearch-legend": "प्रगत शोध",
        "pageinfo-category-pages": "पानांची संख्या",
        "pageinfo-category-subcats": "उपवर्गांची संख्या",
        "pageinfo-category-files": "संचिकांची संख्या",
-       "skinname-monobook": "मोनोबुक",
-       "skinname-vector": "सदिश",
        "markaspatrolleddiff": "टेहळणी केल्याची खूण करा",
        "markaspatrolledtext": "या पानावर गस्त झाल्याची खूण करा",
        "markedaspatrolled": "गस्त केल्याची खूण केली",
index a1b1452..4953184 100644 (file)
        "qbmyoptions": "Laman-laman saya",
        "faq": "Soalan Lazim",
        "faqpage": "Project:Soalan Lazim",
-       "vector-action-addsection": "Buka topik",
-       "vector-action-delete": "Hapus",
-       "vector-action-move": "Pindah",
-       "vector-action-protect": "Lindung",
-       "vector-action-undelete": "Nyahhapus",
-       "vector-action-unprotect": "Ubah perlindungan",
-       "vector-view-create": "Cipta",
-       "vector-view-edit": "Sunting",
-       "vector-view-history": "Lihat sejarah",
-       "vector-view-view": "Baca",
-       "vector-view-viewsource": "Lihat sumber",
        "actions": "Tindakan",
        "namespaces": "Ruang nama",
        "variants": "Kelainan",
        "searchall": "semua",
        "showingresults": "Yang berikut ialah '''$1''' hasil bermula daripada yang {{PLURAL:$2|pertama|ke-'''$2'''}}.",
        "showingresultsinrange": "Yang berikut adalah {{PLURAL:$1|<strong>satu</strong> hasil|sebanyak <strong>$1</strong> hasil}} dalam julat #<strong>$2</strong> hingga #<strong>$3</strong>.",
-       "showingresultsnum": "Yang berikut ialah '''$3''' hasil bermula daripada yang {{PLURAL:$2|pertama|ke-'''$2'''}}.",
        "showingresultsheader": "{{PLURAL:$5|Keputusan '''$1''' daripada '''$3'''|Keputusan '''$1 - $2''' daripada '''$3'''}} untuk '''$4'''",
        "search-nonefound": "Tiada hasil yang sepadan dengan pertanyaan.",
        "powersearch-legend": "Carian lanjutan",
        "tooltip-preferences-save": "Simpan keutamaan",
        "tooltip-summary": "Berikan ringkasan",
        "common.css": "/* CSS yang terletak di sini akan digunakan pada semua kulit */",
-       "monobook.css": "/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Monobook */",
-       "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",
        "anonuser": "Pengguna {{SITENAME}} tanpa nama $1",
        "pageinfo-category-pages": "Bilangan halaman",
        "pageinfo-category-subcats": "Bilangan subkategori",
        "pageinfo-category-files": "Bilangan fail",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Tanda ronda",
        "markaspatrolledtext": "Tanda ronda laman ini",
        "markedaspatrolled": "Tanda ronda",
index 1045eeb..c578188 100644 (file)
        "qbmyoptions": "Il-paġni tiegħi",
        "faq": "Mistoqsijiet komuni",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Żid diskussjoni",
-       "vector-action-delete": "Ħassar",
-       "vector-action-move": "Mexxi",
-       "vector-action-protect": "Ipproteġi",
-       "vector-action-undelete": "Irkupra",
-       "vector-action-unprotect": "Biddel il-protezzjoni",
-       "vector-view-create": "Oħloq",
-       "vector-view-edit": "Editja",
-       "vector-view-history": "Ara l-kronoloġija",
-       "vector-view-view": "Aqra",
-       "vector-view-viewsource": "Ara s-sors",
        "actions": "Azzjonijiet",
        "namespaces": "Spazji tal-isem",
        "variants": "Varjanti",
        "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'''.",
-       "showingresultsnum": "Hawn taħt {{PLURAL:$3|jinsab riżultat '''1''' li jibda|jinsabu '''$3''' riżultati li jibdew}} bin-numru '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Riżultat '''$1''' minn '''$3'''|Riżultati '''$1 - $2''' minn '''$3'''}} għal '''$4'''",
        "search-nonefound": "It-tfittxija ma tat l-ebda riżultat.",
        "powersearch-legend": "Tfittxija avvanzata",
        "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 */",
-       "monobook.css": "/* CSS li tpoġġa hawnhekk se jaffetwa dawk l-utenti li jagħmlu użu mill-iskin ''Monobook'' */",
        "common.js": "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal kull utent f'kull tniżżil ta' paġna. */",
-       "monobook.js": "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''Monobook'' */",
        "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-monobook": "Monobook",
        "markaspatrolleddiff": "Marka l-modifiki bħalha verifikati",
        "markaspatrolledtext": "Immarka din il-paġna bħala verifikata",
        "markedaspatrolled": "Markat bħalha verifikat",
index b0ab19f..7ad868f 100644 (file)
        "prefs-emailconfirm-label": "Cunfirmaçon de l correio eiletrónico:",
        "youremail": "Morada de correio eiletrónico:",
        "username": "Nome de outelizador:",
-       "uid": "Númaro de eidentificaçon:",
        "prefs-memberingroups": "Nembro {{PLURAL:$1|de l grupo|de ls grupos}}:",
        "yourrealname": "Nome berdadeiro:",
        "yourlanguage": "Lhéngua:",
        "log": "Registros",
        "all-logs-page": "Todos ls registros públicos",
        "allpages": "Todas las páiginas",
-       "alphaindexline": "$1 a $2",
        "nextpage": "Próssima páigina ($1)",
        "prevpage": "Páigina d'atrás ($1)",
        "allpagesfrom": "Amostrar páiginas ampeçando an:",
        "tooltip-watch": "Ajuntar esta páigina als tous begiados",
        "tooltip-rollback": "\"{{int:rollbacklink}}\" çfazer, cun un solo clique, las eidiçones de l redadeiro eiditor desta páigina.",
        "tooltip-undo": "\"Çfazer\" çfaç esta eidiçoni abre ls campos de eidiçon ne l modo \"ber cumo queda\".\nPremite ajuntar la rezon de la eidiçon ne l sumário.",
-       "skinname-cologneblue": "Azul",
-       "skinname-monobook": "Lhibro",
-       "skinname-modern": "Moderno",
        "previousdiff": "← Eidiçon d'atrás",
        "nextdiff": "Redadeira eidiçon →",
        "file-info-size": "$1 × $2 pixel, tamanho: $3, tipo MIME: $4",
index e64eb1c..ed24060 100644 (file)
        "qbmyoptions": "ကျွန်ုပ် စာမျက်နှာများ",
        "faq": "မေးလေ့ရှိကြသည်များ",
        "faqpage": "Project:မေးလေ့ရှိကြသည်များ",
-       "vector-action-addsection": "အကြောင်းအရာအသစ် ထပ်ထည့်ရန်",
-       "vector-action-delete": "ဖျက်​ပါ​",
-       "vector-action-move": "ရွှေ့ပါ",
-       "vector-action-protect": "ထိမ်း​သိမ်း​ပါ​",
-       "vector-action-undelete": "မဖျက်တော့ရန်",
-       "vector-action-unprotect": "ကာကွယ်ခြင်းကို ပြောင်းလဲရန်",
-       "vector-view-create": "စတင်ရေးသားရန်",
-       "vector-view-edit": "ပြင်ရန်",
-       "vector-view-history": "ရာဇဝင်ကြည့်ရန်",
-       "vector-view-view": "ဖတ်ရန်",
-       "vector-view-viewsource": "ရင်းမြစ်ကို ကြည့်ရန်",
        "actions": "ဆောင်ရွက်ချက်များ",
        "namespaces": "အမည်ညွှန်းများ",
        "variants": "အမျိုးမျိုးအပြားပြား",
        "editundo": "နောက်ပြန် ပြန်ပြင်ရန်",
        "searchresults": "ရှာဖွေမှု ရလဒ်များ",
        "searchresults-title": "\"$1\" အတွက် ရှာတွေ့သည့် ရလဒ်များ",
-       "toomanymatches": "ကိုက်ညီမှုမြောက်များစွာ ပေါ်ထွက်လာသောကြောင့် ကျေးဇူးပြု၍ တခြားစုံစမ်းမှုနောက်တစ်ခု ပြုလုပ်ပေးပါ",
        "titlematches": "စာမျက်နှာခေါင်းစဉ်ကိုက်ညီသည်",
        "textmatches": "စာမျက်နှာစာသားကိုက်ညီသည်",
        "notextmatches": "ဤခေါင်းစဉ်နှင့် ကိုက်ညီသောစာမျက်နှာမရှိပါ",
        "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''' ခု|'''$1''' ခု}}ထိကို အောက်တွင် ပြထားသည်။",
-       "showingresultsnum": "'''$2''' နှင့်စသော ရလဒ် {{PLURAL:$3|'''1''' ခု|'''$3''' ခု}} ကို အောက်တွင် ပြထားသည်။",
        "showingresultsheader": "'''$4''' အတွက် {{PLURAL:$5|ရလဒ် '''$3''' ခု အနက်မှ '''$1'''|ရလဒ် '''$3'''ခု အနက်မှ '''$1 - $2'''}}",
        "search-nonefound": "စုံစမ်းမှုနှင့်ကိုက်ညီသော ရလဒ်မရှိပါ။",
        "powersearch-legend": "အထူးပြု ရှာဖွေရန်",
        "allowemail": "အခြားအသုံးပြုသူများထံမှ အီးမေးများကို လက်ခံရန်",
        "prefs-searchoptions": "ရှာဖွေရန် ရွေးချယ်မှု",
        "prefs-namespaces": "အမည်ညွှန်း",
-       "defaultns": "သို့မဟုတ်ပါက ဤအမည်ညွှန်းများတွင် ရှာပါ -",
        "default": "ပုံမှန်အားဖြင့်",
        "prefs-files": "ဖိုင်",
        "prefs-custom-css": "စိတ်ကြိုက် CSS",
        "prefs-emailconfirm-label": "အီးမေးအတည်ပြုရန်",
        "youremail": "အီး​မေး -",
        "username": "အသုံးပြုသူအမည် -",
-       "uid": "အသုံးပြုသူ ​ID -",
        "prefs-memberingroups": "{{PLURAL:$1|အုပ်စု|အုပ်စု}}၏ အဖွဲ့ဝင်",
        "prefs-registration": "မှတ်ပုံတင်သည့် အချိန် -",
        "yourrealname": "နာမည်ရင်း -",
        "log": "မှတ်​တမ်း​များ​",
        "all-logs-page": "အများနှင့်ဆိုင်သောမှတ်တမ်းအားလုံး",
        "allpages": "စာမျက်နှာအားလုံး",
-       "alphaindexline": "$1 မှ $2 အထိ",
        "nextpage": "နောက်ထပ်စာမျက်နှာ ($1)",
        "prevpage": "ယခင် စာမျက်နှာ ($1)",
        "allpagesfrom": "ဤမှစသော စာမျက်နှာများကို ပြနေသည် -",
        "whatlinkshere-filters": "စိစစ်မှုများ",
        "blockip": "အသုံးပြုသူကို ပိတ်ပင်ရန်",
        "blockip-legend": "အသုံးပြုသူကို ပိတ်ပင်ရန်",
-       "ipadressorusername": "အိုင်ပီလိပ်စာ သို့ အသုံးပြုသူအမည် -",
+       "ipaddressorusername": "အိုင်ပီလိပ်စာ သို့ အသုံးပြုသူအမည် -",
        "ipbexpiry": "သက်တမ်းကုန်လွန်ရက် -",
        "ipbreason": "အ​ကြောင်း​ပြ​ချက်:",
        "ipbcreateaccount": "အကောင့်အသစ်ပြုလုပ်ခြင်းကို တားဆီးရန်",
        "newimages": "ပုံအသစ်များပြခန်း",
        "newimages-legend": "စိစစ်မှု",
        "newimages-label": "ဖိုင်အမည် (သို့ ယင်း၏အစိတ်အပိုင်း) -",
-       "showhidebots": "(ဘော့ $1 ခု)",
        "noimages": "ကြည့်စရာဘာမှ မရှိပါ။",
        "ilsubmit": "ရှာ​ဖွေ​ရန်​",
        "bydate": "ရက်စွဲဖြိင့်",
index e68762c..4c29381 100644 (file)
        "qbmyoptions": "Монь лопан",
        "faq": "Сеедьстэ кепедень кевкстемат",
        "faqpage": "Project:Сеедьстэ кепедень кевкстемат",
-       "vector-action-addsection": "Поладомс мезде кортамс",
-       "vector-action-delete": "Нардамс",
-       "vector-action-move": "Печтевтемс",
-       "vector-action-protect": "Аравтомс ванстомас",
-       "vector-action-undelete": "Вельмевтемс нардазенть",
-       "vector-action-unprotect": "Полавтомс ванстоманзо",
-       "vector-view-create": "Теемс-Шкамс",
-       "vector-view-edit": "Витнемс-петнемс",
-       "vector-view-history": "Ваномс юронзо-путовксонзо",
-       "vector-view-view": "Ловномс",
-       "vector-view-viewsource": "Ваномс косто саезь",
        "actions": "Тев теемат",
        "namespaces": "Лемпотмот",
        "variants": "Вариантт",
index 5c20f00..ed2cb7a 100644 (file)
        "qbmyoptions": "مه صفحه‌ئون",
        "faq": "معمولی سوالا",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "ترنه گپ بزوئن",
-       "vector-action-delete": "پاک هاکردن",
-       "vector-action-move": "دکش هاکردن",
-       "vector-action-protect": "زلفن بزوئن",
-       "vector-action-undelete": "دباره بنویشته بیّن",
-       "vector-action-unprotect": "زلفن عوض هاکردن",
-       "vector-view-create": "بساتن",
-       "vector-view-edit": "دچی‌ین",
-       "vector-view-history": "تاریخچه ره بَدی‌ین",
-       "vector-view-view": "بخوندستن",
-       "vector-view-viewsource": "ونه منبع ره هارشائن",
        "actions": "عملکاردون",
        "namespaces": "ایسم فضائون",
        "variants": "گویش‌ئون",
        "prefs-rc": "تازه دگاردسته‌ئون",
        "youremail": "شه مه Email:",
        "username": "کاروری نوم:",
-       "uid": "کاروری إشماره:",
        "yourrealname": "شیمه راستین ره نوم :",
        "yourlanguage": "زوون:",
        "badsig": "ایمضا بی اعتبار هسه. html کودون ره أی هارشین.",
        "booksources-text": "زیر فهرستی از لینکا به وبگاه‌ئون دیگه دره که کتاب‌ئون نو و دست دوم روشنّه و ممکنه اطلاعات ویشتری راجع به کتاب مورد نظر دارِن:",
        "specialloguserlabel": "کارور:",
        "allpages": "همه صفحه‌ئون",
-       "alphaindexline": "$1 تا  $2",
        "prevpage": "پیشین صفحه ($1)",
        "allarticles": "همه صفحه‌ئون",
        "allpagessubmit": "بـور",
        "imagelisttext": "فهرست بن $1 {{PLURAL:$1|عکسی|عکسی}} که $2 مرتب بیی‌یه بموئه.",
        "newimages-summary": "این صفحه شا آخرین عکس‌ئون بار بی‌یشته ره نیمایش دنه",
        "newimages-label": "ایسم عکس (یا ات تیکه که ونه شه):",
-       "showhidebots": "(دچی‌یه‌ن روباتا $1)",
        "noimages": "هچی دنی‌یه که هارشی.",
        "ilsubmit": "بگردستن",
        "bydate": "تاریخ رو جه",
index e17ea9c..71e6514 100644 (file)
        "qbmyoptions": "Nozāzanil",
        "faq": "Zan īc tētlatlanīliztli",
        "faqpage": "Project:FAQ",
-       "vector-action-delete": "Ticpolōz",
-       "vector-action-move": "Ticzacāz",
-       "vector-action-protect": "Ticquīxtīz",
-       "vector-view-create": "Ticchīhuāz",
-       "vector-view-edit": "Ticpatlāz",
-       "vector-view-history": "Tlahcuilōlli tlahcuilōlloh",
-       "vector-view-view": "Tāmapōhuaz",
-       "vector-view-viewsource": "Tiquittāz in mēyalli",
        "actions": "Āyiliztli",
        "namespaces": "Tòkâyeyàntìn",
        "errorpagetitle": "Aiuhcāyōtl",
        "searchmenu-exists": "'''Ye ia zāzanilli ītōca \"[[$1]]\" inīn huiquipan'''",
        "searchmenu-new": "'''Tihuelīti ticchīhuāz zāzanilli ītōca \"[[:$1]]\" inīn huiquipan'''",
        "searchprofile-articles": "Tlapiyaliztli zāzanilli",
-       "searchprofile-project": "Tēpalēhuiliztli īhuān īxiptlahtli āmatl",
        "searchprofile-images": "Nepapan media",
        "searchprofile-everything": "Mochi",
        "searchprofile-advanced": "Huehca ōmpa",
        "searchprofile-articles-tooltip": "Tictēmōz īpan $1",
-       "searchprofile-project-tooltip": "Tictēmōz īpan $1",
        "searchprofile-images-tooltip": "Tiquintēmōz tlahcuilōlli",
        "searchprofile-everything-tooltip": "Tictēmōz mochi tlapiyalizpan (mopiyah tēixnāmiquiliztli zāzanilli)",
        "search-result-size": "$1 ({{PLURAL:$2|1 tlahtōl|$2 tlahtōltin}})",
        "timezoneregion-pacific": "Pacífico Ilhuicaātl",
        "prefs-searchoptions": "Titlatēmōz",
        "prefs-namespaces": "Tōcātzin",
-       "defaultns": "Tlatēmōz inīn tōcātzimpan achtopa:",
        "default": "ic default",
        "prefs-files": "Tlahcuilōlli",
        "youremail": "Maltzinteyōtl netitlanizyeyāntli:",
        "username": "{{GENDER:$1|Tlatequitiltilīltōcāitl}}:",
-       "uid": "{{GENDER:$1|Tlatequitiltilīlli}} ID:",
        "prefs-memberingroups": "{{GENDER:$2|Tlacotōncayōtl}} in {{PLURAL:$1|tēolōlolli|tēolōloltin}}",
        "yourrealname": "Melāhuac motōcā:",
        "yourlanguage": "Tlâtòlli:",
        "log": "Tlahcuilōlloh",
        "all-logs-page": "Mochīntīn tlācah īntlahcuilōlloh",
        "allpages": "Mochīntīn zāzanilli",
-       "alphaindexline": "$1 oc $2",
        "nextpage": "Niman zāzanilli ($1)",
        "prevpage": "Achto zāzanilli ($1)",
        "allarticles": "Mochīntīn tlahcuilōlli",
index c32edf6..0a2d3ab 100644 (file)
        "qbmyoptions": "Goá ê ia̍h",
        "faq": "Būn-tah",
        "faqpage": "Project:Būn-tah",
-       "vector-action-addsection": "Ke chi̍t-ê toān-lo̍h",
-       "vector-action-delete": "Thâi",
-       "vector-action-move": "Sóa khì",
-       "vector-action-protect": "Pó-hō·",
-       "vector-action-undelete": "chhú-siau thâi tiàu",
-       "vector-action-unprotect": "kái pó-hō·",
-       "vector-view-create": "Khai-sí siá",
-       "vector-view-edit": "Siu-kái",
-       "vector-view-history": "khoàⁿ le̍k-sú",
-       "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": "導覽目錄",
        "ok": "Hó ah",
        "retrievedfrom": "Lâi-goân: \"$1\"",
        "youhavenewmessages": "Lí ū $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$3|个儂|$3个儂}}的$1 ($2)个通知。",
+       "youhavenewmessagesmanyusers": "有誠濟儂($2)予你 $1 个通知。",
+       "newmessageslinkplural": "{{PLURAL:$1|一个新通知|999=新通知}}",
+       "newmessagesdifflinkplural": "choè-kīn kái{{PLURAL:$1|pái|pái}}",
        "youhavenewmessagesmulti": "Lí tī $1 ū sin sìn-sit",
        "editsection": "siu-kái",
        "editold": "siu-kái",
        "nospecialpagetext": "<strong>Bô lí beh tih ê te̍k-sû-ia̍h。</strong>\n\n[[Special:SpecialPages|{{int:specialpages}}]] sī só͘-ū ê te̍k-sû-ia̍h lia̍t-pió.",
        "error": "Chhò-gō·",
        "databaseerror": "Chu-liāu-khò· chhò-gō·",
+       "databaseerror-text": "一个資料庫的查詢發生錯誤。\n這有可能是系統軟體臭蟲引起的。",
+       "databaseerror-textcl": "有一个資料庫的查詢錯誤。",
        "databaseerror-query": "揣:$1",
        "databaseerror-function": "功能:$1",
        "databaseerror-error": "chhò-gō͘",
        "badarticleerror": "Bē-tàng tiàm chit ia̍h chip-hêng chit ê tōng-chok.",
        "cannotdelete": "Bô-hoat-tō· kā hit ê ia̍h a̍h-sī iáⁿ-siōng 「$1」 thâi tiāu. (Khó-lêng pa̍t-lâng í-keng kā thâi tiāu ah.)",
        "cannotdelete-title": "無法度共\"$1\"這頁刣掉。",
+       "delete-hook-aborted": "有設定阻擋刣掉的動作。\n毋閣無其他的解說。",
+       "no-null-revision": "袂當予\"$1\"產生一个空的修訂本。",
        "badtitle": "M̄-chiâⁿ piau-tê",
        "badtitletext": "Iau-kiû ê piau-tê sī bô-hāu ê, khang ê, a̍h-sī liân-kiat chhò-gō· ê inter-language/inter-wiki piau-tê.",
-       "perfcached": "Ē-kha ê chu-liāu tùi lâi--ê, só·-í bī-pit oân-choân hoán-èng siōng sin ê chōng-hóng. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
-       "perfcachedts": "Ē-kha ê chu-liāu tùi lâi--ê, tī $1 keng-sin--koè. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+       "perfcached": "Ē-kha ê chu-liāu tùi lâi--ê, só·-í bô it-tēng sī siōng sin ê. Tī khoài-chhûn-khu siōng chē ē-tàng khǹg{{PLURAL:$1| pit|$1 pit}} chu-liāu.",
+       "perfcachedts": "Ē-kha ê chu-liāu tùi lâi--ê, tī $1 keng-sin--koè. Tī khoài-chûn-khu siōng chē ē-tàng khǹg {{PLURAL:$4|pit|$4 pit}} chu-liāu.",
        "querypage-no-updates": "Chit-má bē-sái kái chit ia̍h.\nChia ê chu-liāu bē-tàng sui tiông-sin chéng-lí.",
        "viewsource": "Khoàⁿ goân-sú lōe-iông",
+       "viewsource-title": "看 $1的原本編碼。",
        "actionthrottled": "Tōng-chok hông tóng leh.",
        "actionthrottledtext": "Ūi-tio̍h thê-hông lah-sap ê chhú-tì,  lí ū hông hān-chè tī té sî-kan lāi chò siuⁿ chē pái chit ê tōng-chok,  taⁿ lí í-keng chhiau-koè hān-chè.\nChhiáⁿ tī kúi hun-cheng hāu chiah koh chhì.",
-       "protectedpagetext": "Chit ia̍h hông só tiâu leh, bē pian-chi̍p tit.",
+       "protectedpagetext": "Chit ia̍h hông só tiâu leh, bē pian-chi̍p tit, mā bē-tàng chò kî-thaⁿ oa̍h-tāng.",
        "viewsourcetext": "Lí ē-sái khoàⁿ ia̍h khó͘-pih chit ia̍h ê goân-sú loē-iông:",
-       "protectedinterface": "Chit ia̍h thê-kiong nńg-thé kài-bīn ēng ê bûn-jī. Ūi beh ī-hông lâng chau-that, só͘-í ū siū tio̍h pó-hō͘.",
-       "editinginterface": "'''Sè-jī:''' Lí tng teh siu-kái 1 bīn thê-kiong nńg-thé kài-bīn bûn-jī ê ia̍h. Jīn-hô kái-piàn to ē éng-hióng tio̍h kî-thaⁿ iōng-chiá ê sú-iōng kài-bīn.",
+       "viewyourtext": "你會使看<strong>你改的</strong>原始碼,並且khop去這頁:",
+       "protectedinterface": "Chit ia̍h thê-kiong nńg-thé kài-bīn ēng ê bûn-jī. Ūi beh ī-hông lâng chau-that, só͘-í ū siū tio̍h pó-hō͘. Nā beh kái hoan-e̍k, chhiaⁿ khì Ûi-ki Mûi-thé chāi-tē-hoà sū-kang [//translatewiki.net/ translatewiki.net] hiâ.",
+       "editinginterface": "'''Sè-jī:''' Lí tng teh siu-kái 1 bīn thê-kiong nńg-thé kài-bīn bûn-jī ê ia̍h. Jīn-hô kái-piàn to ē éng-hióng tio̍h kî-thaⁿ iōng-chiá ê sú-iōng kài-bīn. Nā beh kái hoan-e̍k, chhiaⁿ khì Ûi-ki Mûi-thé chāi-tē-hoà sū-kang [//translatewiki.net/ translatewiki.net] hiâ.",
        "cascadeprotected": "Chit-ê ia̍h í-keng hông pó-hō͘ bē kái tit. In-ūi i tī ē-bīn {{PLURAL:$1|ê|ê}} liân-só pó-hō͘ lāi-té:\n$2",
        "namespaceprotected": "Lí bô khoân-lī kái '''$1'''  miâ-khong-kan ê ia̍h",
        "virus-unknownscanner": "M̄-chai siáⁿ pēⁿ-to̍k:",
-       "logouttext": "'''Lí í-keng teng-chhut.'''\n\nLí ē-sái mài kì-miâ kè-siok sú-iōng {{SITENAME}}, mā ē-sái iōng kāng-ê a̍h-sī pa̍t-ê sin-hūn têng teng-ji̍p.\nChhiaⁿ chù-ì: ū-kóa ia̍h ū khó-lêng khoàⁿ-tio̍h bē-su lí iû-goân teng-ji̍p tiong; che chi-iàu piàⁿ tiāu lí ê browser ê cache chiū ē chèng-siông.",
+       "logouttext": "'''Lí í-keng teng-chhut.'''\nChhiaⁿ chù-ì: ū-kóa ia̍h ū khó-lêng khoàⁿ-tio̍h bē-su lí iáu teng-ji̍p tī leh; che chi-iàu piàⁿ tiāu liû-lám-khì ê khoài-chhú-khu, tiō ē chèng-siông.",
        "welcomeuser": "Hoan-gêng, $1!",
        "yourname": "Lí ê iōng-chiá miâ-chheng:",
        "userlogin-yourname": "Iōng-chiá miâ-chheng",
        "yourpassword": "Lí ê bi̍t-bé:",
        "userlogin-yourpassword": "Bi̍t-bé",
+       "createacct-yourpassword-ph": "拍密碼",
        "yourpasswordagain": "Têng phah bi̍t-bé:",
-       "remembermypassword": "Kì tiâu góa ê bi̍t-bé (āu-chhiú teng-ji̍p iōng) (siōng chē kì $1 {{PLURAL:$1|kang|kang}})",
+       "createacct-yourpasswordagain": "確認密碼",
+       "createacct-yourpasswordagain-ph": "閣拍一擺密碼",
+       "remembermypassword": "Tī chit ê liû-lám-khì kì góa ê teng-ji̍p chu-liāu.(siōng chē kì $1 {{PLURAL:$1|kang|kang}})",
+       "userlogin-remembermypassword": "我登入的資料記起來",
+       "userlogin-signwithsecure": "用安全連線",
+       "yourdomainname": "你的網域:",
+       "password-change-forbidden": "佇這个維基,你袂當改密碼。",
+       "externaldberror": "這可能是資料庫驗證錯誤,抑是無允准你改外部的口座。",
        "login": "Teng-ji̍p",
        "nav-login-createaccount": "Teng-ji̍p / khui sin kháu-chō",
        "loginprompt": "Thiⁿ ē-kha ê chu-liāu thang khui sin hō·-thâu a̍h-sī teng-ji̍p {{SITENAME}}.",
        "logout": "Teng-chhut",
        "userlogout": "Teng-chhut",
        "notloggedin": "Bô teng-ji̍p",
+       "userlogin-noaccount": "敢無口座?",
+       "userlogin-joinproject": "加入 {{SITENAME}}",
        "nologin": "Bô kháu-chō thang teng-ji̍p? $1",
        "nologinlink": "Khui 1 ê kháu-chō",
        "createaccount": "Khui sin kháu-chō",
        "gotaccount": "Í-keng ū kháu-chō? '''$1'''.",
        "gotaccountlink": "Teng-ji̍p",
-       "createaccountmail": "Thàu koè tiān-chú-phoe",
+       "userlogin-resetlink": "你敢袂記得你登入的資料?",
+       "userlogin-resetpassword-link": "袂記得你的密碼?",
+       "userlogin-helplink2": "協助你登入",
+       "userlogin-loggedin": "你已經用{{GENDER:$1|$1}}登入,用下跤的表,登入別个名。",
+       "userlogin-createanother": "開另外一个口座",
+       "createacct-emailrequired": "電子批地址",
+       "createacct-email-ph": "拍你的電子批地址",
+       "createacct-another-email-ph": "拍你的電子批地址",
+       "createaccountmail": "Iōng chi̍t-ê lîm-sî loān-sò͘ sán-seng ê bi̍t-bé , kià khì goá chí-tēng ê tiān-chú-phoe tē-chí.",
+       "createacct-realname": "真正的名",
        "createaccountreason": "Lí-iû:",
+       "createacct-reason-ph": "為啥物你欲開一另外一个口座?",
+       "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|个儂有貢獻|个儂有貢獻}}",
        "badretype": "Lí su-ji̍p ê 2-cho· bi̍t-bé bô tùi.",
-       "userexists": "Lí beh ti̍h ê iōng-chiá miâ-chheng í-keng ū lâng iōng. Chhiáⁿ kéng pa̍t-ê miâ.",
+       "userexists": "Lí phah ê iōng-chiá miâ-chheng í-keng ū lâng iōng. Chhiáⁿ lí iōng pa̍t-ê miâ.",
        "loginerror": "Teng-ji̍p chhò-gō·",
+       "createacct-error": "開口座無成功",
        "createaccounterror": "Bô hoat-tō͘ khui kháu-chō: $1",
        "loginsuccesstitle": "Teng-ji̍p sêng-kong",
        "loginsuccess": "Lí hiān-chhú-sî í-keng teng-ji̍p {{SITENAME}} chò \"$1\".",
-       "nosuchuser": "Chia bô iōng-chiá hō-chò \"$1\". Chhiáⁿ kiám-cha lí ê phèng-im, a̍h-sī iōng ē-kha ê pió lâi khui sin iōng-chiá ê kháu-chō.",
+       "nosuchuser": "Chia bô iōng-chiá hō-chò \"$1\".\nIiōng-chiá hō-chò ū hun toā-jī sè-jī.\nChhiáⁿ kiám-cha lí ê phèng-im, a̍h-sī  [[Special:UserLogin/signup|khui sin iōng-chiá ê kháu-chō.]]",
        "nosuchusershort": "Bô \"$1\" chit ê iōng-chiá miâ.\nTùi khoàⁿ-māi,  lí phah--ê.",
        "nouserspecified": "Lí ài chí-tēng chi̍t ê iōng-chiá miâ.",
        "wrongpassword": "Lí su-ji̍p ê bi̍t-bé ū têng-tâⁿ. Chhiáⁿ têng chhì.",
        "noemail": "Kì-lo̍k bô iōng-chiá \"$1\" ê e-mail chū-chí.",
        "passwordsent": "Ū kià sin bi̍t-bé khì \"$1\" chù-chheh ê e-mail chū-chí. Siu--tio̍h liáu-āu chhiáⁿ têng teng-ji̍p.",
        "mailerror": "Kià phoe tú tio̍h chhò-gō·: $1",
-       "acct_creation_throttle_hit": "Pháiⁿ-sè, lí taⁿ í-keng khui $1 ê kháu-chō ā. Bē-sái koh-chài khui.",
-       "emailauthenticated": "Lí ê e-mail chū-chí tī $1 khak-jīn sêng-kong.",
+       "acct_creation_throttle_hit": "你這馬用的網路地址有佇最近一工開{{PLURAL:$1|1 个口座|$1 个口座}},這已經超過系統允准的數目。\n所以,這馬無法度予用這个網路地址的儂,閣開口座。",
+       "emailauthenticated": "Lí ê e-mail chū-chí tī $2 $3  khak-jīn sêng-kong.",
        "emailnotauthenticated": "Lí ê e-mail chū-chí iáu-bōe khak-jīn ū-hāu, só·-í ē--kha ê e-mail kong-lêng bē-ēng-tit.",
        "noemailprefs": "Tī lí ê siat-piān chí-tēng chi̍t ê tiān-chú-phoe tē-chí thang hō͘ chia ê kong-lêng ē-tàng ēng.",
        "emailconfirmlink": "Chhiáⁿ khak-jīn lí ê e-mail chū-chí ū-hāu",
        "passwordreset-username": "Lí ê iōng-chiá miâ-chheng:",
        "passwordreset-email": "Tiān-chú-phoe tē-chí:",
        "passwordreset-emailelement": "Iōng-chiá: $1\nLîm-sî ê bi̍t-bé: $2",
-       "passwordreset-emailsent": "Chit hong thê-chhíⁿ ê  tiān-chú-phoe í-keng kià chhut.",
+       "passwordreset-emailsent": "Têng siat bi̍t-bé ê tiān-chú-phoe í-keng kià chhut-khì ah.",
        "changeemail": "Kái tiān-chú-phoe ê tē-chí",
        "changeemail-oldemail": "Chit-má ê E-mail tē-chí:",
        "changeemail-newemail": "Sin E-mail ê chū-chí:",
        "loginreqlink": "Teng-ji̍p",
        "loginreqpagetext": "Lí ài $1 chiah thang khoàⁿ pat ia̍h.",
        "accmailtitle": "Bi̍t-bé kià chhut khì ah.",
-       "accmailtext": "$1 ê bi̍t-bé í-keng kìa khì $2.",
+       "accmailtext": "Chi̍t ê iōng loān-sò͘ sán-seng ê  bi̍t-bé, beh hō͘ [[User talk:$1|$1]] ê, í-keng kìa khì $2.",
        "newarticle": "(Sin)",
        "newarticletext": "Lí tòe 1 ê liân-kiat lâi kàu 1 bīn iáu-bōe chûn-chāi ê ia̍h. Beh khai-sí pian-chi̍p chit ia̍h, chhiáⁿ tī ē-kha ê bûn-jī keh-á lāi-té phah-jī. ([$1 Bo̍k-lio̍k] kà lí án-choáⁿ chìn-hêng.) Ká-sú lí bô-tiuⁿ-tî lâi kàu chia, ē-sai chhi̍h liû-lám-khì ê '''téng-1-ia̍h''' tńg--khì.",
        "anontalkpagetext": "----''Pún thó-lūn-ia̍h bô kò·-tēng ê kháu-chō/hō·-thâu, kan-na ū 1 ê IP chū-chí (chhin-chhiūⁿ 123.456.789.123). In-ūi bô kāng lâng tī bô kāng sî-chūn ū khó-lêng tú-hó kong-ke kāng-ê IP, lâu tī chia ê oē ū khó-lêng hō· bô kāng lâng ê! Beh pī-bián chit khoán būn-tê, ē-sái khì [[Special:UserLogin|khui 1 ê hō·-thâu a̍h-sī teng-ji̍p]].''",
        "search-section": "(toān-lo̍h $1)",
        "searchall": "choân-pō·",
        "showingresults": "Ē-kha tùi #<b>$2</b> khai-sí hián-sī <b>$1</b> hāng kiat-kó.",
-       "showingresultsnum": "Ē-kha tùi #<b>$2</b> khai-sí hián-sī <b>$3</b> hāng kiat-kó.",
        "showingresultsheader": "對'''$4'''的{{PLURAL:$5|第 '''$1''' 到第 '''$3''' 項結果|第 '''$1 - $2''' 項,總共 '''$3''' 項結果}}",
        "powersearch-legend": "Kiám-sek",
        "preferences": "Siat-tēng",
index f3908ec..0d09d74 100644 (file)
        "qbmyoptions": "'E ppaggene mie",
        "faq": "FAQ",
        "faqpage": "Project:Domanne frequente",
-       "vector-action-addsection": "Aggiunge chiacchierata",
-       "vector-action-delete": "Scancèlla",
-       "vector-action-move": "Spusta",
-       "vector-action-protect": "Prutegge",
-       "vector-action-undelete": "Ripristina",
-       "vector-action-unprotect": "Càgna prutezzione",
-       "vector-view-create": "Cria",
-       "vector-view-edit": "Càgna",
-       "vector-view-history": "Vere cronologgia",
-       "vector-view-view": "Legge",
-       "vector-view-viewsource": "Vere sorgente",
        "actions": "Azione",
        "namespaces": "Namespace",
        "variants": "Variante",
index a3deffa..2aea667 100644 (file)
        "qbmyoptions": "Egne innstillinger",
        "faq": "Ofte stilte spørsmål",
        "faqpage": "Project:Ofte stilte spørsmål",
-       "vector-action-addsection": "Nytt emne",
-       "vector-action-delete": "Slett",
-       "vector-action-move": "Flytt",
-       "vector-action-protect": "Beskytt",
-       "vector-action-undelete": "Gjenopprett",
-       "vector-action-unprotect": "Endre beskyttelse",
-       "vector-view-create": "Opprett",
-       "vector-view-edit": "Rediger",
-       "vector-view-history": "Vis historikk",
-       "vector-view-view": "Les",
-       "vector-view-viewsource": "Vis kilden",
        "actions": "Handlinger",
-       "vector-more-actions": "Mer",
        "namespaces": "Navnerom",
        "variants": "Varianter",
        "navigation-heading": "Navigasjonsmeny",
        "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": "Sider 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",
        "searchall": "alle",
        "showingresults": "Nedenfor vises opptil {{PLURAL:$1|'''ett''' resultat|'''$1''' resultater}} fra og med nummer <b>$2</b>.",
        "showingresultsinrange": "Nedenfor vises opptil {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resulter}} i området #<strong>$2</strong> til #<strong>$3</strong>.",
-       "showingresultsnum": "Nedenfor vises {{PLURAL:$3|'''ett''' resultat|'''$3''' resultater}} fra og med nummer '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' av '''$3'''|Resultat '''$1 - $2''' av '''$3'''}} for '''$4'''",
        "search-nonefound": "Ingen resultater passet til søket.",
        "powersearch-legend": "Avansert søk",
        "tooltip-summary": "Skriv et kort sammendrag",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* CSS plassert i denne fila vil gjelde for alle utseender. */",
-       "monobook.css": "/* CSS i denne fila vil gjelde alle som bruker drakta Monobook */",
        "common.js": "/* Javascript i denne fila vil gjelde for alle drakter. */",
-       "monobook.js": "/* Javascript i denne fila vil gjelde for brukere av drakta Monobook */",
        "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-monobook": "Monobook",
        "markaspatrolleddiff": "Merk som patruljert",
        "markaspatrolledtext": "Merk denne siden som patruljert",
        "markedaspatrolled": "Merket som patruljert",
        "duplicate-defaultsort": "Advarsel: Standardsorteringen «$2» tar over for den tidligere sorteringen «$1».",
        "version": "Versjon",
        "version-extensions": "Installerte utvidelser",
+       "version-skins": "Drakter",
        "version-specialpages": "Spesialsider",
        "version-parserhooks": "Parsertillegg",
        "version-variables": "Variabler",
        "version-antispam": "Søppelpostforebygging",
-       "version-skins": "Drakter",
        "version-other": "Annet",
        "version-mediahandlers": "Mediahåndterere",
        "version-hooks": "Haker",
index 5b5d72e..b5d554d 100644 (file)
        "qbmyoptions": "Veurkeuren",
        "faq": "Vragen die vake esteld wörden",
        "faqpage": "Project:Vragen die vake esteld wörden",
-       "vector-action-addsection": "Niej onderwarp",
-       "vector-action-delete": "Vortdoon",
-       "vector-action-move": "Herneumen",
-       "vector-action-protect": "Beveiligen",
-       "vector-action-undelete": "Weerummeplaotsen",
-       "vector-action-unprotect": "Beveiliging wiezigen",
-       "vector-view-create": "Anmaken",
-       "vector-view-edit": "Bewarken",
-       "vector-view-history": "Geschiedenisse bekieken",
-       "vector-view-view": "Lezen",
-       "vector-view-viewsource": "Brontekste bekieken",
        "actions": "Haandeling",
-       "vector-more-actions": "Meer",
        "namespaces": "Naamruumtes",
        "variants": "Variaanten",
        "navigation-heading": "Navigasiemenu",
        "searchrelated": "verwaant",
        "searchall": "alles",
        "showingresults": "Hieronder {{PLURAL:$1|steet '''1''' resultaot|staon '''$1''' resultaoten}}  <b>$1</b> vanaof nummer <b>$2</b>.",
-       "showingresultsnum": "Hieronder {{PLURAL:$3|steet '''1''' resultaot|staon '''$3''' resultaoten}} vanaof nummer '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultaot '''$1''' van '''$3'''|Resultaoten '''$1 - $2''' van '''$3'''}} veur '''$4'''",
        "search-nonefound": "Der bin gien resultaoten veur de zeukopdrachte.",
        "powersearch-legend": "Uutebreid zeuken",
        "pageinfo-category-pages": "Antal ziejen",
        "pageinfo-category-subcats": "Antal onderkategorieën",
        "pageinfo-category-files": "Antal bestaanden",
-       "skinname-monobook": "Monobook",
        "markaspatrolleddiff": "Zet op nao-ekeken",
        "markaspatrolledtext": "Disse zied is op nao-ekeken ezet",
        "markedaspatrolled": "Op nao-ekeken ezet",
        "duplicate-defaultsort": "Waorschuwing: de standardsortering \"$2\" krig veurrang veur de sortering \"$1\".",
        "version": "Versie",
        "version-extensions": "Uutbreidingen die installeerd bin",
+       "version-skins": "Vormgevingen",
        "version-specialpages": "Spesiale ziejen",
        "version-parserhooks": "Parserhoeken",
        "version-variables": "Variabels",
        "version-antispam": "Veurkoemen van ongewunste bewarkingen",
-       "version-skins": "Vormgevingen",
        "version-api": "Api",
        "version-other": "Overige",
        "version-mediahandlers": "Mediaverwarkers",
index dfdeed7..8811cd0 100644 (file)
        "qbmyoptions": "Instellen",
        "faq": "Faken stellte Fragen",
        "faqpage": "Project:Faken stellte Fragen",
-       "vector-action-addsection": "Thema tofögen",
-       "vector-action-delete": "Wegdoon",
-       "vector-action-move": "Schuven",
-       "vector-action-protect": "Schulen",
-       "vector-action-undelete": "Wedderhalen",
-       "vector-action-unprotect": "Siedenschuul ännern",
-       "vector-view-create": "Opstellen",
-       "vector-view-edit": "Ännern",
-       "vector-view-history": "Historie bekieken",
-       "vector-view-view": "Lesen",
-       "vector-view-viewsource": "Borntext bekieken",
        "actions": "Akschonen",
        "namespaces": "Naamrüüm",
        "variants": "Varianten",
        "searchrelated": "verwandt",
        "searchall": "all",
        "showingresults": "Hier {{PLURAL:$1|is een Resultat|sünd '''$1''' Resultaten}}, anfungen mit #'''$2'''.",
-       "showingresultsnum": "Hier {{PLURAL:$3|is een Resultat|sünd '''$3''' Resultaten}}, anfungen mit #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultaat '''$1''' vun '''$3'''|Resultaten '''$1 - $2''' vun '''$3'''}} för '''$4'''",
        "search-nonefound": "För de Söökanfraag geev dat keen Resultaten.",
        "powersearch-legend": "Betere Söök",
        "tooltip-preferences-save": "Instellungen spiekern",
        "tooltip-summary": "Giff en korte Tosamenfattung in",
        "common.css": "/** CSS-Kood hier binnen warrt för all Stilvörlagen (Skins) inbunnen */",
-       "monobook.css": "/* disse Datei ännern üm de Monobook-Stilvörlaag för de ganze Siet antopassen */",
        "anonymous": "{{PLURAL:$1|Anonym Bruker|Anonyme Brukers}} vun {{SITENAME}}",
        "siteuser": "{{SITENAME}}-Bruker $1",
        "anonuser": "{{SITENAME}} anonym  Bruker user $1",
index df0dc1c..bcce965 100644 (file)
        "qbmyoptions": "मेरो पेज",
        "faq": "धैरै सोधिएका प्रश्नहरु",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "विषय थप्नुहोस",
-       "vector-action-delete": "हटाउने",
-       "vector-action-move": "सार्ने",
-       "vector-action-protect": "सुरक्षित गर्ने",
-       "vector-action-undelete": "हटाएको रद्द गर्ने",
-       "vector-action-unprotect": "सुरक्षा परिवर्तन गर्ने",
-       "vector-view-create": "सृजना गर्ने",
-       "vector-view-edit": "सम्पादन",
-       "vector-view-history": "इतिहास हेर्ने",
-       "vector-view-view": "पढ्ने",
-       "vector-view-viewsource": "स्रोत हेर्ने",
        "actions": "कार्यहरु",
        "namespaces": "नेमस्पेस",
        "variants": "बहुरुपहरु",
        "searchrelated": "सम्बन्धित",
        "searchall": "सबै",
        "showingresults": "देखाउँदै  {{PLURAL:$1|'''१''' नतिजा|'''$1''' नतिजाहरू }} , #'''$2''' बाट सुरुहुने ।",
-       "showingresultsnum": "तल देखाउदै  {{PLURAL:$3|'''१''' नतिजा|'''$3''' नतिजाहरु }}, #'''$2''' बाट सुरुहुने ।",
        "showingresultsheader": "{{PLURAL:$5|नतिजा '''$1''' को '''$3'''|नतिजाहरु '''$1 - $2''' को'''$3'''}}  ,'''$4''' को लागि",
        "search-nonefound": "तपाईँको क्वेरीसँग मेल खाने नतिजाहरू भेटिएनन्",
        "powersearch-legend": "उन्नत खोज",
        "tooltip-preferences-save": "अभिरुचिहरु संग्रह गर्नुहोस्",
        "tooltip-summary": "छोटो सारांश हाल्नुहोस्",
        "common.css": "/* यहाँ राखिएका CSS सबै खोलहरुमा लागु हुनेछन् */",
-       "monobook.css": "/* यहाँ राखिएको CSS ले मोनोबुक स्किनको प्रयोगकर्ताहरुलाई प्रभावित गर्ने छ  */",
-       "vector.css": "/* यहाँ राखिएको CSS ले भेक्टर स्किनको प्रयोगकर्ताहरुलाई प्रभावित गर्ने छ  */",
        "print.css": "/* यहाँ राखिएको CSS मुद्रण नतिजालाई प्रभावित गर्छ  */",
        "anonymous": "{{SITENAME}} का {{PLURAL:$1||}} नाम नभएका सदस्य",
        "siteuser": "{{SITENAME}} प्रयोगकर्ता $1",
        "pageinfo-category-pages": "पृष्ठहरूको संख्या",
        "pageinfo-category-subcats": "उपश्रेणीहरूको संख्या",
        "pageinfo-category-files": "फाइलहरूको संख्या",
-       "skinname-monobook": "मोनोबुक",
-       "skinname-vector": "भेक्टर",
        "markaspatrolleddiff": "गस्ती गरिएको(patrolled) को रुपमा चिनो लगाउने",
        "markaspatrolledtext": "यस पृष्ठलाई गस्ती गरिएको(patrolled) को रुपमा चिनो लगाउने",
        "markedaspatrolled": "गस्ती गरिएको(patrolled) को रुपमा चिनो लगाइयो",
index 403e486..9631879 100644 (file)
        "qbmyoptions": "Mijn pagina's",
        "faq": "Veelgestelde vragen",
        "faqpage": "Project:Veelgestelde vragen",
-       "vector-action-addsection": "Kopje toevoegen",
-       "vector-action-delete": "Verwijderen",
-       "vector-action-move": "Hernoemen",
-       "vector-action-protect": "Beveiligen",
-       "vector-action-undelete": "Terugplaatsen",
-       "vector-action-unprotect": "Beveiliging wijzigen",
-       "vector-view-create": "Aanmaken",
-       "vector-view-edit": "Bewerken",
-       "vector-view-history": "Geschiedenis weergeven",
-       "vector-view-view": "Lezen",
-       "vector-view-viewsource": "Brontekst bekijken",
        "actions": "Acties",
-       "vector-more-actions": "Meer",
        "namespaces": "Naamruimten",
        "variants": "Varianten",
        "navigation-heading": "Navigatiemenu",
        "searchall": "alle",
        "showingresults": "Hieronder {{PLURAL:$1|staat '''1''' resultaat|staan '''$1''' resultaten}} vanaf #'''$2'''.",
        "showingresultsinrange": "Hieronder {{PLURAL:$1|wordt|worden}} maximaal {{PLURAL:$1|<strong>1</strong> resultaat|<strong>$1 </strong>resultaten}} weergegeven in het bereik #<strong>$2</strong> tot #<strong>$3</strong>.",
-       "showingresultsnum": "Hieronder {{PLURAL:$3|staat '''1''' resultaat|staan '''$3''' resultaten}} vanaf #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultaten '''$1 - $2''' van '''$3'''}} voor '''$4'''",
        "search-nonefound": "Er zijn geen resultaten voor uw zoekopdracht.",
        "powersearch-legend": "Uitgebreid zoeken",
        "tooltip-summary": "Voer een korte samenvatting in",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/** CSS die hier wordt geplaatst heeft invloed op alle skins */",
-       "monobook.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Monobook */",
-       "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-autoconfirmed.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op automatisch bevestigde gebruikers */",
        "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 */",
-       "monobook.js": "/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Monobook 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 */",
        "group-bot.js": "/* JavaScript die hier wordt geplaatst heeft alleen invloed op robots */",
        "pageinfo-category-pages": "Aantal pagina's",
        "pageinfo-category-subcats": "Aantal subcategorieën",
        "pageinfo-category-files": "Aantal bestanden",
-       "skinname-monobook": "Monobook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Als gecontroleerd markeren",
        "markaspatrolledtext": "Deze pagina als gecontroleerd markeren",
        "markedaspatrolled": "Gemarkeerd als gecontroleerd",
        "duplicate-defaultsort": "'''Waarschuwing:''' de standaardsortering \"$2\" krijgt voorrang voor de sortering \"$1\".",
        "version": "Versie",
        "version-extensions": "Geïnstalleerde uitbreidingen",
+       "version-skins": "Vormgevingen",
        "version-specialpages": "Speciale pagina's",
        "version-parserhooks": "Parserhooks",
        "version-variables": "Variabelen",
        "version-antispam": "Spampreventie",
-       "version-skins": "Vormgevingen",
        "version-other": "Overige",
        "version-mediahandlers": "Mediaverwerkers",
        "version-hooks": "Hooks",
index 81535a4..40d1bee 100644 (file)
        "qbmyoptions": "Sidene mine",
        "faq": "OSS",
        "faqpage": "Project:OSS",
-       "vector-action-addsection": "Nytt emne",
-       "vector-action-delete": "Slett",
-       "vector-action-move": "Flytt",
-       "vector-action-protect": "Vern",
-       "vector-action-undelete": "Gjenopprett",
-       "vector-action-unprotect": "Endra vern",
-       "vector-view-create": "Opprett",
-       "vector-view-edit": "Endre",
-       "vector-view-history": "Sjå historikken",
-       "vector-view-view": "Les",
-       "vector-view-viewsource": "Sjå kjelda",
        "actions": "Handlingar",
-       "vector-more-actions": "Meir",
        "namespaces": "Namnerom",
        "variants": "Variantar",
        "navigation-heading": "Navigasjonsmeny",
        "searchrelated": "relatert",
        "searchall": "alle",
        "showingresults": "Nedanfor er opp til {{PLURAL:$1|'''eitt'''|'''$1'''}} resultat som byrjar med nummer '''$2''' vist{{PLURAL:$1||e}}.",
-       "showingresultsnum": "Nedanfor er {{PLURAL:$3|'''eitt'''|'''$3'''}} resultat som byrjar med nummer '''$2''' {{PLURAL:$3|vist|viste}}.",
        "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' av '''$3'''|Resultat '''$1 - $2''' av '''$3'''}} for '''$4'''",
        "search-nonefound": "Ingen resultat svarte til førespurnaden.",
        "powersearch-legend": "Avansert søk",
        "filehist-deleteall": "slett alle",
        "filehist-deleteone": "slett",
        "filehist-revert": "rulla attende",
-       "filehist-current": "noverande",
+       "filehist-current": "gjeldande",
        "filehist-datetime": "Dato/klokkeslett",
        "filehist-thumb": "Miniatyrbilete",
        "filehist-thumbtext": "Miniatyrbilete av versjonen frå $1",
        "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. */",
-       "monobook.css": "/* CSS-tekst som vert plassert her, endrar utsjånaden til sidedrakta Monobook */",
        "print.css": "/* CSS i denne fila vil påverke utskriftsversjonen */",
        "common.js": "/* Javascript i denne fila vil gjelde for alle drakter. */",
-       "monobook.js": "/* Javascript i denne fila vil gjelde for brukarar av drakta Monobook */",
        "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-monobook": "MonoBook",
        "markaspatrolleddiff": "Merk som patruljert",
        "markaspatrolledtext": "Merk innhaldssida som patruljert",
        "markedaspatrolled": "Merk som patruljert",
        "duplicate-defaultsort": "Åtvaring: Standardsorteringa «$2» tar over for den tidlegare sorteringa «$1».",
        "version": "Versjon",
        "version-extensions": "Installerte utvidingar",
+       "version-skins": "Draktar",
        "version-specialpages": "Spesialsider",
        "version-parserhooks": "Parsertillegg",
        "version-variables": "Variablar",
        "version-antispam": "Hindring av spam",
-       "version-skins": "Draktar",
        "version-other": "Anna",
        "version-mediahandlers": "Mediahandsamarar",
        "version-hooks": "Tilleggsuttrykk",
diff --git a/languages/i18n/nrm.json b/languages/i18n/nrm.json
new file mode 100644 (file)
index 0000000..e15c5ba
--- /dev/null
@@ -0,0 +1,100 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Crochet.david",
+                       "Nemo bis",
+                       "WikiEoFrEn"
+               ]
+       },
+       "wednesday": "Mêcrédi",
+       "friday": "Vendrédi",
+       "january": "Jaunvyi",
+       "february": "Févryi",
+       "march": "Mar",
+       "april": "Avri",
+       "may_long": "Mouai",
+       "june": "Juin",
+       "july": "Juilet",
+       "august": "Âot",
+       "september": "Setembe",
+       "october": "Octobe",
+       "november": "Novembe",
+       "december": "Décembe",
+       "cancel": "R'nonchi",
+       "qbedit": "Amendaer",
+       "help": "Aîgue",
+       "search": "Trachi",
+       "searchbutton": "Trachi",
+       "history_short": "Historique",
+       "printableversion": "Versioun imprimablle",
+       "edit": "Amendaer",
+       "create": "Criyaer",
+       "editthispage": "Amendaer la page",
+       "create-this-page": "Criyaer la page",
+       "specialpage": "Page espéciâle",
+       "toolbox": "Boête à ôtis",
+       "otherlanguages": "En d'aut's langues",
+       "currentevents": "Nouvelles du jouo",
+       "mainpage": "Aîgue",
+       "mainpage-description": "Page dé garde",
+       "editsection": "amendaer",
+       "editold": "amendaer",
+       "editsectionhint": "Amendaer la sectioun: $1",
+       "red-link-title": "$1 (page à criyaer)",
+       "nstab-user": "Page dé faichonneu",
+       "nstab-special": "Page espéciâle",
+       "badtitle": "Mâovais tite",
+       "login": "Se merqùi",
+       "nav-login-createaccount": "Se merqùi / Coumpte nouvé",
+       "userlogout": "S'n alaer",
+       "gotaccountlink": "Se merqùi",
+       "summary": "Countenun:",
+       "minoredit": "Ch'tî-chîn est un p'tit amendement",
+       "savearticle": "Saôvaer la page",
+       "showdiff": "Mouôntrer l's amendements",
+       "editing": "Amendement de $1",
+       "editundo": "défaire",
+       "searchmenu-exists": "'''I y a eune page \"[[:$1]]\" sur l'outchi''",
+       "searchmenu-new": "'''Criyaer la page \"[[:$1]]\" dauns la Viqùipédie normaunde !'''",
+       "search-result-size": "$1 ({{PLURAL:$2|1 mot|$2 mots}})",
+       "search-suggest": "Veurs-tu dyire: $1",
+       "recentchanges": "Dreins amendements",
+       "recentchanges-label-newpage": "L'amendement a criyaée eune page",
+       "recentchanges-label-minor": "Ch'tî-chîn est un p'tit amendement",
+       "show": "Mouôntrer",
+       "upload": "Chèrgi un dôssyi",
+       "filehist-datetime": "Date/Temps",
+       "filehist-user": "Faichonneu",
+       "randompage": "À dgi l'adèrt",
+       "move": "Déplléchi",
+       "allpagesfrom": "Queri les pages qùi qu'menchent à:",
+       "allarticles": "Touos l's articl'yes",
+       "watchlist": "Ma liste à dgetter",
+       "mywatchlist": "Ma liste à dgetter",
+       "deletepage": "Dénichi la page",
+       "blanknamespace": "(Principâ)",
+       "mycontris": "M's abyinements",
+       "contribslink": "abyinements",
+       "allmessagesname": "Noum",
+       "allmessages-filter-all": "Touot",
+       "allmessages-filter-modified": "Chaungi",
+       "allmessages-prefix": "Faire coulaer par préfiqùi:",
+       "tooltip-pt-preferences": "Préféthences",
+       "tooltip-pt-mycontris": "Eune liste dé v's abyinements",
+       "tooltip-pt-login": "Ou n'êtes pon r'gistré. Vos pou'aez itou vous servi de la Viqùipédie sauns vous merqùi, mais ch'est muus dé se merqùi.",
+       "tooltip-pt-logout": "S'n alaer",
+       "tooltip-ca-edit": "Vos pouvaez amendaer cht'é page-ilo. Merci d'appier sus la préveie, devaunt que de sâovaer.",
+       "tooltip-ca-addsection": "Criyaer eune nouvé section",
+       "tooltip-ca-move": "Déplléchi la page",
+       "tooltip-ca-watch": "Ajouôtez cht'é page-ilo sus vot' liste à gùetti",
+       "tooltip-p-logo": "Viyiz la page dé garde",
+       "tooltip-n-mainpage": "Viyiz la page dé garde",
+       "tooltip-n-mainpage-description": "Viyiz la page dé garde",
+       "tooltip-n-recentchanges": "Eune liste des dreins amendements sur la Viqùipédie/Ouitchipédie en nouormand.",
+       "tooltip-t-upload": "Chèrgi un dôssyi",
+       "tooltip-t-specialpages": "Eune liste des pages espéciâles",
+       "tooltip-t-print": "Versioun imprimablle dé la page",
+       "tooltip-save": "Sâover v's amendements",
+       "autoredircomment": "Èrdirect sus [[$1]]",
+       "specialpages": "Page espéciâle"
+}
index 10c2889..8e77368 100644 (file)
        "qbpageoptions": "Letlakala le",
        "qbmyoptions": "Matlakala a ka",
        "faq": "\"FAQ\"",
-       "vector-action-addsection": "Lokela sererwa",
-       "vector-action-delete": "Phumula",
-       "vector-action-move": "Huduša",
-       "vector-action-protect": "Lota",
-       "vector-view-create": "Hlola",
-       "vector-view-edit": "Fetola",
-       "vector-view-history": "Laetša histori",
-       "vector-view-view": "Bala",
-       "vector-view-viewsource": "Lebelela mothopo",
        "actions": "Ditiro",
        "namespaces": "Di-\"namespace\"",
        "variants": "Di-\"variant\"",
        "searchmenu-exists": "'''Go ena le letlaka la leina la \"[[:$1]]\" go wiki ye.'''",
        "searchmenu-new": "'''Hlola letlakala \"[[:$1]]\" go wiki ye!'''",
        "searchprofile-articles": "Matlakala a diteng",
-       "searchprofile-project": "Thušo le matlaka a diprojeke",
        "searchprofile-images": "Diphatlalatši tša \"multi\"",
        "searchprofile-everything": "Ka moka",
        "searchprofile-advanced": "Maemo-godimo",
        "searchprofile-articles-tooltip": "Fetleka gare ga $1",
-       "searchprofile-project-tooltip": "Fetleka gare ga $1",
        "searchprofile-images-tooltip": "Fetleka difaele",
        "searchprofile-everything-tooltip": "Fetleka matlakala ka moka (le matlakala a dipoledišano)",
        "searchprofile-advanced-tooltip": "Fetleka go di-\"namespace\" tša \"custom\"",
        "prefs-files": "Difaele",
        "youremail": "E-Poso",
        "username": "Mošomiši:",
-       "uid": "Nomoro ya mošomiši:",
        "prefs-memberingroups": "Leloko la {{PLURAL:$1|ya sehlopha|ya dihlopha}}:",
        "yourrealname": "Leina la mmakgonthe:",
        "yourlanguage": "Polelo:",
        "log": "Di-''log''",
        "all-logs-page": "Di-''log'' tša bohle ka moka",
        "allpages": "Matlakala ka moka",
-       "alphaindexline": "$1 goya go $2",
        "nextpage": "Letlakala lago latela ($1)",
        "prevpage": "Letlakala la go feta ($1)",
        "allpagesfrom": "Bontšha matlakala go thoma go :",
index e91fd4e..1d2cd01 100644 (file)
        "qbmyoptions": "Mas opcions",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Apondre un subjècte",
-       "vector-action-delete": "Suprimir",
-       "vector-action-move": "Tornar nomenar",
-       "vector-action-protect": "Protegir",
-       "vector-action-undelete": "Restablir",
-       "vector-action-unprotect": "Suprimir la proteccion",
-       "vector-view-create": "Crear",
-       "vector-view-edit": "Modificar",
-       "vector-view-history": "Veire l'istoric",
-       "vector-view-view": "Legir",
-       "vector-view-viewsource": "Veire la font",
        "actions": "Accions",
        "namespaces": "Espacis de noms",
        "variants": "Variantas",
        "searchall": "Totes",
        "showingresults": "Afichatge de <b>$1</b> resultat{{PLURAL:$1||s}} a partir del n°<b>$2</b>.",
        "showingresultsinrange": "Afichar çaijós fins a {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resultats}} dins la seria #<strong>$2</strong> a #<strong>$3</strong>.",
-       "showingresultsnum": "Afichatge {{PLURAL:$3|d''''1''' resultat|de '''$3''' resultats}} a partir del #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultat '''$1'''|Resultats '''$1 - $2'''}} de '''$3''' per '''$4'''",
        "search-nonefound": "I a pas cap de resultat correspondent a la requèsta.",
        "powersearch-legend": "Recèrca avançada",
        "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. */",
-       "monobook.css": "/* Lo CSS plaçat aicí afectarà los utilizaires del skin Monobook */",
-       "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á. */",
-       "monobook.js": "/* Tot JavaScript aicí serà cargat amb las paginas accedidas pels utilizaires de l’abilhatge MonoBook 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}}",
        "anonuser": "l'utilizaire anonim $1 de {{SITENAME}}",
        "pageinfo-category-pages": "Nombre de paginas",
        "pageinfo-category-subcats": "Nombre de soscategorias",
        "pageinfo-category-files": "Nombre de fichièrs",
-       "skinname-monobook": "Monobook",
        "markaspatrolleddiff": "Marcar coma essent pas un vandalisme",
        "markaspatrolledtext": "Marcar aqueste article coma pas vandalizat",
        "markedaspatrolled": "Marcat coma pas vandalizat",
index 12937ed..b64b5e6 100644 (file)
        "qbmyoptions": "ମୋ ପୃଷ୍ଠାଗୁଡ଼ିକ",
        "faq": "ବାରମ୍ବାର ପଚରାଯାଉଥିବା ପ୍ରଶ୍ନ",
        "faqpage": "Project:ବାରମ୍ବାର ପଚରାଯାଉଥିବା ପ୍ରଶ୍ନ",
-       "vector-action-addsection": "ନୂଆ ଯୋଡ଼ନ୍ତୁ",
-       "vector-action-delete": "ଲିଭାଇବେ",
-       "vector-action-move": "ଘୁଞ୍ଚାଇବେ",
-       "vector-action-protect": "କିଳିବେ",
-       "vector-action-undelete": "ଲିଭାଇବେ ନାହିଁ",
-       "vector-action-unprotect": "କିଳିବେ ନାହିଁ",
-       "vector-view-create": "ତିଆରି କରନ୍ତୁ",
-       "vector-view-edit": "ସମ୍ପାଦନା (Edit)",
-       "vector-view-history": "ଇତିହାସ",
-       "vector-view-view": "ପଢ଼ନ୍ତୁ",
-       "vector-view-viewsource": "ସୋର୍ସ ଦେଖନ୍ତୁ",
        "actions": "କାର୍ଯ୍ୟକ୍ରମ",
        "namespaces": "ନେମସ୍ପେସ",
        "variants": "ନିଆରା",
        "difference-missing-revision": "($1) {{PLURAL:$2|was|were}}ର ଭିନ୍ନତା {{PLURAL:$2|One revision|$2 revisions}} ମିଳିଲା ନାହିଁ ।\n\nପୁରୁଣା ହୋଇଯାଇଥିବା ଇତିହାସ ଲିଙ୍କ ଯାହା ଏକ ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାକୁ ଦିଆଯାଇଥିବାରୁ ଏହା ସାଧାରଣତଃ ହୋଇଥାଏ ।\nଅଧିକ ବିବରଣୀ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]ରେ ମିଳିପାରିବ ।",
        "searchresults": "ଖୋଜା ଫଳାଫଳ",
        "searchresults-title": "\"$1\" ପାଇଁ ଖୋଜିବାରୁ ମିଳିଲା",
-       "toomanymatches": "ବହୁଗୁଡ଼ିଏ ମେଳ ଲେଉଟିଆସିଛି, ଦୟାକରି ନୂଆ ପ୍ରଶ୍ନଟିଏ ସହିତ ଖୋଜନ୍ତୁ ।",
        "titlematches": "ପୃଷ୍ଠାଟିର ନାମ ମିଶୁଅଛି",
        "textmatches": "ପୃଷ୍ଠାଟିର ଲେଖା ମିଶୁଅଛି",
        "notextmatches": "ପୃଷ୍ଠାଟିର ନାମ ମିଶୁନାହିଁ",
        "searchrelated": "ଯୋଡ଼ା",
        "searchall": "ସବୁ",
        "showingresults": "ତଳେ {{PLURAL:$1|'''ଗୋଟିଏ'''  ଫଳାଫଳ|'''$1'''ଟି ଫଳାଫଳ}} ଦେଖାଉଛୁ ଯାହା #'''$2'''ରେ ଆରମ୍ଭ ହୋଇଅଛି ।",
-       "showingresultsnum": "ତଳେ {{PLURAL:$3|ଗୋଟିଏ ଫଳାଫଳ|'''$3'''ଟି ଫଳାଫଳ}} ଦେଖାଉଛୁ ଯାହା #'''$2'''ରେ ଆରମ୍ଭ ହୋଇଅଛି ।",
        "showingresultsheader": "'''$4''' ପାଇଁ {{PLURAL:$5|'''$3'''ର '''$1''' ଫଳ |'''$3'''ର '''$1 - $2''' ଫଳ }}",
        "search-nonefound": "ଆପଣ ଖୋଜିଥିବା ପ୍ରଶ୍ନ ପାଇଁ କିଛି ଫଳ ମିଳିଲା ନାହିଁ ।",
        "powersearch-legend": "ଗହିର ଖୋଜା",
index 0b11f46..492a1f4 100644 (file)
        "qbmyoptions": "Мæ фæрстæ",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Нæуæг ныхас бакæнын",
-       "vector-action-delete": "Схафын",
-       "vector-action-move": "Ном ивын",
-       "vector-action-protect": "Сæхгæнын",
-       "vector-action-undelete": "Рацаразын",
-       "vector-action-unprotect": "Ивын хъахъхъæд",
-       "vector-view-create": "Скæнын",
-       "vector-view-edit": "Ивын",
-       "vector-view-history": "Истори",
-       "vector-view-view": "Кæсын",
-       "vector-view-viewsource": "Код кæсын",
        "actions": "Архайдтæ",
        "namespaces": "Номдæттæ",
        "variants": "Варианттæ",
        "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-custom-js": "Хиæвæрд JavaScript",
        "youremail": "E-mail:",
        "username": "{{GENDER:$1|Фæсномыг}}:",
-       "uid": "{{GENDER:$1|Архайæджы}} ID:",
        "yourrealname": "Æцæг ном:",
        "yourlanguage": "Æвзаг:",
        "yourvariant": "Мидисы æвзаджы вариант:",
        "log": "Логтæ",
        "all-logs-page": "Иууылдæр логтæ",
        "allpages": "Иууылдæр фæрстæ",
-       "alphaindexline": "$1 (уыдоны ’хсæн цы уацтæ ис, фен) $2",
        "nextpage": "Фæдылдзог фарс ($1)",
        "prevpage": "Раздæры фарс ($1)",
        "allarticles": "Иууылдæр фæрстæ",
        "block": "Архайæгыл хъоды кæнын",
        "blockip": "Бахъоды кæнын",
        "blockip-legend": "Архайæгыл хъоды кæнын",
-       "ipadressorusername": "IP адрис кæнæ фæсномыг:",
+       "ipaddressorusername": "IP адрис кæнæ фæсномыг:",
        "ipbexpiry": "Фæуыны афон:",
        "ipbreason": "Аххос:",
        "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",
        "lastmodifiedatby": "Ацы фарс фæстаг хатт фæивта $3, $1, $2 сахатыл.",
        "others": "æндæртæ",
        "spamprotectiontitle": "Спамы ныхмæ фильтр",
-       "skinname-cologneblue": "Кёльны æрхæндæг",
-       "skinname-monobook": "Моно-чиныг",
        "previousdiff": "← Зæронддæр ивд",
        "nextdiff": "Фæстæдæр ивд →",
        "thumbsize": "Къаддæргонды бæрц:",
        "svg-long-desc": "SVG файл, номиналон $1 × $2 пикселы, файлы бæрц: $3",
        "show-big-image": "Оригиналы файл",
        "newimages": "Ног нывты галерей",
-       "showhidebots": "(роботты куыст $1)",
        "ilsubmit": "Агурын",
        "bydate": "рæстæгмæ гæсгæ",
        "bad_image_list": "Формат у ахæм:\n\nÆрмæстдæр рæгъон рæнхъытæ (рæнхъытæ, кæдон байдауынц * символæй) нымады кæнынц.\nФыццаг æрвитæн рæнхъы хъуамæ æрвита æвзæр файлмæ.\nИннæ æрвитæнтæ уыцы рæнхъы нымады кæнынц куыд уæлвæткытæ, кæдон сты фæрстæ кæдæм ис бар бавæрын файл.",
index 3746ad8..82754c4 100644 (file)
        "qbmyoptions": "ਮੇਰੇ ਸਫ਼ੇ",
        "faq": "ਅਕਸਰ ਪੁੱਛੇ ਜਾਂਦੇ ਸੁਆਲ",
        "faqpage": "Project:ਸਵਾਲ-ਜਵਾਬ",
-       "vector-action-addsection": "ਵਿਸ਼ਾ ਜੋੜੋ",
-       "vector-action-delete": "ਹਟਾਓ",
-       "vector-action-move": "ਭੇਜੋ",
-       "vector-action-protect": "ਸੁਰੱਖਿਆ",
-       "vector-action-undelete": "ਹਟਾਉਣਾ-ਵਾਪਸ",
-       "vector-action-unprotect": "ਸੁਰੱਖਿਆ ਬਦਲੋ",
-       "vector-view-create": "ਬਣਾਓ",
-       "vector-view-edit": "ਸੋਧੋ",
-       "vector-view-history": "ਅਤੀਤ ਵੇਖੋ",
-       "vector-view-view": "ਪੜ੍ਹੋ",
-       "vector-view-viewsource": "ਸਰੋਤ ਵੇਖੋ",
        "actions": "ਕਾਰਵਾਈਆਂ",
        "namespaces": "ਨਾਮਸਥਾਨ",
        "variants": "ਬਦਲ",
        "diff-empty": "(ਕੋਈ ਫ਼ਰਕ ਨਹੀਂ)",
        "searchresults": "ਖੋਜ ਨਤੀਜੇ",
        "searchresults-title": "\"$1\" ਲਈ ਖੋਜ ਨਤੀਜੇ",
-       "toomanymatches": "ਬਾਹਲੇ ਮੇਲ ਮਿਲੇ ਹਨ, ਕਿਰਪਾ ਕਰਕੇ ਕੋਈ ਹੋਰ ਪੁੱਛ-ਗਿੱਛ ਵਰਤੋ",
        "titlematches": "ਆਰਟੀਕਲ ਟੈਕਸਟ ਮਿਲਦਾ",
        "textmatches": "ਸਫ਼ੇ ਦੀ ਲਿਖਤ ਮੇਲ ਖਾਂਦੀ ਹੈ",
        "notextmatches": "ਕਿਸੇ ਸਫ਼ੇ ਦੀ ਲਿਖਤ ਮੇਲ ਨਹੀਂ ਖਾਂਦੀ",
        "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:\n$1|'''1''' ਨਤੀਜਾ|'''$1''' ਤੱਕ ਨਤੀਜੇ}} ਵਖਾਓ।",
-       "showingresultsnum": "ਹੇਠਾਂ #'''$2''' ਨਾਲ਼ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ {{PLURAL:\n$3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
        "showingresultsheader": "'''$4''' ਵਾਸਤੇ {{PLURAL:$5|'''$3''' ਵਿੱਚੋਂ '''$1''' ਨਤੀਜੇ|'''$3''' ਵਿੱਚੋਂ '''$1 - $2''' ਨਤੀਜੇ}}",
        "search-nonefound": "ਤੁਹਾਡੀ ਖੋਜ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ ਮਿਲੇ।",
        "powersearch-legend": "ਤਕਨੀਕੀ ਖੋਜ",
        "allowemail": "ਹੋਰ ਯੂਜ਼ਰਾਂ ਤੋਂ ਈਮੇਲ ਯੋਗ ਕਰੋ",
        "prefs-searchoptions": "ਖੋਜ",
        "prefs-namespaces": "ਥਾਂ-ਨਾਮ",
-       "defaultns": "ਨਹੀਂ ਤਾਂ ਇਹਨਾਂ ਥਾਂ-ਨਾਂਵਾਂ ਵਿਚ ਖੋਜੋ:",
        "default": "ਮੂਲ",
        "prefs-files": "ਫ਼ਾਈਲਾਂ",
        "prefs-custom-css": "ਰਿਵਾਇਤੀ CSS",
        "prefs-emailconfirm-label": "ਈ-ਮੇਲ ਪੁਸ਼ਟੀ:",
        "youremail": "ਈ-ਮੇਲ:",
        "username": "{{GENDER:$1|ਯੂਜ਼ਰਨਾਂ}}:",
-       "uid": "{{GENDER:$1|User}} ਆਈਡੀ:",
        "prefs-memberingroups": "{{PLURAL:$1|ਗਰੁੱਪ|ਗਰੁੱਪਾਂ}} ਦਾ ਮੈਂਬਰ:",
        "prefs-registration": "ਰਜਿਸਟਰੇਸ਼ਨ ਸਮਾਂ:",
        "yourrealname": "ਅਸਲੀ ਨਾਂ:",
        "log-title-wildcard": "ਇਸ ਲਿਖਤ ਨਾਲ਼ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ ਸਿਰਲੇਖ ਖੋਜੋ",
        "showhideselectedlogentries": "ਚਿੱਠੇ ਦੇ ਚੁਣੇ ਹੋਏ ਦਾਖ਼ਲੇ ਵਖਾਓ/ਲੁਕਾਓ",
        "allpages": "ਸਭ ਸਫ਼ੇ",
-       "alphaindexline": "$1 ਤੋਂ $2",
        "nextpage": "ਅਗਲਾ ਸਫ਼ਾ ($1)",
        "prevpage": "ਪਿਛਲਾ ਸਫ਼ਾ ($1)",
        "allpagesfrom": "ਇਸਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ ਸਫ਼ੇ ਵਿਖਾਓ:",
        "pageinfo-category-pages": "ਸਫ਼ਿਆਂ ਦੀ ਗਿਣਤੀ",
        "pageinfo-category-subcats": "ਉਪ-ਸ਼੍ਰੇਣੀਆਂ ਦੀ ਗਿਣਤੀ",
        "pageinfo-category-files": "ਫ਼ਾਈਲਾਂ ਦੀ ਗਿਣਤੀ",
-       "skinname-monobook": "ਮੋਨੋਬੁੱਕ",
        "previousdiff": "← ਪੁਰਾਣੀ ਤਬਦੀਲੀ",
        "nextdiff": "ਨਵੀਂ ਤਬਦੀਲੀ →",
        "thumbsize": "ਥੰਮਨੇਲ ਆਕਾਰ:",
index 9b49369..3dd109b 100644 (file)
        "qbmyoptions": "Deng kakung bulung",
        "faq": "Maralas a Kukutang (MAK)",
        "faqpage": "Project:MAK",
-       "vector-action-addsection": "Dagdagan ing pisasabian",
-       "vector-action-delete": "Buran",
-       "vector-action-move": "Iyalis",
-       "vector-action-protect": "Protectan/kambilan",
-       "vector-action-undelete": "Isubli/iurung ya pangabura",
-       "vector-action-unprotect": "Idayu ya panga-protecta",
-       "vector-view-create": "Maglalang",
-       "vector-view-edit": "Alilan",
-       "vector-view-history": "Lawen ya ing amlat",
-       "vector-view-view": "Basan",
-       "vector-view-viewsource": "Lawen ya ing pikuanan",
        "actions": "↓Ding kilus",
        "namespaces": "Karinanlagiu",
        "variants": "Aliwapa",
        "editundo": "iurung",
        "searchresults": "Ding linual (resulta) king pamanintun",
        "searchresults-title": "Resulta ning pamanintun king \"$1\"",
-       "toomanymatches": "Masiadu lang dakal deng tinud (matches); subukan meng alilan ing kekang kutang (query)",
        "titlematches": "Deng tinud/mipareu kareng bansag bulung (page title matches)",
        "textmatches": "Deng kapareu na king kasulatan (text) da reng bulung",
        "notextmatches": "Alang tinud/pareu kareng bansag bulung (no page title matches)",
        "searchmenu-exists": "'''Atin bulung a mikilagiung \"[[:$1]]\" keng wiking ini.'''",
        "searchmenu-new": "↓'''Maglalang kang bulung \"[[:$1]] keng wiking ini!'''",
        "searchprofile-articles": "↓Kalamnan bulung",
-       "searchprofile-project": "↓Saup ampong bulung proyectu",
        "searchprofile-images": "↓Dakalmedia",
        "searchprofile-everything": "Eganagana",
        "searchprofile-articles-tooltip": "Paintunan king$1",
        "searchrelated": "kaugne",
        "searchall": "eganagana",
        "showingresults": "Ing/ding {{PLURAL:$1|'''1''' a resulta|'''$1''' resulta}} manibatan king #'''$2'''.",
-       "showingresultsnum": "Ing/ding {{PLURAL:$3|'''1''' a resulta|'''$3''' resulta}} manibatan king #'''$2'''.",
        "powersearch-legend": "Espesial a pamanintun",
        "powersearch-ns": "Maintun ka kareng namespace:",
        "search-external": "Pamanintun king kilual",
        "servertime": "Oras king server (server time)",
        "guesstimezone": "Pakibatan ya manibat king browser",
        "allowemail": "Pabustan ya ing e-mail ibat karing aliwang talagamit",
-       "defaultns": "Paintunan ya karening pirinan lagyu (namespaces) nung alang mepili:",
        "default": "alang mepili",
        "prefs-files": "Simpan (files)",
        "youremail": "Ing kekang e-mail:",
        "username": "Talagamitlagyu:",
-       "uid": "Ing kekang user ID:",
        "yourrealname": "Tutung lagyu:",
        "yourlanguage": "Amanu:",
        "yournick": "Pirma (Signature):",
        "logempty": "Ala yang kapareu (matching items) king tala (log).",
        "log-title-wildcard": "Maintun bansag (title) magumpisa king sulat a ini",
        "allpages": "Deng eganaganang bulung",
-       "alphaindexline": "$1 papuntang $2",
        "nextpage": "Tutuking bulung ($1)",
        "prevpage": "Minunang bulung ($1)",
        "allpagesfrom": "Ipakit la reng bulung manibat:",
        "tooltip-undo": "Ing \"balikgawan (undo)\" susubli ne ing edit at bubusni ne ing edit form king pasinag mode.\nPaintulutan na ing pamandagdag king sangkan king sampulung (''summary'').",
        "tooltip-summary": "↓Palub kang makuyad a kabilugan",
        "common.css": "/** CSS mikabit keni maging mabisa ya karing eganaganang pabalat */",
-       "monobook.css": "/* CSS a mikabit keni miapectuan la reng gagamit king Monobook a pabalat */",
        "common.js": "/* Agiang nanung JavaScript a atiu keni misampa la kareng eganaganang gagamit balang misampang bulung. */",
        "anonymous": "Ing/Deng gagamit king {{SITENAME}} a e pepakilala.",
        "siteuser": "talagamit ning {{SITENAME}} $1",
index 31f6ecb..f780a0a 100644 (file)
        "qbmyoptions": "Mes paches",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Rajouter un sujeut",
-       "vector-action-delete": "Défacer",
-       "vector-action-move": "Canger ch'nom",
-       "vector-action-protect": "Garantir",
-       "vector-action-undelete": "N'poin défacher",
-       "vector-action-unprotect": "Canger l'garantie",
-       "vector-view-create": "Créer",
-       "vector-view-edit": "Éditer",
-       "vector-view-history": "Vir l'histoère",
-       "vector-view-view": "Lire",
-       "vector-view-viewsource": "Vir l'source",
        "actions": "Acchons",
        "namespaces": "Éspaces d'chés noms",
        "variants": "Ércanjantes",
        "searchmenu-exists": "'''Il y o eune pache lonmée « [[:$1]] » édseur ch'wiki'''",
        "searchmenu-new": "'''Créer l'pache « [[:$1|$1]] » édseur ech wiki !'''",
        "searchprofile-articles": "Paches d'étnu",
-       "searchprofile-project": "Paches d’aïude et pi d'prodjé",
        "searchprofile-images": "Multimédia",
        "searchprofile-everything": "Tout",
        "searchprofile-advanced": "Értrache avanchée",
        "searchprofile-articles-tooltip": "tracher dins $1",
-       "searchprofile-project-tooltip": "Tracher dins $1",
        "searchprofile-images-tooltip": "Tracher des fichiés multimédias",
        "searchprofile-everything-tooltip": "Tracher dins tout ch'wikipédia (et ochi dins chés paches éd distchucion)",
        "searchprofile-advanced-tooltip": "Couésir chés éspaches d'noms pour l'értrache",
        "timezoneregion-europe": "Urope",
        "youremail": "Imèle:",
        "username": "Nom d'uzeu:",
-       "uid": "ID dech uzeu:",
        "prefs-memberingroups": "{{GENDER:$2|Mimbe}}  {{PLURAL:$1|du groupe|des groupes}}:",
        "yourrealname": "Vrai nom:",
        "yourlanguage": "Langache:",
        "booksources-go": "Aler",
        "log": "Gasètes",
        "allpages": "Tertous chés paches",
-       "alphaindexline": "$1 à $2",
        "prevpage": "Pache édvant ($1)",
        "allpagesfrom": "Afiquer chés paches éq partent à:",
        "allpagesto": "Foaire vir chés paches qui s'términette à:",
index 9f15208..036d5c4 100644 (file)
        "qbmyoptions": "Mei Bledder",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-delete": "Verwische",
-       "vector-action-move": "Ziehe",
-       "vector-action-protect": "Schitze",
-       "vector-view-create": "Schtaerte",
-       "vector-view-edit": "Ennere",
-       "vector-view-history": "Gschicht zeige",
-       "vector-view-view": "Lese",
        "namespaces": "Blatznaame",
        "errorpagetitle": "Mischteek",
        "returnto": "Zerick zum Blatt $1.",
        "searchmenu-new": "'''Schtaert des Blatt „[[:$1|$1]]“ uf dem Wiki.'''",
        "searchprofile-everything": "Abaddiche",
        "searchprofile-articles-tooltip": "Uffgucke in $1",
-       "searchprofile-project-tooltip": "Uffgucke in $1",
        "searchprofile-images-tooltip": "Nooch Feils uffgucke",
        "search-result-size": "$1 ({{PLURAL:$2|1 Wadd|$2 Wadde}})",
        "search-redirect": "(Weiderleiding vun „$1“)",
        "prefs-custom-js": "JavaScript vum Yuuser",
        "youremail": "E-Poschde:",
        "username": "{{GENDER:$1|Yuuser-Naame}}:",
-       "uid": "{{GENDER:$1|Yuuser-ID}}:",
        "prefs-memberingroups": "{{GENDER:$2|Mitglied}} vun de {{PLURAL:$1|Yuuser-Druppe|Yuuser-Druppe}}:",
        "yourlanguage": "Schprooch:",
        "yourgender": "Geschlecht:",
        "speciallogtitlelabel": "Titel:",
        "log": "Logbicher",
        "allpages": "Alle Bledder",
-       "alphaindexline": "$1 bis $2",
        "nextpage": "Neegschtes Blatt ($1)",
        "prevpage": "Letscht Blatt ($1)",
        "allarticles": "Alle Bledder",
        "block": "Yuuser aabinne",
        "blockip": "Yuuser aabinne",
        "blockip-legend": "Yuuser aabinne",
-       "ipadressorusername": "IP-Adress odder Yuusernaame:",
+       "ipaddressorusername": "IP-Adress odder Yuusernaame:",
        "ipbreason": "Grund:",
        "ipbsubmit": "Daen Yuuser aabinne",
        "ipbother": "Annere Zeit (englisch):",
        "nextdiff": "Zum neegschte Versionsunnerschidd →",
        "widthheightpage": "$1 × $2, {{PLURAL:$3|1 Blatt|$3 Bledder}}",
        "file-info-size": "$1 × $2 Pixel, Daadegrees: $3, MIME-Typ: $4",
-       "showhidebots": "(Bots $1)",
        "noimages": "Keene Feils gfunne.",
        "ilsubmit": "Guck uff",
        "seconds": "{{PLURAL:$1|$1 Sekund|$1 Sekunde}}",
index 4a7cb6d..c5b47ac 100644 (file)
        "qbpageoptions": "Die Said",
        "qbmyoptions": "Moi Saide",
        "faq": "Ofd gschdeldi Froche",
-       "vector-action-addsection": "Abschnidd dzufiesche",
-       "vector-action-delete": "Lesche",
-       "vector-action-move": "Vaschiewe",
-       "vector-action-protect": "Schidze",
-       "vector-action-undelete": "Zriggbringe",
-       "vector-view-create": "Õleesche",
-       "vector-view-edit": "Drõ schaffe",
-       "vector-view-history": "Dadaigschischd",
-       "vector-view-view": "Lese",
-       "vector-view-viewsource": "Gwelltegschd zaische",
        "actions": "Maßnõhme",
        "namespaces": "Nõmensreum",
        "variants": "Tibbe",
        "search-interwiki-default": "Eagewnis vun $1:",
        "search-interwiki-more": "(meh)",
        "search-relatedarticle": "Vawond",
-       "searcheverything-enable": "Gugg iwwaraal",
        "searchrelated": "vawond",
        "searchall": "alle",
        "showingresultsheader": "{{PLURAL:$5|Eagewnis '''$1''' vun '''$3'''|Eagewnis '''$1–$2''' vun '''$3'''}} fa '''$4'''",
index 323ec79..c6b9987 100644 (file)
        "qbmyoptions": "Moje strony",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Dodaj temat",
-       "vector-action-delete": "Usuń",
-       "vector-action-move": "Przenieś",
-       "vector-action-protect": "Zabezpiecz",
-       "vector-action-undelete": "Odtwórz",
-       "vector-action-unprotect": "Zmień zabezpieczenie",
-       "vector-view-create": "Utwórz",
-       "vector-view-edit": "Edytuj",
-       "vector-view-history": "Wyświetl historię",
-       "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",
        "searchall": "wszystkie",
        "showingresults": "Poniżej znajduje się lista {{PLURAL:$1|z '''1''' wynikiem|'''$1''' wyników}}, rozpoczynając od wyniku numer '''$2'''.",
        "showingresultsinrange": "Poniżej wyświetlono co najwyżej {{PLURAL:$1|<strong>1</strong> wynik|<strong>$1</strong> wyniki|<strong>$1</strong> wyników}} w zakresie od <strong>$2</strong> do <strong>$3</strong>.",
-       "showingresultsnum": "Poniżej znajduje się lista {{PLURAL:$3|z '''1''' wynikiem|'''$3''' wyników}}, rozpoczynając od wyniku numer '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Wynik '''$1''' z '''$3'''|Wyniki '''$1 – $2''' z '''$3'''}} dla '''$4'''",
        "search-nonefound": "Brak wyników spełniających kryteria podane w zapytaniu.",
        "powersearch-legend": "Wyszukiwanie zaawansowane",
        "tooltip-summary": "Wpisz krótki opis",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* Umieszczony tutaj kod CSS zostanie zastosowany we wszystkich skórkach */",
-       "monobook.css": "/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Książka */",
-       "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-autoconfirmed.css": "/* CSS tutaj umieszczony będzie dotyczyć tylko automatycznie zatwierdzonych użytkowników */",
        "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. */",
-       "monobook.js": "/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Książka */",
-       "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",
        "anonuser": "niezalogowany użytkownik {{GRAMMAR:D.lp|{{SITENAME}}}} – $1",
        "pageinfo-category-pages": "Liczba stron",
        "pageinfo-category-subcats": "Liczba podkategorii",
        "pageinfo-category-files": "Liczba plików",
-       "skinname-monobook": "Książka",
-       "skinname-vector": "Wektor",
        "markaspatrolleddiff": "oznacz edycję jako „sprawdzoną”",
        "markaspatrolledtext": "Oznacz tę stronę jako „sprawdzoną”",
        "markedaspatrolled": "Sprawdzone",
        "duplicate-defaultsort": "Uwaga: Domyślnym kluczem sortowania będzie „$2” i zastąpi on wcześniej wykorzystywany klucz „$1”.",
        "version": "Wersja oprogramowania",
        "version-extensions": "Zainstalowane rozszerzenia",
+       "version-skins": "Zainstalowane skórki",
        "version-specialpages": "Strony specjalne",
        "version-parserhooks": "Haki analizatora składni (ang. parser hooks)",
        "version-variables": "Zmienne",
        "version-antispam": "Ochrona przed spamem",
-       "version-skins": "Skórki",
        "version-other": "Pozostałe",
        "version-mediahandlers": "Wtyczki obsługi mediów",
        "version-hooks": "Haki (ang. hooks)",
        "version-hook-name": "Nazwa haka (ang. hook name)",
        "version-hook-subscribedby": "Zapotrzebowany przez",
        "version-version": "(Wersja $1)",
+       "version-no-ext-name": "[bez nazwy]",
        "version-license": "Licencja MediaWiki",
        "version-ext-license": "Licencja",
        "version-ext-colheader-name": "Rozszerzenie",
+       "version-skin-colheader-name": "Skórka",
        "version-ext-colheader-version": "Wersja",
        "version-ext-colheader-license": "Licencja",
        "version-ext-colheader-description": "Opis",
index c58c9ab..38a7b14 100644 (file)
        "qbmyoptions": "Mie pàgine",
        "faq": "Chestion frequente",
        "faqpage": "Project:Soèns An Ciamo",
-       "vector-action-addsection": "Gionté n'argoment",
-       "vector-action-delete": "Scancelé",
-       "vector-action-move": "Tramudé",
-       "vector-action-protect": "Protege",
-       "vector-action-undelete": "Arcuperé",
-       "vector-action-unprotect": "Cangé la protession",
-       "vector-view-create": "Creé",
-       "vector-view-edit": "Modifiché",
-       "vector-view-history": "Smon-e la stòria",
-       "vector-view-view": "Lese",
-       "vector-view-viewsource": "Vëdde la sorgiss",
        "actions": "Assion",
        "namespaces": "Spassi nominaj",
        "variants": "Variant",
        "searchall": "tuti",
        "showingresults": "Ambelessì-sota a treuva fin a {{PLURAL:$1|'''1'''|'''$1'''}} arzultà, a parte dal nùmer #'''$2'''.",
        "showingresultsinrange": "Smon-e sì-sota fin-a a {{PLURAL:$1|<strong>1</strong>|<strong>$1</strong>}} arzultà ant la serie da #<strong>$2</strong> a #<strong>$3</strong>.",
-       "showingresultsnum": "Ambelessì-sota a treuva {{PLURAL:$3|'''1'''|'''$3'''}} arzultà a parte da #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Arzultà '''$1''' ëd '''$3'''|Arzultà '''$1 - $2''' ëd '''$3'''}} për '''$4'''",
        "search-nonefound": "A-i é gnun arzultà për l'arserca.",
        "powersearch-legend": "Arserca avansà",
        "tooltip-preferences-save": "Salvé ij sò gust",
        "tooltip-summary": "Anserì un curt resumé",
        "common.css": "/** Ël còdes CSS che as buta ambelessì a resta dovrà ant tute le \"facie\" */",
-       "monobook.css": "/* cangé st'archivi-sì për modifiché la formatassion dël sit antregh */",
        "common.js": "/* Ël còdes JavaScript ch'as buta ambelessì a ven carià da vira utent për vira pàgina */",
-       "monobook.js": "/* Ës messagi-sì as dovrìa pa pì dovrelo; a sò pòst ch'a dòvra [[MediaWiki:common.js]] */",
        "anonymous": "{{PLURAL:$1|Utent|Utent}} anònim ëd {{SITENAME}}",
        "siteuser": "$1, utent ëd {{SITENAME}}",
        "anonuser": "l'utent anònim $1 ëd {{SITENAME}}",
        "duplicate-defaultsort": "'''Atension:''' La ciav d'ordinament ëstàndard «$2» a pija ël pòst ëd cola ëd prima «$1».",
        "version": "Version",
        "version-extensions": "Estension anstalà",
+       "version-skins": "Pej",
        "version-specialpages": "Pàgine speciaj",
        "version-parserhooks": "Gancio dël dëscompositor",
        "version-variables": "Variàbij",
        "version-antispam": "Prevension dla rumenta",
-       "version-skins": "Pej",
        "version-other": "Àutr",
        "version-mediahandlers": "Gestor multimojen",
        "version-hooks": "Gancio",
index 941ef81..3029c96 100644 (file)
        "qbmyoptions": "میرے صفے",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "مضمون پاؤ",
-       "vector-action-delete": "مکاؤ",
-       "vector-action-move": "ٹرو",
-       "vector-action-protect": "بچاؤ",
-       "vector-action-undelete": "واپس لیاؤ",
-       "vector-action-unprotect": "تبدیلی بچاؤ",
-       "vector-view-create": "بناؤ",
-       "vector-view-edit": "لکھو",
-       "vector-view-history": "تریخ وکھاؤ",
-       "vector-view-view": "پڑھو",
-       "vector-view-viewsource": "ویکھو",
        "actions": "کم",
        "namespaces": "ناواں دی جگہ:",
        "variants": "قسماں",
        "diff-multi-manyusers": "({{انیک:$1|اک وشکارلی ریوین|$1 وشکارلیاں ریویناں}} توں ود $2 {{انیک:$2|ورتن والا|ورتن والا}} نئیں دسی گئی)",
        "searchresults": "کھوج دا نتارا",
        "searchresults-title": "\"$1\" دے کھوج نتارے",
-       "toomanymatches": "چوکھے سارے رلدے جوڑے سامنے آے نیں، اک ہور کھوج دی کوشش کرو۔",
        "titlematches": "صفے دا سرناواں رلدا اے",
        "textmatches": "صفہ لکھت رلدا",
        "notextmatches": "کوئی صفح نئیں لبیا",
        "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'''.",
-       "showingresultsnum": "تھلے دسدا اے {{PLURAL:$3|'''1''' نتیجہ|'''$3''' نتیجے}} #'''$2''' توں ٹرن والے۔",
        "showingresultsheader": "{{PLURAL:$5|نتیجہ '''$1''' دا '''$3'''|نتیجے '''$1 - $2''' دے '''$3'''}} لئی '''$4'''",
        "search-nonefound": "سوال نال رلدے کوئی نتارے نئیں سن۔",
        "powersearch-legend": "ہور کھوج",
        "allowemail": "دوجے ورتن آلیاں توں ای-میل آن دیو",
        "prefs-searchoptions": "چنوتیاں کھوجو",
        "prefs-namespaces": "ناواں دی جگہ:",
-       "defaultns": "نئیں تے ایناں ناں تھاواں تے کھوج کرو:",
        "default": "ڈیفالٹ",
        "prefs-files": "فائلاں",
        "prefs-custom-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 3e282a2..eb0d128 100644 (file)
        "qbmyoptions": "Τ' εμά τα σελίδας",
        "faq": "Πολλά ερωτήσεις (FAQ)",
        "faqpage": "Project:Πολλά ερωτήσεις (FAQ)",
-       "vector-action-delete": "Σβήσον",
-       "vector-action-move": "Ετεροχλάεμαν",
-       "vector-action-protect": "Ασπάλιγμαν",
-       "vector-action-undelete": "Κλώσιμον",
-       "vector-action-unprotect": "Άνοιγμαν",
-       "vector-view-create": "Ποίσον",
-       "vector-view-edit": "Άλλαξον",
-       "vector-view-history": "Τερέστεν ιστορίαν",
-       "vector-view-view": "Δεάβασον",
-       "vector-view-viewsource": "Τερέστεν κωδικόν",
        "actions": "Ενέργειας",
        "namespaces": "Περιοχάς",
        "variants": "Παραλλαγάς",
        "prefs-files": "Αρχεία",
        "youremail": "Ελεκτρονικόν μένεμαν:",
        "username": "Όνεμα χρήστε:",
-       "uid": "ID Χρήστε:",
        "yourrealname": "Πραματικόν όνεμαν:",
        "yourlanguage": "Τ' εσόν η γλώσσαν:",
        "yournick": "Υπογραφή:",
        "log": "Αρχεία",
        "all-logs-page": "Όλεα τα δημόσεα αρχεία",
        "allpages": "Όλεα τα σελίδας",
-       "alphaindexline": "$1 ους $2",
        "nextpage": "Επόμενον σελίδα ($1)",
        "prevpage": "Προηγούμενον σελίδα ($1)",
        "allpagesfrom": "Τέρεμαν σελιδίων ντ' εσκαλών'νε ασό:",
        "show-big-image": "Τζιπ τρανόν ανάλυση",
        "newimages": "Τερέστεν τα καινούρεα φωτογραφίας",
        "newimages-legend": "Φίλτρον",
-       "showhidebots": "($1 μποτ)",
        "ilsubmit": "Αράεμαν",
        "bydate": "ημερομηνίας",
        "bad_image_list": "Η σύνταξην εν αέτς:\n\nΤα αντικείμενα τη λίστας (τα γραμμάς ντ' αχπάσκουνταν με *) και μόνον τερούμε. Ο πρώτον ο σύνδεσμον σε μιαν γραμμήν πρέπ' να δεκνίζ' σε κακόν αρχείον.\nΉντιαν συνδέσμ' ντ' έρταν ασην ίδιαν γραμμήν οπίς θεωρούματα εξαιρέσεις, δηλαδή σελίδας όπου επορούμ' να συναντούμε την εικόναν σε σύνδεσην.",
index 1e61f41..258bdc9 100644 (file)
        "qbmyoptions": "Majāi pāusai",
        "faq": "Ukadeznai prasīsenei",
        "faqpage": "Project:Ukadeznai prasīsenei",
-       "vector-action-delete": "Āupausinais",
-       "vector-action-move": "Prapīdais",
-       "vector-action-protect": "Kūnsteis",
-       "vector-action-unprotect": "Etkūnteis",
-       "vector-view-create": "Teīkeis",
-       "vector-view-edit": "Redigīs",
-       "vector-view-history": "Enwaidinnais istōrijan",
-       "vector-view-view": "Skaitāis",
-       "vector-view-viewsource": "Enwaidinnais appun",
        "actions": "Dīlasenei",
        "namespaces": "Tītelin plattibis",
        "variants": "Warjāntai",
        "editundo": "Naikinnais redigīsenin",
        "searchresults": "Laukīsnas rezultātai",
        "searchresults-title": "Laukīsnas rezultātai per \"$1\"",
-       "toomanymatches": "Per tūlin etrāsenei gaūtan, bandais kittan prasīsenin",
        "titlematches": "Aupalā di en tītelamans",
        "textmatches": "Aupalā di en pāusan ēnturu",
        "notextmatches": "Ni aupalā di en pāusan ēnturu",
        "viewprevnext": "Wīdais ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Ast pāusan \"[[:$1]]\" en šissei wikkin''",
        "searchmenu-new": "'''Teīkeis pāusan \"[[:$1|$1]]\" en šissei wikki!'''",
-       "searchprofile-project": "Pagalbas be prōjaktas pāusai",
        "searchprofile-everything": "Wiss",
        "searchprofile-advanced": "Ēmpirsin treppun",
        "searchprofile-articles-tooltip": "Laukīs en tītelin plattibei $1",
-       "searchprofile-project-tooltip": "Laukīs en tītelin plattibimans $1",
        "searchprofile-images-tooltip": "Laukīs zūrbrukins",
        "searchprofile-everything-tooltip": "Laukīs en pastippai ēnturan (dīgi en diskusiōnis pāusamans)",
        "searchprofile-advanced-tooltip": "Laukīs en etrinktammans tītelin plattibins",
        "search-interwiki-default": "Rezultātai per $1:",
        "search-interwiki-more": "(tūls)",
        "search-relatedarticle": "Ristan",
-       "searcheverything-enable": "Laukīs en wisēimans tītelin plattibins",
        "searchrelated": "gintawai",
        "searchall": "wisāi",
        "showingresults": "Zemmais ast listi {{PLURAL:$1|sen '''1''' rezultātan|stēisan '''$1''' rezultātan}}, pagaūnintei ezze '''$2'''-asmu rezutātan.",
-       "showingresultsnum": "Zemmais ast listi {{PLURAL:$3|sen '''1''' rezultātan|stēisan '''$3''' rezultātan}}, pagaūnintei ezze '''$2'''-asmu rezutātan.",
        "search-nonefound": "Nisatausnā stēisan rezultātan izpilnintan prasīsenes kritērijans.",
        "powersearch-legend": "Paplatintā laukīsna",
        "powersearch-ns": "Laukīs en tītelin plattibimans:",
        "prefs-emailconfirm-label": "E-mailas padruktinsna:",
        "youremail": "Twajā e-mail adressi:",
        "username": "Tērpautajas pabilisnā:",
-       "uid": "Tērpautajas ID:",
        "prefs-memberingroups": "Perlānke prei {{PLURAL:$1|gruppin|gruppins:}}",
        "prefs-registration": "Registraciōnis kerdā:",
        "yourrealname": "Arwis emmens:",
        "logempty": "Ni ast passauwintei registeres elamēntai.",
        "log-title-wildcard": "Laukīs tītelins pagauwīntins sen šin tekstan",
        "allpages": "Wisāi pāusai",
-       "alphaindexline": "ezze $1 ērgi $2",
        "nextpage": "Ripīntin pāusan ($1)",
        "prevpage": "Pirzdauman pāusan ($1)",
        "allpagesfrom": "Waidinnais pāusans pagaūnintins si sen:",
        "blockip": "Blōkis tērpautajan",
        "blockip-legend": "Blōkis tērpautajan",
        "blockiptext": "Tērpaus zemmaisin fōrmularan, kāi blōkilai enpeisāsenes mazīngiskwan iz kōnkretai IP adressin anga kōnkretasmu tērpautajan.\nBlōkitun prawerru tēr kāi ebsergītun ezze wandalisman be preitarīngi sen [[{{MediaWiki:Policy-url}}|pōlitikin]].\nPadāis brewīnslin zemmais (p. endījanei tītelins stēisan wandalizītan pāusan).",
-       "ipadressorusername": "IP adressi anga tērpautajas pabilisnā:",
+       "ipaddressorusername": "IP adressi anga tērpautajas pabilisnā:",
        "ipbexpiry": "Blōkisenis wanginna:",
        "ipbreason": "Brewīnsli:",
        "ipbcreateaccount": "Ebsergēis ezze rekkenas teīkseņu",
        "newimages-summary": "Šin speciālin pāusan waidinna panzdaumai enkraūtans zūrbrukins.",
        "newimages-legend": "Filteris",
        "newimages-label": "Zūrbrukis pabilisnā (anga tenesses delīks):",
-       "showhidebots": "($1 bōtai)",
        "noimages": "Nika per waidīnsnan.",
        "ilsubmit": "Laukīs",
        "bydate": "pa dātan",
index c2daf16..7ca0e55 100644 (file)
        "qbmyoptions": "زما پاڼې",
        "faq": "ډ-ځ-پ",
        "faqpage": "Project:ډ-ځ-پ",
-       "vector-action-addsection": "سرليکونه ورگډول",
-       "vector-action-delete": "ړنگول",
-       "vector-action-move": "لېږدول",
-       "vector-action-protect": "ژغورل",
-       "vector-action-undelete": "ناړنگول",
-       "vector-action-unprotect": "ژغورنه بدلول",
-       "vector-view-create": "جوړول",
-       "vector-view-edit": "سمول",
-       "vector-view-history": "پېښليک کتل",
-       "vector-view-view": "لوستل",
-       "vector-view-viewsource": "سرچينه کتل",
        "actions": "کړنې",
        "namespaces": "نوم-تشيالونه",
        "variants": "ډولونه",
        "tooltip-undo": "\"ناکړ\" همدا سمون پر شا گرځوي او د سمون کړکۍ د مخکتنې په بڼه پرانيزي.\nدا کړنه د لنډيز په برخه کې د سمونونو د سببونو د ورگډولو آسانتيا برابروي.",
        "tooltip-preferences-save": "غوره توبونه خوندي کول",
        "tooltip-summary": "يو لنډ لنډيز کښل",
-       "vector.css": "/* د CSS هره بڼه چې دلته ځای پر ځای کېږي هغه به د وېکټور د پوښ ټولو کارنانو لپاره کار کوي */",
-       "vector.js": "/* د جاوا هر يو سکرېپټ چې دلته ځای پر ځای کېږي هغه به د وېکټور د پوښ ټولو کارنانو لپاره کار کوي */",
        "anonymous": "د {{SITENAME}} {{PLURAL:$1|ورکنومی کارن|ورکنومي کارنان}}",
        "siteuser": "د {{SITENAME}} کارن $1",
        "anonuser": "د {{SITENAME}} ورکنومی کارن $1",
        "pageinfo-category-pages": "د مخونو شمېر",
        "pageinfo-category-subcats": "د څېرمه وېشنيزو شمېر",
        "pageinfo-category-files": "د دوتنو شمېر",
-       "skinname-monobook": "مونوبوک",
-       "skinname-vector": "وېکټور",
        "markaspatrolleddiff": "دا مخ څارل شوی په نخښه کول",
        "markaspatrolledtext": "دا مخ څارل شوی په نخښه کول",
        "markedaspatrolled": "دا مخ څارل شوی په نخښه کول",
index 16702dc..93a3514 100644 (file)
        "qbmyoptions": "Minhas páginas",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Adicionar tópico",
-       "vector-action-delete": "Eliminar",
-       "vector-action-move": "Mover",
-       "vector-action-protect": "Proteger",
-       "vector-action-undelete": "Restaurar",
-       "vector-action-unprotect": "Alterar a proteção",
-       "vector-view-create": "Criar",
-       "vector-view-edit": "Editar",
-       "vector-view-history": "Ver histórico",
-       "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",
        "searchrelated": "relacionados",
        "searchall": "todos",
        "showingresults": "A seguir {{PLURAL:$1|é mostrado '''um''' resultado|são mostrados até '''$1''' resultados}}, iniciando no '''$2'''º.",
-       "showingresultsnum": "A seguir {{PLURAL:$3|é mostrado '''um''' resultado|são mostrados '''$3''' resultados}}, iniciando com o '''$2'''º.",
        "showingresultsheader": "{{PLURAL:$5|Resulado '''$1''' de '''$3'''|Resultados '''$1 - $2''' de '''$3'''}} para '''$4'''",
        "search-nonefound": "Não há resultados que correspondam à consulta.",
        "powersearch-legend": "Pesquisa avançada",
        "tooltip-preferences-save": "Salvar preferências",
        "tooltip-summary": "Forneça um breve resumo",
        "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 */",
-       "monobook.js": "/* Qualquer JavaScript aqui colocado afetará os usuários do skin MonoBook */",
-       "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)",
        "anonuser": "usuário anônimo $1 da {{SITENAME}}",
        "pageinfo-category-pages": "Número de páginas",
        "pageinfo-category-subcats": "Número de subcategorias",
        "pageinfo-category-files": "Número de arquivos",
-       "skinname-monobook": "MonoBook",
        "markaspatrolleddiff": "Marcar como patrulhada",
        "markaspatrolledtext": "Marcar esta página como patrulhada",
        "markedaspatrolled": "Marcado como verificado",
        "duplicate-defaultsort": "Aviso: A chave de ordenação padrão \"$2\" sobrepõe-se à anterior chave de ordenação padrão \"$1\".",
        "version": "Versão",
        "version-extensions": "Extensões instaladas",
+       "version-skins": "Temas",
        "version-specialpages": "Páginas especiais",
        "version-parserhooks": "Hooks do analisador (parser)",
        "version-variables": "Variáveis",
        "version-antispam": "Prevenção contra spam",
-       "version-skins": "Temas",
        "version-other": "Diversos",
        "version-mediahandlers": "Executores de mídia",
        "version-hooks": "Hooks",
index 3287439..e1fd399 100644 (file)
        "qbmyoptions": "As minhas páginas",
        "faq": "Perguntas frequentes",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Adicionar&nbsp;tópico",
-       "vector-action-delete": "Eliminar",
-       "vector-action-move": "Mover",
-       "vector-action-protect": "Proteger",
-       "vector-action-undelete": "Restaurar",
-       "vector-action-unprotect": "Alterar protecção",
-       "vector-view-create": "Criar",
-       "vector-view-edit": "Editar",
-       "vector-view-history": "Ver histórico",
-       "vector-view-view": "Ler",
-       "vector-view-viewsource": "Ver fonte",
        "actions": "Acções",
-       "vector-more-actions": "Mais",
        "namespaces": "Domínios",
        "variants": "Variantes",
        "navigation-heading": "Menu de navegação",
        "mergehistory-empty": "Não existem revisões fundíveis.",
        "mergehistory-success": "Foram fundidas $3 {{PLURAL:$3|edição|edições}} de [[:$1]] em [[:$2]].",
        "mergehistory-fail": "Não foi possível fundir os históricos; verifique a página e os parâmetros de tempo, por favor.",
+       "mergehistory-fail-toobig": "Não é possível mesclar o histórico, já que um número de revisão(ões) acima do limite ($1 {{PLURAL:$1|revisão|revisões}}) seriam movidos.",
        "mergehistory-no-source": "A página de origem $1 não existe.",
        "mergehistory-no-destination": "A página de destino $1 não existe.",
        "mergehistory-invalid-source": "A página de origem precisa ser um título válido.",
        "searchall": "todos",
        "showingresults": "{{PLURAL:$1|É apresentado '''um''' resultado|São apresentados até '''$1''' resultados}} abaixo{{PLURAL:$1||, começando pelo '''$2'''º}}.",
        "showingresultsinrange": "Apresenta-se abaixo {{PLURAL:$1|<strong>1</strong> resultado|até <strong>$1</strong> resultados}} no intervalo #<strong>$2</strong> a #<strong>$3</strong>.",
-       "showingresultsnum": "{{PLURAL:$3|É apresentado '''um''' resultado|São apresentados '''$3''' resultados}} abaixo{{PLURAL:$3||, começando pelo '''$2'''º}}.",
        "showingresultsheader": "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1–$2''' de '''$3'''}} para '''$4'''",
        "search-nonefound": "A pesquisa não produziu resultados.",
        "powersearch-legend": "Pesquisa avançada",
        "windows-nonascii-filename": "A wiki não aceita nomes de ficheiros com caracteres especiais.",
        "fileexists": "Já existe um ficheiro com este nome. Verifique <strong>[[:$1]]</strong> caso não tenha a certeza de que quer alterá-lo.\n[[$1|thumb]]",
        "filepageexists": "A página de descrição deste ficheiro já foi criada em <strong>[[:$1]]</strong>, mas neste momento não existe nenhum ficheiro com este nome.\nO resumo que introduzir não aparecerá na página de descrição.\nPara fazê-lo aparecer, terá de editar a página manualmente.\n[[$1|thumb]]",
-       "fileexists-extension": "Já existe um ficheiro de nome semelhante: [[$2|thumb]]\n* Nome do ficheiro que está sendo carregado: <strong>[[:$1]]</strong>\n* Nome do ficheiro existente: <strong>[[:$2]]</strong>\nEscolha um nome diferente, por favor.",
+       "fileexists-extension": "Já existe um ficheiro de nome semelhante: [[$2|thumb]]\n* Nome do ficheiro que está a ser carregado: <strong>[[:$1]]</strong>\n* Nome do ficheiro existente: <strong>[[:$2]]</strong>\nTalvez prefira definir um nome mais distinto?",
        "fileexists-thumbnail-yes": "O ficheiro aparenta ser uma imagem de tamanho reduzido (''miniatura'', ou ''thumbnail)''. [[$1|thumb]]\nVerifique o ficheiro <strong>[[:$1]]</strong>, por favor.\nSe este ficheiro é a mesma imagem mas no tamanho original, não é necessário carregar uma miniatura.",
        "file-thumbnail-no": "O nome do ficheiro começa por <strong>$1</strong>.\nParece ser uma imagem de tamanho reduzido (uma ''miniatura'' ou ''thumbnail)''.\nSe tiver a imagem original de maior dimensão, envie-a em vez desta. Se não, altere o nome do ficheiro, por favor.",
        "fileexists-forbidden": "Já existe um ficheiro com este nome, e não pode ser reescrito.\nSe ainda pretende carregar o seu ficheiro volte atrás e use outro nome, por favor. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Eliminação e restauro de ficheiros foram temporariamente impossibilitadas durante a manutenção.",
        "filedelete-maintenance-title": "Não é possível eliminar o ficheiro",
        "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>.",
+       "mimesearch-summary": "Esta página permite a filtragem de ficheiros pelo seu tipo MIME. Entrada: contenttype/subtype ou contenttype/*, ex. <code>image/jpeg</code>.",
        "mimetype": "Tipo MIME:",
        "download": "descarregar",
        "unwatchedpages": "Páginas não vigiadas",
        "tooltip-preferences-save": "Gravar preferências",
        "tooltip-summary": "Introduza um resumo breve",
        "interlanguage-link-title": "$1 — $2",
+       "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/* Código CSS colocado aqui será aplicado a todos os temas */",
-       "monobook.css": "/* Código CSS colocado aqui afectará os utilizadores do tema Monobook */",
-       "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 */",
-       "monobook.js": "/* Código Javascript colocado aqui será carregado para utilizadores do tema Monobook */",
-       "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}}",
        "anonuser": "utilizador anónimo $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-monobook": "MonoBook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Marcar como patrulhada",
        "markaspatrolledtext": "Marcar esta página como patrulhada",
        "markedaspatrolled": "Marcada como patrulhada",
        "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-skins": "Temas instalados",
        "version-specialpages": "Páginas especiais",
        "version-parserhooks": "''Hooks'' do analisador sintático",
        "version-variables": "Variáveis",
        "version-antispam": "Prevenção contra spam",
-       "version-skins": "Temas",
        "version-other": "Diversos",
        "version-mediahandlers": "Leitura e tratamento de multimédia",
        "version-hooks": "Hooks",
        "version-hook-name": "Nome do hook",
        "version-hook-subscribedby": "Subscrito por",
        "version-version": "(Versão $1)",
+       "version-no-ext-name": "[sem nome]",
        "version-license": "Licença do MediaWiki",
        "version-ext-license": "Licença",
        "version-ext-colheader-name": "Extensão",
+       "version-skin-colheader-name": "Tema",
        "version-ext-colheader-version": "Versão",
        "version-ext-colheader-license": "Licença",
        "version-ext-colheader-description": "Descrição",
index a2ddc7a..71af316 100644 (file)
        "yourpasswordagain": "Since 1.22 no longer used in core, but may be used by some extensions. DEPRECATED",
        "createacct-yourpasswordagain": "In create account form, label for field to re-enter password\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n{{Identical|Confirm password}}",
        "createacct-yourpasswordagain-ph": "Placeholder text in create account form for re-enter password field.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
-       "remembermypassword": "Used as checkbox label in [[Special:UserLogin]]. Parameters:\n* $1 - number of days\n{{Identical|Remember my login on this computer}}",
+       "remembermypassword": "Used as checkbox label on [[Special:ChangePassword]]. Parameters:\n* $1 - number of days\n{{Identical|Remember my login on this computer}}",
        "userlogin-remembermypassword": "The text for a check box in [[Special:UserLogin]].",
        "userlogin-signwithsecure": "Text of link to HTTPS login form.\n\nSee example: [[Special:UserLogin]]",
        "yourdomainname": "Used as label for listbox.",
        "passwordreset-disabled": "Used as error message in changing password.",
        "passwordreset-emaildisabled": "Used as error message in changing password when site's email feature is disabled.",
        "passwordreset-username": "{{Identical|Username}}",
-       "passwordreset-domain": "A domain like used in Domain Name System (DNS) or more specifically like a domain component in the Lightweight Directory Access Protocol (LDAP)",
+       "passwordreset-domain": "A domain like used in Domain Name System (DNS) or more specifically like a domain component in the Lightweight Directory Access Protocol (LDAP).\n{{Identical|Domain}}",
        "passwordreset-capture": "Label for checkbox asking the user whether they want to see the contents of the password reset email (only shown if they have the <code>passwordreset</code> permission).",
        "passwordreset-capture-help": "Longer explanatory message for the capture checkbox label.",
        "passwordreset-email": "{{Identical|E-mail address}}",
        "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}}",
        "showingresultsinrange": "Used in pagination of [[Special:MostLinkedCategories]]. Parameters:\n* $1 - the total number of results in the batch shown\n* $2 - the number of the first item listed\n* $3 - the number of last item in the batch shown\n\nSee also {{msg-mw|Showingresults}}",
-       "showingresultsnum": "Parameters:\n* $1 - (Unused) the total number of results in the batch shown\n* $2 - the first number in the batch of results\n* $3 - the number of results on the page\nSee also:\n* {{msg-mw|Showingresults}}",
        "showingresultsheader": "Used in search results of [[Special:Search]]. Parameters:\n* $1 - minimum offset\n* $2 - maximum offset\n* $3 - total number of results\n* $4 - the search term\n* $5 - number of results",
        "search-nonefound": "Message shown when a search returned no results (when using the default MediaWiki search engine).",
        "powersearch-legend": "Advanced search\n\n{{Identical|Advanced search}}",
        "days-abbrev": "{{optional}}\nAbbreviation for \"days\". $1 is the number of days.\n\nSee also {{msg-mw|days}}",
        "seconds": "Full word for \"seconds\". $1 is the number of seconds.\n\nSee also {{msg-mw|seconds-abbrev}}, {{msg-mw|seconds-ago}}.\n{{Identical|Second}}",
        "minutes": "Full word for \"minutes\". $1 is the number of minutes.\n\nSee also {{msg-mw|minutes-abbrev}}, {{msg-mw|minutes-ago}}.\n\n{{Identical|Minute}}",
-       "hours": "Full word for \"hours\". $1 is the number of hours.\n\nSee also {{msg-mw|hours-abbrev}}, {{msg-mw|hours-ago}}.",
+       "hours": "Full word for \"hours\". $1 is the number of hours.\n\nSee also {{msg-mw|hours-abbrev}}, {{msg-mw|hours-ago}}.\n{{Identical|Hour}}",
        "days": "Full word for \"days\". $1 is the number of days.\n\nSee also {{msg-mw|Days-abbrev}}\n\n{{Identical|Day}}",
-       "weeks": "Full word for \"weeks\". Parameters:\n* $1 is the number of weeks",
-       "months": "Full word for \"months\". $1 is the number of months.",
-       "years": "Full word for \"years\".\n\nParameters:\n* $1 - the number of years",
+       "weeks": "Full word for \"weeks\". Parameters:\n* $1 is the number of weeks\n{{Identical|Week}}",
+       "months": "Full word for \"months\".\n* $1 - the number of months.\n{{Identical|Month}}",
+       "years": "Full word for \"years\".\n\nParameters:\n* $1 - the number of years\n{{Identical|Year}}",
        "ago": "Phrase for indicating how long ago something happened. Parameters:\n* $1 - some kind of timestamp\n{{Identical|Ago}}",
-       "just-now": "Phrase for indicating something happened just now.",
+       "just-now": "Phrase for indicating something happened just now.\n{{Identical|Just now}}",
        "hours-ago": "Phrase for indicating that something occurred a certain number of hours ago.\n\nParameters:\n* $1 - number of hours",
        "minutes-ago": "Phrase for indicating that something occurred a certain number of minutes ago.\n\nParameters:\n* $1 - number of minutes",
        "seconds-ago": "Phrase for indicating that something occurred a certain number of seconds ago.\n\nParameters:\n* $1 - number of seconds",
        "version": "{{doc-special|Version}}\n{{Identical|Version}}",
        "version-summary": "{{doc-specialpagesummary|version}}",
        "version-extensions": "Header on [[Special:Version]].",
+       "version-skins": "Header on [[Special:Version]].\n\nSee also:\n* {{msg-mw|Version-software}}\n* {{msg-mw|Version-extensions}}",
        "version-specialpages": "Part of [[Special:Version]].\n{{Identical|Special page}}",
        "version-parserhooks": "This message is a heading at [[Special:Version]] for extensions that modifies the parser of wikitext.",
        "version-variables": "{{Identical|Variable}}",
        "version-antispam": "Part of [[Special:Version]].\nThis message is followed by the list of SPAM prevention extensions.",
-       "version-skins": "{{Identical|Skin}}",
        "version-api": "{{optional}}",
        "version-other": "{{Identical|Other}}",
        "version-mediahandlers": "Used in [[Special:Version]]. It is the title of a section for media handler extensions (e.g. [[mw:Extension:OggHandler]]).\nThere are no such extensions here, so look at [[wikipedia:Special:Version]] for an example.",
        "version-hook-name": "Shown in [[Special:Version]].\n\nFor meaning of hook see [[mw:Special:MyLanguage/Manual:Hooks|mw:Manual:Hooks]] and [[w:Hooking]].",
        "version-hook-subscribedby": "Shown in [[Special:Version]]",
        "version-version": "{{Optional}}\nUsed in [[Special:Version]]. Preceded by the MediaWiki extension name.\n\nParameters:\n* $1 - version number of the extension",
+       "version-no-ext-name": "Used in [[Special:Version]], in the rows of the main table when a name for an extension is not provided.",
        "version-svn-revision": "{{Identical|Revision}}{{optional}}\nUsed in [[Special:Version]], preceeding the Subversion revision numbers of the extensions loaded inside brackets, like this: \"({{int:version-revision}} r012345\"). Parameters:\n* $1 - (Unused) directory revision number or empty string\n* $2 - checkout revision number",
        "version-license": "Used specifically for the MediaWiki software.\n\nUsed as heading in [[Special:Version]].",
        "version-ext-license": "Used in [[Special:Version]].\n\nUsed as label for the link pointing to the extension's license page. e.g. [[Special:Version/License/Maps]]\n{{Identical|License}}",
        "version-ext-colheader-name": "Column header for the name of an extension.\n{{Identical|Extension}}",
+       "version-skin-colheader-name": "Column header for the name of a skin.\n{{Identical|Skin}}",
        "version-ext-colheader-version": "Column header for describing an extensions version.\n{{Identical|Version}}",
        "version-ext-colheader-license": "Column header for describing an extensions license.\n{{Identical|License}}",
        "version-ext-colheader-description": "Column header for the description of an extension.\n{{Identical|Description}}",
        "expand_templates_remove_nowiki": "Option on [[Special:Expandtemplates]]\n\nHere's what the tick box does:\n\nFor:\n<pre>\n&lt;nowiki>test&lt;/nowiki>\n</pre>\n\nNot ticked:\n<pre>\n&lt;nowiki>test&lt;/nowiki>\n</pre>\n\nTicked:\n<pre>\ntest\n</pre>",
        "expand_templates_generate_xml": "Used as checkbox label.",
        "expand_templates_generate_rawhtml": "Used as checkbox label.",
-       "expand_templates_preview": "{{Identical|Preview}}"
+       "expand_templates_preview": "{{Identical|Preview}}",
+       "pagelanguage": "Title for page Special:PageLanguage",
+       "pagelang-name": "Input label for page name on Special:PageLanguage\n{{Identical|Page}}",
+       "pagelang-language": "Language selector label for Special:PageLanguage\n{{Identical|Language}}",
+       "pagelang-use-default": "Radio label for selector on Special:PageLanguage for default language",
+       "pagelang-select-lang": "Radio label for selector on Special:PageLanguage for language selection\n{{Identical|Select language}}",
+       "right-pagelang": "{{Doc-right|pagelang}}\nRight to change page language on Special:PageLanguage",
+       "action-pagelang": "{{Doc-action|pagelang}}",
+       "log-name-pagelang": "Display entry for log name for changes in page language in Special:Log.",
+       "log-description-pagelang": "Display description for log name for changes in page language in Special:Log.",
+       "logentry-pagelang-pagelang": "Log entry for page language changes in Special:Log."
 }
index 5f36cde..b82a39d 100644 (file)
        "qbmyoptions": "Akllanaykuna",
        "faq": "Pasaq tapuykuna",
        "faqpage": "Project:Pasaq tapuykuna",
-       "vector-action-addsection": "Allwiyta yapay",
-       "vector-action-delete": "Qulluy",
-       "vector-action-move": "Astay",
-       "vector-action-protect": "Amachay",
-       "vector-action-undelete": "Qullusqata paqarichiy",
-       "vector-action-unprotect": "Amachayta wakinchay",
-       "vector-view-create": "Kamariy",
-       "vector-view-edit": "Llamk'apuy",
-       "vector-view-history": "Wiñay kawsayta qhaway",
-       "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",
        "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.",
        "powersearch-legend": "Ñawparikusqa maskay",
        "tooltip-preferences-save": "Akllasqakunata waqaychay",
        "tooltip-summary": "Pisichaychata yaykuchiy",
        "common.css": "/* Churamusqa CSS chantakunaqa tukuy qarakunapim llamk'anqa */",
-       "monobook.css": "/* Kayman churasqa CSS nisqaqa Monobook qaratam hukchanqa tukuy internet tiyanapaq */",
        "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. */",
-       "monobook.js": "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas MonoBook nisqata llamk'achiq ruraqkunapaq chaqnasqa kanqa */",
        "anonymous": "{{SITENAME}}pi sutinnaq {{PLURAL:$1|ruraq|ruraqkuna}}",
        "siteuser": "{{SITENAME}}-pa $1 sutiyuq ruraqnin",
        "anonuser": "{{SITENAME}} rakiqunannaq ruraq $1",
index fe3d236..337f61e 100644 (file)
        "qbmyoptions": "Ñukapak pankakuna",
        "faq": "Ashtawan tapushkaka tapunakuna",
        "faqpage": "Project:ashta ministishka tapuykuna",
-       "vector-action-addsection": "Shuk mushuk rimanakuyta kallarina",
-       "vector-action-delete": "Pichana",
-       "vector-action-move": "Apakuna",
-       "vector-action-protect": "Harkana",
-       "vector-action-undelete": "Kutin wacharichina",
-       "vector-action-unprotect": "Harkayta shukchina",
-       "vector-view-create": "Kamarina",
-       "vector-view-edit": "Killkana",
-       "vector-view-history": "Wiñay kawsayta rikuna",
-       "vector-view-view": "Killkakatina",
-       "vector-view-viewsource": "Pukyu killkata rikuna",
        "actions": "Ruraykuna",
        "namespaces": "Shutipak kitikuna",
        "variants": "Shuk rikuchiy shinakuna",
        "searchmenu-exists": "Kay wikipi shuk \"[[:$1]]\" shutiyuk pankaka tiyanmi.",
        "searchmenu-new": "'''Kay wikipi \"[[:$1]]\" shutiyuk pankata kamariy!'''",
        "searchprofile-articles": "Yachaykunayuk pankakuna",
-       "searchprofile-project": "Yanapana ruraykamaypash pankakuna",
        "searchprofile-images": "Multimidya",
        "searchprofile-everything": "Tukuy",
        "searchprofile-advanced": "Yachak rurakkunamanlla",
        "searchprofile-articles-tooltip": "$1 kitikunapi maskana",
-       "searchprofile-project-tooltip": "$1 kitikunapi maskana",
        "searchprofile-images-tooltip": "Archiwukunata maskana",
        "searchprofile-everything-tooltip": "Tukuy pankakunapi maskana (rimanakuy pankakunapipashmi)",
        "searchprofile-advanced-tooltip": "Maykan shuti kitikunapi maskanami kanchikchu akllana",
        "booksources-go": "Rina",
        "log": "Kamukuna",
        "allpages": "Tukuy pankakuna",
-       "alphaindexline": "$1-manta $2-man",
        "prevpage": "Ñawpak panka ($1)",
        "allpagesfrom": "Shinami kallarik pankakunata rikuchiy:",
        "allpagesto": "Kaywan tukurik pankakunata rikuchina:",
index d00c71a..e9b0e3d 100644 (file)
        "qbmyoptions": "Mia pagina",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Agiuntar chapitel",
-       "vector-action-delete": "Stizzar",
-       "vector-action-move": "Spustar",
-       "vector-action-protect": "Bloccar",
-       "vector-action-undelete": "Restituir",
-       "vector-action-unprotect": "Midar la protecziun",
-       "vector-view-create": "Crear",
-       "vector-view-edit": "Modifitgar",
-       "vector-view-history": "Cronologia",
-       "vector-view-view": "Leger",
-       "vector-view-viewsource": "Mussar il code",
        "actions": "Acziuns",
        "namespaces": "Tip da pagina",
        "variants": "Variantas",
        "searchrelated": "sumegliant",
        "searchall": "tuts",
        "showingresults": "Sutvart èn enfin {{PLURAL:$1|'''in''' resultat|'''$1''' resultats}} cumenzond cun il numer '''$2'''.",
-       "showingresultsnum": "Qua èn {{PLURAL:$3|'''1''' resultat|'''$3''' resultats}}, cumenzond cun il number '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' da '''$3'''|Resultats '''$1-$2''' da '''$3'''}} per '''$4'''",
        "search-nonefound": "Per il term tschertgà èn nagins resultats vegnids chattads.",
        "powersearch-legend": "Tschertga extendida",
        "tooltip-preferences-save": "Memorisar las preferenzas",
        "tooltip-summary": "Endatescha ina curta resumaziun",
        "common.css": "",
-       "monobook.css": "/* editescha quest file per adattar il skin momobook per l'entira pagina */",
-       "monobook.js": "",
        "anonymous": "{{PLURAL:$1|In utilisader anonim|Utilisaders anonims}} da {{SITENAME}}",
        "siteuser": "utilisader $1 da {{SITENAME}}",
        "anonuser": "Utilisader anonim $1 da {{SITENAME}}",
index 196463b..de9b5cf 100644 (file)
        "category_header": "Pagini din categoria „$1”",
        "subcategories": "Subcategorii",
        "category-media-header": "Fișiere media din categoria „$1”",
-       "category-empty": "''Această categorie nu conține articole sau fișiere media.''",
+       "category-empty": "''Această categorie nu conține în acest moment niciun articol sau fișier media.''",
        "hidden-categories": "{{PLURAL:$1|Categorie ascunsă|Categorii ascunse}}",
        "hidden-category-category": "Categorii ascunse",
        "category-subcat-count": "{{PLURAL:$2|Această categorie conține doar următoarea subcategorie.|Această categorie conține {{PLURAL:$1|următoarea subcategorie|următoarele $1 subcategorii|următoarele $1 de subcategorii}}, dintr-un total de $2.}}",
-       "category-subcat-count-limited": "Această categorie conține {{PLURAL:$1|următoarea subcategorie|următoarele $1 subcategorii}}.",
+       "category-subcat-count-limited": "Această categorie conține {{PLURAL:$1|următoarea subcategorie|următoarele $1 subcategorii|următoarele $1 de subcategorii}}.",
        "category-article-count": "{{PLURAL:$2|Această categorie conține doar următoarea pagină.|{{PLURAL:$1|Următoarea pagină|Următoarele $1 pagini}} se află în această categorie, dintr-un total de $2.}}",
-       "category-article-count-limited": "{{PLURAL:$1|Următoarea pagină|Următoarele $1 pagini}} se află în categoria curentă.",
+       "category-article-count-limited": "{{PLURAL:$1|Următoarea pagină este|Următoarele $1 pagini sunt|Următoarele $1 de pagini sunt}} în categoria curentă.",
        "category-file-count": "{{PLURAL:$2|Această categorie conține doar următorul fișier.|{{PLURAL:$1|Următorul fișier|Următoarele $1 fișiere}} se află în această categorie, dintr-un total de $2.}}",
-       "category-file-count-limited": "{{PLURAL:$1|Următorul fișier|Următoarele $1 fișiere}} se află în categoria curentă.",
+       "category-file-count-limited": "{{PLURAL:$1|Următorul fișier este|Următoarele $1 fișiere sunt |Următoarele $1 de fișiere sunt}} în categoria curentă.",
        "listingcontinuesabbrev": "cont.",
        "index-category": "Pagini indexate",
        "noindex-category": "Pagini neindexate",
        "qbmyoptions": "Paginile mele",
        "faq": "Întrebări frecvente",
        "faqpage": "Project:Întrebări frecvente",
-       "vector-action-addsection": "Mesaj nou",
-       "vector-action-delete": "Ștergere",
-       "vector-action-move": "Redenumire",
-       "vector-action-protect": "Protejare",
-       "vector-action-undelete": "Recuperare",
-       "vector-action-unprotect": "Modificare protecție",
-       "vector-view-create": "Creare",
-       "vector-view-edit": "Modificare",
-       "vector-view-history": "Istoric",
-       "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",
        "noemail": "Nu este nici o adresă de e-mail înregistrată pentru utilizatorul „$1”.",
        "noemailcreate": "Trebuie oferită o adresă e e-mail validă.",
        "passwordsent": "O nouă parolă a fost trimisă la adresa de e-mail a utilizatorului \"$1\". Te rugăm să te autentifici pe {{SITENAME}} după ce o primești.",
-       "blocked-mailpassword": "Această adresă IP este blocată la editare, și deci nu este permisă utilizarea funcției de recuperare a parolei pentru a preveni abuzul.",
+       "blocked-mailpassword": "Această adresă IP este blocată la editare. Pentru a preveni abuzul, funcția de recuperare a parolei este dezactivată.",
        "eauthentsent": "Un e-mail de confirmare a fost trimis către adresa specificată.\nÎnainte ca orice alt e-mail să mai fie trimis către acel cont, trebuie să urmați instrucțiunile prezente în e-mail pentru a confirma că acest cont este într-adevăr al dumneavoastră.",
        "throttled-mailpassword": "Un e-mail pentru resetarea parolei a fost deja trimis în {{PLURAL:$1|ultima oră|ultimele $1 ore|ultimele $1 de ore}}. Pentru a preveni abuzul, se va trimite doar un e-mail de resetare a parolei la un interval de o {{PLURAL:$1|o oră|$1 ore|$1 de ore}}.",
        "mailerror": "Eroare la trimitere e-mail: $1",
        "mergehistory-empty": "Reviziile nu pot fi combinate.",
        "mergehistory-success": "$3 {{PLURAL:$3|versiune|versiuni|de versiuni}} ale [[:$1]] {{PLURAL:$3|a fost unită|au fost unite|au fost unite}} cu succes în [[:$2]].",
        "mergehistory-fail": "Nu se poate executa combinarea istoricului, te rog verifică parametrii pagină și timp.",
+       "mergehistory-fail-toobig": "Nu s-a putut efectua unirea istoricelor întrucât s-ar fi depășit limita de $1 {{PLURAL:$1|versiune|versiuni|de versiuni}} mutat{{PLURAL:$1|ă|e}}.",
        "mergehistory-no-source": "Pagina sursă $1 nu există.",
        "mergehistory-no-destination": "Pagina de destinație $1 nu există.",
        "mergehistory-invalid-source": "Pagina sursă trebuie să aibă un titlu valid.",
        "searchall": "toate",
        "showingresults": "Mai jos {{PLURAL:$1|apare '''1''' rezultat|apar '''$1''' rezultate|apar '''$1''' de rezultate}} începând cu nr. <b>$2</b>.",
        "showingresultsinrange": "Mai jos se afișează un număr de până la {{PLURAL:$1|<strong>1</strong> rezultat|<strong>$1</strong> rezultate|<strong>$1</strong> de rezultate}} din intervalul #<strong>$2</strong> la #<strong>$3</strong>.",
-       "showingresultsnum": "Mai jos {{PLURAL:$3|apare '''1''' rezultat|apar '''$3''' rezultate|apar '''$3''' de rezultate}} cu nr. <b>$2</b>.",
        "showingresultsheader": "{{PLURAL:$5|Rezultatul '''$1''' din '''$3'''|Rezultatele '''$1 - $2''' din '''$3'''}} pentru '''$4'''",
        "search-nonefound": "Nu sunt rezultate conforme interogării.",
        "powersearch-legend": "Căutare avansată",
        "protectedpagesempty": "Nu există pagini protejate",
        "protectedpages-timestamp": "Data și ora",
        "protectedpages-page": "Pagină",
-       "protectedpages-expiry": "Expiră la",
+       "protectedpages-expiry": "Expiră pe",
        "protectedpages-performer": "Utilizator care a protejat",
        "protectedpages-params": "Parametri de protejare",
        "protectedpages-reason": "Motiv",
        "protect-level-sysop": "Autorizat doar pentru administratori",
        "protect-summary-cascade": "în cascadă",
        "protect-expiring": "expiră $1 (UTC)",
-       "protect-expiring-local": "expiră la $1",
+       "protect-expiring-local": "expiră pe $1",
        "protect-expiry-indefinite": "indefinit",
        "protect-cascade": "Protejare în cascadă - toate paginile incluse în această pagină vor fi protejate.",
        "protect-cantedit": "Nu puteți schimba nivelul de protecție a acestei pagini, deoarece nu aveți permisiunea de a o modifica.",
        "blocklist-rangeblocks": "Ascunde blocările de gamă",
        "blocklist-timestamp": "Data și ora",
        "blocklist-target": "Utilizator/adresă IP",
-       "blocklist-expiry": "Expiră la",
+       "blocklist-expiry": "Expiră pe",
        "blocklist-by": "Administratorul care a efectuat blocarea",
        "blocklist-params": "Parametrii blocării",
        "blocklist-reason": "Motiv",
        "noautoblockblock": "autoblocare dezactivată",
        "createaccountblock": "crearea de conturi blocată",
        "emailblock": "e-mail blocat",
-       "blocklist-nousertalk": "nu poate modifica propria pagină de discuție",
+       "blocklist-nousertalk": "fără drept de modificare a propriei pagini de discuții",
        "ipblocklist-empty": "Lista blocărilor este goală.",
        "ipblocklist-no-results": "Nu există blocare pentru adresa IP sau numele de utilizator.",
        "blocklink": "blochează",
        "reblock-logentry": "a fost schimbată blocarea pentru [[$1]] cu data expirării la $2 $3",
        "blocklogtext": "Acest jurnal cuprinde acțiunile de blocare și deblocare. Adresele IP blocate automat nu sunt afișate. Vizitați [[Special:BlockList|lista blocărilor]] pentru o listă explicită a adreselor blocate în acest moment.",
        "unblocklogentry": "a deblocat utilizatorul $1",
-       "block-log-flags-anononly": "doar utilizatorii anonimi",
-       "block-log-flags-nocreate": "crearea de conturi dezactivată",
-       "block-log-flags-noautoblock": "autoblocarea dezactivată",
-       "block-log-flags-noemail": "e-mail blocat",
-       "block-log-flags-nousertalk": "nu poate edita propria pagină de discuție",
+       "block-log-flags-anononly": "doar utilizatori anonimi",
+       "block-log-flags-nocreate": "fără drept de a crea conturi",
+       "block-log-flags-noautoblock": "fără blocare automată",
+       "block-log-flags-noemail": "fără drept de a trimite e-mail",
+       "block-log-flags-nousertalk": "fără drept de modificare a propriei pagini de discuții",
        "block-log-flags-angry-autoblock": "autoblocarea avansată activată",
        "block-log-flags-hiddenname": "nume de utilizator ascuns",
        "range_block_disabled": "Abilitatea dezvoltatorilor de a bloca serii de adrese este dezactivată.",
        "allmessagesdefault": "Textul standard",
        "allmessagescurrent": "Textul curent",
        "allmessagestext": "Aceasta este lista completă a mesajelor disponibile în domeniul MediaWiki.\nVă rugăm să vizitați [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] și [//translatewiki.net translatewiki.net] dacă vreți să contribuiți la localizarea programului MediaWiki generic.",
-       "allmessagesnotsupportedDB": "'''{{ns:special}}:Allmessages''' nu poate fi folosit deoarece '''$wgUseDatabaseMessages''' este închisă.",
+       "allmessagesnotsupportedDB": "'''{{ns:special}}:Allmessages''' nu poate fi folosit deoarece opțiunea '''$wgUseDatabaseMessages''' este dezactivată.",
        "allmessages-filter-legend": "Filtru",
        "allmessages-filter": "Filtru după statutul de modificare:",
        "allmessages-filter-unmodified": "Nemodificat",
        "tooltip-preferences-save": "Salvează preferințele",
        "tooltip-summary": "Descrieți pe scurt modificarea",
        "interlanguage-link-title": "$1 – $2",
+       "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/** CSS plasate aici vor fi aplicate tuturor aparițiilor */",
-       "monobook.css": "/* modificați acest fișier pentru a adapta înfățișarea monobook-ului pentru tot situl*/",
-       "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}}",
        "siteuser": "Utilizator {{SITENAME}} $1",
        "pageinfo-category-pages": "Număr de pagini",
        "pageinfo-category-subcats": "Număr de subcategorii",
        "pageinfo-category-files": "Număr de fișiere",
-       "skinname-monobook": "Monobook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Marchează pagina ca verificată",
        "markaspatrolledtext": "Marchează această pagină ca verificată",
        "markedaspatrolled": "Pagină nouă verificată",
        "duplicate-defaultsort": "'''Atenție:''' Cheia de sortare implicită („$2”) o înlocuiește pe precedenta („$1”).",
        "version": "Versiune",
        "version-extensions": "Extensii instalate",
+       "version-skins": "Aspecte instalate",
        "version-specialpages": "Pagini speciale",
        "version-parserhooks": "Hook-uri parser",
        "version-variables": "Variabile",
        "version-antispam": "Prevenirea spamului",
-       "version-skins": "Aspect",
        "version-other": "Altele",
        "version-mediahandlers": "Suport media",
        "version-hooks": "Hook-uri",
        "version-hook-name": "Nume hook",
        "version-hook-subscribedby": "Subscris de",
        "version-version": "($1)",
+       "version-no-ext-name": "[fără nume]",
        "version-license": "Licență MediaWiki",
        "version-ext-license": "Licență",
        "version-ext-colheader-name": "Extensie",
+       "version-skin-colheader-name": "Aspect",
        "version-ext-colheader-version": "Versiune",
        "version-ext-colheader-license": "Licență",
        "version-ext-colheader-description": "Descriere",
index c46516c..5004182 100644 (file)
        "qbmyoptions": "Pàggene mije",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Aggiunge 'na discussiona",
-       "vector-action-delete": "Scangille",
-       "vector-action-move": "Spuèste",
-       "vector-action-protect": "Protegge",
-       "vector-action-undelete": "Repristine",
-       "vector-action-unprotect": "Cange 'a protezione",
-       "vector-view-create": "Ccreje",
-       "vector-view-edit": "Cange",
-       "vector-view-history": "Vide 'u cunde",
-       "vector-view-view": "Ligge",
-       "vector-view-viewsource": "Vide 'u sorgende",
        "actions": "Aziune",
        "namespaces": "Namespace",
        "variants": "Variande",
        "searchrelated": "colleghete",
        "searchall": "tutte",
        "showingresults": "Stoche a fazze vedè aqquà sotte {{PLURAL:$1|'''1''' resultete|'''$1''' resultete}} ca accumenzene cu #'''$2'''.",
-       "showingresultsnum": "Stoche a fazze vedè {{PLURAL:$3|'''1''' resultete|'''$3''' resultete}} ca accumenzene cu #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultate '''$1''' de '''$3'''|Resultate '''$1 - $2''' de '''$3'''}} pe '''$4'''",
        "search-nonefound": "Non ge stonne resultete ca soddisfecene l'inderrogazione.",
        "powersearch-legend": "Ricerche avanzete",
        "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 */",
-       "monobook.css": "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Monobook */",
-       "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-autoconfirmed.css": "/* 'U CSS ca se iacchie aqquà ave effettue seulamende sus a le utinde autoconfirmatarie */",
        "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. */",
-       "monobook.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere MonoBook */",
-       "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 */",
        "group-sysop.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde amministrature */",
        "pageinfo-category-pages": "Numere de pàggene",
        "pageinfo-category-subcats": "Numere de sottocategorije",
        "pageinfo-category-files": "Numere de file",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vettore",
        "markaspatrolleddiff": "Signe cumme condrollate",
        "markaspatrolledtext": "Signe sta pàgene cumme condrollate",
        "markedaspatrolled": "Signate cumme condrollate",
        "duplicate-defaultsort": "'''Attenziò:''' 'A chiave de arrangamende de default \"$2\" sovrascrive quedda precedende \"$1\".",
        "version": "Versione",
        "version-extensions": "Estenziune installete",
+       "version-skins": "Skin",
        "version-specialpages": "Pàggene speciele",
        "version-parserhooks": "Hook analizzature",
        "version-variables": "Variabbele",
        "version-antispam": "Previzione d'u spam",
-       "version-skins": "Skin",
        "version-api": "API",
        "version-other": "Otre",
        "version-mediahandlers": "Gestore de le Media",
        "version-hook-name": "Nome de l'hook",
        "version-hook-subscribedby": "Sottoscritte da",
        "version-version": "(Versione $1)",
+       "version-no-ext-name": "[nisciune nome]",
        "version-svn-revision": "(r$2)",
        "version-license": "Licenze",
        "version-ext-license": "Licenze",
index b1bd799..3bc2f4c 100644 (file)
        "qbmyoptions": "Ваши настройки",
        "faq": "ЧаВО",
        "faqpage": "Project:ЧаВО",
-       "vector-action-addsection": "Добавить тему",
-       "vector-action-delete": "Удалить",
-       "vector-action-move": "Переименовать",
-       "vector-action-protect": "Защитить",
-       "vector-action-undelete": "Восстановить",
-       "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": "Навигация",
        "mergehistory-empty": "Не найдены правки для объединения.",
        "mergehistory-success": "$3 {{PLURAL:$3|правка|правок|правки}} из [[:$1]] успешно {{PLURAL:$3|перенесена|перенесены}} в [[:$2]].",
        "mergehistory-fail": "Не удалось произвести объединение историй страниц, пожалуйста, проверьте параметры страницы и времени.",
+       "mergehistory-fail-toobig": "Не удаётся выполнить слияние истории, так как необходимо перенести больше допустимого лимита в $1 {{PLURAL:$1|версию|версий|версии}}.",
        "mergehistory-no-source": "Исходная страница «$1» не существует.",
        "mergehistory-no-destination": "Целевая страница «$1» не существует.",
        "mergehistory-invalid-source": "Источник должен иметь правильный заголовок.",
        "searchall": "все",
        "showingresults": "Ниже {{PLURAL:$1|1=показан результат|показаны  результаты}} с № '''$2''' и вплоть до № '''$1'''.",
        "showingresultsinrange": "Ниже показано до {{PLURAL:$1|<strong>1</strong> результата|<strong>$1</strong> результатов|<strong>$1</strong> результата}} в диапазоне от <strong>$2</strong> до <strong>$3</strong>.",
-       "showingresultsnum": "Ниже {{PLURAL:$3|1=показан|показаны}} '''$3''' {{PLURAL:$3|результат|результатов|результата}}, начиная с № '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|1=Результат '''$1''' из '''$3'''|Результаты '''$1—$2''' из '''$3'''}} для «'''$4'''»",
        "search-nonefound": "Соответствий запросу не найдено.",
        "powersearch-legend": "Расширенный поиск",
        "tooltip-summary": "Введите краткое описание",
        "interlanguage-link-title": "$1 — $2",
        "common.css": "/* Размещённый здесь CSS будет применяться ко всем темам оформления */",
-       "monobook.css": "/* Размещённый здесь CSS будет применяться к теме оформления Monobook */",
-       "vector.css": "/* Размещённый здесь CSS будет применяться к векторной теме оформления  */",
        "print.css": "/* Размещённый здесь CSS будет применяться к версии для печати */",
        "noscript.css": "/* Размещённый здесь CSS будет применяться для участников с отключенным JavaScript  */",
        "group-autoconfirmed.css": "/* Размещённый здесь CSS будет применяться для автоподтверждённых участников */",
        "group-sysop.css": "/* Размещённый здесь CSS будет применяться только для администраторов */",
        "group-bureaucrat.css": "/* Размещённый здесь CSS будет применяться только для бюрократов */",
        "common.js": "/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */",
-       "monobook.js": "/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления MonoBook */",
-       "vector.js": "/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Vector */",
        "group-autoconfirmed.js": "/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус автоподтверждённых (autoconfirmed) */",
        "group-bot.js": "/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус ботов (bots) */",
        "group-sysop.js": "/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус администраторов (sysops) */",
        "pageinfo-category-pages": "Количество страниц",
        "pageinfo-category-subcats": "Количество подкатегорий",
        "pageinfo-category-files": "Количество файлов",
-       "skinname-vector": "Векторное",
        "markaspatrolleddiff": "Отметить как проверенную",
        "markaspatrolledtext": "Отметить эту статью как проверенную",
        "markedaspatrolled": "Отмечена как проверенная",
        "duplicate-defaultsort": "Внимание. Ключ сортировки по умолчанию «$2» переопределяет прежний ключ сортировки по умолчанию «$1».",
        "version": "Версия",
        "version-extensions": "Установленные расширения",
+       "version-skins": "Установленные темы оформления",
        "version-specialpages": "Служебные страницы",
        "version-parserhooks": "Перехватчики синтаксического анализатора",
        "version-variables": "Переменные",
        "version-antispam": "Антиспам",
-       "version-skins": "Темы оформления",
        "version-other": "Иное",
        "version-mediahandlers": "Обработчики медиа",
        "version-hooks": "Перехватчики",
        "version-hook-name": "Имя перехватчика",
        "version-hook-subscribedby": "Подписан на",
        "version-version": "(Версия $1)",
+       "version-no-ext-name": "[без названия]",
        "version-license": "Лицензия MediaWiki",
        "version-ext-license": "Лицензия",
        "version-ext-colheader-name": "Расширение",
+       "version-skin-colheader-name": "Тема оформления",
        "version-ext-colheader-version": "Версия",
        "version-ext-colheader-license": "Лицензия",
        "version-ext-colheader-description": "Описание",
index 4fdf3dc..f89f060 100644 (file)
        "qbmyoptions": "Мої сторінкы",
        "faq": "Часты звідованя",
        "faqpage": "Project:Часты звідованя",
-       "vector-action-addsection": "Придати тему",
-       "vector-action-delete": "Вымазати",
-       "vector-action-move": "Переменовати",
-       "vector-action-protect": "Всокотити",
-       "vector-action-undelete": "Обновити",
-       "vector-action-unprotect": "Змінити замок",
-       "vector-view-create": "Створити",
-       "vector-view-edit": "Едітовати",
-       "vector-view-history": "Видїти історію",
-       "vector-view-view": "Чітати",
-       "vector-view-viewsource": "Видїти код",
        "actions": "Дїї",
        "namespaces": "Просторы назв",
        "variants": "Варіанты",
        "difference-missing-revision": "{{PLURAL:$2|Єдна з ревізій|$2 ревізії|$2 ревізій}} к пожадованому порівнаню ($1) {{PLURAL:$2|не є|не суть|не є}}.\n\nГевсе є звычайно запрічінене так, же наслїдовали сьте застарїлый одказ історічнов ревізіов сторінкы, котра уж была змазана.\nДетайлы можуть быти найджены в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} книзї змазаный сторінок].",
        "searchresults": "Резултаты гляданя",
        "searchresults-title": "Резултаты гляданя \"$1\"",
-       "toomanymatches": "Пожадавцї одповідать дуже много згод, спробуйте іншый запыт.",
        "titlematches": "Сторінкы з одповідаючов назвов",
        "textmatches": "Сторінкы з одповідаючім текстом",
        "notextmatches": "Немає згоду в текстах сторінок",
        "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''' {{PLURAL:$1|резултат|резултаты|резултатів}}, почінаючіх з №&nbsp;'''$2'''",
-       "showingresultsnum": "Ниже вказано <strong>$3</strong> {{PLURAL:$3|резултат|резултаты|резултатів}}, почінаючі з №&nbsp;<strong>$2</strong>.",
        "showingresultsheader": "{{PLURAL:$5|Резултат '''$1''' з '''$3'''|Резултаты '''$1 — $2''' з '''$3'''}}  про '''$4'''",
        "search-nonefound": "На вашу пожадавку не были найджены жадны резултаты.",
        "powersearch-legend": "Росшырене гляданя",
        "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": "Правдиве імя:",
        "log-title-wildcard": "Глядати назвы зачінаючі ся з тым текстом",
        "showhideselectedlogentries": "Вказати/сховати зволены записы лоґу.",
        "allpages": "Вшыткы сторінкы",
-       "alphaindexline": "од $1 до $2",
        "nextpage": "Далша сторінка ($1)",
        "prevpage": "Попередня сторінка ($1)",
        "allpagesfrom": "Вказати сторінкы, што ся зачінають на:",
index 705de39..9a8e9fe 100644 (file)
@@ -6,10 +6,6 @@
                ]
        },
        "mytalk": "Ibiganiro byanjye",
-       "vector-action-move": "Imura",
-       "vector-view-edit": "Hindura",
-       "vector-view-history": "Reba amateka",
-       "vector-view-view": "Soma",
        "toolbox": "Ibikoresho",
        "currentevents": "Ibigezweho",
        "mainpage": "Intangiriro",
index 9599d23..c2d4562 100644 (file)
        "qbmyoptions": "मम पृष्ठानि",
        "faq": "सामान्यजिज्ञासाः (FAQ)",
        "faqpage": "Project:सामान्यजिज्ञासाः(FAQ)",
-       "vector-action-addsection": "विषयः योज्यताम्",
-       "vector-action-delete": "अपाक्रियताम्",
-       "vector-action-move": "शीर्षकं परिवर्त्यताम्",
-       "vector-action-protect": "संरक्ष्यताम्",
-       "vector-action-undelete": "नापाकृतं",
-       "vector-action-unprotect": "संरक्षणं परिवर्तयतु",
-       "vector-view-create": "सृज्यताम्",
-       "vector-view-edit": "सम्पाद्यताम्",
-       "vector-view-history": "इतिहासः दृश्यताम्",
-       "vector-view-view": "पठ्यताम्",
-       "vector-view-viewsource": "स्रोतः दृश्यताम्",
        "actions": "क्रियाः",
        "namespaces": "नामाकाशाः",
        "variants": "पाठभेदाः",
        "difference-missing-revision": "एतस्य भेदस्य {{PLURAL:$2|एकं संस्करणं|$2 संस्करणानि}} ($1) न {{PLURAL:$2|प्राप्तम्|प्राप्तानि}} ।\n\nअपाकृतानां पृष्ठानां संस्करणानाम् अन्वेषणकाले प्रायशः एतादृशं भवति । अधिकं ज्ञातुं [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} अपाकृतानाम् आवलि)] पश्यतु ।",
        "searchresults": "अन्वेषणपरिणामाः",
        "searchresults-title": "\"$1\" कृते अन्वेषणपरिणामाः",
-       "toomanymatches": "बहवः परिणामाः प्राप्ताः, कृपया शब्दं परिवर्त्य पुनः अन्विष्यताम्",
        "titlematches": "पृष्ठशीर्षकं मेलः (matches)",
        "textmatches": "पृष्ठपाठः मेलः (matches)",
        "notextmatches": "एषः शब्दः न कस्मिंश्चिदपि पृष्ठे अन्तर्भवति ।",
        "searchall": "सर्वाणि",
        "showingresults": "#'''$2''' क्रमाङ्कात् आरभ्य {{PLURAL:$1|'''$1''' परिणामः अधः प्रदर्शितः|'''$1''' परिणामाः अधः प्रदर्शिताः}}।",
        "showingresultsinrange": "#'''$2''' क्रमाङ्कात् आरभ्य #'''$3''' क्रमाङ्कपर्यन्तं {{PLURAL:$1|'''$1''' परिणामः अधः प्रदर्शितः|'''$1''' परिणामाः अधः प्रदर्शिताः}}।",
-       "showingresultsnum": "#'''$2''' क्रमाङ्कात् आरभ्य {{PLURAL:$3|'''1''' परिणामः अधः प्रदर्शितः|'''$3''' परिणामाः अधः प्रदर्शिताः}}।",
        "showingresultsheader": "'''$4''' इत्येतस्मै {{PLURAL:$5|'''$1''' परिणामः '''$3''' इत्येषु|'''$1 - $2''' परिणामाः '''$3''' इत्येषु}}",
        "search-nonefound": "भवतः/भवत्याः अपेक्षानुगुणं परिणामः न विद्यते ।",
        "powersearch-legend": "प्रगतम् अन्वेषणम्",
        "pageinfo-category-pages": "पृष्ठानां सङ्ख्या",
        "pageinfo-category-subcats": "उपवर्गानां सङ्ख्या",
        "pageinfo-category-files": "सञ्चिकानां सङ्ख्या",
-       "skinname-monobook": "पुस्तक",
        "markaspatrolleddiff": "आरक्षितमिति अङ्कयतु ।",
        "markaspatrolledtext": "एतपुटम् आरक्षितमिति अङ्कयतु ।",
        "markedaspatrolled": "आरक्षितमिति अङ्कयतु ।",
index 5caaa2d..7ffcdeb 100644 (file)
        "qbmyoptions": "Мин сирэйдэрим",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Тиэмэ эбии",
-       "vector-action-delete": "Сот",
-       "vector-action-move": "Аатын уларыт",
-       "vector-action-protect": "Уларыйбат гын",
-       "vector-action-undelete": "Төннөр",
-       "vector-action-unprotect": "Көмүскэлин уларыт",
-       "vector-view-create": "Ай",
-       "vector-view-edit": "Уларыт",
-       "vector-view-history": "Устуоруйатын көрүү",
-       "vector-view-view": "Ааҕыы",
-       "vector-view-viewsource": "Бэлиэлэрин көрүү",
        "actions": "Дьайыылар",
        "namespaces": "Аат даллара",
        "variants": "Барыллар",
        "searchall": "бары",
        "showingresults": "Манна {{PLURAL:$1|түмүк|түмүктэр}} {{PLURAL:$1|көрдөрүлүннэ|көрдөрүлүннүлэр}} <strong>$1</strong> , мантан саҕалаан №&nbsp;<strong>$2</strong>.",
        "showingresultsinrange": "Манна {{PLURAL:$1|<strong>1</strong> түмүк|<strong>$1</strong> түмүк}} мантан саҕалаан <strong>$2</strong> маныаха дылы <strong>$3</strong> көрдөрүлүннэ.",
-       "showingresultsnum": "Манна {{PLURAL:$3|түмүк|түмүктэр}} {{PLURAL:$3|көрдөрөлүннэ|көрдөрүлүннүлэр}} <strong>$3</strong>, мантан саҕалаан №&nbsp;<strong>$2</strong>.",
        "showingresultsheader": "'''$4''' анаммыт {{PLURAL:$5|мантан '''$3''' түмүгэ - '''$1'''|мантан '''$3''' түмүктэрэ '''$1 - $2'''}}",
        "search-nonefound": "Көрдөбүлгэ эппиэттиир билэлэр көстүбэтилэр.",
        "powersearch-legend": "Дириҥэтэн көрдөөһүн",
        "tooltip-preferences-save": "Туруоруулары бигэргэт",
        "tooltip-summary": "Кылгастык бу туһунан суруй",
        "common.css": "/** Манна оҥоһуллубут CSS атын скиннарга эмиэ олохтонуо */",
-       "monobook.css": "/* Манна оҥоһуллубут CSS Monobook диэн скиҥҥа туһаныллыа */",
        "common.js": "/* Оҥоһуллубут JavaScript ханнык баҕарар киһи манна киирдэҕинэ үлэлээн кэлиэ. */",
-       "monobook.js": "/* Эргэрбит; маны туһан:[[MediaWiki:common.js]] */",
        "anonymous": "{{SITENAME}} ааттамматах {{PLURAL:$1|кыттааччыта|кыттааччылара}}",
        "siteuser": "{{SITENAME}} кыттааччыта $1",
        "anonuser": "{{SITENAME}} бэйэтин билиһиннэрбэтэх кыттааччыта $1",
index 99d07b5..dc1661a 100644 (file)
        "qbmyoptions": "In̕anḱ sakamko",
        "faq": "Baḍae kupuliko",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Asol katha joṛaome",
-       "vector-action-delete": "Giḍi",
-       "vector-action-move": "Ocoḱ́me",
-       "vector-action-protect": "Bańcao",
-       "vector-action-undelete": "Bań getgiḍi",
-       "vector-action-unprotect": "Bodol rukhiyạ",
-       "vector-view-create": "Tearme",
-       "vector-view-edit": "So̠mpado̠n",
-       "vector-view-history": "Jạṛ ńelme",
-       "vector-view-view": "Paṛhaḱme",
-       "vector-view-viewsource": "Ńamoḱaḱ ńelme",
        "actions": "Kạmi",
        "namespaces": "Ñutum jaiga",
        "variants": "Etaḱko",
        "searchmenu-exists": "'''Noa wiki re do \"[[:$1]] ńutum sakam menaḱa",
        "searchmenu-new": "wiki re [[:$1]]nãwã sakam tear",
        "searchprofile-articles": "Menaḱaḱ sakamko",
-       "searchprofile-project": "Go̠ṛo ar Project sakam",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Sanamaḱ koge",
        "searchprofile-advanced": "Sompadon",
        "searchprofile-articles-tooltip": "$1 re ńelme",
-       "searchprofile-project-tooltip": "$1 re sẽndraeme",
        "searchprofile-images-tooltip": "File sendra",
        "searchprofile-everything-tooltip": "Sanam ko modre sẽndra ( roṛ sakam modre hõ)",
        "searchprofile-advanced-tooltip": "Judạ ńutum re sẽndra",
index 14ae576..b2c68bb 100644 (file)
        "qbmyoptions": "Is preferèntzias meas",
        "faq": "Pregontas/Respostas (FAQ)",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Giunghe cuntierra",
-       "vector-action-delete": "Cantzella",
-       "vector-action-move": "Move",
-       "vector-action-protect": "Ampara",
-       "vector-action-undelete": "Recùpera",
-       "vector-view-create": "Crea",
-       "vector-view-edit": "Acontza",
-       "vector-view-history": "Càstia istòria",
-       "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",
index 2bc0197..b9ea08d 100644 (file)
        "qbmyoptions": "Li mè pàggini",
        "faq": "Dumanni cumuni",
        "faqpage": "Project:Dumanni comuni",
-       "vector-action-addsection": "Agghiunci argumentu",
-       "vector-action-delete": "Elìmina",
-       "vector-action-move": "Sposta",
-       "vector-action-protect": "Pruteggi",
-       "vector-action-undelete": "Riprìstina",
-       "vector-action-unprotect": "Cancia la prutizzioni",
-       "vector-view-create": "Crea",
-       "vector-view-edit": "Cancia",
-       "vector-view-history": "Talìa a storia",
-       "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",
        "searchrelated": "currilati",
        "searchall": "tutti",
        "showingresults": "Ammustra nzinu a {{PLURAL:$1|'''1''' risurtatu|'''$1''' risurtati}} a pàrtiri dô nùmmuru '''$2'''.",
-       "showingresultsnum": "L'alencu cunteni {{PLURAL:$3|'''1''' risurtatu|'''$3''' risurtati}} a pàrtiri dû nùmmuru '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Risultatu '''$1''' di '''$3'''|Risultati '''$1 - $2''' di '''$3'''}} pi '''$4'''",
        "search-nonefound": "La circata nun desi nuddu risurtatu.",
        "powersearch-legend": "Ricerca avanzata",
        "tooltip-preferences-save": "Sarva prifirenzi",
        "tooltip-summary": "Nsiriri na sintisi curta",
        "common.css": "/* Li stili CSS nziriti ccà s'àpplicanu a tutti li skin */",
-       "monobook.css": "/* Li stili CSS nziriti ccà s'àpplicanu a l'utenti chi usanu la skin Monobook */",
        "common.js": "/* Lu còdici JavaScript nziritu ccà veni carricatu di ognuna pàggina, pi tutti l'utenti. */",
-       "monobook.js": "/* Lu còdici JavaScript nzirutu ccà veni carricatu di l'utenti c'ùsanu la skin MonoBook */",
        "anonymous": "{{PLURAL:$1|Utenti anònimu|Utenti anònimi}} di {{SITENAME}}",
        "siteuser": "$1, utenti di {{SITENAME}}",
        "lastmodifiedatby": "Sta pàggina hà statu canciata pi l'ùrtima vota lu $2, $1 di $3.",
        "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-monobook": "MonoBook",
        "markaspatrolleddiff": "Segna lu canciamentu comu virificatu",
        "markaspatrolledtext": "Segna sta pàggina comu virificata",
        "markedaspatrolled": "Canciamentu virificatu",
index c50eb53..5c60e43 100644 (file)
@@ -16,7 +16,8 @@
                        "Ushanka",
                        "sco.wikipedia.org editors",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "PiRSquared17"
                ]
        },
        "tog-underline": "Unnerline airtins:",
        "qbmyoptions": "Ma pages",
        "faq": "ASS",
        "faqpage": "Project:ASS",
-       "vector-action-addsection": "Eik topic",
-       "vector-action-delete": "Delyte",
-       "vector-action-move": "Muiv",
-       "vector-action-protect": "Fend",
-       "vector-action-undelete": "Ondelyte",
-       "vector-action-unprotect": "Chynge protection",
-       "vector-view-create": "Ceaut",
-       "vector-view-edit": "Eedit",
-       "vector-view-history": "See histerie",
-       "vector-view-view": "Read",
-       "vector-view-viewsource": "See Soorce",
        "actions": "Actions",
        "namespaces": "Namespaces",
        "variants": "Variants",
        "newarticle": "(New)",
        "newarticletext": "Ye'v follaed aen airtin til ae page that disna exeest yet. Tae cræft the page, stairt typin in the kist ablo (see the [$1 heelp page] fer mair info). Gif ye'r here bi mistak, jist clap yer brouser's <strong>back</strong> button.",
        "anontalkpagetext": "----\n<em>This is the discussion page fer aen anonymoos uiser that's naw cræftit aen accoont yet, or that disna uise it.</em>\nWe maun therefore uise the numerical IP address tae identifie him/her.\nSic aen IP address can be shaired bi several uisers.\nGif ye'r aen anonymos uiser n feel that onreelavant comments hae been directed at ye, please [[Special:UserLogin/signup|cræft aen accoont]] or [[Special:UserLogin|log in]] tae avoid futur confusion wi ither anonymoos uisers.",
-       "noarticletext": "Thaur's naw tex oan this page the nou. \nYe can [[Special:Search/{{PAGENAME}}|rake fer this page teitle]] in ither pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rake the related logs],\n or [{{fullurl:{{FULLPAGENAME}}|action=edit}} eidit this page].</span>",
+       "noarticletext": "Thaur's naw tex oan this page the nou. \nYe can [[Special:Search/{{PAGENAME}}|rake fer this page teitle]] in ither pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rake the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} eidit this page].</span>",
        "noarticletext-nopermission": "Thaur's nae tex in this page the nou.\nYe can [[Special:Search/{{PAGENAME}}|rake fer this page title]] in ither pages, or <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rake the relatit logs]</span>, but ye dinna hae permeession tae cræft this page.",
        "missing-revision": "The reveesion #$1 o the page named \"{{FULLPAGENAME}}\" disna exeest.\n\nThis is uissuallie caused bi follaein aen ootdated histerie airtin til ae page that haes been delytit.\nDetails can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].",
        "userpage-userdoesnotexist": "Uiser accoont \"<nowiki>$1</nowiki>\" hasnae been registerit. Please check gin ye wint tae mak or eidit this page.",
        "mergehistory-empty": "Naw reveesions can be merged.",
        "mergehistory-success": "$3 {{PLURAL:$3|reveesion|reveesions}} o [[:$1]] successfully merged intil [[:$2]].",
        "mergehistory-fail": "Onable tae perform histerie merge, please recheck the page n time parameters.",
+       "mergehistory-fail-toobig": "Canna perform histerie merge cause mair than the leemit o $1 {{PLURAL:$1|reveesion|reveesions}} wid be muivit.",
        "mergehistory-no-source": "Soorce page $1 disna exeest.",
        "mergehistory-no-destination": "Destination page $1 disna exeest.",
        "mergehistory-invalid-source": "Soorce page maun be ae valid title.",
        "searchall": "aw",
        "showingresults": "Shawin ablo up tae {{PLURAL:$1|'''1''' ootcome|'''$1''' ootcomes}} stertin wi #'''$2'''.",
        "showingresultsinrange": "Shawin ablo up til {{PLURAL:$1|<strong>1</strong> ootcome|<strong>$1</strong> ootcome}} in range #<strong>$2</strong> til #<strong>$3</strong>.",
-       "showingresultsnum": "Shawin ablo {{PLURAL:$3|'''1''' ootcome|'''$3''' ootcomes}} stertin wi #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Ootcome <strong>$1</strong> o <strong>$3</strong>|Ootcomes <strong>$1 - $2</strong> o <strong>$3</strong>}} fer <strong>$4</strong>",
        "search-nonefound": "Thaur were naw ootcomes matchin the speiring.",
        "powersearch-legend": "Advanced rake",
        "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": "{{int:recentchanges-label-newpage}} (see [[Special:NewPages|leet o new pages]] ava)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (see [[Special:NewPages|leet o new pages]] n aw)",
        "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",
        "windows-nonascii-filename": "This wiki disna support filenames wi speecial chairacters.",
        "fileexists": "Ae file wi this name exeests aareadies, please check <strong>[[:$1]]</strong> gif ye'r no sair that ye want tae chynge it.\n[[$1|thumb]]",
        "filepageexists": "The descreeption page fer this file haes awreadie been cræftit at <strong>[[:$1]]</strong>, bit nae file wi this name exeests the nou.\nThe ootline that ye enter will na kith oan the descreeption page.\nTae mak yer ootline kith thaur, ye'll need tae manuallie eedit it.\n[[$1|thumb]]",
-       "fileexists-extension": "Ae file wi ae siclike name exeests: [[$2|thumb]]\n* Name o the uplaidin file: <strong>[[:$1]]</strong>\n* Name o the exeestin file: <strong>[[:$2]]</strong>\nPlease chuise ae different name.",
+       "fileexists-extension": "Ae file wi ae siclike name exeests: [[$2|thumb]]\n* Name o the uplaidin file: <strong>[[:$1]]</strong>\n* Name o the exeestin file: <strong>[[:$2]]</strong>\nWid ye lik tae chuise ae mair disteencteeve name?",
        "fileexists-thumbnail-yes": "The file seems tae be aen eemage o reduced size ''(thumbnail)''.\n[[$1|thumb]]\nPlease check the file <strong>[[:$1]]</strong>.\nGif the checked file is the same eemage o oreeginal size it's no necessairie tae uplaid aen extra thumbnail.",
        "file-thumbnail-no": "The filename begins wi <strong>$1</strong>.\nIt seems tae be aen eemage o reduced size ''(thumbnail)''.\nGif ye hae this emage in ful resolution uplaid this yin, itherwise please chynge the filename.",
        "fileexists-forbidden": "Ae file wi this name awreadie exists, n canna be owerwritten.\nGif ye still wish tae uplaid yer file, please gang back n uise ae new name.\n[[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Delytion n restoration o files tempralie disabled during maintenance.",
        "filedelete-maintenance-title": "Canna delyte file",
        "mimesearch": "MIME rake",
-       "mimesearch-summary": "This page enables the filterin o files fer thair MIME type.\nInput: contenttype/subtype, e.g. <code>eemage/jpeg</code>.",
+       "mimesearch-summary": "This page enables the filterin o files fer thair MIME type.\nInput: contenttype/subtype or contenttype/*, e.g. <code>eemage/jpeg</code>.",
        "mimetype": "MIME type:",
        "download": "dounlaid",
        "unwatchedpages": "Onwatched pages",
        "version-parser-function-hooks": "Parser function huiks",
        "version-hook-name": "Huik name",
        "version-hook-subscribedby": "Subscribed bi",
+       "version-no-ext-name": "[no name]",
        "version-ext-colheader-description": "Descreeption",
        "version-ext-colheader-credits": "Writers",
        "version-license-title": "License fer $1",
index 67d9eab..a934d02 100644 (file)
        "qbmyoptions": "Li me' pàgini",
        "faq": "FAQ (infuimmazioni e aggiuddu)",
        "faqpage": "Project:FAQ (infuimmazioni e aggiuddu)",
-       "vector-action-addsection": "Aggiungì oggettu",
-       "vector-action-delete": "Canzella",
-       "vector-action-move": "Ippustha",
-       "vector-action-protect": "Pruteggì",
-       "vector-view-create": "Cria",
-       "vector-view-edit": "Mudifigga",
-       "vector-view-history": "Vèdi isthòria",
-       "vector-view-view": "Leggi",
-       "vector-view-viewsource": "Vèdi fonti",
        "actions": "Azioni",
        "namespaces": "Tipi di pàgina:",
        "variants": "Varianti",
        "searchmenu-exists": "'''Z'è una pàgina ciamadda\"[[:$1]]\" in chisthu vichi.''' {{PLURAL:$2|0=|Vèdi puru li althri risulthaddi agattaddi.}}",
        "searchmenu-new": "'''Crea la pàgina \"[[:$1]]\" in chistha vichi!''' {{PLURAL:$2|0=|Vèdi puru la pàgina agattadda cun la zercha tòia.|Vèdi puru li risulthaddi agattaddi .}}",
        "searchprofile-articles": "Bozi",
-       "searchprofile-project": "Pàgini d'aggiuddu e di prugettu",
        "searchprofile-images": "Mùrthimediari",
        "searchprofile-everything": "Tuttu",
        "searchprofile-advanced": "Abanzaddu",
        "searchprofile-articles-tooltip": "Zercha in $1",
-       "searchprofile-project-tooltip": "Zercha in $1",
        "searchprofile-images-tooltip": "Zirchà dati",
        "searchprofile-everything-tooltip": "Zercha in tuttu lu cuntinuddu (pàgini di dischussioni cumpresi)",
        "searchprofile-advanced-tooltip": "Zercha in althri tipi di pàgina",
        "searchrelated": "curriraddi",
        "searchall": "tutti",
        "showingresults": "Accó {{PLURAL:$1|màssimu '''1''' risulthaddu|màssimu li '''$1''' risulthaddi}} à partì da lu nùmaru #'''$2'''.",
-       "showingresultsnum": "Accó {{PLURAL:$3|'''1''' risulthaddu |li '''$3''' risulthaddi}} à partì da lu nùmaru #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Risulthaddu '''$1''' of '''$3'''|Risulthaddi '''$1 - $2''' di '''$3'''}} pa '''$4'''",
        "search-nonefound": "Nisciuni risulthaddi pa la to' zercha",
        "powersearch-legend": "Zercha abanzadda",
        "allowemail": "Cunsenti lu rizzibimentu di postha erettrònica d'althri utenti (1)",
        "prefs-searchoptions": "Zercha",
        "prefs-namespaces": "Tipu di pagina",
-       "defaultns": "Namespace pridifiniddi pa zirchà:",
        "default": "pridifiniddu",
        "prefs-files": "File",
        "prefs-custom-css": "CSS passunarizzaddu",
        "prefs-custom-js": "JS passunarizzaddu",
        "youremail": "Indirizzu di postha erettrònica: *",
        "username": "Innòmu utenti",
-       "uid": "ID utenti:",
        "prefs-memberingroups": "Membru di {{PLURAL:$1|lu gruppu|li gruppi}}:",
        "prefs-registration": "Data di registhrazioni:",
        "yourrealname": "Innòmu veru: *",
        "logempty": "Lu rigisthru nò cunteni erementi curripundenti.",
        "log-title-wildcard": "Zercha li tìturi ch'ischuminzani cun",
        "allpages": "Tutti li pàgini",
-       "alphaindexline": "da $1 a $2",
        "nextpage": "Pàgini sighenti ($1)",
        "prevpage": "Pàgina prizzidenti ($1)",
        "allpagesfrom": "Musthra li pàgini a parthì da:",
index fca4c06..d079543 100644 (file)
        "qbedit": "Rievdat",
        "qbpageoptions": "Siidoásahusat",
        "qbmyoptions": "Ásahusat",
-       "vector-action-addsection": "Lasit fáttá",
-       "vector-action-delete": "Sihko",
-       "vector-action-move": "Sirdde",
-       "vector-action-protect": "Suodjal",
-       "vector-action-undelete": "Máhcat",
-       "vector-action-unprotect": "Rievdat suodjaleami",
-       "vector-view-create": "Álggat",
-       "vector-view-edit": "Rievdat",
-       "vector-view-history": "Geahča historjjá",
-       "vector-view-view": "Loga",
-       "vector-view-viewsource": "Geahča gáldokoda",
        "errorpagetitle": "Feaila",
        "returnto": "Máhcat siidui $1.",
        "tagline": "{{SITENAME}}",
        "viewprevnext": "Čájet [$3] oktanaga.\n\n$1 {{int:pipe-separator}} $2",
        "searchmenu-new": "'''Álggat siiddu ''[[:$1]]'' dán Wikipediai'''",
        "searchprofile-articles": "Sisdoallosiiddut",
-       "searchprofile-project": "Veahkke- ja prošeaktasiiddut",
        "searchprofile-everything": "Buot",
        "searchprofile-advanced": "Viiddiduvvon",
        "showingresults": "{{PLURAL:$1|'''Okta''' boađus|'''$1''' bohtosa}} bohtosa'''$2''' rájes.",
-       "showingresultsnum": "Vuolábealde {{PLURAL:$3|lea '''okta''' ohcanboađus|leat '''$3''' ohcanbohtosa}} '''$2.''' bohtosa rájes.",
        "powersearch-ns": "Oza nammagomuvuođain:",
        "powersearch-togglelabel": "Rievdat válljema:",
        "powersearch-toggleall": "Buot",
        "prefs-files": "Fiillat",
        "youremail": "E-poastačujuhus",
        "username": "Geavaheaddjenamma:",
-       "uid": "Geavaheaddji-ID:",
        "prefs-memberingroups": "Miellahttu/lahttu {{PLURAL:$1|joavkkus|joavkkuin}}:",
        "prefs-registration": "Registrerenáigi:",
        "yourrealname": "Rivttes namma",
        "logempty": "Eai dáhpáhusat loggas.",
        "log-title-wildcard": "Mearri álgá mearkkaiguin",
        "allpages": "Buot siiddut",
-       "alphaindexline": "$1…$2",
        "nextpage": "Čuovvovaš siidu ($1)",
        "prevpage": "Ovddit siidu ($1)",
        "allarticles": "Buot siiddut",
        "block": "Hehtte geavaheaddji",
        "blockip": "Hehtte rievdadeamis",
        "blockip-legend": "Cagge geavaheaddji",
-       "ipadressorusername": "IP-čujuhus dahje geavaheaddjidovddaldat",
+       "ipaddressorusername": "IP-čujuhus dahje geavaheaddjidovddaldat",
        "ipbexpiry": "Guhkkodat",
        "ipbreason": "Sivva",
        "ipbreason-dropdown": "*Dábálas cakkastallansivat\n** Boasto dieđuid lasiheapmi\n** Sisdoalu sihkkun\n** Reklámaliŋkkaid lasiheapmi\n** Moiven dahje ruskkaid lasiheapmi\n** Hehtten\n** Maŋgga geavaheaddjidovddaldaga geaveaheapmi boastut\n** Fasttes geavaheaddjidovddaldat",
index 7d92e0c..0ff91b7 100644 (file)
        "servertime": "Xepede server",
        "guesstimezone": "Xuniimyabuatlecaún dai'browser",
        "allowemail": "Pos-coccebj e-iitomde diijömde caitóm",
-       "defaultns": "Yahöx jan ipartuatl iti auto:",
        "default": "auto",
        "prefs-files": "Ciúchán",
        "youremail": "E-iitom:",
        "username": "Caitom ID:",
-       "uid": "ID comháars:",
        "yourrealname": "Comcáacuatl:",
        "yourlanguage": "Itom ö:",
        "yourvariant": "Ccójbam:",
        "istemplate": "incluciónaj",
        "whatlinkshere-links": "← linkám",
        "blockip": "Block caitom",
-       "ipadressorusername": "Addressade IP jöx caitom ID:",
+       "ipaddressorusername": "Addressade IP jöx caitom ID:",
        "ipbreason": "Ra:",
        "ipbsubmit": "Block jan caitom",
        "ipbother": "Pac'de xepe:",
        "siteusers": "{{SITENAME}} cait(o/ó)m $1",
        "spambot_username": "MediaWiki nespam",
        "widthheightpage": "$1 × $2, $3 páhinám",
-       "showhidebots": "($1 botám)",
        "ilsubmit": "Yahöx",
        "bydate": "de datum",
        "exif-fnumber": "F Numberam",
index 389e4dd..6ad3c21 100644 (file)
        "qbmyoptions": "Mona poslapē",
        "faq": "DOK",
        "faqpage": "Project:DOK",
-       "vector-action-addsection": "Pridietė tema",
-       "vector-action-delete": "Trintė",
-       "vector-action-move": "Parvadintė",
-       "vector-action-protect": "Ožrakintė",
-       "vector-action-undelete": "Atkortė",
-       "vector-action-unprotect": "Keistė apsauga",
-       "vector-view-create": "Sokortė",
-       "vector-view-edit": "Taisītė",
-       "vector-view-history": "Veizietė istuorėjė",
-       "vector-view-view": "Skaitītė",
-       "vector-view-viewsource": "Veizietė kuoda",
        "actions": "Vēksmā",
        "namespaces": "Vardū srėtīs",
        "variants": "Variantā",
        "searchmenu-exists": "'''Poslapis pavadėnts „[[$1]]“ šėtuo wiki'''",
        "searchmenu-new": "'''Sokortė poslapi „[[:$1]]“ šėtuo wiki!'''",
        "searchprofile-articles": "Torėnė poslapē",
-       "searchprofile-project": "Pagelbas ė pruojekta poslapē",
        "searchprofile-images": "Daugēlīpės terpės failā",
        "searchprofile-everything": "Vėsks",
        "searchprofile-advanced": "Prapliesta",
        "searchprofile-articles-tooltip": "Ėiškuotė čiuonās: $1",
-       "searchprofile-project-tooltip": "Ėiškuotė čiuonās: $1",
        "searchprofile-images-tooltip": "Ėiškuotė failu",
        "searchprofile-everything-tooltip": "Ėiškuotė vėsuo torėnė (tuom patėm ėr aptarėma poslapiu)",
        "searchprofile-advanced-tooltip": "Ėiškoutė skėrtingūsė vardū sėtīsė",
        "searchrelated": "sosėjėn",
        "searchall": "vėsė",
        "showingresults": "Žemiau ruodoma lėgė '''$1''' {{PLURAL:$1|rezoltata|rezoltatu|rezoltatu}} pradedont #'''$2'''.",
-       "showingresultsnum": "Žemiau ruodoma '''$3''' {{PLURAL:$3|rezoltata|rezoltatu|rezoltatu}} pradedant #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Rezoltats '''$1''' ėš '''$3'''|Rezoltatā '''$1 - $2''' ėš '''$3'''}} vagol paklausėma '''$4'''",
        "search-nonefound": "Nier rezoltatu, katrėi atitėktu ožklausėma.",
        "powersearch-legend": "Prapliesta paėiška",
        "allowemail": "Lēstė siūstė el. gramuotelės ėš kėtū nauduotuoju",
        "prefs-searchoptions": "Paėiškuos nustatīmā",
        "prefs-namespaces": "Vardū srėtīs",
-       "defaultns": "Palē nutīliejėma ėiškuotė šėtuosė vardū srėtīsė:",
        "default": "palē nūtīliejėma",
        "prefs-files": "Failā",
        "youremail": "El. pašts:",
index 27c55d9..b422598 100644 (file)
        "qbmyoptions": "Moje opcije",
        "faq": "ČPP",
        "faqpage": "Project:ČPP",
-       "vector-action-addsection": "Dodaj temu",
-       "vector-action-delete": "Brisanje",
-       "vector-action-move": "Preusmjeri",
-       "vector-action-protect": "Zaštiti",
-       "vector-action-undelete": "Vrati obrisano",
-       "vector-action-unprotect": "Promijeni zaštitu",
-       "vector-view-create": "Napravi",
-       "vector-view-edit": "Uredi",
-       "vector-view-history": "Pregled historije",
-       "vector-view-view": "Čitaj",
-       "vector-view-viewsource": "Vidi izvor (source)",
        "actions": "Akcije",
        "namespaces": "Imenski prostori",
        "variants": "Varijante",
        "searchall": "sve",
        "showingresults": "Dole {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
        "showingresultsinrange": "Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}}, u rasponu od <strong>$2</strong> do <strong>$3</strong>.",
-       "showingresultsnum": "Dolje {{PLURAL:$3|je prikazan '''1''' rezultat|su prikazana '''$3''' rezultata|je prikazano '''$3''' rezultata}} počev od #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Rezultat '''$1''' od '''$3'''|Rezultati '''$1 - $2''' od '''$3'''}} za '''$4'''",
        "search-nonefound": "Nisu pronađeni rezultati koji odgovaraju upitu.",
        "powersearch-legend": "Napredna pretraga",
        "duplicate-defaultsort": "'''Upozorenje''': Postavljeni ključ sortiranja \"$2\" zamjenjuje raniji ključ \"$1\".",
        "version": "Verzija / Верзија",
        "version-extensions": "Instalirana proširenja (ekstenzije)",
+       "version-skins": "Izgledi (skinovi)",
        "version-specialpages": "Posebne stranice",
        "version-parserhooks": "Kuke parsera",
        "version-variables": "Promjenjive",
        "version-antispam": "Sprečavanje spama",
-       "version-skins": "Izgledi (skinovi)",
        "version-other": "Ostalo",
        "version-mediahandlers": "Upravljači medije",
        "version-hooks": "Kuke",
index 07849a4..d2a285b 100644 (file)
        "qbmyoptions": "Tisnatin inu",
        "faq": "Isqsitn li bdda tsutulnin",
        "faqpage": "Project: Isqqsit li bdda",
-       "vector-action-addsection": "Zayd amli",
-       "vector-action-delete": "Ḥiyd",
-       "vector-action-move": "Smmatti",
-       "vector-action-protect": "Ḥbu",
-       "vector-action-undelete": "Rard may mayḥiydn",
-       "vector-action-unprotect": "Ḥiyd aḥbu",
-       "vector-view-create": "Skert",
-       "vector-view-edit": "Ara",
-       "vector-view-history": "Mel amzruy",
-       "vector-view-view": "ɣr",
-       "vector-view-viewsource": "Ẓr asagm",
        "actions": "Imskarn",
        "namespaces": "Ismawn n tɣula",
        "variants": "lmotaghayirat",
        "diff-multi-manyusers": "({{PLURAL:$1|yan ulqm n gratsn|$1 ilqmn ngratsn}} zdar mnnaw {{PLURAL:$2|amcgr |n $2 imcgrn}} {{PLURAL:$1|iḥba|lli iḥban}})",
        "searchresults": "Mad akkan icnubcn",
        "searchresults-title": "Mad akkan icnubcn f \"$1\"",
-       "toomanymatches": "Illa bzzaf maygan zund maya. sbadl taguri yad skra yaḍn",
        "titlematches": "Assaɣ n tasna iga zund",
        "textmatches": "Aṭṛiṣ n tasna iga zund",
        "notextmatches": "Ur ittyufa kra nu uṭṛiṣ igan zund ɣwad",
        "searchmenu-exists": "\"'Tlla yat tasna lli ilan assaɣ « [[:$1]] » ɣ wiki yad",
        "searchmenu-new": "'''Skr Tasna « [[:$1|$1]] » ɣ wiki !'''",
        "searchprofile-articles": "Mayllan ɣ tasna",
-       "searchprofile-project": "Tisniwin n w-aws n usnfar",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "kullu",
        "searchprofile-advanced": "motaqqadim",
        "searchprofile-articles-tooltip": "qlb gh $1",
-       "searchprofile-project-tooltip": "qlb gh $1",
        "searchprofile-images-tooltip": "qlb gh tswira",
        "searchprofile-everything-tooltip": "Cabba ɣ kullu may ityran ɣid (d ḥtta ɣ tisna nu umsgdal)",
        "searchprofile-advanced-tooltip": "Cabba ɣ igmmaḍn li tuyzlaynin",
        "search-interwiki-default": "$1 imyakkatn",
        "search-interwiki-more": "(Uggar)",
        "search-relatedarticle": "Tzdi",
-       "searcheverything-enable": "Cabba ɣ graygat agmmaḍ",
        "searchrelated": "Tuyzday",
        "searchall": "Kullu",
        "showingresults": "Ẓr azddar  {{PLURAL:$1|'''1''' May tuykfan|'''$1''' Mad kfan}} Bdu s #'''$2'''",
-       "showingresultsnum": "Ẓr azddar (ifsr ɣ uzddar) {{PLURAL:$3|'''1''' may kfa|'''$3''' mad kfan}} Bdu s #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|May kfa '''$1''' ar '''$3'''|Mad kfan '''$1 - $2''' ar '''$3'''}} i '''$4'''",
        "search-nonefound": "Ur ittuykfa walu maygan zund ɣayli trit",
        "powersearch-legend": "Amsigl imzwarn",
        "allowemail": "artamz limail dar isxdamn yadni",
        "prefs-searchoptions": "Istayn ucnubc",
        "prefs-namespaces": "Ismawn n tɣula",
-       "defaultns": "ghd sigl gh nitaqat ad",
        "default": "iftiradi",
        "prefs-files": "Asdaw",
        "prefs-custom-css": "khss CSS",
        "prefs-custom-js": "khss JavaScipt",
        "youremail": "Tabrat mail",
        "username": "smiyt o-msxdam:",
-       "uid": "raqm omskhdam:",
        "prefs-registration": "waqt n tsjil:",
        "yourrealname": "smiyt nk lmqol",
        "yourlanguage": "tutlayt:",
        "all-logs-page": "Immussutn ittyuran immurzmn i kullu..",
        "log-title-wildcard": "Cabba s iswln li ttizwirnin s uṭṛiṣ ad",
        "allpages": "Tisniwin kullu tnt",
-       "alphaindexline": "$1 ar $2",
        "nextpage": "Tasna li rad yack ($1)",
        "prevpage": "Tasna li izrin $1",
        "allpagesfrom": "Mel tisniwin li ittizwirn z",
index 8fdddd6..3b582a5 100644 (file)
        "qbmyoptions": "මගේ පිටු",
        "faq": "නිවිප්‍ර",
        "faqpage": "Project:නිවිප්‍ර",
-       "vector-action-addsection": "මාතෘකාව එක්කරන්න",
-       "vector-action-delete": "මකන්න",
-       "vector-action-move": "ගෙනයන්න",
-       "vector-action-protect": "ආරක්‍ෂණය",
-       "vector-action-undelete": "මකාදැමීම අවලංගු කරන්න",
-       "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": "සංචාලන මෙනුව",
        "diff-multi-manyusers": "(පරිශීලකයන් $2 කට වඩා වැඩි ගණනකගේ ආසන්න පුනරීක්‍ෂණ $1ක් පෙන්වා නොමැත)",
        "searchresults": "ගවේෂණ ප්‍රතිඵල",
        "searchresults-title": "\"$1\" සඳහා ගවේෂණ ප්‍රතිඵල",
-       "toomanymatches": "පමණට වඩා ගැලපුම් ගණනක් ලැබුණි, කරුණාකර වෙනස් විමසුමක් සිදුකර බලන්න",
        "titlematches": "පිටු ශීර්ෂය ගැළපෙයි",
        "textmatches": "පිටු පෙළ ගැළපෙයි",
        "notextmatches": "පිටු පෙළ කිසිවක් නොගැළපෙයි",
        "searchrelated": "ආශ්‍රිත",
        "searchall": "සියල්ල",
        "showingresults": "#'''$2''' ගෙන් ආරම්භ කොට, {{PLURAL:$1|ප්‍රතිඵල '''1'''  ක් |ප්‍රතිඵල '''$1''' ක්}} දක්වා පහත පෙන්වා ඇත.",
-       "showingresultsnum": "#'''$2''' ගෙන් ආරම්භ කොට, {{PLURAL:$3|ප්‍රතිඵල '''1'''  ක් |ප්‍රතිඵල '''$3''' ක්}} පහත පෙන්වා ඇත.",
        "showingresultsheader": "'''$4''' සඳහා {{PLURAL:$5| '''$3''' අතුරින් '''$1''' ප්‍රතිඵලය| '''$3''' අතුරින් '''$1 - $2''' ප්‍රතිඵලයන්}}",
        "search-nonefound": "විමසුම හා ගැලපෙන ප්‍රතිඵල කිසිවක් නොමැත.",
        "powersearch-legend": "වැඩිමනත් ගවේෂණය",
        "tooltip-preferences-save": "අභිරුචීන් සුරකින්න",
        "tooltip-summary": "කෙටි සාරාංශයක් ඇතුළත් කරන්න",
        "common.css": "/* මෙහි CSS  බහාලීම සියළු ඡවියයන් භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */",
-       "monobook.css": "/* මෙහි CSS  බහාලීම ඒකායන ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */",
        "print.css": "/* මෙහි CSS  බහාලීම මුද්‍රණ ප්‍රතිදානයට බලපෑම් සිදු කල හැක */",
        "common.js": "/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් සෑම පිටු ප්‍රවේශනයකදීම සියළු පරිශීලකයන්හට ප්‍රවේශනය කෙරේ. */",
-       "monobook.js": "/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් ඒකායන ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */",
        "anonymous": "{{SITENAME}} හි නිර්නාමික {{PLURAL:$1|පරිශීලකයා|පරිශීලකයෝ}}",
        "siteuser": "{{SITENAME}} පරිශීලක $1",
        "anonuser": "{{SITENAME}} නිර්නාමික පරිශීලක $1",
index 8a61912..a27497b 100644 (file)
        "qbmyoptions": "Moje stránky",
        "faq": "Často kladené otázky",
        "faqpage": "Project:Často kladené otázky",
-       "vector-action-addsection": "Pridať tému",
-       "vector-action-delete": "Zmazať",
-       "vector-action-move": "Presunúť",
-       "vector-action-protect": "Zamknúť",
-       "vector-action-undelete": "Obnoviť",
-       "vector-action-unprotect": "Zmeniť stav ochrany",
-       "vector-view-create": "Vytvoriť",
-       "vector-view-edit": "Upraviť",
-       "vector-view-history": "Zobraziť históriu",
-       "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",
        "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>.",
-       "showingresultsnum": "Nižšie {{PLURAL:$3|je zobrazený najviac '''1''' výsledok|sú zobrazené najviac '''$3''' výsledky|je zobrazených najviac '''$3''' výsledkov}}, počnúc od  #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Výsledok '''$1''' z '''$3'''|Výsledky '''$1 - $2''' z '''$3'''}} pre '''$4'''",
        "search-nonefound": "Vyhľadávanie nenašlo žiadne výsledky.",
        "powersearch-legend": "Pokročilé hľadanie",
        "tooltip-preferences-save": "Uložiť nastavenia",
        "tooltip-summary": "Zadajte krátke zhrnutie",
        "common.css": "/* Tu umiestnené CSS bude ovplyvňovať všetky štýly */",
-       "monobook.css": "/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Monobook */",
-       "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-autoconfirmed.css": "/* Tu umiestnené CSS bude ovplyvňovať iba používateľov s overenou emailovou adresou */",
        "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. */",
-       "monobook.js": "/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Monobook */",
-       "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 */",
        "group-sysop.js": "/* Tu sa nachádzajúci JavaScript sa načíta len správcom */",
        "pageinfo-category-pages": "Počet stránok",
        "pageinfo-category-subcats": "Počet podkategórií",
        "pageinfo-category-files": "Počet súborov",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Označiť ako stráženú",
        "markaspatrolledtext": "Označiť túto stránku ako stráženú",
        "markedaspatrolled": "Označené ako strážené",
index 610bb6b..b2d4751 100644 (file)
        "qbmyoptions": "Moje strani",
        "faq": "Najpogostejša vprašanja",
        "faqpage": "Project:Najpogostejša vprašanja",
-       "vector-action-addsection": "Dodaj temo",
-       "vector-action-delete": "Izbriši",
-       "vector-action-move": "Prestavi",
-       "vector-action-protect": "Zaščiti",
-       "vector-action-undelete": "Vrni",
-       "vector-action-unprotect": "Spremeni zaščito",
-       "vector-view-create": "Ustvari",
-       "vector-view-edit": "Uredi",
-       "vector-view-history": "Zgodovina",
-       "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",
        "mergehistory-empty": "Redakcij ni moč združiti.",
        "mergehistory-success": "$3 {{PLURAL:$3|redakcija|redakciji|redakcije|redakcij}} [[:$1]] je uspešno spojenih v [[:$2]].",
        "mergehistory-fail": "Ne morem izvesti združitev zgodovine, prosimo, ponovno preverite strani in parametre časa.",
+       "mergehistory-fail-toobig": "Ne morem izvesti združitve zgodovine, saj bi moral premakniti več kot $1 {{PLURAL:$1|redakcijo|redakciji|redakcije|redakcij}}, kar je omejitev.",
        "mergehistory-no-source": "Izvirna stran $1 ne obstaja.",
        "mergehistory-no-destination": "Ciljna stran $1 ne obstaja.",
        "mergehistory-invalid-source": "Izhodiščna stran mora imeti veljaven naslov.",
        "searchall": "vse",
        "showingresults": "Prikazujem do '''$1''' {{PLURAL:$1|zadetek|zadetka|zadetke|zadetkov}}, začenši s št. '''$2'''.",
        "showingresultsinrange": "Spodaj prikazujem {{PLURAL:$1|1=<strong>1</strong> rezultat|<strong>$1</strong> rezultata|<strong>$1</strong> rezultate|<strong>$1</strong> rezultatov}} v razponu od št. <strong>$2</strong> do št. <strong>$3</strong>.",
-       "showingresultsnum": "Prikazujem '''$3''' {{PLURAL:$3|zadetek|zadetka|zadetke|zadetkov|zadetkov}}, začenši s št. '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Zadetek '''$1''' od '''$3'''|Zadetki '''$1 - $2''' od skupno '''$3'''}} za povpraševanje '''$4'''",
        "search-nonefound": "Ni bilo zadetkov, ki ustrezajo poizvedbi.",
        "powersearch-legend": "Napredno iskanje",
        "duplicate-defaultsort": "'''Opozorilo:''' Privzeti ključ razvrščanja »$2« prepiše prejšnji privzeti ključ razvrščanja »$1«.",
        "version": "Različica",
        "version-extensions": "Nameščene razširitve",
+       "version-skins": "Nameščene kože",
        "version-specialpages": "Posebne strani",
        "version-parserhooks": "Razširitve razčlenjevalnika",
        "version-variables": "Spremenljivke",
        "version-antispam": "Preprečevanje smetja",
-       "version-skins": "Kože",
        "version-other": "Ostalo",
        "version-mediahandlers": "Upravljavci predstavnostnih vsebin",
        "version-hooks": "Razširitve",
        "version-hook-name": "Ime razširitve",
        "version-hook-subscribedby": "Naročen s strani",
        "version-version": "(Različica $1)",
+       "version-no-ext-name": "[brez imena]",
        "version-license": "Dovoljenje MediaWiki",
        "version-ext-license": "Dovoljenje",
        "version-ext-colheader-name": "Razširitev",
+       "version-skin-colheader-name": "Koža",
        "version-ext-colheader-version": "Različica",
        "version-ext-colheader-license": "Dovoljenje",
        "version-ext-colheader-description": "Opis",
index cf37864..28e64ee 100644 (file)
        "qbpageoptions": "Seytaoptiona",
        "qbmyoptions": "Menne Seyta",
        "faq": "FAQ",
-       "vector-action-addsection": "Obschnitt hinzufiega",
-       "vector-action-delete": "Läscha",
-       "vector-action-move": "Verschieba",
-       "vector-action-protect": "Schützen",
-       "vector-action-undelete": "Wiederherstella",
-       "vector-action-unprotect": "Freigahn",
-       "vector-view-create": "Erstella",
-       "vector-view-edit": "Bearbeita",
-       "vector-view-history": "Versionsgeschichte",
-       "vector-view-view": "Lessa",
-       "vector-view-viewsource": "Quelltext siehn",
        "actions": "Aksjonna",
        "namespaces": "Noamensraum:",
        "variants": "Varianta",
        "editundo": "rieckgängig",
        "searchresults": "Sichergebnisse",
        "searchresults-title": "Suchergebnisse fier \"$1\"",
-       "toomanymatches": "De Oazoahl dar Sichergebnisse ies zu gruß, bitte versiche anne andere Obfroage.",
        "titlematches": "Iebereinstimmunga miet Seytatitteln",
        "textmatches": "Iebereinstimmunga miet Inhalta",
        "notextmatches": "Kenne Iebereinstimmunga miet Inhalta",
        "searchmenu-exists": "'''Is gitt anne Seite, de den Noama „[[:$1]]“ hoot'''",
        "searchmenu-new": "'''Erstalle de Seite „[[:$1|$1]]“ ei diesem Wiki.'''",
        "searchprofile-articles": "Inhaltsseyta",
-       "searchprofile-project": "Helfe on Projektseyta",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Olles",
        "searchprofile-advanced": "Erweitert",
        "searchprofile-articles-tooltip": "Sucha ei $1",
-       "searchprofile-project-tooltip": "Sucha ei $1",
        "searchprofile-images-tooltip": "Noach Bildern sucha",
        "searchprofile-everything-tooltip": "Gesamta Inhalt durchsicha (inklusive Dischkursseyta)",
        "searchprofile-advanced-tooltip": "Suche ei wettern Noamensräuma",
        "searchrelated": "verwandt",
        "searchall": "olle",
        "showingresults": "Hier {{PLURAL:$1|ies '''1''' Ergebnis|sein '''$1''' Ergebnisse}}, beginnend miet Nummer '''$2.'''",
-       "showingresultsnum": "Hier {{PLURAL:$3|ies '''1''' Ergebnis|sein '''$3''' Ergebnisse}}, beginnend miet Nummer '''$2.'''",
        "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' vu '''$3'''|Ergebnisse '''$1–$2''' vu '''$3'''}} fier '''$4'''",
        "search-nonefound": "Fier denne Sichoafroage wurden kenne Ergebnisse gefunda.",
        "powersearch-ns": "Suche ei Noamasräuma:",
        "allowemail": "E-Mail-Empfang vu andern Benutzern ermeeglichn",
        "prefs-searchoptions": "Sichoptiona",
        "prefs-namespaces": "Noamasräume",
-       "defaultns": "Andernfoalls ei diesen Noamasräumen sucha:",
        "prefs-custom-js": "Nutzerdefiniertes JS",
        "youremail": "E-Mail-Adresse:",
        "username": "Benutzernoame:",
        "logempty": "Kenne poaßenda Einträge.",
        "log-title-wildcard": "Tittel begennt miet …",
        "allpages": "Olle Seyta",
-       "alphaindexline": "$1 bis $2",
        "nextpage": "Nächste Seite ($1)",
        "prevpage": "Vurherige Seite ($1)",
        "allpagesfrom": "Seyta oazeega oab:",
index 0dba998..aaa8f1a 100644 (file)
        "qbmyoptions": "Boggageyga",
        "faq": "SIL",
        "faqpage": "Project:SIL",
-       "vector-action-addsection": "Hadal ku dar",
-       "vector-action-delete": "Tirtir",
-       "vector-action-move": "Wareeji",
-       "vector-action-protect": "Difaac",
-       "vector-action-undelete": "Ha tirtirin",
-       "vector-action-unprotect": "Bedel difaacida",
-       "vector-view-create": "Sameey",
-       "vector-view-edit": "Wax ka bedel",
-       "vector-view-history": "Itusi taariikhda",
-       "vector-view-view": "Akhri",
-       "vector-view-viewsource": "Itusi xogta",
        "actions": "Waxa dhacaayo",
        "namespaces": "Xarun magaceedyada",
        "variants": "Isbedelada",
        "searchrelated": "La xiriiro",
        "searchall": "Dhamaan",
        "showingresults": "Waxaa hoos laga heley{{PLURAL:$1|'''1''' natiijo|'''$1''' natiijooyin}} ka biloow #'''$2'''.",
-       "showingresultsnum": "Hoos waxaa laga helay {{PLURAL:$3|'''1''' Natiijo|'''$3''' Natiijooyin}} Ka billow #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Natiijada  '''$1''' ee '''$3'''|Natiijooyinka '''$1 - $2'''  oo ah  '''$3'''}} ee '''$4'''",
        "search-nonefound": "Wax natiijo oo ka soo baxay ma jirto wixii aad raadisay",
        "powersearch-legend": "Sidii aad wax uugu raadin laheed",
index ae8507d..c52a32c 100644 (file)
@@ -51,7 +51,7 @@
        "tog-shownumberswatching": "Trego numrin e përdoruesve që vëzhgojnë këtë faqe",
        "tog-oldsig": "Nënshkrimi ekzistues:",
        "tog-fancysig": "Mbaje nënshkrimin si wikitekst (pa lidhje automatike)",
-       "tog-uselivepreview": "Trego bocetin në mënyrë të drejtëpërdrejtë (kërkon JavaScript) (eksperimentale)",
+       "tog-uselivepreview": "Trego pamjen në mënyrë të drejtëpërdrejtë (kërkon JavaScript) (eksperimentale)",
        "tog-forceeditsummary": "Më njofto kur e lë përmbledhjen e redaktimit bosh",
        "tog-watchlisthideown": "Fshih redaktimet e mia nga lista e faqeve të vëzhguara",
        "tog-watchlisthidebots": "Fshih redaktimet e robotëve nga lista e faqeve të vëzhguara",
@@ -64,6 +64,7 @@
        "tog-showhiddencats": "Trego kategoritë e fshehura",
        "tog-norollbackdiff": "Ndryshimi pas rikthimit do të fshihet",
        "tog-useeditwarning": "Më paralajmëro kur unë lë një redaktim faqeje me ndryshime të paruajtura",
+       "tog-prefershttps": "Gjithmonë përdorni një lidhje të sigurt kur të kyçur",
        "underline-always": "Gjithmonë",
        "underline-never": "Asnjëherë",
        "underline-default": "Parapërcaktuar nga shfletuesi",
        "newwindow": "(hapet në një dritare të re)",
        "cancel": "Anulo",
        "moredotdotdot": "Më shumë...",
-       "morenotlisted": "Të tjera...",
+       "morenotlisted": "Kjo listë nuk është e plotë.",
        "mypage": "Faqja",
        "mytalk": "Diskutimet",
        "anontalk": "Diskutimet për këtë IP",
        "qbmyoptions": "Faqet e mia",
        "faq": "Pyetje që bëhen shpesh",
        "faqpage": "Project: Pyetje që bëhen shpesh",
-       "vector-action-addsection": "Shto një temë",
-       "vector-action-delete": "Grise",
-       "vector-action-move": "Zhvendose",
-       "vector-action-protect": "Mbroje",
-       "vector-action-undelete": "Anullo fshirjen",
-       "vector-action-unprotect": "Ndrysho mbrojtjen",
-       "vector-view-create": "Krijo",
-       "vector-view-edit": "Redakto",
-       "vector-view-history": "Shiko historikun",
-       "vector-view-view": "Lexo",
-       "vector-view-viewsource": "Shiko tekstin",
        "actions": "Veprimet",
        "namespaces": "Hapsirat e emrit",
        "variants": "Variante",
        "permalink": "Lidhje e përhershme",
        "print": "Printo",
        "view": "Shiko",
+       "view-foreign": "Pamja <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
        "edit": "Redakto",
+       "edit-local": "Modifiko burimin lokalt të përshkrimit",
        "create": "Krijo",
+       "create-local": "Shtonipërshkrimin lokal",
        "editthispage": "Redakto këtë faqe",
        "create-this-page": "Krijoje këtë faqe",
        "delete": "Grise",
        "jumptonavigation": "lundrim",
        "jumptosearch": "kërko",
        "view-pool-error": "Ju kërkojmë ndjesë, serverët janë të mbingarkuar për momentin.\nKëtë faqe po përpiqen t'i shikojnë më shumë njerëz nga ç'është e mundur.\nJu lutemi prisni pak para se ta hapni sërish këtë faqe.\n\n$1",
+       "generic-pool-error": "Ju kërkojmë ndjesë, serverët janë të mbingarkuar për momentin.\nKëtë faqe po përpiqen t'i shikojnë më shumë njerëz nga ç'është e mundur.\nJu lutemi prisni pak para se ta hapni sërish këtë faqe.\n\n$1",
        "pool-timeout": "Mbaroi koha duke pritur për kyçin",
        "pool-queuefull": "Radha e proceseve është mbushur",
        "pool-errorunknown": "Gabim i panjohur",
+       "pool-servererror": "Pishinë e  numerimit  te shërbimit nuk është në dispozicion (<span class=\"notranslate\" translate=\"asnjë\">$1</span>).",
        "aboutsite": "Rreth {{SITENAME}}",
        "aboutpage": "Project:Rreth",
-       "copyright": "Përmbajtja është në disponim nëpërmjet licencës $1.",
+       "copyright": "Përmbajtja është në disponim nëpërmjet licencës $1 ose tregohet ndryshe.",
        "copyrightpage": "{{ns:project}}:Të drejtat e autorit",
        "currentevents": "Ngjarjet aktuale",
        "currentevents-url": "Project:Ngjarjet aktuale",
        "nospecialpagetext": "<strong>Ju keni kërkuar një faqe speciale të pavlefshme.</strong> \n\n Një listë e faqeve speciale të vlefshme mund të gjendet në [[Special:SpecialPages|{{int: specialpages }}]].",
        "error": "Gabim",
        "databaseerror": "Gabim në databazë",
+       "databaseerror-text": "\nKjo mund të tregojë një gabim në software.",
+       "databaseerror-textcl": " ka ndodhur  një   gabim ne query te bazën të dhënash",
+       "databaseerror-query": "\nPyetje: $ 1",
+       "databaseerror-function": "Funksioni: <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
+       "databaseerror-error": "Gabim: <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
        "laggedslavemode": "'''Kujdes:''' Kjo faqe nuk mund të ketë përditësime të kohëve të fundit.",
        "readonly": "Databaza e kyçur",
        "enterlockreason": "Shëno arsyen e kyçjes, gjithashtu shëno se kur mund të hapet.",
        "cannotdelete": "Faqja ose skeda $1 nuk mund të fshihej.\nMund të jetë fshirë nga dikush tjetër.",
        "cannotdelete-title": "Faqja \"$1\" nuk mund të fshihet",
        "delete-hook-aborted": "Fshirja u anulua nga togëza.\nNuk jipet shpjegim.",
+       "no-null-revision": "I pamundur krijimi rishikimi  i ri për faqen bosh \"$ 1\"",
        "badtitle": "Titull i pasaktë",
        "badtitletext": "Titulli i faqes që kërkuat nuk ishte i saktë, ishte bosh, ose ishte një titull ndër-gjuhësor/inter-wiki me lidhje të pasaktë.\nMund të përmbajë një ose më shumë germa, të cilat nuk mund të përdoren në tituj.",
        "perfcached": "nformacioni i mëposhtëm është kopje e ruajtur dhe mund të mos jetë i përditësuar. E shumta  {{PLURAL:$1|një rezultat është|$1 rezultate janë}} ruajtur në kopje.",
        "viewsource-title": "Shiko tekstin për $1",
        "actionthrottled": "Veprim u ndalua",
        "actionthrottledtext": "Si masë sigurie anti-spam, është e ndaluar kryerja e shpeshtë e një veprimi brenda një hapësire kohore shumë të shkurtër. Ju kryet shumë herë të njëjtin veprim brenda një kohe shumë të shkurtër.\nJu lutemi, provojeni përsëri pas disa minutash.",
-       "protectedpagetext": "Kjo faqe është e mbrojtur dhe nuk mund të redaktohet.",
+       "protectedpagetext": "Kjo faqe është e mbrojtur për të parandaluar redaktimi apo veprime të tjera.",
        "viewsourcetext": "Ju mund të shikoni dhe kopjoni tekstin e kësaj faqeje:",
        "viewyourtext": "Ju mund të shikoni dhe të kopjoni tekstin e '''ndryshimeve tuaja''' tek kjo faqe:",
        "protectedinterface": "Kjo faqe përmban tekstin e dritares së programit, për këtë arsye mbrohet për të shmangur abuzimet.",
        "namespaceprotected": "Nuk ju lejohet redaktimi i faqeve në hapsirën '''$1'''.",
        "customcssprotected": "Ju nuk keni leje për të redaktuar këtë faqe CSS, sepse ai përmban cilësimet personale tjetër user's.",
        "customjsprotected": "Ju nuk keni leje për të redaktuar këtë faqe JavaScript, sepse ai përmban cilësimet personale tjetër user's.",
+       "mycustomcssprotected": "Ju nuk keni leje për të redaktuar këtë faqe CSS.",
+       "mycustomjsprotected": "Ju nuk keni leje për të redaktuar këtë   faqe JavaScript .",
+       "myprivateinfoprotected": "Ju nuk keni leje për të redaktuar të dhënat tuaja private.",
+       "mypreferencesprotected": "Ju nuk keni leje për të ndryshuar preferencat tuaja.",
        "ns-specialprotected": "Faqet speciale nuk mund të redaktohen.",
        "titleprotected": "Ky titull është mbrojtur nga [[User:$1|$1]] dhe nuk mund të krijohet.\nArsyeja e dhënë është ''$2''.",
        "filereadonlyerror": "Nuk është në gjendje që të ndryshojë skedarin \"$1\" sepse depoja e skedarit \"$2\" është në formën vetëm-lexim.\n\nAdministratori i cili e mbylli atë e dha këtë shpjegim: \"$3\".",
        "invalidtitle-unknownnamespace": "Titull jo i vlefshëm me numrin e panjohur të hapësirës së emrit $1 dhe tekstit \"$2\"",
        "exception-nologin": "I paqasur",
        "exception-nologin-text": "Kjo faqe ose ky veprim ju kërkon që të qaseni në këtë wiki.",
+       "exception-nologin-text-manual": "Ju lutem <span class=\"notranslate\" translate=\"asnjë\">$1</span> që të jeni në gjendje për të hyrë në këtë faqe ose të veproni.",
        "virus-badscanner": "Konfiguracion i parregullt: Skaner i panjohur virusesh: ''$1''",
        "virus-scanfailed": "skani dështoi (code $1)",
        "virus-unknownscanner": "antivirus i pa njohur:",
-       "logouttext": "'''Ju keni dalë jashtë.''' \n\n Ju mund të vazhdoni të përdorni {{SITENAME}} në mënyrë anonime, ose mund të <span class='plainlinks'>[$1 identifikoheni përsëri]</span> si përdoruesi i mëparshëm ose si një përdorues tjetër. \n Kini parasysh që disa faqe mund të shfaqen sikur të ishit i identifikuar derisa të fshini ''cache''-in e shfletuesit tuaj.",
+       "logouttext": "'''Ju keni dalë jashtë.''' \n \n Kini parasysh që disa faqe mund të shfaqen sikur të ishit i identifikuar derisa të fshini ''cache''-in e shfletuesit tuaj.",
        "welcomeuser": "Mirë se vini, $1!",
        "welcomecreation-msg": "Llogaria juaj u krijua. \nMos harroni të ndryshoni [[Special:Preferences|{{SITENAME}} preferencat]] tuaja.",
        "yourname": "Fusni nofkën tuaj",
        "gotaccount": "Keni një llogari? '''$1'''.",
        "gotaccountlink": "Hyni",
        "userlogin-resetlink": "Keni harruar të dhënat tuaja të identifikimit?",
-       "userlogin-resetpassword-link": "Rivendos fjalëkalimin",
-       "createaccountmail": "me email",
+       "userlogin-resetpassword-link": "Harruat fjalëkalimin",
+       "userlogin-helplink2": "Ndihmoni me hyrjen në",
+       "userlogin-loggedin": "Ju tashmë janë të regjistruar si <span class=\"notranslate\" translate=\"asnjë\">{{GJINIA:$1|</span><span class=\"notranslate\" translate=\"asnjë\">$1</span>}}.\nPërdorim formularin më poshtë që të hyni në si një përdorues tjetër.",
+       "userlogin-createanother": "Krijo një llogari tjeter",
+       "createacct-emailrequired": "Posta elektronike",
+       "createacct-emailoptional": "Adresa Elektronike (me dëshirë)",
+       "createacct-email-ph": "Fusni adresën tuaj elektronike",
+       "createacct-another-email-ph": "Vendos adresën e postës elektronike",
+       "createaccountmail": "Përdorni një fjalëkalim të përkohshëm të rastit dhe  dërgojeni atë në adresën e specifikuar te email",
+       "createacct-realname": "Emri i vërtetë (me dëshirë)",
        "createaccountreason": "Arsyeja:",
+       "createacct-reason": "Arsyeja",
+       "createacct-reason-ph": "Pse ju jeni duke krijuar një llogari tjetër",
+       "createacct-captcha": "kontroll sigurie",
+       "createacct-imgcaptcha-ph": "Shkruaj tekstin që ju shihni më lartë",
+       "createacct-submit": "Krijoni llogarinë tuaj",
+       "createacct-another-submit": "Krijo një llogari tjeter",
+       "createacct-benefit-heading": "{{SITENAME}} është bërë nga njerëz si ju.",
+       "createacct-benefit-body1": "$1 {{PLURAL:$1|redaktim|redaktime}}",
+       "createacct-benefit-body2": "\n{{Plural: $ 1 | faqe | faqe}}",
        "badretype": "Fjalëkalimet nuk janë njësoj.",
        "userexists": "Emri i përdoruesit që kërkuat është në përdorim. \nZgjidhni një emër tjetër.",
        "loginerror": "Gabim gjatë identifikimit",
        "diff-multi-manyusers": "({{PLURAL:$1|Një versioni i ndërmjetshëm|$1 versione të ndërmjetshme}} nga më shumë se $2 {{PLURAL:$2|përdorues|përdorues}} i/të pashfaqur)",
        "searchresults": "Rezultatet e kërkimit",
        "searchresults-title": "Rezultatet e kërkimit për \"$1\"",
-       "toomanymatches": "Ky kërkim ka shumë përfundime, provoni një pyetje tjetër më përcaktuese",
        "titlematches": "Tituj faqesh që përputhen",
        "textmatches": "Tekst faqesh që përputhet",
        "notextmatches": "Nuk ka asnjë tekst faqeje që përputhet",
        "searchmenu-exists": "'''Në këtë wiki kjo faqe është emëruar \"[[:$1]]\"'''",
        "searchmenu-new": "'''Hapë faqen \"[[:$1]]\" në këtë wiki!'''",
        "searchprofile-articles": "Përmbajtja e faqeve",
-       "searchprofile-project": "Ndihmë dhe faqet e Projektit",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Gjithçka",
        "searchprofile-advanced": "Avancuar",
        "searchprofile-articles-tooltip": "Kërko në $1",
-       "searchprofile-project-tooltip": "Kërko në $1",
        "searchprofile-images-tooltip": "Kërko skedarë",
        "searchprofile-everything-tooltip": "Kërko gjithë përmbajtjen (duke përfshirë edhe faqet e diskutimit)",
        "searchprofile-advanced-tooltip": "Kërkimi në hapësina",
        "search-interwiki-default": "$1 përfundime:",
        "search-interwiki-more": "(më shumë)",
        "search-relatedarticle": "Të ngjashme",
-       "searcheverything-enable": "Kërko në të gjitha hapësirat",
        "searchrelated": "të ngjashme",
        "searchall": "të gjitha",
        "showingresults": "Më poshtë tregohen {{PLURAL:$1|'''1''' përfundim|'''$1''' përfundime}} duke filluar nga #'''$2'''.",
-       "showingresultsnum": "Më poshtë tregohen {{PLURAL:$3|'''1''' përfundim|'''$3''' përfundime}} duke filluar nga #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Rezultati '''$1''' nga '''$3'''|Rezultatet '''$1 - $2''' nga '''$3'''}} për '''$4'''",
        "search-nonefound": "Nuk ka rezultate që përputhen me kërkesën.",
        "powersearch-legend": "Kërkim i përparuar",
        "allowemail": "Lejo përdoruesit të më dërgojnë email",
        "prefs-searchoptions": "Mundësi kërkimi",
        "prefs-namespaces": "Hapësirat",
-       "defaultns": "Kërko automatikisht vetëm në këto hapësira:",
        "default": "parazgjedhje",
        "prefs-files": "Figura",
        "prefs-custom-css": "CSS i përpunuem",
        "prefs-emailconfirm-label": "Konfirmimi i emailit:",
        "youremail": "Adresa e email-it*",
        "username": "Nofka e përdoruesit:",
-       "uid": "Nr. i identifikimit:",
        "prefs-memberingroups": "Anëtar i {{PLURAL:$1|grupit|grupeve}}:",
        "prefs-registration": "Koha e regjistrimit:",
        "yourrealname": "Emri juaj i vërtetë*",
        "log-title-wildcard": "Kërko tituj që fillojnë me këtë tekst",
        "showhideselectedlogentries": "Paraqit/fshih shënimet e përzgjedhura të regjistruara.",
        "allpages": "Të gjitha faqet",
-       "alphaindexline": "$1 deri në $2",
        "nextpage": "Faqja më pas ($1)",
        "prevpage": "Faqja më parë ($1)",
        "allpagesfrom": "Trego faqet duke filluar nga:",
        "tooltip-undo": "\"Zhbëje\" rikthen këtë ndryshim dhe hap modulin e redaktimit për shqyrtim. Lejon që të jepni një arsye tek përmbledhja.",
        "tooltip-preferences-save": "Ruaj parapëlqimet",
        "tooltip-summary": "Fusni një përmbledhje të shkurtër",
-       "monobook.css": "/* redaktoni këtë faqe për të përshtatur pamjen Monobook për tëra faqet tuaja */",
+       "interlanguage-link-title-nonlang": "$1 deri në $2",
        "anonymous": "{{PLURAL:$1|Përdoruesi anonim|Përdoruesit anonimë}} të {{SITENAME}}",
        "siteuser": "Përdoruesi $1 nga {{SITENAME}}",
        "anonuser": "Përdorues anonim i {{SITENAME}} $1",
        "pageinfo-watchers": "Numri i mbikqyrësve",
        "pageinfo-edits": "Numri i redaktimeve",
        "pageinfo-authors": "Numri i autorëve të veçantë",
-       "skinname-cologneblue": "Kolonjë Blu",
        "markaspatrolleddiff": "Shënoje si të patrulluar",
        "markaspatrolledtext": "Shënoje këtë artikull të patrulluar",
        "markedaspatrolled": "Shënoje të patrulluar",
        "duplicate-defaultsort": "'''Kujdes:''' Renditja kryesore e çelësit \"$2\" refuzon renditjen e mëparshme kryesore të çelësit \"$1\".",
        "version": "Versioni",
        "version-extensions": "Zgjerime të instaluara",
+       "version-skins": "Pamjet",
        "version-specialpages": "Faqe speciale",
        "version-parserhooks": "Parser goditje",
        "version-variables": "Variabël",
        "version-antispam": "Spam",
-       "version-skins": "Pamjet",
        "version-other": "Të tjera",
        "version-mediahandlers": "Mbajtesit e Media-s",
        "version-hooks": "Goditjet",
index 192bbe5..a42ead2 100644 (file)
        "qbmyoptions": "Моје странице",
        "faq": "НПП",
        "faqpage": "Project:НПП",
-       "vector-action-addsection": "Додај тему",
-       "vector-action-delete": "Обриши",
-       "vector-action-move": "Премести",
-       "vector-action-protect": "Заштити",
-       "vector-action-undelete": "Врати",
-       "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": "Навигациони мени",
        "error": "Грешка",
        "databaseerror": "Грешка у бази података",
        "databaseerror-text": "Дошло је до грешке у упиту базе података. Можда је у питању програмска грешка.",
+       "databaseerror-query": "Упит: $1",
        "databaseerror-function": "Функција: $1",
        "databaseerror-error": "Грешка: $1",
        "laggedslavemode": "'''Упозорење:''' страница је можда застарела.",
        "resetpass-expired-soft": "Ваша лозинка је истекла и морате поставити нову. Поставите нову лозинку или кликните „{{int:resetpass-submit-cancel}}“ да је поставите касније.",
        "resetpass-validity-soft": "Ваша лозинка није ваљана: $1\n\nМолимо изаберите нову или кликните „{{int:resetpass-submit-cancel}}“ да ресетујете касније.",
        "passwordreset": "Обнављање лозинке",
-       "passwordreset-text-one": "Попуните овај образац да бисте ресетовали лозинку.",
+       "passwordreset-text-one": "Попуните овај образац да бисте добили привремену лозинку на е-пошту.",
        "passwordreset-text-many": "{{PLURAL:$1|Испуните једно од поља како би сте добили привремену лозинку на е-пошту.}}",
        "passwordreset-legend": "Поништи лозинку",
        "passwordreset-disabled": "Обнављање лозинке је онемогућено на овом викију.",
        "changeemail-submit": "Промени",
        "changeemail-cancel": "Откажи",
        "changeemail-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
-       "resettokens": "Ресетовање токена",
-       "resettokens-no-tokens": "Нема токена за ресетовање.",
-       "resettokens-legend": "Ресетовање токена",
-       "resettokens-tokens": "Токени:",
+       "resettokens": "Ресетовање жетона",
+       "resettokens-no-tokens": "Нема жетона за ресетовање.",
+       "resettokens-legend": "Ресетовање жетона",
+       "resettokens-tokens": "Ð\96еÑ\82они:",
        "resettokens-token-label": "$1 (тренутна вредност: $2)",
-       "resettokens-watchlist-token": "Токен за веб довод (Atom/RSS) вашег [[Special:Watchlist|списка надгледања]]",
-       "resettokens-done": "Токени су ресетовани",
-       "resettokens-resetbutton": "Ресетуј изабране токене",
+       "resettokens-watchlist-token": "Ð\96еÑ\82он за веб довод (Atom/RSS) вашег [[Special:Watchlist|списка надгледања]]",
+       "resettokens-done": "Ð\96еÑ\82они су ресетовани",
+       "resettokens-resetbutton": "Ресетуј изабране жетоне",
        "bold_sample": "Подебљан текст",
        "bold_tip": "Подебљан текст",
        "italic_sample": "Искошени текст",
        "accmailtitle": "Лозинка је послата.",
        "accmailtext": "Лозинка за {{GENDER:$1|корисника|корисницу}} [[User talk:$1|$1]] је послата на $2. Након пријаве, лозинка се може променити [[Special:ChangePassword|овде]].",
        "newarticle": "(нови)",
-       "newarticletext": "Ð\94оÑ\88ли Ñ\81Ñ\82е Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 ÐºÐ¾Ñ\98а Ñ\98оÑ\88 Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и.\nÐ\94а Ð±Ð¸Ñ\81Ñ\82е Ñ\98е Ð½Ð°Ð¿Ñ\80авили, Ð¿Ð¾Ñ\87ниÑ\82е ÐºÑ\83Ñ\86аÑ\82и у прозор испод овог текста (погледајте [$1 страницу за помоћ]).\nАко сте овде дошли грешком, вратите се на претходну страницу.",
+       "newarticletext": "Ð\94оÑ\88ли Ñ\81Ñ\82е Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 ÐºÐ¾Ñ\98а Ñ\98оÑ\88 Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и.\nÐ\94а Ð±Ð¸Ñ\81Ñ\82е Ñ\98е Ð½Ð°Ð¿Ñ\80авили, Ð¿Ð¾Ñ\87ниÑ\82е Ð´Ð° ÐºÑ\83Ñ\86аÑ\82е у прозор испод овог текста (погледајте [$1 страницу за помоћ]).\nАко сте овде дошли грешком, вратите се на претходну страницу.",
        "anontalkpagetext": "---- Ово је страница за разговор с анонимним корисником који још нема налог или га не користи.\nЗбог тога морамо да користимо бројчану ИП адресу како бисмо га препознали.\nТакву адресу може делити више корисника.\nАко сте анонимни корисник и мислите да су вам упућене примедбе, [[Special:UserLogin/signup|отворите налог]] или се [[Special:UserLogin|пријавите]] да бисте избегли будућу забуну с осталим анонимним корисницима.",
        "noarticletext": "На овој страници тренутно нема садржаја.\nМожете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне извештаје] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} уредити страницу]</span>.",
        "noarticletext-nopermission": "На овој страници тренутно нема садржаја.\nМожете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама или <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне дневнике]</span>, али немате дозволу да направите ову страницу.",
        "mergehistory-empty": "Нема измена за спајање.",
        "mergehistory-success": "$3 {{PLURAL:$3|измена странице [[:$1]] је спојена|измене странице [[:$1]] су спојене|измена странице [[:$1]] је спојено}} у [[:$2]].",
        "mergehistory-fail": "Не могу да спојим историје. Проверите страницу и временске параметре.",
+       "mergehistory-fail-toobig": "Није могуће спојити историје јер више од $1 {{PLURAL:$1|измене|измена}} ће бити премештено.",
        "mergehistory-no-source": "Изворна страница $1 не постоји.",
        "mergehistory-no-destination": "Одредишна страница $1 не постоји.",
        "mergehistory-invalid-source": "Изворна страница мора имати исправан наслов.",
        "searchall": "све",
        "showingresults": "Испод {{PLURAL:$1|је приказан <strong>1</strong> резултат|су приказана <strong>$1</strong> резултата|је приказано <strong>$1</strong> резултата}} почев од броја <strong>$2</strong>.",
        "showingresultsinrange": "Испод {{PLURAL:$1|је приказан <strong>1</strong> резултат|су приказана <strong>$1</strong> резултата|је приказано <strong>$1</strong> резултата}}, у распону од <strong>$2</strong> до <strong>$3</strong>.",
-       "showingresultsnum": "Испод {{PLURAL:$3|је приказан '''1''' резултат|су приказана '''$3''' резултата|је приказано '''$3''' резултата}} почев од броја '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Резултат '''$1''' од '''$3'''|Резултата '''$1 – $2''' од '''$3'''}} за '''$4'''",
        "search-nonefound": "Нема поклапања.",
        "powersearch-legend": "Напредна претрага",
        "prefs-watchlist-days-max": "Највише $1 {{PLURAL:$1|дан|дана|дана}}",
        "prefs-watchlist-edits": "Највећи број измена у проширеном списку надгледања:",
        "prefs-watchlist-edits-max": "Највећа вредност је хиљаду",
-       "prefs-watchlist-token": "Токен списка надгледања:",
+       "prefs-watchlist-token": "Ð\96еÑ\82он списка надгледања:",
        "prefs-misc": "Друга подешавања",
        "prefs-resetpass": "Промени лозинку",
        "prefs-changeemail": "Промени е-адресу",
        "restoreprefs": "Врати све на подразумевано (у свим одељцима)",
        "prefs-editing": "Уређивање",
        "rows": "Редова:",
-       "columns": "Ð\9aолоне:",
+       "columns": "Ð\9aолона",
        "searchresultshead": "Претрага",
        "stub-threshold": "Праг за обликовање <a href=\"#\" class=\"stub\">везе као клице</a> (у бајтовима):",
        "stub-threshold-disabled": "Онемогућено",
        "prefs-advancedwatchlist": "Напредне поставке",
        "prefs-displayrc": "Поставке приказа",
        "prefs-displaywatchlist": "Поставке приказа",
-       "prefs-tokenwatchlist": "Токен",
+       "prefs-tokenwatchlist": "Ð\96еÑ\82он",
        "prefs-diffs": "Разлике",
        "prefs-help-prefershttps": "Ова подешавања ће ступити на снагу при следећој пријави.",
        "email-address-validity-valid": "Е-адреса је исправна",
        "right-createpage": "прављење страница (изузев страница за разговор)",
        "right-createtalk": "прављење страница за разговор",
        "right-createaccount": "отварање нових корисничких налога",
-       "right-minoredit": "ознаÑ\87аваÑ\9aе Ð¸Ð·Ð¼ÐµÐ½Ð° ÐºÐ°Ð¾ Ð¼Ð°Ñ\9aе",
+       "right-minoredit": "ознаÑ\87аваÑ\9aе Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¼Ð°Ñ\9aим",
        "right-move": "премештање страница",
        "right-move-subpages": "премештање страница с њиховим подстраницама",
        "right-move-rootuserpages": "премештање основних корисничких страница",
        "right-block": "блокирање даљих измена других корисника",
        "right-blockemail": "онемогућавање корисницима да шаљу е-поруке",
        "right-hideuser": "блокирање корисничког имена и његово сакривање од јавности",
-       "right-ipblock-exempt": "заобилажење блокирања IP адресе, аутоматска блокирања и блокирања опсега",
-       "right-proxyunbannable": "заобилажење самоблокирања посредника",
+       "right-ipblock-exempt": "заобилажење блокирања ИП адресе, аутоматска блокирања и блокирања опсега",
+       "right-proxyunbannable": "заобилажење аутоматских блокирања посредника",
        "right-unblockself": "одблокирај самог себе",
        "right-protect": "промени нивое заштите и уреди странице са преносивом заштитом",
        "right-editprotected": "уређивање страница под заштитом „{{int:protect-level-sysop}}“",
        "right-edituserjs": "уређивање туђих JavaScript датотека",
        "right-editmyusercss": "уређивање сопствених CSS датотека",
        "right-editmyuserjs": "уређивање сопствених JavaScript датотека",
-       "right-viewmywatchlist": "vidi sopstveni spisak nadgledanja",
+       "right-viewmywatchlist": "види сопствени списак надгледања",
        "right-viewmyprivateinfo": "видите своје личне податке (нпр. адресу е-поште, право име)",
        "right-editmyprivateinfo": "уређивање сопствених личних података (нпр. адресу е-поште, право име)",
-       "right-editmyoptions": "уредите своја подешавања",
+       "right-editmyoptions": "уређивање сопствених подешавања",
        "right-rollback": "брзо враћање измена последњег корисника који је мењао одређену страницу",
        "right-markbotedits": "означавање враћених измена као измене бота",
        "right-noratelimit": "отпорност на ограничења",
        "right-import": "увожење страница из других викија",
        "right-importupload": "увожење страница из отпремљене датотеке",
        "right-patrol": "означавање туђих измена патролираним",
-       "right-autopatrol": "аÑ\83Ñ\82омаÑ\82Ñ\81ко Ð¾Ð·Ð½Ð°Ñ\87аваÑ\9aе Ð¸Ð·Ð¼ÐµÐ½Ð° ÐºÐ°Ð¾ Ð¿Ñ\80егледаним",
+       "right-autopatrol": "аÑ\83Ñ\82омаÑ\82Ñ\81ко Ð¾Ð·Ð½Ð°Ñ\87аваÑ\9aе Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¿Ð°Ñ\82Ñ\80олиÑ\80аним",
        "right-patrolmarks": "прегледање ознака за патролирање унутар скорашњих измена",
        "right-unwatchedpages": "прегледање списка ненадгледаних страница",
        "right-mergehistory": "спајање историја страница",
        "ancientpages": "Најстарије странице",
        "move": "премести",
        "movethispage": "Премести ову страницу",
-       "unusedimagestext": "Следеће датотеке постоје, али не користе се ни у једној страници.\nДруге веб странице могу користити слику преко директне адресе, тако да и поред тога могу бити приказане овде поред активне употребе.",
+       "unusedimagestext": "Следеће датотеке постоје, али не користе се ни у једној страници.\nДруге веб странице могу користити слику преко директне адресе, тако да и поред активне употребе могу бити приказане овде.",
        "unusedcategoriestext": "Следеће странице категорија постоје иако их ниједан други чланак или категорија не користе.",
        "notargettitle": "Нема одредишта",
        "notargettext": "Нисте навели одредишну страницу или корисника на коме би се извела ова радња.",
        "listgrouprights-addgroup-self-all": "Додај све групе на сопствени налог",
        "listgrouprights-removegroup-self-all": "Уклони све групе са сопственог налога",
        "listgrouprights-namespaceprotection-namespace": "Именски простор",
+       "trackingcategories-name": "Име поруке",
        "trackingcategories-nodesc": "Опис није доступан.",
        "mailnologin": "Нема адресе за слање",
        "mailnologintext": "Морате бити [[Special:UserLogin|пријављени]] и имати исправну е-адресу у [[Special:Preferences|подешавањима]] да бисте слали е-поруке другим корисницима.",
        "tooltip-preferences-save": "Сачувај поставке",
        "tooltip-summary": "Унесите кратак опис",
        "common.css": "/** CSS постављен овде ће се одразити на све теме */",
-       "monobook.css": "/* CSS постављен овде ће утицати на све кориснике теме „Монобук“ */",
-       "vector.css": "/* CSS постављен овде ће утицати на све кориснике теме „Векторско“ */",
        "print.css": "/* CSS постављен овде ће утицати на издање за штампу */",
        "noscript.css": "/* CSS постављен овде ће утицати на све кориснике којима је онемогућен јаваскрипт */",
        "group-autoconfirmed.css": "/* CSS постављен овде ће утицати на самопотврђене кориснике */",
        "group-sysop.css": "/* CSS постављен овде ће утицати само на системске операторе */",
        "group-bureaucrat.css": "/* CSS постављен овде ће утицати само на бирократе */",
        "common.js": "/* Јаваскрипт постављен овде ће се користити за све кориснике при отварању сваке странице. */",
-       "monobook.js": "/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Монобук“ */",
-       "vector.js": "/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Векторско“ */",
        "group-autoconfirmed.js": "/* Јаваскрипт постављен овде ће се учитати за самопотврђене кориснике */",
        "group-bot.js": "/* Јаваскрипт постављен овде ће се учитати само за ботове */",
        "group-sysop.js": "/* Јаваскрипт постављен овде ће се учитати само за системске операторе */",
        "pageinfo-category-pages": "Број страница",
        "pageinfo-category-subcats": "Број поткатегорија",
        "pageinfo-category-files": "Број датотека",
-       "skinname-monobook": "Монобук",
-       "skinname-vector": "Векторско",
        "markaspatrolleddiff": "Означи као патролирано",
        "markaspatrolledtext": "Означи страницу као патролирану",
        "markedaspatrolled": "Означено као патролирано",
        "exif-iimsupplementalcategory": "Допунске категорије",
        "exif-datetimeexpires": "Не користи након",
        "exif-datetimereleased": "Објављено",
-       "exif-originaltransmissionref": "Изворни пренос кôда локације",
+       "exif-originaltransmissionref": "Изворни пренос кода локације",
        "exif-identifier": "Назнака",
        "exif-lens": "Коришћени објектив",
        "exif-serialnumber": "Серијски број камере",
        "duplicate-defaultsort": "'''Упозорење:''' подразумевани кључ сврставања „$2“ мења некадашњи кључ „$1“.",
        "version": "Верзија",
        "version-extensions": "Инсталирана проширења",
+       "version-skins": "Теме",
        "version-specialpages": "Посебне странице",
        "version-parserhooks": "Куке рашчлањивача",
        "version-variables": "Променљиве",
        "version-antispam": "Спречавање непожељних порука",
-       "version-skins": "Теме",
        "version-api": "АПИ",
        "version-other": "Друго",
        "version-mediahandlers": "Руководиоци медијима",
        "version-hook-name": "Назив куке",
        "version-hook-subscribedby": "Пријављено од",
        "version-version": "(издање $1)",
+       "version-no-ext-name": "[нема имена]",
        "version-svn-revision": "(изм. $2)",
        "version-license": "Медијавики лиценца",
        "version-ext-license": "Лиценца",
        "version-ext-colheader-name": "Екстензија",
+       "version-skin-colheader-name": "Тема",
        "version-ext-colheader-version": "Верзија",
        "version-ext-colheader-license": "Лиценца",
        "version-ext-colheader-description": "Опис",
        "compare-revision-not-exists": "Наведена измена не постоји.",
        "dberr-problems": "Дошло је до техничких проблема.",
        "dberr-again": "Сачекајте неколико минута и поново учитајте страницу.",
-       "dberr-info": "(не могу да се повежем са сервером базе: $1)",
+       "dberr-info": "(не могу да се повежем са сервером базе података: $1)",
+       "dberr-info-hidden": "(не могу да се повежем са сервером базе података)",
        "dberr-usegoogle": "У међувремену, покушајте да претражите помоћу Гугла.",
        "dberr-outofdate": "Имајте на уму да њихови примерци нашег садржаја могу бити застарели.",
        "dberr-cachederror": "Ово је привремено меморисан примерак стране који можда није ажуран.",
        "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_xml": "Прикажи XML стабло",
+       "expand_templates_generate_rawhtml": "Прикажи сиров HTML",
        "expand_templates_preview": "Приказ"
 }
index 7aefbef..010c586 100644 (file)
        "qbmyoptions": "Moje stranice",
        "faq": "NPP",
        "faqpage": "Project:NPP",
-       "vector-action-addsection": "Dodaj temu",
-       "vector-action-delete": "Obriši",
-       "vector-action-move": "Premesti",
-       "vector-action-protect": "Zaštiti",
-       "vector-action-undelete": "Vrati",
-       "vector-action-unprotect": "Promeni zaštitu",
-       "vector-view-create": "Napravi",
-       "vector-view-edit": "Uredi",
-       "vector-view-history": "Istorija",
-       "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",
        "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-one": "Popunite ovaj obrazac da biste dobili privremenu lozinku na e-poštu.",
        "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako bi ste dobili privremenu lozinku na e-poštu.}}",
        "passwordreset-legend": "Poništi lozinku",
        "passwordreset-disabled": "Obnavljanje lozinke je onemogućeno na ovom vikiju.",
        "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": "Resetovanje žetona",
+       "resettokens-no-tokens": "Nema žetona za resetovanje.",
+       "resettokens-legend": "Resetovanje žetona",
+       "resettokens-tokens": "Žetoni:",
        "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",
+       "resettokens-watchlist-token": "Žeton za veb dovod (Atom/RSS) vašeg [[Special:Watchlist|spiska nadgledanja]]",
+       "resettokens-done": "Žetoni su resetovani",
+       "resettokens-resetbutton": "Resetuj izabrane žetone",
        "bold_sample": "Podebljan tekst",
        "bold_tip": "Podebljan tekst",
        "italic_sample": "Iskošeni tekst",
        "accmailtitle": "Lozinka je poslata.",
        "accmailtext": "Lozika za {{GENDER:$1|korisnika|korisnicu}} [[User talk:$1|$1]] je poslata na $2. Nakon prijave, lozinka se može promeniti [[Special:ChangePassword|ovde]].",
        "newarticle": "(novi)",
-       "newarticletext": "Došli ste na stranicu koja još ne postoji.\nDa biste je napravili, počnite kucati u prozor ispod ovog teksta (pogledajte [$1 stranicu za pomoć]).\nAko ste ovde došli greškom, vratite se na prethodnu stranicu.",
+       "newarticletext": "Došli ste na stranicu koja još ne postoji.\nDa biste je napravili, počnite da kucate u prozor ispod ovog teksta (pogledajte [$1 stranicu za pomoć]).\nAko ste ovde došli greškom, vratite se na prethodnu stranicu.",
        "anontalkpagetext": "---- Ovo je stranica za razgovor s anonimnim korisnikom koji još nema nalog ili ga ne koristi.\nZbog toga moramo da koristimo brojčanu IP adresu kako bismo ga prepoznali.\nTakvu adresu može deliti više korisnika.\nAko ste anonimni korisnik i mislite da su vam upućene primedbe, [[Special:UserLogin/signup|otvorite nalog]] ili se [[Special:UserLogin|prijavite]] da biste izbegli buduću zabunu s ostalim anonimnim korisnicima.",
        "noarticletext": "Na ovoj stranici trenutno nema sadržaja.\nMožete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti srodne izveštaje] ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti stranicu]</span>.",
        "noarticletext-nopermission": "Na ovoj stranici trenutno nema sadržaja.\nMožete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama ili <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti srodne dnevnike]</span>, ali nemate dozvolu da napravite ovu stranicu.",
        "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>.",
        "showingresultsinrange": "Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}}, u rasponu od <strong>$2</strong> do <strong>$3</strong>.",
-       "showingresultsnum": "Ispod {{PLURAL:$3|je prikazan '''1''' rezultat|su prikazana '''$3''' rezultata|je prikazano '''$3''' rezultata}} počev od broja '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|1=Rezultat '''$1''' od '''$3'''|Rezultata '''$1 – $2''' od '''$3'''}} za '''$4'''",
        "search-nonefound": "Nema poklapanja.",
        "powersearch-legend": "Napredna pretraga",
        "prefs-watchlist-days-max": "Najviše $1 {{PLURAL:$1|dan|dana|dana}}",
        "prefs-watchlist-edits": "Najveći broj izmena u proširenom spisku nadgledanja:",
        "prefs-watchlist-edits-max": "Najveća vrednost je hiljadu",
-       "prefs-watchlist-token": "Token spiska nadgledanja:",
+       "prefs-watchlist-token": "Žeton spiska nadgledanja:",
        "prefs-misc": "Druga podešavanja",
        "prefs-resetpass": "Promeni lozinku",
        "prefs-changeemail": "Promeni e-adresu",
        "restoreprefs": "Vrati sve na podrazumevano (u svim odeljcima)",
        "prefs-editing": "Uređivanje",
        "rows": "Redova:",
-       "columns": "Kolone:",
+       "columns": "Kolona",
        "searchresultshead": "Pretraga",
        "stub-threshold": "Prag za oblikovanje <a href=\"#\" class=\"stub\">veze kao klice</a> (u bajtovima):",
        "stub-threshold-disabled": "Onemogućeno",
        "prefs-advancedwatchlist": "Napredne postavke",
        "prefs-displayrc": "Postavke prikaza",
        "prefs-displaywatchlist": "Postavke prikaza",
+       "prefs-tokenwatchlist": "Žeton",
        "prefs-diffs": "Razlike",
        "prefs-help-prefershttps": "Ova podešavanja će stupiti na snagu pri sledećoj prijavi.",
        "email-address-validity-valid": "E-adresa je ispravna",
        "right-createpage": "pravljenje stranica (izuzev stranica za razgovor)",
        "right-createtalk": "pravljenje stranica za razgovor",
        "right-createaccount": "otvaranje novih korisničkih naloga",
-       "right-minoredit": "označavanje izmena kao manje",
+       "right-minoredit": "označavanje izmena manjim",
        "right-move": "premeštanje stranica",
        "right-move-subpages": "premeštanje stranica s njihovim podstranicama",
        "right-move-rootuserpages": "premeštanje osnovnih korisničkih stranica",
        "right-blockemail": "onemogućavanje korisnicima da šalju e-poruke",
        "right-hideuser": "blokiranje korisničkog imena i njegovo sakrivanje od javnosti",
        "right-ipblock-exempt": "zaobilaženje blokiranja IP adrese, automatska blokiranja i blokiranja opsega",
-       "right-proxyunbannable": "zaobilaženje samoblokiranja posrednika",
+       "right-proxyunbannable": "zaobilaženje automatskih blokiranja posrednika",
        "right-unblockself": "odblokiraj samog sebe",
        "right-protect": "promeni nivoe zaštite i uredi stranice sa prenosivom zaštitom",
        "right-editprotected": "uređivanje stranice pod zaštitom „{{int:protect-level-sysop}}“",
        "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",
+       "right-editmyoptions": "uređivanje sopstvenih podešavanja",
        "right-rollback": "brzo vraćanje izmena poslednjeg korisnika koji je menjao određenu stranicu",
        "right-markbotedits": "označavanje vraćenih izmena kao izmene bota",
        "right-noratelimit": "otpornost na ograničenja",
        "right-import": "uvoženje stranica iz drugih vikija",
        "right-importupload": "uvoženje stranica iz otpremljene datoteke",
        "right-patrol": "označavanje tuđih izmena patroliranim",
-       "right-autopatrol": "automatsko označavanje izmena kao pregledanim",
+       "right-autopatrol": "automatsko označavanje izmena patroliranim",
        "right-patrolmarks": "pregledanje oznaka za patroliranje unutar skorašnjih izmena",
        "right-unwatchedpages": "pregledanje spiska nenadgledanih stranica",
        "right-mergehistory": "spajanje istorija stranica",
        "ancientpages": "Najstarije stranice",
        "move": "premesti",
        "movethispage": "Premesti ovu stranicu",
-       "unusedimagestext": "Sledeće datoteke postoje, ali ne koriste se ni u jednoj stranici.\nDruge veb stranice mogu koristiti sliku preko direktne adrese, tako da i pored toga mogu biti prikazane ovde pored aktivne upotrebe.",
+       "unusedimagestext": "Sledeće datoteke postoje, ali ne koriste se ni u jednoj stranici.\nDruge veb stranice mogu koristiti sliku preko direktne adrese, tako da i pored aktivne upotrebe mogu biti prikazane ovde.",
        "unusedcategoriestext": "Sledeće stranice kategorija postoje iako ih nijedan drugi članak ili kategorija ne koriste.",
        "notargettitle": "Nema odredišta",
        "notargettext": "Niste naveli odredišnu stranicu ili korisnika na kome bi se izvela ova radnja.",
        "tooltip-preferences-save": "Sačuvaj postavke",
        "tooltip-summary": "Unesite kratak opis",
        "common.css": "/** CSS postavljen ovde će se odraziti na sve teme */",
-       "monobook.css": "/* CSS postavljen ovde će uticati na sve korisnike teme „Monobuk“ */",
-       "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-autoconfirmed.css": "/* CSS postavljen ovde će uticati na samopotvrđene korisnike */",
        "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. */",
-       "monobook.js": "/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Monobuk“ */",
-       "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 */",
        "group-sysop.js": "/* Javaskript postavljen ovde će se učitati samo za sistemske operatore */",
        "pageinfo-category-pages": "Broj stranica",
        "pageinfo-category-subcats": "Broj potkategorija",
        "pageinfo-category-files": "Broj datoteka",
-       "skinname-monobook": "Monobuk",
-       "skinname-vector": "Vektorsko",
        "markaspatrolleddiff": "Označi kao patrolirano",
        "markaspatrolledtext": "Označi stranicu kao patroliranu",
        "markedaspatrolled": "Označeno kao patrolirano",
        "exif-iimsupplementalcategory": "Dopunske kategorije",
        "exif-datetimeexpires": "Ne koristi nakon",
        "exif-datetimereleased": "Objavljeno",
-       "exif-originaltransmissionref": "Izvorni prenos kôda lokacije",
+       "exif-originaltransmissionref": "Izvorni prenos koda lokacije",
        "exif-identifier": "Naznaka",
        "exif-lens": "Korišćeni objektiv",
        "exif-serialnumber": "Serijski broj kamere",
        "duplicate-defaultsort": "'''Upozorenje:''' podrazumevani ključ svrstavanja „$2“ menja nekadašnji ključ „$1“.",
        "version": "Verzija",
        "version-extensions": "Instalirana proširenja",
+       "version-skins": "Teme",
        "version-specialpages": "Posebne stranice",
        "version-parserhooks": "Kuke raščlanjivača",
        "version-variables": "Promenljive",
        "version-antispam": "Sprečavanje nepoželjnih poruka",
-       "version-skins": "Teme",
        "version-api": "API",
        "version-other": "Drugo",
        "version-mediahandlers": "Rukovodioci medijima",
        "compare-revision-not-exists": "Navedena izmena ne postoji.",
        "dberr-problems": "Došlo je do tehničkih problema.",
        "dberr-again": "Sačekajte nekoliko minuta i ponovo učitajte stranicu.",
-       "dberr-info": "(ne mogu da se povežem sa serverom baze: $1)",
+       "dberr-info": "(ne mogu da se povežem sa serverom baze podataka: $1)",
+       "dberr-info-hidden": "(ne mogu da se povežem sa serverom baze podataka)",
        "dberr-usegoogle": "U međuvremenu, pokušajte da pretražite pomoću Gugla.",
        "dberr-outofdate": "Imajte na umu da njihovi primerci našeg sadržaja mogu biti zastareli.",
        "dberr-cachederror": "Ovo je privremeno memorisan primerak strane koji možda nije ažuran.",
        "expand_templates_ok": "U redu",
        "expand_templates_remove_comments": "Ukloni komentare",
        "expand_templates_remove_nowiki": "Poništava efekat <nowiki> tagova u prikazu članaka",
-       "expand_templates_generate_xml": "prikaži XML stablo",
+       "expand_templates_generate_xml": "Prikaži XML stablo",
        "expand_templates_preview": "Prikaz"
 }
index 9319a88..6178e4c 100644 (file)
        "servertime": "Serverten",
        "guesstimezone": "Fu a browser presi",
        "allowemail": "E-mail fu trawan masyin adu",
-       "defaultns": "Soma ini disi nenpreki suku:",
        "default": "soma",
        "prefs-files": "Gefre",
        "youremail": "E-mail:",
        "username": "Kebroikiman nen:",
-       "uid": "Kebroikiman ID:",
        "prefs-memberingroups": "Memre fu {{PLURAL:$1|grupu|grupu}}:",
        "yourrealname": "Yu tru nen:",
        "yourlanguage": "Tongo:",
        "all-logs-page": "Ala log buku",
        "log-title-wildcard": "Peprewoysi suku dy nanga disi nen bigin",
        "allpages": "Ala papira",
-       "alphaindexline": "$1 te go miti $2",
        "nextpage": "A papira d'e kon ($1)",
        "prevpage": "A papira di psa ($1)",
        "allpagesfrom": "Sori papira, bigin na:",
        "svg-long-desc": "SVG file, marki $1 × $2 pixel, bigi: $3",
        "show-big-image": "Moro srapu",
        "newimages": "Nyun file",
-       "showhidebots": "(Bot $1)",
        "noimages": "Noti a si.",
        "ilsubmit": "Suku",
        "bydate": "opo datum",
index cedcb88..d229fba 100644 (file)
        "qbmyoptions": "Mien Sieden",
        "faq": "Oafte stoalde Froagen",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Ousnit bietouföigje",
-       "vector-action-delete": "Läskje",
-       "vector-action-move": "Ferskuuwe",
-       "vector-action-protect": "Skutsje",
-       "vector-action-undelete": "Wierhäärstaale",
-       "vector-action-unprotect": "Siedenskuts annerje",
-       "vector-view-create": "Moakje",
-       "vector-view-edit": "Beoarbaidje",
-       "vector-view-history": "Versionsgeskichte",
-       "vector-view-view": "Leese",
-       "vector-view-viewsource": "Wältext bekiekje",
        "actions": "Aktione",
        "namespaces": "Noomeruume",
        "variants": "Variante",
        "diff-multi-manyusers": " ({{PLURAL:$1|Ne deertwiske lääsende Version|$1 deertwiske lääsende Versione}} fon moor as {{PLURAL:$2|Benutser|$2 Benutsere}} nit wiesd)",
        "searchresults": "Säikresultoate",
        "searchresults-title": "Säikresultoate foar \"$1\"",
-       "toomanymatches": "Ju Antaal fon Säikresultoate is tou groot, fersäik ne näie Oufroage.",
        "titlematches": "Uureenstämmengen mäd Uurskrifte",
        "textmatches": "Uureenstämmengen mäd Texte",
        "notextmatches": "Neen Uureenstimmengen",
        "searchmenu-exists": "'''Dät rakt n Siede mäd Noome \"[[:$1]]\" ap dissen Wiki'''",
        "searchmenu-new": "'''Moak ju Siede „[[:$1]]“ in dissen Wiki.'''",
        "searchprofile-articles": "Inhooldssieden",
-       "searchprofile-project": "Hälpe un Projektsieden",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Aal",
        "searchprofile-advanced": "Fergratterd",
        "searchprofile-articles-tooltip": "Säike in $1",
-       "searchprofile-project-tooltip": "Säike in $1",
        "searchprofile-images-tooltip": "Ätter Bielden säike",
        "searchprofile-everything-tooltip": "Gansen Inhoold truchsäike (inklusive Diskussionssieden)",
        "searchprofile-advanced-tooltip": "Säik in wiedere Noomensruume",
        "search-interwiki-default": "$1 Resultoate:",
        "search-interwiki-more": "(wiedere)",
        "search-relatedarticle": "Früünde",
-       "searcheverything-enable": "Säik in aal Noomensruume",
        "searchrelated": "früünd",
        "searchall": "aal",
        "showingresults": "Hier {{PLURAL:$1|is '''1''' Resultoat|sunt '''$1''' Resultoate}}, ounfangend mäd Nuumer '''$2'''.",
-       "showingresultsnum": "Hier {{PLURAL:$3|is '''1''' Resultoat|sunt '''$3''' Resultoate}}, ounfangend mäd Nuumer '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultoat '''$1''' fon '''$3'''|Resultoate '''$1–$2''' fon '''$3'''}} foar '''$4'''",
        "search-nonefound": "Foar dien Säikanfroage wuuden neen Resultoate fuunen.",
        "powersearch-legend": "Fääre säike",
        "allowemail": "Emails fon uur Benutsere kriegen",
        "prefs-searchoptions": "Säikoptione",
        "prefs-namespaces": "Noomensruume",
-       "defaultns": "Uursiede in disse Noomensruume säike:",
        "default": "Standoardienstaalenge",
        "prefs-files": "Doatäie",
        "prefs-custom-css": "Benutserdefinierde CSS",
        "prefs-emailconfirm-label": "E-Mail-Bestäätigenge:",
        "youremail": "E-Mail-Adrässe:",
        "username": "Benutsernoome:",
-       "uid": "Benutser-ID:",
        "prefs-memberingroups": "Meeglid fon {{PLURAL:$1|ju Benutzergruppe|do Benutzergruppen}}:",
        "prefs-registration": "Anmäldetiedpunkt:",
        "yourrealname": "Dien ächte Noome:",
        "logempty": "Neen paasende Iendraage.",
        "log-title-wildcard": "Tittel fangt oun mäd …",
        "allpages": "Aal Artikkele",
-       "alphaindexline": "$1 bit $2",
        "nextpage": "Naiste Siede ($1)",
        "prevpage": "Foarige Siede ($1)",
        "allpagesfrom": "Sieden wiese fon:",
        "tooltip-preferences-save": "Ienstaalengen spiekerje",
        "tooltip-summary": "Reek ne kuute Touhoopefoatenge ien",
        "common.css": "/** CSS an disse Steede wirket sik ap aal Skins uut */",
-       "monobook.css": "/* Littikschrieuwen nit twinge */",
        "common.js": "/* Älk JavaScript hier wäd foar aal Benutsere foar älke Siede leeden. */",
-       "monobook.js": "/* Ferallerd; benutsje insteede deerfon [[MediaWiki:common.js]] */",
        "anonymous": "{{PLURAL:$1|Anonymen Benutser|Anonyme Benutsere}} ap {{SITENAME}}",
        "siteuser": "{{SITENAME}}-Benutser $1",
        "anonuser": "Anonymen {{SITENAME}}-Benutser $1",
index be38bf4..265dfe8 100644 (file)
        "qbmyoptions": "Kaca kuring",
        "faq": "NLD",
        "faqpage": "Project:NLD",
-       "vector-action-addsection": "Jieun jejer anyar",
-       "vector-action-delete": "Hapus",
-       "vector-action-move": "Pindahkeun",
-       "vector-action-protect": "Konci",
-       "vector-action-undelete": "Bolaykeun ngahapus",
-       "vector-action-unprotect": "Robah protéksi",
-       "vector-view-create": "Jieun",
-       "vector-view-edit": "Édit",
-       "vector-view-history": "Témbongkeun jujutan",
-       "vector-view-view": "Baca",
-       "vector-view-viewsource": "Témbongkeun sumber",
        "actions": "Peta",
        "namespaces": "Spasi ngaran",
        "variants": "Varian",
        "diff-multi-manyusers": "({{PLURAL:$1|Hiji révisi antara|$1 révisi antara}} karya leuwih ti {{PLURAL:$2|pamaké|pamaké}} teu ditémbongkeun)",
        "searchresults": "Hasil maluruh",
        "searchresults-title": "Hasil nyusud \"$1\"",
-       "toomanymatches": "Loba teuing nu cocog, mangga cobi mundut nu sanésna",
        "titlematches": "Judul artikel nu cocog",
        "textmatches": "Téks kaca nu cocog",
        "notextmatches": "Teu aya téks kaca nu cocog",
        "searchmenu-exists": "'''Dina wiki ieu geus aya kaca nu ngaranna \"[[:$1]]\"'''",
        "searchmenu-new": "'''Jieun kaca \"[[:$1]]\" dina ieu wiki!'''",
        "searchprofile-articles": "Kaca eusi",
-       "searchprofile-project": "Kaca Pitulung jeung Proyék",
        "searchprofile-images": "Multimédia",
        "searchprofile-everything": "Sagala",
        "searchprofile-advanced": "Lengkep",
        "searchprofile-articles-tooltip": "Pilari di $1",
-       "searchprofile-project-tooltip": "Pilari di $1",
        "searchprofile-images-tooltip": "Pilari koropak/file",
        "searchprofile-everything-tooltip": "Pilari di sakabéh eusi (kaasup kaca obrolan)",
        "searchprofile-advanced-tooltip": "Paluruh di rohang ngaran anu tangtu",
        "search-interwiki-default": "$1 hasil:",
        "search-interwiki-more": "(saterusna)",
        "search-relatedarticle": "Patula-patali",
-       "searcheverything-enable": "Pilari di sakabéh rohangaran",
        "searchrelated": "patula-patali",
        "searchall": "sadayana",
        "showingresults": "Di handap ieu némbongkeun {{PLURAL:$1|'''1''' hasil|'''$1''' hasil}}, dimimitianku  #'''$2'''.",
-       "showingresultsnum": "Di handap ieu némbongkeun {{PLURAL:$3|'''1''' hasil|'''$3''' hasil}}, dimimitian #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Hasil '''$1''' ti '''$3'''|Hasil '''$1 - $2''' ti '''$3'''}} pikeun '''$4'''",
        "search-nonefound": "Euweuh hasil nu cocog jeung kueri.",
        "powersearch-legend": "Panéangan tuluy",
        "allowemail": "Buka koropak pikeun nampa surélék ti nu séjén",
        "prefs-searchoptions": "Piliheun Panéangan",
        "prefs-namespaces": "Ngaranspasi",
-       "defaultns": "Lamun teu kitu, paluruh dina rohang ngaran di handap ieu:",
        "default": "ti dituna",
        "prefs-files": "Koropak",
        "prefs-custom-css": "CSS sakahayang",
        "prefs-emailconfirm-label": "Konfirmasi surélék:",
        "youremail": "Surélék:",
        "username": "Landihan:",
-       "uid": "ID pamaké:",
        "prefs-memberingroups": "Anggota {{PLURAL:$1|jumplukan|jumplukan}}:",
        "prefs-registration": "Waktu daptar:",
        "yourrealname": "Ngaran anjeun*",
        "logempty": "Taya item nu cocog dina log.",
        "log-title-wildcard": "Téangan judul nu dimimitian ku tulisan ieu",
        "allpages": "Sadaya kaca",
-       "alphaindexline": "$1 ka $2",
        "nextpage": "Kaca salajengna ($1)",
        "prevpage": "Kaca saméméhna ($1)",
        "allpagesfrom": "Pintonkeun kaca ti mimiti:",
        "tooltip-preferences-save": "Simpen préferénsi",
        "tooltip-summary": "Asupkeun ringkesan",
        "common.css": "/* CSS nu di angé ku kabeh ''skin'' */",
-       "monobook.css": "/* édit koropak ieu pikeun nyaluyukeun kulit ''monobook'' pikeun sakabéh situs */",
        "common.js": "/* JavaScript nu aya didieu di angé ku kabeh ''skin'' */",
        "anonymous": "{{PLURAL:$1|Pamaké|Pamaké-pamaké}} anonim di {{SITENAME}}",
        "siteuser": "Pamaké $1 {{SITENAME}}",
index a9441f3..024635e 100644 (file)
@@ -57,7 +57,8 @@
                        "Where next Columbus?",
                        "WikiPhoenix",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Abbedabb"
                ]
        },
        "tog-underline": "Stryk under länkar:",
        "qbmyoptions": "Mina sidor",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Nytt ämne",
-       "vector-action-delete": "Radera",
-       "vector-action-move": "Flytta",
-       "vector-action-protect": "Skrivskydda",
-       "vector-action-undelete": "Återställ",
-       "vector-action-unprotect": "Ändra skydd",
-       "vector-view-create": "Skapa",
-       "vector-view-edit": "Redigera",
-       "vector-view-history": "Visa historik",
-       "vector-view-view": "Visa",
-       "vector-view-viewsource": "Visa källa",
        "actions": "Åtgärder",
-       "vector-more-actions": "Mer",
        "namespaces": "Namnrymder",
        "variants": "Varianter",
        "navigation-heading": "Navigeringsmeny",
        "externaldberror": "Antingen inträffade autentiseringsproblem med en extern databas, eller så får du inte uppdatera ditt externa konto.",
        "login": "Logga in",
        "nav-login-createaccount": "Logga in / skapa konto",
-       "loginprompt": "Du måste tillåta cookies för att logga in på {{SITENAME}}.",
+       "loginprompt": "Du måste tillåta kakor för att logga in på {{SITENAME}}.",
        "userlogin": "Logga in / skapa konto",
        "userloginnocreate": "Logga in",
        "logout": "Logga ut",
        "loginerror": "Inloggningsproblem",
        "createacct-error": "Fel när konto skulle skapas",
        "createaccounterror": "Kunde inte skapa konto: $1",
-       "nocookiesnew": "Användarkontot skapades, men du är inte inloggad.\n{{SITENAME}} använder cookies för att logga in användare.\nDu har cookies avaktiverade.\nAktivera dem, och logga sen in med ditt nya användarnamn och lösenord.",
-       "nocookieslogin": "{{SITENAME}} använder cookies för att logga in användare. Du har stängt av cookies i din webbläsare. Försök igen med stöd för cookies aktiverat.",
-       "nocookiesfornew": "Användarkontot skapades inte, eftersom vi inte kunde bekräfta dess källa.\nSe till att du har aktiverat cookies, ladda om denna sida och försök igen.",
+       "nocookiesnew": "Användarkontot skapades, men du är inte inloggad.\n{{SITENAME}} använder kakor för att logga in användare.\nDu har kakor inaktiverade.\nAktivera dem, och logga sen in med ditt nya användarnamn och lösenord.",
+       "nocookieslogin": "{{SITENAME}} använder kakor för att logga in användare. Du har stängt av kakor i din webbläsare. Försök igen med stöd för kakor aktiverat.",
+       "nocookiesfornew": "Användarkontot skapades inte, eftersom vi inte kunde bekräfta dess källa.\nSe till att du har aktiverat kakor, ladda om denna sida och försök igen.",
        "noname": "Du har angett ett ogiltigt användarnamn.",
        "loginsuccesstitle": "Inloggningen lyckades",
        "loginsuccess": "'''Du är nu inloggad på {{SITENAME}} som \"$1\".'''",
        "mergehistory-empty": "Inga versioner av sidorna kan sammanfogas.",
        "mergehistory-success": "$3 {{PLURAL:$3|version|versioner}} av [[:$1]] har infogats i [[:$2]].",
        "mergehistory-fail": "Historikerna kunde inte sammanfogas, kontrollera de sidor och den sidversion som du valt.",
+       "mergehistory-fail-toobig": "Kunde inte utföra historiksammanslagningen då fler än maxgränsen på $1 {{PLURAL:$1|version|versioner}} skulle ha flyttats.",
        "mergehistory-no-source": "Källsidan $1 finns inte.",
        "mergehistory-no-destination": "Målsidan $1 finns inte.",
        "mergehistory-invalid-source": "Källsidan måste vara en giltig sidtitel.",
        "searchall": "alla",
        "showingresults": "Nedan visas upp till {{PLURAL:$1|'''1''' post|'''$1''' poster}} från och med nummer '''$2'''.",
        "showingresultsinrange": "Nedan visas upp till {{PLURAL:$3|<strong>1</strong> resultat|<strong>$1</strong> resultat}} mellan nummer <strong>$2</strong> och nummer <strong>$3</strong>.",
-       "showingresultsnum": "Nedan visas {{PLURAL:$3|'''1''' post|'''$3''' poster}} från och med nummer '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' av '''$3'''|Resultat '''$1 - $2''' av '''$3'''}} för '''$4'''",
        "search-nonefound": "Inga resultat matchade frågan.",
        "powersearch-legend": "Avancerad sökning",
        "windows-nonascii-filename": "Denna wiki stödjer inte filnamn med specialtecken.",
        "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-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>\nVill du möjligen välja ett mer distinkt 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.",
        "file-thumbnail-no": "Filnamnet börjar med <strong>$1</strong>.\nDet verkar vara en bild med förminskad storlek ''(miniatyrbild)''.\nOm du har denna bild i full storlek, ladda då hellre upp den, annars var vänlig och ändra filens namn.",
        "fileexists-forbidden": "En fil med detta namn existerar redan, och kan inte överskrivas.\nOm du fortfarande vill ladda upp din fil, var god gå tillbaka och välj ett nytt namn. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Radering och återställning av filer har tillfälligt avaktiverats under underhåll.",
        "filedelete-maintenance-title": "Kan inte radera filen",
        "mimesearch": "MIME-sökning",
-       "mimesearch-summary": "På den här sidan kan du söka efter filer via dess MIME-typ. Input: contenttype/subtype, t.ex. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Denna sidan gör det möjligt att filtrera filer via dess MIME-typ.\nIndata: contenttype/subtype, t.ex. <code>image/jpeg</code>.",
        "mimetype": "MIME-typ:",
        "download": "ladda ner",
        "unwatchedpages": "Obevakade sidor",
        "tooltip-summary": "Skriv en kort sammanfattning",
        "interlanguage-link-title": "$1 - $2",
        "common.css": "/* CSS som skrivs här påverkar alla skal */",
-       "monobook.css": "/* CSS som skrivs här kommer att påverka alla användare av skalet Monobook */",
-       "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-autoconfirmed.css": "/* CSS som placeras här kommer bara att påverka bekräftade användare */",
        "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. */",
-       "monobook.js": "/* JavaScript här kommer att laddas för dem som använder skalet Monobook */",
-       "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 */",
        "group-bot.js": "/* JavaScript här kommer att laddas för robotar */",
        "pageinfo-category-pages": "Antal sidor",
        "pageinfo-category-subcats": "Antal underkategorier",
        "pageinfo-category-files": "Antal filer",
-       "skinname-monobook": "Monobook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Märk som patrullerad",
        "markaspatrolledtext": "Märk den här sidan som patrullerad",
        "markedaspatrolled": "Markerad som patrullerad",
        "duplicate-defaultsort": "'''Varning:''' Standardsorteringsnyckeln \"$2\" tar över från den tidigare standardsorteringsnyckeln \"$1\".",
        "version": "Version",
        "version-extensions": "Installerade programtillägg",
+       "version-skins": "Installerade utseenden",
        "version-specialpages": "Specialsidor",
        "version-parserhooks": "Parsertillägg",
        "version-variables": "Variabler",
        "version-antispam": "Förhindrar spam",
-       "version-skins": "Utseenden",
        "version-other": "Annat",
        "version-mediahandlers": "Mediahanterare",
        "version-hooks": "Hakar",
        "version-hook-name": "Namn på hook",
        "version-hook-subscribedby": "Används av",
        "version-version": "(Version $1)",
+       "version-no-ext-name": "[inget namn]",
        "version-license": "MediaWiki-licens",
        "version-ext-license": "Licens",
        "version-ext-colheader-name": "Tillägg",
+       "version-skin-colheader-name": "Utseende",
        "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "Licens",
        "version-ext-colheader-description": "Beskrivning",
index 660df9c..2d064c7 100644 (file)
        "qbmyoptions": "Kurasa zangu",
        "faq": "Maswali ya kawaida",
        "faqpage": "Project:Maswali Yaulizwayo Marakwamara",
-       "vector-action-addsection": "Weka mada",
-       "vector-action-delete": "Futa",
-       "vector-action-move": "Hamisha",
-       "vector-action-protect": "Linda",
-       "vector-action-undelete": "Rudisha",
-       "vector-action-unprotect": "Badilisha ulinzi",
-       "vector-view-create": "Anzisha",
-       "vector-view-edit": "Hariri",
-       "vector-view-history": "Fungua historia",
-       "vector-view-view": "Soma",
-       "vector-view-viewsource": "Tazama msimbo",
        "actions": "Vitendo",
        "namespaces": "Maeneo ya wiki",
        "variants": "Vibadala",
        "editundo": "tengua",
        "searchresults": "Matokeo ya utafutaji",
        "searchresults-title": "Matokeo ya utafutaji kwa ajili ya \"$1\"",
-       "toomanymatches": "Yalipatikana majibu mengi mno, kwa hiyo tafadhali jaribu ulizo mwingine",
        "titlematches": "Kurasa zinazo majina yenye maneno ya ulizo",
        "textmatches": "Kurasa zinazo maandishi yenye maneno ya ulizo",
        "notextmatches": "Maandishi yaliyotafutwa hayakupatikana kwenye kurasa zo zote",
        "searchmenu-exists": "'''Ukurasa wa \"[[:$1]]\" upo kwenye wiki hii'''",
        "searchmenu-new": "'''Anzisha ukurasa wa \"[[:$1]]\" katika wiki hii!'''",
        "searchprofile-articles": "Kurasa kwa kusudi ya wiki",
-       "searchprofile-project": "Kurasa za msaada na za mradi",
        "searchprofile-images": "Picha na kadhalika",
        "searchprofile-everything": "Zote",
        "searchprofile-advanced": "Hali ya juu",
        "searchprofile-articles-tooltip": "Tafuta kwenye $1",
-       "searchprofile-project-tooltip": "Tafuta kwenye $1",
        "searchprofile-images-tooltip": "Tafuta mafaili",
        "searchprofile-everything-tooltip": "Tafuta wiki nzima (pamoja na kurasa za majadiliano)",
        "searchprofile-advanced-tooltip": "Tafuta katika maeneo ya wiki utakayoyachagua",
        "search-interwiki-default": "Matokeo toka $1:",
        "search-interwiki-more": "(zaidi)",
        "search-relatedarticle": "Zingine zinazofanana",
-       "searcheverything-enable": "Tafuta katika maeneo yote ya wiki",
        "searchrelated": "zingine zinazofanana",
        "searchall": "zote",
        "showingresults": "{{PLURAL:$1|Tokeo '''1''' linaonyeshwa|matokeo '''$1''' yanaonyeshwa}} chini, kuanzia na namba '''$2'''.",
-       "showingresultsnum": "{{PLURAL:$3|Tokeo '''1''' linaonyeshwa|Matokeo '''$3''' yanaonyeshwa}} chini, kuanzia na namba '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Tokeo '''$1''' kati ya jumla ya '''$3'''|Matokeo '''$1 - $2''' kati ya jumla ya '''$3'''}} kutokana na kuitafuta '''$4'''",
        "search-nonefound": "Hakuna matokeo ya kutafuta ulizio ule.",
        "powersearch-legend": "Tafuta kwa hali ya juu",
        "allowemail": "Wezesha barua pepe toka kwa watumiaji wengine",
        "prefs-searchoptions": "Hitiari za kutafuta",
        "prefs-namespaces": "Maeneo ya wiki",
-       "defaultns": "La sivyo tafuta kwenye maeneo haya:",
        "default": "chaguo-msingi",
        "prefs-files": "Mafaili",
        "prefs-custom-css": "CSS niliyotunga mwenyewe",
index 64158b3..df1295c 100644 (file)
        "qbmyoptions": "Moje zajty",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Nowo tajla",
-       "vector-action-delete": "Wyćepej",
-       "vector-action-move": "Przećep",
-       "vector-action-protect": "Zawrzij",
-       "vector-action-undelete": "Wćep",
-       "vector-action-unprotect": "Uodymkńij",
-       "vector-view-create": "Stwůrz",
-       "vector-view-edit": "Sprowjej",
-       "vector-view-history": "Uobocz gyszichta",
-       "vector-view-view": "Czytej",
-       "vector-view-viewsource": "Zdrzůdłowy tekst",
        "actions": "Akcyje",
        "namespaces": "Raumy mjan",
        "variants": "Warjanty",
        "difference-missing-revision": "{{PLURAL:$2|Wersyjo|$2 wersyje|$2 wersyji}} #$1 zajty \"{{PAGENAME}}\" ńy {{PLURAL:$2|uostoła znaleźůno|uostoły znaleźůne|uostoło znaleźůnych}}. Zauobycz je to skiż starygo linky do wyćępanyj zajty. Powůd wyćepańa nojdźesz we [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejerze].",
        "searchresults": "Wyńiki sznupańo",
        "searchresults-title": "Wyniki sznupańo za „$1”",
-       "toomanymatches": "Za dužo elymyntůw kere pasujům do wzorca, wćep inkše zapytańy",
        "titlematches": "Znejdźono we titlach:",
        "textmatches": "Znejdźono na zajtach:",
        "notextmatches": "Ńy znejdźono we tekście zajtůw",
        "searchmenu-exists": "'''Ńy ma zajty uo mjańy \"[[:$1]]\" na tyj wiki'''",
        "searchmenu-new": "'''Stwůrz zajta „[[:$1|$1]]” na tyj wiki!'''",
        "searchprofile-articles": "Zajty",
-       "searchprofile-project": "Zajty půmocy a projektu",
        "searchprofile-images": "Multimedyja",
        "searchprofile-everything": "Wszyjsko",
        "searchprofile-advanced": "Rozszerzůne",
        "searchprofile-articles-tooltip": "Sznupańy we raumje mjan $1",
-       "searchprofile-project-tooltip": "Sznupańy we raumach mjan $1",
        "searchprofile-images-tooltip": "Sznupańy za plikůma",
        "searchprofile-everything-tooltip": "Sznupej we cołku (i ze zajtůma dyskusyje)",
        "searchprofile-advanced-tooltip": "Sznupańy we uobranych raumach mjan",
        "search-interwiki-default": "$1 wyńiki:",
        "search-interwiki-more": "(wjyncyj)",
        "search-relatedarticle": "Podane",
-       "searcheverything-enable": "Sznupej we wszech mjan",
        "searchrelated": "podane",
        "searchall": "wszyjske",
        "showingresults": "To lista na keryj je {{PLURAL:$1|'''1''' wyńik|'''$1''' wyńikůw}}, počynojůnc uod nůmeru '''$2'''.",
-       "showingresultsnum": "To lista na keryj je {{PLURAL:$3|'''1''' wyńik|'''$3''' wyńikůw}}, počynojůnc uod nůmeru '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Wyńik '''$1''' z '''$3'''|Wyńiki '''$1 – $2''' z '''$3'''}} lo '''$4'''",
        "search-nonefound": "Ńy mo wynikůw, kere uodpadajům kryterjům zapytańo.",
        "powersearch-legend": "Sznupańy zaawansowane",
        "allowemail": "Inksze użytkowńiki můgům posyłać mje e-brify",
        "prefs-searchoptions": "Sznupańe",
        "prefs-namespaces": "Raumy mjan",
-       "defaultns": "Důmyślńy sznupej we nastympujůncych przystrzyńach mjan:",
        "default": "důmyślńy",
        "prefs-files": "Pliki",
        "youremail": "E-brif:",
        "username": "{{GENDER:$1|Mjano używocza}}:",
-       "uid": "{{GENDER:$1|ID używocza}}:",
        "prefs-memberingroups": "Należy do {{PLURAL:$1|grupy|grup:}}",
        "prefs-registration": "Czas twůrzyńa kůnta:",
        "yourrealname": "Prawdźiwe mjano",
        "logempty": "Ńy ma wpisůw we rejeře",
        "log-title-wildcard": "Šnupej za titlami kere začynojům śe uod tygo tekstu",
        "allpages": "Wšyskie zajty",
-       "alphaindexline": "uod $1 do $2",
        "nextpage": "Nostympno zajta ($1)",
        "prevpage": "Popředńo zajta ($1)",
        "allpagesfrom": "Zajty začynojůnce śe na:",
index d297c7b..512c95a 100644 (file)
        "qbmyoptions": "என் விருப்பத்தேர்வுகள்",
        "faq": "அடிக்கடி கேட்கப்படும் கேள்விகள்",
        "faqpage": "Project:அடிக்கடி கேட்கப்படும் கேள்விகள்",
-       "vector-action-addsection": "தலைப்பைச் சேர்",
-       "vector-action-delete": "நீக்குக",
-       "vector-action-move": "நகர்த்தவும்",
-       "vector-action-protect": "காக்கவும்",
-       "vector-action-undelete": "நீக்கத்தை நிறுத்து",
-       "vector-action-unprotect": "காப்பை மாற்று",
-       "vector-view-create": "உருவாக்கவும்",
-       "vector-view-edit": "தொகு",
-       "vector-view-history": "வரலாற்றைக் காட்டவும்",
-       "vector-view-view": "படிக்கவும்",
-       "vector-view-viewsource": "மூலத்தைக் காட்டவும்",
        "actions": "செயல்கள்",
        "namespaces": "பெயர்வெளிகள்",
        "variants": "மாற்றுக்கள்\n\nமாற்றுருவங்கள்",
        "diff-multi-manyusers": "({{PLURAL:$2|பயனரால்|$2 பயனர்களால்}} செய்யப்பட்ட {{PLURAL:$1|ஒரு இடைப்பட்ட திருத்தம்|$1 இடைப்பட்ட திருத்தங்கள்}}  காட்டப்படவில்லை.)",
        "searchresults": "தேடல் முடிவுகள்",
        "searchresults-title": "\"$1\" இற்கான தேடல் முடிவுகள்",
-       "toomanymatches": "மிகக்கூடுதலான பொருத்தம் தரும் உருப்படிகளைத் தருகின்றது,  உங்கள் கேள்வியை மாற்றியமைக்கவும்",
        "titlematches": "கட்டுரைத் தலைப்புப் பொருந்துகிறது",
        "textmatches": "கட்டுரை உரை பொருந்துகிறது",
        "notextmatches": "கட்டுரை உரை எதுவும் பொருந்தவில்லை",
        "searchrelated": "தொடர்புடையவை",
        "searchall": "அனைத்தும்",
        "showingresults": "'''$2''' இலிருந்து தொடங்கும்  {{PLURAL:$1|'''1''' முடிவு கீழே காட்டப்பட்டுள்ளது|'''$1''' முடிவுகள் கீழே காட்டப்பட்டுள்ளன}}.",
-       "showingresultsnum": "'''$2''' இலிருந்து தொடங்கும்  {{PLURAL:$3|'''1''' முடிவு கீழே காட்டப்பட்டுள்ளது|'''$3''' முடிவுகள் கீழே காட்டப்பட்டுள்ளன}}.",
        "showingresultsheader": "'''$4''' இற்கான {{PLURAL:$5|முடிவு  '''$3''' இல் '''$1'''|முடிவுகள்'''$3''' இல்  '''$1 - $2''' }}",
        "search-nonefound": "உங்கள் வினவலுக்கான முடிவுகள் எதுவும் இல்லை.",
        "powersearch-legend": "மேம்பட்ட தேடல்",
index 3c54cb6..9df1372 100644 (file)
        "qbmyoptions": "ಎನ್ನ ಪುಟೊಲು",
        "faq": "ಸಾಮಾನ್ಯವಾದ್ ಕೇನುನ ಪ್ರಶ್ನೆಲು",
        "faqpage": "Project:ಸಾಮಾನ್ಯವಾದ್ ಕೇನುನ ಪ್ರಶ್ನೆಲು",
-       "vector-action-addsection": "ವಿಷಯ ಸೇರಾಲೆ",
-       "vector-action-delete": "ದೆತ್ತ್ ಪಾಡ್ಲೆ",
-       "vector-action-move": "ಸ್ಥಳಾಂತರ ಮಲ್ಪುಲೆ",
-       "vector-action-protect": "ಸ೦ರಕ್ಷಿಸಾಲೆ",
-       "vector-action-undelete": "ಮಾಜಾವಡೆ",
-       "vector-action-unprotect": "ಬದಲಾವಣೆನ್ ರಕ್ಷಿಸಾಲೆ",
-       "vector-view-create": " ಸುರು ಮಲ್ಪುಲೆ",
-       "vector-view-edit": "ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ",
-       "vector-view-history": "ಇತಿಹಾಸೊನು ತೂಲೆ",
-       "vector-view-view": "ಓದ್ಲೇ",
-       "vector-view-viewsource": "ಮೂಲೊನು ತೂಲೆ",
        "actions": "ಕ್ರಿಯೆಕ್ಕುಲು",
        "namespaces": "ಪುದರ್ ದ ವರ್ಗೊಲು",
        "variants": "ರೂಪಾಂತರ ಹೊಂದ್‘ನ",
        "prefs-files": "ಕಡತೊಲು",
        "youremail": "ಇ-ಅಂಚೆ",
        "username": "ಸದಸ್ಯೆರ್ನ ಪುದರ್:",
-       "uid": "ಸದಸ್ಯೆರನ  ID",
        "yourrealname": "ನಿಜವಾಯಿನ ಪುದರ್",
        "yourlanguage": "ಭಾಷೆ:",
        "yournick": "ಪೊಸ ಸಹಿ",
        "booksources-go": "ಪೋ",
        "log": "ದಾಖಲೆಲು",
        "allpages": "ಪೂರಾ ಪೂಟೊಲು",
-       "alphaindexline": "$1 ರ್ದ್ $2 ಗ್",
        "allpagesfrom": "ಇಂದೆರ್ದ್ ಶುರುವಾಪುನ ಪುಟೊಲೆನ್ ತೊಜ್ಪಾವು:",
        "allpagesto": "ಇಂದೆರ್ದ್ ಅಂತ್ಯ ಆಪುನ ಪುಟೊಲೆನ್ ತೊಜ್ಪಾವು:",
        "allarticles": "ಪೂರಾ ಲೇಖನೊಲು",
index ab8acdb..92528f5 100644 (file)
        "qbmyoptions": "నా పేజీలు",
        "faq": "తరచూ అడిగే ప్రశ్నలు",
        "faqpage": "Project:తరచూ అడిగే ప్రశ్నలు",
-       "vector-action-addsection": "విషయాన్ని చేర్చు",
-       "vector-action-delete": "తొలగించు",
-       "vector-action-move": "తరలించు",
-       "vector-action-protect": "సంరక్షించు",
-       "vector-action-undelete": "తొలగింపును రద్దుచెయ్యి",
-       "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": "మార్గదర్శకపు మెనూ",
        "searchall": "అన్నీ",
        "showingresults": "#<strong>$2</strong> నుండి మొదలుకొని {{PLURAL:$1|</strong>ఒక్క</strong> ఫలితాన్ని|<strong>$1</strong> ఫలితాలను}} కింద చూపించాం.",
        "showingresultsinrange": "#<strong>$2</strong> నుండి  #<strong>$3</strong> వరకు ఉన్న ఫలితాల శ్రేణి నుండి {{PLURAL:$1|<strong>ఒక్క</strong> ఫలితం|<strong>$1</strong> ఫలితాల}} వరకు కింద చూపించాం.",
-       "showingresultsnum": "#<strong>$2</strong> నుండి మొదలుకొని {{PLURAL:$3|<strong>ఒక్క</strong> ఫలితాన్ని|<strong>$3</strong> ఫలితాలను}} కింద చూపించాం.",
        "showingresultsheader": "<strong>$4</strong> కోసం వచ్చిన ఫలితాలు {{PLURAL:$5|<strong>$3</strong> లో <strong>$1</strong>|</strong>$3</strong> లో <strong>$1 - $2</strong>}}",
        "search-nonefound": "మీ ప్రశ్నకి సరిపోలిన ఫలితాలేమీ లేవు.",
        "powersearch-legend": "నిశితమైన అన్వేషణ",
        "pageinfo-category-pages": "పేజీల సంఖ్య",
        "pageinfo-category-subcats": "ఉపవర్గాల సంఖ్య",
        "pageinfo-category-files": "దస్త్రాల సంఖ్య",
-       "skinname-monobook": "మోనోబుక్",
-       "skinname-vector": "వెక్టర్",
        "markaspatrolleddiff": "పరీక్షించినట్లుగా గుర్తు పెట్టు",
        "markaspatrolledtext": "ఈ వ్యాసాన్ని పరీక్షించినట్లుగా గుర్తు పెట్టు",
        "markedaspatrolled": "పరీక్షింపబడినట్లు గుర్తింపబడింది",
index d3da814..423f1e3 100644 (file)
        "qbmyoptions": "Ha'u-nia pájina sira",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-protect": "Proteje",
-       "vector-view-create": "Kria",
-       "vector-view-edit": "Edita",
-       "vector-view-history": "Haree istória",
-       "vector-view-view": "Lee",
        "actions": "Aksaun sira",
        "errorpagetitle": "Sala",
        "returnto": "Fali ba $1.",
        "searchmenu-new": "'''Kria pájina \"[[:$1]]\" iha wiki ne'e!'''",
        "searchprofile-everything": "Hotu",
        "searchprofile-articles-tooltip": "Buka iha $1",
-       "searchprofile-project-tooltip": "Buka iha $1",
        "search-result-size": "$1 ({{PLURAL:$2|liafuan ida|liafuan $2}})",
        "search-section": "(seksaun $1)",
        "search-suggest": "Parese Ita buka: $1",
        "timezoneregion-europe": "Europa",
        "youremail": "Korreiu eletróniku:",
        "username": "Naran uza-na'in:",
-       "uid": "Númeru uza-na'in:",
        "yourlanguage": "Lian:",
        "gender-male": "Mane",
        "gender-female": "Feto",
        "specialloguserlabel": "Uza-na'in ne'ebé halo:",
        "speciallogtitlelabel": "Objetivu (títulu ka uza-na'in):",
        "allpages": "Pájina hotu",
-       "alphaindexline": "$1 to'o $2",
        "nextpage": "Pájina oinmai ($1)",
        "prevpage": "Pájina molok ($1)",
        "allpagesfrom": "Hatudu pájina sira; hahú iha:",
        "block": "Blokeiu uza-na'in",
        "blockip": "Blokeiu uza-na'in",
        "blockip-legend": "Blokeiu uza-na'in",
-       "ipadressorusername": "Diresaun IP ka naran uza-na'in:",
+       "ipaddressorusername": "Diresaun IP ka naran uza-na'in:",
        "ipbexpiry": "Tempu:",
        "ipbreason": "Motivu:",
        "ipbcreateaccount": "La bele kria konta foun",
        "siteuser": "uza-na'in {{SITENAME}} nian $1",
        "lastmodifiedatby": "Pájina ne'e $3 mak muda ba dala ikus iha $1, $2.",
        "siteusers": "{{PLURAL:$2|uza-na'in|uza-na'in}} {{SITENAME}} nian $1",
-       "skinname-cologneblue": "Kolónia azúl",
        "previousdiff": "←Versaun molok",
        "nextdiff": "Versaun oinmai→",
        "show-big-image": "Boot liu",
-       "showhidebots": "($1 bot sira)",
        "ilsubmit": "Buka",
        "bad_image_list": "Formatu:\n\nLiña hotu tenke komesa ho *\nLigasaun uluk iha liña tenke ligasaun bá imajen aat.\nLigasaun seluk iha liña - ne'e pájina sira iha ne'ebé bele inklui imajen aat.",
        "exif-make": "Fabrikante kámara nian",
        "compare-rev1": "Versaun 1",
        "compare-rev2": "Versaun 2",
        "compare-submit": "Halo komparasaun",
-       "dberr-header": "Wiki ne'e iha problema",
        "rightsnone": "(mamuk)",
        "searchsuggest-search": "Buka",
        "expand_templates_ok": "OK"
index 1d84b32..50eecf7 100644 (file)
        "qbmyoptions": "Саҳифаҳои ман",
        "faq": "Саволҳои тез-тез пурсидашуда",
        "faqpage": "Project:Саволҳои тез-тез пурсидашуда",
-       "vector-action-addsection": "Иловаи унвон",
-       "vector-action-delete": "Ҳазф",
-       "vector-action-move": "Кӯчонидан",
-       "vector-action-protect": "Муҳофизат",
-       "vector-action-undelete": "Эҳё",
-       "vector-action-unprotect": "Тағйири муҳофизат",
-       "vector-view-create": "Эҷод",
-       "vector-view-edit": "Вироиш",
-       "vector-view-history": "Намоиши таърих",
-       "vector-view-view": "Хондан",
-       "vector-view-viewsource": "Намоиши манбаъ",
        "actions": "Амалкардҳо",
        "namespaces": "Фазоҳои ном",
        "variants": "Вариантҳо",
        "diff-empty": "(бе тафовут)",
        "searchresults": "Натиҷаҳои ҷустуҷӯ",
        "searchresults-title": "Натоиҷи ҷустуҷӯ барои \"$1\"",
-       "toomanymatches": "Теъдоди мавориди мутобиқ хеле зиёд буд, лутфан дархости дигареро имтиҳон кунед",
        "titlematches": "Унвони саҳифа татбиқ мекунад",
        "textmatches": "Матни мақола татбиқ мекунад",
        "notextmatches": "Матни ҳеҷ мақолае рост намеояд",
        "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": "Ҷустуҷӯ дар фазоҳои номи дилхоҳ",
        "searchrelated": "алоқаманд",
        "searchall": "ҳама",
        "showingresults": "Намоиши {{PLURAL:$1|'''1''' натиҷа|'''$1''' натоиҷ}} дар зер оғоз аз #'''$2'''.",
-       "showingresultsnum": "Намоиши {{PLURAL:$3|'''1''' натиҷа|'''$3''' натоиҷ}} оғоз аз #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Натиҷаи <strong>$1</strong> <strong>$3</strong>|Натоиҷи <strong>$1 - $2</strong> <strong>$3</strong>}} барои <strong>$4</strong>",
        "search-nonefound": "Натиҷаи муносиб бо дархост пайдо нашуд.",
        "powersearch-legend": "Ҷустуҷӯи пешрафта",
        "allowemail": "Иҷозат додани e-mail аз дигар корбарон",
        "prefs-searchoptions": "Ҷустуҷӯ",
        "prefs-namespaces": "Фазоҳои ном",
-       "defaultns": "Вагарнда дар ин фазоҳои ном ҷустуҷӯ шавад:",
        "default": "пешфарз",
        "prefs-files": "Файлҳо",
        "prefs-emailconfirm-label": "Тасдиқи почта:",
        "youremail": "Почтаи электронии Шумо:",
        "username": "{{GENDER:$1|Номи корбар}}:",
-       "uid": "{{GENDER:$1|Корбар}} ID:",
        "prefs-memberingroups": "{{GENDER:$2|Узви}} ин {{PLURAL:$1|гурӯҳ|гурӯҳҳо}}:",
        "prefs-registration": "Замони сабтином:",
        "yourrealname": "Номи аслӣ:",
        "logempty": "Мавриди мутобиқ ба манзури шумо дар гузориш пайдо нашуд.",
        "log-title-wildcard": "Саҳифаҳоеро ҷустуҷӯ кунед, ки унвонашон бо ин матн оғоз мешаванд",
        "allpages": "Ҳамаи саҳифаҳо",
-       "alphaindexline": "$1 то $2",
        "nextpage": "Саҳифаи баъдина ($1)",
        "prevpage": "Саҳифаи пешина ($1)",
        "allpagesfrom": "Намоиши саҳифаҳо бо шурӯъ аз:",
index 2d38b3c..780bc24 100644 (file)
        "qbmyoptions": "Sahifahoi man",
        "faq": "Savolhoi tez-tez pursidaşuda",
        "faqpage": "Project:Savolhoi tez-tez pursidaşuda",
-       "vector-action-addsection": "Ilovai unvon",
-       "vector-action-delete": "Hazf",
-       "vector-action-move": "Kūconidan",
-       "vector-action-protect": "Muhofizat",
-       "vector-action-undelete": "Ehjo",
-       "vector-action-unprotect": "Ba dar ovardan az muhofizat",
-       "vector-view-create": "Eçod",
-       "vector-view-edit": "Viroiş",
-       "vector-view-history": "Namoişi ta'rix",
-       "vector-view-view": "Xondan",
-       "vector-view-viewsource": "Namoişi manba'",
        "actions": "Amalkardho",
        "namespaces": "Fazohoi nom",
        "variants": "Variantho",
        "editundo": "botil",
        "searchresults": "Natiçahoi çustuçū",
        "searchresults-title": "Natoiçi çustuçū baroi \"$1\"",
-       "toomanymatches": "Te'dodi mavoridi mutobiq xele zijod bud, lutfan darxosti digarero imtihon kuned",
        "titlematches": "Unvoni sahifa tatbiq mekunad",
        "textmatches": "Matni maqola tatbiq mekunad",
        "notextmatches": "Matni heç maqolae rost nameojad",
        "searchmenu-new": "'''Eçodi sahifai \"[[:$1]]\" dar in viki!'''",
        "searchprofile-advanced": "Peşrafta",
        "searchprofile-articles-tooltip": "Çustuçū dar $1",
-       "searchprofile-project-tooltip": "Çustuçū dar $1",
        "searchprofile-images-tooltip": "Çustuçūi parvandaho",
        "searchprofile-everything-tooltip": "Çustuçūi hamai mūhtavo (bo hisobi sahifahoi bahs)",
        "search-result-size": "$1 ({{PLURAL:$2|1 kalima|$2 kalimaho}})",
        "searchrelated": "aloqamand",
        "searchall": "hama",
        "showingresults": "Namoişi {{PLURAL:$1|'''1''' natiça|'''$1''' natoiç}} dar zer oƣoz az #'''$2'''.",
-       "showingresultsnum": "Namoişi {{PLURAL:$3|'''1''' natiça|'''$3''' natoiç}} oƣoz az #'''$2'''.",
        "powersearch-legend": "Çustuçūi peşrafta",
        "powersearch-ns": "Çustuçū dar fazohoi nom:",
        "search-external": "Çustuçūi xoriçī",
        "prefs-files": "Fajlho",
        "youremail": "Poctai elektroniji Şumo:",
        "username": "Nomi korbar:",
-       "uid": "ID-i korbar:",
        "prefs-memberingroups": "A'zoi {{PLURAL:$1|gurūh|gurūhho}}:",
        "yourrealname": "Nomi aslī:",
        "yourlanguage": "Zabon:",
        "logempty": "Mavridi mutobiq ba manzuri şumo dar guzoriş pajdo naşud.",
        "log-title-wildcard": "Sahifahoero çustuçū kuned, ki unvonaşon bo in matn oƣoz meşavand",
        "allpages": "Hamai sahifaho",
-       "alphaindexline": "$1 to $2",
        "nextpage": "Sahifai ba'dina ($1)",
        "prevpage": "Sahifai peşina ($1)",
        "allpagesfrom": "Namoişi sahifaho bo şurū' az:",
        "blockip": "Bastani korbar",
        "blockip-legend": "Bastani korbar",
        "blockiptext": "Baroi bastani dastrasiji viroişi nişonai IP jo nomi korbarī muşaxxas az formi zerin istifoda kuned.\nIn kor faqat bojad baroi çilavgirī az xarobkori va muvofiqi bo [[{{MediaWiki:Policy-url}}|sijosati qat'i dastrasī]] ançom şavad.\nDaleli muşaxxas baroi in korro dar zer zikr kuned (baroi misol, zikri sahifahoe, ki xarobkorī şudaand).",
-       "ipadressorusername": "IP nişona jo nomi korbar:",
+       "ipaddressorusername": "IP nişona jo nomi korbar:",
        "ipbexpiry": "Xotima:",
        "ipbreason": "Sabab:",
        "ipbreason-dropdown": "*Sababhoi umumiji bastan\n** Vorid kardani ittilooti nodurust\n** Pok kardani ittilooti mufid az sahifaho\n** Istifoda burdani pajvandhoi spam ba somonahoi beruna\n** Vorid kardani naviştahoi beman'nī ba sahifaho\n** Raftori ba'd/masxarakuniji digar korbaron\n** Sūiistifoda az cand hisobi korbarī\n** Nomi korbariji nomunosib",
        "imagelisttext": "Dar zer fehristi '''$1''' {{PLURAL:$1|parvandai|parvandahoi}} ba tartib ovarda şuda, omadaast $2.",
        "newimages-summary": "In sahifai viƶa oxirin parvandahoi borşudaro namoiş medihad.",
        "newimages-legend": "Filtr",
-       "showhidebots": "($1 botho)",
        "noimages": "Cize baroi didan nest.",
        "ilsubmit": "Çustuçūi",
        "bydate": "az rūi sana",
index f5c5239..083efdd 100644 (file)
        "qbmyoptions": "หน้าของฉัน",
        "faq": "คำถามพบบ่อย",
        "faqpage": "Project:คำถามพบบ่อย",
-       "vector-action-addsection": "เพิ่มหัวข้อใหม่",
-       "vector-action-delete": "ลบ",
-       "vector-action-move": "เปลี่ยนชื่อ",
-       "vector-action-protect": "ล็อก",
-       "vector-action-undelete": "กู้คืน",
-       "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": "รายการเลือกป้ายบอกทาง",
        "nstab-image": "ไฟล์",
        "nstab-mediawiki": "ข้อความ",
        "nstab-template": "แม่แบบ",
-       "nstab-help": "หà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย",
+       "nstab-help": "หà¸\99à¹\89าวิà¸\98ีà¹\83à¸\8aà¹\89",
        "nstab-category": "หมวดหมู่",
        "nosuchaction": "ไม่มีการกระทำดังกล่าว",
        "nosuchactiontext": "การกระทำที่กำหนดผ่านยูอาร์แอลดังกล่าวไม่สามารถใช้ได้\nคุณอาจกรอกยูอาร์แอลผิด หรือมาตามลิงก์ที่ไม่ถูกต้อง\nหรืออาจเกิดจากข้อผิดพลาดในซอฟต์แวร์ซึ่ง {{SITENAME}} ใช้อยู่",
        "searchall": "ทั้งหมด",
        "showingresults": "ด้านล่างแสดง <strong>1</strong> ผลลัพธ์ เริ่มตั้งแต่รายการที่ <strong>$2</strong>",
        "showingresultsinrange": "ด้านล่างแสดงมากสุด {{PLURAL:$1|<strong>1</strong>|<strong>$1</strong>}} ผลลัพธ์ ในพิสัย #<strong>$2</strong> ถึง #<strong>$3</strong>",
-       "showingresultsnum": "ด้านล่างแสดง <strong>$3</strong> ผลลัพธ์ เริ่มตั้งแต่รายการที่ <strong>$2</strong>",
        "showingresultsheader": "{{PLURAL:$5|ผลการค้นหา <strong>$1</strong> จาก <strong>$3</strong>|ผลการค้นหา <strong>$1 - $2</strong> จาก <strong>$3</strong>}} สำหรับ <strong>$4</strong>",
        "search-nonefound": "ไม่มีผลลัพธ์ตรงกับคำค้น",
        "powersearch-legend": "ค้นหาระดับสูง",
        "wantedtemplates": "แม่แบบที่ต้องการ",
        "mostlinked": "หน้าที่มีการเชื่อมโยงหามากที่สุด",
        "mostlinkedcategories": "หมวดหมู่ที่มีการเชื่อมโยงหามากที่สุด",
-       "mostlinkedtemplates": "à¹\81มà¹\88à¹\81à¸\9aà¸\9aที่มีการเชื่อมโยงหามากที่สุด",
+       "mostlinkedtemplates": "หà¸\99à¹\89าที่มีการเชื่อมโยงหามากที่สุด",
        "mostcategories": "หน้าที่มีหมวดหมู่มากที่สุด",
        "mostimages": "ภาพที่มีการโยงไปหามากที่สุด",
        "mostinterwikis": "หน้าที่มีลิงก์ข้ามโครงการมากที่สุด",
        "importunknownsource": "ไม่ทราบชนิดของไฟล์นำเข้า",
        "importcantopen": "ไม่สามารถเปิดไฟล์นำเข้าได้",
        "importbadinterwiki": "ลิงก์ข้ามภาษาเสีย",
-       "importsuccess": "à¸\99ำà¹\80à¸\82à¹\89าà¹\84à¸\9fลà¹\8cสำà¹\80รà¹\87à¸\88!",
+       "importsuccess": "นำเข้าสำเร็จ!",
        "importnosources": "ไม่มีการกำหนดแหล่งนำเข้าข้ามวิกิ และการอัปโหลดประวัติหน้าโดยตรงถูกปิดการใช้งาน",
        "importnofile": "ไฟล์นำเข้าไม่ได้ถูกอัปโหลด",
        "importuploaderrorsize": "อัปโหลดไฟล์ข้อมูลนำเข้าไม่สำเร็จ\nขนาดไฟล์ใหญ่เกินกว่าที่อนุญาตไว้",
        "tooltip-preferences-save": "บันทึกการตั้งค่า",
        "tooltip-summary": "ใส่คำอธิบายอย่างย่อสั้น ๆ",
        "common.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ทุกสกิน */",
-       "monobook.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินโมโนบุ๊ก */",
-       "vector.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินเวกเตอร์ */",
        "print.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ข้อมูลส่งออกเป็นสิ่งพิมพ์ */",
        "noscript.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ปิดการใช้งานจาวาสคริปต์ */",
        "group-autoconfirmed.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ทั่วไปเท่านั้น */",
        "group-sysop.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ดูแลเท่านั้น */",
        "group-bureaucrat.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ดูแลสิทธิแต่งตั้งเท่านั้น */",
        "common.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ทุกคนในทุกหน้า */",
-       "monobook.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินโมโนบุ๊ก */",
-       "vector.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินเวกเตอร์ */",
        "group-autoconfirmed.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ทั่วไปเท่านั้น */",
        "group-bot.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่บอตเท่านั้น */",
        "group-sysop.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ดูแลเท่านั้น */",
        "pageinfo-length": "ความยาวหน้า (ไบต์)",
        "pageinfo-article-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-monobook": "โมโนบุ๊ก",
-       "skinname-vector": "เวกเตอร์",
        "markaspatrolleddiff": "ทำเครื่องหมายว่าตรวจสอบแล้ว",
        "markaspatrolledtext": "ทำเครื่องหมายว่าหน้านี้ถูกตรวจสอบแล้ว",
        "markedaspatrolled": "ตรวจสอบแล้ว",
        "watchlistedit-raw-done": "รายการเฝ้าดูของคุณได้ปรับแล้ว",
        "watchlistedit-raw-added": "$1 ชื่อเรื่องได้ถูกเพิ่มเข้าไป:",
        "watchlistedit-raw-removed": "$1 ชื่อเรื่องได้ถูกนำออกไป:",
+       "watchlistedit-clear-legend": "ล้างรายการเฝ้าดู",
+       "watchlisttools-clear": "ล้างรายการเฝ้าดู",
        "watchlisttools-view": "ดูการเปลี่ยนแปลงที่เกี่ยวข้อง",
        "watchlisttools-edit": "ดูและแก้ไขรายการเฝ้าดู",
        "watchlisttools-raw": "แก้ไขรายการเฝ้าดูทั้งหมด",
        "duplicate-defaultsort": "คำเตือน: หลักเรียงลำดับปริยาย \"$2\" ได้ลบล้างหลักเรียงลำดับปริยาย \"$1\" ที่มีอยู่ก่อนหน้า",
        "version": "รุ่นซอฟต์แวร์",
        "version-extensions": "ส่วนขยายเพิ่ม (extension) ที่ติดตั้ง",
+       "version-skins": "รูปลักษณ์ที่ติดตั้ง",
        "version-specialpages": "หน้าพิเศษ",
        "version-parserhooks": "ฮุกที่มีการพาร์สค่า",
        "version-variables": "ตัวแปร",
        "version-antispam": "การป้องกันสแปม",
-       "version-skins": "รูปลักษณ์",
        "version-other": "อื่นๆ",
        "version-mediahandlers": "ตัวจัดการเกี่ยวกับสื่อ (media handler)",
        "version-hooks": "ฮุก",
index 9a27692..c6b21c3 100644 (file)
        "qbmyoptions": "Meniň sahypalarym",
        "faq": "KSS",
        "faqpage": "Project:KSS",
-       "vector-action-addsection": "Tema goş",
-       "vector-action-delete": "Öçür",
-       "vector-action-move": "Adyny üýtget",
-       "vector-action-protect": "Goraga al",
-       "vector-action-undelete": "Öçürmäni yzyna al",
-       "vector-action-unprotect": "Goragy üýtget",
-       "vector-view-create": "Döret",
-       "vector-view-edit": "Üýtget",
-       "vector-view-history": "Taryhy gör",
-       "vector-view-view": "Oka",
-       "vector-view-viewsource": "Çeşmäni gör",
        "actions": "Hereketler",
        "namespaces": "At giňişlikleri",
        "variants": "Wariantlar",
        "diff-multi-manyusers": "($2 ulanyjydan köp {{PLURAL:$2|ulanyjy|ulanyjy}} tarapyndan edilen {{PLURAL:$1|aralyk wersiýa|$1 sany aralyk wersiýa}} görkezilmeýär)",
        "searchresults": "Gözleg netijeleri",
        "searchresults-title": "\"$1\" hakda gözleg netijeleri",
-       "toomanymatches": "Çakdanaşa köp gabat gelme tapyldy, başgaçarak talap ýazyp görüň",
        "titlematches": "Sahypa ady gabat gelýär",
        "textmatches": "Sahypa teksti gabat gelýär",
        "notextmatches": "Hiç bir sahypada tapylmady",
        "searchmenu-exists": "'''Bu wikide \"[[:$1]]\" atly sahypa bar'''",
        "searchmenu-new": "<strong>Bu wikide \"[[:$1]]\" sahypasyny dörediň!</strong> \n{{PLURAL:$2|0=|Gözlegde tapylan sahypa-da serediň.|Tapylan gözleg netijelerine-de serediň.}}",
        "searchprofile-articles": "Esasy sahypalar",
-       "searchprofile-project": "Kömek we taslama sahypalary",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Ähli zatlar",
        "searchprofile-advanced": "Giňişleýin",
        "searchprofile-articles-tooltip": "$1 içinden gözle",
-       "searchprofile-project-tooltip": "$1 içinden gözle",
        "searchprofile-images-tooltip": "Faýllary gözle",
        "searchprofile-everything-tooltip": "Ähli sahypalardan gözle (şol sanda pikir alyşma sahypalaryndan)",
        "searchprofile-advanced-tooltip": "Laýyk at giňişliklerinde gözle",
        "search-interwiki-default": "$1 netijeler:",
        "search-interwiki-more": "(has-da köp)",
        "search-relatedarticle": "Baglanyşykly",
-       "searcheverything-enable": "Ähli at giňişliklerinde gözle",
        "searchrelated": "baglanyşykly",
        "searchall": "ählisi",
        "showingresults": "Aşakda №'''$2''' netijeden başlap, {{PLURAL:$1|'''1''' netije|'''$1''' netije}} görkezilýär.",
-       "showingresultsnum": "Aşakda №'''$2''' netijeden başlap, {{PLURAL:$3|'''1''' netije|'''$3''' netije}} görkezilýär.",
        "showingresultsheader": "'''$4''' hakda {{PLURAL:$5|'''$3''' netijeden '''$1''' sanysy|'''$3''' netijeden '''$1 - $2''' aralygy}}",
        "search-nonefound": "Talaba gabat gelýän hiç hili netije ýok.",
        "powersearch-legend": "Giňişleýin gözleg",
        "allowemail": "Başga ulanyjylar maňa e-poçta iberip bilsin",
        "prefs-searchoptions": "Gözleg",
        "prefs-namespaces": "At giňişlikleri",
-       "defaultns": "Bolmasa şu at giňişliklerinde gözleg geçiriň:",
        "default": "gaýybana",
        "prefs-files": "Faýllar",
        "prefs-custom-css": "Hususy CSS",
        "prefs-emailconfirm-label": "E-poçta tassyklamasy:",
        "youremail": "E-poçta:",
        "username": "Ulanyjy ady:",
-       "uid": "Ulanyjy belgisi:",
        "prefs-memberingroups": "Agza {{PLURAL:$1|topary|toparlary}}:",
        "prefs-registration": "Hasaba alnan wagty:",
        "yourrealname": "Hakyky adyňyz:",
        "logempty": "Gündelikde gabat gelýän ýazgy ýok.",
        "log-title-wildcard": "Şu tekst bilen başlaýan atlary gözle",
        "allpages": "Ähli sahypalar",
-       "alphaindexline": "$1 sahypasyndan $2 sahypasyna çenli",
        "nextpage": "Indiki sahypa ($1)",
        "prevpage": "Öňki sahypa ($1)",
        "allpagesfrom": "Sanawy şu harplar bilen başlat:",
index 6715fe6..c589b01 100644 (file)
        "qbmyoptions": "Mga pahina ko",
        "faq": "Mga karaniwang itinatanong (''FAQ'')",
        "faqpage": "Project:Mga karaniwang itinatanong (''FAQ'')",
-       "vector-action-addsection": "Magdagdag ng paksa",
-       "vector-action-delete": "Burahin",
-       "vector-action-move": "Ilipat",
-       "vector-action-protect": "Ipagsanggalang",
-       "vector-action-undelete": "Alisin ang pagbubura",
-       "vector-action-unprotect": "Baguhin ang pagsasanggalang",
-       "vector-view-create": "Likhain",
-       "vector-view-edit": "Baguhin",
-       "vector-view-history": "Tingnan ang kasaysayan",
-       "vector-view-view": "Basahin",
-       "vector-view-viewsource": "Tingnan ang pinagmulan",
        "actions": "Mga kilos",
        "namespaces": "Mga ngalan-espasyo",
        "variants": "Naiiba pa",
        "searchrelated": "kaugnay",
        "searchall": "lahat",
        "showingresults": "Ipinapakita sa ibaba ang magpahanggang sa {{PLURAL:$1|'''1''' resultang|'''$1''' mga resultang}} nagsisimula sa #'''$2'''.",
-       "showingresultsnum": "Ipinapakita sa ibaba ang {{PLURAL:$3|'''1''' resultang|'''$3''' mga resultang}} nagsisimula sa #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultang '''$1''' ng '''$3'''|Mga resultang '''$1 - $2''' ng '''$3'''}} para sa '''$4'''",
        "search-nonefound": "Walang mga resultang tumutugma sa katanungan/pagtatanong.",
        "powersearch-legend": "Paghahanap na may mas mataas na antas",
        "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 */",
-       "monobook.css": "/* Ang CSS na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Monobook */",
-       "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-autoconfirmed.css": "/* Ang inilagay na Mga Pilas ng Estilong Lumalagaslas (Cascading Style Sheets o CSS) dito ay makakaapekto lamang sa mga tagagamit na kusang natiyak */",
        "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. */",
-       "monobook.js": "/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na MonoBook */",
-       "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 */",
        "group-sysop.js": "/* Ang anumang JavaScript dito ay ikakarga para sa mga tagapagpaandar ng sistema 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-monobook": "MonoBook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Tatakan bilang napatrolya na",
        "markaspatrolledtext": "Tatakan ang pahinang ito bilang napatrolya na",
        "markedaspatrolled": "Tatakan bilang napatrolya na",
        "duplicate-defaultsort": "Babala: Madadaig ng susi ng pagtatakdang \"$2\" ang mas naunang susi ng pagtatakdang \"$1\".",
        "version": "Bersyon",
        "version-extensions": "Nakaluklok/Nakainstalang mga karugtong",
+       "version-skins": "Mga pabalat",
        "version-specialpages": "Natatanging mga pahina",
        "version-parserhooks": "Mga pangkawit ng banghay (''parser'')",
        "version-variables": "Mga bagay na nababago/nagbabago",
        "version-antispam": "Pag-iwas sa masasamang mga e-liham",
-       "version-skins": "Mga pabalat",
        "version-api": "API",
        "version-other": "Iba pa",
        "version-mediahandlers": "Mga tagahawak/tagapamahala ng midya",
index 8cc4d3d..2f9d67a 100644 (file)
        "qbmyoptions": "Чымы сәһифон",
        "faq": "РАП",
        "faqpage": "Project:РАП",
-       "vector-action-addsection": "Мывзу зијод кардеј",
-       "vector-action-delete": "Рәдд кардеј",
-       "vector-action-move": "Номи дәгиш кардеј",
-       "vector-action-protect": "Мыдофијә кардеј",
-       "vector-action-undelete": "Бәрпо кардеј",
-       "vector-action-unprotect": "Мыдофијә дәгиш кардеј",
-       "vector-view-create": "Офәјеј",
-       "vector-view-edit": "Сәрост кардеј",
-       "vector-view-history": "Тарых",
-       "vector-view-view": "Һандемон",
-       "vector-view-viewsource": "Дијә кардеј",
        "actions": "Һәрәкәтон",
        "namespaces": "Номон мәконон",
        "variants": "Вариантон",
        "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-custom-css": "Хысуси CSS",
        "youremail": "E-номә:",
        "username": "{{GENDER:$1|Иштирокәкә ном}}:",
-       "uid": "{{GENDER:$1|Иштирокәкә}} ID:",
        "yourrealname": "Шымә әсыл ном:",
        "yourlanguage": "Зывон:",
        "email": "E-номә",
        "booksources-go": "Нәве",
        "log": "Журналон",
        "allpages": "Һәммәј сәһифон",
-       "alphaindexline": "че $1 тоса $2",
        "allarticles": "Һәммәј сәһифон",
        "allpagessubmit": "Бә вырә роснијеј",
        "categories": "Категоријон",
index 9c17de2..58e73ab 100644 (file)
        "search-suggest": "Mahalo pē naʻa ke fiemaʻu: $1",
        "search-interwiki-more": "(lahi ange)",
        "showingresults": "ʻOku ʻasi ʻi lalo ʻa e ngaahi fua ʻoku kamata mo e #'''$2''' (aʻu ki he '''$1''').",
-       "showingresultsnum": "ʻOku ʻasi ʻi lalo ha fua ʻe '''$3''', ʻoku kamata mo e #'''$2'''.",
        "powersearch-legend": "Kumi lakasi",
        "preferences": "Faʻiteliha",
        "mypreferences": "faʻiteliha ʻaʻaku",
        "servertime": "Taimi ʻo e tauhia:",
        "timezoneregion-africa": "ʻAfelika",
        "allowemail": "Fakamafeiaʻi ʻa e tohila mei he kau ʻetita ʻe taha",
-       "defaultns": "Kumi ʻi he vā hingoa fakatuʻunga:",
        "default": "tuʻunga",
        "prefs-files": "Ngaahi faile",
        "youremail": "Tohila:",
        "username": "Ko e ʻetita hono hingoa:",
-       "uid": "hono fika:",
        "yourrealname": "Hingoa moʻoni:",
        "yourlanguage": "Lea:",
        "yourvariant": "Faikeheʻi",
        "alllogstext": "Fakaʻaliʻali fakakātoa ʻo e ngaahi tohinoa hiki hake, mo tāmateʻi, mo maluʻi, mo taʻofi, mo fakapule. ʻOku lava ke ke sivi ʻa e fakaʻaliʻalí ni ʻi he fili ʻo e falenga tohinoa pe hingoa ʻo e ʻetita pe peesi hūkitonu.",
        "logempty": "ʻOku maha ʻa e tohinoa.",
        "allpages": "Peesi kotoa",
-       "alphaindexline": "$1 ki he $2",
        "nextpage": "Peesi hoko ($1)",
        "prevpage": "Peesi ki muʻa ($1)",
        "allpagesfrom": "ʻAsi mai ngaahi peesi ʻoku kamata he:",
        "whatlinkshere-links": "← fehokotaki",
        "blockip": "Taʻofia ʻa e ʻetita",
        "blockiptext": "Ngāueʻaki ʻa e foomu ʻi lalo ʻe taʻofia ʻa e ngofua tohi ʻo e tuʻasila IP pe hingoa ʻetita ʻe taha. ʻOku pau ʻe fai pehē ʻi he taʻofi laukovi pē, lototaha ia mo e [[{{MediaWiki:Policy-url}}|founga]]. Fakafonu ʻi lalo ʻa e ʻuhinga totonu (fakafuaʻaki, lau ki he ngaahi peesi naʻe laukovi).",
-       "ipadressorusername": "Tuʻasila IP pe hingoa ʻo e ʻetita",
+       "ipaddressorusername": "Tuʻasila IP pe hingoa ʻo e ʻetita",
        "ipbexpiry": "Mate",
        "ipbreason": "ʻUhinga",
        "ipbcreateaccount": "Taʻofia ʻa e fakatupu ʻo ha tohi kau-ki-ai",
        "show-big-image": "ʻAsi ʻa e faitā auiiki",
        "newimages": "Fakaʻaliʻali ʻo e ngaahi faitā foʻou",
        "imagelisttext": "ʻOku ʻasi ʻi lalo ha hokohoko ʻo e '''$1''' vahevahe he $2.",
-       "showhidebots": "($1 fatu fakamīsini)",
        "noimages": "ʻOku ʻikai ha meʻa ke sio ki ai.",
        "ilsubmit": "Kumi",
        "bydate": "ʻi honau ʻaho",
index 4396245..347e836 100644 (file)
@@ -19,7 +19,6 @@
        "tog-showtoolbar": "Soim ol liklik link long wokim senis kwiktaim (i nidim JavaScript)",
        "tog-editondblclick": "Senisim pes taim yu paitim tupela taim kwiktaim (i nidim JavaScript)",
        "tog-editsectiononrightclick": "Senisim ol hap bilong pes taim yu paitim nem bilong hap<br />wantaim raithan-klik (i nidim Javascript)",
-       "tog-rememberpassword": "Holim yusanem bilong mi long dispela komputa (holim pas longpela taim $1 {{PLURAL:$1|de|de}})",
        "tog-watchcreations": "Putim ol nupela pes mi wokim na fail mi salim long lukautbuk",
        "tog-watchdefault": "Putim ol pes na fail mi senisim long lukautbuk bilong mi",
        "tog-watchmoves": "Putim ol pes mi surikim long lukautbuk bilong mi",
        "qbedit": "Senisim",
        "qbpageoptions": "Dispela pes",
        "qbmyoptions": "Ol pes bilong mi",
-       "vector-action-delete": "Rausim",
-       "vector-action-move": "Surikim",
-       "vector-action-protect": "Tambuim",
-       "vector-view-create": "Kirapim",
-       "vector-view-edit": "Senisim",
-       "vector-view-history": "Ol senis",
-       "vector-view-view": "Rit",
-       "vector-view-viewsource": "Lukim as tok",
        "errorpagetitle": "Samting i kranki",
        "returnto": "Go bek long $1",
        "tagline": "Long {{SITENAME}}",
        "savearticle": "Raitim pes",
        "preview": "Pes wantaim senis (pastaim long raitim)",
        "showpreview": "Soim pes wantaim senis (pastaim long raitim)",
-       "showlivepreview": "Soim senis kwiktaim taim mi wokim (pastaim long raitim)",
        "showdiff": "Soim ol senis",
        "missingcommenttext": "Plis raitim tingting daunbilo.",
        "summary-preview": "Toksave bilong senis bai luk olsem:",
        "searchprofile-images": "Media",
        "searchprofile-everything": "Olgeta",
        "searchprofile-articles-tooltip": "Painim long $1",
-       "searchprofile-project-tooltip": "Painim long $1",
        "search-result-size": "$1 ({{PLURAL:$2|1 wot|ol $2 wot}})",
        "search-redirect": "(nupela rot long $1)",
        "search-section": "(seksen $1)",
        "searchall": "olgeta",
        "powersearch-legend": "Mobeta Painim",
        "powersearch-ns": "Painim long ol nem",
-       "powersearch-redir": "Soim ol nupela rot",
        "powersearch-toggleall": "Olgeta",
        "powersearch-togglenone": "I nogat wanpela",
        "preferences": "Ol laik",
        "prefs-custom-js": "Praivet JavaScript",
        "youremail": "E-mel:",
        "username": "Yusanem:",
-       "uid": "Yusa ID:",
        "yourrealname": "Tru nem:",
        "yourlanguage": "Tokples:",
        "yourgender": "Man/Meri:",
        "speciallogtitlelabel": "Nem:",
        "log": "Ol ripot",
        "allpages": "Olgeta pes",
-       "alphaindexline": "$1 inap long $2",
        "allarticles": "Ol pes",
        "allpagessubmit": "Go",
        "categories": "Ol grup",
        "previousdiff": "← Moa olpela senis",
        "nextdiff": "Moa nupela senis →",
        "show-big-image": "Bikpela piksa",
-       "showhidebots": "($1 ol bot)",
        "ilsubmit": "Painim",
        "metadata": "Metadata",
        "exif-imagedescription": "Nem bilong piksa",
        "confirm_purge_button": "OK",
        "imgmultigo": "Go!",
        "table_pager_limit_submit": "Go",
-       "watchlistedit-numitems": "Igat {{PLURAL:$1|1 samting|$1 samting}} insait long lukautbuk bilong yu (ol pes bilong toktok i no stap long dispela namba).",
-       "watchlistedit-noitems": "Nogat wanpela samting long lukautbuk bilong yu.",
        "watchlistedit-normal-title": "Senisim lukautbuk",
        "watchlistedit-normal-legend": "Rausim ol samting long lukautbuk",
        "watchlistedit-normal-explain": "Ananit yu lukim ol samting long lukautbuk. Long rausim wanpela samting, makim liklik boxis long sait bilong en, na paitim \"Rausim ol samting\".  Na tu yu inap [[Special:EditWatchlist/raw|senisim lukautbuk long wanpela bokis]].",
index df6d4bc..5b9b74a 100644 (file)
        "qbmyoptions": "Sayfalarım",
        "faq": "SSS",
        "faqpage": "Project:SSS",
-       "vector-action-addsection": "Konu ekle",
-       "vector-action-delete": "Sil",
-       "vector-action-move": "Taşı",
-       "vector-action-protect": "Koru",
-       "vector-action-undelete": "Silinmeyi geri al",
-       "vector-action-unprotect": "Korumayı değiştir",
-       "vector-view-create": "Oluştur",
-       "vector-view-edit": "Düzenle",
-       "vector-view-history": "Geçmişi gör",
-       "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ü",
        "searchall": "hepsi",
        "showingresults": "$2. sonuçtan başlayarak {{PLURAL:$1|'''1''' sonuç |'''$1''' sonuç }} aşağıdadır:",
        "showingresultsinrange": "<strong>$2</strong> ile <strong>$3</strong> arasında toplam <strong>$1</strong> sonuç gösteriliyor.",
-       "showingresultsnum": "'''$2''' sonuçtan başlayarak {{PLURAL:$3|'''1''' sonuç|'''$3''' sonuç}} aşağıdadır:",
        "showingresultsheader": "'''$4''' için {{PLURAL:$5|'''$3''' sonuçtan '''$1'''i|'''$1 - $2''' arası '''$3''' sonuç}}",
        "search-nonefound": "Sorguyla eşleşen bir sonuç yok.",
        "powersearch-legend": "Gelişmiş arama",
        "deadendpagestext": "Aşağıdaki sayfalar, {{SITENAME}} sitesinde diğer sayfalara bağlantı vermiyor.",
        "protectedpages": "Koruma altındaki sayfalar",
        "protectedpages-indef": "Sadece süresiz korumalar",
-       "protectedpages-summary": "Bu sayfa şu anda koruma altında olan mevcut sayfaları listeler. Oluşturulması korunan başlıkların bir listesi için [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] sayfasına bakın.",
+       "protectedpages-summary": "Bu sayfa şu anda koruma altında olan mevcut sayfaları listeler. Oluşturulması korunan başlıkların listesi için [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] sayfasına bakın.",
        "protectedpages-cascade": "Sadece ardışık korumalar",
        "protectedpages-noredirect": "Yönlendirmeleri gizle",
        "protectedpagesempty": "Şu anda, bu parametrelerle korunan hiç bir sayfa yok.",
        "protectedpages-unknown-timestamp": "Bilinmiyor",
        "protectedpages-unknown-performer": "Bilinmeyen kullanıcı",
        "protectedtitles": "Korunan başlıklar",
-       "protectedtitles-summary": "Bu sayfa şu anda oluşturulması korunan başlıkları listeler. Koruma altında olan mevcut sayfaların bir listesi için [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] sayfasına bakın.",
+       "protectedtitles-summary": "Bu sayfa şu anda oluşturulması korunan başlıkları listeler. Koruma altında olan mevcut sayfaların listesi için [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] sayfasına bakın.",
        "protectedtitlesempty": "Şu anda, bu parametrelerle korunan hiç bir başlık yok.",
        "listusers": "Kullanıcı listesi",
        "listusers-editsonly": "Sadece değişiklik yapan kullanıcıları göster",
        "listgrouprights-removegroup-self": "Kendi hesabından {{PLURAL:$2|grup|grupları}} çıkarabilir: $1",
        "listgrouprights-addgroup-self-all": "Kendi hesabına tüm grupları ekleyebilir",
        "listgrouprights-removegroup-self-all": "Kendi hesabından tüm grupları çıkarabilir",
+       "trackingcategories-nodesc": "Açıklama yok.",
        "mailnologin": "Gönderi adresi yok.",
        "mailnologintext": "Diğer kullanıcılara e-posta gönderebilmeniz için [[Special:UserLogin|oturum aç]]malısınız ve [[Special:Preferences|tercihler]] sayfasında geçerli bir e-posta adresiniz olmalı.",
        "emailuser": "Bu kullanıcıya e-posta gönder",
        "tooltip-preferences-save": "Tercihleri kaydet",
        "tooltip-summary": "Kısa bir özet girin",
        "common.css": "/* Buraya konulacak CSS kodu tüm temalarda etkin olur */",
-       "monobook.css": "/* Buraya konulacak CSS kodu tüm Monobook teması kullanan tüm kullanıcılarda etkin olur */",
        "common.js": "/* Buraya konulacak JavaScript kodu sitedeki her kullanıcı için her sayfa yüklendiğinde çalışacaktır */",
        "anonymous": "{{SITENAME}} sitesinin anonim {{PLURAL:$1|kullanıcısı|kullanıcıları}}",
        "siteuser": "{{SITENAME}} kullanıcısı $1",
        "duplicate-defaultsort": "'''Uyarı:''' Varsayılan \"$2\" sınıflandırma anahtarı, önceki \"$1\" sınıflandırma anahtarını geçersiz kılıyor.",
        "version": "Sürüm",
        "version-extensions": "Yüklü ekler",
+       "version-skins": "Görünümler",
        "version-specialpages": "Özel sayfalar",
        "version-parserhooks": "Derleyici çengelleri",
        "version-variables": "Değişkenler",
        "version-antispam": "Yığın mesaj (spam) önleme",
-       "version-skins": "Görünümler",
        "version-other": "Diğer",
        "version-mediahandlers": "Ortam işleyiciler",
        "version-hooks": "Çengeller",
index 12cb82c..77efb97 100644 (file)
        "qbmyoptions": "aFaṭoṭayḍi",
        "faq": "Şuwole",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Maḥat Fusoqo ḥaṭo",
-       "vector-action-delete": "Slag",
-       "vector-action-move": "Mtaxar",
-       "vector-action-protect": "Mastar",
-       "vector-view-create": "Xlaq",
-       "vector-view-edit": "Mşaḥlaf",
-       "vector-view-history": "Maktabzabno",
-       "vector-view-view": "Qray",
-       "vector-view-viewsource": "Maḥway li aMabu³e.",
        "actions": "Dubore",
        "namespaces": "Dukṭo luIşmo",
        "variants": "Variants",
        "searchmenu-exists": "'''Kito Faṭo herke Işma \"[[:$1]]\"yo'''",
        "searchmenu-new": "Kṭaw iFaṭaṭe \"[[:$1]]\" buWiki.",
        "searchprofile-articles": "Faṭoṭe daḤbişoṭo",
-       "searchprofile-project": "Faṭoṭe du3udrono u daProjat",
        "searchprofile-images": "Multimediya",
        "searchprofile-everything": "Kulmede",
        "searchprofile-advanced": "Advanced",
        "searchprofile-articles-tooltip": "Krax b$1",
-       "searchprofile-project-tooltip": "Krax b$1",
        "searchprofile-images-tooltip": "Krax Ṥurtoṭe",
        "searchprofile-everything-tooltip": "Krax baḤbişoṭo (baFaṭoṭe duDroşo ste)",
        "searchprofile-advanced-tooltip": "Search in custom namespaces",
        "booksources-go": "Zux",
        "log": "Logs",
        "allpages": "aFaṭaṭe kulle",
-       "alphaindexline": "$1  l$2",
        "allarticles": "aFaṭaṭe kulle",
        "allpagessubmit": "Zux",
        "categories": "Sedre",
index b5a157b..1833d18 100644 (file)
        "qbmyoptions": "Matluka ya mina",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Veka nholoko ya mhaka",
-       "vector-action-delete": "Sula",
-       "vector-action-move": "Yi sa kunwana",
-       "vector-action-protect": "Sirhelela",
-       "vector-action-undelete": "Cinca kusula",
-       "vector-action-unprotect": "Cinca kusirhelela",
-       "vector-view-create": "Tumbuluxa",
-       "vector-view-edit": "Lulamisa",
-       "vector-view-history": "Languta matimu",
-       "vector-view-view": "Hlaya",
-       "vector-view-viewsource": "Languta xihlovo",
        "actions": "Swiendlo",
        "namespaces": "Swikhomela viti",
        "variants": "Tinxaka hi ku hambana",
        "searchmenu-exists": "'''Tluka leri vuriwaka \"[[:$1]]\" ikhale ririkona eka wiki leyi.'''",
        "searchmenu-new": "'''Tumbuluxa tluka ra \"[[:$1]]\" eka wiki leyi!'''",
        "searchprofile-articles": "Matluka lama tsariweke",
-       "searchprofile-project": "Mpfuno na matluka ya phurojeki",
        "searchprofile-images": "Tifayili ta mfpumawulo na swifaniso",
        "searchprofile-everything": "Hinkwaswo",
        "searchprofile-advanced": "Rharhangana",
        "searchprofile-articles-tooltip": "Lavisisa eka $1",
-       "searchprofile-project-tooltip": "Lavisisa eka $1",
        "searchprofile-images-tooltip": "Lava tifayili",
        "searchprofile-everything-tooltip": "Lavalava eka matsalwa hinkwawo  (kuhlanganisa na matluka ya mbulavulo)",
        "searchprofile-advanced-tooltip": "Lavalava eka swisivela mavito leswi tolovelekeke",
        "specialloguserlabel": "Mutirhisi:",
        "log": "Nghula ya minxaxamelo",
        "allpages": "Matluka hinkwawo",
-       "alphaindexline": "$1 kuya fika eka $2",
        "allarticles": "Matluka hinkwawo",
        "allpagessubmit": "Nghena",
        "categories": "Mintlawa",
index 7f173ef..8cc9001 100644 (file)
        "qbmyoptions": "Битләрем",
        "faq": "ЕБС",
        "faqpage": "Project:ЕБС",
-       "vector-action-addsection": "Яңа тема өстәү",
-       "vector-action-delete": "Бетерү",
-       "vector-action-move": "Күчерү",
-       "vector-action-protect": "Яклау",
-       "vector-action-undelete": "Кайтару",
-       "vector-action-unprotect": "Яклауны үзгәртү",
-       "vector-view-create": "Төзү",
-       "vector-view-edit": "Үзгәртү",
-       "vector-view-history": "Тарихын карау",
-       "vector-view-view": "Уку",
-       "vector-view-viewsource": "Чыганагын карау",
        "actions": "Хәрәкәт",
        "namespaces": "Исемнәр мәйданы",
        "variants": "Төрләр",
        "searchrelated": "бәйләнгән",
        "searchall": "барлык",
        "showingresults": "Аста № '''$2''' {{PLURAL:$1|башлап}} '''$1''' {{PLURAL:$1|результат}} күрсәтелгән.",
-       "showingresultsnum": "Аста № '''$2''' {{PLURAL:$3|башлап}} '''$3''' {{PLURAL:$3|результат}} күрсәтелгән.",
        "showingresultsheader": "'''$4''' өчен {{PLURAL:$5|1=Результат '''$1''' сеннән '''$3'''|Результатлар '''$1 — $2''' сеннән  '''$3'''}}",
        "search-nonefound": "Сорауга туры килгән җаваплар табылмады.",
        "powersearch-legend": "Өстәмә эзләү",
        "creditspage": "Рәхмәтләр",
        "spamprotectiontitle": "Спам фильтры",
        "pageinfo-toolboxlink": "Бит турында мәгълүмат",
-       "skinname-monobook": "Китап",
-       "skinname-vector": "Сызымлы",
        "markaspatrolledtext": "Бу мәкаләне тикшерелгән дип тамгалау",
        "markedaspatrolled": "Тикшерелгән дип тамгаланды",
        "markedaspatrolledtext": "Сайланган [[:$1]] мәкаләсенең әлеге юрамасы тикшерелгән дип тамгаланды.",
index 206af30..95cb788 100644 (file)
        "qbmyoptions": "Bitlärem",
        "faq": "YBS",
        "faqpage": "Project:YBS",
-       "vector-action-addsection": "Yaña tema östäw",
-       "vector-action-delete": "Beterü",
-       "vector-action-move": "Küçerü",
-       "vector-action-protect": "Yaqlaw",
-       "vector-action-undelete": "Qaytaru",
-       "vector-action-unprotect": "Yaqlawnı beterü",
-       "vector-view-create": "Tözü",
-       "vector-view-edit": "Üzgärtü",
-       "vector-view-history": "Tarixın qaraw",
-       "vector-view-view": "Uqu",
-       "vector-view-viewsource": "Çığanağın qaraw",
        "actions": "Xäräkät",
        "namespaces": "İsemnär mäydanı",
        "variants": "Törlär",
        "viewprevnext": "Kürsätelüe: ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "'''«[[:$1]]»  isemle yaña bit yasaw'''",
        "searchprofile-articles": "Töp bitlär",
-       "searchprofile-project": "Yärdäm häm proyektlar bite",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Härqayda",
        "searchprofile-advanced": "Kiñäytelgän",
        "searchprofile-articles-tooltip": "$1 dä ezläw",
-       "searchprofile-project-tooltip": "$1 dä ezläw",
        "searchprofile-images-tooltip": "Fayllar ezläw",
        "searchprofile-everything-tooltip": "Barlıq bitlärdä dä ezläw",
        "searchprofile-advanced-tooltip": "Birelgän isemnär mäydanında ezläw",
        "search-interwiki-default": "$1 näticä:",
        "search-interwiki-more": "(tağın)",
        "search-relatedarticle": "Bäylängän",
-       "searcheverything-enable": "Barlıq isemnär mäydanında ezläw",
        "searchrelated": "bäylängän",
        "searchall": "barlıq",
        "showingresults": "Asta № '''$2''' {{PLURAL:$1|başlap}} '''$1''' {{PLURAL:$1|rezultat}} kürsätelgän.",
-       "showingresultsnum": "Asta № '''$2''' {{PLURAL:$3| başlap}} '''$3''' {{PLURAL:$3|rezultat}} kürsätelgän.",
        "showingresultsheader": "'''$4''' öçen {{PLURAL:$5|Rezultat '''$1''' sennän '''$3'''|Rezultatlar '''$1 — $2''' sennän  '''$3'''}}",
        "search-nonefound": "Sorawğa turı kilgän cawaplar tabılmadı.",
        "powersearch-legend": "Östämä ezläw",
        "allowemail": "Başqa qullanuçılardan xatlar alırğa röxsät itelsen",
        "prefs-searchoptions": "Ezläw köylänmäläre",
        "prefs-namespaces": "İsemnär mäydanı",
-       "defaultns": "Alaysa menä bu isemnär mäydanında ezläw",
        "default": "kileşü buyınça",
        "prefs-files": "Fayllar",
        "prefs-custom-css": "Üzemneñ CSS",
        "prefs-emailconfirm-label": "E-mail raslaw",
        "youremail": "Elektron poçta:",
        "username": "Qullanuçı iseme:",
-       "uid": "Qullanuçınıñ identifikatorı:",
        "prefs-memberingroups": "Törkem {{PLURAL:$1|äğzası}}:",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "Terkälü waqıtı:",
        "alllogstext": "{{SITENAME}} säxifäseneñ ğomumi köndälekläre isemlege.\nSez näticälärne köndälek töre, qullanuçı iseme (xäref zurlığın istä totığız) yäki quzzallağan bit (şulay uq xäref zurlığın istä totığız) buyınça tärtipkä salırğa mömkin.",
        "logempty": "Kiräkle yazmalar köndälektä yuq.",
        "allpages": "Barlıq bitlär",
-       "alphaindexline": "$1 bitennän $2 bitenä qädär",
        "nextpage": "Aldağı bit ($1)",
        "prevpage": "Aldağı bit ($1)",
        "allpagesfrom": "Moña başlanuçı bitlärne çığaru:",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|qullanuçısı|qullanuçıları}} $1",
        "creditspage": "Räxmätlär",
        "spamprotectiontitle": "Spam filtrı",
-       "skinname-cologneblue": "Zäñgär sağış",
-       "skinname-monobook": "Kitap",
-       "skinname-modern": "Zamana",
-       "skinname-vector": "Sızımlı",
        "markaspatrolledtext": "Bu mäqäläne tikşerelgän dip tamğalaw",
        "markedaspatrolled": "Tikşerelgän dip tamğalandı",
        "markedaspatrolledtext": "Saylanğan [[:$1]] mäqäläseneñ älege yuraması tikşerelgän dip tamğalandı.",
diff --git a/languages/i18n/tw.json b/languages/i18n/tw.json
new file mode 100644 (file)
index 0000000..86973bf
--- /dev/null
@@ -0,0 +1,52 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Nemo bis",
+                       "Rberchie"
+               ]
+       },
+       "sun": "Kwasiada",
+       "mon": "Dwoada",
+       "tue": "Benada",
+       "wed": "Wukuada",
+       "thu": "Yawoada",
+       "fri": "\tFida",
+       "sat": "Memeneda",
+       "april": "Oforisuo",
+       "january-gen": "OpƐpon",
+       "february-gen": "ogyefuo",
+       "march-gen": "ɔbɛnem",
+       "april-gen": "oforisuo",
+       "may-gen": "kɔtɔnimma",
+       "june-gen": "ayɛwohomumɔ",
+       "july-gen": "kutawonsa",
+       "august-gen": "ɔsannaa",
+       "september-gen": "ɛbɔ",
+       "october-gen": "ahinime",
+       "november-gen": "obubuo",
+       "december-gen": "ɔpɛnimma",
+       "faq": "Nsemisa  amanfour tae bisa",
+       "searchbutton": "Hwewhe'",
+       "create": "Bo",
+       "protect_change": "Sesa",
+       "talkpagelinktext": "Kasa",
+       "otherlanguages": "Wo kasa ahodour mu",
+       "toc": "Biribiara",
+       "viewsource": "Hwe bebia efiri",
+       "template-protected": "(Wei yabo eho ban)",
+       "searchprofile-everything": "Biribiara",
+       "searchprofile-articles-tooltip": "Hwehwe wo dola baako mu",
+       "searchall": "Biribiara",
+       "diff": "NSONSOE",
+       "hide": "Fa sie",
+       "watch": "Hwe",
+       "undeleteviewlink": "Hwe",
+       "namespace": "Bea wodin wo",
+       "tooltip-pt-mytalk": "Wokasa bea",
+       "tooltip-pt-preferences": "Nea wope",
+       "tooltip-pt-watchlist": "Bebree kabea",
+       "tooltip-pt-mycontris": "Wonom a woboayen",
+       "tooltip-pt-logout": "Pue",
+       "tooltip-ca-watch": "Fa wei ka nnema wo hwe so",
+       "tooltip-summary": "Bo no tofa"
+}
index 598df5f..6d2d010 100644 (file)
        "qbmyoptions": "Мээң арыннарым",
        "faq": "Бо-ла салыр айтырыглар (БлСА)",
        "faqpage": "Project:БлСА",
-       "vector-action-addsection": "Кол сөстү немелээри",
-       "vector-action-delete": "Ырадыры",
-       "vector-action-move": "Шимчээри",
-       "vector-action-protect": "Камгалаары",
-       "vector-action-undelete": "Эгидер",
-       "vector-action-unprotect": "Камгалалды өскертири",
-       "vector-view-create": "Чаяары",
-       "vector-view-edit": "Эдер",
-       "vector-view-history": "Төөгүнү көөрү",
-       "vector-view-view": "Номчуур",
-       "vector-view-viewsource": "Дөзү бижиин көөрү",
        "actions": "Кылыглар",
        "namespaces": "Аттар делгемнери",
        "variants": "Бир янзы",
        "tooltip-summary": "Кысказы-биле бижиңер",
        "anonymous": "{{grammar:genitive|{{SITENAME}}}} адыжок {{PLURAL:$1|киржикчизи}}",
        "pageinfo-toolboxlink": "Арын дугайында медээлел",
-       "skinname-monobook": "МоноБук",
-       "skinname-vector": "Вектор",
        "filedelete-missing": "«$1» деп файл чок, ынчангаш ол ап калдынмас.",
        "previousdiff": "← Артык эрги үндүрери",
        "nextdiff": "Артык чаа үндүрери →",
diff --git a/languages/i18n/tzm.json b/languages/i18n/tzm.json
new file mode 100644 (file)
index 0000000..bc5be58
--- /dev/null
@@ -0,0 +1,611 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Moha",
+                       "Tifinaghes"
+               ]
+       },
+       "underline-always": "ⴷⴰⵢⵎⴰⵏ",
+       "underline-never": "ⵙⵙⵏⵜⵉ",
+       "editfont-sansserif": "ⵡⴰⵔ ⴰⵙⴽⴽⵉⵍ serif",
+       "editfont-serif": "ⴰⵙⴽⴽⵉⵍ ⵏ Serif",
+       "sunday": "ⴰⵙⴰⵎⴰⵙ",
+       "monday": "ⴰⵢⵏⴰⵙ",
+       "tuesday": "ⴰⵙⵉⵏⴰⵙ",
+       "wednesday": "ⴰⴽⵔⴰⵙ",
+       "thursday": "ⴰⴽⵡⴰⵙ",
+       "friday": "ⴰⵙⵉⵎⵡⴰⵙ",
+       "saturday": "ⴰⵙⵉⴹⵢⴰⵙ",
+       "sun": "ⴰⵙⴰⵎⴰⵙ",
+       "mon": "ⴰⵙⵉⵏⴰⵙ",
+       "tue": "ⴰⴽⵔⴰⵙ",
+       "wed": "ⴰⴽⵡⴰⵙ",
+       "thu": "ⴰⴽⵡⴰⵙ",
+       "fri": "ⴰⵙⵉⵎⵡⴰⵙ",
+       "sat": "ⴰⵙⵉⴹⵢⴰⵙ",
+       "january": "ⵢⵏⵏⴰⵢⵔ",
+       "february": "ⴱⵕⴰⵢⵔ",
+       "march": "ⵎⴰⵔⵙ",
+       "april": "ⵉⴱⵔⵉⵍ",
+       "may_long": "ⵎⴰⵢⵢⵓ",
+       "june": "ⵢⵓⵏⵢⵓ",
+       "july": "ⵢⵓⵍⵢⵓ",
+       "august": "ⵖⵓⵛⵜ",
+       "september": "ⵛⵓⵜⴰⵏⴱⵉⵔ",
+       "october": "ⴽⵟⵓⴱⵔ",
+       "november": "ⵏⵓⵡⴰⵏⴱⵉⵔ",
+       "december": "ⴷⵓⵊⴰⵏⴱⵉⵔ",
+       "january-gen": "ⵢⵏⵏⴰⵢⵔ",
+       "february-gen": "ⴱⵕⴰⵢⵔ",
+       "march-gen": "ⵎⴰⵔⵙ",
+       "april-gen": "ⵉⴱⵔⵉⵍ",
+       "may-gen": "ⵎⴰⵢⵢⵓ",
+       "june-gen": "ⵢⵓⵏⵢⵓ",
+       "july-gen": "ⵢⵓⵍⵢⵓ",
+       "august-gen": "ⵖⵓⵛⵜ",
+       "september-gen": "ⵛⵓⵜⴰⵏⴱⵉⵔ",
+       "october-gen": "ⴽⵟⵓⴱⵔ",
+       "november-gen": "ⵏⵓⵡⴰⵏⴱⵉⵔ",
+       "december-gen": "ⴷⵓⵊⴰⵏⴱⵉⵔ",
+       "jan": "ⵢⵏⵏⴰⵢⵔ",
+       "feb": "ⴱⵕⴰⵢⵔ",
+       "mar": "ⵎⴰⵔⵙ",
+       "apr": "ⵉⴱⵔⵉⵍ",
+       "may": "ⵎⴰⵢⵢⵓ",
+       "jun": "ⵢⵓⵏⵢⵓ",
+       "jul": "ⵢⵓⵍⵢⵓⵣ",
+       "aug": "ⵖⵓⵛⵜ",
+       "sep": "ⵛⵓⵜⴰⵏⴱⵉⵔ",
+       "oct": "ⴽⵟⵓⴱⵔ",
+       "nov": "ⵏⵓⵡⴰⵏⴱⵉⵔ",
+       "dec": "ⴷⵓⵊⴰⵏⴱⵉⵔ",
+       "february-date": "ⴱⵕⴰⵢⵔ $1",
+       "march-date": "ⵎⴰⵔⵙ $1",
+       "pagecategories": "{{PLURAL:$1|ⵜⴰⴳⴳⴰⵢⵜ|ⵜⴰⴳⴳⴰⵢⵉⵏ}}",
+       "category_header": "ⵜⵉⵙⵏⵉⵡⵉⵏ ⵏ ⵜⴰⴳⴳⴰⵢⵜ \"$1\"",
+       "categoryviewer-pagedlinks": "($1) ($2)",
+       "about": "ⵅⴼ",
+       "newwindow": "(ⴰⴷ ⵜⵏⵏⵓⵔⵣⵎⴷ ⴷⵉ ⵓⵙⴽⵙⵍ ⴰⵎⴰⵢⵏⵓ)",
+       "cancel": "ⵓⵖⴰⵍ",
+       "moredotdotdot": "ⵓⴳⴰⵔ...",
+       "mypage": "ⵜⴰⵙⵏⴰ",
+       "mytalk": "ⴰⵎⵢⴰⵏⵏⴰⵏ",
+       "navigation": "ⴰⵎⵢⴰⵡⴰⴹ",
+       "and": "&#32;ⴷ",
+       "qbfind": "ⴰⴼ",
+       "qbbrowse": "ⴰⵎⵢⴰⵡⴰⴹ",
+       "qbedit": "ⴱⴷⴷⴻⵍ",
+       "qbpageoptions": "ⵜⴰⵙⵏⴰ ⴰⴷ",
+       "qbmyoptions": "ⵜⴰⵙⵏⵉⵡⵉⵏ ⵉⵏⵓ",
+       "faq": "ⵉⵙⵇⵙⵉⵜⵏ",
+       "faqpage": "Project:ⵉⵙⵇⵙⵉⵜⵏ",
+       "actions": "ⵉⵎⵢⴰⴳⵏ",
+       "variants": "ⵉⵏⴱⴷⴷⴻⵍⵏ",
+       "errorpagetitle": "Error",
+       "returnto": "ⴰⵖⵓⵍ ⵖⵔ $1.",
+       "tagline": "ⵙⴳ {{SITENAME}}",
+       "help": "ⵜⵉⵡⵉⵙⵉ",
+       "search": "ⴰⵔⵣⵣⵓ",
+       "searchbutton": "ⴰⵔⵣⵣⵓ",
+       "go": "ⴷⴷⵓ",
+       "searcharticle": "ⴷⴷⵓ",
+       "history": "ⴰⵎⵣⵔⵓⵢ ⵏ ⵜⴰⵙⵏⴰ",
+       "history_short": "ⴰⵎⵣⵔⵓⵢ",
+       "permalink": "ⴰⵣⴷⴰⵢ ⵏ ⴱⴻⴷⴷⴰ",
+       "print": "ⵙⵙⵉⴳⵣ",
+       "view": "ⵥⵕ",
+       "edit": "ⴱⴷⴷⴻⵍ",
+       "create": "ⴰⵔⴰ",
+       "editthispage": "ⴱⴷⴷⵍ ⵜⴰⵙⵏⴰ ⴰⴷ",
+       "create-this-page": "ⴰⵔⴰ ⵜⴰⵙⵏⴰ ⴰⴳⵉ",
+       "delete": "ⵙⴼⴹ",
+       "protect": "ⵜⴰⵙⵜⴰⵏⵜ",
+       "protect_change": "ⴱⴷⴷⴻⵍ",
+       "unprotect": "ⴱⴷⴷⴻⵍ ⵜⴰⵙⵜⴰⵏⵜ",
+       "newpage": "ⵜⴰⵙⵏⴰ ⵜⴰⵎⴰⵢⵏⵓⵜ",
+       "talkpagelinktext": "ⴰⵎⵢⴰⵏⵏⴰⵏ",
+       "specialpage": "ⵜⴰⵙⵏⴰ ⵉⵥⵍⵉⵏ",
+       "personaltools": "ⵉⵎⴰⵙⵙⵏ ⵉⵏⵡ",
+       "postcomment": "ⵜⴰⴷⴰⵍⴰ ⵜⴰⵎⴰⵢⵏⵓⵜ",
+       "talk": "ⴰⵎⵢⴰⵏⵏⴰⵏ",
+       "views": "ⵥⵕ",
+       "toolbox": "ⵉⵎⴰⵙⵙⵏ",
+       "userpage": "ⵥⵕ ⵜⴰⵙⵏⴰ ⵓⵎⴷⴰⵏ",
+       "projectpage": "ⵥⵕ ⵜⴰⵙⵏⴰ ⵓⵙⵏⴼⴰⵔ",
+       "imagepage": "ⵥⵕ ⵜⴰⵙⵏⴰ ⵓⵙⴷⴰⵡ",
+       "mediawikipage": "ⵥⵕ ⵜⴰⴱⵔⴰⵜ ⵓⵙⴷⴰⵡ",
+       "templatepage": "ⵥⵕ ⵜⴰⵍⵖⴰ ⵏ ⵜⴰⵙⵏⴰ",
+       "viewhelppage": "ⵥⵕ ⵜⴰⵙⵏⴰ ⵏ ⵜⵡⵉⵙⵉ",
+       "categorypage": "ⵥⵕ ⵜⴰⵙⵏⴰ ⵏ ⵜⴰⴳⴳⴰⵢⵜ",
+       "viewtalkpage": "ⵥⵕ ⴰⵎⵢⴰⵏⵏⴰⵏ",
+       "otherlanguages": "ⵙ ⵜⵓⵜⵍⴰⵢⵉⵏ ⵏⵉⴹⵏ",
+       "protectedpage": "ⵜⴰⵙⵏⴰ ⵜⴰⵎⵙⵜⴰⵏⵜ",
+       "jumpto": "ⴷⴷⵓ ⵖⵔ:",
+       "jumptonavigation": "ⴰⵎⵢⴰⵡⴰⴹ",
+       "jumptosearch": "ⴰⵔⵣⵣⵓ",
+       "pool-errorunknown": "ⴰⵣⴳⴰⵍ ⵓⵔ ⵢⴻⵜⵜⵡⴰⵙⴰⵏ",
+       "aboutsite": "ⵅⴼ {{SITENAME}}",
+       "aboutpage": "Project:ⵅⴼ",
+       "currentevents": "ⵉⵏⵖⵎⵉⵙⵏ ⵉⵎⴰⵢⵏⵓⵜⵏ",
+       "disclaimers": "ⵡⴰⵔ ⵜⴰⵎⴰⵙⴰⵢⵜ",
+       "edithelp": "ⵜⵉⵡⵉⵙⵉ ⵏ ⵓⴱⴷⴷⴻⵍ",
+       "mainpage": "ⴰⵙⵏⵓⴱⴳ",
+       "mainpage-description": "ⴰⵙⵏⵓⴱⴳ",
+       "policy-url": "Project:ⵜⴰⵙⵔⵜⵉⵜ",
+       "portal": "ⴰⴳⴳⵓⵔ ⵏ ⵡⴰⵎⵓⵏ",
+       "portal-url": "Project:ⵜⴰⴳⴳⵓⵔⵜ ⵏ ⵡⴰⵎⵓⵏ",
+       "privacy": "ⵜⴰⵙⵔⵜⵉⵜ ⵜⵓⵙⵍⵉⴳⵜ",
+       "privacypage": "Project:ⵜⴰⵙⵔⵜⵉⵜ ⵜⵓⵙⵍⵉⴳⵜ",
+       "badaccess": "ⴰⵣⴳⴰⵍ ⴳ ⵓⵙⵙⵓⵔⴼ",
+       "ok": "ⵡⴰⵅⵅⴰ",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
+       "youhavenewmessages": "ⵜⵍⵍⴰ ⵖⵓⵔⴽ $1 ($2).",
+       "editsection": "ⴱⴷⴷⴻⵍ",
+       "editold": "ⴱⴷⴷⴻⵍ",
+       "viewsourceold": "ⵥⵕ ⴰⵖⴱⴰⵍⵓ",
+       "editlink": "ⴱⴷⴷⴻⵍ",
+       "viewsourcelink": "ⵥⵕ ⴰⵖⴱⴰⵍⵓ",
+       "editsectionhint": "ⴱⴷⴷⴻⵍ ⵜⴰⴷⴰⵍⴰ: $1",
+       "toc": "ⴰⴳⴱⵓⵔ",
+       "showtoc": "ⵥⵕ",
+       "hidetoc": "ⵃⴱⵓ",
+       "viewdeleted": "ⵥⵕ $1?",
+       "feedlinks": "Feed:",
+       "site-rss-feed": "\"$1\" RSS feed",
+       "site-atom-feed": "$1 ⵓⵜⵓⵎ ⵏ feed",
+       "page-rss-feed": "\"$1\" RSS feed",
+       "feed-atom": "ⴰⵜⵓⵎ",
+       "feed-rss": "RSS",
+       "red-link-title": "$1 (ⵜⴰⵙⵏⴰ ⵓⵔ ⵜⵍⵍⴰ)",
+       "nstab-main": "ⵜⴰⵙⵏⴰ",
+       "nstab-user": "ⴰⵎⴷⴰⵏ ⵏ ⵜⴰⵙⵏⴰ",
+       "nstab-media": "ⵜⴰⵙⵏⴰ ⵏ ⵎⵉⴷⵢⴰ",
+       "nstab-special": "ⵜⴰⵙⵏⴰ ⵉⵥⵍⵉⵏ",
+       "nstab-project": "ⵜⴰⵙⵏⴰ ⵓⵙⵏⴼⴰⵔ",
+       "nstab-image": "ⴰⵙⴷⴰⵡ",
+       "nstab-mediawiki": "ⵜⴰⴱⵔⴰⵜ",
+       "nstab-template": "ⵜⴰⵍⵖⴰ",
+       "nstab-help": "ⵜⴰⵙⵏⴰ ⵏ ⵜⵡⵉⵙⵉ",
+       "nstab-category": "ⵜⴰⴳⴳⴰⵢⵜ",
+       "error": "ⴰⵣⴳⵍ",
+       "internalerror": "ⴰⵣⴳⵍ ⴰⴳⵯⵏⵙⴰⵏ",
+       "internalerror_info": "ⴰⵣⴳⵍ ⴰⴳⵯⵏⵙⴰⵏ :$1",
+       "filedeleteerror": "ⵓⵔ ⵉⵎⴽⵏ ⵓⴽⵓⵙ ⵓⵙⴷⴰⵡ \"$1\".",
+       "badtitle": "ⴰⵣⵡⵉⵍ ⵓⵔ ⵢⴻⵥⵉⵍ",
+       "viewsource": "ⵥⵕ ⴰⵖⴱⴰⵍⵓ",
+       "viewsource-title": "ⵥⵕ ⴰⵖⴱⴰⵍⵓ ⵏ $1",
+       "exception-nologin": "ⵓⵔ ⵜⴽⵛⵎⴷ",
+       "userlogin-yourname": "ⴰⵙⵙⴰⵖ",
+       "yourpassword": "ⵜⴰⵡⴰⵍⵜ ⵓⵙⵉⴽⵍ:",
+       "yourpasswordagain": "ⴰⵍⵙ ⵜⴰⵡⴰⵍⵜ ⵓⵙⵉⴽⵍ:",
+       "login": "ⴽⵛⵎ",
+       "nav-login-createaccount": "ⴽⵛⵎ/ⴰⵙⵓⵙⵔ",
+       "userloginnocreate": "ⴽⵛⵎ",
+       "logout": "ⵓⴼⵓⵖ",
+       "userlogout": "ⵓⴼⵓⵖ",
+       "nologinlink": "ⴰⵔⴰ ⴰⵙⴷⴰⵡ ⴰⵎⴰⵢⵏⵓ",
+       "createaccount": "ⵙⴽⵔ ⴰⵙⴷⴰⵡ ⴰⵎⴰⵢⵏⵓ",
+       "gotaccountlink": "ⴽⵛⵎ",
+       "createaccountmail": "ⵙ ⵓⵎⵢⴰⵣⴰⵏ ⴰⵍⵉⴽⵜⵔⵓⵏⵉ",
+       "createaccountreason": "ⴰⵙⵔⴰⴳ",
+       "createacct-reason": "ⴰⵙⵔⴰⴳ",
+       "loginerror": "ⴰⵣⴳⵍ ⴳ ⵓⴽⵛⵛⵓⵎ",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
+       "mailmypassword": "ⵜⴰⵡⴰⵍⵜ ⵓⵙⵉⴽⵍ ⵏ E-mail",
+       "loginlanguagelabel": "ⵜⵓⵜⵍⴰⵢⵜ: $1",
+       "changepassword": "ⴱⴷⴷⴻⵍ ⵜⴰⵡⴰⵍⵜ ⵓⵙⵉⴽⵍ",
+       "resetpass_text": "<!-- ⵔⵏⵓ ⴰⴹⵔⵉⵙ ⵖⵉ -->",
+       "oldpassword": "ⵜⴰⵡⴰⵍⵜ ⵓⵙⵉⴽⵍ ⵜⴰⵣⴰⵢⴽⵓⵜ",
+       "newpassword": "ⵜⴰⵡⴰⵍⵜ ⵓⵙⵉⴽⵍ ⵜⴰⵎⴰⵢⵏⵓⵜ:",
+       "retypenew": "ⴰⵍⵙ ⵜⴰⵡⴰⵍⵜ ⵓⵙⵉⴽⵍ ⵜⴰⵎⴰⵢⵏⵓⵜ:",
+       "resetpass-submit-loggedin": "ⴱⴷⴷⴻⵍ ⵜⴰⵡⴰⵍⵜ ⵓⵙⵉⴽⵍ",
+       "passwordreset": "ⴰⵍⵙ ⵜⴰⵡⴰⵍⵜ ⵓⵙⵉⴽⵍ",
+       "passwordreset-username": "ⴰⵙⵙⴰⵖ ⵓⵎⴷⴰⵏ:",
+       "passwordreset-domain": "ⴰⵙⵡⵉⵔ:",
+       "changeemail-none": "(ⵡⴰⵔ)",
+       "changeemail-submit": "ⴱⴷⴷⴻⵍ ⴰⵎⵢⴰⵣⴰⵍ ⴰⵍⵉⴽⵜⵔⵓⵏⵉ",
+       "resettokens-tokens": "ⵜⵉⵙⵓⵔⴰ:",
+       "resettokens-done": "ⴱⴷⴷⴻⵍ ⵜⵉⵙⵓⵔⴰ",
+       "bold_sample": "Bold text",
+       "bold_tip": "Bold text",
+       "italic_sample": "Italic text",
+       "italic_tip": "Italic text",
+       "link_sample": "ⴰⵣⵡⵉⵍ ⵏ ⵓⵣⴷⴰⵢ",
+       "link_tip": "ⴰⵣⴷⴰⵢ ⵏ ⵓⴳⵏⵙⵓ",
+       "extlink_sample": "http://www.example.com ⴰⵣⵡⵉⵍ ⵓⵣⴷⴰⵢ",
+       "image_sample": "Example.jpg",
+       "media_sample": "Example.ogg",
+       "media_tip": "ⴰⵣⴷⴰⵢ ⵓⵙⴷⴰⵡ",
+       "savearticle": "ⵣⵎⵎⴻⵎ ⵜⴰⵙⵏⴰ",
+       "preview": "ⴰⵥⵕⵉ ⴰⵎⵣⵡⴰⵔⵓ",
+       "showpreview": "ⵥⵕ",
+       "showdiff": "ⵥⵕ ⵉⴱⴷⴷⴻⵍⵏ",
+       "loginreqlink": "ⴽⵛⵎ",
+       "newarticle": "(ⴰⵎⴰⵢⵏⵓ)",
+       "note": "'''ⵜⴰⵏⵏⴰⵢⵜ:'''",
+       "editing": "ⴰⴱⴷⴷⴻⵍ $1",
+       "yourtext": "ⴰⴹⵕⵉⵙ ⵏⵏⴽ",
+       "template-protected": "(protected)",
+       "edittools-upload": "-",
+       "nocreate-loggedin": "ⵓⵔ ⵖⵓⵔⴽ ⵜⵓⵔⴰⴳⵜ ⵏ ⴰⵙⵏⵓⵍⴼⵓ ⵏ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵜⵉⵎⴰⵢⵏⵓⵜⵉⵏ.",
+       "content-model-wikitext": "ⵡⵉⴽⵉⴰⴹⵔⵉⵙ",
+       "content-model-javascript": "JavaScript",
+       "content-model-css": "CSS",
+       "nextrevision": "ⵜⴰⵙⵉⵡⵍⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ",
+       "cur": "ⵡⵉⵏ ⵖⵉⵍⴰ",
+       "last": "ⴰⵎⵣⵡⴰⵔⵓ",
+       "page_first": "ⵜⴰⵎⵣⵡⴰⵔⵓⵜ",
+       "page_last": "ⵜⴰⵏⴳⴳⴰⵔⵓⵜ",
+       "history-show-deleted": "ⵙⴼⴹ ⵡⴰⵀⴰ",
+       "histfirst": "ⴰⵎⵣⵡⴰⵔⵓ",
+       "histlast": "ⴰⵎⴰⵢⵏⵓ",
+       "historyempty": "(ⵓⵔ ⴷⵉⵙ ⴰⵎⵢⴰ)",
+       "history-feed-item-nocomment": "$1 ⴷⵉ $2",
+       "rev-showdeleted": "ⵥⵕ",
+       "revdelete-show-file-submit": "ⵢⴰⵀ",
+       "revdelete-radio-same": "(ⵡⴰⵔ ⴰⴱⴷⴷⴻⵍ)",
+       "revdelete-radio-set": "ⵢⴰⵀ",
+       "revdelete-radio-unset": "ⵓⵀ ⵓ",
+       "revdelete-log": "ⴰⵙⵔⴰⴳ:",
+       "pagehist": "ⴰⵎⵣⵔⵓⵢ ⵏ ⵜⴰⵙⵏⴰ",
+       "revdelete-reasonotherlist": "ⴰⵙⵔⴰⴳ ⵏⵉⴹⵏ",
+       "mergehistory-from": "ⵜⴰⵙⵏⴰ ⴰⵖⴱⴰⵍⵓ:",
+       "mergehistory-into": "ⴰⵡⵜⵜⴰ ⵏ ⵜⴰⵙⵏⴰ:",
+       "mergehistory-reason": "ⴰⵙⵔⴰⴳ:",
+       "lineno": "ⴰⴹⵕⵕⴰⵙ $1:",
+       "editundo": "ⵓⵖⴰⵍ",
+       "searchresults": "ⵜⴰⵢⴰⴼⵓⵜ ⵏ ⵓⵔⵣⵣⵓ",
+       "searchresults-title": "ⵜⴰⵢⴰⴼⵓⵜ ⵓⵔⵣⵣⵓ ⵅⴼ \"$1\"",
+       "prevn": "ⴰⵎⵣⵡⴰⵔⵓ {{PLURAL:$1|$1}}",
+       "nextn": "ⴰⵎⴹⴼⵉⵔ {{PLURAL:$1|$1}}",
+       "prevn-title": "ⴰⵎⵣⵡⴰⵔⵓ $1 {{PLURAL:$1|ⵜⴰⵢⴰⴼⵓⵜ|ⵜⵉⵢⴰⴼⵓⵜⵉⵏ}}",
+       "nextn-title": "ⴰⵎⴹⴼⵉⵔ $1 {{PLURAL:$1|ⵜⴰⵢⴰⴼⵓⵜ|ⵜⵉⵢⴰⴼⵓⵜⵉⵏ}}",
+       "shown-title": "ⵥⵕ $1 {{PLURAL:$1|ⵜⴰⵢⴰⴼⵓⵜ|ⵜⵉⵢⴰⴼⵓⵜⵉⵏ}} ⵉ ⴽⵓ ⵜⴰⵙⵏⴰ",
+       "viewprevnext": "ⵥⵕ ($1 {{int:pipe-separator}} $2) ($3).",
+       "searchprofile-images": "ⵎⵓⵍⵜⵉⵎⵉⴷⵢⴰ",
+       "searchprofile-everything": "ⵎⴰⵕⵕⴰ (ⴰⴽⴽ)",
+       "searchprofile-articles-tooltip": "ⵔⵣⵣⵓ ⴷⵉ $1",
+       "searchprofile-images-tooltip": "ⵔⵣⵣⵓ ⵅⴼ ⵜⵡⵍⴰⴼⵉⵏ",
+       "search-result-size": "$1 ({{PLURAL:$2|1 ⵜⴰⴳⵓⵔⵉ|$2 ⵜⵉⴳⵓⵔⵉⵡⵉⵏ}})",
+       "search-section": "(ⵜⴰⴷⴰⵍⴰ $1)",
+       "search-interwiki-default": "$1 ⵜⴰⵢⴰⴼⵓⵜ:",
+       "search-interwiki-more": "(ⵓⴳⴰⵔ)",
+       "search-relatedarticle": "ⵜⴰⵎⵣⴷⴰⵢⵜ",
+       "searchrelated": "ⵜⴰⵎⵣⴷⴰⵢⵜ",
+       "searchall": "ⵎⴰⵕⵕⴰ",
+       "showingresultsheader": "{{PLURAL:$5|ⵜⴰⵢⴰⴼⵓⵜ '''$1'''|ⵜⵉⵢⴰⴼⵓⵜⵉⵏ '''$1–$2'''}} ⵙⴳ '''$3''' ⵉ '''$4'''",
+       "powersearch-toggleall": "ⵎⴰⵕⵕⴰ",
+       "powersearch-togglenone": "ⴰⵎⵢⴰ (ⵓⵍⴰⵛ)",
+       "search-external": "ⴰⵔⵣⵣⵓ ⴰⴱⵕⵕⴰⵏⵉ",
+       "mypreferences": "Preferences",
+       "prefs-skin": "ⵓⴷⵎ",
+       "prefs-personal": "ⴰⵙⴷⴰⵡ ⵏ ⵓⵎⴰⴷⴰⵏ",
+       "prefs-rc": "ⵉⴱⴷⴷⴻⵍⵏ ⵉⵏⴳⴳⵓⵔⴰ",
+       "prefs-watchlist": "ⵓⵎⵓⵖ ⵏ ⵓⵙⵎⴰⵇⵇⵍ",
+       "prefs-resetpass": "ⴱⴷⴷⴻⵍ ⵜⴰⵡⴰⵍⵜ ⵓⵙⵉⴽⵍ",
+       "prefs-changeemail": "ⴱⴷⴷⴻⵍ ⴰⵎⵢⴰⵣⴰⵏ ⴰⵍⵉⴽⵜⵔⵓⵏⵉ",
+       "saveprefs": "ⵣⵎⵎⴻⵎ",
+       "prefs-editing": "ⴰⵙⴷⵔⴼ",
+       "columns": "ⵉⵏⴱⴷⴰⴷⵏ:",
+       "searchresultshead": "ⴰⵔⵣⵣⵓ",
+       "timezoneregion-africa": "ⵉⴼⵔⵉⵇⵢⴰ",
+       "timezoneregion-america": "ⴰⵎⵔⵉⴽⴰ",
+       "timezoneregion-antarctica": "ⴰⵏⵜⴰⵔⴽⵜⵉⴽⴰ",
+       "timezoneregion-asia": "ⴰⵙⵢⴰ",
+       "timezoneregion-atlantic": "ⴰⴳⴰⵔⴰⵡ ⴰⵟⵍⴰⵏⵟⵉ",
+       "timezoneregion-australia": "ⵓⵙⵜⵔⴰⵍⵢⴰ",
+       "timezoneregion-europe": "ⵜⵓⵔⵓⴼⵜ (Europe)",
+       "timezoneregion-indian": "ⴰⴳⴰⵔⴰⵡ ⴰⵀⵉⵏⴷⵉ",
+       "timezoneregion-pacific": "ⴰⴳⴰⵔⴰⵡ ⴰⵎⵍⵡⵉ",
+       "prefs-searchoptions": "ⴰⵔⵣⵣⵓ",
+       "prefs-files": "ⵉⵙⴷⴰⵡⵏ",
+       "prefs-custom-css": "Custom CSS",
+       "youremail": "ⴰⵎⵢⴰⵣⴰⵏ ⴰⵍⵉⴽⵜⵔⵓⵏⵉ",
+       "yourrealname": "ⴰⵙⵙⴰⵖ ⵏ ⵜⵉⴷⵜ:",
+       "yourlanguage": "ⵜⵓⵜⵍⴰⵢⵜ:",
+       "yourgender": "ⵓⵣⵓⴼ:",
+       "gender-male": "ⴰⵎⴰⵢ",
+       "gender-female": "ⵜⴰⵡⵜⵎⵜ",
+       "email": "ⴰⵎⵢⴰⵣⴰⵏ ⴰⵍⵉⴽⵜⵔⵓⵏⵉ",
+       "prefs-info": "ⵉⵏⵖⵎⵉⵙⵏ ⵉⴷⵙⵍⴰⵏⵏ",
+       "prefs-i18n": "ⵜⴰⵙⵓⵖⵍⵜ",
+       "prefs-signature": "Signature",
+       "prefs-dateformat": "ⴰⵏⴰⵡ ⵏ ⵡⴰⴽⵓⴷ",
+       "prefs-editor": "ⴰⵎⵙⴷⵔⴼ",
+       "prefs-preview": "ⴰⵥⵕⵉ ⴰⵎⵣⵡⴰⵔⵓ",
+       "prefs-tokenwatchlist": "ⵜⴰⵙⴰⵔⵓⵜ",
+       "userrights-groupsmember": "ⴰⴳⵎⴰⵎ ⴷⵉ:",
+       "userrights-irreversible-marker": "$1*",
+       "group": "ⵜⴰⵔⴰⴱⴱⵓⵜ:",
+       "group-sysop": "ⵉⵏⵎⵀⴰⵍⵏ ⵏ ⵓⴳⵔⴰⵡ",
+       "group-all": "(ⵎⴰⵕⵕⴰ)",
+       "group-user-member": "{{GENDER:$1|ⴰⴳⵎⴰⵎ}}",
+       "group-bot-member": "{{GENDER:$1|ⴰⵕⵓⴱⵓⵜ}}",
+       "group-sysop-member": "{{GENDER:$1|ⴰⵏⵎⵀ ⴰⵍ}}",
+       "grouppage-user": "{{ns:project}}:ⵉⴳⵎⴰⵎⵏ",
+       "right-delete": "ⴽⴽⵉⵙ ⵜⵉⵙⵏⴰⵡⵉⵏ",
+       "action-read": "ⵖⵔ ⵜⴰⵙⵏⴰ ⴰⴷ",
+       "action-edit": "ⴱⴷⴷⵍ ⵜⴰⵙⵏⴰ ⴰⴷ",
+       "action-delete": "ⴽⴽⵉⵙ ⵜⴰⵙⵏⴰ ⴰⴷ",
+       "action-sendemail": "ⴰⵣⵏ ⵜⵉⴱⵔⴰⵜⵉⵏ ⵏ e-mail",
+       "nchanges": "$1 {{PLURAL:$1|ⴰⴱⴷⴷⴻⵍ|ⵉⴱⴷⴷⴻⵍⵏ}}",
+       "recentchanges": "ⵉⴱⴷⴷⴻⵍⵏ ⵉⵏⴳⴳⵓⵔⴰ",
+       "rcshowhidemine": "$1 ⵉⴱⴷⴷⴻⵍⵏ ⵉⵏⵓ",
+       "diff": "ⵍⴼⵔⵇ",
+       "hist": "ⴰⵎⵣⵔⵓⵢ",
+       "hide": "ⵃⴱⵓ",
+       "show": "ⵥⵕ",
+       "minoreditletter": "ⵎ",
+       "newpageletter": "ⵏ",
+       "boteditletter": "ⴱ",
+       "unpatrolledletter": "!",
+       "rc_categories_any": "ⵎⴰⵏ",
+       "recentchangeslinked-toolbox": "ⵉⴱⴷⴷⴻⵍⵏ ⵖⵓⵔ ⵜⴰⵣⴷⴰⵢⵜ",
+       "recentchangeslinked-page": "ⴰⵙⵙⴰⵖ ⵏ ⵜⴰⵙⵏⴰ:",
+       "upload": "ⵣⴷⴻⵎ ⴰⵙⴷⴰⵡ",
+       "filename": "ⴰⵙⵙⴰⵖ ⵓⵙⴷⴰⵡ",
+       "filereuploadsummary": "ⵉⴱⴷⴷⴻⵍⵏ ⵏ ⵓⵙⴷⴰⵡ:",
+       "filesource": "ⴰⵖⴱⴰⵍⵓ:",
+       "savefile": "ⵣⵎⵎⴻⵎ ⴰⵙⴷⴰⵡ",
+       "upload-source": "ⴰⵖⴱⴰⵍⵓ ⵓⵙⴷⴰⵡ",
+       "sourcefilename": "ⴰⵖⴱⴰⵍⵓ ⵡⴰⵙⵙⴰⵖ ⵓⵙⴷⴰⵡ:",
+       "sourceurl": "ⴰⵖⴱⴰⵍⵓ ⵏ URL:",
+       "img-auth-accessdenied": "ⴰⵎⵢⴰⵡⴰⴹ ⵢⵓⴳⵉ",
+       "img-auth-nofile": "ⴰⵙⴷⴰⵡ \"$1\" ⴰⴷ ⵓⵔ ⵢⴻⵍⵍⴰ.",
+       "license-header": "ⵜⵓⵔⴰⴳⵜ",
+       "listfiles_search_for": "ⵔⵣⵣⵓ ⵅⴼ ⵡⴰⵙⵙⴰⵖ ⵏ ⵎⵉⴷⵢⴰ:",
+       "imgfile": "ⴰⵙⴷⴰⵡ",
+       "listfiles": "ⵓⵎⵓⵖ ⵏ ⵉⵙⴷⴰⵡⵏ",
+       "listfiles_thumb": "ⴰⵙⵙⵎⵥⵉⵢ",
+       "listfiles_date": "ⴰⴽⵓⴷ",
+       "listfiles_name": "ⴰⵙⵙⴰⵖ",
+       "listfiles_size": "Size",
+       "listfiles-latestversion-yes": "ⵢⴰⵀ",
+       "file-anchor-link": "ⴰⵙⴷⴰⵡ",
+       "filehist": "ⴰⵎⵣⵔⵓⵢ ⵏ ⵓⵙⴷⴰⵡ",
+       "filehist-deleteall": "ⴽⴽⵉⵙ ⵎⴰⵕⵕⴰ",
+       "filehist-deleteone": "ⵓⴽⵓⵙ",
+       "filehist-revert": "ⵙⵙⵓⵖⴰⵍ ⵖⵔ ⴰⵎⵣⵡⴰⵔⵓ",
+       "filehist-current": "ⵖⵉⵍⴰ",
+       "filehist-datetime": "ⴰⴽⵓⴷ/ⴰⵣⵎⵣ",
+       "filehist-thumb": "Thumbnail",
+       "filehist-user": "ⴰⵎⴷⴰⵏ",
+       "filehist-filesize": "ⵜⵉⴷⴷⵉ ⵓⵙⴷⴰⵡ",
+       "filehist-comment": "ⵜⴰⵏⵏⴰⵢⵜ",
+       "filepage-nofile": "ⵓⵔ ⵉⵍⵍⴰ ⵓⵙⴷⴰⵡ ⵙ ⵡⴰⵙⵙⴰⵖ ⴰⴷ/ⴰⴳⵉ.",
+       "shared-repo-from": "ⵙⴳ $1",
+       "filerevert-comment": "ⴰⵙⵔⴰⴳ:",
+       "filedelete": "ⴽⴽⵉⵙ $1",
+       "filedelete-legend": "ⴽⴽⴻⵙ ⴰⵙⴷⴰⵡ",
+       "filedelete-comment": "ⴰⵙⵔⴰⴳ:",
+       "filedelete-submit": "ⵓⴽⵓⵙ",
+       "mimesearch": "ⴰⵔⵣⵣⵓ ⵏ MIME",
+       "mimetype": "ⴰⵏⴰⵡ ⵓⵙⴷⴰⵡ:",
+       "statistics-pages": "ⵜⵉⵙⵏⴰⵡⵉⵏ",
+       "statistics-views-total": "ⵎⴰⵕⵕⴰ ⵉⵎⵥⵕⴰⵏ",
+       "brokenredirects-edit": "ⴱⴷⴷⴻⵍ",
+       "brokenredirects-delete": "ⵓⴽⵓⵙ",
+       "withoutinterwiki-submit": "ⵥⵕ",
+       "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
+       "ncategories": "$1 {{PLURAL:$1|ⵜⴰⴳⴳⴰⵢⵜ|ⵜⴰⴳⴳⴰⵢⵉⵏ}}",
+       "nviews": "$1 {{PLURAL:$1|ⵥⵕ|ⵥⵕ ⴰⴽⴽ}}",
+       "longpages": "ⵜⴰⵙⵏⵉⵡⵉⵏ ⵎⵇⵇⴰⵔⵏⵜ",
+       "newpages": "ⵜⵉⵙⵏⵉⵡⵉⵏ ⵜⵉⵎⴰⵢⵏⵓⵜⵉⵏ",
+       "newpages-username": "ⴰⵙⵙⴰⵖ ⵓⵎⴷⴰⵏ:",
+       "move": "ⵙⵎⵓⵜⵜⵉ",
+       "notargettitle": "ⵡⴰⵔ ⴰⵡⵜⵜⴰⵙ",
+       "pager-newer-n": "{{PLURAL:$1|ⴰⵙⵎⴰⵢⵏⵓ|$1 ⵉⵙⵎⴰⵢⵏⵓⵜⵏ}}",
+       "booksources": "ⵉⵖⴱⵓⵍⴰ ⵏ ⵓⴷⵍⵉⵙ",
+       "booksources-search-legend": "ⵔⵣⵣⵓ ⵅⴼ ⵉⵖⴱⵓⵍⴰ ⵏ ⵉⴷⵍⵉⵙⵏ",
+       "booksources-isbn": "ISBN:",
+       "booksources-go": "ⴷⴷⵓ",
+       "allpages": "ⵎⴰⵕⵕⴰ ⵜⵉⵙⵏⴰⵡⵉⵏ",
+       "allarticles": "ⵎⴰⵕⵕⴰ ⵜⵉⵙⵏⴰⵡⵉⵏ",
+       "allpagessubmit": "ⴷⴷⵓ",
+       "allpagesprefix": "ⵥⵕ ⵜⵉⵙⵏⵉⵡⵉⵏ ⵏⵏⴰ ⵉⵣⵡⴰⵔⵏ ⵙ:",
+       "categories": "ⵜⴰⴳⴳⴰⵢⵉⵏ",
+       "linksearch-ok": "ⴰⵔⵣⵣⵓ",
+       "linksearch-line": "$1 ⵉⵣⴷⵉⴷ ⵙⴳ $2",
+       "listusers-submit": "ⵥⵕ",
+       "listusers-blocked": "(ⵉⴱⵍⵓⴽⵉ)",
+       "listgrouprights-group": "ⵜⴰⵔⴰⴱⴱⵓⵜ",
+       "listgrouprights-members": "(ⵓⵎⵓⵖ ⵏ ⵉⴳⵎⴰⵎⵏ)",
+       "emailuser": "ⴰⵣⵏ e-mail",
+       "emailfrom": "ⵙⴳ:",
+       "emailto": "ⴰⵔ:",
+       "emailmessage": "ⵜⴰⴱⵔⴰⵜ:",
+       "emailsend": "ⴰⵣⵏ",
+       "watchlist": "ⵓⵎⵓⵖ ⵏ ⵓⵙⵎⴰⵇⵇⵍ ⵉⵏⵓ",
+       "mywatchlist": "ⵓⵎⵓⵖ ⵏ ⵓⵙⵎⴰⵇⵇⵍ",
+       "watchlistfor2": "ⵉ $1 $2",
+       "watch": "ⵥⵕ",
+       "unwatch": "ⵙⴱⴻⴷⴷ ⵍⵄⵙⵙⴰ",
+       "wlshowlast": "ⵉⵥⵕⵉ ⵏⵉⴹⵏ $1 ⵜⴰⵔⴰⴳⵉⵏ $2 ⵓⵙⵙⴰⵏ $3",
+       "changed": "ⵜⴱⴷⴷⴻⵍⴷ",
+       "delete-legend": "ⵓⴽⵓⵙ",
+       "protectcomment": "ⴰⵙⵔⴰⴳ:",
+       "protect-othertime": "ⴰⵣⵎⵣ ⵏⵏⵉⴹⵏ:",
+       "protect-othertime-op": "ⴰⴽⵓⴷ ⵢⴰⴹⵏ",
+       "restriction-upload": "Upload",
+       "undeleteviewlink": "ⵥⵕ",
+       "undelete-search-submit": "ⴰⵔⵣⵣⵓ",
+       "undelete-show-file-submit": "ⵢⴰⵀ",
+       "blanknamespace": "(ⴰⵎⵣⵡⴰⵔⵓ)",
+       "mycontris": "ⴰⵎⴰⵡⴰⵙⵏ",
+       "contribsub2": "ⵉ $1 ($2)",
+       "uctop": "(ⴰⴼⵍⵍⴰ)",
+       "sp-contributions-newbies-sub": "ⵉ ⵉⵙⴷⴰⵡⵏ ⵉⵎⴰⵢⵏⵓⵜⵏ",
+       "sp-contributions-talk": "ⴰⵎⵢⴰⵏⵏⴰⵏ",
+       "sp-contributions-submit": "ⴰⵔⵣⵣⵓ",
+       "whatlinkshere": "ⵎⴰ ⵢⵣⴷⵉⵏ ⵖⵉ",
+       "whatlinkshere-title": "ⵜⴰⵙⵏⵉⵡⵉⵏ ⵉⴷ ⵉⵣⴷⵢⴻⵏ ⵖⵔ  \"$1\"",
+       "whatlinkshere-page": "ⵜⴰⵙⵏⴰ:",
+       "isimage": "ⴰⵣⴷⴰⵢ ⵓⵙⴷⴰⵡ",
+       "whatlinkshere-links": "← ⵉⵣⴷⴰⵢⵏ",
+       "whatlinkshere-hidelinks": "$1 ⵉⵣⴷⴰⵢⵏ",
+       "whatlinkshere-hideimages": "$1 ⵉⵣⴷⴰⵢⵏ ⵏ ⵉⵙⴷⴰⵡⵏ",
+       "whatlinkshere-filters": "ⴰⵎⵙⵜⴰⵢ",
+       "blocklist-timestamp": "ⴰⴽⵓⴷ",
+       "blocklist-target": "ⴰⵡⵜⵜⴰⵙ",
+       "blocklist-reason": "ⴰⵙⵔⴰⴳ",
+       "blocklink": "ⵙⴳⴷⴰⵍ",
+       "contribslink": "ⵉⵎⵢⴰⵡⴰⵙⵏ",
+       "blocklogpage": "ⵣⵎⵎⵉⵎ ⴰⴳⴷⴰⵍ",
+       "movereason": "ⴰⵙⵔⴰⴳ:",
+       "export-addcat": "ⵔⵏⵓ",
+       "export-addns": "ⵔⵏⵓ",
+       "export-download": "ⵣⵎⵎⴻⵎ ⴰⵎ ⴰⵙⴷⴰⵡ",
+       "allmessagesname": "ⴰⵙⵙⴰⵖ",
+       "allmessages-filter-legend": "ⴰⵎⵙⵜⴰⵢ",
+       "allmessages-filter-all": "ⵎⴰⵕⵕⴰ",
+       "allmessages-language": "ⵜⵓⵜⵍⴰⵢⵜ:",
+       "allmessages-filter-submit": "ⴷⴷⵓ",
+       "thumbnail-more": "ⵙⵙⴻⵎⵖⵔ",
+       "import-upload-filename": "ⴰⵙⵙⴰⵖ ⵓⵙⴷⴰⵡ:",
+       "import-comment": "ⵜⴰⵏⵏⴰⵢⵜ:",
+       "tooltip-pt-mytalk": "ⵜⴰⵙⵏⴰ ⵓⵎⵙⴰⵡⴰⵍ ⵏⵏⴽ",
+       "tooltip-pt-mycontris": "ⵓⵎⵓⵖ ⵏ ⵜⵡⵉⵙⵉ ⵏⵏⴽ",
+       "tooltip-pt-logout": "ⵓⴼⵓⵖ",
+       "tooltip-search": "ⵔⵣⵣⵓ ⵅⴼ {{SITENAME}}",
+       "tooltip-search-fulltext": "ⵔⵣⵣⵓ ⴷⵉ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵅⴼ ⵓⴹⵕⵉⵙ ⴰⴷ",
+       "tooltip-p-logo": "ⴰⵙⵏⵓⴱⴳ",
+       "tooltip-n-mainpage": "ⵥⵕ ⴰⵙⵏⵓⴱⴳ",
+       "tooltip-n-mainpage-description": "ⵥⵕ ⴰⵙⵏⵓⴱⴳ",
+       "tooltip-n-portal": "ⵅⴼ ⵓⵙⵏⴼⴰⵔ, ⵎⵉⵏ ⵜⵣⵎⵎⴰⵔⴻⴷ ⴰⴷ ⵜⴻⴳⴳⴷ,ⵎⴰⵏⵉ ⵖⴰ ⵜⴰⴼⴷ ⵜⵉⵖⴰⵡⵙⵉⵡⵉⵏ",
+       "tooltip-n-recentchanges": "ⵓⵎⵓⵖ ⵏ ⵉⴱⴷⴷⵉⵍⴻⵏ ⵉⵏⴳⵓⵔⴰ ⴷⵉ ⵡⵉⴽⵉ",
+       "tooltip-n-help": "ⴰⴷⵖⴰⵔ ⴳⵎⵉ ⵖ ⵜⴰⴼⴷ",
+       "tooltip-t-whatlinkshere": "ⵓⵎⵓⵖ ⵏ ⵎⴰⵕⵕⴰ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵏ ⵡⵉⴽⵉ ⵉⵣⴷⴷⵉⵏ ⴷⴰ",
+       "tooltip-t-emailuser": "ⴰⵣⵏ email ⵉ ⵓⴼⴳⴰⵏ ⴰⴷ",
+       "tooltip-t-upload": "ⵣⴷⴻⵎ ⴰⵙⴷⴰⵡ",
+       "tooltip-t-specialpages": "ⵓⵎⵓⵖ ⵏ ⴰⴽⴽ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵉⵥⵍⵉⵏ",
+       "tooltip-t-permalink": "ⴰⵣⴷⴰⵢ ⵏ ⴱⴻⴷⴷⴰ ⵉ ⵓⵍⵇⵎ ⵙⴳ ⵜⴰⵙⵏⴰ",
+       "tooltip-ca-nstab-media": "ⵥⵕ ⵜⴰⵙⵏⴰ ⵏ ⵎⵉⴷⵢⴰ",
+       "tooltip-ca-nstab-project": "ⵥⵕ ⵜⴰⵙⵏⴰ ⵓⵙⵏⴼⴰⵔ",
+       "tooltip-ca-nstab-image": "ⵥⵕ ⵜⴰⵙⵏⴰ ⵏ ⵓⵙⴷⴰⵡ",
+       "tooltip-ca-nstab-template": "ⵥⵕ ⵜⴰⵍⵖⴰ",
+       "tooltip-ca-nstab-category": "ⵥⵕ ⵜⴰⵙⵏⴰ ⵏ ⵜⴰⴳⴳⴰⵢⵜ",
+       "pageinfo-display-title": "ⵥⵕ ⴰⵣⵡⵉⵍ",
+       "pageinfo-article-id": "ⵓⵟⵟⵓⵏ ⵏ ⵜⴰⵙⵏⴰ (ID)",
+       "pageinfo-redirects-value": "$1",
+       "pageinfo-lasttime": "ⴰⵎⵣⵔⵓⵢ ⵓⴱⴷⴷⴻⵍ ⴰⵏⴳⴳⴰⵔⵓ",
+       "pageinfo-edits": "ⵓⵟⵟⵓⵏ ⵏ ⵉⴱⴷⴷⴻⵍⵏ",
+       "pageinfo-toolboxlink": "ⵉⵏⵖⵎⵉⵙⵏ ⵅⴼ ⵜⴰⵙⵏⴰ ⴰⴳⵉ (ⴰⴷ)",
+       "pageinfo-redirectsto-info": "ⵉⵏⵖⵎⵉⵙⵏ",
+       "pageinfo-contentpage-yes": "ⵢⴰⵀ",
+       "pageinfo-protect-cascading-yes": "ⵢⴰⵀ",
+       "ilsubmit": "ⴰⵔⵣⵣⵓ",
+       "bydate": "ⵙ ⵓⵣⵎⵣ",
+       "seconds-abbrev": "$1 s",
+       "minutes-abbrev": "$1 min",
+       "hours-abbrev": "$1 h",
+       "minutes": "{{PLURAL:$1|$1 ⵜⵓⵙⴷⴰⴷⵜ|$1 ⵜⵓⵙⴷⴰⴷⵉⵏ}}",
+       "hours": "{{PLURAL:$1|$1 ⵜⴰⵙⵔⴰⴳⵜ|$1 ⵜⵉⵙⵔⴰⴳⵉⵏ}}",
+       "days": "{{PLURAL:$1|$1 ⴰⵙⵙ|$1 ⵓⵙⵙⴰⵏ}}",
+       "months": "{{PLURAL:$1|$1 ⴰⵢⵢⵓⵔ|$1 ⴰⵢⵢⵓⵔⵏ}}",
+       "ago": "$1 ⴷⴰⵜ",
+       "just-now": "ⵖⵉⵍⴰ ⵚⴰⴼⵉ",
+       "variantname-zh-hant": "hant",
+       "variantname-zh-cn": "cn",
+       "variantname-zh": "zh",
+       "variantname-ku-arab": "ku-Arab",
+       "variantname-tg": "tg",
+       "exif-imagedescription": "ⴰⵣⵡⵍ ⵏ ⵜⵡⵍⴰⴼⵜ",
+       "exif-model": "ⴰⵏⴰⵡ ⵏ ⵍⴽⴰⵎⵉⵔⴰ",
+       "exif-exposuretime-format": "$1 ⵜⴰⵙⵏⴰⵜ ($2)",
+       "exif-flash": "Flash",
+       "exif-filesource": "ⴰⵖⴱⴰⵍⵓ ⵓⵙⴷⴰⵡ",
+       "exif-scenetype": "ⴰⵏⴰⵡ ⵏ ⵉⵏⵥⵔⵉ",
+       "exif-gpsdatestamp": "GPS ⴰⵎⵣⵔⵓⵢ",
+       "exif-jpegfilecomment": "ⵜⴰⵏⵏⴰⵢⵜ ⵓⵙⴷⴰⵡ JPEG",
+       "exif-keywords": "ⵜⵉⴳⵓⵔⵉⵡⵉⵏ ⵏ ⵜⵙⴰⵔⵓⵜ",
+       "exif-objectname": "ⴰⵣⵡⵉⵍ ⴰⴳⵯⵣⵣⴰⵍ",
+       "exif-headline": "ⴰⵣⵡⵉⵍ",
+       "exif-source": "ⴰⵖⴱⴰⵍⵓ",
+       "exif-urgency": "ⴰⵎⴰⵢⵏⵓ",
+       "exif-fixtureidentifier": "ⴰⵙⵙⴰⵖ ⵓⴼⵔⴷⵉⵙ",
+       "exif-contact": "ⵉⵏⵖⵎⵉⵙⵏ ⵓⵎⵢⴰⵡⴰⴹ",
+       "exif-writer": "ⴰⵎⴰⵔⴰ",
+       "exif-languagecode": "ⵜⵓⵜⵍⴰⵢⵜ",
+       "exif-iimcategory": "ⵜⴰⴳⴳⴰⵢⵜ",
+       "exif-label": "ⵜⴰⵎⴰⵜⴰⵔⵜ",
+       "exif-copyrighted": "ⴰⴷⴷⴰⵏ ⵏ ⵉⵣⵔⴼⴰⵏ ⵓⵎⴼⵙⴰⵔ",
+       "exif-giffilecomment": "ⵜⴰⵏⵏⴰⵢⵜ ⵓⵙⴷⴰⵡ GIF",
+       "exif-exposureprogram-1": "ⴰⵎⴰⴼⵓⵙ",
+       "exif-meteringmode-1": "ⴰⵏⴰⵎⵎⴰⵙ",
+       "exif-lightsource-0": "ⵡⴰⵔ ⴰⵙⵙⴰⵖ",
+       "exif-lightsource-1": "ⵜⵉⴼⴰⵡⵜ ⵏ ⵡⴰⵙⵙ",
+       "exif-lightsource-4": "ⴼⵍⴰⵛ",
+       "exif-flash-fired-1": "Flash ⵉⵙⵙⵏⵜⴰ",
+       "exif-scenecapturetype-0": "ⴰⵜⵔⴰⵔ",
+       "exif-gaincontrol-0": "ⵓⵍⴰⵛ (ⴰⵎⵢⴰ)",
+       "exif-subjectdistancerange-1": "ⵎⴰⴽⵔⵓ",
+       "exif-gpsspeed-m": "ⵎⵉⵍ ⴳ ⵜⵙⵔⴰⴳⵜ",
+       "exif-gpsspeed-n": "ⵜⴰⵙⵓⵜ",
+       "exif-gpsdestdistance-k": "ⴽⵉⵍⵓⵎⵉⵜⵔ",
+       "exif-gpsdestdistance-m": "Miles",
+       "exif-gpsdop-good": "ⵉⵥⵉⵍ ($1)",
+       "exif-dc-contributor": "ⴰⵎⴰⵡⴰⵙⵏ",
+       "exif-dc-date": "ⴰⴽⵓⴷ(ⵉⴽⵓⴷⵏ)",
+       "exif-dc-publisher": "ⴰⵎⴼⵙⵔ",
+       "exif-dc-rights": "ⵉⵣⵔⴼⴰⵏ",
+       "exif-dc-source": "ⴰⵖⴱⴰⵍⵓ ⵏ ⵓⵙⴷⴰⵡ",
+       "exif-dc-type": "ⴰⵏⴰⵡ ⵏ ⵓⵎⵉⴷⵢⴰ",
+       "exif-iimcategory-ace": "ⵜⵉⵥⵓⵔⵉⵡⵉⵏ, ⴷ ⵜⴷⵍⵙⴰ ⴷ ⴰⵎⵣⵍ",
+       "exif-iimcategory-fin": "ⵜⴰⴷⴰⵎⵙⴰ ⴷ ⵜⴰⵙⴱⴱⴰⴱⵜ",
+       "exif-iimcategory-edu": "ⴰⵙⵙⵍⵎⴷ",
+       "exif-iimcategory-evn": "ⵜⴰⵡⵏⵏⴰⵟ",
+       "exif-iimcategory-hth": "ⵜⴰⴷⵓⵙⵉ",
+       "exif-iimcategory-lab": "ⵜⴰⵡⵓⵔⵉ",
+       "exif-iimcategory-pol": "ⵜⴰⵙⵔⵜⵉⵜ",
+       "exif-iimcategory-rel": "ⴰⵙⴳⴷ ⴷ ⵜⵉⴼⵍⵙⵉⵏ",
+       "exif-iimcategory-spo": "ⵜⵓⵏⵏⵓⵏⵜ",
+       "exif-iimcategory-wea": "ⴰⵏⵣⵡⵉ",
+       "watchlistall2": "ⵎⴰⵕⵕⴰ",
+       "namespacesall": "ⵎⴰⵕⵕⴰ",
+       "monthsall": "ⵎⴰⵕⵕⴰ",
+       "confirm_purge_button": "ⵡⴰⵅⵅⴰ",
+       "confirm-watch-button": "ⵡⴰⵅⵅⴰ",
+       "confirm-unwatch-button": "ⵡⴰⵅⵅⴰ",
+       "semicolon-separator": "&#32;",
+       "imgmultigo": "ⴷⴷⵓ!",
+       "imgmultigoto": "ⴷⴷⵓ ⵖⵔ ⵜⴰⵙⵏⴰ $1",
+       "table_pager_first": "ⵜⴰⵙⵏⴰ ⵜⴰⵎⵣⵡⴰⵔⵓⵜ",
+       "table_pager_last": "ⵜⴰⵙⵏⴰ ⵜⴰⵏⴳⴳⴰⵔⵓⵜ",
+       "table_pager_limit_label": "ⵉⴼⵔⴷⵉⵙⵏ ⴷⵉ ⴽⵓ ⵜⴰⵙⵏⴰ:",
+       "table_pager_limit_submit": "ⴷⴷⵓ",
+       "table_pager_empty": "ⵡⴰⵔ ⵜⵉⵢⴰⴼⵓⵜⵉⵏ",
+       "watchlistedit-raw-titles": "ⵉⵣⵡⵉⵍⵏ:",
+       "iranian-calendar-m8": "ⴰⴱⴰⵏ",
+       "hijri-calendar-m8": "ⵛⴰⵄⴱⴰⵏ",
+       "hebrew-calendar-m6": "ⴰⴷⴰⵔ",
+       "version-skins": "ⵓⴷⵎⴰⵡⵏ",
+       "version-software-product": "ⴰⵎⵙⵢⴰⴼⵓ (ⴰⵏⴼⵔⴰⵙ)",
+       "version-entrypoints-header-url": "URL",
+       "fileduplicatesearch-filename": "ⴰⵙⵙⴰⵖ ⵓⵙⴷⴰⵡ:",
+       "fileduplicatesearch-submit": "ⴰⵔⵣⵣⵓ",
+       "specialpages": "ⵜⴰⵙⵏⵉⵡⵉⵏ ⵉⵥⵍⵉⵏ",
+       "specialpages-group-pagetools": "ⵉⵎⴰⵙⵙⵏ ⵏ ⵜⴰⵙⵏⴰ",
+       "specialpages-group-spam": "ⵉⵎⴰⵙⵙⵏ ⵏ ⵙⴱⴰⵎ",
+       "tag-filter-submit": "ⴰⵎⵙⵜⴰⵢ",
+       "compare-page1": "ⵜⴰⵙⵏⴰ 1",
+       "compare-page2": "ⵜⴰⵙⵏⴰ 2",
+       "logentry-delete-delete": "$1 ⴽⴽⵉⵙ ⵜⴰⵙⵏⴰ $3",
+       "logentry-delete-restore": "$1 ⵙⵙⴰⵖⵓⵍ ⵜⴰⵙⵏⴰ $3",
+       "rightsnone": "(ⵡⴰⵔ)",
+       "feedback-subject": "ⴰⵙⵏⵜⵍ:",
+       "feedback-message": "ⵜⴰⴱⵔⴰⵜ:",
+       "feedback-close": "ⵉⵣⵎⵎⴻⵎ",
+       "searchsuggest-search": "ⴰⵔⵣⵣⵓ",
+       "api-error-duplicate-popup-title": "ⵣⴷⴻⵎ {{PLURAL:$1|ⴰⵙⴷⴰⵡ|ⵉⵙⴷⴰⵡⵏ}}.",
+       "api-error-filename-tooshort": "ⴰⵙⵙⴰⵖ ⵓⵙⴷⴰⵡ ⵉⴳⵣⵣⵓⵍ ⵛⵉⴳⴰⵏ.",
+       "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|ⵜⴰⵙⵓⵜ|ⵜⴰⵙⵓⵜⵉⵏ}}"
+}
index 60ad15c..bfa01d5 100644 (file)
        "qbmyoptions": "بەتلەرىم",
        "faq": "كۆپ كۆرۈلىدىغان مەسىلىلەر",
        "faqpage": "Project:كۆپ كۆرۈلىدىغان مەسىلىلەر",
-       "vector-action-addsection": "يېڭى تېما قوش",
-       "vector-action-delete": "ئۆچۈر",
-       "vector-action-move": "يۆتكە",
-       "vector-action-protect": "قوغدا",
-       "vector-action-undelete": "ئەسلىگە قايتۇر",
-       "vector-action-unprotect": "قوغداش ئۆزگەرت",
-       "vector-view-create": "قۇر",
-       "vector-view-edit": "تەھرىر",
-       "vector-view-history": "تارىخ كۆرسەت",
-       "vector-view-view": "ئوقۇ",
-       "vector-view-viewsource": "مەنبەنى كۆرسەت",
        "actions": "مەشغۇلات",
        "namespaces": "ئات بوشلۇقى",
        "variants": "ۋارىيانتلار",
        "searchrelated": "ئالاقىدار",
        "searchall": "ھەممىسى",
        "showingresults": "تۆۋەندە '''$2''' - نەتىجىدىن باشلانغان {{PLURAL:$1|'''1''' نەتىجە|'''$1''' نەتىجە}} كۆرسىتىدۇ:",
-       "showingresultsnum": "تۆۋەندە '''$2''' - نەتىجىدىن باشلانغان {{PLURAL:$3|'''1''' نەتىجە |'''$3''' نەتىجە }} كۆرسىتىدۇ:",
        "showingresultsheader": "'''$4''' نىڭ {{PLURAL:$5|'''$1''' دىن '''$3'''غىچە نەتىجە | '''$1 - $2''' غىچە جەمئى '''$3''' نەتىجە}}",
        "search-nonefound": "سۈرۈشتۈرۈشكە ماس نەتىجە تېپىلمىدى.",
        "powersearch-legend": "ئالىي ئىزدەش",
        "tooltip-preferences-save": "مايىللىق ساقلا",
        "tooltip-summary": "قىسقىچە ئۈزۈندە كىرگۈزۈڭ",
        "common.css": "/* CSS placed here will be applied to all skins */",
-       "monobook.css": "/* CSS placed here will affect users of the Monobook 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-autoconfirmed.css": "/* CSS placed here will affect autoconfirmed users only */",
        "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. */",
-       "monobook.js": "/* Any JavaScript here will be loaded for users using the MonoBook 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 */",
        "group-sysop.js": "/* Any JavaScript here will be loaded for sysops only */",
        "pageinfo-category-pages": "بەت سانى",
        "pageinfo-category-subcats": "تارماق تۈر سانى",
        "pageinfo-category-files": "ھۆججەت سانى",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "چارلاش بەلگىسى قوي",
        "markaspatrolledtext": "بۇ بەتكە چارلاش بەلگىسى قوي",
        "markedaspatrolled": "چارلاش بەلگىسى قويۇلغان",
index 861ca3b..b3a08bc 100644 (file)
        "category-empty": "''Ця категорія зараз порожня.''",
        "hidden-categories": "{{PLURAL:$1|1=Прихована категорія|Приховані категорії|Прихованих категорій}}",
        "hidden-category-category": "Приховані категорії",
-       "category-subcat-count": "{{PLURAL:$2|ЦÑ\8f ÐºÐ°Ñ\82егоÑ\80Ñ\96Ñ\8f Ð¼Ð°Ñ\94 Ñ\82Ñ\96лÑ\8cки Ñ\82акÑ\83 Ð¿Ñ\96дкаÑ\82егоÑ\80Ñ\96Ñ\8e.|ЦÑ\8f ÐºÐ°Ñ\82егоÑ\80Ñ\96Ñ\8f Ð¼Ð°Ñ\94 $1 {{PLURAL:$1|Ñ\82акÑ\83 Ð¿Ñ\96дкаÑ\82егоÑ\80Ñ\96Ñ\8e Ð·|Ñ\82акÑ\96 Ð¿Ñ\96дкаÑ\82егоÑ\80Ñ\96Ñ\97 Ð·|Ñ\82акиÑ\85 підкатегорій із}} $2.}}",
+       "category-subcat-count": "{{PLURAL:$2|ЦÑ\8f ÐºÐ°Ñ\82егоÑ\80Ñ\96Ñ\8f Ð¼Ð°Ñ\94 Ñ\82Ñ\96лÑ\8cки Ñ\82акÑ\83 Ð¿Ñ\96дкаÑ\82егоÑ\80Ñ\96Ñ\8e.|Ð\9fоказано $1 {{PLURAL:$1|пÑ\96дкаÑ\82егоÑ\80Ñ\96Ñ\8e Ð·|пÑ\96дкаÑ\82егоÑ\80Ñ\96Ñ\97 Ð·|підкатегорій із}} $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 сторінок}}.",
        "qbmyoptions": "Мої налаштування",
        "faq": "Часті питання",
        "faqpage": "Project:Часті питання",
-       "vector-action-addsection": "Додати тему",
-       "vector-action-delete": "Вилучити",
-       "vector-action-move": "Перейменувати",
-       "vector-action-protect": "Захистити",
-       "vector-action-undelete": "Відновити",
-       "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": "Навігаційне меню",
        "searchall": "усі",
        "showingresults": "Нижче {{PLURAL:$1|показане|показані|показані}} '''$1''' {{PLURAL:$1|результат|результати|результатів}}, починаючи з №&nbsp;'''$2'''",
        "showingresultsinrange": "Нижче показано до {{PLURAL:$1|<strong>1</strong> результата|<strong>$1</strong> результатів|<strong>$1</strong> результати}} у діапазоні від #<strong>$2</strong> до #<strong>$3</strong>.",
-       "showingresultsnum": "Нижче показано <strong>$3</strong> {{PLURAL:$3|результат|результати|результатів}}, починаючи з №&nbsp;<strong>$2</strong>.",
        "showingresultsheader": "{{PLURAL:$5|1=Результат '''$1''' з '''$3'''|Результати '''$1 — $2''' з '''$3'''}} для '''$4'''",
        "search-nonefound": "Не знайдено результатів, що відповідають запиту.",
        "powersearch-legend": "Розширений пошук",
        "duplicatesoffile": "{{PLURAL:$1|Дублікатом цього файлу є файл|Такі $1 файли є дублікатами цього файлу|Такі $1 файлів є дублікатами цього файлу}}\n([[Special:FileDuplicateSearch/$2|докладніше]]):",
        "sharedupload": "Цей файл із $1 і є доступним для інших проектів.",
        "sharedupload-desc-there": "Цей файл з $1 і може використовуватися в інших проектах.\nДодаткову інформацію можна знайти на [$2 сторінці опису файлу].",
-       "sharedupload-desc-here": "Цей файл з $1 і може використовуватися в інших проектах.\nДалі наведена інформація з його [$2 сторінки опису].",
+       "sharedupload-desc-here": "Цей файл з {{GRAMMAR:genitive|$1}} і може використовуватися в інших проектах.\nДалі наведена інформація з його [$2 сторінки опису].",
        "sharedupload-desc-edit": "Цей файл з $1 і може використовуватися в інших проектах. \nЙого опис можна відредагувати [$2 на відповідній сторінці тут].",
        "sharedupload-desc-create": "Цей файл з $1 і може використовуватися в інших проектах. \nЙого опис можна зробити [$2 на відповідній сторінці тут].",
        "filepage-nofile": "Не існує файлу з такою назвою.",
        "tooltip-summary": "Введіть короткий опис",
        "interlanguage-link-title": "$1 — $2",
        "common.css": "/** Розміщений тут CSS буде застосовуватися до всіх тем оформлення */",
-       "monobook.css": "/* Розміщений тут CSS буде застосовуватися до всіх тем оформлення Monobook */",
-       "vector.css": "/* Розміщений тут CSS-код буде використаний в темі оформлення Векторне */",
        "print.css": "/* Розміщений тут CSS-код буде використаний для друкованої версії */",
        "noscript.css": "/* Розміщений тут CSS-код буде використаний для користувачів у яких вимкнено JavaScript */",
        "group-autoconfirmed.css": "/* Розміщений тут CSS-код буде використаний для автопідтверджених користувачів */",
        "group-sysop.css": "/* Розміщений тут CSS-код буде використаний тільки для адміністраторів */",
        "group-bureaucrat.css": "/* Розміщений тут CSS-код буде використаний тільки для бюрократів */",
        "common.js": "/* Розміщений тут код JavaScript буде завантажений всім користувачам при зверненні до будь-якої сторінки */",
-       "monobook.js": "/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують тему оформлення Моно-книга */",
-       "vector.js": "/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують векторну тему оформлення */",
        "group-autoconfirmed.js": "/* Розміщений тут код JavaScript буде завантажений тільки для автопідтверджених користувачів */",
        "group-bot.js": "/* Розміщений тут код JavaScript буде завантажений тільки для ботів */",
        "group-sysop.js": "/* Розміщений тут код JavaScript буде завантажений тільки для адміністраторів */",
        "pageinfo-category-pages": "Кількість сторінок",
        "pageinfo-category-subcats": "Кількість підкатегорій",
        "pageinfo-category-files": "Кількість файлів",
-       "skinname-monobook": "Моно-книга",
-       "skinname-vector": "Векторне",
        "markaspatrolleddiff": "Позначити як перевірену",
        "markaspatrolledtext": "Позначити цю сторінку як перевірену",
        "markedaspatrolled": "Позначена як перевірена",
        "duplicate-defaultsort": "Увага. Ключ сортування «$2» перекриває попередній ключ сортування «$1».",
        "version": "Версія MediaWiki",
        "version-extensions": "Установлені розширення",
+       "version-skins": "Оформлення",
        "version-specialpages": "Спеціальні сторінки",
        "version-parserhooks": "Перехоплювачі синтаксичного аналізатора",
        "version-variables": "Змінні",
        "version-antispam": "Захист від спаму",
-       "version-skins": "Оформлення",
        "version-api": "API",
        "version-other": "Інше",
        "version-mediahandlers": "Обробники медіа",
index 22d26c3..8726dc3 100644 (file)
        "qbmyoptions": "میرے صفحات",
        "faq": "معلوماتِ عامہ",
        "faqpage": "Project:معلوماتِ عامہ",
-       "vector-action-addsection": "نیا موضوع",
-       "vector-action-delete": "حذف کرو",
-       "vector-action-move": "منتقل کرو",
-       "vector-action-protect": "محفوظ کرو",
-       "vector-action-undelete": "بحال",
-       "vector-action-unprotect": "تحفظ میں تبدیلی",
-       "vector-view-create": "تخلیق",
-       "vector-view-edit": "ترمیم",
-       "vector-view-history": "تاریخ",
-       "vector-view-view": "مطالعہ",
-       "vector-view-viewsource": "مسودہ",
        "actions": "ایکشنز",
-       "vector-more-actions": "زیادہ",
        "namespaces": "جائے نام",
        "variants": "متغیرات",
        "errorpagetitle": "خطاء",
index dab5808..25867f7 100644 (file)
        "qbmyoptions": "Moslamalarim",
        "faq": "TSS",
        "faqpage": "Project:TSS",
-       "vector-action-addsection": "Mavzu qoʻshish",
-       "vector-action-delete": "O‘chirish",
-       "vector-action-move": "Ko‘chirish",
-       "vector-action-protect": "Himoyalash",
-       "vector-action-undelete": "Tiklash",
-       "vector-action-unprotect": "Himoyalashni oʻzgartirish",
-       "vector-view-create": "Yaratish",
-       "vector-view-edit": "Tahrirlash",
-       "vector-view-history": "Tarix",
-       "vector-view-view": "Mutolaa",
-       "vector-view-viewsource": "Manbasini koʻrish",
        "actions": "Amallar",
-       "vector-more-actions": "Yana",
        "namespaces": "Nomfazolar",
        "variants": "Variantlar",
        "navigation-heading": "Navigatsiya",
        "searchrelated": "bogʻlangan",
        "searchall": "barchasi",
        "showingresults": "Quyida №'''$2'''dan boshlab {{PLURAL:$1|'''bitta''' natija|'''$1''' ta natija}} koʻrsatilgan.",
-       "showingresultsnum": "Quyida №'''$2'''dan boshlab '''$1''' ta {{PLURAL:$1|natija}} ko'rsatildi.",
        "showingresultsheader": "<strong>$4</strong> uchun jami {{PLURAL:$5|<strong>$3</strong> tadan <strong>$1</strong> ta natija koʻrsatildi|<strong>$3</strong> tadan <strong>$1</strong> — <strong>$2</strong> chi natijalar koʻrsatildi}}",
        "search-nonefound": "Talabga javob beradigan natija topilmadi.",
        "powersearch-legend": "Kengaytirilgan qidiruv",
        "pageinfo-edits": "Jami tahrirlar soni",
        "pageinfo-toolboxlink": "Sahifa haqida maʼlumot",
        "pageinfo-redirectsto": "Qayta yoʻnaltirish",
-       "skinname-vector": "Vektor",
        "patrol-log-page": "Patrullash qaydlari",
        "previousdiff": "← Avvalgi tahrir",
        "nextdiff": "Keyingi tahrir →",
index 1185f7d..09c4ce1 100644 (file)
        "qbmyoptions": "Łe me pajine",
        "faq": "Domande frequenti",
        "faqpage": "Project:Domande frequenti",
-       "vector-action-addsection": "Zonta discusion",
-       "vector-action-delete": "Scanseła",
-       "vector-action-move": "Sposta",
-       "vector-action-protect": "Protezi",
-       "vector-action-undelete": "Recupera",
-       "vector-action-unprotect": "Canbia ła protesion",
-       "vector-view-create": "Crea",
-       "vector-view-edit": "Canbia",
-       "vector-view-history": "Varda ła storia",
-       "vector-view-view": "Lezi",
-       "vector-view-viewsource": "Varda el testo",
        "actions": "Asion",
        "namespaces": "Namespace",
        "variants": "Varianse",
        "searchrelated": "ligà",
        "searchall": "tuti",
        "showingresults": "Qua de soto vien mostrà al massimo {{PLURAL:$1|'''1''' risultato|'''$1''' risultati}} a partir dal nùmaro '''$2'''.",
-       "showingresultsnum": "Qua soto ghe xe {{PLURAL:$3|'''1''' risultato|'''$3''' risultati}} a partir da #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Risultato '''$1''' de '''$3'''|Risultati '''$1 - $2''' de '''$3'''}} par '''$4'''",
        "search-nonefound": "La riserca no la gà catà gnente.",
        "powersearch-legend": "Riserca avansà",
index dcb3994..07ba40c 100644 (file)
        "qbmyoptions": "Minun järgendused",
        "faq": "PPK",
        "faqpage": "Project:PPK",
-       "vector-action-addsection": "Ližada tem",
-       "vector-action-delete": "Čuta poiš",
-       "vector-action-move": "Udesnimitada",
-       "vector-action-protect": "Kaita",
-       "vector-action-undelete": "Pördutada",
-       "vector-action-unprotect": "Toižetada kaičend",
-       "vector-view-create": "Säta",
-       "vector-view-edit": "Redaktiruida",
-       "vector-view-history": "Kacta istorii",
-       "vector-view-view": "Lugeda",
-       "vector-view-viewsource": "Kacta purtkehe",
        "actions": "Tegendad",
        "namespaces": "Nimiavaruded",
        "variants": "Variantad",
        "editundo": "heitta pätand",
        "searchresults": "Ectä rezul'tatad",
        "searchresults-title": "Ecindan rezul'tatad sanale \"$1\"",
-       "toomanymatches": "Om löutud äjahko rezul'tatoid, olgat hüväd, eckat toine sana",
        "titlematches": "Löutud lehtpoliden nimed",
        "textmatches": "Löutud tekstanpalad lehtpolil",
        "notextmatches": "Lehtpoliden tekstoiš ei ole ectud sanad",
        "searchmenu-exists": "'''Neciš Wikiš om jo lehtpol' ningoižen nimenke: \"[[:$1]]\"'''",
        "searchmenu-new": "'''Säta lehtpol' \"[[:$1]]\" neciš Wikiš!'''",
        "searchprofile-articles": "Südäimištlehtpoled",
-       "searchprofile-project": "Abun da projektoiden lehtpoled",
        "searchprofile-images": "Mul'timedii",
        "searchprofile-everything": "Kaikjal",
        "searchprofile-advanced": "Levitoittud",
        "searchprofile-articles-tooltip": "Ectä täs: $1",
-       "searchprofile-project-tooltip": "Ectä täs: $1",
        "searchprofile-images-tooltip": "Failoiden ecind",
        "searchprofile-everything-tooltip": "Ectä kaikil lehtpolil (lodulehtpolid mülütaden)",
        "searchprofile-advanced-tooltip": "Ectä märitud nimiavarusiš",
        "search-interwiki-default": "$1 rezul'tatad:",
        "search-interwiki-more": "(völ)",
        "search-relatedarticle": "Sidotud lehtpoled",
-       "searcheverything-enable": "Ectä kaikiš nimiavarusiš",
        "searchrelated": "sidotud",
        "searchall": "kaik",
        "showingresults": "Alemba ozutadas {{PLURAL:$1|'''1''' rezul'tat|'''$1''' rezul'tatad}} nomeraspäi #'''$2''' augotaden.",
-       "showingresultsnum": "Alemba ozutadas {{PLURAL:$3|'''1''' rezul'tat|'''$3''' rezul'tatad}} nomeraspäi '''$2''' augotaden.",
        "showingresultsheader": "{{PLURAL:$5|'''$1''' '''$3'''-š rezul'tatoišpäi|Rezul'tatad '''$1–$2''' '''$3'''-špäi}} '''$4'''-n täht",
        "search-nonefound": "Ecmižhe ei löudnus rezul'tatoid.",
        "powersearch-legend": "Levitoittud ecind",
        "allowemail": "Laskkat toižile kävutajile oigeta teile e-počtad",
        "prefs-searchoptions": "Ectä",
        "prefs-namespaces": "Nimiavarused",
-       "defaultns": "Toižiš statjoiš ectä neniš nimiavarusiš:",
        "default": "augotižjärgendusen mödhe",
        "prefs-files": "Failad",
        "prefs-custom-css": "Ičeze CSS",
        "prefs-emailconfirm-label": "E-počtan vahvištand:",
        "youremail": "E-počt:",
        "username": "{{GENDER:$1|Kävutajan nimi}}:",
-       "uid": "{{GENDER:$1|Kävutajan nomer}} ID:",
        "prefs-memberingroups": "{{PLURAL:$1|Gruppan|Gruppiden}} {{GENDER:$2|ühtnii}}:",
        "prefs-registration": "Registracijan aig:",
        "yourrealname": "Todesine nimi:",
        "logempty": "Ei ole sättujid kirjutesid aigkirjas.",
        "log-title-wildcard": "Ectä pälkirjutesid, kudambil augoitišes om ningomid simvoloid",
        "allpages": "Kaik lehtpoled",
-       "alphaindexline": "$1... $2",
        "nextpage": "Toine lehtpol’ ($1)",
        "prevpage": "Edeline lehtpol' ($1)",
        "allpagesfrom": "Ozutada lehtpoled, kudambad augotase necil tekstal:",
        "pageinfo-category-pages": "Lehtpoliden lugumär",
        "pageinfo-category-subcats": "Alakategorijoiden lugumär",
        "pageinfo-category-files": "Failoiden lugumär",
-       "skinname-cologneblue": "Köl'nan sinine",
-       "skinname-monobook": "MonoBook",
-       "skinname-modern": "Nügüd'aigaine",
        "markaspatrolleddiff": "Znamoita kut patruliruidud",
        "markaspatrolledtext": "Znamoita nece lehtpol' kut patruliruidud",
        "markedaspatrolled": "Om znamoitud kut patruliruidud",
index af475eb..ed99e48 100644 (file)
@@ -68,7 +68,7 @@
        "tog-prefershttps": "Luôn kết nối an toàn khi đăng nhập",
        "underline-always": "Luôn luôn",
        "underline-never": "Không bao giờ",
-       "underline-default": "Mặc định của hình dạng hoặc trình duyệt",
+       "underline-default": "Mặc định của giao diện hoặc trình duyệt",
        "editfont-style": "Kiểu phông chữ trong khung sửa đổi:",
        "editfont-default": "Mặc định của trình duyệt",
        "editfont-monospace": "Phông đẳng cách",
        "qbmyoptions": "Trang cá nhân",
        "faq": "Câu hỏi thường gặp",
        "faqpage": "Project:Các câu hỏi thường gặp",
-       "vector-action-addsection": "Thêm chủ đề",
-       "vector-action-delete": "Xóa",
-       "vector-action-move": "Di chuyển",
-       "vector-action-protect": "Khóa",
-       "vector-action-undelete": "Phục hồi",
-       "vector-action-unprotect": "Đổi mức khóa",
-       "vector-view-create": "Tạo",
-       "vector-view-edit": "Sửa đổi",
-       "vector-view-history": "Xem lịch sử",
-       "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",
        "mergehistory-empty": "Không thể trộn được sửa đổi nào.",
        "mergehistory-success": "$3 {{PLURAL:$3|sửa đổi|sửa đổi}} của [[:$1]] đã được trộn vào [[:$2]].",
        "mergehistory-fail": "Không thể thực hiện được việc trộn lịch sử sửa đổi, vui lòng chọn lại trang cũng như thông số ngày giờ.",
+       "mergehistory-fail-toobig": "Không thể trộn lịch sử vì phải di chuyển $1 phiên bản và vượt quá giới hạn cho phép.",
        "mergehistory-no-source": "Trang nguồn $1 không tồn tại.",
        "mergehistory-no-destination": "Trang đích $1 không tồn tại.",
        "mergehistory-invalid-source": "Trang nguồn phải có tiêu đề hợp lệ.",
        "searchall": "tất cả",
        "showingresults": "Dưới đây là {{PLURAL:$1|'''1'''|'''$1'''}} kết quả bắt đầu từ #'''$2'''.",
        "showingresultsinrange": "Dưới đây là cho tới <strong>$1</strong> kết quả từ #<strong>$2</strong> đến #<strong>$3</strong>.",
-       "showingresultsnum": "Dưới đây là {{PLURAL:$3|'''1'''|'''$3'''}} kết quả bắt đầu từ #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Kết quả thứ '''$1''' trong tổng số '''$3''' kết quả|Các kết quả '''$1–$2''' trong tổng số '''$3''' kết quả}} cho '''$4'''",
        "search-nonefound": "Không có kết quả nào khớp với câu truy vấn.",
        "powersearch-legend": "Tìm kiếm nâng cao",
        "mypreferences": "Tùy chọn",
        "prefs-edits": "Số lần sửa đổi:",
        "prefsnologintext2": "Xin vui lòng $1 để thay đổi tùy chọn.",
-       "prefs-skin": "Hình dạng",
+       "prefs-skin": "Giao diện",
        "skin-preview": "Xem trước",
        "datedefault": "Không quan tâm",
        "prefs-labs": "Tính năng phòng thí nghiệm",
        "prefs-changeemail": "Đổi địa chỉ thư điện tử",
        "prefs-setemail": "Đặt địa chỉ thư điện tử",
        "prefs-email": "Tùy chọn thư điện tử",
-       "prefs-rendering": "Bề ngoài",
+       "prefs-rendering": "Giao diện",
        "saveprefs": "Lưu tùy chọn",
        "restoreprefs": "Mặc định lại toàn bộ tùy chọn (trong tất cả các phần)",
        "prefs-editing": "Sửa đổi",
        "prefs-files": "Tập tin",
        "prefs-custom-css": "sửa CSS",
        "prefs-custom-js": "sửa JS",
-       "prefs-common-css-js": "CSS/JS chung cho mọi hình dạng:",
+       "prefs-common-css-js": "CSS/JS chung cho mọi giao diện:",
        "prefs-reset-intro": "Có thể mặc định lại toàn bộ tùy chọn dùng trang này.\nKhông có thể lùi lại tác động này.",
        "prefs-emailconfirm-label": "Xác nhận thư điện tử:",
        "youremail": "Thư điện tử:",
        "action-patrol": "đánh dấu đã tuần tra vào sửa đổi của người khác",
        "action-autopatrol": "tự động đánh dấu đã tuần tra vào sửa đổi của bạn",
        "action-unwatchedpages": "xem danh sách các trang chưa được theo dõi",
-       "action-mergehistory": "hợp nhất lịch sử của trang này",
+       "action-mergehistory": "trộn lịch sử của trang này",
        "action-userrights": "sửa đổi mọi quyền người dùng",
        "action-userrights-interwiki": "sửa đổi quyền của người dùng tại wiki khác",
        "action-siteadmin": "khóa hoặc mở khóa cơ sở dữ liệu",
        "windows-nonascii-filename": "Wiki này không hỗ trợ ký tự đặc biệt trong tên tập tin.",
        "fileexists": "Một tập tin với tên này đã tồn tại, xin hãy kiểm tra lại <strong>[[:$1]]</strong> nếu bạn không chắc bạn có muốn thay đổi nó hay không.\n[[$1|thumb]]",
        "filepageexists": "Trang miêu tả của tập tin này đã được tạo tại <strong>[[:$1]]</strong>, nhưng hiện không có tập tin nào có tên như vậy.\nNhững gì bạn ghi trong ô \"Tóm tắt tập tin\" sẽ không hiện ra ở trang miêu tả.\nĐể khiến nó hiển thị, bạn cần phải sửa đổi trang đó bằng tay.\n[[$1|thumb]]",
-       "fileexists-extension": "Hiện có một tập tin trùng tên: [[$2|thumb]]\n* Tên tập tin đang tải lên: <strong>[[:$1]]</strong>\n* Tên tập tin có từ trước: <strong>[[:$2]]</strong>\nXin hãy chọn một tên tập tin khác.",
+       "fileexists-extension": "Hiện có một tập tin trùng tên: [[$2|thumb]]\n* Tên tập tin đang tải lên: <strong>[[:$1]]</strong>\n* Tên tập tin có từ trước: <strong>[[:$2]]</strong>\nGợi ý bạn chọn một tên rõ hơn.",
        "fileexists-thumbnail-yes": "Tập tin này có vẻ là hình có kích thước thu gọn ''(hình thu nhỏ)''. [[$1|thumb]]\nXin kiểm tra lại tập tin <strong>[[:$1]]</strong>.\nNếu tập tin được kiểm tra trùng với hình có kích cỡ gốc thì không cần thiết tải lên một hình thu nhỏ khác.",
        "file-thumbnail-no": "Tên tập tin bắt đầu bằng <strong>$1</strong>.\nCó vẻ đây là bản thu nhỏ của hình gốc ''(thumbnail)''.\nNếu bạn có hình ở độ phân giải tối đa, xin hãy tải bản đó lên, nếu không xin hãy đổi lại tên tập tin.",
        "fileexists-forbidden": "Đã có tập tin với tên gọi này, và nó không thể bị ghi đè.\nNếu bạn vẫn muốn tải tập tin của bạn lên, xin hãy quay lại và sử dụng một tên khác. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Tác vụ xóa và phục hồi tập tin đã bị tắt tạm thời trong khi bảo trì.",
        "filedelete-maintenance-title": "Không thể xóa tập tin",
        "mimesearch": "Tìm kiếm theo định dạng",
-       "mimesearch-summary": "Trang này có khả năng lọc tập tin theo kiểu MIME. Đầu vào: kiểu-nội-dung/kiểu-phụ, v.d. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Trang này có khả năng lọc tập tin theo kiểu MIME. Đầu vào: kiểu-nội-dung/kiểu-phụ hoặc kiểu-nội-dung/*, ví dụ <code>image/jpeg</code>.",
        "mimetype": "Kiểu MIME:",
        "download": "tải về",
        "unwatchedpages": "Trang chưa được theo dõi",
        "javascripttest-pagetext-noframework": "Trang này dành cho việc chạy các ca kiểm thử JavaScript.",
        "javascripttest-pagetext-unknownframework": "Nền tảng kiểm thử không rõ “$1”.",
        "javascripttest-pagetext-frameworks": "Hãy chọn một trong những nền tảng kiểm thử sau: $1",
-       "javascripttest-pagetext-skins": "Hãy chọn một bề ngoài để sử dụng với các ca kiểm thử:",
+       "javascripttest-pagetext-skins": "Hãy chọn giao diện để sử dụng với các ca kiểm thử:",
        "javascripttest-qunit-intro": "Xem [$1 tài liệu kiểm thử] tại mediawiki.org.",
        "javascripttest-qunit-heading": "Tập kiểm thử QUnit JavaScript MediaWiki",
        "tooltip-pt-userpage": "Trang cá nhân của tôi",
        "tooltip-preferences-save": "Lưu tùy chọn",
        "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 */",
-       "monobook.css": "/* Mã CSS đặt ở đây sẽ ảnh hưởng đến thành viên sử dụng hình dạng MonoBook */",
-       "vector.css": "/* Mã CSS đặt ở đây sẽ ảnh hưởng đến thành viên sử dụng hình dạng Vectơ */",
+       "common.css": "/* Mã CSS đặt ở đây sẽ áp dụng cho mọi giao diện */",
        "print.css": "/* Mã CSS tại đây sẽ ảnh hưởng đến bản để in */",
        "noscript.css": "/* Mã CSS tại đây sẽ ảnh hưởng đến những người dùng tắt JavaScript */",
        "group-autoconfirmed.css": "/* Mã CSS tại đây sẽ chỉ ảnh hưởng đến các thành viên tự động xác nhận */",
        "group-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. */",
-       "monobook.js": "/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài MonoBook */",
-       "vector.js": "/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài Vectơ */",
        "group-autoconfirmed.js": "/* Mã JavaScript tại đây sẽ chỉ được tải cho các thành viên tự động xác nhận */",
        "group-user.js": "/* Mã JavaScript tại đây sẽ chỉ được tải cho các thành viên có tài khoản */",
        "group-bot.js": "/* Mã JavaScript tại đây sẽ chỉ được tải cho các bot */",
        "pageinfo-category-pages": "Số trang",
        "pageinfo-category-subcats": "Số thể loại con",
        "pageinfo-category-files": "Số tập tin",
-       "skinname-vector": "Vectơ",
        "markaspatrolleddiff": "Đánh dấu tuần tra",
        "markaspatrolledtext": "Đánh dấu tuần tra trang này",
        "markedaspatrolled": "Đã đánh dấu tuần tra",
        "duplicate-defaultsort": "Cảnh báo: Từ khóa xếp mặc định “$2” ghi đè từ khóa trước, “$1”.",
        "version": "Phiên bản",
        "version-extensions": "Các phần mở rộng được cài đặt",
+       "version-skins": "Giao diện đã cài đặt",
        "version-specialpages": "Trang đặc biệt",
        "version-parserhooks": "Hook trong bộ xử lý",
        "version-variables": "Biến",
        "version-antispam": "Chống spam",
-       "version-skins": "Hình dạng",
        "version-other": "Phần mở rộng khác",
        "version-mediahandlers": "Bộ xử lý phương tiện",
        "version-hooks": "Các hook",
        "version-hook-name": "Tên hook",
        "version-hook-subscribedby": "Được theo dõi bởi",
        "version-version": "(Phiên bản $1)",
+       "version-no-ext-name": "[không tên]",
        "version-license": "Giấy phép MediaWiki",
        "version-ext-license": "Giấy phép",
        "version-ext-colheader-name": "Phần mở rộng",
+       "version-skin-colheader-name": "Giao diện",
        "version-ext-colheader-version": "Phiên bản",
        "version-ext-colheader-license": "Giấy phép",
        "version-ext-colheader-description": "Miêu tả",
index 1ea9513..39099bc 100644 (file)
        "qbmyoptions": "Mâj sajdn",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Ân najn abschnid ôôfangn",
-       "vector-action-delete": "Leschn",
-       "vector-action-move": "Umdaafn",
-       "vector-action-protect": "Schidsn",
-       "vector-action-undelete": "Leschn riggängich machn",
-       "vector-action-unprotect": "Schuds ufgeebn",
-       "vector-view-create": "Ôôleechn",
-       "vector-view-edit": "Bearbajdn",
-       "vector-view-history": "Wärsjoonsfolche",
-       "vector-view-view": "Leesn",
-       "vector-view-viewsource": "Gwäl-dhägsd ôôgugn",
        "actions": "Agdsiona",
        "namespaces": "Nôômsrajm",
        "variants": "Warjandn",
        "searchmenu-exists": "'''Es gidd a Seidn, däi wou´n Nooma „[[:$1]]“ hodd.'''",
        "searchmenu-new": "'''Derschdell dai Seidn „[[:$1]]“ in diesn Wigi.'''",
        "searchprofile-articles": "Inhaldsseidn",
-       "searchprofile-project": "Hilf- un Brojegdseidn",
        "searchprofile-images": "Muldimedia",
        "searchprofile-everything": "Alls",
        "searchprofile-advanced": "Erweiderd",
        "searchprofile-articles-tooltip": "Soung in $1",
-       "searchprofile-project-tooltip": "Soung in $1",
        "searchprofile-images-tooltip": "Nach Daddein soung",
        "searchprofile-everything-tooltip": "Gsamdn Inhald durchsoung (aa Disgussionsseidn)",
        "searchprofile-advanced-tooltip": "Soung in weidere Namensraim",
        "search-interwiki-default": "Af $1 gfundn:",
        "search-interwiki-more": "(noch mäa´)",
        "search-relatedarticle": "Fârwande",
-       "searcheverything-enable": "In aln naamsrajm suuchn",
        "searchrelated": "fârwand",
        "searchall": "ale",
        "showingresults": "Hiâr {{PLURAL:$1|is '''1'''|sin '''$1'''}} Ärgääbnis , ôôgfangn baj numâr '''$2.'''",
-       "showingresultsnum": "Hiâr {{PLURAL:$3|is '''1''' |sin '''$3''' }} Ärgääbnis, oogfangn baj numâr '''$2.'''",
        "showingresultsheader": "{{PLURAL:$5|Ärgääbnis '''$1''' don '''$3'''|Ärgääbnis '''$1–$2''' fon '''$3'''}} fir '''$4'''",
        "search-nonefound": "Dsu dajna suuchfrôôchn is nigs gfundn wôrn.",
        "powersearch-legend": "Suuche mid mäa oogaam",
        "booksources-go": "Loos-suchng",
        "log": "Logbicher",
        "allpages": "Ale sajdn",
-       "alphaindexline": "$1 bis $2",
        "prevpage": "Fooriche sajdn ($1)",
        "allpagesfrom": "Sajdn ôôdsajchn ab:",
        "allpagesto": "Sajdn ôôdsajchn bis:",
        "tooltip-undo": "Hiir glign machd dii aane ändärung riggängich un dsajchd dan ôô, wiis dan ausschaua dääd. Dann koosd aa no â dsamfassung wisoo un warum dâdsuuschrajm.",
        "tooltip-summary": "Gib a korze Zammfassung ei.",
        "common.css": "/* CSS hiir beâjflusd ale schelfn */",
-       "cologneblue.css": "/* CSS hiir beâjflusd nôr dii Kölnisch-Blau-schelfn. Wen'd ale uf ôômôôl beâjflusn wilsch, muâsch an MediaWiki:Common.css was ändârn. */",
-       "monobook.css": "/* CSS hiir beâjflusd nôr dii Monobook-schelfn. Wen'd ale uf ôômôôl beâjflusn wilsch, muâsch an MediaWiki:Common.css was ändârn. */",
-       "modern.css": "/* CSS hiir beâjflusd nôr dii Modern-schelfn. Wen'd ale uf ôômôôl beâjflusn wilsch, muâsch an MediaWiki:Common.css was ändârn. */",
-       "vector.css": "/* CSS hiir beâjflusd nôr dii Vector-schelfn. Wen'd ale uf ôômôôl beâjflusn wilsch, muâsch an MediaWiki:Common.css was ändârn. */",
        "print.css": "/* CSS hiir beâjflusd nôr dii drugausgaawe. */",
        "common.js": "/* Des folchende JavaScript wird fir ale benudsâr glôôdn un fir ale sajdn, dii se ôôgugn. */",
        "previousdiff": "← Dsur foorichn fârändârung",
index ecc53f1..b073f11 100644 (file)
        "qbmyoptions": "Pads obik",
        "faq": "Säks suvo pasäköls",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Lüükön yegädi",
-       "vector-action-delete": "Moükön",
-       "vector-action-move": "Topätükön",
-       "vector-action-protect": "Jelön",
-       "vector-action-undelete": "Sämoükön",
-       "vector-action-unprotect": "Votükön jeli",
-       "vector-view-create": "Jafön",
-       "vector-view-edit": "Redakön",
-       "vector-view-history": "Logön jenotemi",
-       "vector-view-view": "Reidön",
-       "vector-view-viewsource": "Logön fonäti",
        "actions": "Dunots",
        "namespaces": "Nemaspads",
        "errorpagetitle": "Pöl",
        "editundo": "sädunön",
        "searchresults": "Sukaseks",
        "searchresults-title": "Sukaseks pro: \"$1\"",
-       "toomanymatches": "Pads tu mödiks labü vöd(s) pesuköl petuvons. Sukolös vödi(s) votik.",
        "titlematches": "Leigon ko padatiäd",
        "textmatches": "Leigon ko dil padavödema",
        "notextmatches": "Leigon ko nos in padavödem",
        "searchmenu-exists": "'''Dabinon pad labü nem: \"[[:$1]]\" su vük at'''",
        "searchmenu-new": "'''Jafolös padi: \"[[:$1]]\" su vük at!'''",
        "searchprofile-articles": "Ninädapads",
-       "searchprofile-project": "Yufa e Proyegapads",
        "searchprofile-images": "Mödamedäd",
        "searchprofile-everything": "Valikos",
        "searchprofile-advanced": "Paramets pluik",
        "searchprofile-articles-tooltip": "Sukön in $1",
-       "searchprofile-project-tooltip": "Sukön in $1",
        "searchprofile-images-tooltip": "Sukön ragivis",
        "searchprofile-everything-tooltip": "Sukön in ninäd lölik (keninükamü bespikapads)",
        "searchprofile-advanced-tooltip": "Sukön in nemaspads patik",
        "search-interwiki-default": "Seks se $1:",
        "search-interwiki-more": "(pluikos)",
        "search-relatedarticle": "Tefik",
-       "searcheverything-enable": "Sukolöd in nemaspads valik",
        "searchrelated": "tefik",
        "searchall": "valik",
        "showingresults": "Pajonons dono jü {{PLURAL:$1|sukasek '''1'''|sukaseks '''$1'''}}, primölo me nüm #'''$2'''.",
-       "showingresultsnum": "Dono pajonons {{PLURAL:$3:|sek '''1'''|seks '''$3'''}}, primölo me nüm: '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Sek: '''$1''' se '''$3'''|Seks: '''$1 - $2''' se '''$3'''}} pro '''$4'''",
        "search-nonefound": "Sukaseks nonik dabinons.",
        "powersearch-legend": "Suk komplitikum",
        "allowemail": "Fägükolös siti ad getön poti leäktronik de gebans votik",
        "prefs-searchoptions": "Suk",
        "prefs-namespaces": "Nemaspads",
-       "defaultns": "Votiko sukolös in nemaspads at:",
        "default": "stad kösömik",
        "prefs-files": "Ragivs",
        "prefs-custom-css": "CSS nekösömik",
        "prefs-custom-js": "JavaScript nekösömik",
        "youremail": "Ladet leäktronik *:",
        "username": "{{GENDER:$1|Gebananem}}:",
-       "uid": "{{GENDER:$1|Gebanadientif}}:",
        "prefs-memberingroups": "{{GENDER:$2|Liman}} {{PLURAL:$1|grupa|grupas}}:",
        "prefs-registration": "Tim registarama:",
        "yourrealname": "Nem jenöfik *:",
        "logempty": "No dabinons notets in jenotalised at.",
        "log-title-wildcard": "Sukön tiäds primöl me:",
        "allpages": "Pads valik",
-       "alphaindexline": "$1 jü $2",
        "nextpage": "Pad sököl ($1)",
        "prevpage": "Pad büik ($1)",
        "allpagesfrom": "Jonolöd padis, primöl me:",
        "tooltip-undo": "\"Sädunön bali\" sädunon redakami at e maifükön redakamafometi as büologed.\nDälon läükami koda.",
        "tooltip-summary": "Penolös pläni brefik",
        "common.css": "/** El CSS isio peplädöl pogebon pro padafomäts valik */",
-       "monobook.css": "/* El CSS isio pepladöl otefon gebanis padafomäta: Monobook */",
        "common.js": "/* El JavaScript isik alseimik pogebon pro gebans valik pö padilogam valik. */",
        "anonymous": "{{PLURAL:$1|Geban|Gebans}} nennemik ela {{SITENAME}}",
        "siteuser": "Geban ela {{SITENAME}}: $1",
index c1aeb63..3154416 100644 (file)
        "qbpageoptions": "Kase cülci",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Vassõn teema",
-       "vector-action-delete": "Pühi",
-       "vector-action-move": "Liikut",
-       "vector-action-protect": "Varjaa",
-       "vector-view-create": "Loo cülci",
-       "vector-view-edit": "Muuttaa",
-       "vector-view-history": "Istori",
-       "vector-view-view": "Lukõa",
-       "vector-view-viewsource": "Lähtekoodi",
        "actions": "Tekod",
        "namespaces": "Nimiruumid",
        "variants": "Variandid",
        "searchmenu-exists": "Kazez viki-projeektaz on lehocülci «[[:$1]]» õõmaz",
        "searchmenu-new": "Tehä lehocülci «[[:$1]]» senez viki-projeektaz!",
        "searchprofile-articles": "Pääcülcid",
-       "searchprofile-project": "Selvitühse ja projeekta lehocülled",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Kõik",
        "searchprofile-advanced": "Lizätez",
        "searchprofile-articles-tooltip": "Etsi \"$1\":az",
-       "searchprofile-project-tooltip": "Etsi \"$1\":az",
        "searchprofile-images-tooltip": "Failõje õttsigo",
        "searchprofile-everything-tooltip": "Õttsigo kõikill lehocüllill (ceskussõõmizõ lehocülled siällhulgaz)",
        "searchprofile-advanced-tooltip": "Annõttu nimije tiloiz õttsia",
        "booksources-go": "Mee",
        "log": "Logid",
        "allpages": "Kõik artikkelid",
-       "alphaindexline": "$1 ... $2",
        "prevpage": "Entin сülсi ($1)",
        "allpagesfrom": "Сüľľelt",
        "allpagesto": "Сüľľessaa",
index 19909f8..b942a82 100644 (file)
        "qbmyoptions": "Mu säädmiseq",
        "faq": "Sagõhõhe küsüdüq küsümiseq",
        "faqpage": "Project:KKK",
-       "vector-action-addsection": "Vahtsõ teema ülespandminõ",
-       "vector-action-delete": "Kistudaq ärq",
-       "vector-action-move": "Nõstaq ümbre",
-       "vector-action-protect": "Kaidsaq",
-       "vector-action-undelete": "Tiiq tagasi",
-       "vector-action-unprotect": "Muudaq kaidsõt",
-       "vector-view-create": "Luuq",
-       "vector-view-edit": "Toimõndaq",
-       "vector-view-history": "Näütäq aoluku",
-       "vector-view-view": "Loeq",
-       "vector-view-viewsource": "Kaeq lätteteksti",
        "actions": "Tallitusõq",
        "namespaces": "Nimeruumiq",
        "variants": "Tõõsõndiq",
        "searchmenu-exists": "'''Lehekülg päälkiräga \"[[:$1]]\" om olõman.''' {{PLURAL:$2|0=|Kaeq ka tõisi otsmistulõmit.}}",
        "searchmenu-new": "'''Luuq leht päälkiräga \"[[:$1]]\".'''",
        "searchprofile-articles": "Sisuleheq",
-       "searchprofile-project": "Abi- ja projektileheq",
        "searchprofile-images": "Multimeediä",
        "searchprofile-everything": "Kõik",
        "searchprofile-advanced": "Täpsämb otsminõ",
        "searchprofile-articles-tooltip": "Otsiq nimeruumist $1",
-       "searchprofile-project-tooltip": "Otsiq nimeruumõst $1",
        "searchprofile-images-tooltip": "Teedüstü otsminõ",
        "searchprofile-everything-tooltip": "Otsiq egält puult (ka arotuslehti päält)",
        "searchprofile-advanced-tooltip": "Otsiq etteannõtuist nimeruumõst",
        "searchrelated": "samasugunõ",
        "searchall": "kõik",
        "showingresults": "{{PLURAL:$1|'''Üts''' tulõmus|'''$1''' tulõmust}} (tulõmusõst '''$2''' pääle).",
-       "showingresultsnum": "Näüdätäs {{PLURAL:$3|'''1''' tulõmus|'''$3''' tulõmust}} tulõmusõst #'''$2''' pääle.",
        "showingresultsheader": "{{PLURAL:$5|'''$1''' '''$3'''-st vastussõst|Vastusõq '''$1–$2''' '''$3'''-st}} perräküsümisele '''$4'''",
        "search-nonefound": "Perräküsümisele löüdä-äs vastust.",
        "powersearch-legend": "Laendõt otsminõ",
        "servertime": "Serveri aig",
        "guesstimezone": "Võtaq aig võrgokaejast",
        "allowemail": "Lupaq tõisil pruukjil mullõ e-posti saataq",
-       "defaultns": "Otsiq vaikimiisi naist nimeruumõst:",
        "default": "vaikimiisi",
        "prefs-files": "Teedüstüq",
        "youremail": "Suq e-posti aadrõs *",
        "username": "Pruukjanimi:",
-       "uid": "Pruukjanummõr:",
        "prefs-memberingroups": "Kuulus {{PLURAL:$1|rühmä|rühmihe}}:",
        "yourrealname": "Peris nimi *",
        "yourlanguage": "Pruukjapalgõ kiil:",
        "logempty": "Muutmisnimekirän olõ-i sääntsit kiräkotussit.",
        "log-title-wildcard": "Otsiq päälkirjo, miä alostasõq taa tekstiga",
        "allpages": "Kõik artikliq",
-       "alphaindexline": "$1 kooniq $2",
        "nextpage": "Järgmäne lehekülg ($1)",
        "prevpage": "Mineväne lehekülg ($1)",
        "allpagesfrom": "Nakkaq näütämä lehekülest:",
        "tooltip-undo": "\"Võtaq tagasi\" tege seo muutmisõ tühäs ja tege lehe kaemisaknõn vallalõ.\nKokkovõttõria pääle või kirotaq tagasivõtmisõ põhjusõ.",
        "tooltip-summary": "Kirodaq lühkü kokkovõtõq",
        "common.css": "/* Taa lehe pääl om tervet taad vikit muutvit kujonduisi */",
-       "monobook.css": "/* Taa lehe pääl om Monobook-vällänägemist muutvit kujonduisi. */",
        "common.js": "/* Taa lehe kuud pandas mano egäle lehelaatmisõlõ */",
-       "monobook.js": "/* Olõi soovitõt; pruugiq [[MediaWiki:common.js]] */",
        "anonymous": "{{SITENAME}} {{PLURAL:$1|nimeldä pruukja|nimeldä pruukjaq}}",
        "siteuser": "{{SITENAME}} pruukja $1",
        "lastmodifiedatby": "Taad lehte toimõnd' viimäte ”$3” $2 kell $1.",
        "spambot_username": "MediaWiki prahihäötäjä",
        "spam_reverting": "Tagasi pööret viimädse kujo pääle, koh olõ-i linke lehele $1",
        "spam_blanking": "Kõigin kujõn oll' linke lehele $1. Leht tühäs tett.",
-       "skinname-cologneblue": "Array",
        "markaspatrolleddiff": "Märgiq ülekaetus",
        "markaspatrolledtext": "Märgiq toimõndus ülekaetus",
        "markedaspatrolled": "Märgit ülekaetus",
index 13ea5e4..6b870e7 100644 (file)
        "qbedit": "Candjî",
        "qbpageoptions": "Cisse pådje ci",
        "qbmyoptions": "Mes pådjes",
-       "vector-action-addsection": "Radjouter on sudjet",
-       "vector-action-delete": "Disfacer",
-       "vector-action-move": "Displaecî",
-       "vector-action-protect": "Protedjî",
-       "vector-action-undelete": "Rapexhî",
-       "vector-action-unprotect": "Candjî l' protedjaedje",
-       "vector-view-create": "Ahiver",
-       "vector-view-edit": "Candjî",
-       "vector-view-history": "Vey l' istwere",
-       "vector-view-view": "Lére",
-       "vector-view-viewsource": "Vey côde sourdant",
        "actions": "Accions",
        "namespaces": "Espåces di lomaedje",
        "variants": "Variantes",
        "searchmenu-exists": "'''Gn a ddja ene pådje lomêye « [[:$1]] » so ç' wiki ci'''",
        "searchmenu-new": "'''Ahiver l' pådje \"[[:$1]]\" so ç' wiki ci!'''",
        "searchprofile-articles": "Pådjes di contnou",
-       "searchprofile-project": "Pådjes d' aidance et do pordjet",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tote li waibe",
        "searchprofile-advanced": "Sipepieus",
        "searchprofile-articles-tooltip": "Cweri dins $1",
-       "searchprofile-project-tooltip": "Cweri dins $1",
        "searchprofile-images-tooltip": "Cweri après des fitchîs multimedia",
        "searchprofile-everything-tooltip": "Cweri tot avå l' waibe (dins tos les espåces di lomaedje eyet leu pådjes di copene)",
        "searchprofile-advanced-tooltip": "Tchoezixhoz les espåces di lomaedje ki vos vloz rwaitî pol cweraedje",
        "search-interwiki-more": "(dipus)",
        "searchall": "totafwait",
        "showingresults": "Chal pa dzo {{PLURAL:$1|'''1''' rizultat|'''$1''' rizultats}} a pårti do limero '''$2'''.",
-       "showingresultsnum": "Chal pa dzo {{PLURAL:$3|'''1''' rizultat|'''$3''' rizultats}} a pårti do limero '''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Rizultat '''$1'''|Rizultats '''$1 - $2'''}} foû di '''$3'' po '''$4'''",
        "search-nonefound": "N' a rén di çou ki vs cweroz après",
        "powersearch-legend": "Pus spepieus rcweraedjes",
        "allowemail": "Permete di rçure des emiles d' ôtes uzeus",
        "prefs-searchoptions": "Tchuzes di cweraedje",
        "prefs-namespaces": "Espåces di lomaedje",
-       "defaultns": "Oudonbén dins les spåces di nos shuvants:",
        "default": "prémetou",
        "prefs-files": "Fitchîs",
        "prefs-custom-css": "CSS a vosse môde",
        "prefs-emailconfirm-label": "Acertinaedje di l' emile:",
        "youremail": "Vost emile:",
        "username": "No d' elodjaedje:",
-       "uid": "Limero d' l' uzeu:",
        "prefs-memberingroups": "Mimbe {{PLURAL:$1|do groupe|des groupes}}:",
        "prefs-registration": "Date d' edjîstraedje:",
        "yourrealname": "Li vraiy no da vosse:",
        "logempty": "Rén n' corespond dins l' djournå.",
        "log-title-wildcard": "Cweri emey les tites ki cmincèt avou ç' tecse la",
        "allpages": "Totes les pådjes",
-       "alphaindexline": "di $1 a $2",
        "nextpage": "Pådje shuvante ($1)",
        "allpagesfrom": "Håyner les pådjes a pårti di:",
        "allpagesto": "Håyner les pådjes disk' a:",
        "tooltip-undo": "Li loyén «{{int:editundo}}» permete di disfé li candjmint et drouve li boesse di candjmint e môde prévoeyaedje.\nDj' ô bén, ça permete di disfé l' candjmint et d' mete on messaedje dins l' boesse di rascourti.",
        "tooltip-summary": "Dinez on ptit rascourti",
        "common.css": "/* li côde CSS metou chal serè eployî pa totes les peas et tos les uzeus */",
-       "monobook.css": "/* li côde CSS metou chal serè eployî pa tos les uzeus eployant l' pea «monobook» */",
        "anonymous": "{{PLURAL:$1|Uzeu anonime|Uzeus anonimes}} di {{SITENAME}}",
        "siteuser": "$1, {{GENDER:$2|uzeu d'|uzeuse di}} {{SITENAME}}",
        "anonuser": "$1, uzeu anonime di {{SITENAME}}",
index d9a83f7..6b032f6 100644 (file)
        "qbmyoptions": "Akon mga pakli",
        "faq": "AGG",
        "faqpage": "Project:AGG",
-       "vector-action-addsection": "Igdugang hin himangrawon",
-       "vector-action-delete": "Para-a",
-       "vector-action-move": "Balhina",
-       "vector-action-protect": "Panalipda",
-       "vector-action-undelete": "Igbalik an ginpara",
-       "vector-action-unprotect": "Liwani an panalipod",
-       "vector-view-create": "Himo-a",
-       "vector-view-edit": "Igliwat",
-       "vector-view-history": "Kitaa an kaagi",
-       "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",
        "diff-multi-manyusers": "({{PLURAL:$1|Uska sapit-nahiuna nga rebisyon|$1 nga mga sapit-nanhiuna nga rebisyon}} nga may labaw nga $2 {{PLURAL:$2|gumaramit|mga gumaramit}} in diri ginpapakita)",
        "searchresults": "Mga nabilingan han pagbiling",
        "searchresults-title": "Mga nabilngan han pagbiling para han \"$1\"",
-       "toomanymatches": "Sobra kadamo nga mga igo an ginbalik, alayon pagbuhat hin iba nga pakiana",
        "titlematches": "Parehas an titulo han pakli",
        "textmatches": "Parehas an teksto han pakli",
        "notextmatches": "Waray teksto han pakli an parehas",
index 74e59c4..665f693 100644 (file)
        "qbmyoptions": "Samay tànneef",
        "faq": "Laaj yi ëpp",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Yokkuw tëriit",
-       "vector-action-delete": "Far",
-       "vector-action-move": "Tuddewaat",
-       "vector-action-protect": "Aar",
-       "vector-action-undelete": "Delloowaat",
-       "vector-action-unprotect": "Aaradi",
-       "vector-view-create": "Sos",
-       "vector-view-edit": "Soppi",
-       "vector-view-history": "Wone jaar-jaaram",
-       "vector-view-view": "Jàng",
-       "vector-view-viewsource": "Wone gongikuwaayam",
        "actions": "Jëf",
        "namespaces": "Barabu tur",
        "variants": "Wuute",
        "editundo": "neenal",
        "searchresults": "Ngértey ceet gi",
        "searchresults-title": "Ngértey ceet gu \"$1\"",
-       "toomanymatches": "Dafa bari ay yem-yem. Soppil laaj bi.",
        "titlematches": "Koju xët yi ñoo yam",
        "textmatches": "Mbindu jukki yi ñoo yam.",
        "notextmatches": "Amul benn mbindu jukki bu yam ak ceet gi.",
        "searchmenu-exists": "'''wenn xët wu tudd « [[:$1]] » moo am ci bii wiki'''",
        "searchmenu-new": "'''Sosal xët wii di « [[:$1|$1]] » ci bii wiki !'''",
        "searchprofile-articles": "Xëti ëmbiit",
-       "searchprofile-project": "Xëti Ndimbal ak Sémb",
        "searchprofile-images": "Barixibaarukaay",
        "searchprofile-everything": "Lépp",
        "searchprofile-advanced": "Ceet gu xóot",
        "searchprofile-articles-tooltip": "Seet ci $1",
-       "searchprofile-project-tooltip": "Seet ci $1",
        "searchprofile-images-tooltip": "Seeti dencukaay",
        "searchprofile-everything-tooltip": "Seet fépp (ba ci xëti waxtaanuwaay yi)",
        "searchprofile-advanced-tooltip": "Seet ci barabi tur yi",
        "search-interwiki-default": "$1 ngérte :",
        "search-interwiki-more": "(yeneen)",
        "search-relatedarticle": "Yeneeni ngérte",
-       "searcheverything-enable": "Seet ci barabi tur yépp",
        "searchrelated": "yeneeni ngérte",
        "searchall": "yépp",
        "showingresults": "Woneg <b>$1</b> {{PLURAL:$1|ngérte|ciy ngérte}} doore ko ci #<b>$2</b>.",
-       "showingresultsnum": "Woneg <b>$3</b> {{PLURAL:$3|ngérte|ciy ngérte}} doore ko ci #<b>$2</b>.",
        "showingresultsheader": "{{PLURAL:$5|Ngérte '''$1''' bu '''$3'''|Ngértey '''$1 - $2'''}}  ngir '''$4'''",
        "search-nonefound": "Ceet gi jurul dara.",
        "powersearch-legend": "Ceet gu xóot",
        "allowemail": "Joxeel ndigël ngir  yeneeni jëfandikukat man laa yónne bataaxal",
        "prefs-searchoptions": "Tànneefi Ceet",
        "prefs-namespaces": "dig-digalub tur",
-       "defaultns": "Walla nga seet ci barabi tur yi:",
        "default": "wàccaale",
        "prefs-files": "Dencukaay",
        "prefs-custom-css": "CSS yees jëmmal",
        "prefs-emailconfirm-label": "Dëggalug sa m-bataaxal :",
        "youremail": "Sa màkkaanub m-bataaxal :",
        "username": "Turu jëfandikukat :",
-       "uid": "Limu Jëfandikukat :",
        "prefs-memberingroups": "Céru {{PLURAL:$1|mbooloo|mbooloo yu}} :",
        "prefs-registration": "Taariixu sag mbindu :",
        "yourrealname": "Sa tur dëgg*",
        "logempty": "Dara nekkul ci jaar-jaaru xët wii.",
        "log-title-wildcard": "Seet ay koj yu tambalee mii mbind",
        "allpages": "Xët yépp",
-       "alphaindexline": "$1 ba $2",
        "nextpage": "Xët wi toftal ($1)",
        "prevpage": "Xët wi jiitu ($1)",
        "allpagesfrom": "Wone xët yi tambalee ci:",
        "whatlinkshere-filters": "Seggukaay",
        "blockip": "Téyeb jëfandikukat",
        "blockip-legend": "Téye jëfandikukat bi",
-       "ipadressorusername": "Màkkaanu IP walla turu jëfandikukat:",
+       "ipaddressorusername": "Màkkaanu IP walla turu jëfandikukat:",
        "ipbexpiry": "Diiru téye gi",
        "ipbreason": "Ngirte :",
        "ipbreason-dropdown": "* Ngirtey téye yi ëpp\n** Ag caay-caay\n** Dugalub xibaar yu dëgguwul\n** Farug ëmbitu ay xët\n** Dugalub lëkkalekaay ngir yëgle ay dal\n** Dugalub ëmbit yu amul-njariñ\n** Di jéem a xiixaan walla di xuloo ak nit ñi\n** Ëppal ci sosi sàq yu bari\n** Turu jëfandikukat buñu fi nanguwul",
        "tooltip-rollback": "\"Delloowaat\" dafay neenal coppitey cërukat bi mujj ci xët wii ci benn cuq.",
        "tooltip-undo": "\"Neenal\" dafay far coppite yi te ubbi palanteeru coppite bi ci anamug wonendi.\nDafay tax nga man a bind ngirte li ci boyotu tënk bi.",
        "common.css": "/* CSS yiñ def fii dañuy am ay njeexit ci col yépp  */",
-       "cologneblue.css": "/* CSS yiñ def fii dañuy am ay njeexit ci jëfandikukatu col gu Cologne Blue */",
-       "monobook.css": "/* CSS yiñ def fii dañuy am ay njeexit ci jëfandikukatu col gu Monobook. */",
-       "modern.css": "/* CSS yiñ def fii dañuy am ay njeexit ci jëfandikukatu col gu Modern */",
        "common.js": "/* Bépp JavaScript buñ fi duggal, xët yéppa koy yeb ak jëfandikukat bumu manti doon. */",
-       "cologneblue.js": "/* Bépp JavaScript buñ fi duggal jëfandikukat yiy jëfandikoo col gu Cologne Blue keppa koy yeb */",
-       "monobook.js": "/*Bépp JavaScript buñ fi duggal jëfandikukat yiy jëfandikoo col gu Monobook keppa koy yeb. */",
-       "modern.js": "/* Bépp JavaScript buñ fi duggal jëfandikukat yiy jëfandikoo col gu Modern keppa koy yeb */",
        "anonymous": "Benn walla ay jëfandikukat yu binduwul yu {{SITENAME}}",
        "siteuser": "$1, Jëfandikukatu {{SITENAME}}",
        "lastmodifiedatby": "$3 moo mujje soppi xët wi ci $1, ci $2.",
index 121950a..a9aaf52 100644 (file)
@@ -11,7 +11,8 @@
                        "乌拉跨氪",
                        "十弌",
                        "아라",
-                       "Mywood"
+                       "Mywood",
+                       "Cwek"
                ]
        },
        "tog-underline": "鏈接下橫線:",
        "qbmyoptions": "我頁",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "加話題",
-       "vector-action-delete": "刪",
-       "vector-action-move": "移",
-       "vector-action-protect": "保",
-       "vector-action-undelete": "弗刪",
-       "vector-action-unprotect": "换保护状态",
-       "vector-view-create": "建",
-       "vector-view-edit": "编",
-       "vector-view-history": "望页史",
-       "vector-view-view": "读",
-       "vector-view-viewsource": "望源码",
        "actions": "动作",
        "namespaces": "名字空间",
        "variants": "变量",
        "searchrelated": "相关",
        "searchall": "全部",
        "showingresults": "下头显示从第<b>$2</b>条开始个<b>$1</b>条结果:",
-       "showingresultsnum": "下头显示从第<b>$2</b>条开始个<b>$3</b>条结果:",
        "showingresultsheader": "对'''$4'''个{{PLURAL:$5|第'''$1'''至第'''$3'''项结果|第'''$1-$2'''项,共'''$3'''个结果}}",
        "search-nonefound": "查询呒有结果。",
        "powersearch-legend": "高级搜索",
index 0cd9595..596b8d7 100644 (file)
        "qbmyoptions": "Тана халхс",
        "faq": "Юм би",
        "faqpage": "Project:Юм би",
-       "vector-action-addsection": "Төриг немх",
-       "vector-action-delete": "Һарһх",
-       "vector-action-move": "Көндәх",
-       "vector-action-protect": "Харсх",
-       "vector-action-undelete": "Һарһх биш",
-       "vector-action-unprotect": "Харсх биш",
-       "vector-view-create": "Бүтәх",
-       "vector-view-edit": "Чиклх",
-       "vector-view-history": "Тууҗин хәләвр",
-       "vector-view-view": "Умшлһн",
-       "vector-view-viewsource": "Темдгллһнә хәләвр",
        "actions": "Үүлд",
        "namespaces": "Нернә ус",
        "variants": "Суңһлтс",
        "nextn": "дарук {{PLURAL:$1|$1}}",
        "viewprevnext": "Гүүһәд хәләх ($1 {{int:pipe-separator}} $2) ($3)",
        "searchprofile-articles": "Зүүлс",
-       "searchprofile-project": "Цәәлһлһнә болн төсвин халхс",
        "searchprofile-images": "Үзгдл-соңсвр",
        "searchprofile-everything": "Цуһар",
        "searchprofile-articles-tooltip": "$1 гидг зүүлд хәәх",
-       "searchprofile-project-tooltip": "$1 гидг төсвд хәәх",
        "searchprofile-images-tooltip": "Боомг хәәх",
        "search-result-size": "$1 ({{PLURAL:$2|$2 үг|$2 үгмүд|$2 үгмүд}})",
        "search-result-score": "Әдлцән: $1 %",
        "search-interwiki-caption": "Садта проектмуд",
        "search-interwiki-default": "$1 ашуд:",
        "search-interwiki-more": "(дәкәд)",
-       "searcheverything-enable": "Цуг нернә ууд хәәх",
        "searchall": "цуг",
        "powersearch-legend": "Күчн хәәлһн",
        "powersearch-ns": "Эн нернә у дотран хәәх:",
        "prefs-emailconfirm-label": "E-mail батлһн:",
        "youremail": "E-mail хайг:",
        "username": "Демнчна нер:",
-       "uid": "Демнчна тойг (ID):",
        "prefs-memberingroups": "{{PLURAL:$1|1=Багин|Багдудин}} хүв:",
        "prefs-registration": "Темдглҗ  бүртклһнә цаг:",
        "yourrealname": "Үнн нерн:",
        "booksources-go": "Ор",
        "log": "Сеткүлс",
        "allpages": "Цуг халхс",
-       "alphaindexline": "$1 хөөн, $2 күртл",
        "prevpage": "Урдк халх ($1)",
        "allpagesfrom": "Эн эклцта халхс асрх:",
        "allpagesto": "Энд асрлһиг зогсх:",
index ecf364b..c8c247b 100644 (file)
        "qbpageoptions": "თე ხასჷლა",
        "qbmyoptions": "ჩქიმი ხასჷლეფი",
        "faq": "ბხშირი კითხვეფი",
-       "vector-action-addsection": "თემაშ მიშაძინა",
-       "vector-action-delete": "ლასუა",
-       "vector-action-move": "გინოღალა",
-       "vector-action-protect": "თხილუა",
-       "vector-view-create": "დორსხუაფა",
-       "vector-view-edit": "რედაქტირაფა",
-       "vector-view-history": "ისტორიაშ ძირაფა",
-       "vector-view-view": "კითხირი",
-       "vector-view-viewsource": "ქიძირე წყუ",
        "actions": "მოქმედალეფი",
        "namespaces": "ჯოხოეფიშ ოფირჩა",
        "variants": "ვარიანტეფი",
        "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": "გორუა მახვარებუშ გენჭყილ ჯოხოეფიშ ოფირჩას",
        "log": "ჟურნალეფ",
        "all-logs-page": "ირ ჟურნალ",
        "allpages": "არძა ხასილა",
-       "alphaindexline": "$1-იშე $2-შა",
        "nextpage": "უკულ ხასილა ($1)",
        "prevpage": "წოხლენ ხასილა ($1)",
        "allpagesfrom": "გეგმარჩქინ ხასილეფ დოჭყაფილ:",
index 6c632a1..c7d6f91 100644 (file)
        "qbmyoptions": "מיינע בלעטער",
        "faq": "מערסטע געפרעגטע פראגעס",
        "faqpage": "Project:מערסטע געפרעגט פראגעס",
-       "vector-action-addsection": "צושטעלן טעמע",
-       "vector-action-delete": "אויסמעקן",
-       "vector-action-move": "באַוועגן",
-       "vector-action-protect": "שיצן",
-       "vector-action-undelete": "מבטל זיין אויסמעקן",
-       "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": "נאוויגאציע מעניו",
        "undo-summary-username-hidden": "זײַט מבטל ווערסיע $1 פון א באהאלטענעם באניצער",
        "cantcreateaccounttitle": "מען קען נישט באשאפֿן קאנטע",
        "cantcreateaccount-text": "שאפֿן קאנטעס פון דעם IP אדרעס (<b>$1</b>) איז געווארן בלאקירט דורך [[User:$3|$3]]. די סיבה געגעבן פֿון $3 איז \"$2\".",
+       "cantcreateaccount-range-text": "שאפן קאנטעס פון IP אדרעסן אינעם אפשטאנד '''$1''', וואס נעמט אײַן אײַער IP אדרעס ('''$4'''), איז בלאקירט געווארן דורך [[User:$3|$3]].\n\nדער גרונט געגעבן פון $3 איז ''$2''",
        "viewpagelogs": "װײַזן לאָג-ביכער פֿאַר דעם בלאַט",
        "nohistory": "נישטא קיין ענדערן היסטאריע פאר דעם בלאט.",
        "currentrev": "איצטיגע ווערסיע",
        "revdelete-text-text": "אויסגעמעקטע ווערסיעס וועלן נאך דערשיינען אין דער בלאט־היסטאריע, אבער טייל פון זייער אינהאלט וועט נישט זײַן צוגאנגבאר צום עולם.",
        "revdelete-text-file": "אויסגעמעקטע טעקע ווערסיעס וועלן נאך דערשיינען אין דער בלאט־היסטאריע, אבער טייל פון זייער אינהאלט וועט נישט זײַן צוגאנגבאר צום עולם.",
        "logdelete-text": "אויסגעמעקטע לאגביכער־געשעענישן וועלן נאך דערשיינען אינעם לאגבוך, אבער טייל פון זייער אינהאלט וועט נישט זײַן צוגאנגבאר צום עולם.",
+       "revdelete-text-others": "אנדערע סיסאפן ביי {{SITENAME}} וועלן נאך קענען צוקומען צום באהאלטענעם אינהאלט און קענען אים צוריקשטעלן דורכן זעלבן אייבערפלאך, סײַדן ווען מען שטעלט נאך באשרענקונגען.",
        "revdelete-confirm": "זייט אזוי גוט און באשטעטיקט אז דאס איז טאקע אייער כוונה, אז איר פארשטייט די קאנסעקווענצן, און אז איר טוט דאס לויט  [[{{MediaWiki:Policy-url}}|דער פאליסי]].",
        "revdelete-suppress-text": "אונטערדרוקן זאל בלויז גענוצט ווערן '''נאר''' אין די פאלגנדע פעלער:\n* אינפארמאציע וואס קען זיין מוציא שם רע\n* אויפדעקונג פון פריוואטקייט אינפארמאציע\n*: ''היים אדרעסן, טעלעפאן נומערן, נאציאנאלע אידענטיפיקאציע נומערן, א.א.וו.''",
        "revdelete-legend": "שטעלט ווייזונג באגרענעצונגען",
        "searchrelated": "פארבינדן",
        "searchall": "אלץ",
        "showingresults": "ווייזן ביז {{PLURAL:$1|רעזולטאט '''איינס'''|'''$1''' רעזולטאטן}} אנגעפאנגן פון נומער #'''$2''':",
-       "showingresultsnum": "ווייזן {{PLURAL:$3|רעזולטאט '''איינס'''|'''$3''' רעזולטאטן}} אנגעפאנגן פון נומער #'''$2''':",
        "showingresultsheader": "{{PLURAL:$5|רעזולטאַט '''$1''' פֿון '''$3'''| רעזולטאַטן '''$1 - $2''' פֿון '''$3'''}} פֿאַר '''$4'''",
        "search-nonefound": "נישטא קיין רעזולטאטן פֿאַר דער שאלה.",
        "powersearch-legend": "ווײַטהאלטן זוכן",
        "recentchanges-feed-description": "גייט נאך די לעצטע ענדערונגען צו דער וויקי אין דעם בלאט.",
        "recentchanges-label-newpage": "די רעדאַקטירונג האט באשאפֿן א נײַעם בלאַט",
        "recentchanges-label-minor": "דאָס איז אַ מינערדיקע רעדאַקטירונג",
-       "recentchanges-label-bot": " די רעדאַקטירונג האט אויסגעפירט א באט",
+       "recentchanges-label-bot": "די רעדאַקטירונג האט אויסגעפירט א באט",
        "recentchanges-label-unpatrolled": "די רעדאקטירונג איז נאך נישט נאכגעקוקט",
        "recentchanges-label-plusminus": "בלאט גרייס געענדערט מיט דער צאל בייטן",
        "recentchanges-legend-heading": "'''לעגענדע:'''",
        "windows-nonascii-filename": "די וויקי שטיצט נישט טעקע־נעמען מיט ספעציעלע צייכענען.",
        "fileexists": "א טעקע מיט דעם נאָמען עקזיסטירט שוין, ביטע זײַט בודק <strong>[[:$1]]</strong> ווען {{GENDER:|איר}} זענט נישט זיכער אַז איר ווילט אים ענדערן.\n[[$1|thumb]]",
        "filepageexists": "דער באשרייבונג בלאט פאר דער דאזיקער טעקע האט מען שוין געשאפן ביי <strong>[[:$1]]</strong>, אבער ס'עקזיסטירט נישט קיין טעקע מיט דעם נאמען.\nדי רעזומע וואס איר קלאפט אריין וועט זיך נישט באווייזן אויפן באשרייבונג בלאט.\nכדי צו שאפן אז אייער רעזומע וועט זיך טאקע באווייזן דארט, דארפט איר רעדאקטירן זי האנטווייז.\n[[$1|thumb]]",
-       "fileexists-extension": "×\90 ×\98עקע ×\9e×\99×\98 ×\90×\9f ×¢× ×\9c×¢×\9b×\9f × ×\90×\9e×¢×\9f ×¢×§×\96×\99ס×\98×\99ר×\98 ×©×\95×\99×\9f: [[$2|thumb]]\n* × ×\90×\9e×¢×\9f ×¤×\95×\9f ×\93ער ×\98עקע ×\95×\95×\90ס ×\95×\95ער×\98 ×\90ר×\95×\99פ×\92×¢×\9c×\90Ö¸×\93×\9f: <strong>[[:$1]]</strong>\n* × ×\90×\9e×¢×\9f ×¤×\95×\9f ×\93ער ×¤Ö¿×\90ר×\90נענער ×\98עקע: <strong>[[:$2]]</strong>\n×\96ײַ×\98 ×\90×\96×\95×\99 ×\92×\95×\98 ×\90×\95×\9f ×§×\9c×\95×\99×\91×\98 ×\90×\9f ×\90× ×\93ער נאמען.",
+       "fileexists-extension": "×\90 ×\98עקע ×\9e×\99×\98 ×\90×\9f ×¢× ×\9c×¢×\9b×\9f × ×\90×\9e×¢×\9f ×¢×§×\96×\99ס×\98×\99ר×\98 ×©×\95×\99×\9f: [[$2|thumb]]\n* × ×\90×\9e×¢×\9f ×¤×\95×\9f ×\93ער ×\98עקע ×\95×\95×\90ס ×\95×\95ער×\98 ×\90ר×\95×\99פ×\92×¢×\9c×\90Ö¸×\93×\9f: <strong>[[:$1]]</strong>\n* × ×\90×\9e×¢×\9f ×¤×\95×\9f ×\93ער ×¤Ö¿×\90ר×\90נענער ×\98עקע: <strong>[[:$2]]</strong>\n×\90פשר ×\95×\95×\99×\9c×\98 ×\90×\99ר × ×\99צ×\9f ×\90 ×\9eער ×\90פש×\99×\99×\93× ×\93×\99ק×\9f נאמען.",
        "fileexists-thumbnail-yes": "די טעקע זעט אויס צו זײַן א פארקלענערט בילד  ''(קליין)''.\n[[$1|thumb]]\nזײַט אזוי גוט קאנטראלירט די טעקע <strong>[[:$1]]</strong>.\nווען די קאנטראלירטע טעקע איז דאס זעלבע בילד אין דער אריגינעלער גרייס ברויכט מען נישט ארויפלאדן נאך א פארקלענערט בילד.",
        "file-thumbnail-no": "דער טעקע־נאמען הייבט אן מיט <strong>$1</strong>.\nזי זעט אויס ווי א פארקלענערט בילד ''(מיניאטור)''.\nטאמער האט איר דאס בילד אין פולער רעזאלוציע טוט עס ארויפלאדן, אנדערשט זייט אזוי גוט און ענדערט דעם טעקע־נאמען.",
        "fileexists-forbidden": "א טעקע מיט דעם נאָמען עקזיסטירט שוין, און מען קען זי נישט אַריבערשרײַבן.\nאויב איר ווילט דאך אַרויפֿלאָדן אײַער טעקע, ביטע גיין צוריק און ניצן אַן אַנדער נאָמען.\n[[File:$1|thumb|center|$1]]",
        "backend-fail-connect": "מ'קען נישט פארבינדן צום שפייכלער־בעקענד \"$1\".",
        "backend-fail-internal": "אן אומבאוואוסטער פֿעלער האט פאסירט אין שפייכלער־בעקענד \"$1\".",
        "backend-fail-contenttype": "מ'קען נישט פעסטשטעלן דעם אינהאלט טיפ פון דער טעקע צו שפייכלערן ביי \"$1\".",
+       "filejournal-fail-dbquery": "נישט געווען מעגלעך צו דערהײַנטיקן די שזור אל־דאטנבאזע פארן אײַנשפײַכלערונג־רעזערוו \"$1\".",
        "lockmanager-notlocked": "מ'קען נישט אויפֿשליסן \"$1\"; ער איז נישט פֿארשלאסן.",
        "lockmanager-fail-closelock": "נישט מעגלעך פארשפארן שלאס טעקע פאר \"$1\".",
        "lockmanager-fail-deletelock": "נישט מעגלעך אויסמעקן שלאס טעקע פאר \"$1\".",
        "tooltip-preferences-save": "היטן פרעפֿערענצן",
        "tooltip-summary": "אײַנגעבן א קורצע רעזומע",
        "common.css": "/* CSS געשריבן דא וועט אפילירן און באיינפלוסן אלע סקינס */",
-       "monobook.css": "/* סטייל דא געלייגט וועט באאיינפלוסן דעם Monobook סקין */",
-       "vector.css": "/* CSS געשטעלט דא ווירקט נאר אויפן וועקטאר סקין */",
        "common.js": "/* אלע סקריפטן פון JavaScript דא געשריבן וועט לויפן פאר אלע באנוצער ווען זיי וועלן לאדירן דעם בלאט */",
        "anonymous": "{{PLURAL:$1|אַנאנימער באַניצער| אַנאנימע באַניצערס}} פֿון {{SITENAME}}",
        "siteuser": "באַניצער {{SITENAME}} $1",
        "pageinfo-category-pages": "צאָל בלעטער",
        "pageinfo-category-subcats": "צאָל אונטערקאטעגאריעס",
        "pageinfo-category-files": "צאָל טעקעס",
-       "skinname-monobook": "מאנאבוק",
-       "skinname-vector": "וועקטאר",
        "markaspatrolleddiff": "באצייכענען אלס פאטראלירט",
        "markaspatrolledtext": "באצייכענען בלאט אלס פאטראלירט",
        "markedaspatrolled": "באצייכנט אלס פאטראלירט",
        "duplicate-defaultsort": "'''ווארענונג:''' גרונט סארטשליסל \"$2\" פֿאָרט איבערן פֿריערדיגן גרונט סארטשליסל \"$1\".",
        "version": "ווערסיע",
        "version-extensions": "אינסטאלירטע פארברייטערונגען",
+       "version-skins": "אינסטאלירטע באניצער־אייבערפלאכן",
        "version-specialpages": "ספעציעלע בלעטער",
        "version-parserhooks": "פארזער פארברייטונגען",
        "version-variables": "וואַריאַבלען",
        "version-antispam": "ספאם פארמיידן",
-       "version-skins": "באניצער־אייבערפלאכן",
        "version-other": "אנדער",
        "version-hooks": "Hook סטרוקטורן",
        "version-parser-extensiontags": "פארזער פארברייטערן טאַגן",
index b1fc906..a67e3d9 100644 (file)
        "qbmyoptions": "Àwọn ojúewé mi",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "Àfikún orí-ọ̀rọ̀",
-       "vector-action-delete": "Ìparẹ́",
-       "vector-action-move": "Ìyípòdà",
-       "vector-action-protect": "Àbò",
-       "vector-action-undelete": "Ìmúkúrò ìparẹ́",
-       "vector-action-unprotect": "Ìyípadà àbò",
-       "vector-view-create": "Ṣ'èdá",
-       "vector-view-edit": "Àtúnṣe",
-       "vector-view-history": "Wo ìtàn",
-       "vector-view-view": "Àwòkà",
-       "vector-view-viewsource": "Wo àmìọ̀rọ̀",
        "actions": "Àwọn ìgbéṣe",
        "namespaces": "Àwọn orúkọàyè",
        "variants": "Àwọn oriṣiríṣi",
        "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'''.",
-       "showingresultsnum": "Ìfihàn nísàlẹ̀ {{PLURAL:$3|èsì '''1'''|àwọn èsì '''$3'''}} láti ìbẹ̀rẹ̀ ní #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Èsì '''$1''' nínú ''''$3'''|Àwọn èsì '''$1 - $2''' nínú '''$3'''}} fún '''$4'''",
        "search-nonefound": "Kò sí àwọn èsì kankan tóbáramu mọ́ ìtọrọ.",
        "powersearch-legend": "Àwárí kíkúnrẹ́rẹ́",
index ad83548..821f78c 100644 (file)
        "tog-hidepatrolled": "響最近修改度隱藏巡查過嘅編輯",
        "tog-newpageshidepatrolled": "響新頁清單度隱藏巡查過嘅版",
        "tog-extendwatchlist": "展開監視清單去顯示全部更改,唔係淨係最新嘅",
-       "tog-usenewrc": "用強化版最近更改(需要JavaScript)",
+       "tog-usenewrc": "最近修改同監視清單顯示群組修改",
        "tog-numberheadings": "標題自動編號",
        "tog-showtoolbar": "顯示修改工具列",
        "tog-editondblclick": "撳兩下改嘢",
-       "tog-editsectiononrightclick": "可以撳右掣更改個別段落(需要JavaScript)",
-       "tog-watchcreations": "將我開嘅頁加入監視清單",
-       "tog-watchdefault": "將我修改嘅頁加入監視清單",
-       "tog-watchmoves": "將我移動嘅頁加入監視清單",
-       "tog-watchdeletion": "將我刪除嘅頁加入監視清單",
+       "tog-editsectiononrightclick": "可以撳右掣更改個別段落",
+       "tog-watchcreations": "å°\87æ\88\91é\96\8bå\98\85é \81å\90\8cä¸\8aå\82³å\98\85æª\94æ¡\88å\8a å\85¥ç\9b£è¦\96æ¸\85å\96®",
+       "tog-watchdefault": "å°\87æ\88\91ä¿®æ\94¹å\98\85é \81å\90\8cæª\94æ¡\88å\8a å\85¥ç\9b£è¦\96æ¸\85å\96®",
+       "tog-watchmoves": "å°\87æ\88\91移å\8b\95å\98\85é \81å\90\8cæª\94æ¡\88å\8a å\85¥ç\9b£è¦\96æ¸\85å\96®",
+       "tog-watchdeletion": "å°\87æ\88\91å\88ªé\99¤å\98\85é \81å\90\8cæª\94æ¡\88å\8a å\85¥ç\9b£è¦\96æ¸\85å\96®",
        "tog-minordefault": "預設全部編輯做小修改",
        "tog-previewontop": "喺修改欄上方顯示預覽",
        "tog-previewonfirst": "第一次修改時顯示預覽",
-       "tog-enotifwatchlistpages": "當響我張監視清單度嘅頁面有修改時電郵通知我",
+       "tog-enotifwatchlistpages": "當響我張監視清單度嘅頁面同檔案有修改時電郵通知我",
        "tog-enotifusertalkpages": "個人留言版有修改時電郵通知我",
-       "tog-enotifminoredits": "小修改都要電郵通知我",
+       "tog-enotifminoredits": "頁面同檔案小修改都要電郵通知我",
        "tog-enotifrevealaddr": "喺電郵通知信上面話畀人聽我嘅電郵地址",
        "tog-shownumberswatching": "顯示有幾多人監視",
        "tog-oldsig": "現有簽名:",
        "tog-fancysig": "將簽名以維基字對待(冇自動連結)",
-       "tog-uselivepreview": "用即時預覽(需要JavaScript)(實驗緊)",
+       "tog-uselivepreview": "用即時預覽(實驗緊)",
        "tog-forceeditsummary": "我冇入修改註解時通知我",
        "tog-watchlisthideown": "響監視清單度隱藏我嘅編輯",
        "tog-watchlisthidebots": "響監視清單度隱藏機械人嘅編輯",
        "newwindow": "(響新視窗度打開)",
        "cancel": "取消",
        "moredotdotdot": "更多...",
-       "mypage": "我嘅頁",
+       "mypage": "",
        "mytalk": "傾偈",
        "anontalk": "同呢個 IP 傾偈",
        "navigation": "導覽",
        "qbmyoptions": "我嘅選項",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "加主題",
-       "vector-action-delete": "剷走",
-       "vector-action-move": "搬",
-       "vector-action-protect": "保護",
-       "vector-action-undelete": "取消剷走",
-       "vector-action-unprotect": "解除保護",
-       "vector-view-create": "開",
-       "vector-view-edit": "改",
-       "vector-view-history": "睇吓歷史",
-       "vector-view-view": "閱",
-       "vector-view-viewsource": "睇吓原始碼",
        "actions": "動作",
        "namespaces": "空間名",
        "variants": "變換",
+       "navigation-heading": "導覽選單",
        "errorpagetitle": "出錯",
        "returnto": "返去$1 。",
        "tagline": "出自{{SITENAME}}",
        "permalink": "固定連結",
        "print": "印",
        "view": "去睇",
+       "view-foreign": "用 $1 睇",
        "edit": "改",
+       "edit-local": "改本地說明",
        "create": "開",
+       "create-local": "加本地說明",
        "editthispage": "改呢版",
        "create-this-page": "建立呢頁",
        "delete": "剷走",
        "deletethispage": "剷走呢版",
+       "undeletethispage": "反刪呢一版",
        "undelete_short": "取消剷走$1次修改",
        "viewdeleted_short": "去睇$1次刪除咗嘅修改",
        "protect": "保護",
        "protect_change": "改",
        "protectthispage": "保護呢頁",
-       "unprotect": "解除保護",
-       "unprotectthispage": "解除保護",
+       "unprotect": "保護",
+       "unprotectthispage": "改呢版保護",
        "newpage": "開新頁",
        "talkpage": "討論呢版",
        "talkpagelinktext": "傾偈",
        "articlepage": "睇目錄",
        "talk": "討論",
        "views": "去睇",
-       "toolbox": "工具箱",
+       "toolbox": "架撐",
        "userpage": "去睇用戶頁",
        "projectpage": "去睇專題頁",
        "imagepage": "去睇檔案頁",
        "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": "é\9f¿版度嘅內容係根據$1嘅條款發佈。",
+       "copyright": "é\99¤é\9d\9eå\8f¦å¤\96è¬\9bæ\98\8eï¼\8cé\9f¿å\91¢版度嘅內容係根據$1嘅條款發佈。",
        "copyrightpage": "{{ns:project}}:版權",
        "currentevents": "最近發生嘅事",
        "currentevents-url": "Project:最近發生嘅事",
        "ok": "OK",
        "retrievedfrom": "由 \"$1\" 收",
        "youhavenewmessages": "你有$1($2)。",
-       "newmessageslinkplural": "新訊息",
+       "youhavenewmessagesfromusers": "你有{{PLURAL:$3|另一位用戶|$3 位用戶}}畀你嘅 $1 ($2)。",
+       "youhavenewmessagesmanyusers": "你有好多位用戶畀你嘅 $1 ($2)。",
+       "newmessageslinkplural": "{{PLURAL:$1|一個新訊息|999=新訊息}}",
+       "newmessagesdifflinkplural": "最近{{PLURAL:$1|修改}}",
        "youhavenewmessagesmulti": "你響 $1 有新信",
        "editsection": "編輯",
        "editold": "編輯",
        "page-rss-feed": "\"$1\"嘅RSS Feed",
        "page-atom-feed": "\"$1\"嘅Atom Feed",
        "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": "資料庫查詢出錯。\n可能係個系統有問題。",
+       "databaseerror-textcl": "資料庫查詢出錯。",
+       "databaseerror-query": "查詢: $1",
+       "databaseerror-function": "功能: $1",
+       "databaseerror-error": "出錯: $1",
        "laggedslavemode": "警告:呢頁可能未包括最新嘅更新。",
        "readonly": "資料庫鎖咗",
        "enterlockreason": "輸入鎖資料庫嘅原因,同埋預計幾耐後會解鎖",
        "formerror": "錯誤:表格交唔到",
        "badarticleerror": "喺呢頁唔可以做呢個動作。",
        "cannotdelete": "頁或檔案 \"$1\" 唔刪得。\n可能已經畀另一位刪咗。",
+       "cannotdelete-title": "刪唔到 \"$1\"",
+       "delete-hook-aborted": "編輯由鈎取消咗。\n佢無畀到解釋。",
+       "no-null-revision": "唔可以對 \"$1\" 開個新嘅空白修改",
        "badtitle": "錯嘅標題",
        "badtitletext": "要求嘅標題唔啱、空白,跨語言或者跨維基連結標題錯誤。亦可能係標題包括咗一個或多過一個字元。",
-       "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|一個結果|$1個結果}}響快取度。",
+       "perfcachedts": "以下嘅資料係嚟自快取,上一次嘅更新喺$1。 最多有{{PLURAL:$4|一個結果|$4個結果}}響快取度。",
        "querypage-no-updates": "響呢一頁嘅更新現時停用。啲資料將唔會即時更新。",
        "viewsource": "睇吓原始碼",
+       "viewsource-title": "睇 $1 嘅原碼",
        "actionthrottled": "動作已壓制",
        "actionthrottledtext": "基於反垃圾嘢嘅考量,你而家響呢段短時間之內限制咗去做呢一個動作,而你已經超過咗個上限。請響幾分鐘之後再試過。",
-       "protectedpagetext": "呢一頁已經保護咗唔畀改。",
+       "protectedpagetext": "呢一版已經保護咗唔畀改或者做其他動作。",
        "viewsourcetext": "你可以睇吓或者複製呢一頁嘅原始碼:",
-       "protectedinterface": "呢一頁提供軟件嘅介面文字,呢一頁已經保護咗以預防濫用。",
-       "editinginterface": "'''警告:'''你而家編輯緊嘅呢一個用嚟提供介面文字嘅頁面。響呢一頁嘅更改會影響到其他用戶使用中嘅介面外觀。要翻譯,請考慮利用[//translatewiki.net/wiki/Main_Page?setlang=yue translatewiki.net],一個用來為MediaWiki軟件本地化嘅計劃。",
+       "viewyourtext": "你可以睇同複製呢版入面<strong>由你改</strong>嘅原碼:",
+       "protectedinterface": "呢一頁提供軟件嘅介面文字,呢一頁已經保護咗以預防濫用。\n要加或者改所有維基站嘅翻譯,請去 [//translatewiki.net/ translatewiki.net]嘅  MediaWiki 本地化項目。",
+       "editinginterface": "'''警告:'''你而家編輯緊嘅呢一個用嚟提供介面文字嘅頁面。響呢一頁嘅更改會影響到其他用戶使用中嘅介面外觀。要加或者改所有維基站嘅翻譯,請去 [//translatewiki.net/ translatewiki.net]嘅  MediaWiki 本地化項目。",
        "cascadeprotected": "呢一版已經保護咗唔能夠編輯,因為佢係響以下嘅{{PLURAL:$1|一|幾}}頁度包含咗,當中啟用咗\"連串\"保護選項來保護嗰一版: $2",
        "namespaceprotected": "你無權編輯響'''$1'''空間名裏面嘅呢一版。",
+       "customcssprotected": "你無權改呢版CSS,因為佢包含其他用戶嘅個人設定。",
+       "customjsprotected": "你無權改呢版JavaScript,因為佢包含其他用戶嘅個人設定。",
+       "mycustomcssprotected": "你無權改呢版CSS。",
+       "mycustomjsprotected": "你無權改呢版JavaScript。",
+       "myprivateinfoprotected": "你無權改呢版你嘅私人資料。",
+       "mypreferencesprotected": "你無權改呢版你嘅個人設定。",
        "ns-specialprotected": "特別頁係唔可以編輯嘅。",
        "titleprotected": "呢個標題已經俾[[User:$1|$1]]保護咗防止去開。原因係''$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}},又或者<span class='plainlinks'>[$1 重新登入]</span>。\n但係留意某啲頁面可能會繼續話你未登入,除非等你清除瀏覽器嘅快取儲存。",
+       "logouttext": "<strong>你而家已經簽退咗。</strong>\n\n但係留意某啲頁面可能會繼續話你未登入,除非等你清除瀏覽器嘅快取儲存。",
+       "welcomeuser": "歡迎,$1!",
+       "welcomecreation-msg": "你個戶口已經起好。\n唔好唔記得去改改你嘅{{SITENAME}}[[Special:Preferences|喜好設定]]喎。",
        "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": "登入/開新戶口",
        "logout": "登出",
        "userlogout": "登出",
        "notloggedin": "未登入",
+       "userlogin-noaccount": "重未有戶口?",
+       "userlogin-joinproject": "入{{SITENAME}}",
        "nologin": "重未有戶口? $1。",
        "nologinlink": "開個新戶口",
        "createaccount": "開戶口",
        "gotaccountlink": "登入",
        "userlogin-resetlink": "唔記得簽到資料?",
        "userlogin-resetpassword-link": "唔記得密碼?",
+       "userlogin-helplink2": "幫我簽到",
+       "userlogin-loggedin": "您目前用{{GENDER:$1|$1}}身份簽到,\n請用下面表格用另一身份簽到。",
        "userlogin-createanother": "開過個戶口",
        "createacct-emailrequired": "電郵地址",
-       "createaccountmail": "用電郵",
+       "createacct-emailoptional": "電郵地址(可以唔填)",
+       "createacct-email-ph": "入電郵地址",
+       "createacct-another-email-ph": "入電郵地址",
+       "createaccountmail": "將臨時密碼送到指定電郵地址",
+       "createacct-realname": "真名(可以唔填)",
        "createaccountreason": "原因:",
+       "createacct-reason": "原因",
        "createacct-reason-ph": "開過個戶口嘅原因",
+       "createacct-captcha": "安全檢查",
+       "createacct-imgcaptcha-ph": "入你下面見到嘅字",
        "createacct-submit": "開戶口",
+       "createacct-another-submit": "開過個戶口",
+       "createacct-benefit-heading": "{{SITENAME}}係由你同其他人貢獻。",
+       "createacct-benefit-body1": "{{PLURAL:$1|次編輯|次編輯}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|版|版}}",
+       "createacct-benefit-body3": "最近{{PLURAL:$1|貢獻者|貢獻者}}",
        "badretype": "你入嘅密碼唔一致。",
-       "userexists": "你入嘅用戶名已經有人用咗唔該揀過個名啦。",
+       "userexists": "你入嘅用戶名已經有人用咗。\n唔該揀過個名啦。",
        "loginerror": "登入錯誤",
+       "createacct-error": "開戶口出錯",
        "createaccounterror": "開唔到戶口:$1",
        "nocookiesnew": "已經開咗戶口,但你未登入。 {{SITENAME}} 要用 cookies 嚟登入。你已經熄咗佢。請你開咗再試。",
        "nocookieslogin": "{{SITENAME}} 登入要開 cookies。熄咗佢。請你開咗再試。",
        "noemailcreate": "你需要提供一個有效嘅電郵地址",
        "passwordsent": "新嘅密碼已經寄咗畀呢位用戶 \"$1\" 嘅電郵地址。收到之後請重新登入。",
        "blocked-mailpassword": "你嘅IP地址被鎖住,唔可以用密碼復原功能以防止濫用。",
-       "eauthentsent": "確認電郵已經傳送到指定嘅電郵地址。喺其它嘅郵件傳送到呢個戶口之前,你需要按電郵嘅指示,嚟確認呢個戶口真係屬於你嘅。",
+       "eauthentsent": "確認電郵已經傳送到指定嘅電郵地址。\n喺其它嘅郵件傳送到呢個戶口之前,你需要按電郵嘅指示,嚟確認呢個戶口真係屬於你嘅。",
        "throttled-mailpassword": "一個密碼提醒已經響$1{{PLURAL:$1|個鐘頭}}之前發送咗。為咗防止濫用,響$1{{PLURAL:$1|個鐘頭}}之內只可以發送一個密碼提醒。",
        "mailerror": "傳送電郵錯誤: $1",
        "acct_creation_throttle_hit": "利用你呢個IP地址嘅訪客響上一日已經開咗 $1 個戶口,係響呢段時間嘅上限。\n結果,利用呢個IP地址嘅訪客唔可以響呢段時間再開多個戶口。",
        "emailauthenticated": "你嘅電郵地址已經喺 $2 $3 確認。",
-       "emailnotauthenticated": "你嘅電郵地址重未確認。 任何傳送電郵嘅功能都唔會運作。",
+       "emailnotauthenticated": "你嘅電郵地址重未確認。\n任何傳送電郵嘅功能都唔會運作。",
        "noemailprefs": "響你嘅喜好設定度設置一個電郵地址令到呢啲功能開始運作。",
        "emailconfirmlink": "確認你嘅電郵地址",
        "invalidemailaddress": "呢個電郵地址嘅格式唔啱,所以接受唔到。請輸入一個啱格式嘅地址,或清咗嗰個空格。",
+       "cannotchangeemail": "你唔改得呢個維基站嘅戶口電郵地址。",
+       "emaildisabled": "呢個站送唔到電郵出去。",
        "accountcreated": "戶口已經建立咗",
-       "accountcreatedtext": "$1嘅戶口起好咗。",
+       "accountcreatedtext": "[[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|討論]])嘅戶口起好咗。",
        "createaccount-title": "響{{SITENAME}}度開個新戶口",
        "createaccount-text": "有人響{{SITENAME}}度用咗你個電郵開咗個名叫 \"$2\" 嘅新戶口 ($4),密碼係 \"$3\" 。你應該而家登入,改埋個密碼。\n\n如果個戶口係開錯咗嘅話,你可以唔埋呢篇信。",
-       "login-throttled": "你已經試咗太多次登入動作。請等多一陣再試過。",
+       "login-throttled": "你已經試咗太多次簽到動作。\n請等$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 嘅 mail() 參數度出現咗未知嘅錯誤",
+       "user-mail-no-addy": "試過唔用電郵地址去送出電郵。",
+       "user-mail-no-body": "試過無寫或者太短嘅內文去送出電郵。",
        "changepassword": "改密碼",
-       "resetpass_announce": "你已經用咗一個臨時電郵碼登入。要完成登入,你一定要響呢度定一個新嘅密碼:",
+       "resetpass_announce": "要完成簽到,你一定要響呢度定一個新嘅密碼:",
        "resetpass_text": "<!-- 響呢度加入文字 -->",
        "resetpass_header": "改戶口密碼",
        "oldpassword": "舊密碼:",
        "newpassword": "新密碼:",
        "retypenew": "打多次新密碼:",
        "resetpass_submit": "設定密碼同登入",
-       "changepassword-success": "你嘅密碼已經成功噉改咗!\n而家幫你登入緊...",
+       "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-emailed": "你用電郵入面嘅臨時密碼簽到。\n要完成簽到動作,就要設過個新密碼:",
        "resetpass-temp-password": "臨時密碼:",
+       "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|填其中一欄去申請將臨時密碼經電郵送畀你。}}",
        "passwordreset-legend": "重設密碼",
+       "passwordreset-disabled": "呢個維基站無得設過密碼。",
+       "passwordreset-emaildisabled": "呢個維基站無得傳送電郵。",
        "passwordreset-username": "用戶名:",
        "passwordreset-domain": "域名:",
+       "passwordreset-capture": "睇電郵內容?",
+       "passwordreset-capture-help": "如果揀呢度,電郵連臨時密碼金向你顯示,同時會送畀用戶。",
        "passwordreset-email": "電郵地址:",
+       "passwordreset-emailtitle": "{{SITENAME}}嘅戶口資料",
        "passwordreset-emailelement": "用戶名:$1\n臨時密碼:$2",
+       "passwordreset-emailsent": "密碼重設電郵經已送出。",
+       "passwordreset-emailsent-capture": "密碼重設電郵經已送出,下面有顯示。",
+       "passwordreset-emailerror-capture": "密碼重設電郵經已送出,下面有顯示,但送畀{{GENDER:$2|user}}時失敗: $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": "重設密匙",
+       "resettokens-text": "您可以重設有關你戶口私隱資料嘅密匙。\n\n如果你唔小心洩漏密匙,或者戶口畀人入侵,就要重設密匙。",
+       "resettokens-no-tokens": "呢度無密匙可以重設。",
+       "resettokens-legend": "重設密匙",
+       "resettokens-tokens": "密匙:",
+       "resettokens-token-label": "$1 (而家個值:$2)",
+       "resettokens-watchlist-token": "訂[[Special:Watchlist|監視清單]] Atom/RSS 嘅密匙",
+       "resettokens-done": "密匙已經重設。",
+       "resettokens-resetbutton": "重設指定密匙",
        "bold_sample": "粗體字",
        "bold_tip": "粗體字",
        "italic_sample": "斜體字",
        "loginreqlink": "登入",
        "loginreqpagetext": "你一定$1去睇其它嘅頁面。",
        "accmailtitle": "密碼寄咗喇。",
-       "accmailtext": "「[[User talk:$1|$1]]」嘅隨機產生密碼已經寄咗去 $2。\n\n呢個新戶口嘅密碼可以響登入咗之後嘅''[[Special:ChangePassword|改密碼]]''版度改佢。",
+       "accmailtext": "「[[User talk:$1|$1]]」嘅隨機產生密碼已經寄咗去 $2。\n\n呢個密碼可以響簽到咗之後嘅<em>[[Special:ChangePassword|改密碼]]</em> 版度改佢。",
        "newarticle": "(新)",
        "newarticletext": "你連連過嚟嘅頁面重未存在。\n要起版新嘅,請你喺下面嗰格度輸入。(睇睇[$1 自助版]拎多啲資料。)\n如果你係唔覺意嚟到呢度,撳一次你個瀏覽器'''返轉頭'''個掣。",
        "anontalkpagetext": "----''呢度係匿名用戶嘅討論頁,佢可能係重未開戶口,或者佢重唔識開戶口。我哋會用數字表示嘅IP地址嚟代表佢。一個IP地址係可以由幾個用戶夾來用。如果你係匿名用戶,同覺得呢啲留言係同你冇關係嘅話,唔該去[[Special:UserLogin/signup|開一個新戶口]]或[[Special:UserLogin|登入]],避免喺以後嘅留言會同埋其它用戶混淆。''",
        "userpage-userdoesnotexist": "用戶戶口\"<nowiki>$1</nowiki>\"重未開。請響䦒/編輯呢版之前先檢查一下。",
        "userpage-userdoesnotexist-view": "用戶戶口\"$1\"重未開。",
        "blocked-notice-logextract": "呢位用戶而家被封鎖緊。\n下面有最近嘅封鎖紀錄以供參考:",
-       "clearyourcache": "'''注意:喺儲存之後,你可能要先略過你嘅瀏覽器快取去睇到更改。'''\n'''Mozilla / Firefox / Safari:''' 㩒住''Shift''掣再撳''重新載入'',又或者㩒''Ctrl-F5''或者''Ctrl-R''(喺Mac㩒''Command-R''掣);\n'''Konqueror:''' 就咁以撳個''重載''掣,又或者㩒''F5'';\n'''Opera:'''喺''工具→喜好設定''之中清佢哋嘅快取,又或者㩒''Alt-F5'';\n'''Internet Explorer:''' 㩒住''Ctrl''掣再撳''重新整理'',又或者㩒''Ctrl-F5''掣。",
+       "clearyourcache": "<strong>注意</strong>:喺儲存之後,你可能要先略過你嘅瀏覽器快取去睇到更改。\n*<strong>Firefox / Safari:</strong> 㩒住<em>Shift<em>掣再撳<em>重新載入</em>,又或者㩒<em>Ctrl-F5</em>或者<em>Ctrl-R</em>(喺Mac㩒<em>Command-R</em>掣);\n*<strong>Google Chrome:</strong> 㩒<em>Ctrl-Shift-R</em>(喺Mac㩒<em>Command-R</em>掣);\n*<strong>Internet Explorer:</strong> 㩒住<em>Ctrl</em>掣再撳<em>重新整理</em>,又或者㩒<em>Ctrl-F5</em>掣;\n*<strong>Opera:</strong>喺<em>工具→喜好設定</em>之中清佢哋嘅快取。",
        "usercssyoucanpreview": "'''提示:'''響儲存前,用「{{int:showpreview}}」個掣嚟測試你嘅新CSS。",
        "userjsyoucanpreview": "'''提示:'''響儲存前,用「{{int:showpreview}}」個掣嚟測試你嘅新JavaScript。",
        "usercsspreview": "'''記住你而家只係預覽緊你嘅用戶CSS樣式表。'''\n'''佢嘅內容重未儲存!'''",
        "token_suffix_mismatch": "'''因為你嘅用戶端度嘅編輯幣整壞咗一啲標點符號字元,你嘅編輯已經拒絕咗。'''個編輯已經拒絕,以防止嗰版嘅文字損毀。\n當你響度用緊一啲好多臭蟲,以網絡為主嘅匿名代理服務。",
        "edit_form_incomplete": "'''編輯表格嘅某個部份同server唔夾,請檢查多次你嘅編輯同埋再試多次。'''",
        "editing": "而家喺度編輯$1",
+       "creating": "開版$1",
        "editingsection": "而家喺度編輯$1 (小節)",
        "editingcomment": "而家喺度編輯$1 (新小節)",
        "editconflict": "編輯衝突:$1",
        "yourdiff": "差異",
        "copyrightwarning": "請留意喺{{SITENAME}}度,所有喺呢度嘅貢獻會被考慮到喺$2之下發出(睇$1有更詳細嘅資訊)。如果你係唔想你編輯嘅文字無喇喇咁被分發,咁就唔好喺呢度遞交。\n\n你亦都要同我哋保證啲文字係你自己寫嘅,或者係由公有領域或相似嘅自由資源複製落嚟。\n'''喺未有任何許可嘅情況之下千祈唔好遞交有版權嘅作品!'''",
        "copyrightwarning2": "請留意喺{{SITENAME}}度,所有嘅貢獻可能會被其他嘅貢獻者編輯、修改,或者刪除。如果你係唔想你編輯嘅文字無喇喇咁被編輯,咁就唔好喺呢度遞交。\n\n你亦都要同我哋保證啲文字係你自己寫嘅,或者係由公有領域或相似嘅自由資源複製落嚟(睇$1有更詳細嘅資訊)。\n'''喺未有任何許可嘅情況之下千祈唔好遞交有版權嘅作品!'''",
-       "longpageerror": "'''錯誤:你所遞交嘅文字係有 $1 kilobytes 咁長,係長過最大嘅 $2 kilobytes。'''儲唔到你遞交嘅文字。",
-       "readonlywarning": "'''錯誤:料庫已經鎖住咗,以便定期保養。而家你唔可以儲起你嘅編輯。'''你可以儲啲文字落一份文字檔先。\n\n管理員嘅解釋: $1",
+       "longpageerror": "<strong>出錯:你所遞交嘅文字係有 {{PLURAL:$1|1 KB|$1 KB}} 咁長,長過最大嘅 {{PLURAL:$2|1 KB|$2 KB}}。</strong>\n儲唔到你遞交嘅文字。",
+       "readonlywarning": "<strong>警告:資料庫已經鎖住咗去做定期保養。而家你唔可以儲起你嘅編輯。</strong>\n\n你可以儲啲文字落一份文字檔先。\n\n管理員嘅解釋: $1",
        "protectedpagewarning": "'''警告:呢版已經受到保護,只有管理員權限嘅用戶先至可以改。'''\n最近嘅日誌響下面提供以便參考:",
        "semiprotectedpagewarning": "'''注意:'''呢一頁已經保護咗,只有已經註冊嘅用戶先至可以改。\n最近嘅日誌響下面提供以便參考:",
        "cascadeprotectedwarning": "'''警告:'''呢一頁已經保護咗,只有管理員權限嘅用戶先至可以改,因為佢係響以下連串保護嘅{{PLURAL:$1|一|幾}}頁度包含咗:",
        "nocreate-loggedin": "你並無許可權去開新版。",
        "sectioneditnotsupported-title": "唔支援逐改段",
        "sectioneditnotsupported-text": "呢版唔支援逐改段。",
-       "permissionserrors": "權限錯誤",
+       "permissionserrors": "權限出錯",
        "permissionserrorstext": "根據下面嘅{{PLURAL:$1|原因|原因}},你並無權限去做呢樣嘢:",
        "permissionserrorstext-withaction": "根據下面嘅{{PLURAL:$1|原因|原因}},你並無權限去做$2:",
        "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": "預設訊息文字",
        "editwarning-warning": "離開呢一版會令到你嘅修改唔見咗。\n你可以響你嘅喜好設定嘅\"{{int:prefs-editing}}\"小節度停用呢個警告。",
        "expensive-parserfunction-warning": "警告: 呢一版有太多耗費嘅語法功能呼叫。\n\n佢應該少過$2次呼叫,佢而家係$1次呼叫。",
        "expensive-parserfunction-category": "響版度有太多嘅耗費嘅語法功能呼叫",
        "searchrelated": "有關",
        "searchall": "全部",
        "showingresults": "'自#'''$2'''起顯示最多'''$1'''個結果。",
-       "showingresultsnum": "自#'''$2'''起顯示'''$3'''個結果。",
        "showingresultsheader": "對'''$4'''嘅{{PLURAL:$5|第'''$1'''到第'''$3'''項結果|第'''$1 - $2'''項,共'''$3'''項結果}}",
        "search-nonefound": "響個查詢度無結果配合。",
        "powersearch-legend": "進階搵嘢",
        "ipblocklist-submit": "搵",
        "ipblocklist-localblock": "本地封鎖",
        "ipblocklist-otherblocks": "其他{{PLURAL:$1|封鎖|封鎖}}",
-       "infiniteblock": "無期",
+       "infiniteblock": "無期",
        "expiringblock": "$1 $2 期滿",
        "anononlyblock": "只限匿名",
        "noautoblockblock": "自動封鎖已經停用",
        "tooltip-preferences-save": "保存設定",
        "tooltip-summary": "輸入一個簡短嘅摘要",
        "common.css": "/* 響呢度放 CSS 碼來改成個網站嘅畫面 */",
-       "monobook.css": "/* 響呢度放 CSS 碼去改用戶用嘅 Monobook 畫面 */",
-       "vector.css": "/* 響呢度放 CSS 碼去改用戶用嘅域達畫面 */",
        "print.css": "/* 響呢度放 CSS 碼去改打印輸出 */",
        "common.js": "/* 響每一次個頁面載入時,所有用戶都會載入呢度任何嘅JavaScript。 */",
-       "monobook.js": "/* 響每一次個頁面載入時,用 Monobook 畫面嘅用戶都會載入呢度任何嘅JavaScript */",
-       "vector.js": "/* 響每一次個頁面載入時,用域達畫面嘅用戶都會載入呢度任何嘅JavaScript */",
        "anonymous": "{{SITENAME}}嘅匿名{{PLURAL:$1|用戶|用戶}}",
        "siteuser": "{{SITENAME}}嘅用戶$1",
        "anonuser": "{{SITENAME}}嘅匿名用戶$1",
        "spam_reverting": "恢復返去最後一個唔包含指去$1嘅連結嘅嗰個修訂。",
        "spam_blanking": "全部版本都含有指去$1嘅連結,留空",
        "simpleantispam-label": "反垃圾檢查。\n'''唔好'''加入呢個!",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "標示為已巡查嘅",
        "markaspatrolledtext": "標示呢版做查咗嘅",
        "markedaspatrolled": "已經標示做已巡查嘅",
        "duplicate-defaultsort": "警告: 預設嘅排序鍵 \"$2\" 覆蓋之前嘅預設排序鍵 \"$1\"。",
        "version": "版本",
        "version-extensions": "裝咗嘅擴展",
+       "version-skins": "畫面",
        "version-specialpages": "特別頁",
        "version-parserhooks": "語法鈎",
        "version-variables": "變數",
        "version-antispam": "垃圾防止",
-       "version-skins": "畫面",
        "version-other": "其他",
        "version-mediahandlers": "媒體處理器",
        "version-hooks": "鈎",
index ff2b119..29bb0b0 100644 (file)
        "qbmyoptions": "Mien opties",
        "faq": "FAQ (veehestelde vraehen)",
        "faqpage": "Project:Veehestelde vraehen",
-       "vector-action-addsection": "Voeg kopje toe",
-       "vector-action-delete": "Wissen",
-       "vector-action-move": "Verschuuf",
-       "vector-action-protect": "Bescherm",
-       "vector-action-undelete": "Plaets truhhe",
-       "vector-action-unprotect": "Beveiligienge anpass'n",
-       "vector-view-create": "Anmaeken",
-       "vector-view-edit": "Bewerk",
-       "vector-view-history": "Geschiedenisse bekiek'n",
-       "vector-view-view": "Lezen",
-       "vector-view-viewsource": "Brontekst bekieken",
        "actions": "Handeliengen",
        "namespaces": "Naemruumtes",
        "variants": "Varianten",
        "editundo": "onedaene maeken",
        "searchresults": "Zoekresultaoten",
        "searchresults-title": "Zuikresultaot'n vò \"$1\"",
-       "toomanymatches": "Der waeren te vee resultaoten. Probeer asjeblieft een aore zoekopdracht.",
        "titlematches": "Overeênkomst mie onderwerp",
        "textmatches": "Overeênkomst mie inoud",
        "notextmatches": "Hin pagina's evon'n",
        "searchmenu-exists": "'''Er is 'n pagina genaemd \"[[:$1]]\" op deêze wiki.'''",
        "searchmenu-new": "'''De pagina \"[[:$1]]\" anmaek'n op deêze wiki.'''",
        "searchprofile-articles": "Inhoudelike pagina's",
-       "searchprofile-project": "Hilp- en projectpagina's",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alles",
        "searchprofile-advanced": "Uutebreid",
        "searchprofile-articles-tooltip": "Zoek'n in $1",
-       "searchprofile-project-tooltip": "Zoek'n in $1",
        "searchprofile-images-tooltip": "Zoek nae bestand'n",
        "searchprofile-everything-tooltip": "Aolle inhoud dòzoek'n (inclusief overlegbladzies)",
        "searchprofile-advanced-tooltip": "Zoek'n in angegeev'n naemruumtes",
        "searchrelated": "gerelateerd",
        "searchall": "aolle",
        "showingresults": "Ieronder {{PLURAL:$1|sti '''1''' resultaot|staen '''$1''' resultaoten}} vanof #'''$2'''.",
-       "showingresultsnum": "Ieronder {{PLURAL:$3|sti '''1''' resultaot|staen '''$3''' resultaoten}} vanof #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Resultaot '''$1''' von '''$3'''|Resultaot'n '''$1 - $2''' von '''$3'''}} vò '''$4'''",
        "search-nonefound": "Er zin geen resultaot'n vò je zoekopdracht.",
        "powersearch-legend": "Uutebreid zoeken",
        "servertime": "Servertied",
        "guesstimezone": "Vanuut de browser toevoehen",
        "allowemail": "Laet e-mail van aore gebrukers toe.",
-       "defaultns": "Standard in deêze naemruum'n zoeken:",
        "default": "standard",
        "prefs-files": "Bestan'n",
        "youremail": "Jen e-mailadres:",
        "username": "Gebrukersnaem:",
-       "uid": "Gebrukersnummer:",
        "yourrealname": "Jen echen naam:",
        "yourlanguage": "Taele:",
        "yournick": "Tekst voe onderteêkenienge:",
        "log": "Logboek'n",
        "alllogstext": "Saemengesteld overzicht van de wis-, bescherm-, blokkeer- en gebrukerslechtenlogboeken.\nJe kan 't overzicht bepaelen deu 'n soôrte logboek, 'n gebrukersnaem of eên bladzie uut te kiezen.",
        "allpages": "Aolle bladzies",
-       "alphaindexline": "$1 toet $2",
        "nextpage": "Volgende bladzie ($1)",
        "allpagesfrom": "Laet bladzies zieë vanaf:",
        "allarticles": "Aolle artikels",
index 48e1055..f2282da 100644 (file)
        "qbmyoptions": "我的页面",
        "faq": "常见问题",
        "faqpage": "Project:常见问题",
-       "vector-action-addsection": "添加话题",
-       "vector-action-delete": "删除",
-       "vector-action-move": "移动",
-       "vector-action-protect": "保护",
-       "vector-action-undelete": "还原",
-       "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": "导航菜单",
        "readonly": "数据库被锁定",
        "enterlockreason": "请输入锁定的原因(包括预计解锁的时间)",
        "readonlytext": "数据库当前被锁定,不能添加新条目或进行其他修改,锁定可能是因为例行的数据库维护,完成后即可恢复正常。\n\n锁定数据库的管理员提供的解释:$1",
-       "missing-article": "数据库找不到预期的页面文字:“$1”$2。\n\n这通常是由于点击了链向旧有差异或历史的链接,而原有修订已被删除导致的。\n\n如果情况不是这样,您可能找到了软件的一个内部错误。请记录下URL地址,并向[[Special:ListUsers/sysop|管理员]]报告。",
+       "missing-article": "数据库找不到预期的页面文字:“$1”$2。\n\n这通常是由于点击了链向旧有差异或历史的链接,而原有版本已被删除导致的。\n\n如果情况不是这样,您可能找到了软件的一个内部错误。请记录下URL地址,并向[[Special:ListUsers/sysop|管理员]]报告。",
        "missingarticle-rev": "(版本#:$1)",
        "missingarticle-diff": "(差异:$1,$2)",
        "readonly_lag": "附属数据库服务器正在将缓存更新到主服务器上,数据库已被自动锁定",
        "cannotdelete": "无法删除页面或图像“$1”。\n它可能已被其他人删除了。",
        "cannotdelete-title": "无法删除“$1”",
        "delete-hook-aborted": "删除被扩展钩子取消。钩子并没有给出解释。",
-       "no-null-revision": "无法创建对\"$1\"页面新的空白修订",
+       "no-null-revision": "无法创建对\"$1\"页面新的空白版本",
        "badtitle": "错误标题",
        "badtitletext": "所请求页面的标题是无效的、不存在,跨语言或跨wiki链接的标题错误。它可能包含一个或更多的不能用于标题的字符。",
        "perfcached": "以下是缓存的数据,可能不是最新的数据。缓存中最多有{{PLURAL:$1|$1条结果}}。",
        "anontalkpagetext": "---- ''这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。''",
        "noarticletext": "本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页面]。</span>",
        "noarticletext-nopermission": "本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]或<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]</span>,但你没有权限创建本页面。",
-       "missing-revision": "“{{FULLPAGENAME}}”的修订#$1不存在。\n\n这通常是因为进入了一个已被删除的页面的历史链接。\n详细信息可以在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。",
+       "missing-revision": "“{{FULLPAGENAME}}”的版本#$1不存在。\n\n这通常是因为进入了一个已被删除的页面的历史链接。\n详细信息可以在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。",
        "userpage-userdoesnotexist": "用户账户“$1”没有注册。请在创建/编辑本页前检查。",
        "userpage-userdoesnotexist-view": "用户账户“$1”没有被注册。",
        "blocked-notice-logextract": "这位用户目前已被封禁。以下提供最近的封禁日志以供参考:",
        "currentrevisionlink": "最后版本",
        "cur": "当前",
        "next": "后继",
-       "last": "前一",
+       "last": "之前",
        "page_first": "首页",
        "page_last": "末页",
        "histlegend": "差异选择:选中要对比的版本的单选按钮,按Enter键或下方的按钮。<br />\n说明:<strong>({{int:cur}})</strong>=与最后版本之间的差异,<strong>({{int:last}})</strong>=与上一版本之间的差异,<strong>{{int:minoreditletter}}</strong>=小编辑。",
        "rev-deleted-text-unhide": "本页面版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|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-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-suppressed-diff-view": "差异对比中的一次修订已被'''监督隐藏'''。您可以对比此差异。详细信息可在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中找到。",
+       "rev-suppressed-diff-view": "差异对比中的一个版本已被'''监督隐藏'''。您可以对比此差异。详细信息可在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中找到。",
        "rev-delundel": "显示/隐藏",
        "rev-showdeleted": "显示",
        "revisiondelete": "删除/还原版本",
        "revdelete-nooldid-title": "无效目标版本",
-       "revdelete-nooldid-text": "您尚未指定一个目标修订去进行这个功能、\n所指定的修订不存在,或者您尝试去隐藏现时的修订。",
+       "revdelete-nooldid-text": "您尚未指定一个目标版本去进行这个功能、所指定的版本不存在,或者您尝试去隐藏现时的版本。",
        "revdelete-no-file": "指定的文件不存在。",
        "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-text": "已删除版本仍将在页面历史中显示,但涉及部分的内容将对公众不可见。",
        "revdelete-text-file": "已删除文件版本仍将在文件历史中显示,但涉及部分的内容将对公众不可见。",
        "logdelete-text": "已删除日志事件仍将在日志中显示,但涉及部分的内容将对公众不可见。",
        "revdelete-text-others": "在{{SITENAME}}的其他管理员仍将可以访问隐藏内容,并在一定条件下能够通过相同界面取消删除,除非附加条件被设定。",
        "revdelete-radio-set": "隐藏",
        "revdelete-radio-unset": "可见",
        "revdelete-suppress": "同时阻止管理员与其他用户查看数据",
-       "revdelete-unsuppress": "在已恢复的修订中移除限制",
+       "revdelete-unsuppress": "在已恢复的版本中移除限制",
        "revdelete-log": "原因:",
        "revdelete-submit": "应用于选中的{{PLURAL:$1|版本}}",
        "revdelete-success": "<strong>版本可见性更新成功。</strong>",
        "suppressionlog": "监督日志",
        "suppressionlogtext": "该列表列出了管理员隐藏的删除与封禁。另参见[[Special:BlockList|封禁列表]]查询当前的封禁列表。",
        "mergehistory": "合并页面历史",
-       "mergehistory-header": "这一页可以让您将来源页面的修订历史合并到新页面中去。\n请确保此次更改能继续保持历史页面的连续性。",
-       "mergehistory-box": "合并两个页面的修订历史:",
+       "mergehistory-header": "这一页可以让您将来源页面的版本合并到新页面中去。请确保此次更改能继续保持历史页面的连续性。",
+       "mergehistory-box": "合并两个页面的版本历史:",
        "mergehistory-from": "来源页面:",
        "mergehistory-into": "目的页面:",
        "mergehistory-list": "可以合并的编辑历史",
        "mergehistory-empty": "没有可以合并的版本。",
        "mergehistory-success": "[[:$1]]的$3个版本成功合并至[[:$2]]。",
        "mergehistory-fail": "不可以进行历史合并,请重新检查该页面以及时间参数。",
+       "mergehistory-fail-toobig": "由于超出$1的限制而无法执行历史合并,$1个版本将被移动。",
        "mergehistory-no-source": "来源页面$1不存在。",
        "mergehistory-no-destination": "目的页面$1不存在。",
        "mergehistory-invalid-source": "来源页面必须是一个有效的标题。",
        "searchall": "所有",
        "showingresults": "下面显示从第'''$2'''条结果开始的'''$1'''条结果。",
        "showingresultsinrange": "下面显示区间#<strong>$2</strong>至#<strong>$3</strong>的<strong>$1</strong>条结果。",
-       "showingresultsnum": "下面显示从第'''$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": "高级搜索",
        "email": "电子邮件",
        "prefs-help-realname": "真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。",
        "prefs-help-email": "电子邮件地址是选填项,但是当你忘记你的密码要重置密码时,需要该信息。",
-       "prefs-help-email-others": "您也可以选择让其他用户通过您的用户页或讨论页上的链接用电子邮件联系您。其他用户联系您时您的电子邮件地址不会显示。",
+       "prefs-help-email-others": "您也可以选择让其他用户通过您的用户或讨论页面上的链接用电子邮件联系您。其他用户联系您时您的电子邮件地址不会显示。",
        "prefs-help-email-required": "电子邮件地址是必填项目。",
        "prefs-info": "基本信息",
        "prefs-i18n": "语言",
        "deletereasonotherlist": "其他原因",
        "deletereason-dropdown": "*常见删除原因\n**广告\n**破坏行为\n**侵犯著作权\n**作者申请\n**受损重定向",
        "delete-edit-reasonlist": "编辑删除原因",
-       "delete-toobig": "这个页面有一个十分大量的编辑历史,超过$1次修订。删除此类页面的动作已经被限制,以防止在{{SITENAME}}上的意外扰乱。",
-       "delete-warning-toobig": "这个页面有一个十分大量的编辑历史,超过$1次修订。删除它可能会扰乱{{SITENAME}}的数据库操作;在继续此动作前请小心。",
+       "delete-toobig": "这个页面有一个十分大量的编辑历史,超过$1个版本。删除此类页面的动作已经被限制,以防止在{{SITENAME}}上的意外扰乱。",
+       "delete-warning-toobig": "这个页面有一个十分大量的编辑历史,超过$1个版本。删除它可能会扰乱{{SITENAME}}的数据库操作;在继续此动作前请小心。",
        "deleting-backlinks-warning": "'''警告:'''有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他页面]]链接至或包含您要删除的页面。",
        "rollback": "回退编辑",
        "rollback_short": "回退",
        "undelete-fieldset-title": "还原版本",
        "undeleteextrahelp": "要恢复该页面的整个历史记录时,不选中任何复选框直接点击'''''{{int:undeletebtn}}'''''。要选择性地恢复部分版本时,请选中相应版本前的复选框再点击'''''{{int:undeletebtn}}'''''。",
        "undeleterevisions": "$1版本存档",
-       "undeletehistory": "如果您恢复了该页面,所有版本都会被恢复到修订历史中。\n如果本页删除后有一个同名的新页面建立,被恢复的版本将会出现在先前的历史中。",
+       "undeletehistory": "如果您恢复了该页面,所有版本都会被恢复到版本历史中。如果本页删除后有一个同名的新页面建立,被恢复的版本将会出现在先前的历史中。",
        "undeleterevdel": "如果把最新版本部分删除,反删除将会无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的版本。",
-       "undeletehistorynoadmin": "这个页面已被删除。删除原因显示在下方编辑摘要中,被删除前的所有修订文本连同删除前贡献用户的细节信息只对管理员可见。",
+       "undeletehistorynoadmin": "这个页面已被删除。删除原因显示在下方编辑摘要中,被删除前的所有版本文本连同删除前贡献用户的细节信息只对管理员可见。",
        "undelete-revision": "$1由$3(在$4 $5)所编写的已删除版本:",
        "undeleterevision-missing": "无效或丢失的版本。您可能使用了错误的链接,或者此版本已经被从存档中恢复或移除。",
        "undelete-nodiff": "找不到先前的版本。",
        "lockedbyandtime": "(由 {{GENDER:$1|$1}} 于$2 $3执行)",
        "move-page": "移动$1",
        "move-page-legend": "移动页面",
-       "movepagetext": "您可以使用下面的表单来重命名一个页面,同时将其修订历史移动到新页面。\n同时老的条目将会被重定向到新条目。\n您可以自动地将重定向更新到原条目。\n如果您不选择这样做的话,请检查[[Special:DoubleRedirects|双重]]或[[Special:BrokenRedirects|损坏重定向]]链接。\n您有责任确保链接会被正确指向他们应该被指向的地方。\n\n注意:即使新条目已经有对应页面,此页面也'''不会'''被移动,除非新页面无任何编辑历史或是重定向页。\n这意味着您可在误操作后将页面移回原处,同时,您也无法覆盖现有页面。\n\n'''警告!'''\n对这样一个经常被访问的页面而言这可能是一个重大且唐突的更改;\n请在行动前先了解您的修改可能带来的一切后果。",
-       "movepagetext-noredirectfixer": "用下面的表单来重命名一个页面,并将其修订历史同时移动到新页面。\n老的页面将成为新页面的重定向页。\n请检查[[Special:DoubleRedirects|双重重定向]]或[[Special:BrokenRedirects|损坏重定向]]链接。\n您应当负责确定所有链接依然会链到指定的页面。\n\n注意如果新页面已经有内容的话,页面将'''不会'''被移动,\n除非新页面无内容或是重定向页,而且没有修订历史。\n这意味着您再必要时可以在移动到新页面后再移回老的页面,\n同时您也无法覆盖现有页面。\n\n'''警告!'''\n对一个经常被访问的页面而言这可能是一个重大与唐突的更改;\n请在行动前先确定您了解其所可能带来的后果。",
+       "movepagetext": "您可以使用下面的表单来重命名一个页面,同时将其版本历史移动到新页面。同时老的条目将会被重定向到新条目。您可以自动地将重定向更新到原条目。如果您不选择这样做的话,请检查[[Special:DoubleRedirects|双重]]或[[Special:BrokenRedirects|损坏重定向]]链接。您有责任确保链接会被正确指向他们应该被指向的地方。\n\n注意:即使新条目已经有对应页面,此页面也'''不会'''被移动,除非新页面无任何编辑历史或是重定向页。这意味着您可在误操作后将页面移回原处,同时,您也无法覆盖现有页面。\n\n'''警告!'''对这样一个经常被访问的页面而言这可能是一个重大且唐突的更改;请在行动前先了解您的修改可能带来的一切后果。",
+       "movepagetext-noredirectfixer": "用下面的表单来重命名一个页面,并将其版本历史同时移动到新页面。\n老的页面将成为新页面的重定向页。\n请检查[[Special:DoubleRedirects|双重重定向]]或[[Special:BrokenRedirects|损坏重定向]]链接。\n您应当负责确定所有链接依然会链到指定的页面。\n\n注意如果新页面已经有内容的话,页面将'''不会'''被移动,\n除非新页面无内容或是重定向页,而且没有版本历史。\n这意味着您再必要时可以在移动到新页面后再移回老的页面,\n同时您也无法覆盖现有页面。\n\n'''警告!'''\n对一个经常被访问的页面而言这可能是一个重大与唐突的更改;\n请在行动前先确定您了解其所可能带来的后果。",
        "movepagetalktext": "有关的讨论页将被自动与该页面一起移动,'''除非''':\n*新页面已经有一个包含内容的讨论页,或者\n*您不勾选下面的复选框。\n\n在这些情况下,您在必要时必须手工移动或合并页面。",
        "movearticle": "移动页面:",
        "moveuserpage-warning": "'''警告:'''你将移动一个用户页面。请注意,只有该页面会被移动,该用户''不''会被更名。",
        "move-over-sharedrepo": "== 文件已存在 ==\n[[:$1]]已于共享资源存在,将文件移动到此标题会覆盖共享资源中的文件。",
        "file-exists-sharedrepo": "同名文件已于共享资源存在。\n请选择另一个文件名。",
        "export": "导出页面",
-       "exporttext": "您可以将特定页面或一组页面的文本以及编辑历史以 XML 格式导出;这样可以将有关页面通过“[[Special:Import|导入页面]]”导入到另一个运行 MediaWiki 的网站。\n\n要导出页面,请在下面的文本框中输入页面标题,每行一个标题,并选择您是否需要导出带有页面历史的以前的修订版本,或是只选择导出带有最后一次编辑信息的当前修订版本。\n\n此外您还可以利用链接导出文件,例如您可以使用[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]导出“[[{{MediaWiki:Mainpage}}]]”页面。",
+       "exporttext": "您可以将特定页面或一组页面的文本以及编辑历史以 XML 格式导出;这样可以将有关页面通过“[[Special:Import|导入页面]]”导入到另一个运行 MediaWiki 的网站。\n\n要导出页面,请在下面的文本框中输入页面标题,每行一个标题,并选择您是否需要导出带有页面历史的以前的版本,或是只选择导出带有最后一次编辑信息的当前版本。\n\n此外您还可以利用链接导出文件,例如您可以使用[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]导出“[[{{MediaWiki:Mainpage}}]]”页面。",
        "exportall": "导出所有页面",
        "exportcuronly": "仅包含当前版本,而不是完整历史。",
        "exportnohistory": "----\n'''注意:'''由于性能原因,从此表单导出页面的全部历史已被禁用。",
        "thumbnail_image-failure-limit": "近期尝试生成此缩略图失败太多次($1次或更多)。请稍后再试。",
        "import": "导入页面",
        "importinterwiki": "跨wiki导入",
-       "import-interwiki-text": "选择要导入的wiki和页面标题,导入修订的日期和编辑者名称会被保存。所有的跨wiki导入操作都将记录到[[Special:Log/import|导入日志]]。",
+       "import-interwiki-text": "选择要导入的wiki和页面标题,导入版本的日期和编辑者名称会被保存。所有的跨wiki导入操作都将记录到[[Special:Log/import|导入日志]]。",
        "import-interwiki-source": "来源wiki/页面:",
        "import-interwiki-history": "复制此页的所有历史版本",
        "import-interwiki-templates": "包含所有模板",
        "import-error-special": "页面“$1”未导入,因为它需要使用一个不能创建页面的特殊名字空间。",
        "import-error-invalid": "页面“$1”未能导入,因为它的名字无效。",
        "import-error-unserialize": "页面“$1”的版本$2无法反序列化。此版本使用内容模型$3序列化为$4。",
-       "import-error-bad-location": "在此wiki使用了内容模式$3的修订版本$2不能被保存至“$1”,这是因为此模式在此页面不被支持。",
+       "import-error-bad-location": "在此wiki使用了内容模式$3的版本$2不能被保存至“$1”,这是因为此模式在此页面不被支持。",
        "import-options-wrong": "{{PLURAL:$2|选项}}出错:<nowiki>$1</nowiki>",
        "import-rootpage-invalid": "根页面的标题无效。",
        "import-rootpage-nosubpage": "名字空间为“$1”的根页面不允许子页面。",
        "tooltip-preferences-save": "保存系统设置",
        "tooltip-summary": "请输入简短的摘要",
        "interlanguage-link-title": "$1 – $2",
+       "interlanguage-link-title-nonlang": "$1——$2",
        "common.css": "/* 放置于这里的CSS将应用于所有皮肤 */",
-       "monobook.css": "/* 放置于这里的CSS将影响使用MonoBook皮肤的用户 */",
-       "vector.css": "/* 放置于这里的CSS将影响使用Vector皮肤的用户 */",
        "print.css": "/* 放置于这里的CSS将影响打印输出 */",
        "noscript.css": "/* 放置于这里的CSS将影响停用JavaScript的用户 */",
        "group-autoconfirmed.css": "/* 放置于这里的CSS将只影响自动确认用户 */",
        "group-sysop.css": "/* 放置于这里的CSS将只影响管理员 */",
        "group-bureaucrat.css": "/* 放置于这里的CSS将只影响机行政员 */",
        "common.js": "/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */",
-       "monobook.js": "/* 这里的任何JavaScript将为使用MonoBook皮肤的用户加载 */",
-       "vector.js": "/* 这里的任何JavaScript将为使用Vector皮肤的用户加载 */",
        "group-autoconfirmed.js": "/* 这里的任何JavaScript将只为自动确认用户加载 */",
        "group-bot.js": "/* 这里的任何JavaScript将只为机器人加载 */",
        "group-sysop.js": "/* 这里的任何JavaScript将只为管理员加载 */",
        "markaspatrolleddiff": "标记为已巡查",
        "markaspatrolledtext": "标记此页面为已巡查",
        "markedaspatrolled": "标记为已检查",
-       "markedaspatrolledtext": "[[:$1]]的已选中修订版本已被标识为已巡查。",
+       "markedaspatrolledtext": "[[:$1]]的已选中版本已被标识为已巡查。",
        "rcpatroldisabled": "最新更改检查被关闭",
        "rcpatroldisabledtext": "最近更改巡查功能目前已关闭。",
        "markedaspatrollederror": "不能标志为已检查",
        "filedeleteerror-short": "删除文件发生错误:$1",
        "filedeleteerror-long": "删除文件时出错:\n\n$1",
        "filedelete-missing": "文件“$1”不存在而无法删除。",
-       "filedelete-old-unregistered": "所指定的文件修订“$1”在数据库中不存在。",
+       "filedelete-old-unregistered": "所指定的文件版本“$1”在数据库中不存在。",
        "filedelete-current-unregistered": "所指定的文件“$1”在数据库中不存在。",
        "filedelete-archive-read-only": "存档目录“$1”在网页服务器中不可写。",
        "previousdiff": "←上一编辑",
        "duplicate-defaultsort": "'''警告:'''默认排序关键词“$2”覆盖了之前的默认排序关键词“$1”。",
        "version": "版本",
        "version-extensions": "安装的扩展程序",
+       "version-skins": "已安装皮肤",
        "version-specialpages": "特殊页面",
        "version-parserhooks": "解析器钩",
        "version-variables": "变量",
        "version-antispam": "垃圾阻止",
-       "version-skins": "皮肤",
        "version-other": "其他",
        "version-mediahandlers": "媒体文件处理器",
        "version-hooks": "钩",
        "version-hook-name": "钩名",
        "version-hook-subscribedby": "署名",
        "version-version": "(版本 $1)",
+       "version-no-ext-name": "[无名称]",
        "version-license": "MediaWiki协议",
        "version-ext-license": "许可协议",
        "version-ext-colheader-name": "扩展程序",
+       "version-skin-colheader-name": "皮肤",
        "version-ext-colheader-version": "版本",
        "version-ext-colheader-license": "许可协议",
        "version-ext-colheader-description": "说明",
index ae5ee85..7787006 100644 (file)
        "qbmyoptions": "我的頁面",
        "faq": "常見問答",
        "faqpage": "Project:FAQ",
-       "vector-action-addsection": "加入主題",
-       "vector-action-delete": "刪除",
-       "vector-action-move": "移動",
-       "vector-action-protect": "保護",
-       "vector-action-undelete": "取消刪除",
-       "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": "導覽選單",
        "mergehistory-empty": "沒有可以合併的修訂",
        "mergehistory-success": "[[:$1]] 中 $3 次修訂已經成功地合併至 [[:$2]]。",
        "mergehistory-fail": "不可以進行歷史合併,請重新檢查該頁面以及時間參數。",
+       "mergehistory-fail-toobig": "由於超出$1個合併移動版本的上限,故此無法進行歷史合併。",
        "mergehistory-no-source": "來源頁面 $1 不存在。",
        "mergehistory-no-destination": "目標頁面 $1 不存在。",
        "mergehistory-invalid-source": "來源頁面必須使用有效的標題。",
        "searchall": "全部",
        "showingresults": "以下顯示從第 <strong>$2</strong> 筆開始,共 {{PLURAL:$1|<strong>1</strong> 筆結果|<strong>$1</strong> 筆結果}}:",
        "showingresultsinrange": "以下顯示從第 <strong>$2</strong> 筆至第 <strong>$3</strong> 筆中的 {{PLURAL:$1|<strong>1</strong> 筆結果|<strong>$1</strong> 筆結果}}:",
-       "showingresultsnum": "以下顯示從第 <strong>$2</strong> 筆開始,共 {{PLURAL:$3|<strong>1</strong> 筆結果|<strong>$3</strong> 筆結果}}:",
        "showingresultsheader": "<strong>$4</strong> 的 {{PLURAL:$5|第 <strong>$1</strong> 筆結果,共 <strong>$3</strong> 筆|第 <strong>$1 - $2</strong>,共 <strong>$3</strong> 筆}}",
        "search-nonefound": "無符合查詢條件的結果。",
        "powersearch-legend": "進階搜尋",
        "filedelete-maintenance": "維護期間檔案刪除和還原暫停使用。",
        "filedelete-maintenance-title": "無法刪除檔案",
        "mimesearch": "MIME 搜尋",
-       "mimesearch-summary": "本頁面可搜尋檔案的 MIME 類型。\n輸入格式:內容類型/子類型,如 <code>image/jpeg</code>。",
+       "mimesearch-summary": "本頁面可搜尋檔案的 MIME 類型。\n輸入格式:內容類型/子類型 或 內容類型/*,如 <code>image/jpeg</code>。",
        "mimetype": "MIME 類型:",
        "download": "下載",
        "unwatchedpages": "未監視的頁面",
        "tooltip-summary": "請輸入簡短摘要",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* 此 CSS 會套用至所有的介面外觀 */",
-       "monobook.css": "/* 此 CSS 會影響使用 Monobook 介面外觀的使用者 */",
-       "vector.css": "/* 此 CSS 會影響使用 Vector 介面外觀的使用者 */",
        "print.css": "/* 此 CSS 會影響列印版輸出 */",
        "noscript.css": "/* 此 CSS 會影響沒有啓用 JavaScript 的使用者 */",
        "group-autoconfirmed.css": "/* 此 CSS 會影響自動確認的使用者 */",
        "group-sysop.css": "/* 此 CSS 會影響管理員 */",
        "group-bureaucrat.css": "/* 此 CSS 會影響行政員 */",
        "common.js": "/* 此 JavaScript 會用於使用者載入的每一個頁面。 */",
-       "monobook.js": "/* 此 JavaScript 會用於使用 Monobook 介面外觀使用者 */",
-       "vector.js": "/* 此 JavaScript 會用於使用 Vector 介面外觀使用者 */",
        "anonymous": "{{SITENAME}} 的匿名{{PLURAL:$1|使用者}}",
        "siteuser": "{{SITENAME}} 使用者 $1",
        "anonuser": "{{SITENAME}} 匿名使用者 $1",
        "duplicate-defaultsort": "<strong>警告:</strong>預設的排序鍵 \"$2\" 會覆蓋先前預設的排序鍵 \"$1\"。",
        "version": "版本",
        "version-extensions": "已安裝的擴充套件",
+       "version-skins": "已裝外觀",
        "version-specialpages": "特殊頁面",
        "version-parserhooks": "語法連結(Hook)",
        "version-variables": "變數",
        "version-antispam": "垃圾訊息防止",
-       "version-skins": "外觀",
        "version-other": "其他",
        "version-mediahandlers": "媒體處理器",
        "version-hooks": "連結(Hooks)",
        "version-hook-name": "連結名稱",
        "version-hook-subscribedby": "署名",
        "version-version": "($1)",
+       "version-no-ext-name": "[無名]",
        "version-license": "MediaWiki 授權條款",
        "version-ext-license": "授權條款",
        "version-ext-colheader-name": "擴充套件",
+       "version-skin-colheader-name": "外觀",
        "version-ext-colheader-version": "版本",
        "version-ext-colheader-license": "授權條款",
        "version-ext-colheader-description": "說明",
index 07a0467..6900aeb 100644 (file)
@@ -209,6 +209,7 @@ $magicWords = array(
        'forcetoc'                => array( 0,    '__FORCETOC__' ),
        'toc'                     => array( 0,    '__TOC__' ),
        'noeditsection'           => array( 0,    '__NOEDITSECTION__' ),
+       '!'                       => array( 1,    '!' ),
        'currentmonth'            => array( 1,    'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'           => array( 1,    'CURRENTMONTH1' ),
        'currentmonthname'        => array( 1,    'CURRENTMONTHNAME' ),
@@ -440,6 +441,7 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'NewFiles', 'NewImages' ),
        'Newpages'                  => array( 'NewPages' ),
        'PagesWithProp'             => array( 'PagesWithProp', 'Pageswithprop', 'PagesByProp', 'Pagesbyprop' ),
+       'PageLanguage'              => array( 'PageLanguage' ),
        'PasswordReset'             => array( 'PasswordReset' ),
        'PermanentLink'             => array( 'PermanentLink', 'PermaLink' ),
        'Popularpages'              => array( 'PopularPages' ),
index ec0e973..f31bb06 100644 (file)
@@ -68,7 +68,7 @@ $namespaceAliases = array(
        '특수기능' => NS_SPECIAL,
        'MediaWiki토론' => NS_MEDIAWIKI_TALK,
        '그림' => NS_FILE,
-       'í\8c\8cì\9d¼í\86 ë¡ ' => NS_FILE_TALK,
+       '그림í\86 ë¡ ' => NS_FILE_TALK,
 );
 
 $specialPageAliases = array(
index e316d9e..ffb07eb 100644 (file)
@@ -136,6 +136,13 @@ abstract class Maintenance {
         * @return bool
         */
        public static function shouldExecute() {
+               global $wgCommandLineMode;
+
+               if ( !function_exists( 'debug_backtrace' ) ) {
+                       // If someone has a better idea...
+                       return $wgCommandLineMode;
+               }
+
                $bt = debug_backtrace();
                $count = count( $bt );
                if ( $count < 2 ) {
diff --git a/maintenance/archives/patch-page_lang.sql b/maintenance/archives/patch-page_lang.sql
new file mode 100644 (file)
index 0000000..c792b4a
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE /*$wgDBprefix*/page
+  ADD page_lang varbinary(35) DEFAULT NULL;
index 14eaeab..c1d93ef 100644 (file)
@@ -26,10 +26,10 @@ CREATE TABLE /*_*/uploadstash (
 
        us_status varchar(50) not null,
 
-       -- file properties from File::getPropsFromPath.  these may prove unnecessary.
+       -- file properties from FSFile::getProps().  these may prove unnecessary.
        --
        us_size int unsigned NOT NULL,
-       -- this hash comes from File::sha1Base36(), and is 31 characters
+       -- this hash comes from FSFile::getSha1Base36(), and is 31 characters
        us_sha1 varchar(31) NOT NULL,
        us_mime varchar(255),
        -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
index 33da666..0c0b34a 100644 (file)
@@ -39,6 +39,10 @@ class DeleteArchivedFilesImplementation {
                $count = 0;
                foreach ( $res as $row ) {
                        $key = $row->fa_storage_key;
+                       if ( !strlen( $key ) ) {
+                               $output->handleOutput( "Entry with ID {$row->fa_id} has empty key, skipping\n" );
+                               continue;
+                       }
                        $group = $row->fa_storage_group;
                        $id = $row->fa_id;
                        $path = $repo->getZonePath( 'deleted' ) . '/' . $repo->getDeletedHashPath( $key ) . $key;
index fe48daf..9929cf9 100644 (file)
@@ -92,6 +92,7 @@ class FindHooks extends Maintenance {
                        $IP . '/includes/json/',
                        $IP . '/includes/logging/',
                        $IP . '/includes/media/',
+                       $IP . '/includes/page/',
                        $IP . '/includes/parser/',
                        $IP . '/includes/rcfeed/',
                        $IP . '/includes/resourceloader/',
index 3dd4a9e..ae70441 100644 (file)
@@ -177,7 +177,7 @@ if ( $count > 0 ) {
                        if ( isset( $options['skip-dupes'] ) ) {
                                $repo = $image->getRepo();
                                # XXX: we end up calculating this again when actually uploading. that sucks.
-                               $sha1 = File::sha1Base36( $file );
+                               $sha1 = FSFile::getSha1Base36FromPath( $file );
 
                                $dupes = $repo->findBySha1( $sha1 );
 
index c368c3f..49e0e9d 100644 (file)
@@ -69,21 +69,19 @@ class InitSiteStats extends Maintenance {
                        $this->output( "{$views}\n" );
                }
 
+               if ( $this->hasOption( 'update' ) ) {
+                       $this->output( "\nUpdating site statistics..." );
+                       $counter->refresh();
+                       $this->output( "done.\n" );
+               }
+
                if ( $this->hasOption( 'active' ) ) {
-                       $this->output( "Counting active users..." );
+                       $this->output( "\nCounting and updating active users..." );
                        $active = SiteStatsUpdate::cacheUpdate( wfGetDB( DB_MASTER ) );
                        $this->output( "{$active}\n" );
                }
 
-               $this->output( "\nUpdating site statistics..." );
-
-               if ( $this->hasOption( 'update' ) ) {
-                       $counter->update();
-               } else {
-                       $counter->refresh();
-               }
-
-               $this->output( "done.\n" );
+               $this->output( "\nDone.\n" );
        }
 }
 
diff --git a/maintenance/mssql/archives/named_constraints.sql b/maintenance/mssql/archives/named_constraints.sql
new file mode 100644 (file)
index 0000000..94b77ea
--- /dev/null
@@ -0,0 +1,38 @@
+DECLARE @fullyQualifiedTableName nvarchar(max),
+@tableName sysname,
+@fieldName sysname,
+@constr sysname,
+@constrNew sysname,
+@sqlcmd nvarchar(max),
+@sqlcreate nvarchar(max)
+
+SET @fullyQualifiedTableName = '/*_*//*$tableName*/'
+SET @tableName = '/*$tableName*/'
+SET @fieldName = '/*$fieldName*/'
+
+SELECT @constr = CONSTRAINT_NAME
+FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
+WHERE TABLE_NAME = @tableName
+AND CONSTRAINT_CATALOG = '/*$wgDBname*/'
+AND CONSTRAINT_SCHEMA = '/*$wgDBmwschema*/'
+AND CONSTRAINT_TYPE = 'CHECK'
+AND CONSTRAINT_NAME LIKE ('CK__' + left(@tableName,9) + '__' + left(@fieldName,5) + '%')
+
+SELECT @constrNew = CONSTRAINT_NAME
+FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
+WHERE TABLE_NAME = @tableName
+AND CONSTRAINT_CATALOG = '/*$wgDBname*/'
+AND CONSTRAINT_SCHEMA = '/*$wgDBmwschema*/'
+AND CONSTRAINT_TYPE = 'CHECK'
+AND CONSTRAINT_NAME = (@fieldName + '_ckc')
+
+IF @constr IS NOT NULL
+BEGIN
+  SET @sqlcmd =  'ALTER TABLE ' + @fullyQualifiedTableName + ' DROP CONSTRAINT [' + @constr + ']'
+  EXECUTE sp_executesql @sqlcmd
+END
+IF @constrNew IS NULL
+BEGIN
+  SET @sqlcreate =  'ALTER TABLE ' + @fullyQualifiedTableName + ' WITH NOCHECK ADD CONSTRAINT ' + @fieldName + '_ckc CHECK /*$checkConstraint*/;'
+  EXECUTE sp_executesql @sqlcreate
+END
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-page_page_lang.sql b/maintenance/mssql/archives/patch-page_page_lang.sql
new file mode 100644 (file)
index 0000000..d2f537b
--- /dev/null
@@ -0,0 +1 @@
+ALTER TABLE /*_*/page ADD page_lang VARBINARY(35) DEFAULT NULL
index fb8db08..daaa81e 100644 (file)
@@ -119,7 +119,8 @@ CREATE TABLE /*_*/page (
    page_links_updated varchar(14) DEFAULT NULL,
    page_latest INT, -- FK inserted later
    page_len INT NOT NULL,
-   page_content_model nvarchar(32) default null
+   page_content_model nvarchar(32) default null,
+   page_lang VARBINARY(35) DEFAULT NULL
 );
 CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page (page_namespace,page_title);
 CREATE INDEX /*i*/page_random ON /*_*/page (page_random);
@@ -298,8 +299,9 @@ CREATE TABLE /*_*/categorylinks (
   -- paginate the three categories separately.  This never has to be updated
   -- after the page is created, since none of these page types can be moved to
   -- any other.
+  cl_type varchar(10) NOT NULL default 'page',
   -- SQL server doesn't have enums, so we approximate with this
-  cl_type varchar(10) NOT NULL default 'page' CHECK (cl_type IN('page', 'subcat', 'file'))
+  CONSTRAINT cl_type_ckc CHECK (cl_type IN('page', 'subcat', 'file'))
 );
 
 CREATE UNIQUE INDEX /*i*/cl_from ON /*_*/categorylinks (cl_from,cl_to);
@@ -566,11 +568,11 @@ CREATE TABLE /*_*/image (
   img_bits int NOT NULL default 0,
 
   -- Media type as defined by the MEDIATYPE_xxx constants
-  img_media_type varchar(16) default null check (img_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE')),
+  img_media_type varchar(16) default null,
 
   -- major part of a MIME media type as defined by IANA
   -- see http://www.iana.org/assignments/media-types/
-  img_major_mime varchar(16) not null default 'unknown' check (img_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart')),
+  img_major_mime varchar(16) not null default 'unknown',
 
   -- minor part of a MIME media type as defined by IANA
   -- the minor parts are not required to adher to any standard
@@ -590,7 +592,10 @@ CREATE TABLE /*_*/image (
   img_timestamp nvarchar(14) NOT NULL default '',
 
   -- SHA-1 content hash in base-36
-  img_sha1 nvarchar(32) NOT NULL default ''
+  img_sha1 nvarchar(32) NOT NULL default '',
+
+  CONSTRAINT img_major_mime_ckc check (img_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart')),
+  CONSTRAINT img_media_type_ckc check (img_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))
 );
 
 CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
@@ -628,11 +633,14 @@ CREATE TABLE /*_*/oldimage (
   oi_timestamp varchar(14) NOT NULL default '',
 
   oi_metadata nvarchar(max) NOT NULL,
-  oi_media_type varchar(16) default null check (oi_media_type IN('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE')),
-  oi_major_mime varchar(16) not null default 'unknown' check (oi_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart')),
+  oi_media_type varchar(16) default null,
+  oi_major_mime varchar(16) not null default 'unknown',
   oi_minor_mime nvarchar(100) NOT NULL default 'unknown',
   oi_deleted tinyint NOT NULL default 0,
-  oi_sha1 nvarchar(32) NOT NULL default ''
+  oi_sha1 nvarchar(32) NOT NULL default '',
+
+  CONSTRAINT oi_major_mime_ckc check (oi_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart')),
+  CONSTRAINT oi_media_type_ckc check (oi_media_type IN('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))
 );
 
 CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
@@ -678,8 +686,8 @@ CREATE TABLE /*_*/filearchive (
   fa_height int default 0,
   fa_metadata nvarchar(max),
   fa_bits int default 0,
-  fa_media_type varchar(16) default null check (fa_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE')),
-  fa_major_mime varchar(16) not null default 'unknown' check (fa_major_mime in('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart')),
+  fa_media_type varchar(16) default null,
+  fa_major_mime varchar(16) not null default 'unknown',
   fa_minor_mime nvarchar(100) default 'unknown',
   fa_description nvarchar(255),
   fa_user int default 0 REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
@@ -690,7 +698,10 @@ CREATE TABLE /*_*/filearchive (
   fa_deleted tinyint NOT NULL default 0,
 
   -- sha1 hash of file content
-  fa_sha1 nvarchar(32) NOT NULL default ''
+  fa_sha1 nvarchar(32) NOT NULL default '',
+
+  CONSTRAINT fa_major_mime_ckc check (fa_major_mime in('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart')),
+  CONSTRAINT fa_media_type_ckc check (fa_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))
 );
 
 -- pick out by image name
@@ -736,21 +747,22 @@ CREATE TABLE /*_*/uploadstash (
   -- chunk counter starts at 0, current offset is stored in us_size
   us_chunk_inx int NULL,
 
-  -- Serialized file properties from File::getPropsFromPath
+  -- Serialized file properties from FSFile::getProps()
   us_props nvarchar(max),
 
   -- file size in bytes
   us_size int NOT NULL,
-  -- this hash comes from File::sha1Base36(), and is 31 characters
+  -- this hash comes from FSFile::getSha1Base36(), and is 31 characters
   us_sha1 nvarchar(31) NOT NULL,
   us_mime nvarchar(255),
   -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
-  us_media_type varchar(16) default null check (us_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE')),
+  us_media_type varchar(16) default null,
   -- image-specific properties
   us_image_width int,
   us_image_height int,
-  us_image_bits smallint
+  us_image_bits smallint,
 
+  CONSTRAINT us_media_type_ckc check (us_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))
 );
 
 -- sometimes there's a delete for all of a user's stuff.
diff --git a/maintenance/oracle/archives/patch-page-page_lang.sql b/maintenance/oracle/archives/patch-page-page_lang.sql
new file mode 100644 (file)
index 0000000..cae7cf9
--- /dev/null
@@ -0,0 +1,3 @@
+define mw_prefix='{$wgDBprefix}';
+
+ALTER TABLE &mw_prefix.page ADD page_lang VARCHAR2(35);
index ff84858..1e0fa40 100644 (file)
@@ -77,7 +77,8 @@ CREATE TABLE &mw_prefix.page (
   page_links_updated TIMESTAMP(6) WITH TIME ZONE,
   page_latest        NUMBER        DEFAULT 0 NOT NULL, -- FK?
   page_len           NUMBER        DEFAULT 0 NOT NULL,
-  page_content_model VARCHAR2(32)
+  page_content_model VARCHAR2(32),
+  page_lang VARCHAR2(35) DEFAULT NULL
 );
 ALTER TABLE &mw_prefix.page ADD CONSTRAINT &mw_prefix.page_pk PRIMARY KEY (page_id);
 CREATE UNIQUE INDEX &mw_prefix.page_u01 ON &mw_prefix.page (page_namespace,page_title);
index c4b208a..3bde81e 100644 (file)
@@ -41,7 +41,7 @@ class PageExists extends Maintenance {
                if ( $pageExists ) {
                        $text = "{$title} exists.";
                } else {
-                       $text = "{$title} doesn't exist.";
+                       $text = "{$titleArg} doesn't exist.";
                        $code = 1;
                }
                $this->output( $text );
index be8cbdb..cf35fe8 100644 (file)
@@ -89,7 +89,8 @@ CREATE TABLE page (
   page_links_updated TIMESTAMPTZ    NULL,
   page_latest        INTEGER        NOT NULL, -- FK?
   page_len           INTEGER        NOT NULL,
-  page_content_model TEXT
+  page_content_model TEXT,
+  page_lang          TEXT                     DEFAULT NULL
 );
 CREATE UNIQUE INDEX page_unique_name ON page (page_namespace, page_title);
 CREATE INDEX page_main_title         ON page (page_title text_pattern_ops) WHERE page_namespace = 0;
index cc5988c..ca9572f 100755 (executable)
@@ -63,10 +63,8 @@ then
        exit 0
 fi
 
-# Build the distribution (using grunt-test instead of grunt-build, because we
-# want to run unit tests first, and because grunt-build is for a release build
-# and wouldn't put a git hash in the file headers)
-npm install && grunt test || exit 1
+# Build the distribution
+npm install && grunt git-build || exit 1
 
 # Get the list of changes
 NEWCHANGES=$(git log $OLDHASH.. --oneline --no-merges --reverse --color=never)
diff --git a/maintenance/sqlite/archives/patch-page-page_lang.sql b/maintenance/sqlite/archives/patch-page-page_lang.sql
new file mode 100644 (file)
index 0000000..8de2dc7
--- /dev/null
@@ -0,0 +1,3 @@
+-- Add page_lang column
+
+ALTER TABLE /*$wgDBprefix*/page ADD COLUMN page_lang TEXT default NULL;
index 67696f2..6f200b2 100644 (file)
@@ -275,7 +275,10 @@ CREATE TABLE /*_*/page (
   page_len int unsigned NOT NULL,
 
   -- content model, see CONTENT_MODEL_XXX constants
-  page_content_model varbinary(32) DEFAULT NULL
+  page_content_model varbinary(32) DEFAULT NULL,
+
+  -- Page content language
+  page_lang varbinary(35) DEFAULT NULL
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page (page_namespace,page_title);
@@ -1001,12 +1004,12 @@ CREATE TABLE /*_*/uploadstash (
   -- chunk counter starts at 0, current offset is stored in us_size
   us_chunk_inx int unsigned NULL,
 
-  -- Serialized file properties from File::getPropsFromPath
+  -- Serialized file properties from FSFile::getProps()
   us_props blob,
 
   -- file size in bytes
   us_size int unsigned NOT NULL,
-  -- this hash comes from File::sha1Base36(), and is 31 characters
+  -- this hash comes from FSFile::getSha1Base36(), and is 31 characters
   us_sha1 varchar(31) NOT NULL,
   us_mime varchar(255),
   -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
index fae9063..6164282 100644 (file)
@@ -34,8 +34,8 @@ class UpdateSpecialPages extends Maintenance {
                parent::__construct();
                $this->addOption( 'list', 'List special page names' );
                $this->addOption( 'only', 'Only update "page"; case sensitive, ' .
-                       'check correct case by calling this script with --list or on ' .
-                       'includes/QueryPage.php. Ex: --only=BrokenRedirects', false, true );
+                       'check correct case by calling this script with --list. ' .
+                       'Ex: --only=BrokenRedirects', false, true );
                $this->addOption( 'override', 'Also update pages that have updates disabled' );
        }
 
index d22454f..56c1308 100644 (file)
@@ -39,8 +39,7 @@ function wfInstallerMain() {
 
                if( $installer->request->getVal( "css" ) ) {
                        // Do not display errors on css pages
-                       $cssDir = $installer->request->getVal( "css" );
-                       $installer->outputCss( $cssDir );
+                       $installer->outputCss();
                        exit;
                }
 
index fd62910..4f854fb 100644 (file)
@@ -232,7 +232,11 @@ return array(
                'scripts' => 'resources/lib/jquery/jquery.hoverIntent.js',
        ),
        'jquery.json' => array(
-               'scripts' => 'resources/lib/jquery/jquery.json.js',
+               // @deprecated since 1.24: Use the 'json' module and global JSON object instead.
+               'scripts' => array(
+                       'resources/lib/jquery/jquery.json.js',
+                       'resources/src/jquery.json-deprecate.js',
+               ),
                'targets' => array( 'mobile', 'desktop' ),
        ),
        'jquery.localize' => array(
@@ -276,7 +280,7 @@ return array(
        ),
        'jquery.jStorage' => array(
                'scripts' => 'resources/lib/jquery/jquery.jStorage.js',
-               'dependencies' => 'jquery.json',
+               'dependencies' => 'json',
        ),
        'jquery.suggestions' => array(
                'scripts' => 'resources/src/jquery/jquery.suggestions.js',
@@ -676,14 +680,25 @@ return array(
                'group' => 'jquery.ui',
        ),
 
+       /* json2 */
+
+       'json' => array(
+               'scripts' => 'resources/lib/json2/json2.js',
+               'targets' => array( 'desktop', 'mobile' ),
+               'skipFunction' => 'resources/src/json-skip.js',
+       ),
+
        /* Moment.js */
 
        'moment' => array(
                'scripts' => 'resources/lib/moment/moment.js',
                'languageScripts' => array(
-                       'ar-ma' => 'resources/lib/moment/lang/ar-ma.js',
                        'ar' => 'resources/lib/moment/lang/ar.js',
+                       'ar-ma' => 'resources/lib/moment/lang/ar-ma.js',
+                       'ar-sa' => 'resources/lib/moment/lang/ar-sa.js',
+                       'az' => 'resources/lib/moment/lang/az.js',
                        'bg' => 'resources/lib/moment/lang/bg.js',
+                       'bn' => 'resources/lib/moment/lang/bn.js',
                        'br' => 'resources/lib/moment/lang/br.js',
                        'bs' => 'resources/lib/moment/lang/bs.js',
                        'ca' => 'resources/lib/moment/lang/ca.js',
@@ -692,6 +707,7 @@ return array(
                        'cy' => 'resources/lib/moment/lang/cy.js',
                        'da' => 'resources/lib/moment/lang/da.js',
                        'de' => 'resources/lib/moment/lang/de.js',
+                       'de-at' => 'resources/lib/moment/lang/de-at.js',
                        'el' => 'resources/lib/moment/lang/el.js',
                        'en-au' => 'resources/lib/moment/lang/en-au.js',
                        'en-ca' => 'resources/lib/moment/lang/en-ca.js',
@@ -735,15 +751,15 @@ return array(
                        'sk' => 'resources/lib/moment/lang/sk.js',
                        'sl' => 'resources/lib/moment/lang/sl.js',
                        'sq' => 'resources/lib/moment/lang/sq.js',
-                       'sr-el' => 'resources/lib/moment/lang/sr.js',
-                       'sr-ec' => 'resources/lib/moment/lang/sr-cyr.js',
+                       'sr' => 'resources/lib/moment/lang/sr.js',
+                       'sr-ec' => 'resources/lib/moment/lang/sr-cyrl.js',
                        'sv' => 'resources/lib/moment/lang/sv.js',
                        'ta' => 'resources/lib/moment/lang/ta.js',
                        'th' => 'resources/lib/moment/lang/th.js',
                        'tl-ph' => 'resources/lib/moment/lang/tl-ph.js',
                        'tr' => 'resources/lib/moment/lang/tr.js',
-                       'tzm-la' => 'resources/lib/moment/lang/tzm-la.js',
                        'tzm' => 'resources/lib/moment/lang/tzm.js',
+                       'tzm-latn' => 'resources/lib/moment/lang/tzm-latn.js',
                        'uk' => 'resources/lib/moment/lang/uk.js',
                        'uz' => 'resources/lib/moment/lang/uz.js',
                        'vi' => 'resources/lib/moment/lang/vi.js',
@@ -869,7 +885,7 @@ return array(
                'scripts' => 'resources/src/mediawiki/mediawiki.inspect.js',
                'dependencies' => array(
                        'jquery.byteLength',
-                       'jquery.json',
+                       'json',
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -1230,6 +1246,9 @@ return array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.movePage.js',
                'dependencies' => 'jquery.byteLimit',
        ),
+       'mediawiki.special.pageLanguage' => array(
+               'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js',
+       ),
        'mediawiki.special.pagesWithProp' => array(
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.pagesWithProp.css',
        ),
@@ -1440,15 +1459,30 @@ return array(
                'targets' => array( 'desktop', 'mobile' ),
        ),
 
+       /* es5-shim */
+       'es5-shim' => array(
+               'scripts' => array(
+                       'resources/lib/es5-shim/es5-shim.js',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+               'skipFunction' => 'resources/src/es5-skip.js',
+       ),
+
        /* OOjs */
-       // WARNING: OOjs and OOjs-UI are NOT COMPATIBLE with older browsers and
-       // WILL BREAK if loaded in browsers that don't support ES5
        'oojs' => array(
                'scripts' => array(
                        'resources/lib/oojs/oojs.js',
                ),
                'targets' => array( 'desktop', 'mobile' ),
+               'dependencies' => array(
+                       'es5-shim',
+                       'json',
+               ),
        ),
+
+       /* OOjs UI */
+       // WARNING: OOjs-UI is NOT TESTED with older browsers and is likely to break
+       // if loaded in browsers that don't support ES5
        'oojs-ui' => array(
                'scripts' => array(
                        'resources/lib/oojs-ui/oojs-ui.js',
@@ -1472,6 +1506,7 @@ return array(
                        'ooui-dialog-confirm-default-cancel'
                ),
                'dependencies' => array(
+                       'es5-shim',
                        'oojs',
                ),
                'targets' => array( 'desktop', 'mobile' ),
diff --git a/resources/lib/es5-shim/es5-shim.js b/resources/lib/es5-shim/es5-shim.js
new file mode 100644 (file)
index 0000000..02048c0
--- /dev/null
@@ -0,0 +1,1432 @@
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2014 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/master/LICENSE
+ */
+
+// vim: ts=4 sts=4 sw=4 expandtab
+
+//Add semicolon to prevent IIFE from being passed as argument to concated code.
+;
+
+// UMD (Universal Module Definition)
+// see https://github.com/umdjs/umd/blob/master/returnExports.js
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(factory);
+    } else if (typeof exports === 'object') {
+        // Node. Does not work with strict CommonJS, but
+        // only CommonJS-like enviroments that support module.exports,
+        // like Node.
+        module.exports = factory();
+    } else {
+        // Browser globals (root is window)
+        root.returnExports = factory();
+    }
+}(this, function () {
+
+/**
+ * Brings an environment as close to ECMAScript 5 compliance
+ * as is possible with the facilities of erstwhile engines.
+ *
+ * Annotated ES5: http://es5.github.com/ (specific links below)
+ * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+ * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/
+ */
+
+// Shortcut to an often accessed properties, in order to avoid multiple
+// dereference that costs universally.
+var ArrayPrototype = Array.prototype;
+var ObjectPrototype = Object.prototype;
+var FunctionPrototype = Function.prototype;
+var StringPrototype = String.prototype;
+var NumberPrototype = Number.prototype;
+var _Array_slice_ = ArrayPrototype.slice;
+var array_splice = ArrayPrototype.splice;
+var array_push = ArrayPrototype.push;
+var array_unshift = ArrayPrototype.unshift;
+var call = FunctionPrototype.call;
+
+// Having a toString local variable name breaks in Opera so use _toString.
+var _toString = ObjectPrototype.toString;
+
+var isFunction = function (val) {
+    return ObjectPrototype.toString.call(val) === '[object Function]';
+};
+var isRegex = function (val) {
+    return ObjectPrototype.toString.call(val) === '[object RegExp]';
+};
+var isArray = function isArray(obj) {
+    return _toString.call(obj) === "[object Array]";
+};
+var isString = function isString(obj) {
+    return _toString.call(obj) === "[object String]";
+};
+var isArguments = function isArguments(value) {
+    var str = _toString.call(value);
+    var isArgs = str === '[object Arguments]';
+    if (!isArgs) {
+        isArgs = !isArray(str)
+            && value !== null
+            && typeof value === 'object'
+            && typeof value.length === 'number'
+            && value.length >= 0
+            && isFunction(value.callee);
+    }
+    return isArgs;
+};
+
+var supportsDescriptors = Object.defineProperty && (function () {
+    try {
+        Object.defineProperty({}, 'x', {});
+        return true;
+    } catch (e) { /* this is ES3 */
+        return false;
+    }
+}());
+
+// Define configurable, writable and non-enumerable props
+// if they don't exist.
+var defineProperty;
+if (supportsDescriptors) {
+    defineProperty = function (object, name, method, forceAssign) {
+        if (!forceAssign && (name in object)) { return; }
+        Object.defineProperty(object, name, {
+            configurable: true,
+            enumerable: false,
+            writable: true,
+            value: method
+        });
+    };
+} else {
+    defineProperty = function (object, name, method, forceAssign) {
+        if (!forceAssign && (name in object)) { return; }
+        object[name] = method;
+    };
+}
+var defineProperties = function (object, map, forceAssign) {
+    for (var name in map) {
+        if (ObjectPrototype.hasOwnProperty.call(map, name)) {
+          defineProperty(object, name, map[name], forceAssign);
+        }
+    }
+};
+
+//
+// Util
+// ======
+//
+
+// ES5 9.4
+// http://es5.github.com/#x9.4
+// http://jsperf.com/to-integer
+
+function toInteger(n) {
+    n = +n;
+    if (n !== n) { // isNaN
+        n = 0;
+    } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
+        n = (n > 0 || -1) * Math.floor(Math.abs(n));
+    }
+    return n;
+}
+
+function isPrimitive(input) {
+    var type = typeof input;
+    return (
+        input === null ||
+        type === "undefined" ||
+        type === "boolean" ||
+        type === "number" ||
+        type === "string"
+    );
+}
+
+function toPrimitive(input) {
+    var val, valueOf, toStr;
+    if (isPrimitive(input)) {
+        return input;
+    }
+    valueOf = input.valueOf;
+    if (isFunction(valueOf)) {
+        val = valueOf.call(input);
+        if (isPrimitive(val)) {
+            return val;
+        }
+    }
+    toStr = input.toString;
+    if (isFunction(toStr)) {
+        val = toStr.call(input);
+        if (isPrimitive(val)) {
+            return val;
+        }
+    }
+    throw new TypeError();
+}
+
+// ES5 9.9
+// http://es5.github.com/#x9.9
+var toObject = function (o) {
+    if (o == null) { // this matches both null and undefined
+        throw new TypeError("can't convert " + o + " to object");
+    }
+    return Object(o);
+};
+
+var ToUint32 = function ToUint32(x) {
+    return x >>> 0;
+};
+
+//
+// Function
+// ========
+//
+
+// ES-5 15.3.4.5
+// http://es5.github.com/#x15.3.4.5
+
+function Empty() {}
+
+defineProperties(FunctionPrototype, {
+    bind: function bind(that) { // .length is 1
+        // 1. Let Target be the this value.
+        var target = this;
+        // 2. If IsCallable(Target) is false, throw a TypeError exception.
+        if (!isFunction(target)) {
+            throw new TypeError("Function.prototype.bind called on incompatible " + target);
+        }
+        // 3. Let A be a new (possibly empty) internal list of all of the
+        //   argument values provided after thisArg (arg1, arg2 etc), in order.
+        // XXX slicedArgs will stand in for "A" if used
+        var args = _Array_slice_.call(arguments, 1); // for normal call
+        // 4. Let F be a new native ECMAScript object.
+        // 11. Set the [[Prototype]] internal property of F to the standard
+        //   built-in Function prototype object as specified in 15.3.3.1.
+        // 12. Set the [[Call]] internal property of F as described in
+        //   15.3.4.5.1.
+        // 13. Set the [[Construct]] internal property of F as described in
+        //   15.3.4.5.2.
+        // 14. Set the [[HasInstance]] internal property of F as described in
+        //   15.3.4.5.3.
+        var binder = function () {
+
+            if (this instanceof bound) {
+                // 15.3.4.5.2 [[Construct]]
+                // When the [[Construct]] internal method of a function object,
+                // F that was created using the bind function is called with a
+                // list of arguments ExtraArgs, the following steps are taken:
+                // 1. Let target be the value of F's [[TargetFunction]]
+                //   internal property.
+                // 2. If target has no [[Construct]] internal method, a
+                //   TypeError exception is thrown.
+                // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
+                //   property.
+                // 4. Let args be a new list containing the same values as the
+                //   list boundArgs in the same order followed by the same
+                //   values as the list ExtraArgs in the same order.
+                // 5. Return the result of calling the [[Construct]] internal
+                //   method of target providing args as the arguments.
+
+                var result = target.apply(
+                    this,
+                    args.concat(_Array_slice_.call(arguments))
+                );
+                if (Object(result) === result) {
+                    return result;
+                }
+                return this;
+
+            } else {
+                // 15.3.4.5.1 [[Call]]
+                // When the [[Call]] internal method of a function object, F,
+                // which was created using the bind function is called with a
+                // this value and a list of arguments ExtraArgs, the following
+                // steps are taken:
+                // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
+                //   property.
+                // 2. Let boundThis be the value of F's [[BoundThis]] internal
+                //   property.
+                // 3. Let target be the value of F's [[TargetFunction]] internal
+                //   property.
+                // 4. Let args be a new list containing the same values as the
+                //   list boundArgs in the same order followed by the same
+                //   values as the list ExtraArgs in the same order.
+                // 5. Return the result of calling the [[Call]] internal method
+                //   of target providing boundThis as the this value and
+                //   providing args as the arguments.
+
+                // equiv: target.call(this, ...boundArgs, ...args)
+                return target.apply(
+                    that,
+                    args.concat(_Array_slice_.call(arguments))
+                );
+
+            }
+
+        };
+
+        // 15. If the [[Class]] internal property of Target is "Function", then
+        //     a. Let L be the length property of Target minus the length of A.
+        //     b. Set the length own property of F to either 0 or L, whichever is
+        //       larger.
+        // 16. Else set the length own property of F to 0.
+
+        var boundLength = Math.max(0, target.length - args.length);
+
+        // 17. Set the attributes of the length own property of F to the values
+        //   specified in 15.3.5.1.
+        var boundArgs = [];
+        for (var i = 0; i < boundLength; i++) {
+            boundArgs.push("$" + i);
+        }
+
+        // XXX Build a dynamic function with desired amount of arguments is the only
+        // way to set the length property of a function.
+        // In environments where Content Security Policies enabled (Chrome extensions,
+        // for ex.) all use of eval or Function costructor throws an exception.
+        // However in all of these environments Function.prototype.bind exists
+        // and so this code will never be executed.
+        var bound = Function("binder", "return function (" + boundArgs.join(",") + "){return binder.apply(this,arguments)}")(binder);
+
+        if (target.prototype) {
+            Empty.prototype = target.prototype;
+            bound.prototype = new Empty();
+            // Clean up dangling references.
+            Empty.prototype = null;
+        }
+
+        // TODO
+        // 18. Set the [[Extensible]] internal property of F to true.
+
+        // TODO
+        // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
+        // 20. Call the [[DefineOwnProperty]] internal method of F with
+        //   arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
+        //   thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
+        //   false.
+        // 21. Call the [[DefineOwnProperty]] internal method of F with
+        //   arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
+        //   [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
+        //   and false.
+
+        // TODO
+        // NOTE Function objects created using Function.prototype.bind do not
+        // have a prototype property or the [[Code]], [[FormalParameters]], and
+        // [[Scope]] internal properties.
+        // XXX can't delete prototype in pure-js.
+
+        // 22. Return F.
+        return bound;
+    }
+});
+
+// _Please note: Shortcuts are defined after `Function.prototype.bind` as we
+// us it in defining shortcuts.
+var owns = call.bind(ObjectPrototype.hasOwnProperty);
+
+// If JS engine supports accessors creating shortcuts.
+var defineGetter;
+var defineSetter;
+var lookupGetter;
+var lookupSetter;
+var supportsAccessors;
+if ((supportsAccessors = owns(ObjectPrototype, "__defineGetter__"))) {
+    defineGetter = call.bind(ObjectPrototype.__defineGetter__);
+    defineSetter = call.bind(ObjectPrototype.__defineSetter__);
+    lookupGetter = call.bind(ObjectPrototype.__lookupGetter__);
+    lookupSetter = call.bind(ObjectPrototype.__lookupSetter__);
+}
+
+//
+// Array
+// =====
+//
+
+// ES5 15.4.4.12
+// http://es5.github.com/#x15.4.4.12
+var spliceNoopReturnsEmptyArray = (function () {
+    var a = [1, 2];
+    var result = a.splice();
+    return a.length === 2 && isArray(result) && result.length === 0;
+}());
+defineProperties(ArrayPrototype, {
+    // Safari 5.0 bug where .splice() returns undefined
+    splice: function splice(start, deleteCount) {
+        if (arguments.length === 0) {
+            return [];
+        } else {
+            return array_splice.apply(this, arguments);
+        }
+    }
+}, spliceNoopReturnsEmptyArray);
+
+var spliceWorksWithEmptyObject = (function () {
+    var obj = {};
+    ArrayPrototype.splice.call(obj, 0, 0, 1);
+    return obj.length === 1;
+}());
+var omittingSecondSpliceArgIsNoop = [1].splice(0).length === 0;
+defineProperties(ArrayPrototype, {
+    splice: function splice(start, deleteCount) {
+        if (arguments.length === 0) { return []; }
+        var args = arguments;
+        this.length = Math.max(toInteger(this.length), 0);
+        if (arguments.length > 0 && typeof deleteCount !== 'number') {
+            args = _Array_slice_.call(arguments);
+            if (args.length < 2) {
+                args.push(toInteger(deleteCount));
+            } else {
+                args[1] = toInteger(deleteCount);
+            }
+        }
+        return array_splice.apply(this, args);
+    }
+}, !omittingSecondSpliceArgIsNoop || !spliceWorksWithEmptyObject);
+
+// ES5 15.4.4.12
+// http://es5.github.com/#x15.4.4.13
+// Return len+argCount.
+// [bugfix, ielt8]
+// IE < 8 bug: [].unshift(0) === undefined but should be "1"
+var hasUnshiftReturnValueBug = [].unshift(0) !== 1;
+defineProperties(ArrayPrototype, {
+    unshift: function () {
+        array_unshift.apply(this, arguments);
+        return this.length;
+    }
+}, hasUnshiftReturnValueBug);
+
+// ES5 15.4.3.2
+// http://es5.github.com/#x15.4.3.2
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray
+defineProperties(Array, { isArray: isArray });
+
+// The IsCallable() check in the Array functions
+// has been replaced with a strict check on the
+// internal class of the object to trap cases where
+// the provided function was actually a regular
+// expression literal, which in V8 and
+// JavaScriptCore is a typeof "function".  Only in
+// V8 are regular expression literals permitted as
+// reduce parameters, so it is desirable in the
+// general case for the shim to match the more
+// strict and common behavior of rejecting regular
+// expressions.
+
+// ES5 15.4.4.18
+// http://es5.github.com/#x15.4.4.18
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach
+
+// Check failure of by-index access of string characters (IE < 9)
+// and failure of `0 in boxedString` (Rhino)
+var boxedString = Object("a");
+var splitString = boxedString[0] !== "a" || !(0 in boxedString);
+
+var properlyBoxesContext = function properlyBoxed(method) {
+    // Check node 0.6.21 bug where third parameter is not boxed
+    var properlyBoxesNonStrict = true;
+    var properlyBoxesStrict = true;
+    if (method) {
+        method.call('foo', function (_, __, context) {
+            if (typeof context !== 'object') { properlyBoxesNonStrict = false; }
+        });
+
+        method.call([1], function () {
+            'use strict';
+            properlyBoxesStrict = typeof this === 'string';
+        }, 'x');
+    }
+    return !!method && properlyBoxesNonStrict && properlyBoxesStrict;
+};
+
+defineProperties(ArrayPrototype, {
+    forEach: function forEach(fun /*, thisp*/) {
+        var object = toObject(this),
+            self = splitString && isString(this) ? this.split('') : object,
+            thisp = arguments[1],
+            i = -1,
+            length = self.length >>> 0;
+
+        // If no callback function or if callback is not a callable function
+        if (!isFunction(fun)) {
+            throw new TypeError(); // TODO message
+        }
+
+        while (++i < length) {
+            if (i in self) {
+                // Invoke the callback function with call, passing arguments:
+                // context, property value, property key, thisArg object
+                // context
+                fun.call(thisp, self[i], i, object);
+            }
+        }
+    }
+}, !properlyBoxesContext(ArrayPrototype.forEach));
+
+// ES5 15.4.4.19
+// http://es5.github.com/#x15.4.4.19
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
+defineProperties(ArrayPrototype, {
+    map: function map(fun /*, thisp*/) {
+        var object = toObject(this),
+            self = splitString && isString(this) ? this.split('') : object,
+            length = self.length >>> 0,
+            result = Array(length),
+            thisp = arguments[1];
+
+        // If no callback function or if callback is not a callable function
+        if (!isFunction(fun)) {
+            throw new TypeError(fun + " is not a function");
+        }
+
+        for (var i = 0; i < length; i++) {
+            if (i in self) {
+                result[i] = fun.call(thisp, self[i], i, object);
+            }
+        }
+        return result;
+    }
+}, !properlyBoxesContext(ArrayPrototype.map));
+
+// ES5 15.4.4.20
+// http://es5.github.com/#x15.4.4.20
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
+defineProperties(ArrayPrototype, {
+    filter: function filter(fun /*, thisp */) {
+        var object = toObject(this),
+            self = splitString && isString(this) ? this.split('') : object,
+            length = self.length >>> 0,
+            result = [],
+            value,
+            thisp = arguments[1];
+
+        // If no callback function or if callback is not a callable function
+        if (!isFunction(fun)) {
+            throw new TypeError(fun + " is not a function");
+        }
+
+        for (var i = 0; i < length; i++) {
+            if (i in self) {
+                value = self[i];
+                if (fun.call(thisp, value, i, object)) {
+                    result.push(value);
+                }
+            }
+        }
+        return result;
+    }
+}, !properlyBoxesContext(ArrayPrototype.filter));
+
+// ES5 15.4.4.16
+// http://es5.github.com/#x15.4.4.16
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every
+defineProperties(ArrayPrototype, {
+    every: function every(fun /*, thisp */) {
+        var object = toObject(this),
+            self = splitString && isString(this) ? this.split('') : object,
+            length = self.length >>> 0,
+            thisp = arguments[1];
+
+        // If no callback function or if callback is not a callable function
+        if (!isFunction(fun)) {
+            throw new TypeError(fun + " is not a function");
+        }
+
+        for (var i = 0; i < length; i++) {
+            if (i in self && !fun.call(thisp, self[i], i, object)) {
+                return false;
+            }
+        }
+        return true;
+    }
+}, !properlyBoxesContext(ArrayPrototype.every));
+
+// ES5 15.4.4.17
+// http://es5.github.com/#x15.4.4.17
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some
+defineProperties(ArrayPrototype, {
+    some: function some(fun /*, thisp */) {
+        var object = toObject(this),
+            self = splitString && isString(this) ? this.split('') : object,
+            length = self.length >>> 0,
+            thisp = arguments[1];
+
+        // If no callback function or if callback is not a callable function
+        if (!isFunction(fun)) {
+            throw new TypeError(fun + " is not a function");
+        }
+
+        for (var i = 0; i < length; i++) {
+            if (i in self && fun.call(thisp, self[i], i, object)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}, !properlyBoxesContext(ArrayPrototype.some));
+
+// ES5 15.4.4.21
+// http://es5.github.com/#x15.4.4.21
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce
+var reduceCoercesToObject = false;
+if (ArrayPrototype.reduce) {
+    reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) { return list; }) === 'object';
+}
+defineProperties(ArrayPrototype, {
+    reduce: function reduce(fun /*, initial*/) {
+        var object = toObject(this),
+            self = splitString && isString(this) ? this.split('') : object,
+            length = self.length >>> 0;
+
+        // If no callback function or if callback is not a callable function
+        if (!isFunction(fun)) {
+            throw new TypeError(fun + " is not a function");
+        }
+
+        // no value to return if no initial value and an empty array
+        if (!length && arguments.length === 1) {
+            throw new TypeError("reduce of empty array with no initial value");
+        }
+
+        var i = 0;
+        var result;
+        if (arguments.length >= 2) {
+            result = arguments[1];
+        } else {
+            do {
+                if (i in self) {
+                    result = self[i++];
+                    break;
+                }
+
+                // if array contains no values, no initial value to return
+                if (++i >= length) {
+                    throw new TypeError("reduce of empty array with no initial value");
+                }
+            } while (true);
+        }
+
+        for (; i < length; i++) {
+            if (i in self) {
+                result = fun.call(void 0, result, self[i], i, object);
+            }
+        }
+
+        return result;
+    }
+}, !reduceCoercesToObject);
+
+// ES5 15.4.4.22
+// http://es5.github.com/#x15.4.4.22
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight
+var reduceRightCoercesToObject = false;
+if (ArrayPrototype.reduceRight) {
+    reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) { return list; }) === 'object';
+}
+defineProperties(ArrayPrototype, {
+    reduceRight: function reduceRight(fun /*, initial*/) {
+        var object = toObject(this),
+            self = splitString && isString(this) ? this.split('') : object,
+            length = self.length >>> 0;
+
+        // If no callback function or if callback is not a callable function
+        if (!isFunction(fun)) {
+            throw new TypeError(fun + " is not a function");
+        }
+
+        // no value to return if no initial value, empty array
+        if (!length && arguments.length === 1) {
+            throw new TypeError("reduceRight of empty array with no initial value");
+        }
+
+        var result, i = length - 1;
+        if (arguments.length >= 2) {
+            result = arguments[1];
+        } else {
+            do {
+                if (i in self) {
+                    result = self[i--];
+                    break;
+                }
+
+                // if array contains no values, no initial value to return
+                if (--i < 0) {
+                    throw new TypeError("reduceRight of empty array with no initial value");
+                }
+            } while (true);
+        }
+
+        if (i < 0) {
+            return result;
+        }
+
+        do {
+            if (i in self) {
+                result = fun.call(void 0, result, self[i], i, object);
+            }
+        } while (i--);
+
+        return result;
+    }
+}, !reduceRightCoercesToObject);
+
+// ES5 15.4.4.14
+// http://es5.github.com/#x15.4.4.14
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
+var hasFirefox2IndexOfBug = [0, 1].indexOf(1, 2) !== -1;
+defineProperties(ArrayPrototype, {
+    indexOf: function indexOf(sought /*, fromIndex */ ) {
+        var self = splitString && isString(this) ? this.split('') : toObject(this),
+            length = self.length >>> 0;
+
+        if (!length) {
+            return -1;
+        }
+
+        var i = 0;
+        if (arguments.length > 1) {
+            i = toInteger(arguments[1]);
+        }
+
+        // handle negative indices
+        i = i >= 0 ? i : Math.max(0, length + i);
+        for (; i < length; i++) {
+            if (i in self && self[i] === sought) {
+                return i;
+            }
+        }
+        return -1;
+    }
+}, hasFirefox2IndexOfBug);
+
+// ES5 15.4.4.15
+// http://es5.github.com/#x15.4.4.15
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf
+var hasFirefox2LastIndexOfBug = [0, 1].lastIndexOf(0, -3) !== -1;
+defineProperties(ArrayPrototype, {
+    lastIndexOf: function lastIndexOf(sought /*, fromIndex */) {
+        var self = splitString && isString(this) ? this.split('') : toObject(this),
+            length = self.length >>> 0;
+
+        if (!length) {
+            return -1;
+        }
+        var i = length - 1;
+        if (arguments.length > 1) {
+            i = Math.min(i, toInteger(arguments[1]));
+        }
+        // handle negative indices
+        i = i >= 0 ? i : length - Math.abs(i);
+        for (; i >= 0; i--) {
+            if (i in self && sought === self[i]) {
+                return i;
+            }
+        }
+        return -1;
+    }
+}, hasFirefox2LastIndexOfBug);
+
+//
+// Object
+// ======
+//
+
+// ES5 15.2.3.14
+// http://es5.github.com/#x15.2.3.14
+
+// http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
+var hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'),
+    hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'),
+    dontEnums = [
+        "toString",
+        "toLocaleString",
+        "valueOf",
+        "hasOwnProperty",
+        "isPrototypeOf",
+        "propertyIsEnumerable",
+        "constructor"
+    ],
+    dontEnumsLength = dontEnums.length;
+
+defineProperties(Object, {
+    keys: function keys(object) {
+        var isFn = isFunction(object),
+            isArgs = isArguments(object),
+            isObject = object !== null && typeof object === 'object',
+            isStr = isObject && isString(object);
+
+        if (!isObject && !isFn && !isArgs) {
+            throw new TypeError("Object.keys called on a non-object");
+        }
+
+        var theKeys = [];
+        var skipProto = hasProtoEnumBug && isFn;
+        if (isStr || isArgs) {
+            for (var i = 0; i < object.length; ++i) {
+                theKeys.push(String(i));
+            }
+        } else {
+            for (var name in object) {
+                if (!(skipProto && name === 'prototype') && owns(object, name)) {
+                    theKeys.push(String(name));
+                }
+            }
+        }
+
+        if (hasDontEnumBug) {
+            var ctor = object.constructor,
+                skipConstructor = ctor && ctor.prototype === object;
+            for (var j = 0; j < dontEnumsLength; j++) {
+                var dontEnum = dontEnums[j];
+                if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) {
+                    theKeys.push(dontEnum);
+                }
+            }
+        }
+        return theKeys;
+    }
+});
+
+var keysWorksWithArguments = Object.keys && (function () {
+    // Safari 5.0 bug
+    return Object.keys(arguments).length === 2;
+}(1, 2));
+var originalKeys = Object.keys;
+defineProperties(Object, {
+    keys: function keys(object) {
+        if (isArguments(object)) {
+            return originalKeys(ArrayPrototype.slice.call(object));
+        } else {
+            return originalKeys(object);
+        }
+    }
+}, !keysWorksWithArguments);
+
+//
+// Date
+// ====
+//
+
+// ES5 15.9.5.43
+// http://es5.github.com/#x15.9.5.43
+// This function returns a String value represent the instance in time
+// represented by this Date object. The format of the String is the Date Time
+// string format defined in 15.9.1.15. All fields are present in the String.
+// The time zone is always UTC, denoted by the suffix Z. If the time value of
+// this object is not a finite Number a RangeError exception is thrown.
+var negativeDate = -62198755200000;
+var negativeYearString = "-000001";
+var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1;
+
+defineProperties(Date.prototype, {
+    toISOString: function toISOString() {
+        var result, length, value, year, month;
+        if (!isFinite(this)) {
+            throw new RangeError("Date.prototype.toISOString called on non-finite value.");
+        }
+
+        year = this.getUTCFullYear();
+
+        month = this.getUTCMonth();
+        // see https://github.com/es-shims/es5-shim/issues/111
+        year += Math.floor(month / 12);
+        month = (month % 12 + 12) % 12;
+
+        // the date time string format is specified in 15.9.1.15.
+        result = [month + 1, this.getUTCDate(), this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds()];
+        year = (
+            (year < 0 ? "-" : (year > 9999 ? "+" : "")) +
+            ("00000" + Math.abs(year)).slice(0 <= year && year <= 9999 ? -4 : -6)
+        );
+
+        length = result.length;
+        while (length--) {
+            value = result[length];
+            // pad months, days, hours, minutes, and seconds to have two
+            // digits.
+            if (value < 10) {
+                result[length] = "0" + value;
+            }
+        }
+        // pad milliseconds to have three digits.
+        return (
+            year + "-" + result.slice(0, 2).join("-") +
+            "T" + result.slice(2).join(":") + "." +
+            ("000" + this.getUTCMilliseconds()).slice(-3) + "Z"
+        );
+    }
+}, hasNegativeDateBug);
+
+
+// ES5 15.9.5.44
+// http://es5.github.com/#x15.9.5.44
+// This function provides a String representation of a Date object for use by
+// JSON.stringify (15.12.3).
+var dateToJSONIsSupported = false;
+try {
+    dateToJSONIsSupported = (
+        Date.prototype.toJSON &&
+        new Date(NaN).toJSON() === null &&
+        new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 &&
+        Date.prototype.toJSON.call({ // generic
+            toISOString: function () {
+                return true;
+            }
+        })
+    );
+} catch (e) {
+}
+if (!dateToJSONIsSupported) {
+    Date.prototype.toJSON = function toJSON(key) {
+        // When the toJSON method is called with argument key, the following
+        // steps are taken:
+
+        // 1.  Let O be the result of calling ToObject, giving it the this
+        // value as its argument.
+        // 2. Let tv be toPrimitive(O, hint Number).
+        var o = Object(this),
+            tv = toPrimitive(o),
+            toISO;
+        // 3. If tv is a Number and is not finite, return null.
+        if (typeof tv === "number" && !isFinite(tv)) {
+            return null;
+        }
+        // 4. Let toISO be the result of calling the [[Get]] internal method of
+        // O with argument "toISOString".
+        toISO = o.toISOString;
+        // 5. If IsCallable(toISO) is false, throw a TypeError exception.
+        if (typeof toISO !== "function") {
+            throw new TypeError("toISOString property is not callable");
+        }
+        // 6. Return the result of calling the [[Call]] internal method of
+        //  toISO with O as the this value and an empty argument list.
+        return toISO.call(o);
+
+        // NOTE 1 The argument is ignored.
+
+        // NOTE 2 The toJSON function is intentionally generic; it does not
+        // require that its this value be a Date object. Therefore, it can be
+        // transferred to other kinds of objects for use as a method. However,
+        // it does require that any such object have a toISOString method. An
+        // object is free to use the argument key to filter its
+        // stringification.
+    };
+}
+
+// ES5 15.9.4.2
+// http://es5.github.com/#x15.9.4.2
+// based on work shared by Daniel Friesen (dantman)
+// http://gist.github.com/303249
+var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;
+var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z'));
+var doesNotParseY2KNewYear = isNaN(Date.parse("2000-01-01T00:00:00.000Z"));
+if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {
+    // XXX global assignment won't work in embeddings that use
+    // an alternate object for the context.
+    Date = (function (NativeDate) {
+
+        // Date.length === 7
+        function Date(Y, M, D, h, m, s, ms) {
+            var length = arguments.length;
+            if (this instanceof NativeDate) {
+                var date = length === 1 && String(Y) === Y ? // isString(Y)
+                    // We explicitly pass it through parse:
+                    new NativeDate(Date.parse(Y)) :
+                    // We have to manually make calls depending on argument
+                    // length here
+                    length >= 7 ? new NativeDate(Y, M, D, h, m, s, ms) :
+                    length >= 6 ? new NativeDate(Y, M, D, h, m, s) :
+                    length >= 5 ? new NativeDate(Y, M, D, h, m) :
+                    length >= 4 ? new NativeDate(Y, M, D, h) :
+                    length >= 3 ? new NativeDate(Y, M, D) :
+                    length >= 2 ? new NativeDate(Y, M) :
+                    length >= 1 ? new NativeDate(Y) :
+                                  new NativeDate();
+                // Prevent mixups with unfixed Date object
+                date.constructor = Date;
+                return date;
+            }
+            return NativeDate.apply(this, arguments);
+        }
+
+        // 15.9.1.15 Date Time String Format.
+        var isoDateExpression = new RegExp("^" +
+            "(\\d{4}|[\+\-]\\d{6})" + // four-digit year capture or sign +
+                                      // 6-digit extended year
+            "(?:-(\\d{2})" + // optional month capture
+            "(?:-(\\d{2})" + // optional day capture
+            "(?:" + // capture hours:minutes:seconds.milliseconds
+                "T(\\d{2})" + // hours capture
+                ":(\\d{2})" + // minutes capture
+                "(?:" + // optional :seconds.milliseconds
+                    ":(\\d{2})" + // seconds capture
+                    "(?:(\\.\\d{1,}))?" + // milliseconds capture
+                ")?" +
+            "(" + // capture UTC offset component
+                "Z|" + // UTC capture
+                "(?:" + // offset specifier +/-hours:minutes
+                    "([-+])" + // sign capture
+                    "(\\d{2})" + // hours offset capture
+                    ":(\\d{2})" + // minutes offset capture
+                ")" +
+            ")?)?)?)?" +
+        "$");
+
+        var months = [
+            0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
+        ];
+
+        function dayFromMonth(year, month) {
+            var t = month > 1 ? 1 : 0;
+            return (
+                months[month] +
+                Math.floor((year - 1969 + t) / 4) -
+                Math.floor((year - 1901 + t) / 100) +
+                Math.floor((year - 1601 + t) / 400) +
+                365 * (year - 1970)
+            );
+        }
+
+        function toUTC(t) {
+            return Number(new NativeDate(1970, 0, 1, 0, 0, 0, t));
+        }
+
+        // Copy any custom methods a 3rd party library may have added
+        for (var key in NativeDate) {
+            Date[key] = NativeDate[key];
+        }
+
+        // Copy "native" methods explicitly; they may be non-enumerable
+        Date.now = NativeDate.now;
+        Date.UTC = NativeDate.UTC;
+        Date.prototype = NativeDate.prototype;
+        Date.prototype.constructor = Date;
+
+        // Upgrade Date.parse to handle simplified ISO 8601 strings
+        Date.parse = function parse(string) {
+            var match = isoDateExpression.exec(string);
+            if (match) {
+                // parse months, days, hours, minutes, seconds, and milliseconds
+                // provide default values if necessary
+                // parse the UTC offset component
+                var year = Number(match[1]),
+                    month = Number(match[2] || 1) - 1,
+                    day = Number(match[3] || 1) - 1,
+                    hour = Number(match[4] || 0),
+                    minute = Number(match[5] || 0),
+                    second = Number(match[6] || 0),
+                    millisecond = Math.floor(Number(match[7] || 0) * 1000),
+                    // When time zone is missed, local offset should be used
+                    // (ES 5.1 bug)
+                    // see https://bugs.ecmascript.org/show_bug.cgi?id=112
+                    isLocalTime = Boolean(match[4] && !match[8]),
+                    signOffset = match[9] === "-" ? 1 : -1,
+                    hourOffset = Number(match[10] || 0),
+                    minuteOffset = Number(match[11] || 0),
+                    result;
+                if (
+                    hour < (
+                        minute > 0 || second > 0 || millisecond > 0 ?
+                        24 : 25
+                    ) &&
+                    minute < 60 && second < 60 && millisecond < 1000 &&
+                    month > -1 && month < 12 && hourOffset < 24 &&
+                    minuteOffset < 60 && // detect invalid offsets
+                    day > -1 &&
+                    day < (
+                        dayFromMonth(year, month + 1) -
+                        dayFromMonth(year, month)
+                    )
+                ) {
+                    result = (
+                        (dayFromMonth(year, month) + day) * 24 +
+                        hour +
+                        hourOffset * signOffset
+                    ) * 60;
+                    result = (
+                        (result + minute + minuteOffset * signOffset) * 60 +
+                        second
+                    ) * 1000 + millisecond;
+                    if (isLocalTime) {
+                        result = toUTC(result);
+                    }
+                    if (-8.64e15 <= result && result <= 8.64e15) {
+                        return result;
+                    }
+                }
+                return NaN;
+            }
+            return NativeDate.parse.apply(this, arguments);
+        };
+
+        return Date;
+    })(Date);
+}
+
+// ES5 15.9.4.4
+// http://es5.github.com/#x15.9.4.4
+if (!Date.now) {
+    Date.now = function now() {
+        return new Date().getTime();
+    };
+}
+
+
+//
+// Number
+// ======
+//
+
+// ES5.1 15.7.4.5
+// http://es5.github.com/#x15.7.4.5
+var hasToFixedBugs = NumberPrototype.toFixed && (
+  (0.00008).toFixed(3) !== '0.000'
+  || (0.9).toFixed(0) === '0'
+  || (1.255).toFixed(2) !== '1.25'
+  || (1000000000000000128).toFixed(0) !== "1000000000000000128"
+);
+
+var toFixedHelpers = {
+  base: 1e7,
+  size: 6,
+  data: [0, 0, 0, 0, 0, 0],
+  multiply: function multiply(n, c) {
+      var i = -1;
+      while (++i < toFixedHelpers.size) {
+          c += n * toFixedHelpers.data[i];
+          toFixedHelpers.data[i] = c % toFixedHelpers.base;
+          c = Math.floor(c / toFixedHelpers.base);
+      }
+  },
+  divide: function divide(n) {
+      var i = toFixedHelpers.size, c = 0;
+      while (--i >= 0) {
+          c += toFixedHelpers.data[i];
+          toFixedHelpers.data[i] = Math.floor(c / n);
+          c = (c % n) * toFixedHelpers.base;
+      }
+  },
+  numToString: function numToString() {
+      var i = toFixedHelpers.size;
+      var s = '';
+      while (--i >= 0) {
+          if (s !== '' || i === 0 || toFixedHelpers.data[i] !== 0) {
+              var t = String(toFixedHelpers.data[i]);
+              if (s === '') {
+                  s = t;
+              } else {
+                  s += '0000000'.slice(0, 7 - t.length) + t;
+              }
+          }
+      }
+      return s;
+  },
+  pow: function pow(x, n, acc) {
+      return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc)));
+  },
+  log: function log(x) {
+      var n = 0;
+      while (x >= 4096) {
+          n += 12;
+          x /= 4096;
+      }
+      while (x >= 2) {
+          n += 1;
+          x /= 2;
+      }
+      return n;
+  }
+};
+
+defineProperties(NumberPrototype, {
+    toFixed: function toFixed(fractionDigits) {
+        var f, x, s, m, e, z, j, k;
+
+        // Test for NaN and round fractionDigits down
+        f = Number(fractionDigits);
+        f = f !== f ? 0 : Math.floor(f);
+
+        if (f < 0 || f > 20) {
+            throw new RangeError("Number.toFixed called with invalid number of decimals");
+        }
+
+        x = Number(this);
+
+        // Test for NaN
+        if (x !== x) {
+            return "NaN";
+        }
+
+        // If it is too big or small, return the string value of the number
+        if (x <= -1e21 || x >= 1e21) {
+            return String(x);
+        }
+
+        s = "";
+
+        if (x < 0) {
+            s = "-";
+            x = -x;
+        }
+
+        m = "0";
+
+        if (x > 1e-21) {
+            // 1e-21 < x < 1e21
+            // -70 < log2(x) < 70
+            e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;
+            z = (e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1));
+            z *= 0x10000000000000; // Math.pow(2, 52);
+            e = 52 - e;
+
+            // -18 < e < 122
+            // x = z / 2 ^ e
+            if (e > 0) {
+                toFixedHelpers.multiply(0, z);
+                j = f;
+
+                while (j >= 7) {
+                    toFixedHelpers.multiply(1e7, 0);
+                    j -= 7;
+                }
+
+                toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);
+                j = e - 1;
+
+                while (j >= 23) {
+                    toFixedHelpers.divide(1 << 23);
+                    j -= 23;
+                }
+
+                toFixedHelpers.divide(1 << j);
+                toFixedHelpers.multiply(1, 1);
+                toFixedHelpers.divide(2);
+                m = toFixedHelpers.numToString();
+            } else {
+                toFixedHelpers.multiply(0, z);
+                toFixedHelpers.multiply(1 << (-e), 0);
+                m = toFixedHelpers.numToString() + '0.00000000000000000000'.slice(2, 2 + f);
+            }
+        }
+
+        if (f > 0) {
+            k = m.length;
+
+            if (k <= f) {
+                m = s + '0.0000000000000000000'.slice(0, f - k + 2) + m;
+            } else {
+                m = s + m.slice(0, k - f) + '.' + m.slice(k - f);
+            }
+        } else {
+            m = s + m;
+        }
+
+        return m;
+    }
+}, hasToFixedBugs);
+
+
+//
+// String
+// ======
+//
+
+// ES5 15.5.4.14
+// http://es5.github.com/#x15.5.4.14
+
+// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]
+// Many browsers do not split properly with regular expressions or they
+// do not perform the split correctly under obscure conditions.
+// See http://blog.stevenlevithan.com/archives/cross-browser-split
+// I've tested in many browsers and this seems to cover the deviant ones:
+//    'ab'.split(/(?:ab)*/) should be ["", ""], not [""]
+//    '.'.split(/(.?)(.?)/) should be ["", ".", "", ""], not ["", ""]
+//    'tesst'.split(/(s)*/) should be ["t", undefined, "e", "s", "t"], not
+//       [undefined, "t", undefined, "e", ...]
+//    ''.split(/.?/) should be [], not [""]
+//    '.'.split(/()()/) should be ["."], not ["", "", "."]
+
+var string_split = StringPrototype.split;
+if (
+    'ab'.split(/(?:ab)*/).length !== 2 ||
+    '.'.split(/(.?)(.?)/).length !== 4 ||
+    'tesst'.split(/(s)*/)[1] === "t" ||
+    'test'.split(/(?:)/, -1).length !== 4 ||
+    ''.split(/.?/).length ||
+    '.'.split(/()()/).length > 1
+) {
+    (function () {
+        var compliantExecNpcg = /()??/.exec("")[1] === void 0; // NPCG: nonparticipating capturing group
+
+        StringPrototype.split = function (separator, limit) {
+            var string = this;
+            if (separator === void 0 && limit === 0) {
+                return [];
+            }
+
+            // If `separator` is not a regex, use native split
+            if (_toString.call(separator) !== "[object RegExp]") {
+                return string_split.call(this, separator, limit);
+            }
+
+            var output = [],
+                flags = (separator.ignoreCase ? "i" : "") +
+                        (separator.multiline  ? "m" : "") +
+                        (separator.extended   ? "x" : "") + // Proposed for ES6
+                        (separator.sticky     ? "y" : ""), // Firefox 3+
+                lastLastIndex = 0,
+                // Make `global` and avoid `lastIndex` issues by working with a copy
+                separator2, match, lastIndex, lastLength;
+            separator = new RegExp(separator.source, flags + "g");
+            string += ""; // Type-convert
+            if (!compliantExecNpcg) {
+                // Doesn't need flags gy, but they don't hurt
+                separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags);
+            }
+            /* Values for `limit`, per the spec:
+             * If undefined: 4294967295 // Math.pow(2, 32) - 1
+             * If 0, Infinity, or NaN: 0
+             * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
+             * If negative number: 4294967296 - Math.floor(Math.abs(limit))
+             * If other: Type-convert, then use the above rules
+             */
+            limit = limit === void 0 ?
+                -1 >>> 0 : // Math.pow(2, 32) - 1
+                ToUint32(limit);
+            while (match = separator.exec(string)) {
+                // `separator.lastIndex` is not reliable cross-browser
+                lastIndex = match.index + match[0].length;
+                if (lastIndex > lastLastIndex) {
+                    output.push(string.slice(lastLastIndex, match.index));
+                    // Fix browsers whose `exec` methods don't consistently return `undefined` for
+                    // nonparticipating capturing groups
+                    if (!compliantExecNpcg && match.length > 1) {
+                        match[0].replace(separator2, function () {
+                            for (var i = 1; i < arguments.length - 2; i++) {
+                                if (arguments[i] === void 0) {
+                                    match[i] = void 0;
+                                }
+                            }
+                        });
+                    }
+                    if (match.length > 1 && match.index < string.length) {
+                        ArrayPrototype.push.apply(output, match.slice(1));
+                    }
+                    lastLength = match[0].length;
+                    lastLastIndex = lastIndex;
+                    if (output.length >= limit) {
+                        break;
+                    }
+                }
+                if (separator.lastIndex === match.index) {
+                    separator.lastIndex++; // Avoid an infinite loop
+                }
+            }
+            if (lastLastIndex === string.length) {
+                if (lastLength || !separator.test("")) {
+                    output.push("");
+                }
+            } else {
+                output.push(string.slice(lastLastIndex));
+            }
+            return output.length > limit ? output.slice(0, limit) : output;
+        };
+    }());
+
+// [bugfix, chrome]
+// If separator is undefined, then the result array contains just one String,
+// which is the this value (converted to a String). If limit is not undefined,
+// then the output array is truncated so that it contains no more than limit
+// elements.
+// "0".split(undefined, 0) -> []
+} else if ("0".split(void 0, 0).length) {
+    StringPrototype.split = function split(separator, limit) {
+        if (separator === void 0 && limit === 0) { return []; }
+        return string_split.call(this, separator, limit);
+    };
+}
+
+var str_replace = StringPrototype.replace;
+var replaceReportsGroupsCorrectly = (function () {
+    var groups = [];
+    'x'.replace(/x(.)?/g, function (match, group) {
+        groups.push(group);
+    });
+    return groups.length === 1 && typeof groups[0] === 'undefined';
+}());
+
+if (!replaceReportsGroupsCorrectly) {
+    StringPrototype.replace = function replace(searchValue, replaceValue) {
+        var isFn = isFunction(replaceValue);
+        var hasCapturingGroups = isRegex(searchValue) && (/\)[*?]/).test(searchValue.source);
+        if (!isFn || !hasCapturingGroups) {
+            return str_replace.call(this, searchValue, replaceValue);
+        } else {
+            var wrappedReplaceValue = function (match) {
+                var length = arguments.length;
+                var originalLastIndex = searchValue.lastIndex;
+                searchValue.lastIndex = 0;
+                var args = searchValue.exec(match);
+                searchValue.lastIndex = originalLastIndex;
+                args.push(arguments[length - 2], arguments[length - 1]);
+                return replaceValue.apply(this, args);
+            };
+            return str_replace.call(this, searchValue, wrappedReplaceValue);
+        }
+    };
+}
+
+// ECMA-262, 3rd B.2.3
+// Not an ECMAScript standard, although ECMAScript 3rd Edition has a
+// non-normative section suggesting uniform semantics and it should be
+// normalized across all browsers
+// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE
+var string_substr = StringPrototype.substr;
+var hasNegativeSubstrBug = "".substr && "0b".substr(-1) !== "b";
+defineProperties(StringPrototype, {
+    substr: function substr(start, length) {
+        return string_substr.call(
+            this,
+            start < 0 ? ((start = this.length + start) < 0 ? 0 : start) : start,
+            length
+        );
+    }
+}, hasNegativeSubstrBug);
+
+// ES5 15.5.4.20
+// whitespace from: http://es5.github.io/#x15.5.4.20
+var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
+    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
+    "\u2029\uFEFF";
+var zeroWidth = '\u200b';
+var wsRegexChars = "[" + ws + "]";
+var trimBeginRegexp = new RegExp("^" + wsRegexChars + wsRegexChars + "*");
+var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + "*$");
+var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());
+defineProperties(StringPrototype, {
+    // http://blog.stevenlevithan.com/archives/faster-trim-javascript
+    // http://perfectionkills.com/whitespace-deviations/
+    trim: function trim() {
+        if (this === void 0 || this === null) {
+            throw new TypeError("can't convert " + this + " to object");
+        }
+        return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
+    }
+}, hasTrimWhitespaceBug);
+
+// ES-5 15.1.2.2
+if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {
+    parseInt = (function (origParseInt) {
+        var hexRegex = /^0[xX]/;
+        return function parseIntES5(str, radix) {
+            str = String(str).trim();
+            if (!Number(radix)) {
+                radix = hexRegex.test(str) ? 16 : 10;
+            }
+            return origParseInt(str, radix);
+        };
+    }(parseInt));
+}
+
+}));
index 902a5cc..cc11aed 100644 (file)
@@ -9,12 +9,12 @@
  * Licensed under Unlicense:
  *
  * This is free and unencumbered software released into the public domain.
- * 
+ *
  * Anyone is free to copy, modify, publish, use, compile, sell, or
  * distribute this software, either in source code form or as a compiled
  * binary, for any purpose, commercial or non-commercial, and by any
  * means.
- * 
+ *
  * In jurisdictions that recognize copyright laws, the author or authors
  * of this software dedicate any and all copyright interest in the
  * software to the public domain. We make this dedication for the benefit
  * successors. We intend this dedication to be an overt act of
  * relinquishment in perpetuity of all present and future rights to this
  * software under copyright law.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
- * 
+ *
  * For more information, please refer to <http://unlicense.org/>
  */
 
- (function(){
+(function() {
+    'use strict';
+
     var
-        /* jStorage version */
-        JSTORAGE_VERSION = "0.4.8",
+    /* jStorage version */
+        JSTORAGE_VERSION = '0.4.10',
 
         /* detect a dollar object or create one if not found */
         $ = window.jQuery || window.$ || (window.$ = {}),
 
         /* check for a JSON handling support */
         JSON = {
-            parse:
-                window.JSON && (window.JSON.parse || window.JSON.decode) ||
-                String.prototype.evalJSON && function(str){return String(str).evalJSON();} ||
+            parse: window.JSON && (window.JSON.parse || window.JSON.decode) ||
+                String.prototype.evalJSON && function(str) {
+                    return String(str).evalJSON();
+            } ||
                 $.parseJSON ||
                 $.evalJSON,
-            stringify:
-                Object.toJSON ||
+            stringify: Object.toJSON ||
                 window.JSON && (window.JSON.stringify || window.JSON.encode) ||
                 $.toJSON
         };
 
     // Break if no JSON support was found
-    if(!("parse" in JSON) || !("stringify" in JSON)){
-        throw new Error("No JSON support found, include //cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js to page");
+    if (!('parse' in JSON) || !('stringify' in JSON)) {
+        throw new Error('No JSON support found, include //cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js to page');
     }
 
     var
-        /* This is the object, that holds the cached values */
-        _storage = {__jstorage_meta:{CRC32:{}}},
+    /* This is the object, that holds the cached values */
+        _storage = {
+            __jstorage_meta: {
+                CRC32: {}
+            }
+        },
 
-        /* Actual browser storage (localStorage or globalStorage["domain"]) */
-        _storage_service = {jStorage:"{}"},
+        /* Actual browser storage (localStorage or globalStorage['domain']) */
+        _storage_service = {
+            jStorage: '{}'
+        },
 
         /* DOM element for older IE versions, holds userData behavior */
         _storage_elm = null,
          * XML nodes are encoded and decoded if the node is the value to be saved
          * but not if it's as a property of another object
          * Eg. -
-         *   $.jStorage.set("key", xmlNode);        // IS OK
-         *   $.jStorage.set("key", {xml: xmlNode}); // NOT OK
+         *   $.jStorage.set('key', xmlNode);        // IS OK
+         *   $.jStorage.set('key', {xml: xmlNode}); // NOT OK
          */
         _XMLService = {
 
              * Validates a XML node to be XML
              * based on jQuery.isXML function
              */
-            isXML: function(elm){
+            isXML: function(elm) {
                 var documentElement = (elm ? elm.ownerDocument || elm : 0).documentElement;
-                return documentElement ? documentElement.nodeName !== "HTML" : false;
+                return documentElement ? documentElement.nodeName !== 'HTML' : false;
             },
 
             /**
              * based on http://www.mercurytide.co.uk/news/article/issues-when-working-ajax/
              */
             encode: function(xmlNode) {
-                if(!this.isXML(xmlNode)){
+                if (!this.isXML(xmlNode)) {
                     return false;
                 }
-                try{ // Mozilla, Webkit, Opera
+                try { // Mozilla, Webkit, Opera
                     return new XMLSerializer().serializeToString(xmlNode);
-                }catch(E1) {
-                    try {  // IE
+                } catch (E1) {
+                    try { // IE
                         return xmlNode.xml;
-                    }catch(E2){}
+                    } catch (E2) {}
                 }
                 return false;
             },
              * Decodes a XML node from string
              * loosely based on http://outwestmedia.com/jquery-plugins/xmldom/
              */
-            decode: function(xmlString){
-                var dom_parser = ("DOMParser" in window && (new DOMParser()).parseFromString) ||
-                        (window.ActiveXObject && function(_xmlString) {
-                    var xml_doc = new ActiveXObject("Microsoft.XMLDOM");
-                    xml_doc.async = "false";
-                    xml_doc.loadXML(_xmlString);
-                    return xml_doc;
-                }),
-                resultXML;
-                if(!dom_parser){
+            decode: function(xmlString) {
+                var dom_parser = ('DOMParser' in window && (new DOMParser()).parseFromString) ||
+                    (window.ActiveXObject && function(_xmlString) {
+                        var xml_doc = new ActiveXObject('Microsoft.XMLDOM');
+                        xml_doc.async = 'false';
+                        xml_doc.loadXML(_xmlString);
+                        return xml_doc;
+                    }),
+                    resultXML;
+                if (!dom_parser) {
                     return false;
                 }
-                resultXML = dom_parser.call("DOMParser" in window && (new DOMParser()) || window, xmlString, "text/xml");
-                return this.isXML(resultXML)?resultXML:false;
+                resultXML = dom_parser.call('DOMParser' in window && (new DOMParser()) || window, xmlString, 'text/xml');
+                return this.isXML(resultXML) ? resultXML : false;
             }
         };
 
      * Initialization function. Detects if the browser supports DOM Storage
      * or userData behavior and behaves accordingly.
      */
-    function _init(){
+    function _init() {
         /* Check if browser supports localStorage */
         var localStorageReallyWorks = false;
-        if("localStorage" in window){
+        if ('localStorage' in window) {
             try {
-                window.localStorage.setItem("_tmptest", "tmpval");
+                window.localStorage.setItem('_tmptest', 'tmpval');
                 localStorageReallyWorks = true;
-                window.localStorage.removeItem("_tmptest");
-            } catch(BogusQuotaExceededErrorOnIos5) {
+                window.localStorage.removeItem('_tmptest');
+            } catch (BogusQuotaExceededErrorOnIos5) {
                 // Thanks be to iOS5 Private Browsing mode which throws
                 // QUOTA_EXCEEDED_ERRROR DOM Exception 22.
             }
         }
 
-        if(localStorageReallyWorks){
+        if (localStorageReallyWorks) {
             try {
-                if(window.localStorage) {
+                if (window.localStorage) {
                     _storage_service = window.localStorage;
-                    _backend = "localStorage";
+                    _backend = 'localStorage';
                     _observer_update = _storage_service.jStorage_update;
                 }
-            } catch(E3) {/* Firefox fails when touching localStorage and cookies are disabled */}
+            } catch (E3) { /* Firefox fails when touching localStorage and cookies are disabled */ }
         }
         /* Check if browser supports globalStorage */
-        else if("globalStorage" in window){
+        else if ('globalStorage' in window) {
             try {
-                if(window.globalStorage) {
-                    if(window.location.hostname == "localhost"){
-                        _storage_service = window.globalStorage["localhost.localdomain"];
-                    }
-                    else{
+                if (window.globalStorage) {
+                    if (window.location.hostname == 'localhost') {
+                        _storage_service = window.globalStorage['localhost.localdomain'];
+                    } else {
                         _storage_service = window.globalStorage[window.location.hostname];
                     }
-                    _backend = "globalStorage";
+                    _backend = 'globalStorage';
                     _observer_update = _storage_service.jStorage_update;
                 }
-            } catch(E4) {/* Firefox fails when touching localStorage and cookies are disabled */}
+            } catch (E4) { /* Firefox fails when touching localStorage and cookies are disabled */ }
         }
         /* Check if browser supports userData behavior */
         else {
-            _storage_elm = document.createElement("link");
-            if(_storage_elm.addBehavior){
+            _storage_elm = document.createElement('link');
+            if (_storage_elm.addBehavior) {
 
                 /* Use a DOM element to act as userData storage */
-                _storage_elm.style.behavior = "url(#default#userData)";
+                _storage_elm.style.behavior = 'url(#default#userData)';
 
                 /* userData element needs to be inserted into the DOM! */
-                document.getElementsByTagName("head")[0].appendChild(_storage_elm);
+                document.getElementsByTagName('head')[0].appendChild(_storage_elm);
 
-                try{
-                    _storage_elm.load("jStorage");
-                }catch(E){
+                try {
+                    _storage_elm.load('jStorage');
+                } catch (E) {
                     // try to reset cache
-                    _storage_elm.setAttribute("jStorage", "{}");
-                    _storage_elm.save("jStorage");
-                    _storage_elm.load("jStorage");
+                    _storage_elm.setAttribute('jStorage', '{}');
+                    _storage_elm.save('jStorage');
+                    _storage_elm.load('jStorage');
                 }
 
-                var data = "{}";
-                try{
-                    data = _storage_elm.getAttribute("jStorage");
-                }catch(E5){}
+                var data = '{}';
+                try {
+                    data = _storage_elm.getAttribute('jStorage');
+                } catch (E5) {}
 
-                try{
-                    _observer_update = _storage_elm.getAttribute("jStorage_update");
-                }catch(E6){}
+                try {
+                    _observer_update = _storage_elm.getAttribute('jStorage_update');
+                } catch (E6) {}
 
                 _storage_service.jStorage = data;
-                _backend = "userDataBehavior";
-            }else{
+                _backend = 'userDataBehavior';
+            } else {
                 _storage_elm = null;
                 return;
             }
         _handlePubSub();
 
         // handle cached navigation
-        if("addEventListener" in window){
-            window.addEventListener("pageshow", function(event){
-                if(event.persisted){
+        if ('addEventListener' in window) {
+            window.addEventListener('pageshow', function(event) {
+                if (event.persisted) {
                     _storageObserver();
                 }
             }, false);
     /**
      * Reload data from storage when needed
      */
-    function _reloadData(){
-        var data = "{}";
+    function _reloadData() {
+        var data = '{}';
 
-        if(_backend == "userDataBehavior"){
-            _storage_elm.load("jStorage");
+        if (_backend == 'userDataBehavior') {
+            _storage_elm.load('jStorage');
 
-            try{
-                data = _storage_elm.getAttribute("jStorage");
-            }catch(E5){}
+            try {
+                data = _storage_elm.getAttribute('jStorage');
+            } catch (E5) {}
 
-            try{
-                _observer_update = _storage_elm.getAttribute("jStorage_update");
-            }catch(E6){}
+            try {
+                _observer_update = _storage_elm.getAttribute('jStorage_update');
+            } catch (E6) {}
 
             _storage_service.jStorage = data;
         }
     /**
      * Sets up a storage change observer
      */
-    function _setupObserver(){
-        if(_backend == "localStorage" || _backend == "globalStorage"){
-            if("addEventListener" in window){
-                window.addEventListener("storage", _storageObserver, false);
-            }else{
-                document.attachEvent("onstorage", _storageObserver);
-            }
-        }else if(_backend == "userDataBehavior"){
+    function _setupObserver() {
+        if (_backend == 'localStorage' || _backend == 'globalStorage') {
+            if ('addEventListener' in window) {
+                window.addEventListener('storage', _storageObserver, false);
+            } else {
+                document.attachEvent('onstorage', _storageObserver);
+            }
+        } else if (_backend == 'userDataBehavior') {
             setInterval(_storageObserver, 1000);
         }
     }
      * Fired on any kind of data change, needs to check if anything has
      * really been changed
      */
-    function _storageObserver(){
+    function _storageObserver() {
         var updateTime;
         // cumulate change notifications with timeout
         clearTimeout(_observer_timeout);
-        _observer_timeout = setTimeout(function(){
+        _observer_timeout = setTimeout(function() {
 
-            if(_backend == "localStorage" || _backend == "globalStorage"){
+            if (_backend == 'localStorage' || _backend == 'globalStorage') {
                 updateTime = _storage_service.jStorage_update;
-            }else if(_backend == "userDataBehavior"){
-                _storage_elm.load("jStorage");
-                try{
-                    updateTime = _storage_elm.getAttribute("jStorage_update");
-                }catch(E5){}
+            } else if (_backend == 'userDataBehavior') {
+                _storage_elm.load('jStorage');
+                try {
+                    updateTime = _storage_elm.getAttribute('jStorage_update');
+                } catch (E5) {}
             }
 
-            if(updateTime && updateTime != _observer_update){
+            if (updateTime && updateTime != _observer_update) {
                 _observer_update = updateTime;
                 _checkUpdatedKeys();
             }
     /**
      * Reloads the data and checks if any keys are changed
      */
-    function _checkUpdatedKeys(){
+    function _checkUpdatedKeys() {
         var oldCrc32List = JSON.parse(JSON.stringify(_storage.__jstorage_meta.CRC32)),
             newCrc32List;
 
             updated = [],
             removed = [];
 
-        for(key in oldCrc32List){
-            if(oldCrc32List.hasOwnProperty(key)){
-                if(!newCrc32List[key]){
+        for (key in oldCrc32List) {
+            if (oldCrc32List.hasOwnProperty(key)) {
+                if (!newCrc32List[key]) {
                     removed.push(key);
                     continue;
                 }
-                if(oldCrc32List[key] != newCrc32List[key] && String(oldCrc32List[key]).substr(0,2) == "2."){
+                if (oldCrc32List[key] != newCrc32List[key] && String(oldCrc32List[key]).substr(0, 2) == '2.') {
                     updated.push(key);
                 }
             }
         }
 
-        for(key in newCrc32List){
-            if(newCrc32List.hasOwnProperty(key)){
-                if(!oldCrc32List[key]){
+        for (key in newCrc32List) {
+            if (newCrc32List.hasOwnProperty(key)) {
+                if (!oldCrc32List[key]) {
                     updated.push(key);
                 }
             }
         }
 
-        _fireObservers(updated, "updated");
-        _fireObservers(removed, "deleted");
+        _fireObservers(updated, 'updated');
+        _fireObservers(removed, 'deleted');
     }
 
     /**
      * @param {Array|String} keys Array of key names or a key
      * @param {String} action What happened with the value (updated, deleted, flushed)
      */
-    function _fireObservers(keys, action){
+    function _fireObservers(keys, action) {
         keys = [].concat(keys || []);
-        if(action == "flushed"){
+
+        var i, j, len, jlen;
+
+        if (action == 'flushed') {
             keys = [];
-            for(var key in _observers){
-                if(_observers.hasOwnProperty(key)){
+            for (var key in _observers) {
+                if (_observers.hasOwnProperty(key)) {
                     keys.push(key);
                 }
             }
-            action = "deleted";
+            action = 'deleted';
         }
-        for(var i=0, len = keys.length; i<len; i++){
-            if(_observers[keys[i]]){
-                for(var j=0, jlen = _observers[keys[i]].length; j<jlen; j++){
+        for (i = 0, len = keys.length; i < len; i++) {
+            if (_observers[keys[i]]) {
+                for (j = 0, jlen = _observers[keys[i]].length; j < jlen; j++) {
                     _observers[keys[i]][j](keys[i], action);
                 }
             }
-            if(_observers["*"]){
-                for(var j=0, jlen = _observers["*"].length; j<jlen; j++){
-                    _observers["*"][j](keys[i], action);
+            if (_observers['*']) {
+                for (j = 0, jlen = _observers['*'].length; j < jlen; j++) {
+                    _observers['*'][j](keys[i], action);
                 }
             }
         }
     /**
      * Publishes key change to listeners
      */
-    function _publishChange(){
+    function _publishChange() {
         var updateTime = (+new Date()).toString();
 
-        if(_backend == "localStorage" || _backend == "globalStorage"){
+        if (_backend == 'localStorage' || _backend == 'globalStorage') {
             try {
                 _storage_service.jStorage_update = updateTime;
             } catch (E8) {
                 // safari private mode has been enabled after the jStorage initialization
                 _backend = false;
             }
-        }else if(_backend == "userDataBehavior"){
-            _storage_elm.setAttribute("jStorage_update", updateTime);
-            _storage_elm.save("jStorage");
+        } else if (_backend == 'userDataBehavior') {
+            _storage_elm.setAttribute('jStorage_update', updateTime);
+            _storage_elm.save('jStorage');
         }
 
         _storageObserver();
     /**
      * Loads the data from the storage based on the supported mechanism
      */
-    function _load_storage(){
+    function _load_storage() {
         /* if jStorage string is retrieved, then decode it */
-        if(_storage_service.jStorage){
-            try{
+        if (_storage_service.jStorage) {
+            try {
                 _storage = JSON.parse(String(_storage_service.jStorage));
-            }catch(E6){_storage_service.jStorage = "{}";}
-        }else{
-            _storage_service.jStorage = "{}";
+            } catch (E6) {
+                _storage_service.jStorage = '{}';
+            }
+        } else {
+            _storage_service.jStorage = '{}';
         }
-        _storage_size = _storage_service.jStorage?String(_storage_service.jStorage).length:0;
+        _storage_size = _storage_service.jStorage ? String(_storage_service.jStorage).length : 0;
 
-        if(!_storage.__jstorage_meta){
+        if (!_storage.__jstorage_meta) {
             _storage.__jstorage_meta = {};
         }
-        if(!_storage.__jstorage_meta.CRC32){
+        if (!_storage.__jstorage_meta.CRC32) {
             _storage.__jstorage_meta.CRC32 = {};
         }
     }
 
     /**
-     * This functions provides the "save" mechanism to store the jStorage object
+     * This functions provides the 'save' mechanism to store the jStorage object
      */
-    function _save(){
+    function _save() {
         _dropOldEvents(); // remove expired events
-        try{
+        try {
             _storage_service.jStorage = JSON.stringify(_storage);
             // If userData is used as the storage engine, additional
-            if(_storage_elm) {
-                _storage_elm.setAttribute("jStorage",_storage_service.jStorage);
-                _storage_elm.save("jStorage");
+            if (_storage_elm) {
+                _storage_elm.setAttribute('jStorage', _storage_service.jStorage);
+                _storage_elm.save('jStorage');
             }
-            _storage_size = _storage_service.jStorage?String(_storage_service.jStorage).length:0;
-        }catch(E7){/* probably cache is full, nothing is saved this way*/}
+            _storage_size = _storage_service.jStorage ? String(_storage_service.jStorage).length : 0;
+        } catch (E7) { /* probably cache is full, nothing is saved this way*/ }
     }
 
     /**
      *
      * @param {String} key Key name
      */
-    function _checkKey(key){
-        if(typeof key != "string" && typeof key != "number"){
-            throw new TypeError("Key name must be string or numeric");
+    function _checkKey(key) {
+        if (typeof key != 'string' && typeof key != 'number') {
+            throw new TypeError('Key name must be string or numeric');
         }
-        if(key == "__jstorage_meta"){
-            throw new TypeError("Reserved key name");
+        if (key == '__jstorage_meta') {
+            throw new TypeError('Reserved key name');
         }
         return true;
     }
     /**
      * Removes expired keys
      */
-    function _handleTTL(){
-        var curtime, i, TTL, CRC32, nextExpire = Infinity, changed = false, deleted = [];
+    function _handleTTL() {
+        var curtime, i, TTL, CRC32, nextExpire = Infinity,
+            changed = false,
+            deleted = [];
 
         clearTimeout(_ttl_timeout);
 
-        if(!_storage.__jstorage_meta || typeof _storage.__jstorage_meta.TTL != "object"){
+        if (!_storage.__jstorage_meta || typeof _storage.__jstorage_meta.TTL != 'object') {
             // nothing to do here
             return;
         }
         TTL = _storage.__jstorage_meta.TTL;
 
         CRC32 = _storage.__jstorage_meta.CRC32;
-        for(i in TTL){
-            if(TTL.hasOwnProperty(i)){
-                if(TTL[i] <= curtime){
+        for (i in TTL) {
+            if (TTL.hasOwnProperty(i)) {
+                if (TTL[i] <= curtime) {
                     delete TTL[i];
                     delete CRC32[i];
                     delete _storage[i];
                     changed = true;
                     deleted.push(i);
-                }else if(TTL[i] < nextExpire){
+                } else if (TTL[i] < nextExpire) {
                     nextExpire = TTL[i];
                 }
             }
         }
 
         // set next check
-        if(nextExpire != Infinity){
-            _ttl_timeout = setTimeout(Math.min(_handleTTL, nextExpire - curtime, 0x7FFFFFFF));
+        if (nextExpire != Infinity) {
+            _ttl_timeout = setTimeout(_handleTTL, Math.min(nextExpire - curtime, 0x7FFFFFFF));
         }
 
         // save changes
-        if(changed){
+        if (changed) {
             _save();
             _publishChange();
-            _fireObservers(deleted, "deleted");
+            _fireObservers(deleted, 'deleted');
         }
     }
 
     /**
      * Checks if there's any events on hold to be fired to listeners
      */
-    function _handlePubSub(){
+    function _handlePubSub() {
         var i, len;
-        if(!_storage.__jstorage_meta.PubSub){
+        if (!_storage.__jstorage_meta.PubSub) {
             return;
         }
         var pubelm,
             _pubsubCurrent = _pubsub_last;
 
-        for(i=len=_storage.__jstorage_meta.PubSub.length-1; i>=0; i--){
+        for (i = len = _storage.__jstorage_meta.PubSub.length - 1; i >= 0; i--) {
             pubelm = _storage.__jstorage_meta.PubSub[i];
-            if(pubelm[0] > _pubsub_last){
+            if (pubelm[0] > _pubsub_last) {
                 _pubsubCurrent = pubelm[0];
                 _fireSubscribers(pubelm[1], pubelm[2]);
             }
      * @param {String} channel Channel name
      * @param {Mixed} payload Payload data to deliver
      */
-    function _fireSubscribers(channel, payload){
-        if(_pubsub_observers[channel]){
-            for(var i=0, len = _pubsub_observers[channel].length; i<len; i++){
+    function _fireSubscribers(channel, payload) {
+        if (_pubsub_observers[channel]) {
+            for (var i = 0, len = _pubsub_observers[channel].length; i < len; i++) {
                 // send immutable data that can't be modified by listeners
-                try{
+                try {
                     _pubsub_observers[channel][i](channel, JSON.parse(JSON.stringify(payload)));
-                }catch(E){};
+                } catch (E) {}
             }
         }
     }
     /**
      * Remove old events from the publish stream (at least 2sec old)
      */
-    function _dropOldEvents(){
-        if(!_storage.__jstorage_meta.PubSub){
+    function _dropOldEvents() {
+        if (!_storage.__jstorage_meta.PubSub) {
             return;
         }
 
         var retire = +new Date() - 2000;
 
-        for(var i=0, len = _storage.__jstorage_meta.PubSub.length; i<len; i++){
-            if(_storage.__jstorage_meta.PubSub[i][0] <= retire){
+        for (var i = 0, len = _storage.__jstorage_meta.PubSub.length; i < len; i++) {
+            if (_storage.__jstorage_meta.PubSub[i][0] <= retire) {
                 // deleteCount is needed for IE6
                 _storage.__jstorage_meta.PubSub.splice(i, _storage.__jstorage_meta.PubSub.length - i);
                 break;
             }
         }
 
-        if(!_storage.__jstorage_meta.PubSub.length){
+        if (!_storage.__jstorage_meta.PubSub.length) {
             delete _storage.__jstorage_meta.PubSub;
         }
 
      * @param {String} channel Channel name
      * @param {Mixed} payload Payload to send to the subscribers
      */
-    function _publish(channel, payload){
-        if(!_storage.__jstorage_meta){
+    function _publish(channel, payload) {
+        if (!_storage.__jstorage_meta) {
             _storage.__jstorage_meta = {};
         }
-        if(!_storage.__jstorage_meta.PubSub){
+        if (!_storage.__jstorage_meta.PubSub) {
             _storage.__jstorage_meta.PubSub = [];
         }
 
-        _storage.__jstorage_meta.PubSub.unshift([+new Date, channel, payload]);
+        _storage.__jstorage_meta.PubSub.unshift([+new Date(), channel, payload]);
 
         _save();
         _publishChange();
      *
      *  SOURCE: https://github.com/garycourt/murmurhash-js (MIT licensed)
      *
-     * @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
+     * @author <a href='mailto:gary.court@gmail.com'>Gary Court</a>
      * @see http://github.com/garycourt/murmurhash-js
-     * @author <a href="mailto:aappleby@gmail.com">Austin Appleby</a>
+     * @author <a href='mailto:aappleby@gmail.com'>Austin Appleby</a>
      * @see http://sites.google.com/site/murmurhash/
      *
      * @param {string} str ASCII only
         }
 
         switch (l) {
-            case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;
-            case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;
-            case 1: h ^= (str.charCodeAt(i) & 0xff);
+            case 3:
+                h ^= (str.charCodeAt(i + 2) & 0xff) << 16;
+            case 2:
+                h ^= (str.charCodeAt(i + 1) & 0xff) << 8;
+            case 1:
+                h ^= (str.charCodeAt(i) & 0xff);
                 h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));
         }
 
          * @param {Number} [options.TTL] - optional TTL value, in milliseconds
          * @return {Mixed} the used value
          */
-        set: function(key, value, options){
+        set: function(key, value, options) {
             _checkKey(key);
 
             options = options || {};
 
             // undefined values are deleted automatically
-            if(typeof value == "undefined"){
+            if (typeof value == 'undefined') {
                 this.deleteKey(key);
                 return value;
             }
 
-            if(_XMLService.isXML(value)){
-                value = {_is_xml:true,xml:_XMLService.encode(value)};
-            }else if(typeof value == "function"){
+            if (_XMLService.isXML(value)) {
+                value = {
+                    _is_xml: true,
+                    xml: _XMLService.encode(value)
+                };
+            } else if (typeof value == 'function') {
                 return undefined; // functions can't be saved!
-            }else if(value && typeof value == "object"){
+            } else if (value && typeof value == 'object') {
                 // clone the object before saving to _storage tree
                 value = JSON.parse(JSON.stringify(value));
             }
 
             _storage[key] = value;
 
-            _storage.__jstorage_meta.CRC32[key] = "2." + murmurhash2_32_gc(JSON.stringify(value), 0x9747b28c);
+            _storage.__jstorage_meta.CRC32[key] = '2.' + murmurhash2_32_gc(JSON.stringify(value), 0x9747b28c);
 
             this.setTTL(key, options.TTL || 0); // also handles saving and _publishChange
 
-            _fireObservers(key, "updated");
+            _fireObservers(key, 'updated');
             return value;
         },
 
          * @param {mixed} def - Default value to return, if key didn't exist.
          * @return {Mixed} the key value, default value or null
          */
-        get: function(key, def){
+        get: function(key, def) {
             _checkKey(key);
-            if(key in _storage){
-                if(_storage[key] && typeof _storage[key] == "object" && _storage[key]._is_xml) {
+            if (key in _storage) {
+                if (_storage[key] && typeof _storage[key] == 'object' && _storage[key]._is_xml) {
                     return _XMLService.decode(_storage[key].xml);
-                }else{
+                } else {
                     return _storage[key];
                 }
             }
-            return typeof(def) == "undefined" ? null : def;
+            return typeof(def) == 'undefined' ? null : def;
         },
 
         /**
          * @param {String} key - Key to delete.
          * @return {Boolean} true if key existed or false if it didn't
          */
-        deleteKey: function(key){
+        deleteKey: function(key) {
             _checkKey(key);
-            if(key in _storage){
+            if (key in _storage) {
                 delete _storage[key];
                 // remove from TTL list
-                if(typeof _storage.__jstorage_meta.TTL == "object" &&
-                  key in _storage.__jstorage_meta.TTL){
+                if (typeof _storage.__jstorage_meta.TTL == 'object' &&
+                    key in _storage.__jstorage_meta.TTL) {
                     delete _storage.__jstorage_meta.TTL[key];
                 }
 
 
                 _save();
                 _publishChange();
-                _fireObservers(key, "deleted");
+                _fireObservers(key, 'deleted');
                 return true;
             }
             return false;
          * @param {Number} ttl - TTL timeout in milliseconds
          * @return {Boolean} true if key existed or false if it didn't
          */
-        setTTL: function(key, ttl){
+        setTTL: function(key, ttl) {
             var curtime = +new Date();
             _checkKey(key);
             ttl = Number(ttl) || 0;
-            if(key in _storage){
+            if (key in _storage) {
 
-                if(!_storage.__jstorage_meta.TTL){
+                if (!_storage.__jstorage_meta.TTL) {
                     _storage.__jstorage_meta.TTL = {};
                 }
 
                 // Set TTL value for the key
-                if(ttl>0){
+                if (ttl > 0) {
                     _storage.__jstorage_meta.TTL[key] = curtime + ttl;
-                }else{
+                } else {
                     delete _storage.__jstorage_meta.TTL[key];
                 }
 
          * @param {String} key Key to check
          * @return {Number} Remaining TTL in milliseconds
          */
-        getTTL: function(key){
-            var curtime = +new Date(), ttl;
+        getTTL: function(key) {
+            var curtime = +new Date(),
+                ttl;
             _checkKey(key);
-            if(key in _storage && _storage.__jstorage_meta.TTL && _storage.__jstorage_meta.TTL[key]){
+            if (key in _storage && _storage.__jstorage_meta.TTL && _storage.__jstorage_meta.TTL[key]) {
                 ttl = _storage.__jstorage_meta.TTL[key] - curtime;
                 return ttl || 0;
             }
          *
          * @return {Boolean} Always true
          */
-        flush: function(){
-            _storage = {__jstorage_meta:{CRC32:{}}};
+        flush: function() {
+            _storage = {
+                __jstorage_meta: {
+                    CRC32: {}
+                }
+            };
             _save();
             _publishChange();
-            _fireObservers(null, "flushed");
+            _fireObservers(null, 'flushed');
             return true;
         },
 
          * Returns a read-only copy of _storage
          *
          * @return {Object} Read-only copy of _storage
-        */
-        storageObj: function(){
+         */
+        storageObj: function() {
             function F() {}
             F.prototype = _storage;
             return new F();
 
         /**
          * Returns an index of all used keys as an array
-         * ["key1", "key2",.."keyN"]
+         * ['key1', 'key2',..'keyN']
          *
          * @return {Array} Used keys
-        */
-        index: function(){
-            var index = [], i;
-            for(i in _storage){
-                if(_storage.hasOwnProperty(i) && i != "__jstorage_meta"){
+         */
+        index: function() {
+            var index = [],
+                i;
+            for (i in _storage) {
+                if (_storage.hasOwnProperty(i) && i != '__jstorage_meta') {
                     index.push(i);
                 }
             }
          * @return {Number} Storage size in chars (not the same as in bytes,
          *                  since some chars may take several bytes)
          */
-        storageSize: function(){
+        storageSize: function() {
             return _storage_size;
         },
 
          *
          * @return {String} Backend name
          */
-        currentBackend: function(){
+        currentBackend: function() {
             return _backend;
         },
 
          *
          * @return {Boolean} True if storage can be used
          */
-        storageAvailable: function(){
+        storageAvailable: function() {
             return !!_backend;
         },
 
          * @param {String} key Key name
          * @param {Function} callback Function to run when the key changes
          */
-        listenKeyChange: function(key, callback){
+        listenKeyChange: function(key, callback) {
             _checkKey(key);
-            if(!_observers[key]){
+            if (!_observers[key]) {
                 _observers[key] = [];
             }
             _observers[key].push(callback);
          * @param {String} key Key name to unregister listeners against
          * @param {Function} [callback] If set, unregister the callback, if not - unregister all
          */
-        stopListening: function(key, callback){
+        stopListening: function(key, callback) {
             _checkKey(key);
 
-            if(!_observers[key]){
+            if (!_observers[key]) {
                 return;
             }
 
-            if(!callback){
+            if (!callback) {
                 delete _observers[key];
                 return;
             }
 
-            for(var i = _observers[key].length - 1; i>=0; i--){
-                if(_observers[key][i] == callback){
-                    _observers[key].splice(i,1);
+            for (var i = _observers[key].length - 1; i >= 0; i--) {
+                if (_observers[key][i] == callback) {
+                    _observers[key].splice(i, 1);
                 }
             }
         },
          * @param {String} channel Channel name
          * @param {Function} callback Function to run when the something is published to the channel
          */
-        subscribe: function(channel, callback){
-            channel = (channel || "").toString();
-            if(!channel){
-                throw new TypeError("Channel not defined");
+        subscribe: function(channel, callback) {
+            channel = (channel || '').toString();
+            if (!channel) {
+                throw new TypeError('Channel not defined');
             }
-            if(!_pubsub_observers[channel]){
+            if (!_pubsub_observers[channel]) {
                 _pubsub_observers[channel] = [];
             }
             _pubsub_observers[channel].push(callback);
          * @param {String} channel Channel name
          * @param {Mixed} payload Payload to deliver
          */
-        publish: function(channel, payload){
-            channel = (channel || "").toString();
-            if(!channel){
-                throw new TypeError("Channel not defined");
+        publish: function(channel, payload) {
+            channel = (channel || '').toString();
+            if (!channel) {
+                throw new TypeError('Channel not defined');
             }
 
             _publish(channel, payload);
         /**
          * Reloads the data from browser storage
          */
-        reInit: function(){
+        reInit: function() {
             _reloadData();
         },
 
         /**
          * Removes reference from global objects and saves it as jStorage
          *
-         * @param {Boolean} option if needed to save object as simple "jStorage" in windows context
+         * @param {Boolean} option if needed to save object as simple 'jStorage' in windows context
          */
-         noConflict: function( saveInGlobal ) {
-            delete window.$.jStorage
+        noConflict: function(saveInGlobal) {
+            delete window.$.jStorage;
 
-            if ( saveInGlobal ) {
+            if (saveInGlobal) {
                 window.jStorage = this;
             }
 
             return this;
-         }
+        }
     };
 
     // Initialize jStorage
     _init();
 
-})();
+})();
\ No newline at end of file
diff --git a/resources/lib/json2/json2.js b/resources/lib/json2/json2.js
new file mode 100644 (file)
index 0000000..deb88ec
--- /dev/null
@@ -0,0 +1,489 @@
+/*
+    json2.js
+    2014-02-04
+
+    Public Domain.
+
+    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+
+    See http://www.JSON.org/js.html
+
+
+    This code should be minified before deployment.
+    See http://javascript.crockford.com/jsmin.html
+
+    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+    NOT CONTROL.
+
+
+    This file creates a global JSON object containing two methods: stringify
+    and parse.
+
+        JSON.stringify(value, replacer, space)
+            value       any JavaScript value, usually an object or array.
+
+            replacer    an optional parameter that determines how object
+                        values are stringified for objects. It can be a
+                        function or an array of strings.
+
+            space       an optional parameter that specifies the indentation
+                        of nested structures. If it is omitted, the text will
+                        be packed without extra whitespace. If it is a number,
+                        it will specify the number of spaces to indent at each
+                        level. If it is a string (such as '\t' or '&nbsp;'),
+                        it contains the characters used to indent at each level.
+
+            This method produces a JSON text from a JavaScript value.
+
+            When an object value is found, if the object contains a toJSON
+            method, its toJSON method will be called and the result will be
+            stringified. A toJSON method does not serialize: it returns the
+            value represented by the name/value pair that should be serialized,
+            or undefined if nothing should be serialized. The toJSON method
+            will be passed the key associated with the value, and this will be
+            bound to the value
+
+            For example, this would serialize Dates as ISO strings.
+
+                Date.prototype.toJSON = function (key) {
+                    function f(n) {
+                        // Format integers to have at least two digits.
+                        return n < 10 ? '0' + n : n;
+                    }
+
+                    return this.getUTCFullYear()   + '-' +
+                         f(this.getUTCMonth() + 1) + '-' +
+                         f(this.getUTCDate())      + 'T' +
+                         f(this.getUTCHours())     + ':' +
+                         f(this.getUTCMinutes())   + ':' +
+                         f(this.getUTCSeconds())   + 'Z';
+                };
+
+            You can provide an optional replacer method. It will be passed the
+            key and value of each member, with this bound to the containing
+            object. The value that is returned from your method will be
+            serialized. If your method returns undefined, then the member will
+            be excluded from the serialization.
+
+            If the replacer parameter is an array of strings, then it will be
+            used to select the members to be serialized. It filters the results
+            such that only members with keys listed in the replacer array are
+            stringified.
+
+            Values that do not have JSON representations, such as undefined or
+            functions, will not be serialized. Such values in objects will be
+            dropped; in arrays they will be replaced with null. You can use
+            a replacer function to replace those with JSON values.
+            JSON.stringify(undefined) returns undefined.
+
+            The optional space parameter produces a stringification of the
+            value that is filled with line breaks and indentation to make it
+            easier to read.
+
+            If the space parameter is a non-empty string, then that string will
+            be used for indentation. If the space parameter is a number, then
+            the indentation will be that many spaces.
+
+            Example:
+
+            text = JSON.stringify(['e', {pluribus: 'unum'}]);
+            // text is '["e",{"pluribus":"unum"}]'
+
+
+            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
+            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
+
+            text = JSON.stringify([new Date()], function (key, value) {
+                return this[key] instanceof Date ?
+                    'Date(' + this[key] + ')' : value;
+            });
+            // text is '["Date(---current time---)"]'
+
+
+        JSON.parse(text, reviver)
+            This method parses a JSON text to produce an object or array.
+            It can throw a SyntaxError exception.
+
+            The optional reviver parameter is a function that can filter and
+            transform the results. It receives each of the keys and values,
+            and its return value is used instead of the original value.
+            If it returns what it received, then the structure is not modified.
+            If it returns undefined then the member is deleted.
+
+            Example:
+
+            // Parse the text. Values that look like ISO date strings will
+            // be converted to Date objects.
+
+            myData = JSON.parse(text, function (key, value) {
+                var a;
+                if (typeof value === 'string') {
+                    a =
+/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
+                    if (a) {
+                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+                            +a[5], +a[6]));
+                    }
+                }
+                return value;
+            });
+
+            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
+                var d;
+                if (typeof value === 'string' &&
+                        value.slice(0, 5) === 'Date(' &&
+                        value.slice(-1) === ')') {
+                    d = new Date(value.slice(5, -1));
+                    if (d) {
+                        return d;
+                    }
+                }
+                return value;
+            });
+
+
+    This is a reference implementation. You are free to copy, modify, or
+    redistribute.
+*/
+
+/*jslint evil: true, regexp: true */
+
+/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
+    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
+    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
+    lastIndex, length, parse, prototype, push, replace, slice, stringify,
+    test, toJSON, toString, valueOf
+*/
+
+
+// Create a JSON object only if one does not already exist. We create the
+// methods in a closure to avoid creating global variables.
+
+if (typeof JSON !== 'object') {
+    JSON = {};
+}
+
+(function () {
+    'use strict';
+
+    function f(n) {
+        // Format integers to have at least two digits.
+        return n < 10 ? '0' + n : n;
+    }
+
+    if (typeof Date.prototype.toJSON !== 'function') {
+
+        Date.prototype.toJSON = function () {
+
+            return isFinite(this.valueOf())
+                ? this.getUTCFullYear()     + '-' +
+                    f(this.getUTCMonth() + 1) + '-' +
+                    f(this.getUTCDate())      + 'T' +
+                    f(this.getUTCHours())     + ':' +
+                    f(this.getUTCMinutes())   + ':' +
+                    f(this.getUTCSeconds())   + 'Z'
+                : null;
+        };
+
+        String.prototype.toJSON      =
+            Number.prototype.toJSON  =
+            Boolean.prototype.toJSON = function () {
+                return this.valueOf();
+            };
+    }
+
+    var cx,
+        escapable,
+        gap,
+        indent,
+        meta,
+        rep;
+
+
+    function quote(string) {
+
+// If the string contains no control characters, no quote characters, and no
+// backslash characters, then we can safely slap some quotes around it.
+// Otherwise we must also replace the offending characters with safe escape
+// sequences.
+
+        escapable.lastIndex = 0;
+        return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
+            var c = meta[a];
+            return typeof c === 'string'
+                ? c
+                : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+        }) + '"' : '"' + string + '"';
+    }
+
+
+    function str(key, holder) {
+
+// Produce a string from holder[key].
+
+        var i,          // The loop counter.
+            k,          // The member key.
+            v,          // The member value.
+            length,
+            mind = gap,
+            partial,
+            value = holder[key];
+
+// If the value has a toJSON method, call it to obtain a replacement value.
+
+        if (value && typeof value === 'object' &&
+                typeof value.toJSON === 'function') {
+            value = value.toJSON(key);
+        }
+
+// If we were called with a replacer function, then call the replacer to
+// obtain a replacement value.
+
+        if (typeof rep === 'function') {
+            value = rep.call(holder, key, value);
+        }
+
+// What happens next depends on the value's type.
+
+        switch (typeof value) {
+        case 'string':
+            return quote(value);
+
+        case 'number':
+
+// JSON numbers must be finite. Encode non-finite numbers as null.
+
+            return isFinite(value) ? String(value) : 'null';
+
+        case 'boolean':
+        case 'null':
+
+// If the value is a boolean or null, convert it to a string. Note:
+// typeof null does not produce 'null'. The case is included here in
+// the remote chance that this gets fixed someday.
+
+            return String(value);
+
+// If the type is 'object', we might be dealing with an object or an array or
+// null.
+
+        case 'object':
+
+// Due to a specification blunder in ECMAScript, typeof null is 'object',
+// so watch out for that case.
+
+            if (!value) {
+                return 'null';
+            }
+
+// Make an array to hold the partial results of stringifying this object value.
+
+            gap += indent;
+            partial = [];
+
+// Is the value an array?
+
+            if (Object.prototype.toString.apply(value) === '[object Array]') {
+
+// The value is an array. Stringify every element. Use null as a placeholder
+// for non-JSON values.
+
+                length = value.length;
+                for (i = 0; i < length; i += 1) {
+                    partial[i] = str(i, value) || 'null';
+                }
+
+// Join all of the elements together, separated with commas, and wrap them in
+// brackets.
+
+                v = partial.length === 0
+                    ? '[]'
+                    : gap
+                    ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
+                    : '[' + partial.join(',') + ']';
+                gap = mind;
+                return v;
+            }
+
+// If the replacer is an array, use it to select the members to be stringified.
+
+            if (rep && typeof rep === 'object') {
+                length = rep.length;
+                for (i = 0; i < length; i += 1) {
+                    if (typeof rep[i] === 'string') {
+                        k = rep[i];
+                        v = str(k, value);
+                        if (v) {
+                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
+                        }
+                    }
+                }
+            } else {
+
+// Otherwise, iterate through all of the keys in the object.
+
+                for (k in value) {
+                    if (Object.prototype.hasOwnProperty.call(value, k)) {
+                        v = str(k, value);
+                        if (v) {
+                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
+                        }
+                    }
+                }
+            }
+
+// Join all of the member texts together, separated with commas,
+// and wrap them in braces.
+
+            v = partial.length === 0
+                ? '{}'
+                : gap
+                ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
+                : '{' + partial.join(',') + '}';
+            gap = mind;
+            return v;
+        }
+    }
+
+// If the JSON object does not yet have a stringify method, give it one.
+
+    if (typeof JSON.stringify !== 'function') {
+        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+        meta = {    // table of character substitutions
+            '\b': '\\b',
+            '\t': '\\t',
+            '\n': '\\n',
+            '\f': '\\f',
+            '\r': '\\r',
+            '"' : '\\"',
+            '\\': '\\\\'
+        };
+        JSON.stringify = function (value, replacer, space) {
+
+// The stringify method takes a value and an optional replacer, and an optional
+// space parameter, and returns a JSON text. The replacer can be a function
+// that can replace values, or an array of strings that will select the keys.
+// A default replacer method can be provided. Use of the space parameter can
+// produce text that is more easily readable.
+
+            var i;
+            gap = '';
+            indent = '';
+
+// If the space parameter is a number, make an indent string containing that
+// many spaces.
+
+            if (typeof space === 'number') {
+                for (i = 0; i < space; i += 1) {
+                    indent += ' ';
+                }
+
+// If the space parameter is a string, it will be used as the indent string.
+
+            } else if (typeof space === 'string') {
+                indent = space;
+            }
+
+// If there is a replacer, it must be a function or an array.
+// Otherwise, throw an error.
+
+            rep = replacer;
+            if (replacer && typeof replacer !== 'function' &&
+                    (typeof replacer !== 'object' ||
+                    typeof replacer.length !== 'number')) {
+                throw new Error('JSON.stringify');
+            }
+
+// Make a fake root object containing our value under the key of ''.
+// Return the result of stringifying the value.
+
+            return str('', {'': value});
+        };
+    }
+
+
+// If the JSON object does not yet have a parse method, give it one.
+
+    if (typeof JSON.parse !== 'function') {
+        cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+        JSON.parse = function (text, reviver) {
+
+// The parse method takes a text and an optional reviver function, and returns
+// a JavaScript value if the text is a valid JSON text.
+
+            var j;
+
+            function walk(holder, key) {
+
+// The walk method is used to recursively walk the resulting structure so
+// that modifications can be made.
+
+                var k, v, value = holder[key];
+                if (value && typeof value === 'object') {
+                    for (k in value) {
+                        if (Object.prototype.hasOwnProperty.call(value, k)) {
+                            v = walk(value, k);
+                            if (v !== undefined) {
+                                value[k] = v;
+                            } else {
+                                delete value[k];
+                            }
+                        }
+                    }
+                }
+                return reviver.call(holder, key, value);
+            }
+
+
+// Parsing happens in four stages. In the first stage, we replace certain
+// Unicode characters with escape sequences. JavaScript handles many characters
+// incorrectly, either silently deleting them, or treating them as line endings.
+
+            text = String(text);
+            cx.lastIndex = 0;
+            if (cx.test(text)) {
+                text = text.replace(cx, function (a) {
+                    return '\\u' +
+                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+                });
+            }
+
+// In the second stage, we run the text against regular expressions that look
+// for non-JSON patterns. We are especially concerned with '()' and 'new'
+// because they can cause invocation, and '=' because it can cause mutation.
+// But just to be safe, we want to reject all unexpected forms.
+
+// We split the second stage into 4 regexp operations in order to work around
+// crippling inefficiencies in IE's and Safari's regexp engines. First we
+// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
+// replace all simple value tokens with ']' characters. Third, we delete all
+// open brackets that follow a colon or comma or that begin the text. Finally,
+// we look to see that the remaining characters are only whitespace or ']' or
+// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
+
+            if (/^[\],:{}\s]*$/
+                    .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
+                        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
+                        .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+
+// In the third stage we use the eval function to compile the text into a
+// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
+// in JavaScript: it can begin a block or an object literal. We wrap the text
+// in parens to eliminate the ambiguity.
+
+                j = eval('(' + text + ')');
+
+// In the optional fourth stage, we recursively walk the new structure, passing
+// each name/value pair to a reviver function for possible transformation.
+
+                return typeof reviver === 'function'
+                    ? walk({'': j}, '')
+                    : j;
+            }
+
+// If the text is not JSON parseable, then a SyntaxError is thrown.
+
+            throw new SyntaxError('JSON.parse');
+        };
+    }
+}());
diff --git a/resources/lib/moment/lang/ar-sa.js b/resources/lib/moment/lang/ar-sa.js
new file mode 100644 (file)
index 0000000..162d386
--- /dev/null
@@ -0,0 +1,96 @@
+// moment.js language configuration
+// language : Arabic Saudi Arabia (ar-sa)
+// author : Suhail Alkowaileet : https://github.com/xsoh
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '١',
+        '2': '٢',
+        '3': '٣',
+        '4': '٤',
+        '5': '٥',
+        '6': '٦',
+        '7': '٧',
+        '8': '٨',
+        '9': '٩',
+        '0': '٠'
+    }, numberMap = {
+        '١': '1',
+        '٢': '2',
+        '٣': '3',
+        '٤': '4',
+        '٥': '5',
+        '٦': '6',
+        '٧': '7',
+        '٨': '8',
+        '٩': '9',
+        '٠': '0'
+    };
+
+    return moment.lang('ar-sa', {
+        months : "يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),
+        monthsShort : "يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),
+        weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),
+        weekdaysShort : "أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),
+        weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 12) {
+                return "ص";
+            } else {
+                return "م";
+            }
+        },
+        calendar : {
+            sameDay: "[اليوم على الساعة] LT",
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "في %s",
+            past : "منذ %s",
+            s : "ثوان",
+            m : "دقيقة",
+            mm : "%d دقائق",
+            h : "ساعة",
+            hh : "%d ساعات",
+            d : "يوم",
+            dd : "%d أيام",
+            M : "شهر",
+            MM : "%d أشهر",
+            y : "سنة",
+            yy : "%d سنوات"
+        },
+        preparse: function (string) {
+            return string.replace(/[۰-۹]/g, function (match) {
+                return numberMap[match];
+            }).replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            }).replace(/,/g, '،');
+        },
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
index 6e27d29..dd01a42 100644 (file)
         factory(window.moment); // Browser global
     }
 }(function (moment) {
+    var symbolMap = {
+        '1': '١',
+        '2': '٢',
+        '3': '٣',
+        '4': '٤',
+        '5': '٥',
+        '6': '٦',
+        '7': '٧',
+        '8': '٨',
+        '9': '٩',
+        '0': '٠'
+    }, numberMap = {
+        '١': '1',
+        '٢': '2',
+        '٣': '3',
+        '٤': '4',
+        '٥': '5',
+        '٦': '6',
+        '٧': '7',
+        '٨': '8',
+        '٩': '9',
+        '٠': '0'
+    };
+
     return moment.lang('ar', {
         months : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),
         monthsShort : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),
         weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),
-        weekdaysShort : "اÙ\84أحد_اÙ\84إثÙ\86Ù\8aÙ\86_اÙ\84Ø«Ù\84اثاء_اÙ\84أربعاء_اÙ\84Ø®Ù\85Ù\8aس_اÙ\84جÙ\85عة_اÙ\84سبت".split("_"),
+        weekdaysShort : "أحد_إثÙ\86Ù\8aÙ\86_Ø«Ù\84اثاء_أربعاء_Ø®Ù\85Ù\8aس_جÙ\85عة_سبت".split("_"),
         weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"),
         longDateFormat : {
             LT : "HH:mm",
             LLL : "D MMMM YYYY LT",
             LLLL : "dddd D MMMM YYYY LT"
         },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 12) {
+                return "ص";
+            } else {
+                return "م";
+            }
+        },
         calendar : {
             sameDay: "[اليوم على الساعة] LT",
             nextDay: '[غدا على الساعة] LT',
             y : "سنة",
             yy : "%d سنوات"
         },
+        preparse: function (string) {
+            return string.replace(/[۰-۹]/g, function (match) {
+                return numberMap[match];
+            }).replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            }).replace(/,/g, '،');
+        },
         week : {
             dow : 6, // Saturday is the first day of the week.
             doy : 12  // The week that contains Jan 1st is the first week of the year.
diff --git a/resources/lib/moment/lang/az.js b/resources/lib/moment/lang/az.js
new file mode 100644 (file)
index 0000000..bee1f9a
--- /dev/null
@@ -0,0 +1,102 @@
+// moment.js language configuration
+// language : azerbaijani (az)
+// author : topchiyev : https://github.com/topchiyev
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+
+    var suffixes = {
+        1: "-inci",
+        5: "-inci",
+        8: "-inci",
+        70: "-inci",
+        80: "-inci",
+
+        2: "-nci",
+        7: "-nci",
+        20: "-nci",
+        50: "-nci",
+
+        3: "-üncü",
+        4: "-üncü",
+        100: "-üncü",
+
+        6: "-ncı",
+
+        9: "-uncu",
+        10: "-uncu",
+        30: "-uncu",
+
+        60: "-ıncı",
+        90: "-ıncı"
+    };
+    return moment.lang('az', {
+        months : "yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),
+        monthsShort : "yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),
+        weekdays : "Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),
+        weekdaysShort : "Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),
+        weekdaysMin : "Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD.MM.YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd, D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay : '[bugün saat] LT',
+            nextDay : '[sabah saat] LT',
+            nextWeek : '[gələn həftə] dddd [saat] LT',
+            lastDay : '[dünən] LT',
+            lastWeek : '[keçən həftə] dddd [saat] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s sonra",
+            past : "%s əvvəl",
+            s : "birneçə saniyyə",
+            m : "bir dəqiqə",
+            mm : "%d dəqiqə",
+            h : "bir saat",
+            hh : "%d saat",
+            d : "bir gün",
+            dd : "%d gün",
+            M : "bir ay",
+            MM : "%d ay",
+            y : "bir il",
+            yy : "%d il"
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return "gecə";
+            } else if (hour < 12) {
+                return "səhər";
+            } else if (hour < 17) {
+                return "gündüz";
+            } else {
+                return "axşam";
+            }
+        },
+        ordinal : function (number) {
+            if (number === 0) {  // special case for zero
+                return number + "-ıncı";
+            }
+            var a = number % 10,
+                b = number % 100 - a,
+                c = number >= 100 ? 100 : null;
+
+            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/lang/bn.js b/resources/lib/moment/lang/bn.js
new file mode 100644 (file)
index 0000000..fb23bd0
--- /dev/null
@@ -0,0 +1,106 @@
+// moment.js language configuration
+// language : Bengali (bn)
+// author : Kaushik Gandhi : https://github.com/kaushikgandhi
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '১',
+        '2': '২',
+        '3': '৩',
+        '4': '৪',
+        '5': '৫',
+        '6': '৬',
+        '7': '৭',
+        '8': '৮',
+        '9': '৯',
+        '0': '০'
+    },
+    numberMap = {
+        '১': '1',
+        '২': '2',
+        '৩': '3',
+        '৪': '4',
+        '৫': '5',
+        '৬': '6',
+        '৭': '7',
+        '৮': '8',
+        '৯': '9',
+        '০': '0'
+    };
+
+    return moment.lang('bn', {
+        months : 'জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split("_"),
+        monthsShort : 'জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্'.split("_"),
+        weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রুবার_শনিবার'.split("_"),
+        weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্রু_শনি'.split("_"),
+        weekdaysMin : 'রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি'.split("_"),
+        longDateFormat : {
+            LT : "A h:mm সময়",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY, LT",
+            LLLL : "dddd, D MMMM YYYY, LT"
+        },
+        calendar : {
+            sameDay : '[আজ] LT',
+            nextDay : '[আগামীকাল] LT',
+            nextWeek : 'dddd, LT',
+            lastDay : '[গতকাল] LT',
+            lastWeek : '[গত] dddd, LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s পরে",
+            past : "%s আগে",
+            s : "কএক সেকেন্ড",
+            m : "এক মিনিট",
+            mm : "%d মিনিট",
+            h : "এক ঘন্টা",
+            hh : "%d ঘন্টা",
+            d : "এক দিন",
+            dd : "%d দিন",
+            M : "এক মাস",
+            MM : "%d মাস",
+            y : "এক বছর",
+            yy : "%d বছর"
+        },
+        preparse: function (string) {
+            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
+                return numberMap[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            });
+        },
+        //Bengali is a vast language its spoken 
+        //in different forms in various parts of the world.
+        //I have just generalized with most common one used
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return "রাত";
+            } else if (hour < 10) {
+                return "শকাল";
+            } else if (hour < 17) {
+                return "দুপুর";
+            } else if (hour < 20) {
+                return "বিকেল";
+            } else {
+                return "রাত";
+            }
+        },
+        week : {
+            dow : 0, // Sunday is the first day of the week.
+            doy : 6  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
index b47d7c2..5cd8476 100644 (file)
@@ -35,7 +35,7 @@
         },
         relativeTime: {
             future: "mewn %s",
-            past: "%s yn Ã l",
+            past: "%s yn Ã´l",
             s: "ychydig eiliadau",
             m: "munud",
             mm: "%d munud",
index 2fa8244..e06f8c3 100644 (file)
@@ -20,9 +20,9 @@
         longDateFormat : {
             LT : "HH:mm",
             L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D. MMMM, YYYY LT"
+            LL : "D. MMMM YYYY",
+            LLL : "D. MMMM YYYY LT",
+            LLLL : "dddd [d.] D. MMMM YYYY LT"
         },
         calendar : {
             sameDay : '[I dag kl.] LT',
diff --git a/resources/lib/moment/lang/de-at.js b/resources/lib/moment/lang/de-at.js
new file mode 100644 (file)
index 0000000..565c12b
--- /dev/null
@@ -0,0 +1,72 @@
+// moment.js language configuration
+// language : austrian german (de-at)
+// author : lluchs : https://github.com/lluchs
+// author: Menelion Elensúle: https://github.com/Oire
+// author : Martin Groller : https://github.com/MadMG
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function processRelativeTime(number, withoutSuffix, key, isFuture) {
+        var format = {
+            'm': ['eine Minute', 'einer Minute'],
+            'h': ['eine Stunde', 'einer Stunde'],
+            'd': ['ein Tag', 'einem Tag'],
+            'dd': [number + ' Tage', number + ' Tagen'],
+            'M': ['ein Monat', 'einem Monat'],
+            'MM': [number + ' Monate', number + ' Monaten'],
+            'y': ['ein Jahr', 'einem Jahr'],
+            'yy': [number + ' Jahre', number + ' Jahren']
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+
+    return moment.lang('de-at', {
+        months : "Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),
+        monthsShort : "Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),
+        weekdays : "Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),
+        weekdaysShort : "So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),
+        weekdaysMin : "So_Mo_Di_Mi_Do_Fr_Sa".split("_"),
+        longDateFormat : {
+            LT: "HH:mm [Uhr]",
+            L : "DD.MM.YYYY",
+            LL : "D. MMMM YYYY",
+            LLL : "D. MMMM YYYY LT",
+            LLLL : "dddd, D. MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: "[Heute um] LT",
+            sameElse: "L",
+            nextDay: '[Morgen um] LT',
+            nextWeek: 'dddd [um] LT',
+            lastDay: '[Gestern um] LT',
+            lastWeek: '[letzten] dddd [um] LT'
+        },
+        relativeTime : {
+            future : "in %s",
+            past : "vor %s",
+            s : "ein paar Sekunden",
+            m : processRelativeTime,
+            mm : "%d Minuten",
+            h : processRelativeTime,
+            hh : "%d Stunden",
+            d : processRelativeTime,
+            dd : processRelativeTime,
+            M : processRelativeTime,
+            MM : processRelativeTime,
+            y : processRelativeTime,
+            yy : processRelativeTime
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
index 9dfea23..e2a38cd 100644 (file)
             nextDay : '[Αύριο {}] LT',
             nextWeek : 'dddd [{}] LT',
             lastDay : '[Χθες {}] LT',
-            lastWeek : '[την προηγούμενη] dddd [{}] LT',
+            lastWeek : function() {
+                switch (this.day()) {
+                    case 6:
+                        return '[το προηγούμενο] dddd [{}] LT';
+                    default:
+                        return '[την προηγούμενη] dddd [{}] LT';
+                }
+            },
             sameElse : 'L'
         },
         calendar : function (key, mom) {
             var output = this._calendarEl[key],
                 hours = mom && mom.hours();
 
+            if (typeof output === 'function') {
+                output = output.apply(mom);
+            }
+
             return output.replace("{}", (hours % 12 === 1 ? "στη" : "στις"));
         },
         relativeTime : {
index 84b7698..9c27f66 100644 (file)
@@ -13,8 +13,8 @@
     }
 }(function (moment) {
     return moment.lang('it', {
-        months : "Gennaio_Febbraio_Marzo_Aprile_Maggio_Giugno_Luglio_Agosto_Settembre_Ottobre_Novembre_Dicembre".split("_"),
-        monthsShort : "Gen_Feb_Mar_Apr_Mag_Giu_Lug_Ago_Set_Ott_Nov_Dic".split("_"),
+        months : "gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),
+        monthsShort : "gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),
         weekdays : "Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),
         weekdaysShort : "Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),
         weekdaysMin : "D_L_Ma_Me_G_V_S".split("_"),
index 3377375..3c11b89 100644 (file)
@@ -23,7 +23,7 @@
         "y" : "metai_metų_metus",
         "yy": "metai_metų_metus"
     },
-    weekDays = "pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis_sekmadienis".split("_");
+    weekDays = "sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_");
 
     function translateSeconds(number, withoutSuffix, key, isFuture) {
         if (withoutSuffix) {
@@ -62,7 +62,7 @@
 
     function relativeWeekDay(moment, format) {
         var nominative = format.indexOf('dddd HH:mm') === -1,
-            weekDay = weekDays[moment.weekday()];
+            weekDay = weekDays[moment.day()];
 
         return nominative ? weekDay : weekDay.substring(0, weekDay.length - 2) + "į";
     }
index 77e1cad..3042844 100644 (file)
@@ -38,7 +38,7 @@
         },
         relativeTime : {
             future : "em %s",
-            past : "%s atrás",
+            past : "há %s",
             s : "segundos",
             m : "um minuto",
             mm : "%d minutos",
index ac5400d..dc013a7 100644 (file)
             yy : relativeTimeWithPlural
         },
 
-        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
+        meridiemParse: /ночи|утра|дня|вечера/i,
+        isPM : function (input) {
+            return /^(дня|вечера)$/.test(input);
+        },
 
         meridiem : function (hour, minute, isLower) {
             if (hour < 4) {
diff --git a/resources/lib/moment/lang/sr-cyr.js b/resources/lib/moment/lang/sr-cyr.js
deleted file mode 100644 (file)
index 8d18689..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-// moment.js language configuration
-// language : Serbian-cyrillic (sr-cyr)
-// author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-
-    var translator = {
-        words: { //Different grammatical cases
-            m: ['један минут', 'једне минуте'],
-            mm: ['минут', 'минуте', 'минута'],
-            h: ['један сат', 'једног сата'],
-            hh: ['сат', 'сата', 'сати'],
-            dd: ['дан', 'дана', 'дана'],
-            MM: ['месец', 'месеца', 'месеци'],
-            yy: ['година', 'године', 'година']
-        },
-        correctGrammaticalCase: function (number, wordKey) {
-            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
-        },
-        translate: function (number, withoutSuffix, key) {
-            var wordKey = translator.words[key];
-            if (key.length === 1) {
-                return withoutSuffix ? wordKey[0] : wordKey[1];
-            } else {
-                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
-            }
-        }
-    };
-
-    return moment.lang('sr-cyr', {
-        months: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'],
-        monthsShort: ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'],
-        weekdays: ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'],
-        weekdaysShort: ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'],
-        weekdaysMin: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],
-        longDateFormat: {
-            LT: "H:mm",
-            L: "DD. MM. YYYY",
-            LL: "D. MMMM YYYY",
-            LLL: "D. MMMM YYYY LT",
-            LLLL: "dddd, D. MMMM YYYY LT"
-        },
-        calendar: {
-            sameDay: '[данас у] LT',
-            nextDay: '[сутра у] LT',
-
-            nextWeek: function () {
-                switch (this.day()) {
-                case 0:
-                    return '[у] [недељу] [у] LT';
-                case 3:
-                    return '[у] [среду] [у] LT';
-                case 6:
-                    return '[у] [суботу] [у] LT';
-                case 1:
-                case 2:
-                case 4:
-                case 5:
-                    return '[у] dddd [у] LT';
-                }
-            },
-            lastDay  : '[јуче у] LT',
-            lastWeek : function () {
-                var lastWeekDays = [
-                    '[прошле] [недеље] [у] LT',
-                    '[прошлог] [понедељка] [у] LT',
-                    '[прошлог] [уторка] [у] LT',
-                    '[прошле] [среде] [у] LT',
-                    '[прошлог] [четвртка] [у] LT',
-                    '[прошлог] [петка] [у] LT',
-                    '[прошле] [суботе] [у] LT'
-                ];
-                return lastWeekDays[this.day()];
-            },
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "за %s",
-            past   : "пре %s",
-            s      : "неколико секунди",
-            m      : translator.translate,
-            mm     : translator.translate,
-            h      : translator.translate,
-            hh     : translator.translate,
-            d      : "дан",
-            dd     : translator.translate,
-            M      : "месец",
-            MM     : translator.translate,
-            y      : "годину",
-            yy     : translator.translate
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/sr-cyrl.js b/resources/lib/moment/lang/sr-cyrl.js
new file mode 100644 (file)
index 0000000..ae1754b
--- /dev/null
@@ -0,0 +1,106 @@
+// moment.js language configuration
+// language : Serbian-cyrillic (sr-cyrl)
+// author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+
+    var translator = {
+        words: { //Different grammatical cases
+            m: ['један минут', 'једне минуте'],
+            mm: ['минут', 'минуте', 'минута'],
+            h: ['један сат', 'једног сата'],
+            hh: ['сат', 'сата', 'сати'],
+            dd: ['дан', 'дана', 'дана'],
+            MM: ['месец', 'месеца', 'месеци'],
+            yy: ['година', 'године', 'година']
+        },
+        correctGrammaticalCase: function (number, wordKey) {
+            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+        },
+        translate: function (number, withoutSuffix, key) {
+            var wordKey = translator.words[key];
+            if (key.length === 1) {
+                return withoutSuffix ? wordKey[0] : wordKey[1];
+            } else {
+                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
+            }
+        }
+    };
+
+    return moment.lang('sr-cyrl', {
+        months: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'],
+        monthsShort: ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'],
+        weekdays: ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'],
+        weekdaysShort: ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'],
+        weekdaysMin: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],
+        longDateFormat: {
+            LT: "H:mm",
+            L: "DD. MM. YYYY",
+            LL: "D. MMMM YYYY",
+            LLL: "D. MMMM YYYY LT",
+            LLLL: "dddd, D. MMMM YYYY LT"
+        },
+        calendar: {
+            sameDay: '[данас у] LT',
+            nextDay: '[сутра у] LT',
+
+            nextWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[у] [недељу] [у] LT';
+                case 3:
+                    return '[у] [среду] [у] LT';
+                case 6:
+                    return '[у] [суботу] [у] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[у] dddd [у] LT';
+                }
+            },
+            lastDay  : '[јуче у] LT',
+            lastWeek : function () {
+                var lastWeekDays = [
+                    '[прошле] [недеље] [у] LT',
+                    '[прошлог] [понедељка] [у] LT',
+                    '[прошлог] [уторка] [у] LT',
+                    '[прошле] [среде] [у] LT',
+                    '[прошлог] [четвртка] [у] LT',
+                    '[прошлог] [петка] [у] LT',
+                    '[прошле] [суботе] [у] LT'
+                ];
+                return lastWeekDays[this.day()];
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "за %s",
+            past   : "пре %s",
+            s      : "неколико секунди",
+            m      : translator.translate,
+            mm     : translator.translate,
+            h      : translator.translate,
+            hh     : translator.translate,
+            d      : "дан",
+            dd     : translator.translate,
+            M      : "месец",
+            MM     : translator.translate,
+            y      : "годину",
+            yy     : translator.translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/lang/tzm-la.js b/resources/lib/moment/lang/tzm-la.js
deleted file mode 100644 (file)
index be1d878..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// moment.js language configuration
-// language : Morocco Central Atlas Tamaziɣt in Latin (tzm-la)
-// author : Abdel Said : https://github.com/abdelsaid
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.lang('tzm-la', {
-        months : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),
-        monthsShort : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),
-        weekdays : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),
-        weekdaysShort : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),
-        weekdaysMin : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: "[asdkh g] LT",
-            nextDay: '[aska g] LT',
-            nextWeek: 'dddd [g] LT',
-            lastDay: '[assant g] LT',
-            lastWeek: 'dddd [g] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "dadkh s yan %s",
-            past : "yan %s",
-            s : "imik",
-            m : "minuḍ",
-            mm : "%d minuḍ",
-            h : "saɛa",
-            hh : "%d tassaɛin",
-            d : "ass",
-            dd : "%d ossan",
-            M : "ayowr",
-            MM : "%d iyyirn",
-            y : "asgas",
-            yy : "%d isgasn"
-        },
-        week : {
-            dow : 6, // Saturday is the first day of the week.
-            doy : 12  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/tzm-latn.js b/resources/lib/moment/lang/tzm-latn.js
new file mode 100644 (file)
index 0000000..f7e9089
--- /dev/null
@@ -0,0 +1,55 @@
+// moment.js language configuration
+// language : Morocco Central Atlas Tamaziɣt in Latin (tzm-latn)
+// author : Abdel Said : https://github.com/abdelsaid
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('tzm-latn', {
+        months : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),
+        monthsShort : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),
+        weekdays : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),
+        weekdaysShort : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),
+        weekdaysMin : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: "[asdkh g] LT",
+            nextDay: '[aska g] LT',
+            nextWeek: 'dddd [g] LT',
+            lastDay: '[assant g] LT',
+            lastWeek: 'dddd [g] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "dadkh s yan %s",
+            past : "yan %s",
+            s : "imik",
+            m : "minuḍ",
+            mm : "%d minuḍ",
+            h : "saɛa",
+            hh : "%d tassaɛin",
+            d : "ass",
+            dd : "%d ossan",
+            M : "ayowr",
+            MM : "%d iyyirn",
+            y : "asgas",
+            yy : "%d isgasn"
+        },
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
index 257ee7e..83282c6 100644 (file)
@@ -1,5 +1,5 @@
 //! moment.js
-//! version : 2.6.0
+//! version : 2.7.0
 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
 //! license : MIT
 //! momentjs.com
@@ -11,7 +11,7 @@
     ************************************/
 
     var moment,
-        VERSION = "2.6.0",
+        VERSION = "2.7.0",
         // the global-scope this is NOT the global object in Node.js
         globalScope = typeof global !== 'undefined' ? global : this,
         oldGlobalMoment,
@@ -36,6 +36,7 @@
             _f : null,
             _l : null,
             _strict : null,
+            _tzm : null,
             _isUTC : null,
             _offset : null,  // optional. Combine with _isUTC
             _pf : null,
         // format function strings
         formatFunctions = {},
 
+        // default relative time thresholds
+        relativeTimeThresholds = {
+          s: 45,   //seconds to minutes
+          m: 45,   //minutes to hours
+          h: 22,   //hours to days
+          dd: 25,  //days to month (month == 1)
+          dm: 45,  //days to months (months > 1)
+          dy: 345  //days to year
+        },
+
         // tokens to ordinalize and pad
         ordinalizeTokens = 'DDD w W M D d'.split(' '),
         paddedTokens = 'M D H h m s w W'.split(' '),
 
         lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin'];
 
+    // Pick the first defined of two or three arguments. dfl comes from
+    // default.
+    function dfl(a, b, c) {
+        switch (arguments.length) {
+            case 2: return a != null ? a : b;
+            case 3: return a != null ? a : b != null ? b : c;
+            default: throw new Error("Implement me");
+        }
+    }
+
     function defaultParsingFlags() {
         // We need to deep clone this object, and es5 standard is not very
         // helpful.
             config._useUTC = true;
             config._tzm = timezoneMinutesFromString(input);
             break;
+        // WEEKDAY - human
+        case 'dd':
+        case 'ddd':
+        case 'dddd':
+            a = getLangDefinition(config._l).weekdaysParse(input);
+            // if we didn't get a weekday name, mark the date as invalid
+            if (a != null) {
+                config._w = config._w || {};
+                config._w['d'] = a;
+            } else {
+                config._pf.invalidWeekday = input;
+            }
+            break;
+        // WEEK, WEEK DAY - numeric
         case 'w':
         case 'ww':
         case 'W':
         case 'WW':
         case 'd':
-        case 'dd':
-        case 'ddd':
-        case 'dddd':
         case 'e':
         case 'E':
             token = token.substr(0, 1);
             /* falls through */
-        case 'gg':
         case 'gggg':
-        case 'GG':
         case 'GGGG':
         case 'GGGGG':
             token = token.substr(0, 2);
             if (input) {
                 config._w = config._w || {};
-                config._w[token] = input;
+                config._w[token] = toInt(input);
             }
             break;
+        case 'gg':
+        case 'GG':
+            config._w = config._w || {};
+            config._w[token] = moment.parseTwoDigitYear(input);
         }
     }
 
+    function dayOfYearFromWeekInfo(config) {
+        var w, weekYear, week, weekday, dow, doy, temp, lang;
+
+        w = config._w;
+        if (w.GG != null || w.W != null || w.E != null) {
+            dow = 1;
+            doy = 4;
+
+            // TODO: We need to take the current isoWeekYear, but that depends on
+            // how we interpret now (local, utc, fixed offset). So create
+            // a now version of current config (take local/utc/offset flags, and
+            // create now).
+            weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year);
+            week = dfl(w.W, 1);
+            weekday = dfl(w.E, 1);
+        } else {
+            lang = getLangDefinition(config._l);
+            dow = lang._week.dow;
+            doy = lang._week.doy;
+
+            weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year);
+            week = dfl(w.w, 1);
+
+            if (w.d != null) {
+                // weekday -- low day numbers are considered next week
+                weekday = w.d;
+                if (weekday < dow) {
+                    ++week;
+                }
+            } else if (w.e != null) {
+                // local weekday -- counting starts from begining of week
+                weekday = w.e + dow;
+            } else {
+                // default to begining of week
+                weekday = dow;
+            }
+        }
+        temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow);
+
+        config._a[YEAR] = temp.year;
+        config._dayOfYear = temp.dayOfYear;
+    }
+
     // convert an array to a date.
     // the array should mirror the parameters below
     // note: all values past the year are optional and will default to the lowest possible value.
     // [year, month, day , hour, minute, second, millisecond]
     function dateFromConfig(config) {
-        var i, date, input = [], currentDate,
-            yearToUse, fixYear, w, temp, lang, weekday, week;
+        var i, date, input = [], currentDate, yearToUse;
 
         if (config._d) {
             return;
 
         //compute day of the year from weeks and weekdays
         if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
-            fixYear = function (val) {
-                var intVal = parseInt(val, 10);
-                return val ?
-                  (val.length < 3 ? (intVal > 68 ? 1900 + intVal : 2000 + intVal) : intVal) :
-                  (config._a[YEAR] == null ? moment().weekYear() : config._a[YEAR]);
-            };
-
-            w = config._w;
-            if (w.GG != null || w.W != null || w.E != null) {
-                temp = dayOfYearFromWeeks(fixYear(w.GG), w.W || 1, w.E, 4, 1);
-            }
-            else {
-                lang = getLangDefinition(config._l);
-                weekday = w.d != null ?  parseWeekday(w.d, lang) :
-                  (w.e != null ?  parseInt(w.e, 10) + lang._week.dow : 0);
-
-                week = parseInt(w.w, 10) || 1;
-
-                //if we're parsing 'd', then the low day numbers may be next week
-                if (w.d != null && weekday < lang._week.dow) {
-                    week++;
-                }
-
-                temp = dayOfYearFromWeeks(fixYear(w.gg), week, weekday, lang._week.doy, lang._week.dow);
-            }
-
-            config._a[YEAR] = temp.year;
-            config._dayOfYear = temp.dayOfYear;
+            dayOfYearFromWeekInfo(config);
         }
 
         //if the day of the year is set, figure out what it is
         if (config._dayOfYear) {
-            yearToUse = config._a[YEAR] == null ? currentDate[YEAR] : config._a[YEAR];
+            yearToUse = dfl(config._a[YEAR], currentDate[YEAR]);
 
             if (config._dayOfYear > daysInYear(yearToUse)) {
                 config._pf._overflowDayOfYear = true;
             config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
         }
 
-        // add the offsets to the time to be parsed so that we can have a clean array for checking isValid
-        input[HOUR] += toInt((config._tzm || 0) / 60);
-        input[MINUTE] += toInt((config._tzm || 0) % 60);
-
         config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input);
+        // Apply timezone offset from input. The actual zone can be changed
+        // with parseZone.
+        if (config._tzm != null) {
+            config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm);
+        }
     }
 
     function dateFromObject(config) {
     // date from string and format string
     function makeDateFromStringAndFormat(config) {
 
+        if (config._f === moment.ISO_8601) {
+            parseISO(config);
+            return;
+        }
+
         config._a = [];
         config._pf.empty = true;
 
     }
 
     // date from iso format
-    function makeDateFromString(config) {
+    function parseISO(config) {
         var i, l,
             string = config._i,
             match = isoRegex.exec(string);
                 config._f += "Z";
             }
             makeDateFromStringAndFormat(config);
+        } else {
+            config._isValid = false;
         }
-        else {
+    }
+
+    // date from iso format or fallback
+    function makeDateFromString(config) {
+        parseISO(config);
+        if (config._isValid === false) {
+            delete config._isValid;
             moment.createFromInputFallback(config);
         }
     }
             hours = round(minutes / 60),
             days = round(hours / 24),
             years = round(days / 365),
-            args = seconds < 45 && ['s', seconds] ||
+            args = seconds < relativeTimeThresholds.s  && ['s', seconds] ||
                 minutes === 1 && ['m'] ||
-                minutes < 45 && ['mm', minutes] ||
+                minutes < relativeTimeThresholds.m && ['mm', minutes] ||
                 hours === 1 && ['h'] ||
-                hours < 22 && ['hh', hours] ||
+                hours < relativeTimeThresholds.h && ['hh', hours] ||
                 days === 1 && ['d'] ||
-                days <= 25 && ['dd', days] ||
-                days <= 45 && ['M'] ||
-                days < 345 && ['MM', round(days / 30)] ||
+                days <= relativeTimeThresholds.dd && ['dd', days] ||
+                days <= relativeTimeThresholds.dm && ['M'] ||
+                days < relativeTimeThresholds.dy && ['MM', round(days / 30)] ||
                 years === 1 && ['y'] || ['yy', years];
         args[2] = withoutSuffix;
         args[3] = milliseconds > 0;
     function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
         var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear;
 
+        d = d === 0 ? 7 : d;
         weekday = weekday != null ? weekday : firstDayOfWeek;
         daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0);
         dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;
         config._d = new Date(config._i);
     });
 
+    // Pick a moment m from moments so that m[fn](other) is true for all
+    // other. This relies on the function fn to be transitive.
+    //
+    // moments should either be an array of moment objects or an array, whose
+    // first element is an array of moment objects.
+    function pickBy(fn, moments) {
+        var res, i;
+        if (moments.length === 1 && isArray(moments[0])) {
+            moments = moments[0];
+        }
+        if (!moments.length) {
+            return moment();
+        }
+        res = moments[0];
+        for (i = 1; i < moments.length; ++i) {
+            if (moments[i][fn](res)) {
+                res = moments[i];
+            }
+        }
+        return res;
+    }
+
+    moment.min = function () {
+        var args = [].slice.call(arguments, 0);
+
+        return pickBy('isBefore', args);
+    };
+
+    moment.max = function () {
+        var args = [].slice.call(arguments, 0);
+
+        return pickBy('isAfter', args);
+    };
+
     // creating with utc
     moment.utc = function (input, format, lang, strict) {
         var c;
     // default format
     moment.defaultFormat = isoFormat;
 
+    // constant that refers to the ISO standard
+    moment.ISO_8601 = function () {};
+
     // Plugins that add properties should also add the key here (null value),
     // so we can properly clone ourselves.
     moment.momentProperties = momentProperties;
     // It is intended to keep the offset in sync with the timezone.
     moment.updateOffset = function () {};
 
+    // This function allows you to set a threshold for relative time strings
+    moment.relativeTimeThreshold = function(threshold, limit) {
+      if (relativeTimeThresholds[threshold] === undefined) {
+        return false;
+      }
+      relativeTimeThresholds[threshold] = limit;
+      return true;
+    };
+
     // This function will load languages and then set the global language.  If
     // no arguments are passed in, it will simply return the current global
     // language key.
         add : function (input, val) {
             var dur;
             // switch args to support add('s', 1) and add(1, 's')
-            if (typeof input === 'string') {
+            if (typeof input === 'string' && typeof val === 'string') {
+                dur = moment.duration(isNaN(+val) ? +input : +val, isNaN(+val) ? val : input);
+            } else if (typeof input === 'string') {
                 dur = moment.duration(+val, input);
             } else {
                 dur = moment.duration(input, val);
         subtract : function (input, val) {
             var dur;
             // switch args to support subtract('s', 1) and subtract(1, 's')
-            if (typeof input === 'string') {
+            if (typeof input === 'string' && typeof val === 'string') {
+                dur = moment.duration(isNaN(+val) ? +input : +val, isNaN(+val) ? val : input);
+            } else if (typeof input === 'string') {
                 dur = moment.duration(+val, input);
             } else {
                 dur = moment.duration(input, val);
             return this.from(moment(), withoutSuffix);
         },
 
-        calendar : function () {
+        calendar : function (time) {
             // We want to compare the start of today, vs this.
             // Getting start-of-today depends on whether we're zone'd or not.
-            var sod = makeAs(moment(), this).startOf('day'),
+            var now = time || moment(),
+                sod = makeAs(now, this).startOf('day'),
                 diff = this.diff(sod, 'days', true),
                 format = diff < -6 ? 'sameElse' :
                     diff < -1 ? 'lastWeek' :
             return +this.clone().startOf(units) === +makeAs(input, this).startOf(units);
         },
 
-        min: function (other) {
-            other = moment.apply(null, arguments);
-            return other < this ? this : other;
-        },
+        min: deprecate(
+                 "moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",
+                 function (other) {
+                     other = moment.apply(null, arguments);
+                     return other < this ? this : other;
+                 }
+         ),
 
-        max: function (other) {
-            other = moment.apply(null, arguments);
-            return other > this ? this : other;
-        },
+        max: deprecate(
+                "moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",
+                function (other) {
+                    other = moment.apply(null, arguments);
+                    return other > this ? this : other;
+                }
+        ),
 
         // keepTime = true means only change the timezone, without affecting
         // the local hour. So 5:31:26 +0300 --[zone(2, true)]--> 5:31:26 +0200
index 47fce7a..3e0bfb9 100644 (file)
@@ -1,3 +1,13 @@
+/*!
+ * OOjs UI v0.1.0-pre (a63f03882e)
+ * 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: 2014-06-27T23:51:18Z
+ */
 .oo-ui-dialog-content .oo-ui-window-closeButton {
   position: absolute;
   top: 0;
index 94ebbe3..e651ff0 100644 (file)
@@ -1,3 +1,13 @@
+/*!
+ * OOjs UI v0.1.0-pre (a63f03882e)
+ * 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: 2014-06-27T23:51:18Z
+ */
 .oo-ui-dialog {
   background-color: #fff;
   background-color: rgba(255, 255, 255, 0.5);
index 7e3aadf..0262042 100644 (file)
@@ -1,16 +1,17 @@
 /*!
- * OOjs UI v0.1.0-pre (7a0e222a75)
+ * OOjs UI v0.1.0-pre (a63f03882e)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Wed Jun 18 2014 16:19:15 GMT-0700 (PDT)
+ * Date: 2014-06-27T23:51:18Z
  */
 ( function ( OO ) {
 
 'use strict';
+
 /**
  * Namespace for all classes, static methods and static properties.
  *
@@ -94,84 +95,85 @@ OO.ui.getLocalValue = function ( obj, lang, fallback ) {
 
 ( function () {
 
-/**
- * Message store for the default implementation of OO.ui.msg
- *
- * Environments that provide a localization system should not use this, but should override
- * OO.ui.msg altogether.
- *
- * @private
- */
-var messages = {
-       // Label text for button to exit from dialog
-       'ooui-dialog-action-close': 'Close',
-       // Tool tip for a button that moves items in a list down one place
-       'ooui-outline-control-move-down': 'Move item down',
-       // Tool tip for a button that moves items in a list up one place
-       'ooui-outline-control-move-up': 'Move item up',
-       // Tool tip for a button that removes items from a list
-       'ooui-outline-control-remove': 'Remove item',
-       // Label for the toolbar group that contains a list of all other available tools
-       'ooui-toolbar-more': 'More',
-
-       // Label for the generic dialog used to confirm things
-       'ooui-dialog-confirm-title': 'Confirm',
-       // The default prompt of a confirmation dialog
-       'ooui-dialog-confirm-default-prompt': 'Are you sure?',
-       // The default OK button text on a confirmation dialog
-       'ooui-dialog-confirm-default-ok': 'OK',
-       // The default cancel button text on a confirmation dialog
-       'ooui-dialog-confirm-default-cancel': 'Cancel'
-};
+       /**
       * Message store for the default implementation of OO.ui.msg
       *
       * Environments that provide a localization system should not use this, but should override
       * OO.ui.msg altogether.
       *
       * @private
       */
+       var messages = {
+               // Label text for button to exit from dialog
+               'ooui-dialog-action-close': 'Close',
+               // Tool tip for a button that moves items in a list down one place
+               'ooui-outline-control-move-down': 'Move item down',
+               // Tool tip for a button that moves items in a list up one place
+               'ooui-outline-control-move-up': 'Move item up',
+               // Tool tip for a button that removes items from a list
+               'ooui-outline-control-remove': 'Remove item',
+               // Label for the toolbar group that contains a list of all other available tools
+               'ooui-toolbar-more': 'More',
+
+               // Label for the generic dialog used to confirm things
+               'ooui-dialog-confirm-title': 'Confirm',
+               // The default prompt of a confirmation dialog
+               'ooui-dialog-confirm-default-prompt': 'Are you sure?',
+               // The default OK button text on a confirmation dialog
+               'ooui-dialog-confirm-default-ok': 'OK',
+               // The default cancel button text on a confirmation dialog
+               'ooui-dialog-confirm-default-cancel': 'Cancel'
+       };
 
-/**
- * Get a localized message.
- *
- * In environments that provide a localization system, this function should be overridden to
- * return the message translated in the user's language. The default implementation always returns
- * English messages.
- *
- * After the message key, message parameters may optionally be passed. In the default implementation,
- * any occurrences of $1 are replaced with the first parameter, $2 with the second parameter, etc.
- * Alternative implementations of OO.ui.msg may use any substitution system they like, as long as
- * they support unnamed, ordered message parameters.
- *
- * @abstract
- * @param {string} key Message key
- * @param {Mixed...} [params] Message parameters
- * @return {string} Translated message with parameters substituted
- */
-OO.ui.msg = function ( key ) {
-       var message = messages[key], params = Array.prototype.slice.call( arguments, 1 );
-       if ( typeof message === 'string' ) {
-               // Perform $1 substitution
-               message = message.replace( /\$(\d+)/g, function ( unused, n ) {
-                       var i = parseInt( n, 10 );
-                       return params[i - 1] !== undefined ? params[i - 1] : '$' + n;
-               } );
-       } else {
-               // Return placeholder if message not found
-               message = '[' + key + ']';
-       }
-       return message;
-};
+       /**
       * Get a localized message.
       *
       * In environments that provide a localization system, this function should be overridden to
       * return the message translated in the user's language. The default implementation always returns
       * English messages.
       *
       * After the message key, message parameters may optionally be passed. In the default implementation,
       * any occurrences of $1 are replaced with the first parameter, $2 with the second parameter, etc.
       * Alternative implementations of OO.ui.msg may use any substitution system they like, as long as
       * they support unnamed, ordered message parameters.
       *
       * @abstract
       * @param {string} key Message key
       * @param {Mixed...} [params] Message parameters
       * @return {string} Translated message with parameters substituted
       */
+       OO.ui.msg = function ( key ) {
+               var message = messages[key], params = Array.prototype.slice.call( arguments, 1 );
+               if ( typeof message === 'string' ) {
+                       // Perform $1 substitution
+                       message = message.replace( /\$(\d+)/g, function ( unused, n ) {
+                               var i = parseInt( n, 10 );
+                               return params[i - 1] !== undefined ? params[i - 1] : '$' + n;
+                       } );
+               } else {
+                       // Return placeholder if message not found
+                       message = '[' + key + ']';
+               }
+               return message;
+       };
 
-/** */
-OO.ui.deferMsg = function ( key ) {
-       return function () {
-               return OO.ui.msg( key );
+       /** */
+       OO.ui.deferMsg = function ( key ) {
+               return function () {
+                       return OO.ui.msg( key );
+               };
        };
-};
 
-/** */
-OO.ui.resolveMsg = function ( msg ) {
-       if ( $.isFunction( msg ) ) {
-               return msg();
-       }
-       return msg;
-};
+       /** */
+       OO.ui.resolveMsg = function ( msg ) {
+               if ( $.isFunction( msg ) ) {
+                       return msg();
+               }
+               return msg;
+       };
 
 } )();
+
 /**
  * DOM element abstraction.
  *
@@ -669,6 +671,7 @@ OO.ui.Element.prototype.offDOMEvent = function ( event, callback ) {
                $( el ).off( event, callback );
        };
 }() );
+
 /**
  * Embedded iframe with the same styles as its parent.
  *
@@ -899,6 +902,7 @@ OO.ui.Frame.prototype.setSize = function ( width, height ) {
        this.$element.css( { 'width': width, 'height': height } );
        return this;
 };
+
 /**
  * Container for elements in a child frame.
  *
@@ -1286,8 +1290,8 @@ OO.ui.Window.prototype.open = function ( data ) {
        // Open the window
        this.opening = $.Deferred();
 
-       // So we can restore focus on closing
-       this.$prevFocus = $( document.activeElement );
+       this.$ariaHidden = $( 'body' ).children().not( this.$element.parentsUntil( 'body' ).last() )
+               .attr( 'aria-hidden', '' );
 
        this.frame.load().done( OO.ui.bind( function () {
                this.$element.show();
@@ -1352,10 +1356,9 @@ OO.ui.Window.prototype.close = function ( data ) {
                        this.opened.resolve();
                }
                this.$element.hide();
-               // Restore focus to whatever was focused before opening
-               if ( this.$prevFocus ) {
-                       this.$prevFocus.focus();
-                       this.$prevFocus = undefined;
+               if ( this.$ariaHidden ) {
+                       this.$ariaHidden.removeAttr( 'aria-hidden' );
+                       this.$ariaHidden = undefined;
                }
                this.visible = false;
                this.closing.resolve();
@@ -1365,6 +1368,7 @@ OO.ui.Window.prototype.close = function ( data ) {
 
        return this.closing.promise();
 };
+
 /**
  * Set of mutually exclusive windows.
  *
@@ -1530,6 +1534,7 @@ OO.ui.WindowSet.prototype.addWindow = function ( win ) {
        } );
        this.$element.append( win.$element );
 };
+
 /**
  * Modal dialog window.
  *
@@ -1762,6 +1767,7 @@ OO.ui.Dialog.prototype.popPending = function () {
 
        return this;
 };
+
 /**
  * Container for elements.
  *
@@ -1791,6 +1797,7 @@ OO.ui.Layout = function OoUiLayout( config ) {
 
 OO.inheritClass( OO.ui.Layout, OO.ui.Element );
 OO.mixinClass( OO.ui.Layout, OO.EventEmitter );
+
 /**
  * User interface control.
  *
@@ -1876,6 +1883,7 @@ OO.ui.Widget.prototype.setDisabled = function ( disabled ) {
        this.wasDisabled = isDisabled;
        return this;
 };
+
 /**
  * A list of functions, called in sequence.
  *
@@ -1992,6 +2000,7 @@ OO.ui.Process.prototype.next = function ( step, context ) {
        this.steps.push( [ step, context || null ] );
        return this;
 };
+
 /**
  * Dialog for showing a confirmation/warning message.
  *
@@ -2052,8 +2061,6 @@ OO.ui.ConfirmationDialog.prototype.initialize = function () {
                this.okButton.$element,
                this.cancelButton.$element
        );
-
-       this.connect( this, { 'teardown': [ 'close', 'cancel' ] } );
 };
 
 /*
@@ -2097,11 +2104,12 @@ OO.ui.ConfirmationDialog.prototype.getTeardownProcess = function ( data ) {
                .first( function () {
                        if ( data === 'ok' ) {
                                this.opened.resolve();
-                       } else if ( data === 'cancel' ) {
+                       } else { // data === 'cancel', or no data
                                this.opened.reject();
                        }
                }, this );
 };
+
 /**
  * Element with a button.
  *
@@ -2209,6 +2217,7 @@ OO.ui.ButtonedElement.prototype.setActive = function ( value ) {
        this.$button.toggleClass( 'oo-ui-buttonedElement-active', !!value );
        return this;
 };
+
 /**
  * Element that can be automatically clipped to visible boundaies.
  *
@@ -2336,18 +2345,23 @@ OO.ui.ClippableElement.prototype.clip = function () {
        if ( clipWidth ) {
                this.$clippable.css( { 'overflow-x': 'auto', 'width': desiredWidth } );
        } else {
-               this.$clippable.css( { 'overflow-x': '', 'width': this.idealWidth || '' } );
+               this.$clippable.css( 'width', this.idealWidth || '' );
+               this.$clippable.width(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
+               this.$clippable.css( 'overflow-x', '' );
        }
        if ( clipHeight ) {
                this.$clippable.css( { 'overflow-y': 'auto', 'height': desiredHeight } );
        } else {
-               this.$clippable.css( { 'overflow-y': '', 'height': this.idealHeight || '' } );
+               this.$clippable.css( 'height', this.idealHeight || '' );
+               this.$clippable.height(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
+               this.$clippable.css( 'overflow-y', '' );
        }
 
        this.clipped = clipWidth || clipHeight;
 
        return this;
 };
+
 /**
  * Element with named flags that can be added, removed, listed and checked.
  *
@@ -2447,6 +2461,7 @@ OO.ui.FlaggableElement.prototype.setFlags = function ( flags ) {
        }
        return this;
 };
+
 /**
  * Element containing a sequence of child elements.
  *
@@ -2645,6 +2660,7 @@ OO.ui.GroupElement.prototype.clearItems = function () {
        this.items = [];
        return this;
 };
+
 /**
  * Element containing an icon.
  *
@@ -2732,6 +2748,7 @@ OO.ui.IconedElement.prototype.setIcon = function ( icon ) {
 OO.ui.IconedElement.prototype.getIcon = function () {
        return this.icon;
 };
+
 /**
  * Element containing an indicator.
  *
@@ -2845,6 +2862,7 @@ OO.ui.IndicatedElement.prototype.getIndicator = function () {
 OO.ui.IndicatedElement.prototype.getIndicatorTitle = function () {
        return this.indicatorTitle;
 };
+
 /**
  * Element containing a label.
  *
@@ -2943,6 +2961,7 @@ OO.ui.LabeledElement.prototype.fitLabel = function () {
        }
        return this;
 };
+
 /**
  * Popuppable element.
  *
@@ -2993,6 +3012,7 @@ OO.ui.PopuppableElement.prototype.showPopup = function () {
 OO.ui.PopuppableElement.prototype.hidePopup = function () {
        this.popup.hide();
 };
+
 /**
  * Element with a title.
  *
@@ -3059,6 +3079,7 @@ OO.ui.TitledElement.prototype.setTitle = function ( title ) {
 OO.ui.TitledElement.prototype.getTitle = function () {
        return this.title;
 };
+
 /**
  * Generic toolbar tool.
  *
@@ -3310,6 +3331,7 @@ OO.ui.Tool.prototype.destroy = function () {
        this.toolbar.disconnect( this );
        this.$element.remove();
 };
+
 /**
  * Collection of tool groups.
  *
@@ -3518,6 +3540,7 @@ OO.ui.Toolbar.prototype.releaseTool = function ( tool ) {
 OO.ui.Toolbar.prototype.getToolAccelerator = function () {
        return undefined;
 };
+
 /**
  * Factory for tools.
  *
@@ -3630,6 +3653,7 @@ OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
        }
        return names;
 };
+
 /**
  * Collection of tools.
  *
@@ -3948,6 +3972,7 @@ OO.ui.ToolGroup.prototype.destroy = function () {
        }
        this.$element.remove();
 };
+
 /**
  * Factory for tool groups.
  *
@@ -3986,6 +4011,7 @@ OO.ui.ToolGroupFactory.static.getDefaultClasses = function () {
                OO.ui.MenuToolGroup
        ];
 };
+
 /**
  * Layout made of a fieldset and optional legend.
  *
@@ -4033,6 +4059,7 @@ OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
 /* Static Properties */
 
 OO.ui.FieldsetLayout.static.tagName = 'div';
+
 /**
  * Layout made of a field and optional label.
  *
@@ -4148,6 +4175,7 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
 
        return this;
 };
+
 /**
  * Layout made of proportionally sized columns and rows.
  *
@@ -4308,6 +4336,7 @@ OO.ui.GridLayout.prototype.update = function () {
 OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
        return this.panels[( x * this.widths.length ) + y];
 };
+
 /**
  * Layout containing a series of pages.
  *
@@ -4726,6 +4755,7 @@ OO.ui.BookletLayout.prototype.updateOutlineWidget = function () {
 
        return this;
 };
+
 /**
  * Layout that expands to cover the entire area of its parent, with optional scrolling and padding.
  *
@@ -4758,6 +4788,7 @@ OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
+
 /**
  * Page within an booklet layout.
  *
@@ -4851,6 +4882,7 @@ OO.ui.PageLayout.prototype.setActive = function ( active ) {
                this.emit( 'active', this.active );
        }
 };
+
 /**
  * Layout containing a series of mutually exclusive pages.
  *
@@ -5021,6 +5053,7 @@ OO.ui.StackLayout.prototype.setItem = function ( item ) {
 
        return this;
 };
+
 /**
  * Horizontal bar layout of tools as icon buttons.
  *
@@ -5050,6 +5083,7 @@ OO.ui.BarToolGroup.static.titleTooltips = true;
 OO.ui.BarToolGroup.static.accelTooltips = true;
 
 OO.ui.BarToolGroup.static.name = 'bar';
+
 /**
  * Popup list of tools with an icon and optional label.
  *
@@ -5202,6 +5236,7 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
                }
        }
 };
+
 /**
  * Drop down list layout of tools as labeled icon buttons.
  *
@@ -5229,6 +5264,7 @@ OO.inheritClass( OO.ui.ListToolGroup, OO.ui.PopupToolGroup );
 OO.ui.ListToolGroup.static.accelTooltips = true;
 
 OO.ui.ListToolGroup.static.name = 'list';
+
 /**
  * Drop down menu layout of tools as selectable menu items.
  *
@@ -5283,6 +5319,7 @@ OO.ui.MenuToolGroup.prototype.onUpdateState = function () {
 
        this.setLabel( labelTexts.join( ', ' ) || ' ' );
 };
+
 /**
  * Tool that shows a popup when selected.
  *
@@ -5340,6 +5377,7 @@ OO.ui.PopupTool.prototype.onSelect = function () {
 OO.ui.PopupTool.prototype.onUpdateState = function () {
        this.setActive( false );
 };
+
 /**
  * Group widget.
  *
@@ -5390,6 +5428,7 @@ OO.ui.GroupWidget.prototype.setDisabled = function ( disabled ) {
 
        return this;
 };
+
 /**
  * Item widget.
  *
@@ -5434,6 +5473,7 @@ OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
 
        return this;
 };
+
 /**
  * Icon widget.
  *
@@ -5469,6 +5509,7 @@ OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
 /* Static Properties */
 
 OO.ui.IconWidget.static.tagName = 'span';
+
 /**
  * Indicator widget.
  *
@@ -5504,6 +5545,7 @@ OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
 /* Static Properties */
 
 OO.ui.IndicatorWidget.static.tagName = 'span';
+
 /**
  * Container for multiple related buttons.
  *
@@ -5535,6 +5577,7 @@ OO.ui.ButtonGroupWidget = function OoUiButtonGroupWidget( config ) {
 
 OO.inheritClass( OO.ui.ButtonGroupWidget, OO.ui.Widget );
 OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.GroupElement );
+
 /**
  * Button widget.
  *
@@ -5635,6 +5678,7 @@ OO.ui.ButtonWidget.prototype.onKeyPress = function ( e ) {
        }
        return false;
 };
+
 /**
  * Input widget.
  *
@@ -5830,6 +5874,7 @@ OO.ui.InputWidget.prototype.focus = function () {
        this.$input.focus();
        return this;
 };
+
 /**
  * Checkbox widget.
  *
@@ -5896,6 +5941,7 @@ OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
                }, this ) );
        }
 };
+
 /**
  * Label widget.
  *
@@ -5948,6 +5994,7 @@ OO.ui.LabelWidget.prototype.onClick = function () {
        this.input.simulateLabelClick();
        return false;
 };
+
 /**
  * Lookup input widget.
  *
@@ -6181,6 +6228,7 @@ OO.ui.LookupInputWidget.prototype.getLookupMenuItemsFromData = function () {
        // Stub, implemented in subclass
        return [];
 };
+
 /**
  * Option widget.
  *
@@ -6398,6 +6446,7 @@ OO.ui.OptionWidget.prototype.flash = function () {
 OO.ui.OptionWidget.prototype.getData = function () {
        return this.data;
 };
+
 /**
  * Selection of options.
  *
@@ -6909,6 +6958,7 @@ OO.ui.SelectWidget.prototype.clearItems = function () {
 
        return this;
 };
+
 /**
  * Menu item widget.
  *
@@ -6935,6 +6985,7 @@ OO.ui.MenuItemWidget = function OoUiMenuItemWidget( data, config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.MenuItemWidget, OO.ui.OptionWidget );
+
 /**
  * Menu widget.
  *
@@ -7192,6 +7243,7 @@ OO.ui.MenuWidget.prototype.hide = function () {
 
        return this;
 };
+
 /**
  * Inline menu of options.
  *
@@ -7299,6 +7351,7 @@ OO.ui.InlineMenuWidget.prototype.onClick = function ( e ) {
        }
        return false;
 };
+
 /**
  * Menu section item widget.
  *
@@ -7328,6 +7381,7 @@ OO.inheritClass( OO.ui.MenuSectionItemWidget, OO.ui.OptionWidget );
 OO.ui.MenuSectionItemWidget.static.selectable = false;
 
 OO.ui.MenuSectionItemWidget.static.highlightable = false;
+
 /**
  * Create an OO.ui.OutlineWidget object.
  *
@@ -7353,6 +7407,7 @@ OO.ui.OutlineWidget = function OoUiOutlineWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.OutlineWidget, OO.ui.SelectWidget );
+
 /**
  * Creates an OO.ui.OutlineControlsWidget object.
  *
@@ -7466,6 +7521,7 @@ OO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {
        this.downButton.setDisabled( !movable || selectedItem === lastMovable );
        this.removeButton.setDisabled( !removable );
 };
+
 /**
  * Creates an OO.ui.OutlineItemWidget object.
  *
@@ -7592,6 +7648,7 @@ OO.ui.OutlineItemWidget.prototype.setLevel = function ( level ) {
 
        return this;
 };
+
 /**
  * Option widget that looks like a button.
  *
@@ -7645,6 +7702,7 @@ OO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {
 
        return this;
 };
+
 /**
  * Select widget containing button options.
  *
@@ -7667,6 +7725,7 @@ OO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );
+
 /**
  * Container for content that is overlaid and positioned absolutely.
  *
@@ -7912,6 +7971,7 @@ OO.ui.PopupWidget.prototype.display = function ( width, height, transition ) {
 
        return this;
 };
+
 /**
  * Button that shows and hides a popup.
  *
@@ -7963,6 +8023,7 @@ OO.ui.PopupButtonWidget.prototype.onClick = function ( e ) {
        }
        return false;
 };
+
 /**
  * Search widget.
  *
@@ -8116,6 +8177,7 @@ OO.ui.SearchWidget.prototype.getQuery = function () {
 OO.ui.SearchWidget.prototype.getResults = function () {
        return this.results;
 };
+
 /**
  * Text input widget.
  *
@@ -8328,6 +8390,7 @@ OO.ui.TextInputWidget.prototype.select = function () {
        this.$input.select();
        return this;
 };
+
 /**
  * Menu for a text input widget.
  *
@@ -8428,6 +8491,7 @@ OO.ui.TextInputMenuWidget.prototype.position = function () {
        this.setIdealSize( $container.width() );
        return this;
 };
+
 /**
  * Width with on and off states.
  *
@@ -8487,6 +8551,7 @@ OO.ui.ToggleWidget.prototype.setValue = function ( value ) {
        }
        return this;
 };
+
 /**
  * Button that toggles on and off.
  *
@@ -8545,6 +8610,7 @@ OO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {
 
        return this;
 };
+
 /**
  * Switch that slides on and off.
  *
@@ -8598,4 +8664,5 @@ OO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) {
                this.setValue( !this.value );
        }
 };
+
 }( OO ) );
index 76feb5d..a568a6d 100644 (file)
@@ -1,14 +1,13 @@
 /*!
- * OOjs UI v0.1.0-pre (7a0e222a75)
+ * OOjs UI v0.1.0-pre (a63f03882e)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Wed Jun 18 2014 16:19:15 GMT-0700 (PDT)
+ * Date: 2014-06-27T23:51:18Z
  */
-
 /* Textures */
 
 .oo-ui-texture-pending {
index 8ca3aed..8ccd50a 100644 (file)
@@ -1,16 +1,17 @@
 /*!
- * OOjs v1.0.9
+ * OOjs v1.0.10
  * https://www.mediawiki.org/wiki/OOjs
  *
  * Copyright 2011-2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Wed Apr 02 2014 14:20:50 GMT-0700 (PDT)
+ * Date: Wed Jun 18 2014 20:03:40 GMT-0700 (PDT)
  */
 ( function ( global ) {
 
 'use strict';
+/*exported toString */
 var
        /**
         * Namespace for all classes, static methods and static properties.
@@ -23,33 +24,6 @@ var
 
 /* Class Methods */
 
-/**
- * Assert whether a value is a plain object or not.
- *
- * @param {Mixed} obj
- * @return {boolean}
- */
-oo.isPlainObject = function ( obj ) {
-       // Any object or value whose internal [[Class]] property is not "[object Object]"
-       if ( toString.call( obj ) !== '[object Object]' ) {
-               return false;
-       }
-
-       // The try/catch suppresses exceptions thrown when attempting to access
-       // the "constructor" property of certain host objects suich as window.location
-       // in Firefox < 20 (https://bugzilla.mozilla.org/814622)
-       try {
-               if ( obj.constructor &&
-                               !hasOwn.call( obj.constructor.prototype, 'isPrototypeOf' ) ) {
-                       return false;
-               }
-       } catch ( e ) {
-               return false;
-       }
-
-       return true;
-};
-
 /**
  * Utility to initialize a class for OO inheritance.
  *
@@ -106,7 +80,12 @@ oo.inheritClass = function ( targetFn, originFn ) {
 
        var targetConstructor = targetFn.prototype.constructor;
 
-       targetFn.super = originFn;
+       // Using ['super'] instead of .super because 'super' is not supported
+       // by IE 8 and below (bug 63303).
+       // Provide .parent as alias for code supporting older browsers which
+       // allows people to comply with their style guide.
+       targetFn['super'] = targetFn.parent = originFn;
+
        targetFn.prototype = Object.create( originFn.prototype, {
                // Restore constructor property of targetFn
                constructor: {
@@ -255,6 +234,12 @@ oo.compare = function ( a, b, asymmetrical ) {
        }
 
        for ( k in a ) {
+               if ( !hasOwn.call( a, k ) ) {
+                       // Support es3-shim: Without this filter, comparing [] to {} will be false in ES3
+                       // because the shimmed "forEach" is enumerable and shows up in Array but not Object.
+                       continue;
+               }
+
                aValue = a[k];
                bValue = b[k];
                aType = typeof aValue;
@@ -457,6 +442,38 @@ oo.simpleArrayIntersection = function ( a, b ) {
 oo.simpleArrayDifference = function ( a, b ) {
        return simpleArrayCombine( a, b, false );
 };
+/*global hasOwn, toString */
+
+/**
+ * Assert whether a value is a plain object or not.
+ *
+ * @param {Mixed} obj
+ * @return {boolean}
+ */
+oo.isPlainObject = function ( obj ) {
+       /*jshint eqnull:true, eqeqeq:false */
+
+       // Any object or value whose internal [[Class]] property is not "[object Object]"
+       // Support IE8: Explicitly filter out DOM nodes
+       // Support IE8: Explicitly filter out Window object (needs loose comparison)
+       if ( !obj || toString.call( obj ) !== '[object Object]' || obj.nodeType || ( obj != null && obj == obj.window ) ) {
+               return false;
+       }
+
+       // The try/catch suppresses exceptions thrown when attempting to access
+       // the "constructor" property of certain host objects suich as window.location
+       // in Firefox < 20 (https://bugzilla.mozilla.org/814622)
+       try {
+               if ( obj.constructor &&
+                               !hasOwn.call( obj.constructor.prototype, 'isPrototypeOf' ) ) {
+                       return false;
+               }
+       } catch ( e ) {
+               return false;
+       }
+
+       return true;
+};
 /**
  * @class OO.EventEmitter
  *
@@ -529,11 +546,12 @@ oo.EventEmitter.prototype.on = function ( event, callback, args, context ) {
  * @chainable
  */
 oo.EventEmitter.prototype.once = function ( event, listener ) {
-       var eventEmitter = this;
-       return this.on( event, function listenerWrapper() {
-               eventEmitter.off( event, listenerWrapper );
-               listener.apply( eventEmitter, Array.prototype.slice.call( arguments, 0 ) );
-       } );
+       var eventEmitter = this,
+               listenerWrapper = function () {
+                       eventEmitter.off( event, listenerWrapper );
+                       listener.apply( eventEmitter, Array.prototype.slice.call( arguments, 0 ) );
+               };
+       return this.on( event, listenerWrapper );
 };
 
 /**
@@ -761,7 +779,7 @@ oo.Registry.prototype.lookup = function ( name ) {
  * @constructor
  */
 oo.Factory = function OoFactory() {
-       oo.Factory.super.call( this );
+       oo.Factory.parent.call( this );
 
        // Properties
        this.entries = [];
@@ -801,7 +819,7 @@ oo.Factory.prototype.register = function ( constructor ) {
        }
        this.entries.push( name );
 
-       oo.Factory.super.prototype.register.call( this, name, constructor );
+       oo.Factory.parent.prototype.register.call( this, name, constructor );
 };
 
 /**
diff --git a/resources/src/es5-skip.js b/resources/src/es5-skip.js
new file mode 100644 (file)
index 0000000..d14c64b
--- /dev/null
@@ -0,0 +1,15 @@
+/*!
+ * Skip function for es5-shim module.
+ *
+ * Test for strict mode as a proxy for full ES5 function support (but not syntax)
+ * Per http://kangax.github.io/compat-table/es5/ this is a reasonable short-cut
+ * that still allows this to be as short as possible (there are no function "No"s
+ * for non-"obsolete" real browsers where strict support is available).
+ *
+ * Note that this will cause IE9 users to get the shim (which should be close to
+ * a no-op but will increase page payload).
+ */
+return ( function () {
+       'use strict';
+       return !this;
+}() );
diff --git a/resources/src/jquery.json-deprecate.js b/resources/src/jquery.json-deprecate.js
new file mode 100644 (file)
index 0000000..485d9c0
--- /dev/null
@@ -0,0 +1,6 @@
+( function ( mw, $ ) {
+       mw.log.deprecate( $, 'toJSON', $.toJSON, 'Use JSON.stringify instead (module "json" for polyfill).' );
+       mw.log.deprecate( $, 'evalJSON', $.evalJSON, 'Use JSON.parse instead (module "json" for polyfill).' );
+       mw.log.deprecate( $, 'secureEvalJSON', $.secureEvalJSON, 'Use JSON.parse instead (module "json" for polyfill).' );
+       mw.log.deprecate( $, 'quoteString', $.quoteString, 'Use JSON.parse instead (module "json" for polyfill).' );
+}( mediaWiki, jQuery ) );
index 7a32076..08ed5d9 100644 (file)
  *             Type: Number, Range: 1 - 100, Default: 7
  * delay: Number of ms to wait for the user to stop typing
  *             Type: Number, Range: 0 - 1200, Default: 120
+ * cache: Whether to cache results from a fetch
+ *             Type: Boolean, Default: false
+ * cacheMaxAge: Number of ms to cache results from a fetch
+ *             Type: Number, Range: 1 - Infinity, Default: 60000 (1 minute)
  * submitOnClick: Whether to submit the form containing the textbox when a suggestion is clicked
  *             Type: Boolean, Default: false
  * maxExpandFactor: Maximum suggestions box width relative to the textbox width. If set
@@ -47,6 +51,8 @@
  */
 ( function ( $ ) {
 
+var hasOwn = Object.hasOwnProperty;
+
 $.suggestions = {
        /**
         * Cancel any delayed maybeFetch() call and callback the context so
@@ -90,18 +96,44 @@ $.suggestions = {
         */
        update: function ( context, delayed ) {
                function maybeFetch() {
+                       var val = context.data.$textbox.val(),
+                               cache = context.data.cache,
+                               cacheHit;
+
                        // Only fetch if the value in the textbox changed and is not empty, or if the results were hidden
                        // if the textbox is empty then clear the result div, but leave other settings intouched
-                       if ( context.data.$textbox.val().length === 0 ) {
+                       if ( val.length === 0 ) {
                                $.suggestions.hide( context );
                                context.data.prevText = '';
                        } else if (
-                               context.data.$textbox.val() !== context.data.prevText ||
+                               val !== context.data.prevText ||
                                !context.data.$container.is( ':visible' )
                        ) {
-                               if ( typeof context.config.fetch === 'function' ) {
-                                       context.data.prevText = context.data.$textbox.val();
-                                       context.config.fetch.call( context.data.$textbox, context.data.$textbox.val() );
+                               context.data.prevText = val;
+                               // Try cache first
+                               if ( context.config.cache && hasOwn.call( cache, val ) ) {
+                                       if ( +new Date() - cache[ val ].timestamp < context.config.cacheMaxAge ) {
+                                               context.data.$textbox.suggestions( 'suggestions', cache[ val ].suggestions );
+                                               cacheHit = true;
+                                       } else {
+                                               // Cache expired
+                                               delete cache[ val ];
+                                       }
+                               }
+                               if ( !cacheHit && typeof context.config.fetch === 'function' ) {
+                                       context.config.fetch.call(
+                                               context.data.$textbox,
+                                               val,
+                                               function ( suggestions ) {
+                                                       context.data.$textbox.suggestions( 'suggestions', suggestions );
+                                                       if ( context.config.cache ) {
+                                                               cache[ val ] = {
+                                                                       suggestions: suggestions,
+                                                                       timestamp: +new Date()
+                                                               };
+                                                       }
+                                               }
+                                       );
                                }
                        }
 
@@ -303,13 +335,17 @@ $.suggestions = {
                        case 'delay':
                                context.config[property] = Math.max( 0, Math.min( 1200, value ) );
                                break;
+                       case 'cacheMaxAge':
+                               context.config[property] = Math.max( 1, value );
+                               break;
                        case 'maxExpandFactor':
                                context.config[property] = Math.max( 1, value );
                                break;
+                       case 'cache':
                        case 'submitOnClick':
                        case 'positionFromLeft':
                        case 'highlightInput':
-                               context.config[property] = value ? true : false;
+                               context.config[property] = !!value;
                                break;
                }
        },
@@ -481,6 +517,8 @@ $.fn.suggestions = function () {
                                        suggestions: [],
                                        maxRows: 7,
                                        delay: 120,
+                                       cache: false,
+                                       cacheMaxAge: 60000,
                                        submitOnClick: false,
                                        maxExpandFactor: 3,
                                        expandFrom: 'auto',
@@ -519,6 +557,9 @@ $.fn.suggestions = function () {
                                // Text in textbox when suggestions were last fetched
                                prevText: null,
 
+                               // Cache of fetched suggestions
+                               cache: {},
+
                                // Number of results visible without scrolling
                                visibleResults: 0,
 
diff --git a/resources/src/json-skip.js b/resources/src/json-skip.js
new file mode 100644 (file)
index 0000000..0a1e1c2
--- /dev/null
@@ -0,0 +1,4 @@
+/*!
+ * Skip function for json2.js.
+ */
+return !!( window.JSON && JSON.stringify && JSON.parse );
index 67e2f33..b65a62b 100644 (file)
@@ -61,7 +61,6 @@
 }
 
 .transition(@value) {
-       -webkit-backface-visibility: hidden; // fixes Chrome 1px movement bug
        -webkit-transition: @value;
        -moz-transition: @value;
        -o-transition: @value;
index 1fe0e26..cc72e16 100644 (file)
@@ -30,9 +30,8 @@
                        rcid = mw.util.getParamValue( 'rcid', href );
                        apiRequest = new mw.Api();
 
-                       apiRequest.post( {
+                       apiRequest.postWithToken( 'patrol', {
                                action: 'patrol',
-                               token: mw.user.tokens.get( 'patrolToken' ),
                                rcid: rcid
                        } )
                        .done( function ( data ) {
index 15f53f0..ebd6b92 100644 (file)
  */
 span.reference {
        font-size: smaller;
-       line-height: normal;
+       line-height: 1;
        vertical-align: super;
 }
 
+sup, sub {
+       line-height: 1;
+}
+
 /**
  * Block media items
  */
@@ -66,6 +70,7 @@ figure[typeof*='mw:Image'] {
 
        &.mw-halign-center {
                margin: 0 auto .5em auto;
+               display: table;
                clear: none;
                float: none;
        }
@@ -113,6 +118,10 @@ figure[typeof~='mw:Image/Frame'] > *:first-child > img,
        margin: 4px;
 }
 
+/* Hide the caption for frameless and plain floated images */
+figure[typeof~="mw:Image/Frameless"] > figcaption,
+figure[typeof~="mw:Image"] > figcaption { display: none }
+
 /*
  * Finally, some basic styling for Parsoid render testing.
  * Only Parsoid directly sets .mw-body-content directly on the body, so this
index eb7072c..5860adf 100644 (file)
@@ -130,21 +130,14 @@ div.searchresult {
 .mw-search-formheader div.search-types ul li.current a:hover {
        text-decoration: none;
 }
-.mw-search-formheader div.results-info {
+#mw-search-top-table div.results-info {
        float: right;
        padding: 0.5em;
        padding-right: 0.75em;
+       color: #666;
+       font-size: 95%;
 }
-.mw-search-formheader div.results-info ul {
-       margin: 0 !important;
-       padding: 0 !important;
-       list-style: none !important;
-}
-.mw-search-formheader div.results-info ul li {
-       float: right;
-       margin: 0;
-       padding: 0;
-}
+
 fieldset#mw-searchoptions {
        margin: 0;
        padding: 0.5em 0.75em 0.75em 0.75em !important;
diff --git a/resources/src/mediawiki.special/mediawiki.special.pageLanguage.js b/resources/src/mediawiki.special/mediawiki.special.pageLanguage.js
new file mode 100644 (file)
index 0000000..ba7f734
--- /dev/null
@@ -0,0 +1,9 @@
+( function ( $ ) {
+       $( document ).ready( function () {
+
+               // Select the 'Language select' option if user is trying to select language
+               $( '#mw-pl-languageselector' ).on( 'click', function () {
+                       $( '#mw-pl-options-2' ).prop( 'checked', true );
+               } );
+       } );
+} ( jQuery ) );
index 78b0b33..dce4cd0 100644 (file)
@@ -49,7 +49,6 @@
        // Content styling
        text-align: center;
        font-weight: bold;
-       text-shadow: 0 1px rgba(0, 0, 0, .1);
 
        // Interaction styling
        cursor: pointer;
index ee21932..6c40c26 100644 (file)
 //
 // Markup:
 // <form class="mw-ui-vform">
-//   <div class="mw-ui-vform-div">This is a form example.</div>
-//   <div class="mw-ui-vform-div">
+//   <div class="mw-ui-vform-field">This is a form example.</div>
+//   <div class="mw-ui-vform-field">
 //     <label>Username </label>
 //     <input value="input">
 //   </div>
-//   <div>
+//   <div class="mw-ui-vform-field">
 //     <button class="mw-ui-button mw-ui-constructive">Button in vform</button>
 //   </div>
 // </form>
 
        width: @defaultFormWidth;
 
-       // Immediate divs in a vform are block and spaced-out.
-       // XXX: We shouldn't depend on the tag name here...
-       & > div {
-               display: block;
-               margin: 0 0 15px 0;
-               padding: 0;
-               width: 100%;
-       }
-
        // MW currently doesn't use the type attribute everywhere on inputs.
        input,
        select,
        //   <div class="error">
        //     <ul><li>There are problems with some of your input.</li></ul>
        //   </div>
-       //   <div class="mw-ui-vform-div">
+       //   <div class="mw-ui-vform-field">
        //     <input type="text" value="input" class="mw-ui-input">
        //   </div>
-       //   <div class="mw-ui-vform-div">
+       //   <div class="mw-ui-vform-field">
        //     <select>
        //       <option value="1">Option 1</option>
        //       <option value="2">Option 2</option>
        //     </select>
        //     <span class="error">The value you specified is not a valid option.</span>
        //   </div>
-       //   <div>
+       //   <div class="mw-ui-vform-field">
        //     <button class="mw-ui-button">Button in vform</button>
        //   </div>
        // </form>
        // This specifies styling for individual field validation error messages.
        // Show them below the fields to prevent line break glitches, and leave
        // some space between the field and the error message box.
-       .mw-ui-vform-div .error {
+       .mw-ui-vform-div .error, /* for backwards-compatibility, remove before 1.24 */
+       .mw-ui-vform-field .error {
                display: block;
                margin-top: 5px;
        }
 // Elements
 // --------------------------------------------------------------------------
 
-// Apply this to individual elements to style them.
-// You generally don't need to use this class on divs within an Agora
-// form container such as mw-ui-vform
-// XXX DRY: This repeats earlier styling, use an @include agora-div-styling ?
-// XXX: What is this even for?
-.mw-ui-vform-div {
+// A wrapper for a single form field: the <input> / <select> / <button> element,
+// help text, labels, associated error/warning/success messages, and so on.
+// Elements with this class are generated by HTMLFormField in core MediaWiki.
+//
+// (We use a broad definition of 'field' here: a purely textual information
+// block is also a "field".)
+.mw-ui-vform-div, /* for backwards-compatibility, remove before 1.24 */
+.mw-ui-vform-field {
        display: block;
        margin: 0 0 15px;
        padding: 0;
index 52dbb05..9759f63 100644 (file)
@@ -52,6 +52,7 @@
        border: 1px solid @bgColor;
        border-left: none;
        border-right: none;
+       text-shadow: 0 1px rgba(0, 0, 0, .1);
 
        &:disabled {
                background: @colorGrayLight;
index 62fa410..eda7689 100644 (file)
                                return;
                        } catch ( e ) {}
                        try {
-                               console.log( $.toJSON( data, null, 2 ) );
+                               console.log( JSON.stringify( data, null, 2 ) );
                                return;
                        } catch ( e ) {}
                        mw.log( data );
index 282cf6f..a314dcb 100644 (file)
                ];
                $( searchboxesSelectors.join( ', ' ) )
                        .suggestions( {
-                               fetch: function ( query ) {
-                                       var $textbox = this,
-                                               node = this[0];
+                               fetch: function ( query, response ) {
+                                       var node = this[0];
 
                                        api = api || new mw.Api();
 
                                                namespace: 0,
                                                suggest: ''
                                        } ).done( function ( data ) {
-                                               $textbox.suggestions( 'suggestions', data[1] );
+                                               response( data[ 1 ] );
                                        } ) );
                                },
                                cancel: function () {
                                                return true;
                                        }
                                },
-                               delay: 120,
+                               cache: true,
                                highlightInput: true
                        } )
                        .bind( 'paste cut drop', function () {
index a35670e..1a9569f 100644 (file)
@@ -1,9 +1,5 @@
-*/
-!common/
-!common/*
-!monobook/
-!monobook/*
-!vector/
-!vector/*
-
-*.php
+/*
+!/common/
+!/MonoBook/
+!/Vector/
+!/.gitignore
diff --git a/skins/MonoBook/COPYING b/skins/MonoBook/COPYING
new file mode 100644 (file)
index 0000000..019694a
--- /dev/null
@@ -0,0 +1,342 @@
+== GNU GENERAL PUBLIC LICENSE ==
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+=== Preamble ===
+
+The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ==
+
+'''0.''' This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+'''1.''' You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+'''2.''' You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+       '''a)''' You must cause the modified files to carry prominent notices
+       stating that you changed the files and the date of any change.
+
+       '''b)''' You must cause any work that you distribute or publish, that in
+       whole or in part contains or is derived from the Program or any
+       part thereof, to be licensed as a whole at no charge to all third
+       parties under the terms of this License.
+
+       '''c)''' If the modified program normally reads commands interactively
+       when run, you must cause it, when started running for such
+       interactive use in the most ordinary way, to print or display an
+       announcement including an appropriate copyright notice and a
+       notice that there is no warranty (or else, saying that you provide
+       a warranty) and that users may redistribute the program under
+       these conditions, and telling the user how to view a copy of this
+       License.  (Exception: if the Program itself is interactive but
+       does not normally print such an announcement, your work based on
+       the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+'''3.''' You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+       '''a)''' Accompany it with the complete corresponding machine-readable
+       source code, which must be distributed under the terms of Sections
+       1 and 2 above on a medium customarily used for software interchange; or,
+
+       '''b)''' Accompany it with a written offer, valid for at least three
+       years, to give any third party, for a charge no more than your
+       cost of physically performing source distribution, a complete
+       machine-readable copy of the corresponding source code, to be
+       distributed under the terms of Sections 1 and 2 above on a medium
+       customarily used for software interchange; or,
+
+       '''c)''' Accompany it with the information you received as to the offer
+       to distribute corresponding source code.  (This alternative is
+       allowed only for noncommercial distribution and only if you
+       received the program in object code or executable form with such
+       an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+'''4.''' You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+'''5.''' You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+'''6.''' Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+'''7.''' If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+'''8.''' If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+'''9.''' The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+'''10.''' If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+=== NO WARRANTY ===
+
+'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+       '''END OF TERMS AND CONDITIONS'''
+
+== How to Apply These Terms to Your New Programs ==
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+       <one line to give the program's name and a brief idea of what it does.>
+
+       Copyright (C) <year>  <name of author>
+
+       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
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+       Gnomovision version 69, Copyright (C) year name of author
+       Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+       This is free software, and you are welcome to redistribute it
+       under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+       Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+       `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+       <signature of Ty Coon>, 1 April 1989
+
+       Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
index c363eb1..97c0cd8 100644 (file)
 $wgExtensionCredits['skin'][] = array(
        'path' => __FILE__,
        'name' => 'MonoBook',
+       'namemsg' => 'skinname-monobook',
+       'descriptionmsg' => 'monobook-desc',
        'url' => 'https://www.mediawiki.org/wiki/Skin:MonoBook',
+       'author' => array( 'Gabriel Wicke', '...' ),
+       'license-name' => 'GPLv2+',
 );
 
 // Register files
diff --git a/skins/MonoBook/i18n/aln.json b/skins/MonoBook/i18n/aln.json
new file mode 100644 (file)
index 0000000..b853dde
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bresta"
+               ]
+       },
+       "monobook.css": "/* CSS i vednosun këtu ka me i prekë shfrytëzuesit e dukjes Monobook */",
+       "monobook.js": "/* Çdo JavaScript këtu ka me u ngarkue për shfrytëzuesit që përdorin dukjen MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/an.json b/skins/MonoBook/i18n/an.json
new file mode 100644 (file)
index 0000000..f635897
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Juanpabl"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Monobook */",
+       "monobook.js": "/* O codigo Javascript que se meta aquí será cargau por os usuarios faigan servir l'apariencia MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/ar.json b/skins/MonoBook/i18n/ar.json
new file mode 100644 (file)
index 0000000..05cad21
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Meno25"
+               ]
+       },
+       "skinname-monobook": "مونوبوك",
+       "monobook.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة مونوبوك */",
+       "monobook.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة مونوبوك */"
+}
diff --git a/skins/MonoBook/i18n/arz.json b/skins/MonoBook/i18n/arz.json
new file mode 100644 (file)
index 0000000..a49f003
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Meno25"
+               ]
+       },
+       "skinname-monobook": "مونوبوك",
+       "monobook.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمى واجهة مونوبوك */",
+       "monobook.js": "/* أى جافاسكريبت هنا ح تتحمل لليوزرز اللى بيستعملو واجهة مونوبوك */"
+}
diff --git a/skins/MonoBook/i18n/ast.json b/skins/MonoBook/i18n/ast.json
new file mode 100644 (file)
index 0000000..d007deb
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Xuacu"
+               ]
+       },
+       "monobook.css": "/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Monobook */",
+       "monobook.js": "/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/az.json b/skins/MonoBook/i18n/az.json
new file mode 100644 (file)
index 0000000..55b33d8
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Vago",
+                       "Vugar 1981"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* Burada yerləşən CSS Monobook skin istifadəçilərinə tətbiq olunur */",
+       "monobook.js": "/* Burada MonoBook skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */"
+}
diff --git a/skins/MonoBook/i18n/bcc.json b/skins/MonoBook/i18n/bcc.json
new file mode 100644 (file)
index 0000000..9732382
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mostafadaneshvar"
+               ]
+       },
+       "skinname-monobook": "منوبوک",
+       "monobook.css": "/* CSS که اداننت کابران پوست مونوبوک تاثیر کننت */",
+       "monobook.js": "/* جاوا اسکریپت ادان فقط په کابرانی که چه پوست منوبوک استفاده کننت بار بیت. */"
+}
diff --git a/skins/MonoBook/i18n/bcl.json b/skins/MonoBook/i18n/bcl.json
new file mode 100644 (file)
index 0000000..1ef08f2
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Filipinayzd"
+               ]
+       },
+       "monobook.css": "/* an CSS na pigbugtak digdi makakaapektar sa mga parágamit kan Monobook skin */",
+       "monobook.js": "/* Deprecado; gamiton an [[MediaWiki:common.js]] */"
+}
diff --git a/skins/MonoBook/i18n/be-tarask.json b/skins/MonoBook/i18n/be-tarask.json
new file mode 100644 (file)
index 0000000..7704a41
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "skinname-monobook": "Монакніга"
+}
diff --git a/skins/MonoBook/i18n/be.json b/skins/MonoBook/i18n/be.json
new file mode 100644 (file)
index 0000000..a3a20e5
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Yury Tarasievich"
+               ]
+       },
+       "skinname-monobook": "Манабук",
+       "monobook.css": "/* CSS, упісаны сюды, будзе дзейнічаць на браўзер кожнага чытача з актыўнай світай Monobook */",
+       "monobook.js": "/* Any JavaScript here will be loaded for users using the MonoBook skin */"
+}
diff --git a/skins/MonoBook/i18n/bg.json b/skins/MonoBook/i18n/bg.json
new file mode 100644 (file)
index 0000000..f3e91dd
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "skinname-monobook": "Монобук",
+       "monobook.css": "/* Чрез редактиране на този файл можете да промените облика Монобук */",
+       "monobook.js": "/* Остаряла страница; използвайте [[MediaWiki:Common.js]] */"
+}
diff --git a/skins/MonoBook/i18n/bn.json b/skins/MonoBook/i18n/bn.json
new file mode 100644 (file)
index 0000000..d6a4112
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Aftab1995"
+               ]
+       },
+       "skinname-monobook": "মনোবুক"
+}
diff --git a/skins/MonoBook/i18n/br.json b/skins/MonoBook/i18n/br.json
new file mode 100644 (file)
index 0000000..2ba630f
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Fulup"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* Talvezout a raio ar CSS lakaet amañ evit implijerien ar gwiskadur Monobook */",
+       "monobook.js": "/* Kement JavaScript amañ a vo karget evit an implijerien a ra gant ar gwiskadur MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/bs.json b/skins/MonoBook/i18n/bs.json
new file mode 100644 (file)
index 0000000..ddecc4c
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "CERminator",
+                       "Kal-El"
+               ]
+       },
+       "skinname-monobook": "MonoKnjiga",
+       "monobook.css": "/* CSS umetnut ovdje uticat će na korisnike koji koriste Monobook skin */",
+       "monobook.js": "/* Bilo koja JavaScript će biti učitana za sve korisnike koji koriste MonoBook skin */"
+}
diff --git a/skins/MonoBook/i18n/ca.json b/skins/MonoBook/i18n/ca.json
new file mode 100644 (file)
index 0000000..8674693
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Martorell"
+               ]
+       },
+       "monobook.css": "/* Editeu aquest fitxer per personalitzar l'aparença del monobook per a tot el lloc sencer */"
+}
diff --git a/skins/MonoBook/i18n/ce.json b/skins/MonoBook/i18n/ce.json
new file mode 100644 (file)
index 0000000..61515a8
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Умар"
+               ]
+       },
+       "monobook.css": "/* Чуйиллина йолу кхузе CSS хир ю лелош масхьа Monobook чохь */",
+       "monobook.js": "/* Кхузе чу язийна йолу JavaScript код, чу ера ю, массо MonoBook хатl лелош болу декъашхошна */"
+}
diff --git a/skins/MonoBook/i18n/ckb.json b/skins/MonoBook/i18n/ckb.json
new file mode 100644 (file)
index 0000000..2c42db2
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "skinname-monobook": "مۆنۆ"
+}
diff --git a/skins/MonoBook/i18n/crh-cyrl.json b/skins/MonoBook/i18n/crh-cyrl.json
new file mode 100644 (file)
index 0000000..b11125e
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* monobook темасынынъ аярларыны (настройкаларыны) денъиштирмек ичюн бу ерини денъиштиринъиз. Бутюн сайтта тесирли олур. */"
+}
diff --git a/skins/MonoBook/i18n/crh-latn.json b/skins/MonoBook/i18n/crh-latn.json
new file mode 100644 (file)
index 0000000..c8f2540
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* monobook temasınıñ ayarlarını (nastroykalarını) deñiştirmek içün bu yerini deñiştiriñiz. Bütün saytta tesirli olur. */"
+}
diff --git a/skins/MonoBook/i18n/cs.json b/skins/MonoBook/i18n/cs.json
new file mode 100644 (file)
index 0000000..62fcddd
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Danny B.",
+                       "Li-sung",
+                       "Mormegil"
+               ]
+       },
+       "monobook-desc": "Klasický vzhled MediaWiki od roku 2004, pojmenovaný po černobílé fotografii knihy v pozadí stránky",
+       "monobook.css": "/* Zde uvedené CSS bude ovlivňovat pouze styl „Monobook“ */",
+       "monobook.js": "/* JavaScript pro uživatele používající vzhled MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/da.json b/skins/MonoBook/i18n/da.json
new file mode 100644 (file)
index 0000000..e20dbb6
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Peter Alberti"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/** CSS inkluderet her vil være aktivt for brugere af Monobook-temaet . */",
+       "monobook.js": "/* JavaScript i denne fil vil indlæses for brugere af udseendet MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/de.json b/skins/MonoBook/i18n/de.json
new file mode 100644 (file)
index 0000000..047b91d
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Geitost",
+                       "Metalhead64"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook-desc": "Ergänzt die klassische MediaWiki-Benutzeroberfläche seit 2004, benannt nach dem Schwarzweißfoto eines Buches im Seitenhintergrund",
+       "monobook.css": "/* Das folgende CSS wird für Benutzer der MonoBook-Benutzeroberfläche geladen */",
+       "monobook.js": "/* Das folgende JavaScript wird für Benutzer der Monobook-Benutzeroberfläche geladen. */"
+}
diff --git a/skins/MonoBook/i18n/diq.json b/skins/MonoBook/i18n/diq.json
new file mode 100644 (file)
index 0000000..ca9696d
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Erdemaslancan"
+               ]
+       },
+       "skinname-monobook": "MonoBook"
+}
diff --git a/skins/MonoBook/i18n/dsb.json b/skins/MonoBook/i18n/dsb.json
new file mode 100644 (file)
index 0000000..6731b7b
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Michawiki",
+                       "Nepl1"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* How zaměstnjony CSS wustatkujo se na wužywarje monobook-šata */",
+       "monobook.js": "/* Slědujucy JavaScript zacytajo se za wužywarjow, kótarež skin MonoBook wužywaju */"
+}
diff --git a/skins/MonoBook/i18n/el.json b/skins/MonoBook/i18n/el.json
new file mode 100644 (file)
index 0000000..1e7f7b8
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Dead3y3"
+               ]
+       },
+       "monobook.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Monobook skin */",
+       "monobook.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το MonoBook skin */"
+}
index 0b96428..0b27e6b 100644 (file)
@@ -3,6 +3,7 @@
                "authors": []
        },
        "skinname-monobook": "MonoBook",
+       "monobook-desc": "The classic MediaWiki skin since 2004, named after the black-and-white photo of a book in the page background",
        "monobook.css": "/* CSS placed here will affect users of the MonoBook skin */",
        "monobook.js": "/* Any JavaScript here will be loaded for users using the MonoBook skin */"
 }
diff --git a/skins/MonoBook/i18n/eo.json b/skins/MonoBook/i18n/eo.json
new file mode 100644 (file)
index 0000000..170286a
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Objectivesea"
+               ]
+       },
+       "skinname-monobook": "Librejo",
+       "monobook.css": "/* La jena CSS influos la paĝaspekton por uzantoj de la Libreja temo. */",
+       "monobook.js": "/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Libreja temo. */"
+}
diff --git a/skins/MonoBook/i18n/es.json b/skins/MonoBook/i18n/es.json
new file mode 100644 (file)
index 0000000..9792754
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sanbec",
+                       "Vivaelcelta"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* El CSS colocado en esta página afectará a los usuarios que usen la apariencia \"MonoBook\" */",
+       "monobook.js": "/* El código JavaScript que se ponga aquí será cargado por los usuarios de la apariencia MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/et.json b/skins/MonoBook/i18n/et.json
new file mode 100644 (file)
index 0000000..591acff
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "skinname-monobook": "MonoBook"
+}
diff --git a/skins/MonoBook/i18n/eu.json b/skins/MonoBook/i18n/eu.json
new file mode 100644 (file)
index 0000000..a5f8c39
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "monobook.css": "/* Hemen idatzitako CSS kodeak Monobook itxuran bakarrik izango du eragina */"
+}
diff --git a/skins/MonoBook/i18n/ext.json b/skins/MonoBook/i18n/ext.json
new file mode 100644 (file)
index 0000000..70d9567
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "monobook.js": "/* Antigu; gasta [[MediaWiki:common.js]] */"
+}
diff --git a/skins/MonoBook/i18n/fa.json b/skins/MonoBook/i18n/fa.json
new file mode 100644 (file)
index 0000000..8e278d3
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       "skinname-monobook": "مونوبوک",
+       "monobook.css": "/* دستورات این بخش کاربرانی را که از پوستهٔ مونوبوک استفاده کنند تحت تاثیر قرار می‌دهند. */"
+}
diff --git a/skins/MonoBook/i18n/fi.json b/skins/MonoBook/i18n/fi.json
new file mode 100644 (file)
index 0000000..f516bdd
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Crt"
+               ]
+       },
+       "skinname-monobook": "Monobook",
+       "monobook.css": "/* Tämä sivu sisältää Monobook-ulkoasua muuttavia tyylejä. */",
+       "monobook.js": "/* Tämän sivun JavaScript-koodi liitetään Monobook-tyyliin */"
+}
diff --git a/skins/MonoBook/i18n/fr.json b/skins/MonoBook/i18n/fr.json
new file mode 100644 (file)
index 0000000..cedbebb
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gomoko",
+                       "Verdy p"
+               ]
+       },
+       "skinname-monobook": "Monobook",
+       "monobook-desc": "L’habillage classique de MédiaWiki depuis 2004, nommé d’après la photo en noir et blanc d’un livre dans l’arrière-plan de la page",
+       "monobook.css": "/* Le CSS placé ici affectera les utilisateurs de l’habillage Monobook. */",
+       "monobook.js": "/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage MonoBook uniquement. */"
+}
diff --git a/skins/MonoBook/i18n/frp.json b/skins/MonoBook/i18n/frp.json
new file mode 100644 (file)
index 0000000..06a705a
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "ChrisPtDe"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « MonoBook ». */",
+       "monobook.js": "/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « MonoBook ». */"
+}
diff --git a/skins/MonoBook/i18n/fur.json b/skins/MonoBook/i18n/fur.json
new file mode 100644 (file)
index 0000000..87c1f2c
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "monobook.css": "/* modifiche chest file par personalizâ la skin monobook par dut il sît */"
+}
diff --git a/skins/MonoBook/i18n/ga.json b/skins/MonoBook/i18n/ga.json
new file mode 100644 (file)
index 0000000..695a952
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* athraigh an comhad seo chun an craiceann MonoBook a athrú don suíomh ar fad */"
+}
diff --git a/skins/MonoBook/i18n/gan-hans.json b/skins/MonoBook/i18n/gan-hans.json
new file mode 100644 (file)
index 0000000..bed9f08
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       "monobook.css": "/* 个首𠮶 CSS 会碍到正用Monobook皮肤𠮶用户 */",
+       "monobook.js": "/* 伓再使用;请用[[MediaWiki:common.js]] */"
+}
diff --git a/skins/MonoBook/i18n/gan-hant.json b/skins/MonoBook/i18n/gan-hant.json
new file mode 100644 (file)
index 0000000..4c98663
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       "monobook.css": "/* 箇首嗰 CSS 會礙到正用Monobook皮膚嗰用戶 */",
+       "monobook.js": "/* 伓再使用;請用[[MediaWiki:common.js]] */"
+}
diff --git a/skins/MonoBook/i18n/gd.json b/skins/MonoBook/i18n/gd.json
new file mode 100644 (file)
index 0000000..f5bd154
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "GunChleoc"
+               ]
+       },
+       "monobook-desc": "Craiceann MediaWiki clasaigeach o 2004 a chaidh ainmeachadh a-rèir dealbh de leabhar ann an dubh 's geal air cùlaibh nan duilleagan"
+}
diff --git a/skins/MonoBook/i18n/gl.json b/skins/MonoBook/i18n/gl.json
new file mode 100644 (file)
index 0000000..2e61ad3
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Toliño",
+                       "Xosé"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* O CSS que se coloque aquí afectará a quen use a aparencia Monobook */",
+       "monobook.js": "/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/hak.json b/skins/MonoBook/i18n/hak.json
new file mode 100644 (file)
index 0000000..3253509
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Hakka"
+               ]
+       },
+       "monobook.css": "/* Chhṳ́-chhu ke CSS chiông-voi yáng-hióng sṳ́-yung Monobook mien-pán ke yung-fu */",
+       "monobook.js": "/* Yí-kîn put-chai sṳ́-yung; chhiáng-yung [[MediaWiki:common.js]] */"
+}
diff --git a/skins/MonoBook/i18n/he.json b/skins/MonoBook/i18n/he.json
new file mode 100644 (file)
index 0000000..89bfb40
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Rotemliss"
+               ]
+       },
+       "skinname-monobook": "מונובוק",
+       "monobook.css": "/* הסגנונות הנכתבים כאן ישפיעו על העיצוב MonoBook בלבד */",
+       "monobook.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Monobook */"
+}
diff --git a/skins/MonoBook/i18n/hi.json b/skins/MonoBook/i18n/hi.json
new file mode 100644 (file)
index 0000000..33e527b
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kaustubh",
+                       "Siddhartha Ghai"
+               ]
+       },
+       "monobook.css": "/* यहां रखी गई css मोनोबुक त्वचा का इस्तेमाल करने वाले सभी सदस्योंपर असर करेगी */",
+       "monobook.js": "/* यहाँ पर दी गई जावास्क्रिप्ट मोनोबुक त्वचा का प्रयोग कर रहे सदस्यों के लिए लोड होगी */"
+}
diff --git a/skins/MonoBook/i18n/hr.json b/skins/MonoBook/i18n/hr.json
new file mode 100644 (file)
index 0000000..a56acbd
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/** Ovdje idu izmjene monobook stylesheeta */",
+       "monobook.js": "/* Ne rabi se više; molimo rabite [[MediaWiki:common.js]] */"
+}
diff --git a/skins/MonoBook/i18n/hsb.json b/skins/MonoBook/i18n/hsb.json
new file mode 100644 (file)
index 0000000..2ac24c7
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Michawiki"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* CSS wobdźěłać, zo by so skin „monobook” za wšěčh wužiwarjow tutoho skina priměrił */",
+       "monobook.js": "/* Slědowacy JavaScript začita so za wužiwarjow, kotřiž šat MonoBook wužiwaja */"
+}
diff --git a/skins/MonoBook/i18n/hu.json b/skins/MonoBook/i18n/hu.json
new file mode 100644 (file)
index 0000000..07e3a10
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Dani"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* Az ide elhelyezett CSS hatással lesz a Monobook felület használóira */",
+       "monobook.js": "/* A Monobook felületet használó szerkesztők számára betöltendő JavaScriptek */"
+}
diff --git a/skins/MonoBook/i18n/hy.json b/skins/MonoBook/i18n/hy.json
new file mode 100644 (file)
index 0000000..db1d72e
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Teak"
+               ]
+       },
+       "skinname-monobook": "ՄիաԳիրք",
+       "monobook.css": "/* Այստեղ տեղադրված CSS կոդը կկիրառվի Monobook տեսքի վրա*/",
+       "monobook.js": "/* Հնացած է. օգտագործեք [[MediaWiki:common.js]] */"
+}
diff --git a/skins/MonoBook/i18n/ia.json b/skins/MonoBook/i18n/ia.json
new file mode 100644 (file)
index 0000000..39a703c
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "McDutchie"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook-desc": "Le apparentia classic de MediaWiki depost 2004, nominate assi pro le imagine in nigro e blanco (\"mono\") de un libro (\"book\") in le fundo del pagina.",
+       "monobook.css": "/* Le CSS placiate hic afficera le usatores del apparentia MonoBook */",
+       "monobook.js": "/* Omne JavaScript hic se executara pro le usatores del apparentia MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/id.json b/skins/MonoBook/i18n/id.json
new file mode 100644 (file)
index 0000000..83ce352
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Iwan Novirion",
+                       "Rex"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* CSS yang ada di sini akan diterapkan pada kulit Monobook. */",
+       "monobook.js": "/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/is.json b/skins/MonoBook/i18n/is.json
new file mode 100644 (file)
index 0000000..1539ae1
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "לערי ריינהארט"
+               ]
+       },
+       "skinname-monobook": "EinBók",
+       "monobook.css": "/* Það sem sett er hingað er bætt við Monobook stilsniðið fyrir allan vefinn */"
+}
diff --git a/skins/MonoBook/i18n/it.json b/skins/MonoBook/i18n/it.json
new file mode 100644 (file)
index 0000000..ba87cd9
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Beta16",
+                       "Darth Kule"
+               ]
+       },
+       "monobook-desc": "La skin classica di MediaWiki dal 2004, prende il nome dall'immagine in bianco e nero del libro usata come sfondo della pagina",
+       "monobook.css": "/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Monobook */",
+       "monobook.js": "/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/ja.json b/skins/MonoBook/i18n/ja.json
new file mode 100644 (file)
index 0000000..dddc9f8
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Fryed-peach",
+                       "青子守歌"
+               ]
+       },
+       "skinname-monobook": "モノブック",
+       "monobook.css": "/* ここに記述したCSSはモノブック外装の利用者に影響します */",
+       "monobook.js": "/* ここにあるすべてのJavaScriptは、モノブック外装を使用している利用者に対して読み込まれます */"
+}
diff --git a/skins/MonoBook/i18n/ka.json b/skins/MonoBook/i18n/ka.json
new file mode 100644 (file)
index 0000000..0b16b54
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Alsandro",
+                       "David1010"
+               ]
+       },
+       "skinname-monobook": "მონობუკი",
+       "monobook.css": "/* აქ ჩასმული CSS გავლენას იქონიებს Monobook ინტერფეისის მომხმარებლებზე */"
+}
diff --git a/skins/MonoBook/i18n/kk-arab.json b/skins/MonoBook/i18n/kk-arab.json
new file mode 100644 (file)
index 0000000..d37e014
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "skinname-monobook": "دارا كىتاپ (monobook)",
+       "monobook.css": "/* مىندا ورنالاستىرىلعان CSS تەك «دارا كىتاپ» (monobook) مانەرىن پايدالانۋشىلارىنا ىقپال ەتەدى */",
+       "monobook.js": "/* مىنداعى JavaScript تەك «دارا كىتاپ» (monobook) مانەرىن پايدالانۋشىلار ٴۇشىن جەگىلەدى */"
+}
diff --git a/skins/MonoBook/i18n/kk-cyrl.json b/skins/MonoBook/i18n/kk-cyrl.json
new file mode 100644 (file)
index 0000000..c964423
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Arystanbek"
+               ]
+       },
+       "skinname-monobook": "Жеке кітап (monobook)",
+       "monobook.css": "/* Мында орналастырылған CSS тек «Дара кітап» (monobook) мәнерін пайдаланушыларына ықпал етеді */",
+       "monobook.js": "/* Мындағы JavaScript тек «Дара кітап» (monobook) мәнерін пайдаланушылар үшін жегіледі */"
+}
diff --git a/skins/MonoBook/i18n/kk-latn.json b/skins/MonoBook/i18n/kk-latn.json
new file mode 100644 (file)
index 0000000..1bc6f64
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "skinname-monobook": "Dara kitap (monobook)",
+       "monobook.css": "/* Mında ornalastırılğan CSS tek «Dara kitap» (monobook) mänerin paýdalanwşılarına ıqpal etedi */",
+       "monobook.js": "/* Mındağı JavaScript tek «Dara kitap» (monobook) mänerin paýdalanwşılar üşin jegiledi */"
+}
diff --git a/skins/MonoBook/i18n/km.json b/skins/MonoBook/i18n/km.json
new file mode 100644 (file)
index 0000000..162e5a8
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "វ័ណថារិទ្ធ"
+               ]
+       },
+       "skinname-monobook": "សៀវភៅឯក",
+       "monobook.css": "/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Monobook */"
+}
diff --git a/skins/MonoBook/i18n/ko.json b/skins/MonoBook/i18n/ko.json
new file mode 100644 (file)
index 0000000..08886f4
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "아라"
+               ]
+       },
+       "skinname-monobook": "모노북",
+       "monobook-desc": "문서 배경에서 책의 흑백 사진을 이른, 2004년 이후의 고전 미디어위키 스킨",
+       "monobook.css": "/* 이 CSS 설정은 모노북 스킨을 사용하는 사용자에게 적용됩니다 */",
+       "monobook.js": "/* 이 자바스크립트 설정은 모노북 스킨을 사용하는 사용자에게 적용됩니다 */"
+}
diff --git a/skins/MonoBook/i18n/krc.json b/skins/MonoBook/i18n/krc.json
new file mode 100644 (file)
index 0000000..2ec1410
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Къарачайлы"
+               ]
+       },
+       "skinname-monobook": "Моно-китаб"
+}
diff --git a/skins/MonoBook/i18n/ksh.json b/skins/MonoBook/i18n/ksh.json
new file mode 100644 (file)
index 0000000..6c8c810
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Purodha"
+               ]
+       },
+       "skinname-monobook": "MonoBoch",
+       "monobook.css": "/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Monobooch“ */",
+       "monobook.js": "/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch \"Monnobooch\" jescheck */"
+}
diff --git a/skins/MonoBook/i18n/ku-latn.json b/skins/MonoBook/i18n/ku-latn.json
new file mode 100644 (file)
index 0000000..7fb824a
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Krinkle"
+               ]
+       },
+       "monobook.css": "/* CSS placed here will affect users of the Monobook skin */"
+}
diff --git a/skins/MonoBook/i18n/lb.json b/skins/MonoBook/i18n/lb.json
new file mode 100644 (file)
index 0000000..b19d0a0
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* Dës CSS huet nëmmen Afloss op de Skin ''Monobook''  */"
+}
diff --git a/skins/MonoBook/i18n/lt.json b/skins/MonoBook/i18n/lt.json
new file mode 100644 (file)
index 0000000..82ba416
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Garas"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* Čia įdėtas CSS bus rodomas Monobook išvaizdos naudotojams */",
+       "monobook.js": "/* Šis JavaScript bus įkeltas tik „MonoBook“ išvaizdos naudotojams. */"
+}
diff --git a/skins/MonoBook/i18n/lzh.json b/skins/MonoBook/i18n/lzh.json
new file mode 100644 (file)
index 0000000..fd50ed7
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "skinname-monobook": "單書",
+       "monobook.css": "/* 此之 CSS 用於單書面之簿也 */",
+       "monobook.js": "/* 此之JavaScript將載於用單書面之簿 */"
+}
diff --git a/skins/MonoBook/i18n/mg.json b/skins/MonoBook/i18n/mg.json
new file mode 100644 (file)
index 0000000..ed7db66
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "monobook.css": "/* Ovay ity rakitra ity raha hampiasa takilan'angaly (stylesheet) anao manokana amin'ny wiki iray manontolo */"
+}
diff --git a/skins/MonoBook/i18n/min.json b/skins/MonoBook/i18n/min.json
new file mode 100644 (file)
index 0000000..2eb9001
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Iwan Novirion"
+               ]
+       },
+       "skinname-monobook": "MonoBook"
+}
diff --git a/skins/MonoBook/i18n/mk.json b/skins/MonoBook/i18n/mk.json
new file mode 100644 (file)
index 0000000..be8e280
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bjankuloski06"
+               ]
+       },
+       "skinname-monobook": "Монобук",
+       "monobook-desc": "Класичното руво на МедијаВики од 2004 г., наречена по црнобелата слика на книга во позадината",
+       "monobook.css": "/* Тука поставениот CSS ќе се применува врз корисниците на рувото „Монобук“ */",
+       "monobook.js": "/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Монобук“ */"
+}
diff --git a/skins/MonoBook/i18n/ml.json b/skins/MonoBook/i18n/ml.json
new file mode 100644 (file)
index 0000000..606cf6c
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Praveenp"
+               ]
+       },
+       "skinname-monobook": "മോണോബുക്ക്",
+       "monobook.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. മോണോബുക്ക് ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */",
+       "monobook.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് മോണോബുക്ക് ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */"
+}
diff --git a/skins/MonoBook/i18n/mr.json b/skins/MonoBook/i18n/mr.json
new file mode 100644 (file)
index 0000000..0700112
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "skinname-monobook": "मोनोबुक"
+}
diff --git a/skins/MonoBook/i18n/ms.json b/skins/MonoBook/i18n/ms.json
new file mode 100644 (file)
index 0000000..fa975fe
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Anakmalaysia"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Monobook */"
+}
diff --git a/skins/MonoBook/i18n/mt.json b/skins/MonoBook/i18n/mt.json
new file mode 100644 (file)
index 0000000..3d4a9b0
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Giangian15"
+               ]
+       },
+       "skinname-monobook": "Monobook",
+       "monobook.css": "/* CSS li tpoġġa hawnhekk se jaffetwa dawk l-utenti li jagħmlu użu mill-iskin ''Monobook'' */",
+       "monobook.js": "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''Monobook'' */"
+}
diff --git a/skins/MonoBook/i18n/mwl.json b/skins/MonoBook/i18n/mwl.json
new file mode 100644 (file)
index 0000000..533e78a
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "skinname-monobook": "Lhibro"
+}
diff --git a/skins/MonoBook/i18n/nb.json b/skins/MonoBook/i18n/nb.json
new file mode 100644 (file)
index 0000000..0318b17
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "skinname-monobook": "Monobook",
+       "monobook.css": "/* CSS i denne fila vil gjelde alle som bruker drakta Monobook */",
+       "monobook.js": "/* Javascript i denne fila vil gjelde for brukere av drakta Monobook */"
+}
diff --git a/skins/MonoBook/i18n/nds-nl.json b/skins/MonoBook/i18n/nds-nl.json
new file mode 100644 (file)
index 0000000..38e52ec
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Servien"
+               ]
+       },
+       "skinname-monobook": "Monobook"
+}
diff --git a/skins/MonoBook/i18n/nds.json b/skins/MonoBook/i18n/nds.json
new file mode 100644 (file)
index 0000000..dddb393
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "monobook.css": "/* disse Datei ännern üm de Monobook-Stilvörlaag för de ganze Siet antopassen */"
+}
diff --git a/skins/MonoBook/i18n/ne.json b/skins/MonoBook/i18n/ne.json
new file mode 100644 (file)
index 0000000..04516dd
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "सरोज कुमार ढकाल"
+               ]
+       },
+       "skinname-monobook": "मोनोबुक",
+       "monobook.css": "/* यहाँ राखिएको CSS ले मोनोबुक स्किनको प्रयोगकर्ताहरुलाई प्रभावित गर्ने छ  */"
+}
diff --git a/skins/MonoBook/i18n/new.json b/skins/MonoBook/i18n/new.json
new file mode 100644 (file)
index 0000000..a16deba
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Eukesh"
+               ]
+       },
+       "monobook.css": "/* थन तःगु CSS नं मोनोबुक स्किनया छ्य्‌लामितेत असर याइ */"
+}
diff --git a/skins/MonoBook/i18n/nl.json b/skins/MonoBook/i18n/nl.json
new file mode 100644 (file)
index 0000000..89b72e4
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Siebrand"
+               ]
+       },
+       "skinname-monobook": "Monobook",
+       "monobook.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Monobook */",
+       "monobook.js": "/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Monobook gebruiken */"
+}
diff --git a/skins/MonoBook/i18n/nn.json b/skins/MonoBook/i18n/nn.json
new file mode 100644 (file)
index 0000000..2655c70
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Eirik",
+                       "Frokor",
+                       "Njardarlogar"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* CSS-tekst som vert plassert her, endrar utsjånaden til sidedrakta Monobook */",
+       "monobook.js": "/* Javascript i denne fila vil gjelde for brukarar av drakta Monobook */"
+}
diff --git a/skins/MonoBook/i18n/nv.json b/skins/MonoBook/i18n/nv.json
new file mode 100644 (file)
index 0000000..ede8a6d
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "skinname-monobook": "NaaltsoosŁáa'ígíí"
+}
diff --git a/skins/MonoBook/i18n/oc.json b/skins/MonoBook/i18n/oc.json
new file mode 100644 (file)
index 0000000..7c1e1f8
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Cedric31"
+               ]
+       },
+       "skinname-monobook": "Monobook",
+       "monobook.css": "/* Lo CSS plaçat aicí afectarà los utilizaires del skin Monobook */",
+       "monobook.js": "/* Tot JavaScript aicí serà cargat amb las paginas accedidas pels utilizaires de l’abilhatge MonoBook unicament. */"
+}
diff --git a/skins/MonoBook/i18n/os.json b/skins/MonoBook/i18n/os.json
new file mode 100644 (file)
index 0000000..86efc7f
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "skinname-monobook": "Моно-чиныг"
+}
diff --git a/skins/MonoBook/i18n/pa.json b/skins/MonoBook/i18n/pa.json
new file mode 100644 (file)
index 0000000..f9e0833
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "skinname-monobook": "ਮੋਨੋਬੁੱਕ"
+}
diff --git a/skins/MonoBook/i18n/pam.json b/skins/MonoBook/i18n/pam.json
new file mode 100644 (file)
index 0000000..8b31a7b
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "monobook.css": "/* CSS a mikabit keni miapectuan la reng gagamit king Monobook a pabalat */"
+}
diff --git a/skins/MonoBook/i18n/pdt.json b/skins/MonoBook/i18n/pdt.json
new file mode 100644 (file)
index 0000000..428d91c
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Wikipeeta"
+               ]
+       },
+       "monobook.css": "/* CSS opp dise Sted wirtjt opp daut Monobook-Skin */",
+       "monobook.js": "/* Daut neachste JavaScript woat fe Brucka mett Monobook-Skin jelode */"
+}
diff --git a/skins/MonoBook/i18n/pl.json b/skins/MonoBook/i18n/pl.json
new file mode 100644 (file)
index 0000000..0f3b618
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sp5uhe"
+               ]
+       },
+       "skinname-monobook": "Książka",
+       "monobook.css": "/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Książka */",
+       "monobook.js": "/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Książka */"
+}
diff --git a/skins/MonoBook/i18n/pms.json b/skins/MonoBook/i18n/pms.json
new file mode 100644 (file)
index 0000000..8910d4c
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       "monobook.css": "/* cangé st'archivi-sì për modifiché la formatassion dël sit antregh */",
+       "monobook.js": "/* Ës messagi-sì as dovrìa pa pì dovrelo; a sò pòst ch'a dòvra [[MediaWiki:common.js]] */"
+}
diff --git a/skins/MonoBook/i18n/ps.json b/skins/MonoBook/i18n/ps.json
new file mode 100644 (file)
index 0000000..d7ee132
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "skinname-monobook": "مونوبوک"
+}
diff --git a/skins/MonoBook/i18n/pt-br.json b/skins/MonoBook/i18n/pt-br.json
new file mode 100644 (file)
index 0000000..b8f05f4
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* o código CSS colocado aqui terá efeito nos usuários do tema Monobook */",
+       "monobook.js": "/* Qualquer JavaScript aqui colocado afetará os usuários do skin MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/pt.json b/skins/MonoBook/i18n/pt.json
new file mode 100644 (file)
index 0000000..0425b83
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Hamilton Abreu",
+                       "Fúlvio"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook-desc": "A clássica skin do MediaWiki desde 2004, tendo este nome devido a uma imagem em preto-e-branco de um livro no plano de fundo da página",
+       "monobook.css": "/* Código CSS colocado aqui afectará os utilizadores do tema Monobook */",
+       "monobook.js": "/* Código Javascript colocado aqui será carregado para utilizadores do tema Monobook */"
+}
index 7f3a38d..5056ddb 100644 (file)
@@ -1,8 +1,13 @@
 {
        "@metadata": {
-               "authors": []
+               "authors": [
+                       "Meno25",
+                       "Umherirrender",
+                       "Matma Rex"
+               ]
        },
        "skinname-monobook": "{{optional}}",
-       "monobook.css": "{{optional}}\nCSS applied to users using Monobook skin.",
-       "monobook.js": "{{optional}}\nJS for users using Monobook skin."
+       "monobook-desc": "{{desc|what=skin|name=MonoBook|url=https://www.mediawiki.org/wiki/Skin:MonoBook}}",
+       "monobook.css": "{{optional}}\nCSS applied to users using MonoBook skin.",
+       "monobook.js": "{{optional}}\nJS for users using MonoBook skin."
 }
diff --git a/skins/MonoBook/i18n/qu.json b/skins/MonoBook/i18n/qu.json
new file mode 100644 (file)
index 0000000..2fdb43c
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "AlimanRuna"
+               ]
+       },
+       "monobook.css": "/* Kayman churasqa CSS nisqaqa Monobook qaratam hukchanqa tukuy internet tiyanapaq */",
+       "monobook.js": "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas MonoBook nisqata llamk'achiq ruraqkunapaq chaqnasqa kanqa */"
+}
diff --git a/skins/MonoBook/i18n/rm.json b/skins/MonoBook/i18n/rm.json
new file mode 100644 (file)
index 0000000..7eb17f7
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gion-andri"
+               ]
+       },
+       "monobook.css": "/* editescha quest file per adattar il skin momobook per l'entira pagina */",
+       "monobook.js": ""
+}
diff --git a/skins/MonoBook/i18n/ro.json b/skins/MonoBook/i18n/ro.json
new file mode 100644 (file)
index 0000000..2232372
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Firilacroco"
+               ]
+       },
+       "skinname-monobook": "Monobook",
+       "monobook.css": "/* modificați acest fișier pentru a adapta înfățișarea monobook-ului pentru tot situl*/"
+}
diff --git a/skins/MonoBook/i18n/roa-tara.json b/skins/MonoBook/i18n/roa-tara.json
new file mode 100644 (file)
index 0000000..d7b52b0
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Joetaras"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Monobook */",
+       "monobook.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/ru.json b/skins/MonoBook/i18n/ru.json
new file mode 100644 (file)
index 0000000..13c2ac2
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "AlexSm",
+                       "Kaganer"
+               ]
+       },
+       "monobook.css": "/* Размещённый здесь CSS будет применяться к теме оформления Monobook */",
+       "monobook.js": "/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/sa.json b/skins/MonoBook/i18n/sa.json
new file mode 100644 (file)
index 0000000..5f3f966
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "skinname-monobook": "पुस्तक"
+}
diff --git a/skins/MonoBook/i18n/sah.json b/skins/MonoBook/i18n/sah.json
new file mode 100644 (file)
index 0000000..5f3cbfc
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "HalanTul"
+               ]
+       },
+       "monobook.css": "/* Манна оҥоһуллубут CSS Monobook диэн скиҥҥа туһаныллыа */",
+       "monobook.js": "/* Эргэрбит; маны туһан:[[MediaWiki:common.js]] */"
+}
diff --git a/skins/MonoBook/i18n/scn.json b/skins/MonoBook/i18n/scn.json
new file mode 100644 (file)
index 0000000..cba6acf
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Santu",
+                       "Sarvaturi",
+                       "Tonyfroio"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* Li stili CSS nziriti ccà s'àpplicanu a l'utenti chi usanu la skin Monobook */",
+       "monobook.js": "/* Lu còdici JavaScript nzirutu ccà veni carricatu di l'utenti c'ùsanu la skin MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/si.json b/skins/MonoBook/i18n/si.json
new file mode 100644 (file)
index 0000000..89a6028
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "නන්දිමිතුරු"
+               ]
+       },
+       "monobook.css": "/* මෙහි CSS  බහාලීම ඒකායන ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */",
+       "monobook.js": "/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් ඒකායන ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */"
+}
diff --git a/skins/MonoBook/i18n/sk.json b/skins/MonoBook/i18n/sk.json
new file mode 100644 (file)
index 0000000..8865e10
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Helix84",
+                       "Rudko"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Monobook */",
+       "monobook.js": "/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Monobook */"
+}
diff --git a/skins/MonoBook/i18n/sq.json b/skins/MonoBook/i18n/sq.json
new file mode 100644 (file)
index 0000000..2a74455
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Dori"
+               ]
+       },
+       "monobook.css": "/* redaktoni këtë faqe për të përshtatur pamjen Monobook për tëra faqet tuaja */"
+}
diff --git a/skins/MonoBook/i18n/sr-ec.json b/skins/MonoBook/i18n/sr-ec.json
new file mode 100644 (file)
index 0000000..0304c03
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Rancher"
+               ]
+       },
+       "skinname-monobook": "Монобук",
+       "monobook.css": "/* CSS постављен овде ће утицати на све кориснике теме „Монобук“ */",
+       "monobook.js": "/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Монобук“ */"
+}
diff --git a/skins/MonoBook/i18n/sr-el.json b/skins/MonoBook/i18n/sr-el.json
new file mode 100644 (file)
index 0000000..35398b5
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Rancher"
+               ]
+       },
+       "skinname-monobook": "Monobuk",
+       "monobook.css": "/* CSS postavljen ovde će uticati na sve korisnike teme „Monobuk“ */",
+       "monobook.js": "/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Monobuk“ */"
+}
diff --git a/skins/MonoBook/i18n/stq.json b/skins/MonoBook/i18n/stq.json
new file mode 100644 (file)
index 0000000..d21f86d
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Maartenvdbent"
+               ]
+       },
+       "monobook.css": "/* Littikschrieuwen nit twinge */",
+       "monobook.js": "/* Ferallerd; benutsje insteede deerfon [[MediaWiki:common.js]] */"
+}
diff --git a/skins/MonoBook/i18n/su.json b/skins/MonoBook/i18n/su.json
new file mode 100644 (file)
index 0000000..627a97b
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "monobook.css": "/* édit koropak ieu pikeun nyaluyukeun kulit ''monobook'' pikeun sakabéh situs */"
+}
diff --git a/skins/MonoBook/i18n/sv.json b/skins/MonoBook/i18n/sv.json
new file mode 100644 (file)
index 0000000..4c08fd8
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Lejonel",
+                       "Lokal Profil",
+                       "Skalman"
+               ]
+       },
+       "skinname-monobook": "Monobook",
+       "monobook-desc": "Det klassiska MediaWiki-utseendet sedan 2004, uppkallad efter det svart-vita foto på en bok som syns i bakgrunden på sidan.",
+       "monobook.css": "/* CSS som skrivs här kommer att påverka alla användare av skalet Monobook */",
+       "monobook.js": "/* JavaScript här kommer att laddas för dem som använder skalet Monobook */"
+}
diff --git a/skins/MonoBook/i18n/te.json b/skins/MonoBook/i18n/te.json
new file mode 100644 (file)
index 0000000..71b3dbe
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Veeven"
+               ]
+       },
+       "skinname-monobook": "మోనోబుక్"
+}
diff --git a/skins/MonoBook/i18n/th.json b/skins/MonoBook/i18n/th.json
new file mode 100644 (file)
index 0000000..38be3f9
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Manop",
+                       "Octahedron80"
+               ]
+       },
+       "skinname-monobook": "โมโนบุ๊ก",
+       "monobook.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินโมโนบุ๊ก */",
+       "monobook.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินโมโนบุ๊ก */"
+}
diff --git a/skins/MonoBook/i18n/tl.json b/skins/MonoBook/i18n/tl.json
new file mode 100644 (file)
index 0000000..5d10527
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "AnakngAraw",
+                       "Sky Harbor"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* Ang CSS na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Monobook */",
+       "monobook.js": "/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/tr.json b/skins/MonoBook/i18n/tr.json
new file mode 100644 (file)
index 0000000..bdb96c8
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Dbl2010"
+               ]
+       },
+       "monobook.css": "/* Buraya konulacak CSS kodu tüm Monobook teması kullanan tüm kullanıcılarda etkin olur */"
+}
diff --git a/skins/MonoBook/i18n/tt-cyrl.json b/skins/MonoBook/i18n/tt-cyrl.json
new file mode 100644 (file)
index 0000000..8f84daf
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ильнар"
+               ]
+       },
+       "skinname-monobook": "Китап"
+}
diff --git a/skins/MonoBook/i18n/tt-latn.json b/skins/MonoBook/i18n/tt-latn.json
new file mode 100644 (file)
index 0000000..53dfaa0
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Don Alessandro"
+               ]
+       },
+       "skinname-monobook": "Kitap"
+}
diff --git a/skins/MonoBook/i18n/tyv.json b/skins/MonoBook/i18n/tyv.json
new file mode 100644 (file)
index 0000000..26936cf
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sborsody"
+               ]
+       },
+       "skinname-monobook": "МоноБук"
+}
diff --git a/skins/MonoBook/i18n/ug-arab.json b/skins/MonoBook/i18n/ug-arab.json
new file mode 100644 (file)
index 0000000..73e0776
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Arlin"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* CSS placed here will affect users of the Monobook skin */",
+       "monobook.js": "/* Any JavaScript here will be loaded for users using the MonoBook skin */"
+}
diff --git a/skins/MonoBook/i18n/uk.json b/skins/MonoBook/i18n/uk.json
new file mode 100644 (file)
index 0000000..249c1f5
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Dim Grits",
+                       "Matma Rex"
+               ]
+       },
+       "skinname-monobook": "Моно-книга",
+       "monobook.css": "/* Розміщений тут CSS буде застосовуватися до всіх тем оформлення Monobook */",
+       "monobook.js": "/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують тему оформлення Моно-книга */"
+}
diff --git a/skins/MonoBook/i18n/vep.json b/skins/MonoBook/i18n/vep.json
new file mode 100644 (file)
index 0000000..2213e16
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Игорь Бродский"
+               ]
+       },
+       "skinname-monobook": "MonoBook"
+}
diff --git a/skins/MonoBook/i18n/vi.json b/skins/MonoBook/i18n/vi.json
new file mode 100644 (file)
index 0000000..960807a
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Minh Nguyen"
+               ]
+       },
+       "monobook.css": "/* Mã CSS đặt ở đây sẽ ảnh hưởng đến thành viên sử dụng giao diện MonoBook */",
+       "monobook.js": "/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng giao diện MonoBook */"
+}
diff --git a/skins/MonoBook/i18n/vmf.json b/skins/MonoBook/i18n/vmf.json
new file mode 100644 (file)
index 0000000..9b3453b
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Silvicola"
+               ]
+       },
+       "monobook.css": "/* CSS hiir beâjflusd nôr dii Monobook-schelfn. Wen'd ale uf ôômôôl beâjflusn wilsch, muâsch an MediaWiki:Common.css was ändârn. */"
+}
diff --git a/skins/MonoBook/i18n/vo.json b/skins/MonoBook/i18n/vo.json
new file mode 100644 (file)
index 0000000..9e4d0f4
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "monobook.css": "/* El CSS isio pepladöl otefon gebanis padafomäta: Monobook */"
+}
diff --git a/skins/MonoBook/i18n/vro.json b/skins/MonoBook/i18n/vro.json
new file mode 100644 (file)
index 0000000..9bc1039
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Võrok"
+               ]
+       },
+       "monobook.css": "/* Taa lehe pääl om Monobook-vällänägemist muutvit kujonduisi. */",
+       "monobook.js": "/* Olõi soovitõt; pruugiq [[MediaWiki:common.js]] */"
+}
diff --git a/skins/MonoBook/i18n/wa.json b/skins/MonoBook/i18n/wa.json
new file mode 100644 (file)
index 0000000..8ffba09
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Srtxg"
+               ]
+       },
+       "monobook.css": "/* li côde CSS metou chal serè eployî pa tos les uzeus eployant l' pea «monobook» */"
+}
diff --git a/skins/MonoBook/i18n/wo.json b/skins/MonoBook/i18n/wo.json
new file mode 100644 (file)
index 0000000..a01b87e
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ibou"
+               ]
+       },
+       "monobook.css": "/* CSS yiñ def fii dañuy am ay njeexit ci jëfandikukatu col gu Monobook. */",
+       "monobook.js": "/*Bépp JavaScript buñ fi duggal jëfandikukat yiy jëfandikoo col gu Monobook keppa koy yeb. */"
+}
diff --git a/skins/MonoBook/i18n/yi.json b/skins/MonoBook/i18n/yi.json
new file mode 100644 (file)
index 0000000..5a7d3e1
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "פוילישער"
+               ]
+       },
+       "skinname-monobook": "מאנאבוק",
+       "monobook.css": "/* סטייל דא געלייגט וועט באאיינפלוסן דעם Monobook סקין */"
+}
diff --git a/skins/MonoBook/i18n/yue.json b/skins/MonoBook/i18n/yue.json
new file mode 100644 (file)
index 0000000..b450970
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "skinname-monobook": "MonoBook",
+       "monobook.css": "/* 響呢度放 CSS 碼去改用戶用嘅 Monobook 畫面 */",
+       "monobook.js": "/* 響每一次個頁面載入時,用 Monobook 畫面嘅用戶都會載入呢度任何嘅JavaScript */"
+}
diff --git a/skins/MonoBook/i18n/zh-hans.json b/skins/MonoBook/i18n/zh-hans.json
new file mode 100644 (file)
index 0000000..fc3f368
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Xiaomingyan",
+                       "Cwek",
+                       "Liuxinyu970226"
+               ]
+       },
+       "monobook-desc": "自2004年就出现的经典MediaWiki皮肤,命名依据一本书中某页面的黑白照片背景",
+       "monobook.css": "/* 放置于这里的CSS将影响使用MonoBook皮肤的用户 */",
+       "monobook.js": "/* 这里的任何JavaScript将为使用MonoBook皮肤的用户加载 */"
+}
diff --git a/skins/MonoBook/i18n/zh-hant.json b/skins/MonoBook/i18n/zh-hant.json
new file mode 100644 (file)
index 0000000..7813cc1
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Cwlin0416"
+               ]
+       },
+       "monobook.css": "/* 此 CSS 會影響使用 Monobook 介面外觀的使用者 */",
+       "monobook.js": "/* 此 JavaScript 會用於使用 Monobook 介面外觀使用者 */"
+}
diff --git a/skins/Vector/COPYING b/skins/Vector/COPYING
new file mode 100644 (file)
index 0000000..019694a
--- /dev/null
@@ -0,0 +1,342 @@
+== GNU GENERAL PUBLIC LICENSE ==
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+=== Preamble ===
+
+The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ==
+
+'''0.''' This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+'''1.''' You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+'''2.''' You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+       '''a)''' You must cause the modified files to carry prominent notices
+       stating that you changed the files and the date of any change.
+
+       '''b)''' You must cause any work that you distribute or publish, that in
+       whole or in part contains or is derived from the Program or any
+       part thereof, to be licensed as a whole at no charge to all third
+       parties under the terms of this License.
+
+       '''c)''' If the modified program normally reads commands interactively
+       when run, you must cause it, when started running for such
+       interactive use in the most ordinary way, to print or display an
+       announcement including an appropriate copyright notice and a
+       notice that there is no warranty (or else, saying that you provide
+       a warranty) and that users may redistribute the program under
+       these conditions, and telling the user how to view a copy of this
+       License.  (Exception: if the Program itself is interactive but
+       does not normally print such an announcement, your work based on
+       the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+'''3.''' You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+       '''a)''' Accompany it with the complete corresponding machine-readable
+       source code, which must be distributed under the terms of Sections
+       1 and 2 above on a medium customarily used for software interchange; or,
+
+       '''b)''' Accompany it with a written offer, valid for at least three
+       years, to give any third party, for a charge no more than your
+       cost of physically performing source distribution, a complete
+       machine-readable copy of the corresponding source code, to be
+       distributed under the terms of Sections 1 and 2 above on a medium
+       customarily used for software interchange; or,
+
+       '''c)''' Accompany it with the information you received as to the offer
+       to distribute corresponding source code.  (This alternative is
+       allowed only for noncommercial distribution and only if you
+       received the program in object code or executable form with such
+       an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+'''4.''' You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+'''5.''' You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+'''6.''' Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+'''7.''' If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+'''8.''' If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+'''9.''' The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+'''10.''' If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+=== NO WARRANTY ===
+
+'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+       '''END OF TERMS AND CONDITIONS'''
+
+== How to Apply These Terms to Your New Programs ==
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+       <one line to give the program's name and a brief idea of what it does.>
+
+       Copyright (C) <year>  <name of author>
+
+       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
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+       Gnomovision version 69, Copyright (C) year name of author
+       Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+       This is free software, and you are welcome to redistribute it
+       under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+       Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+       `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+       <signature of Ty Coon>, 1 April 1989
+
+       Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
index adc2306..be8719a 100644 (file)
 $wgExtensionCredits['skin'][] = array(
        'path' => __FILE__,
        'name' => 'Vector',
+       'namemsg' => 'skinname-vector',
+       'descriptionmsg' => 'vector-skin-desc',
        'url' => 'https://www.mediawiki.org/wiki/Skin:Vector',
+       'author' => array( 'Trevor Parscal', 'Roan Kattouw', '...' ),
+       'license-name' => 'GPLv2+',
 );
 
 // Register files
diff --git a/skins/Vector/i18n/ab.json b/skins/Vector/i18n/ab.json
new file mode 100644 (file)
index 0000000..d52ed10
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Temuri rajavi"
+               ]
+       },
+       "vector-action-move": "Ахьӡ аҧсахра",
+       "vector-view-create": "Арҿиара",
+       "vector-view-edit": "Ариашамҭа",
+       "vector-view-history": "Аҭоурых",
+       "vector-view-view": "Аҧхьара",
+       "vector-view-viewsource": "Ахәаҧшра"
+}
diff --git a/skins/Vector/i18n/ace.json b/skins/Vector/i18n/ace.json
new file mode 100644 (file)
index 0000000..befc427
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Fadli Idris",
+                       "Si Gam Acèh"
+               ]
+       },
+       "vector-action-addsection": "Tamah bhaih",
+       "vector-action-delete": "Sampôh",
+       "vector-action-move": "Pupinah",
+       "vector-action-protect": "Peulindông",
+       "vector-action-undelete": "Bateuë sampôh",
+       "vector-action-unprotect": "Gantoe neulindông",
+       "vector-view-create": "Peugöt",
+       "vector-view-edit": "Andam",
+       "vector-view-history": "Eu riwayat",
+       "vector-view-view": "Beuët",
+       "vector-view-viewsource": "Eu nè"
+}
diff --git a/skins/Vector/i18n/ady-cyrl.json b/skins/Vector/i18n/ady-cyrl.json
new file mode 100644 (file)
index 0000000..77ea233
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Adamsa123",
+                       "Amire80",
+                       "Celekan",
+                       "Siklawy"
+               ]
+       },
+       "vector-action-addsection": "1офтхьабз",
+       "vector-action-delete": "ЛъэкӀ",
+       "vector-action-move": "Хьы",
+       "vector-action-protect": "Иухъумэ",
+       "vector-action-undelete": "Умылъэк1",
+       "vector-action-unprotect": "Умыухъумэ",
+       "vector-view-create": "Игъэхъу",
+       "vector-view-edit": "Гъэтэрэзыжь",
+       "vector-view-history": "Тарихъым eплъ",
+       "vector-view-view": "Едж",
+       "vector-view-viewsource": "Еплъ лъапсэм"
+}
diff --git a/skins/Vector/i18n/aeb.json b/skins/Vector/i18n/aeb.json
new file mode 100644 (file)
index 0000000..b3c71f9
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Csisc",
+                       "Malekbr"
+               ]
+       },
+       "vector-action-addsection": "أضف موضوعا",
+       "vector-action-delete": "احذف",
+       "vector-action-move": "انقل",
+       "vector-action-protect": "احم",
+       "vector-action-undelete": "استرجع الحذف",
+       "vector-action-unprotect": "غير الحماية",
+       "vector-view-create": "أنشئ",
+       "vector-view-edit": "Baddel",
+       "vector-view-history": "Warri l'historique",
+       "vector-view-view": "Aqra",
+       "vector-view-viewsource": "اعرض المصدر"
+}
diff --git a/skins/Vector/i18n/af.json b/skins/Vector/i18n/af.json
new file mode 100644 (file)
index 0000000..8bd949e
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Byeboer",
+                       "Naudefj"
+               ]
+       },
+       "vector-action-addsection": "Nuwe onderwerp",
+       "vector-action-delete": "Skrap",
+       "vector-action-move": "Skuif",
+       "vector-action-protect": "Beskerm",
+       "vector-action-undelete": "Ontskrap",
+       "vector-action-unprotect": "Wysig beskerming",
+       "vector-view-create": "Skep",
+       "vector-view-edit": "Wysig",
+       "vector-view-history": "Wys geskiedenis",
+       "vector-view-view": "Lees",
+       "vector-view-viewsource": "Wys bronteks",
+       "vector-more-actions": "Meer"
+}
diff --git a/skins/Vector/i18n/aln.json b/skins/Vector/i18n/aln.json
new file mode 100644 (file)
index 0000000..a5cc022
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bresta"
+               ]
+       },
+       "vector.css": "/* CSSi i vednosun këtu ka me i prekë shfrytëzuesit e dukjes Vector */",
+       "vector.js": "/* Çdo JavaScript këtu ka me u ngarkue për shfrytëzuesit që përdorin dukjen Vector */",
+       "vector-action-addsection": "Shto temë",
+       "vector-action-delete": "Fshij",
+       "vector-action-move": "Zhvendos",
+       "vector-action-protect": "Mbroj",
+       "vector-action-undelete": "Kthe fshimjen mbrapsht",
+       "vector-action-unprotect": "Hiq mbrojtjen",
+       "vector-view-create": "Krijo",
+       "vector-view-edit": "Redakto",
+       "vector-view-history": "Shih historinë",
+       "vector-view-view": "Lexo",
+       "vector-view-viewsource": "Shih kodin"
+}
diff --git a/skins/Vector/i18n/am.json b/skins/Vector/i18n/am.json
new file mode 100644 (file)
index 0000000..55655bb
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Codex Sinaiticus",
+                       "Elfalem",
+                       "Hinstein",
+                       "Teferra"
+               ]
+       },
+       "vector-action-addsection": "ርዕስ ጨምር",
+       "vector-action-delete": "አጥፋ",
+       "vector-action-move": "ለማዛወር",
+       "vector-action-protect": "ለመቆለፍ",
+       "vector-action-undelete": "አታጥፋ",
+       "vector-action-unprotect": "አለመቆለፍ",
+       "vector-view-create": "አዲስ ፍጠር",
+       "vector-view-edit": "አርም",
+       "vector-view-history": "ታሪኩን አሳይ",
+       "vector-view-view": "ለማንበብ",
+       "vector-view-viewsource": "ጥሬ ኮድ ለመመልከት",
+       "vector-more-actions": "ተጨማሪ"
+}
diff --git a/skins/Vector/i18n/an.json b/skins/Vector/i18n/an.json
new file mode 100644 (file)
index 0000000..a4b5f0c
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Juanpabl"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector.css": "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Vector */",
+       "vector.js": "/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios que usen a piel Vector */",
+       "vector-action-addsection": "Adhibir nueva sección",
+       "vector-action-delete": "Borrar",
+       "vector-action-move": "Tresladar",
+       "vector-action-protect": "Protecher",
+       "vector-action-undelete": "Restaurar",
+       "vector-action-unprotect": "Cambiar protección",
+       "vector-view-create": "Creyar",
+       "vector-view-edit": "Editar",
+       "vector-view-history": "Amostrar l'historial",
+       "vector-view-view": "Leyer",
+       "vector-view-viewsource": "Veyer o codigo fuent"
+}
diff --git a/skins/Vector/i18n/ang.json b/skins/Vector/i18n/ang.json
new file mode 100644 (file)
index 0000000..56321dc
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gott wisst"
+               ]
+       },
+       "vector-action-addsection": "Besettan mearcunge",
+       "vector-action-delete": "Forlēosan",
+       "vector-action-move": "Wegan",
+       "vector-action-protect": "Beorgan",
+       "vector-action-undelete": "Scieppan tramet eft",
+       "vector-action-unprotect": "Andwendan beorgunge",
+       "vector-view-create": "Scieppan",
+       "vector-view-edit": "Adihtan",
+       "vector-view-history": "Stǣr",
+       "vector-view-view": "Rǣdan",
+       "vector-view-viewsource": "Sēon fruman"
+}
diff --git a/skins/Vector/i18n/ar.json b/skins/Vector/i18n/ar.json
new file mode 100644 (file)
index 0000000..9c07d9b
--- /dev/null
@@ -0,0 +1,28 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Abanima",
+                       "Calak",
+                       "Meno25",
+                       "Mido",
+                       "OsamaK",
+                       "أحمد",
+                       "زكريا"
+               ]
+       },
+       "skinname-vector": "فكتور",
+       "vector.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة فكتور */",
+       "vector.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة فكتور */",
+       "vector-action-addsection": "أضف موضوعا",
+       "vector-action-delete": "احذف",
+       "vector-action-move": "انقل",
+       "vector-action-protect": "احم",
+       "vector-action-undelete": "ألغ الحذف",
+       "vector-action-unprotect": "غير الحماية",
+       "vector-view-create": "أنشئ",
+       "vector-view-edit": "عدل",
+       "vector-view-history": "اعرض التاريخ",
+       "vector-view-view": "اقرأ",
+       "vector-view-viewsource": "اعرض المصدر",
+       "vector-more-actions": "مزيد"
+}
diff --git a/skins/Vector/i18n/arc.json b/skins/Vector/i18n/arc.json
new file mode 100644 (file)
index 0000000..7bb2372
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "334a",
+                       "Basharh",
+                       "Michaelovic"
+               ]
+       },
+       "vector-action-addsection": "ܐܘܣܦ ܡܠܘܐܐ",
+       "vector-action-delete": "ܫܘܦ",
+       "vector-action-move": "ܫܢܝ",
+       "vector-action-protect": "ܛܪ",
+       "vector-action-undelete": "ܠܐ ܫܘܦ",
+       "vector-action-unprotect": "ܫܚܠܦ ܢܛܝܪܘܬܐ",
+       "vector-view-create": "ܒܪܝ",
+       "vector-view-edit": "ܫܚܠܦ",
+       "vector-view-history": "ܚܙܝ ܬܫܥܝܬܐ",
+       "vector-view-view": "ܩܪܝ",
+       "vector-view-viewsource": "ܚܙܝ ܡܒܘܥܐ"
+}
diff --git a/skins/Vector/i18n/arn.json b/skins/Vector/i18n/arn.json
new file mode 100644 (file)
index 0000000..9ff9636
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Clerc",
+                       "Fiestoforo"
+               ]
+       },
+       "vector-action-addsection": "Püñamtun dungu",
+       "vector-action-delete": "Liftun",
+       "vector-action-move": "Wiñamün",
+       "vector-action-protect": "Nürüfkünun",
+       "vector-action-undelete": "Wüñoñamümün",
+       "vector-action-unprotect": "Kalekünun Nürüfkünun",
+       "vector-view-create": "Dewman",
+       "vector-view-edit": "Kümeelün",
+       "vector-view-history": "Pengelün rupañmael",
+       "vector-view-view": "Chillkatun",
+       "vector-view-viewsource": "Kimam chew küpan chi wirin"
+}
diff --git a/skins/Vector/i18n/aro.json b/skins/Vector/i18n/aro.json
new file mode 100644 (file)
index 0000000..77dc6c4
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ooswesthoesbes"
+               ]
+       },
+       "vector-view-edit": "Imeakie"
+}
diff --git a/skins/Vector/i18n/arq.json b/skins/Vector/i18n/arq.json
new file mode 100644 (file)
index 0000000..740ab9b
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bachounda",
+                       "Oldstoneage"
+               ]
+       },
+       "vector-action-addsection": "زيد موضوع",
+       "vector-action-delete": "امحي",
+       "vector-action-move": "حول",
+       "vector-action-protect": "بروجي",
+       "vector-action-undelete": "ردّ كيما كان",
+       "vector-action-unprotect": "بدّل الـحماية",
+       "vector-view-create": "أصنع",
+       "vector-view-edit": "بدل",
+       "vector-view-history": "روح للتاريخي",
+       "vector-view-view": "أقرى",
+       "vector-view-viewsource": "شوف المصدر"
+}
diff --git a/skins/Vector/i18n/ary.json b/skins/Vector/i18n/ary.json
new file mode 100644 (file)
index 0000000..db687ea
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Enzoreg",
+                       "Zanatos"
+               ]
+       },
+       "vector-action-addsection": "Zid topic",
+       "vector-action-delete": "Suprimi",
+       "vector-action-move": "Neqel",
+       "vector-action-protect": "Ḫami",
+       "vector-action-undelete": "rja lhadf",
+       "vector-action-unprotect": "Ḫiyed l-ḫimaya",
+       "vector-view-create": "Ĥṫareĝ",
+       "vector-view-edit": "Ĝedel",
+       "vector-view-history": "Ṫariĥ l-fiċyé",
+       "vector-view-view": "Qra",
+       "vector-view-viewsource": "Ċof l-masdar"
+}
diff --git a/skins/Vector/i18n/arz.json b/skins/Vector/i18n/arz.json
new file mode 100644 (file)
index 0000000..3541b15
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ghaly",
+                       "Meno25",
+                       "Ramsis II"
+               ]
+       },
+       "vector.css": "/* CSS اللى هنا حتأثر على اليوزرز اللى بيستخدموا واجهة فكتور */",
+       "vector.js": "/* اى جافاسكريبت هنا حتتحمل لكل يوزر بيستخدم واجهة فكتور */",
+       "vector-action-addsection": "ضيف موضوع",
+       "vector-action-delete": "مسح",
+       "vector-action-move": "نقل",
+       "vector-action-protect": "حمايه",
+       "vector-action-undelete": "الغى المسح",
+       "vector-action-unprotect": "غير الحمايه",
+       "vector-view-create": "اعمل",
+       "vector-view-edit": "تعديل",
+       "vector-view-history": "استعراض التاريخ",
+       "vector-view-view": "قرايه",
+       "vector-view-viewsource": "استعراض المصدر"
+}
diff --git a/skins/Vector/i18n/as.json b/skins/Vector/i18n/as.json
new file mode 100644 (file)
index 0000000..92efe9f
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bishnu Saikia",
+                       "Chaipau",
+                       "Gitartha.bordoloi"
+               ]
+       },
+       "vector-action-addsection": "বিষয় যোগ",
+       "vector-action-delete": "বিলোপ কৰক",
+       "vector-action-move": "স্থানান্তৰ কৰক",
+       "vector-action-protect": "সুৰক্ষিত কৰক",
+       "vector-action-undelete": "পুনৰুদ্ধাৰ কৰক",
+       "vector-action-unprotect": "সুৰক্ষা সলনি কৰক",
+       "vector-view-create": "সৃষ্টি কৰক",
+       "vector-view-edit": "সম্পাদনা",
+       "vector-view-history": "ইতিহাস চাওক",
+       "vector-view-view": "পঢ়ক",
+       "vector-view-viewsource": "উৎস চাওক",
+       "vector-more-actions": "অধিক"
+}
diff --git a/skins/Vector/i18n/ase.json b/skins/Vector/i18n/ase.json
new file mode 100644 (file)
index 0000000..37d5c67
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Icemandeaf"
+               ]
+       },
+       "vector-action-addsection": "M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M522x522S15a37478x479S10041485x492S20600500x492",
+       "vector-action-delete": "M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468",
+       "vector-action-move": "M552x509S18520488x494S18528449x494S26626522x492",
+       "vector-action-protect": "M512x519S15a19488x482S15a11489x482S20600488x508",
+       "vector-view-create": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501",
+       "vector-view-edit": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "vector-view-history": "M525x524S2ff00482x483S10e00507x494S26500511x474 M514x523S11541487x478S22f04489x509",
+       "vector-view-view": "M513x540S15a06486x459S10e50494x474S22b04493x510",
+       "vector-view-viewsource": "M525x524S2ff00482x483S10e00507x494S26500511x474 M509x545S16d20492x456S17620493x480S10120493x497S14a20494x530"
+}
diff --git a/skins/Vector/i18n/ast.json b/skins/Vector/i18n/ast.json
new file mode 100644 (file)
index 0000000..bd3703f
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Esbardu",
+                       "Xuacu"
+               ]
+       },
+       "vector.css": "/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Vector */",
+       "vector.js": "/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Vector */",
+       "vector-action-addsection": "Amestar seición",
+       "vector-action-delete": "Desaniciar",
+       "vector-action-move": "Treslladar",
+       "vector-action-protect": "Protexer",
+       "vector-action-undelete": "Restaurar",
+       "vector-action-unprotect": "Camudar la proteición",
+       "vector-view-create": "Crear",
+       "vector-view-edit": "Editar",
+       "vector-view-history": "Ver historial",
+       "vector-view-view": "Lleer",
+       "vector-view-viewsource": "Ver fonte"
+}
diff --git a/skins/Vector/i18n/av.json b/skins/Vector/i18n/av.json
new file mode 100644 (file)
index 0000000..e7a6452
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Умар"
+               ]
+       },
+       "vector-view-edit": "Хисизабизе"
+}
diff --git a/skins/Vector/i18n/avk.json b/skins/Vector/i18n/avk.json
new file mode 100644 (file)
index 0000000..a0585bd
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Wikimistusik"
+               ]
+       },
+       "vector-action-addsection": "Loplekura va detce",
+       "vector-action-delete": "Sulara",
+       "vector-action-move": "Arrundara",
+       "vector-action-protect": "Nendara",
+       "vector-view-create": "Redura",
+       "vector-view-edit": "Betara",
+       "vector-view-history": "Wira va izvot",
+       "vector-view-view": "Belira",
+       "vector-view-viewsource": "klitawira"
+}
diff --git a/skins/Vector/i18n/az.json b/skins/Vector/i18n/az.json
new file mode 100644 (file)
index 0000000..48d42e5
--- /dev/null
@@ -0,0 +1,28 @@
+{
+       "@metadata": {
+               "authors": [
+                       "AZISS",
+                       "Arystanbek",
+                       "Gulmammad",
+                       "Sortilegus",
+                       "Vago",
+                       "Vugar 1981",
+                       "Wertuose"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector.css": "/* Burada yerləşən CSS Vector istifadəçilərinə tətbiq olunur */",
+       "vector.js": "/* Burada Vector skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */",
+       "vector-action-addsection": "Mövzu əlavə et",
+       "vector-action-delete": "Sil",
+       "vector-action-move": "Adını dəyişdir",
+       "vector-action-protect": "Mühafizə et",
+       "vector-action-undelete": "Bərpa et",
+       "vector-action-unprotect": "Mühafizəni kənarlaşdır",
+       "vector-view-create": "Yarat",
+       "vector-view-edit": "Redaktə",
+       "vector-view-history": "Tarixçəyə bax",
+       "vector-view-view": "Oxu",
+       "vector-view-viewsource": "Mənbəyə bax",
+       "vector-more-actions": "Daha"
+}
diff --git a/skins/Vector/i18n/azb.json b/skins/Vector/i18n/azb.json
new file mode 100644 (file)
index 0000000..ae46e1c
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "E THP",
+                       "Ebrahimi-amir",
+                       "Mousa"
+               ]
+       },
+       "vector-action-addsection": "قوْنو آرتیر",
+       "vector-action-delete": "سیل",
+       "vector-action-move": "داشی",
+       "vector-action-protect": "قوْرو",
+       "vector-action-undelete": "سیلمگی قایتار",
+       "vector-action-unprotect": "قوْروماغی دَییشدیر",
+       "vector-view-create": "یارات",
+       "vector-view-edit": "دَییشدیر",
+       "vector-view-history": "گئچمیشه باخ",
+       "vector-view-view": "اوْخو",
+       "vector-view-viewsource": "قایناغا باخ"
+}
diff --git a/skins/Vector/i18n/ba.json b/skins/Vector/i18n/ba.json
new file mode 100644 (file)
index 0000000..30969f7
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Assele",
+                       "Haqmar"
+               ]
+       },
+       "skinname-vector": "Векторлы",
+       "vector-action-addsection": "Тема өҫтәргә",
+       "vector-action-delete": "Юйырға",
+       "vector-action-move": "Исемен үҙгәртергә",
+       "vector-action-protect": "Һаҡларға",
+       "vector-action-undelete": "Тергеҙергә",
+       "vector-action-unprotect": "Һаҡлауҙы үҙгәртергә",
+       "vector-view-create": "Яһау",
+       "vector-view-edit": "Үҙгәртергә",
+       "vector-view-history": "Тарихты ҡарау",
+       "vector-view-view": "Уҡыу",
+       "vector-view-viewsource": "Сығанаҡты ҡарарға"
+}
diff --git a/skins/Vector/i18n/ban.json b/skins/Vector/i18n/ban.json
new file mode 100644 (file)
index 0000000..4641011
--- /dev/null
@@ -0,0 +1,17 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Adi Mayndra",
+                       "BASAbali"
+               ]
+       },
+       "vector-action-addsection": "imbuhin indik wacana",
+       "vector-action-delete": "ngapus",
+       "vector-action-move": "kisidang",
+       "vector-action-protect": "nyaga",
+       "vector-view-create": "ngawe",
+       "vector-view-edit": "mecikang",
+       "vector-view-history": "indik sane lintang",
+       "vector-view-view": "Waca",
+       "vector-view-viewsource": "cingak witnyane"
+}
diff --git a/skins/Vector/i18n/bar.json b/skins/Vector/i18n/bar.json
new file mode 100644 (file)
index 0000000..0c085b1
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bua333",
+                       "Mucalexx"
+               ]
+       },
+       "vector-action-addsection": "An Obschnitt dazua doa",
+       "vector-action-delete": "Leschn",
+       "vector-action-move": "Vaschiabm",
+       "vector-action-protect": "Schitzn",
+       "vector-action-undelete": "Wiederherstön",
+       "vector-action-unprotect": "freigeem",
+       "vector-view-create": "Aufbaun",
+       "vector-view-edit": "Werkln",
+       "vector-view-history": "Gschicht oschaugn",
+       "vector-view-view": "Lesn",
+       "vector-view-viewsource": "Quejtext ozoagn"
+}
diff --git a/skins/Vector/i18n/bbc-latn.json b/skins/Vector/i18n/bbc-latn.json
new file mode 100644 (file)
index 0000000..fe9a284
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Daniel Harahap",
+                       "WBT003Bugari",
+                       "WBT006Hendra",
+                       "WBT009Anju"
+               ]
+       },
+       "vector-action-addsection": "Bagian na imbaru",
+       "vector-action-delete": "Sesa",
+       "vector-action-move": "Pahusor",
+       "vector-action-protect": "Ramoti",
+       "vector-action-undelete": "unang sesa",
+       "vector-action-unprotect": "Uba parlindungan",
+       "vector-view-create": "Tompa",
+       "vector-view-edit": "Paubah",
+       "vector-view-history": "Patudu andorang na",
+       "vector-view-view": "Jaha",
+       "vector-view-viewsource": "Ida haroanna"
+}
diff --git a/skins/Vector/i18n/bcc.json b/skins/Vector/i18n/bcc.json
new file mode 100644 (file)
index 0000000..f6c3c4d
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mostafadaneshvar",
+                       "RigiMahnoor"
+               ]
+       },
+       "vector-action-addsection": "هور کتن عنوان",
+       "vector-action-delete": "زورگ",
+       "vector-action-move": "جاه په جاه",
+       "vector-action-protect": "حفاظت",
+       "vector-action-undelete": "ترینگ",
+       "vector-action-unprotect": "پروتکشنء ٹگل بدئ",
+       "vector-view-create": "شرکتن",
+       "vector-view-edit": "اصلاح",
+       "vector-view-history": "چارتن تاریح",
+       "vector-view-view": "وانتن",
+       "vector-view-viewsource": "پیشدارگ بن جاه",
+       "vector-more-actions": "گیشتر"
+}
diff --git a/skins/Vector/i18n/bcl.json b/skins/Vector/i18n/bcl.json
new file mode 100644 (file)
index 0000000..7e2d73a
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Filipinayzd",
+                       "Geopoet"
+               ]
+       },
+       "vector-action-addsection": "Idagdag an topic",
+       "vector-action-delete": "puráon",
+       "vector-action-move": "Ibalyó",
+       "vector-action-protect": "Protektaran",
+       "vector-action-undelete": "Bawion sa pagkapara",
+       "vector-action-unprotect": "Ribayan an proteksyon",
+       "vector-view-create": "Magmukna",
+       "vector-view-edit": "Liwatón",
+       "vector-view-history": "Tanawon sa historiya",
+       "vector-view-view": "Basáha",
+       "vector-view-viewsource": "Hilingón an ginikánan"
+}
diff --git a/skins/Vector/i18n/be-tarask.json b/skins/Vector/i18n/be-tarask.json
new file mode 100644 (file)
index 0000000..4bbef69
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "EugeneZelenko",
+                       "Red Winged Duck",
+                       "Wizardist"
+               ]
+       },
+       "skinname-vector": "Вэктар",
+       "vector-action-addsection": "Дадаць тэму",
+       "vector-action-delete": "Выдаліць",
+       "vector-action-move": "Перанесьці",
+       "vector-action-protect": "Абараніць",
+       "vector-action-undelete": "Аднавіць",
+       "vector-action-unprotect": "Зьмяніць абарону",
+       "vector-view-create": "Стварыць",
+       "vector-view-edit": "Рэдагаваць",
+       "vector-view-history": "Паказаць гісторыю",
+       "vector-view-view": "Чытаць",
+       "vector-view-viewsource": "Паказаць крыніцу",
+       "vector-more-actions": "Болей"
+}
diff --git a/skins/Vector/i18n/be.json b/skins/Vector/i18n/be.json
new file mode 100644 (file)
index 0000000..b84c18f
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mikalai Udodau",
+                       "Yury Tarasievich",
+                       "Дзяніс Тутэйшы",
+                       "Хомелка"
+               ]
+       },
+       "vector-action-addsection": "Дадаць тэму",
+       "vector-action-delete": "Сцерці",
+       "vector-action-move": "Перанесці",
+       "vector-action-protect": "Ахова",
+       "vector-action-undelete": "Аднавіць",
+       "vector-action-unprotect": "Змяніць ахову",
+       "vector-view-create": "Стварыць",
+       "vector-view-edit": "Правіць",
+       "vector-view-history": "Паказаць гісторыю",
+       "vector-view-view": "Чытаць",
+       "vector-view-viewsource": "Паказаць зыходны тэкст",
+       "vector-more-actions": "Яшчэ"
+}
diff --git a/skins/Vector/i18n/bew.json b/skins/Vector/i18n/bew.json
new file mode 100644 (file)
index 0000000..ab009b4
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Naval Scene"
+               ]
+       },
+       "vector-action-delete": "Ngapus",
+       "vector-action-move": "Pindahin",
+       "vector-action-undelete": "Balikin nyang keapus",
+       "vector-view-create": "Bikin"
+}
diff --git a/skins/Vector/i18n/bg.json b/skins/Vector/i18n/bg.json
new file mode 100644 (file)
index 0000000..9a2858c
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Borislav",
+                       "DCLXVI",
+                       "Spiritia"
+               ]
+       },
+       "vector-action-addsection": "Добавяне на тема",
+       "vector-action-delete": "Изтриване",
+       "vector-action-move": "Преместване",
+       "vector-action-protect": "Защита",
+       "vector-action-undelete": "Възстановяване",
+       "vector-action-unprotect": "Промяна на защитата",
+       "vector-view-create": "Създаване",
+       "vector-view-edit": "Редактиране",
+       "vector-view-history": "История",
+       "vector-view-view": "Преглед",
+       "vector-view-viewsource": "Преглед на кода"
+}
diff --git a/skins/Vector/i18n/bho.json b/skins/Vector/i18n/bho.json
new file mode 100644 (file)
index 0000000..e41f332
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ganesh",
+                       "Nepaboy"
+               ]
+       },
+       "vector-action-addsection": "विषय जोड़ीं",
+       "vector-action-delete": "मिटाईं",
+       "vector-action-move": "स्थांतरण",
+       "vector-action-protect": "संरक्षित करीं",
+       "vector-action-undelete": "मत मिटाईं",
+       "vector-action-unprotect": "सुरक्षा बदलीं",
+       "vector-view-create": "बनाईं",
+       "vector-view-edit": "सम्पादन",
+       "vector-view-history": "इतिहास देखीं",
+       "vector-view-view": "पढ़ीं",
+       "vector-view-viewsource": "स्त्रोत देखीं"
+}
diff --git a/skins/Vector/i18n/bi.json b/skins/Vector/i18n/bi.json
new file mode 100644 (file)
index 0000000..a30c41b
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sotiale"
+               ]
+       },
+       "vector-action-move": "Muv",
+       "vector-view-history": "Lukluk histri",
+       "vector-view-view": "Rid"
+}
diff --git a/skins/Vector/i18n/bjn.json b/skins/Vector/i18n/bjn.json
new file mode 100644 (file)
index 0000000..61cb74e
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ezagren",
+                       "J Subhi"
+               ]
+       },
+       "vector-action-addsection": "Tambahi tupik",
+       "vector-action-delete": "Hapus",
+       "vector-action-move": "Pindahakan",
+       "vector-action-protect": "Lindungi",
+       "vector-action-undelete": "Pawalangan pahapusan",
+       "vector-action-unprotect": "Palindungan",
+       "vector-view-create": "Ulah",
+       "vector-view-edit": "Babak",
+       "vector-view-history": "Tiringi halam",
+       "vector-view-view": "Baca",
+       "vector-view-viewsource": "Tiringi asal mula"
+}
diff --git a/skins/Vector/i18n/bm.json b/skins/Vector/i18n/bm.json
new file mode 100644 (file)
index 0000000..9164ec8
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Amadouyoro.thiam"
+               ]
+       },
+       "vector-view-view": "Kalan"
+}
diff --git a/skins/Vector/i18n/bn.json b/skins/Vector/i18n/bn.json
new file mode 100644 (file)
index 0000000..a2c37b3
--- /dev/null
@@ -0,0 +1,25 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Aftab1995",
+                       "Bellayet",
+                       "Leemon2010",
+                       "Nasir8891",
+                       "Tauhid16",
+                       "Wikitanvir"
+               ]
+       },
+       "skinname-vector": "ভেক্টর",
+       "vector-action-addsection": "বিষয় যোগ",
+       "vector-action-delete": "অপসারণ",
+       "vector-action-move": "স্থানান্তর",
+       "vector-action-protect": "সুরক্ষা",
+       "vector-action-undelete": "পুনরুদ্ধার",
+       "vector-action-unprotect": "সুরক্ষা পরিবর্তন",
+       "vector-view-create": "তৈরি",
+       "vector-view-edit": "সম্পাদনা",
+       "vector-view-history": "ইতিহাস",
+       "vector-view-view": "পড়ুন",
+       "vector-view-viewsource": "উৎস দেখুন",
+       "vector-more-actions": "আরও"
+}
diff --git a/skins/Vector/i18n/bo.json b/skins/Vector/i18n/bo.json
new file mode 100644 (file)
index 0000000..defe396
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Freeyak",
+                       "Phurbutsering"
+               ]
+       },
+       "vector-action-addsection": "བརྗོད་གཞི་ཁ་སྣོན།",
+       "vector-action-delete": "སུབས།",
+       "vector-action-move": "སྤོར་བ།",
+       "vector-action-protect": "འགོག་སྲུང།",
+       "vector-action-undelete": "མི་བསུབས་",
+       "vector-action-unprotect": "སྲུང་སྐྱོབ་གློད་པ།",
+       "vector-view-create": "གསར་བཟོ།",
+       "vector-view-edit": "རྩོམ་སྒྲིག",
+       "vector-view-history": "ལོ་རྒྱུས་ལ་ལྟ་བ།",
+       "vector-view-view": "ཀློག་པ།",
+       "vector-view-viewsource": "ཁུངས་ལ་ལྟ་བ།"
+}
diff --git a/skins/Vector/i18n/bpy.json b/skins/Vector/i18n/bpy.json
new file mode 100644 (file)
index 0000000..3124363
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Usingha"
+               ]
+       },
+       "vector-action-addsection": "বিষয় তিলকর",
+       "vector-action-delete": "পুসে বেলা",
+       "vector-action-move": "থেইকর",
+       "vector-action-protect": "লুকর",
+       "vector-action-undelete": "নাপুসি",
+       "vector-action-unprotect": "লুকরানিহান সিলকর",
+       "vector-view-create": "হঙকরিক",
+       "vector-view-edit": "পতানি",
+       "vector-view-history": "ইতিহাস চেইক",
+       "vector-view-view": "পাকরিক",
+       "vector-view-viewsource": "সোর্স চেইক"
+}
diff --git a/skins/Vector/i18n/br.json b/skins/Vector/i18n/br.json
new file mode 100644 (file)
index 0000000..9cf579b
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Fulup",
+                       "Y-M D"
+               ]
+       },
+       "skinname-vector": "Vektor",
+       "vector.css": "/* Talvezout a raio ar CSS lakaet amañ evit implijerien ar gwiskadur Vektor */",
+       "vector.js": "/* Kement JavaScript amañ a vo karget evit an implijerien a ra gant ar gwiskadur Vektor */",
+       "vector-action-addsection": "Rannbennad nevez",
+       "vector-action-delete": "Diverkañ",
+       "vector-action-move": "Adenvel",
+       "vector-action-protect": "Gwareziñ",
+       "vector-action-undelete": "Diziverkañ",
+       "vector-action-unprotect": "Cheñch gwarez",
+       "vector-view-create": "Krouiñ",
+       "vector-view-edit": "Kemmañ",
+       "vector-view-history": "Gwelet an istor",
+       "vector-view-view": "Lenn",
+       "vector-view-viewsource": "Sellet ouzh tarzh an destenn",
+       "vector-more-actions": "Muioc'h"
+}
diff --git a/skins/Vector/i18n/brh.json b/skins/Vector/i18n/brh.json
new file mode 100644 (file)
index 0000000..ee435e6
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Imdadb"
+               ]
+       },
+       "vector-action-addsection": "Púskun sarhál",
+       "vector-action-delete": "Mesa",
+       "vector-action-move": "Surif",
+       "vector-action-protect": "Rakk",
+       "vector-view-create": "Biná",
+       "vector-view-edit": "Radbadal",
+       "vector-view-history": "Lekav e ur",
+       "vector-view-view": "Xuán",
+       "vector-view-viewsource": "Bumpad e ur"
+}
diff --git a/skins/Vector/i18n/bs.json b/skins/Vector/i18n/bs.json
new file mode 100644 (file)
index 0000000..f94be4c
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "CERminator",
+                       "DzWiki",
+                       "KWiki"
+               ]
+       },
+       "vector-action-addsection": "Dodaj temu",
+       "vector-action-delete": "Izbriši",
+       "vector-action-move": "Preusmjeri",
+       "vector-action-protect": "Zaštiti",
+       "vector-action-undelete": "Vrati obrisano",
+       "vector-action-unprotect": "Promijeni zaštitu",
+       "vector-view-create": "Napravi",
+       "vector-view-edit": "Uredi",
+       "vector-view-history": "Pregled historije",
+       "vector-view-view": "Čitanje",
+       "vector-view-viewsource": "Pogledaj izvor"
+}
diff --git a/skins/Vector/i18n/bug.json b/skins/Vector/i18n/bug.json
new file mode 100644 (file)
index 0000000..b1b0f9e
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kurniasan"
+               ]
+       },
+       "vector-action-move": "Paléccé'",
+       "vector-view-create": "Ebbu",
+       "vector-view-edit": "Padéccéng",
+       "vector-view-view": "Baca",
+       "vector-view-viewsource": "Ita sumber"
+}
diff --git a/skins/Vector/i18n/bxr.json b/skins/Vector/i18n/bxr.json
new file mode 100644 (file)
index 0000000..64ff413
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bjargal",
+                       "Elvonudinium"
+               ]
+       },
+       "vector-action-addsection": "Һэдэб нэмэхэ",
+       "vector-action-delete": "Усадхаха",
+       "vector-action-move": "Зөөхэ",
+       "vector-view-create": "Үүдхэхэ",
+       "vector-view-edit": "Заһабарилха",
+       "vector-view-history": "Түүхые хараха",
+       "vector-view-view": "Уншаха",
+       "vector-view-viewsource": "эшэ үндэһэндэнь хандаха"
+}
diff --git a/skins/Vector/i18n/ca.json b/skins/Vector/i18n/ca.json
new file mode 100644 (file)
index 0000000..a371374
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Aleator",
+                       "Anskar",
+                       "Calak",
+                       "Paucabot",
+                       "Ssola",
+                       "Vriullop"
+               ]
+       },
+       "vector-action-addsection": "Nova secció",
+       "vector-action-delete": "Esborra",
+       "vector-action-move": "Reanomena",
+       "vector-action-protect": "Protegeix",
+       "vector-action-undelete": "Restaura",
+       "vector-action-unprotect": "Desprotegeix",
+       "vector-view-create": "Crea",
+       "vector-view-edit": "Modifica",
+       "vector-view-history": "Mostra l'historial",
+       "vector-view-view": "Mostra",
+       "vector-view-viewsource": "Mostra el codi",
+       "vector-more-actions": "Més"
+}
diff --git a/skins/Vector/i18n/cdo.json b/skins/Vector/i18n/cdo.json
new file mode 100644 (file)
index 0000000..2bdcb9f
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Yejianfei"
+               ]
+       },
+       "vector-action-addsection": "加話題",
+       "vector-action-delete": "刪掉咯",
+       "vector-action-move": "移動",
+       "vector-action-protect": "保護",
+       "vector-action-undelete": "取消刪除",
+       "vector-action-unprotect": "改變保護",
+       "vector-view-create": "創建",
+       "vector-view-edit": "修改",
+       "vector-view-history": "看歷史",
+       "vector-view-view": "讀",
+       "vector-view-viewsource": "看源代碼"
+}
diff --git a/skins/Vector/i18n/ce.json b/skins/Vector/i18n/ce.json
new file mode 100644 (file)
index 0000000..ed44124
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sasan700",
+                       "Умар"
+               ]
+       },
+       "skinname-vector": "Векторан",
+       "vector-action-addsection": "ТӀетоха хьедар",
+       "vector-action-delete": "ДӀаяккха",
+       "vector-action-move": "ЦӀе хийца",
+       "vector-action-protect": "Гlаролла дé",
+       "vector-action-undelete": "Меттахlоттадé",
+       "vector-action-unprotect": "ГӀароллех къаста",
+       "vector-view-create": "Кхоллар",
+       "vector-view-edit": "Нисъе",
+       "vector-view-history": "АгӀона хийцамаш",
+       "vector-view-view": "Éшар",
+       "vector-view-viewsource": "Билглонашка хьажа",
+       "vector-more-actions": "Кхин"
+}
diff --git a/skins/Vector/i18n/ceb.json b/skins/Vector/i18n/ceb.json
new file mode 100644 (file)
index 0000000..e2c631f
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Jordz"
+               ]
+       },
+       "vector-action-addsection": "Pagdugang og topiko",
+       "vector-action-delete": "Papasa",
+       "vector-action-move": "Ibalhin",
+       "vector-action-protect": "Protektahi",
+       "vector-action-undelete": "Ayaw papasa",
+       "vector-action-unprotect": "Ayaw protektahi",
+       "vector-view-create": "Himoa",
+       "vector-view-edit": "Usba",
+       "vector-view-history": "Tan-awa ang kaagi",
+       "vector-view-view": "Basaha",
+       "vector-view-viewsource": "Tan-awa ang ginikanan"
+}
diff --git a/skins/Vector/i18n/ckb.json b/skins/Vector/i18n/ckb.json
new file mode 100644 (file)
index 0000000..0db4670
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Asoxor",
+                       "Calak"
+               ]
+       },
+       "skinname-vector": "ڤێکتۆر",
+       "vector-action-addsection": "بابەت دابنێ",
+       "vector-action-delete": "بیسڕەوە",
+       "vector-action-move": "بیگوازەوە",
+       "vector-action-protect": "بیپارێزە",
+       "vector-action-undelete": "سڕینەوە بگەڕێنەوە",
+       "vector-action-unprotect": "پاراستن بگۆڕە",
+       "vector-view-create": "دروستکردن",
+       "vector-view-edit": "دەستکاریی بکە",
+       "vector-view-history": "مێژووەکەی ببینە",
+       "vector-view-view": "بیخوێنەوە",
+       "vector-view-viewsource": "سەرچاوەکەی ببینە",
+       "vector-more-actions": "زیاتر"
+}
diff --git a/skins/Vector/i18n/co.json b/skins/Vector/i18n/co.json
new file mode 100644 (file)
index 0000000..ad84420
--- /dev/null
@@ -0,0 +1,17 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Paulu"
+               ]
+       },
+       "vector-action-addsection": "Aghjunghje discussione",
+       "vector-action-delete": "Supprimà",
+       "vector-action-move": "Cullucà",
+       "vector-action-protect": "Pruteghje",
+       "vector-action-unprotect": "Cambià a prutezzione",
+       "vector-view-create": "Creà",
+       "vector-view-edit": "Mudificà",
+       "vector-view-history": "Vede a cronolugia",
+       "vector-view-view": "Leghje",
+       "vector-view-viewsource": "Vede a surghjente"
+}
diff --git a/skins/Vector/i18n/cps.json b/skins/Vector/i18n/cps.json
new file mode 100644 (file)
index 0000000..5c40641
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Capisano",
+                       "Oxyzen"
+               ]
+       },
+       "vector-action-addsection": "Magdugang sang topiko",
+       "vector-action-delete": "Panason",
+       "vector-action-move": "Isdogon",
+       "vector-action-protect": "Protektahan",
+       "vector-action-undelete": "Indi pag panason",
+       "vector-action-unprotect": "Islan ang proteksyon",
+       "vector-view-create": "Ubrahon",
+       "vector-view-edit": "Bag-uhon",
+       "vector-view-history": "Ipakita ang kasaysayan",
+       "vector-view-view": "Basahon",
+       "vector-view-viewsource": "Lantawon ang ginhalinan"
+}
diff --git a/skins/Vector/i18n/crh-cyrl.json b/skins/Vector/i18n/crh-cyrl.json
new file mode 100644 (file)
index 0000000..b49a884
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Don Alessandro"
+               ]
+       },
+       "vector-action-addsection": "Мевзу къош",
+       "vector-action-delete": "Ёкъ эт",
+       "vector-action-move": "Адыны денъиштир",
+       "vector-action-protect": "Къорчала",
+       "vector-action-undelete": "Янъыдан ярат",
+       "vector-action-unprotect": "Къорчалавны денъиштир",
+       "vector-view-create": "Ярат",
+       "vector-view-edit": "Денъиштир",
+       "vector-view-history": "Кечмишини косьтер",
+       "vector-view-view": "Окъу",
+       "vector-view-viewsource": "Менба кодуны косьтер"
+}
diff --git a/skins/Vector/i18n/crh-latn.json b/skins/Vector/i18n/crh-latn.json
new file mode 100644 (file)
index 0000000..ad8d58a
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Don Alessandro"
+               ]
+       },
+       "vector-action-addsection": "Mevzu qoş",
+       "vector-action-delete": "Yoq et",
+       "vector-action-move": "Adını deñiştir",
+       "vector-action-protect": "Qorçala",
+       "vector-action-undelete": "Yañıdan yarat",
+       "vector-action-unprotect": "Qorçalavnı deñiştir",
+       "vector-view-create": "Yarat",
+       "vector-view-edit": "Deñiştir",
+       "vector-view-history": "Keçmişini köster",
+       "vector-view-view": "Oqu",
+       "vector-view-viewsource": "Menba kodunı köster"
+}
diff --git a/skins/Vector/i18n/cs.json b/skins/Vector/i18n/cs.json
new file mode 100644 (file)
index 0000000..cdee3ac
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mormegil"
+               ]
+       },
+       "skinname-vector": "Vektor",
+       "vector.css": "/* Zde uvedené CSS bude ovlivňovat pouze styl „Vektor“ */",
+       "vector.js": "/* JavaScript pro uživatele používající vzhled „Vektor“ */",
+       "vector-action-addsection": "Přidat téma",
+       "vector-action-delete": "Smazat",
+       "vector-action-move": "Přesunout",
+       "vector-action-protect": "Zamknout",
+       "vector-action-undelete": "Obnovit",
+       "vector-action-unprotect": "Změnit zámek",
+       "vector-view-create": "Založit",
+       "vector-view-edit": "Editovat",
+       "vector-view-history": "Zobrazit historii",
+       "vector-view-view": "Číst",
+       "vector-view-viewsource": "Zobrazit zdrojový kód",
+       "vector-more-actions": "Další"
+}
diff --git a/skins/Vector/i18n/csb.json b/skins/Vector/i18n/csb.json
new file mode 100644 (file)
index 0000000..56d0930
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kaszeba",
+                       "Kuvaly"
+               ]
+       },
+       "vector-action-addsection": "Dodôj témã",
+       "vector-action-delete": "Rëmôj",
+       "vector-action-move": "Przeniesë",
+       "vector-action-protect": "Zazychrëjë",
+       "vector-action-undelete": "Doprowôdzë nazôd",
+       "vector-action-unprotect": "Òdzychrëjë",
+       "vector-view-create": "Ùsôdzë",
+       "vector-view-edit": "Edicëjô",
+       "vector-view-history": "Historëjô lopka",
+       "vector-view-view": "Czëtôj",
+       "vector-view-viewsource": "Zdrojowi tekst"
+}
diff --git a/skins/Vector/i18n/cu.json b/skins/Vector/i18n/cu.json
new file mode 100644 (file)
index 0000000..caad73c
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "ОйЛ"
+               ]
+       },
+       "vector-action-addsection": "новꙑ бєсѣдꙑ чѧсти сътворѥниѥ",
+       "vector-action-delete": "поничьжєниѥ",
+       "vector-action-move": "прѣимєнованиѥ",
+       "vector-action-protect": "ꙁабранѥниѥ",
+       "vector-action-unprotect": "иꙁмѣни ꙁабранѥниꙗ обраꙁъ",
+       "vector-view-create": "сътворѥниѥ",
+       "vector-view-edit": "исправи",
+       "vector-view-history": "їсторїꙗ",
+       "vector-view-view": "чьтѥниѥ",
+       "vector-view-viewsource": "страницѧ источьнъ обраꙁъ",
+       "vector-more-actions": "вѧщє"
+}
diff --git a/skins/Vector/i18n/cv.json b/skins/Vector/i18n/cv.json
new file mode 100644 (file)
index 0000000..6206af8
--- /dev/null
@@ -0,0 +1,17 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Chavash",
+                       "FLAGELLVM DEI"
+               ]
+       },
+       "vector-action-addsection": "Тема хуш",
+       "vector-action-delete": "Кăларса пăрах",
+       "vector-action-move": "Ятне улăштар",
+       "vector-action-protect": "Хӳтĕле",
+       "vector-view-create": "Çĕннине ту",
+       "vector-view-edit": "Тӳрлет",
+       "vector-view-history": "Кун-çул",
+       "vector-view-view": "Вула",
+       "vector-view-viewsource": "пуçламăш текста пăх"
+}
diff --git a/skins/Vector/i18n/cy.json b/skins/Vector/i18n/cy.json
new file mode 100644 (file)
index 0000000..6d79bae
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Lloffiwr"
+               ]
+       },
+       "vector-action-addsection": "Ychwanegu adran",
+       "vector-action-delete": "Dileu",
+       "vector-action-move": "Symud",
+       "vector-action-protect": "Diogelu",
+       "vector-action-undelete": "Adfer",
+       "vector-action-unprotect": "Newid y diogelwch",
+       "vector-view-create": "Dechrau",
+       "vector-view-edit": "Golygu",
+       "vector-view-history": "Gweld yr hanes",
+       "vector-view-view": "Darllen",
+       "vector-view-viewsource": "Dangos côd y dudalen"
+}
diff --git a/skins/Vector/i18n/da.json b/skins/Vector/i18n/da.json
new file mode 100644 (file)
index 0000000..ad56101
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Byrial",
+                       "Christian List",
+                       "Peter Alberti"
+               ]
+       },
+       "vector-action-addsection": "Nyt emne",
+       "vector-action-delete": "Slet",
+       "vector-action-move": "Flyt",
+       "vector-action-protect": "Beskyt",
+       "vector-action-undelete": "Gendan",
+       "vector-action-unprotect": "Ændr beskyttelse",
+       "vector-view-create": "Opret",
+       "vector-view-edit": "Redigér",
+       "vector-view-history": "Se historik",
+       "vector-view-view": "Læs",
+       "vector-view-viewsource": "Se kilden"
+}
diff --git a/skins/Vector/i18n/de.json b/skins/Vector/i18n/de.json
new file mode 100644 (file)
index 0000000..eefc7ab
--- /dev/null
@@ -0,0 +1,26 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kghbln",
+                       "Metalhead64",
+                       "The Evil IP address",
+                       "Umherirrender"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector-skin-desc": "Moderne Version von Monobook mit frischem Aussehen und vielen Verbesserungen an der Benutzerfreundlichkeit",
+       "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. */",
+       "vector.js": "/* Das folgende JavaScript wird für Benutzer der Vector-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */",
+       "vector-action-addsection": "Abschnitt hinzufügen",
+       "vector-action-delete": "Löschen",
+       "vector-action-move": "Verschieben",
+       "vector-action-protect": "Schützen",
+       "vector-action-undelete": "Wiederherstellen",
+       "vector-action-unprotect": "Seitenschutz ändern",
+       "vector-view-create": "Erstellen",
+       "vector-view-edit": "Bearbeiten",
+       "vector-view-history": "Versionsgeschichte",
+       "vector-view-view": "Lesen",
+       "vector-view-viewsource": "Quelltext anzeigen",
+       "vector-more-actions": "Mehr"
+}
diff --git a/skins/Vector/i18n/diq.json b/skins/Vector/i18n/diq.json
new file mode 100644 (file)
index 0000000..5ba4455
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Asmen",
+                       "Calak",
+                       "Erdemaslancan",
+                       "Mirzali"
+               ]
+       },
+       "skinname-vector": "Vektor",
+       "vector-action-addsection": "Mewzu vıraze",
+       "vector-action-delete": "Bestere",
+       "vector-action-move": "Bere",
+       "vector-action-protect": "Bışevekne",
+       "vector-action-undelete": "Esterıtışi peyser bıgê",
+       "vector-action-unprotect": "Starkerdışi bıvurne",
+       "vector-view-create": "Vıraze",
+       "vector-view-edit": "Bıvurne",
+       "vector-view-history": "Tarixê pele bıvêne",
+       "vector-view-view": "Bıwane",
+       "vector-view-viewsource": "Çımey bıvêne",
+       "vector-more-actions": "Zêde"
+}
diff --git a/skins/Vector/i18n/dsb.json b/skins/Vector/i18n/dsb.json
new file mode 100644 (file)
index 0000000..7220f36
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Michawiki"
+               ]
+       },
+       "vector-action-addsection": "Temu pśidaś",
+       "vector-action-delete": "Wulašowaś",
+       "vector-action-move": "Pśesunuś",
+       "vector-action-protect": "Šćitaś",
+       "vector-action-undelete": "Wótnowiś",
+       "vector-action-unprotect": "Šćit změniś",
+       "vector-view-create": "Napóraś",
+       "vector-view-edit": "Wobźěłaś",
+       "vector-view-history": "Wersije a awtory",
+       "vector-view-view": "Cytaś",
+       "vector-view-viewsource": "Žrědło se woglědaś"
+}
diff --git a/skins/Vector/i18n/dtp.json b/skins/Vector/i18n/dtp.json
new file mode 100644 (file)
index 0000000..a337040
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "FRANCIS5091",
+                       "FRANELYA"
+               ]
+       },
+       "vector-action-addsection": "Ruhangai piboboroson",
+       "vector-action-delete": "Pugaso",
+       "vector-action-move": "Poundoliho",
+       "vector-action-protect": "Tingoligai",
+       "vector-action-undelete": "Kada pugaso",
+       "vector-action-unprotect": "Alanai tingolig",
+       "vector-view-create": "Pomonsoi",
+       "vector-view-edit": "Idito",
+       "vector-view-history": "Intaai susuyan",
+       "vector-view-view": "Basao",
+       "vector-view-viewsource": "Intaai wowonod"
+}
diff --git a/skins/Vector/i18n/dv.json b/skins/Vector/i18n/dv.json
new file mode 100644 (file)
index 0000000..9e53056
--- /dev/null
@@ -0,0 +1,17 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ushau97"
+               ]
+       },
+       "vector-action-addsection": "ޚިޔާލެއް އިތުރުކުރައްވާ",
+       "vector-action-delete": "ފޮހެލައްވާ",
+       "vector-action-move": "ތަން ބަދަލުކުރައްވާ",
+       "vector-action-protect": "ދިފާޢުކުރައްވާ",
+       "vector-action-unprotect": "ދިފާޢުކުރުން ބަދަލުކުރައްވާ",
+       "vector-view-create": "ފަށްޓަވާ",
+       "vector-view-edit": "އުނިއިތުރު ގެންނަވާ",
+       "vector-view-history": "ޞަފްޙާގެ ތާރީޚް",
+       "vector-view-view": "ކިޔުއްވާ",
+       "vector-view-viewsource": "މަސްދަރު ބައްލަވާ"
+}
diff --git a/skins/Vector/i18n/ee.json b/skins/Vector/i18n/ee.json
new file mode 100644 (file)
index 0000000..2214755
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Natsubee"
+               ]
+       },
+       "vector-action-delete": "Tutui",
+       "vector-action-move": "Ɖɔli eƒe nɔƒe",
+       "vector-view-create": "Dze egɔme",
+       "vector-view-edit": "Trɔ asi le eŋu",
+       "vector-view-history": "Kpɔ xoxoawo",
+       "vector-view-view": "Xlẽ",
+       "vector-view-viewsource": "Kpɔ alesi woŋlɔe"
+}
diff --git a/skins/Vector/i18n/egl.json b/skins/Vector/i18n/egl.json
new file mode 100644 (file)
index 0000000..a819ab0
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Lévi"
+               ]
+       },
+       "vector-action-addsection": "Zûnta discusiòun",
+       "vector-action-delete": "Scanşèla",
+       "vector-action-move": "Spôsta",
+       "vector-action-protect": "Prutēz",
+       "vector-action-undelete": "Fà al recóper",
+       "vector-action-unprotect": "Câmbia la prutesiòun",
+       "vector-view-create": "Invèinta",
+       "vector-view-edit": "Mudéfica",
+       "vector-view-history": "Guêrda la stôria",
+       "vector-view-view": "Lēş",
+       "vector-view-viewsource": "Guêrda la surzéia",
+       "vector-more-actions": "Êter"
+}
diff --git a/skins/Vector/i18n/el.json b/skins/Vector/i18n/el.json
new file mode 100644 (file)
index 0000000..06fa36b
--- /dev/null
@@ -0,0 +1,26 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Calak",
+                       "Crazymadlover",
+                       "Evropi",
+                       "Omnipaedista",
+                       "Protnet",
+                       "ZaDiak"
+               ]
+       },
+       "vector.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Vector skin */",
+       "vector.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Vector skin */",
+       "vector-action-addsection": "Προσθήκη θέματος",
+       "vector-action-delete": "Διαγραφή",
+       "vector-action-move": "Μετακίνηση",
+       "vector-action-protect": "Προστασία",
+       "vector-action-undelete": "Επαναφορά",
+       "vector-action-unprotect": "Αλλαγή προστασίας",
+       "vector-view-create": "Δημιουργία",
+       "vector-view-edit": "Επεξεργασία",
+       "vector-view-history": "Προβολή ιστορικού",
+       "vector-view-view": "Ανάγνωση",
+       "vector-view-viewsource": "Προβολή κώδικα",
+       "vector-more-actions": "Περισσότερα"
+}
index 5851dce..949218e 100644 (file)
@@ -3,6 +3,7 @@
                "authors": []
        },
        "skinname-vector": "Vector",
+       "vector-skin-desc": "Modern version of MonoBook with fresh look and many usability improvements",
        "vector.css": "/* CSS placed here will affect users of the Vector skin */",
        "vector.js": "/* Any JavaScript here will be loaded for users using the Vector skin */",
        "vector-action-addsection": "Add topic",
diff --git a/skins/Vector/i18n/eo.json b/skins/Vector/i18n/eo.json
new file mode 100644 (file)
index 0000000..5f92fe8
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "KuboF",
+                       "Objectivesea",
+                       "Yekrats"
+               ]
+       },
+       "skinname-vector": "Vektoro",
+       "vector.css": "/* La jena CSS influos la paĝaspekton por uzantoj de la Vektora temo. */",
+       "vector.js": "/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Vektora temo. */",
+       "vector-action-addsection": "Aldoni temon",
+       "vector-action-delete": "Forigi",
+       "vector-action-move": "Alinomigi",
+       "vector-action-protect": "Protekti",
+       "vector-action-undelete": "Malforigi",
+       "vector-action-unprotect": "Ŝanĝi protektadon",
+       "vector-view-create": "Krei",
+       "vector-view-edit": "Redakti",
+       "vector-view-history": "Vidi historion",
+       "vector-view-view": "Legi",
+       "vector-view-viewsource": "Vidi fonton",
+       "vector-more-actions": "Pli"
+}
diff --git a/skins/Vector/i18n/es-formal.json b/skins/Vector/i18n/es-formal.json
new file mode 100644 (file)
index 0000000..a666c05
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "XanaG"
+               ]
+       },
+       "vector-view-edit": "Editar",
+       "vector-view-history": "Ver historial",
+       "vector-view-view": "Leer"
+}
diff --git a/skins/Vector/i18n/es.json b/skins/Vector/i18n/es.json
new file mode 100644 (file)
index 0000000..df7b397
--- /dev/null
@@ -0,0 +1,31 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Armando-Martin",
+                       "Crazymadlover",
+                       "Dalton2",
+                       "Fitoschido",
+                       "Locos epraix",
+                       "Manuelt15",
+                       "MarcoAurelio",
+                       "Miguel2706",
+                       "Platonides",
+                       "Vivaelcelta"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector.css": "/* El CSS colocado en esta página afectará a los usuarios que usen la apariencia \"Vector\" */",
+       "vector.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la apariencia Vector */",
+       "vector-action-addsection": "Nueva sección",
+       "vector-action-delete": "Borrar",
+       "vector-action-move": "Trasladar",
+       "vector-action-protect": "Proteger",
+       "vector-action-undelete": "Restaurar",
+       "vector-action-unprotect": "Cambiar protección",
+       "vector-view-create": "Crear",
+       "vector-view-edit": "Editar",
+       "vector-view-history": "Ver historial",
+       "vector-view-view": "Leer",
+       "vector-view-viewsource": "Ver código",
+       "vector-more-actions": "Más"
+}
diff --git a/skins/Vector/i18n/esu.json b/skins/Vector/i18n/esu.json
new file mode 100644 (file)
index 0000000..b32ac1d
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "82-145"
+               ]
+       },
+       "vector-action-move": "Atra cimirtuq",
+       "vector-view-view": "Naaqe"
+}
diff --git a/skins/Vector/i18n/et.json b/skins/Vector/i18n/et.json
new file mode 100644 (file)
index 0000000..718b93c
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ker",
+                       "Pikne",
+                       "WikedKentaur"
+               ]
+       },
+       "skinname-vector": "Vektor",
+       "vector-action-addsection": "Lisa teema",
+       "vector-action-delete": "Kustuta",
+       "vector-action-move": "Teisalda",
+       "vector-action-protect": "Kaitse",
+       "vector-action-undelete": "Taasta",
+       "vector-action-unprotect": "Muuda kaitset",
+       "vector-view-create": "Loo",
+       "vector-view-edit": "Muuda",
+       "vector-view-history": "Näita ajalugu",
+       "vector-view-view": "Vaata",
+       "vector-view-viewsource": "Vaata lähteteksti",
+       "vector-more-actions": "Veel"
+}
diff --git a/skins/Vector/i18n/eu.json b/skins/Vector/i18n/eu.json
new file mode 100644 (file)
index 0000000..888ff1e
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Unai Fdz. de Betoño",
+                       "Xabier Armendaritz"
+               ]
+       },
+       "vector-action-addsection": "Gehitu atala",
+       "vector-action-delete": "Ezabatu",
+       "vector-action-move": "Mugitu",
+       "vector-action-protect": "Babestu",
+       "vector-action-undelete": "Berreskuratu",
+       "vector-action-unprotect": "Babesa aldatu",
+       "vector-view-create": "Sortu",
+       "vector-view-edit": "Aldatu",
+       "vector-view-history": "Ikusi historia",
+       "vector-view-view": "Irakurri",
+       "vector-view-viewsource": "Kodea ikusia"
+}
diff --git a/skins/Vector/i18n/ext.json b/skins/Vector/i18n/ext.json
new file mode 100644 (file)
index 0000000..1cf9a4f
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Better"
+               ]
+       },
+       "vector-action-addsection": "Añiil tema",
+       "vector-action-delete": "Esborral",
+       "vector-action-move": "Mual",
+       "vector-action-protect": "Protegel",
+       "vector-action-undelete": "Esborral",
+       "vector-action-unprotect": "Esprotegel",
+       "vector-view-create": "Crial",
+       "vector-view-edit": "Eital",
+       "vector-view-history": "Guipal estorial",
+       "vector-view-view": "Leyel",
+       "vector-view-viewsource": "Guipal cóigu"
+}
diff --git a/skins/Vector/i18n/fa.json b/skins/Vector/i18n/fa.json
new file mode 100644 (file)
index 0000000..c18eba4
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Calak",
+                       "Ebraminio",
+                       "Huji",
+                       "Reza1615",
+                       "Zack90"
+               ]
+       },
+       "skinname-vector": "برداری",
+       "vector-action-addsection": "افزودن بخش",
+       "vector-action-delete": "حذف",
+       "vector-action-move": "انتقال",
+       "vector-action-protect": "محافظت",
+       "vector-action-undelete": "احیا",
+       "vector-action-unprotect": "تغییر سطح حفاظت",
+       "vector-view-create": "ایجاد",
+       "vector-view-edit": "ویرایش",
+       "vector-view-history": "نمایش تاریخچه",
+       "vector-view-view": "خواندن",
+       "vector-view-viewsource": "نمایش مبدأ",
+       "vector-more-actions": "بیشتر"
+}
diff --git a/skins/Vector/i18n/ff.json b/skins/Vector/i18n/ff.json
new file mode 100644 (file)
index 0000000..ac3ee5b
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ibrahima"
+               ]
+       },
+       "vector-action-addsection": "Ɓeydi toɓɓere",
+       "vector-action-move": "Dirtin",
+       "vector-view-create": "Sos",
+       "vector-view-edit": "Taƴto",
+       "vector-view-history": "Yiyto aslol",
+       "vector-view-view": "Tar",
+       "vector-view-viewsource": "Yiyto ɗaɗol"
+}
diff --git a/skins/Vector/i18n/fi.json b/skins/Vector/i18n/fi.json
new file mode 100644 (file)
index 0000000..7533689
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Crt",
+                       "Nedergard",
+                       "Nike",
+                       "Pxos"
+               ]
+       },
+       "vector.css": "/* Tämä sivu sisältää Vector-ulkoasua muuttavia tyylejä. */",
+       "vector.js": "/* Tämän sivun JavaScript-koodi liitetään Vector-tyyliin */",
+       "vector-action-addsection": "Lisää aihe",
+       "vector-action-delete": "Poista",
+       "vector-action-move": "Siirrä",
+       "vector-action-protect": "Suojaa",
+       "vector-action-undelete": "Palauta",
+       "vector-action-unprotect": "Muuta suojausta",
+       "vector-view-create": "Luo",
+       "vector-view-edit": "Muokkaa",
+       "vector-view-history": "Näytä historia",
+       "vector-view-view": "Lue",
+       "vector-view-viewsource": "Näytä lähdekoodi",
+       "vector-more-actions": "Muut"
+}
diff --git a/skins/Vector/i18n/fit.json b/skins/Vector/i18n/fit.json
new file mode 100644 (file)
index 0000000..46089ae
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mestos"
+               ]
+       },
+       "vector-action-addsection": "Lissää aine",
+       "vector-action-delete": "Ota poies",
+       "vector-action-move": "Siirä",
+       "vector-action-protect": "Suojaa",
+       "vector-action-undelete": "Pane takashiin",
+       "vector-action-unprotect": "Muuta suojaa",
+       "vector-view-create": "Luo",
+       "vector-view-edit": "Mookkaa",
+       "vector-view-history": "Näytä histuuria",
+       "vector-view-view": "Lue",
+       "vector-view-viewsource": "Näytä lähekooti"
+}
diff --git a/skins/Vector/i18n/fo.json b/skins/Vector/i18n/fo.json
new file mode 100644 (file)
index 0000000..46f272c
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Diupwijk",
+                       "EileenSanda"
+               ]
+       },
+       "vector-action-addsection": "Nýtt evni",
+       "vector-action-delete": "Strika",
+       "vector-action-move": "Flyt",
+       "vector-action-protect": "Friða",
+       "vector-action-undelete": "Endurstovna",
+       "vector-action-unprotect": "Broyt verju",
+       "vector-view-create": "Stovna",
+       "vector-view-edit": "Rætta",
+       "vector-view-history": "Vís søgu",
+       "vector-view-view": "Les",
+       "vector-view-viewsource": "Vís keldu",
+       "vector-more-actions": "Meira"
+}
diff --git a/skins/Vector/i18n/fr.json b/skins/Vector/i18n/fr.json
new file mode 100644 (file)
index 0000000..623fda8
--- /dev/null
@@ -0,0 +1,28 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Akeron",
+                       "Crochet.david",
+                       "DavidL",
+                       "Gomoko",
+                       "Jean-Frédéric",
+                       "Od1n"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector-skin-desc": "Version moderne de MonoBook avec un aspect rajeuni et beaucoup d’améliorations ergonomiques",
+       "vector.css": "/* Le CSS placé ici affectera les utilisateurs de l’habillage Vector. */",
+       "vector.js": "/* Tout code JavaScript placé ici sera chargé pour les utilisateurs de l’habillage Vector */",
+       "vector-action-addsection": "Ajouter un sujet",
+       "vector-action-delete": "Supprimer",
+       "vector-action-move": "Renommer",
+       "vector-action-protect": "Protéger",
+       "vector-action-undelete": "Rétablir",
+       "vector-action-unprotect": "Changer la protection",
+       "vector-view-create": "Créer",
+       "vector-view-edit": "Modifier",
+       "vector-view-history": "Historique",
+       "vector-view-view": "Lire",
+       "vector-view-viewsource": "Voir la source",
+       "vector-more-actions": "Plus"
+}
diff --git a/skins/Vector/i18n/frc.json b/skins/Vector/i18n/frc.json
new file mode 100644 (file)
index 0000000..f13d8ce
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ebe123"
+               ]
+       },
+       "vector-action-delete": "Supprimer",
+       "vector-action-protect": "Protéger"
+}
diff --git a/skins/Vector/i18n/frp.json b/skins/Vector/i18n/frp.json
new file mode 100644 (file)
index 0000000..4f0c3bc
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "ChrisPtDe"
+               ]
+       },
+       "skinname-vector": "Vèctor",
+       "vector.css": "/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « Vèctor ». */",
+       "vector.js": "/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « Vèctor ». */",
+       "vector-action-addsection": "Apondre na chousa",
+       "vector-action-delete": "Suprimar",
+       "vector-action-move": "Dèplaciér",
+       "vector-action-protect": "Protègiér",
+       "vector-action-undelete": "Refâre",
+       "vector-action-unprotect": "Changiér la protèccion",
+       "vector-view-create": "Fâre",
+       "vector-view-edit": "Changiér",
+       "vector-view-history": "Vêre l’historico",
+       "vector-view-view": "Liére",
+       "vector-view-viewsource": "Vêre lo tèxto sôrsa"
+}
diff --git a/skins/Vector/i18n/frr.json b/skins/Vector/i18n/frr.json
new file mode 100644 (file)
index 0000000..d63223a
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Murma174",
+                       "Pyt"
+               ]
+       },
+       "vector-action-addsection": "Nei kirew began",
+       "vector-action-delete": "Strik",
+       "vector-action-move": "Fersküüw",
+       "vector-action-protect": "Seekre",
+       "vector-action-undelete": "Weder iinstel",
+       "vector-action-unprotect": "Sidjenseekerhaid",
+       "vector-view-create": "Maage",
+       "vector-view-edit": "Bewerke",
+       "vector-view-history": "Ferluup uunluke",
+       "vector-view-view": "Lees",
+       "vector-view-viewsource": "Kweltekst uunluke"
+}
diff --git a/skins/Vector/i18n/fur.json b/skins/Vector/i18n/fur.json
new file mode 100644 (file)
index 0000000..9df1846
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Klenje",
+                       "Tocaibon"
+               ]
+       },
+       "vector-action-addsection": "Gnove sezion",
+       "vector-action-delete": "Elimine",
+       "vector-action-move": "Môf",
+       "vector-action-protect": "Protêç",
+       "vector-action-undelete": "Recupere",
+       "vector-action-unprotect": "Gambie la protezion",
+       "vector-view-create": "Cree",
+       "vector-view-edit": "Cambie",
+       "vector-view-history": "Cjale il storic",
+       "vector-view-view": "Lei",
+       "vector-view-viewsource": "Cjale risultive"
+}
diff --git a/skins/Vector/i18n/fy.json b/skins/Vector/i18n/fy.json
new file mode 100644 (file)
index 0000000..328193d
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kening Aldgilles",
+                       "SK-luuut"
+               ]
+       },
+       "vector-action-delete": "Fuortsmite",
+       "vector-action-move": "Werneam",
+       "vector-action-protect": "Beskermje",
+       "vector-action-undelete": "Tebeksette",
+       "vector-action-unprotect": "Beskerming fuorthelje",
+       "vector-view-create": "Oanmeitsje",
+       "vector-view-edit": "Wizigje",
+       "vector-view-history": "Skiednis sjen litte",
+       "vector-view-view": "Lês",
+       "vector-view-viewsource": "Besjoch de boarne"
+}
diff --git a/skins/Vector/i18n/ga.json b/skins/Vector/i18n/ga.json
new file mode 100644 (file)
index 0000000..81f4caa
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kscanne",
+                       "Kwekubo",
+                       "Moydow"
+               ]
+       },
+       "skinname-vector": "Veicteoir",
+       "vector-action-addsection": "Cuir topaic leis",
+       "vector-action-delete": "Scrios",
+       "vector-action-move": "Athainmnigh",
+       "vector-action-protect": "Glasáil",
+       "vector-action-undelete": "Díscrios",
+       "vector-action-unprotect": "Díghlasáil",
+       "vector-view-create": "Cruthaigh",
+       "vector-view-edit": "Athraigh an lch seo",
+       "vector-view-history": "Féach ar stair",
+       "vector-view-view": "Léigh",
+       "vector-view-viewsource": "Féach ar fhoinse"
+}
diff --git a/skins/Vector/i18n/gag.json b/skins/Vector/i18n/gag.json
new file mode 100644 (file)
index 0000000..4f45473
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Cuman",
+                       "Emperyan"
+               ]
+       },
+       "vector-view-edit": "Diiştir",
+       "vector-view-view": "Oku"
+}
diff --git a/skins/Vector/i18n/gan-hans.json b/skins/Vector/i18n/gan-hans.json
new file mode 100644 (file)
index 0000000..5c0db67
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Liangent",
+                       "Xiaomingyan"
+               ]
+       },
+       "vector-action-addsection": "添主题",
+       "vector-action-delete": "删吥",
+       "vector-action-move": "移吥",
+       "vector-action-protect": "护到",
+       "vector-action-undelete": "望下删吥𠮶页面",
+       "vector-action-unprotect": "更改保护",
+       "vector-view-create": "创建",
+       "vector-view-edit": "编辑",
+       "vector-view-history": "望下历史",
+       "vector-view-view": "读",
+       "vector-view-viewsource": "望下原始码"
+}
diff --git a/skins/Vector/i18n/gan-hant.json b/skins/Vector/i18n/gan-hant.json
new file mode 100644 (file)
index 0000000..ceb23b5
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Symane"
+               ]
+       },
+       "vector-action-addsection": "添主題",
+       "vector-action-delete": "刪吥",
+       "vector-action-move": "移吥",
+       "vector-action-protect": "護到",
+       "vector-action-undelete": "望下刪吥嗰頁面",
+       "vector-action-unprotect": "解除保護",
+       "vector-view-create": "創建",
+       "vector-view-edit": "編輯",
+       "vector-view-history": "望下歷史",
+       "vector-view-view": "讀",
+       "vector-view-viewsource": "望下原始碼"
+}
diff --git a/skins/Vector/i18n/gd.json b/skins/Vector/i18n/gd.json
new file mode 100644 (file)
index 0000000..04fa42b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Akerbeltz",
+                       "GunChleoc"
+               ]
+       },
+       "vector-skin-desc": "Tionndadh ùr-nodha de MonoBook le dreach ùr air 's iomadh leasachadh air a sho-chleachdachd",
+       "vector-action-addsection": "Cuir ris cuspair",
+       "vector-action-delete": "Sguab às",
+       "vector-action-move": "Gluais",
+       "vector-action-protect": "Dìon",
+       "vector-action-undelete": "Neo-dhèan an sguabadh às",
+       "vector-action-unprotect": "Atharraich an dìon",
+       "vector-view-create": "Cruthaich",
+       "vector-view-edit": "Deasaich",
+       "vector-view-history": "Seall an eachdraidh",
+       "vector-view-view": "Leugh",
+       "vector-view-viewsource": "Seall an tùs",
+       "vector-more-actions": "Barrachd"
+}
diff --git a/skins/Vector/i18n/gl.json b/skins/Vector/i18n/gl.json
new file mode 100644 (file)
index 0000000..de19c39
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Elisardojm",
+                       "Toliño",
+                       "Vivaelcelta"
+               ]
+       },
+       "vector.css": "/* O CSS que se coloque aquí afectará a quen use a aparencia Vector */",
+       "vector.js": "/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Vector */",
+       "vector-action-addsection": "Nova sección",
+       "vector-action-delete": "Borrar",
+       "vector-action-move": "Mover",
+       "vector-action-protect": "Protexer",
+       "vector-action-undelete": "Restaurar",
+       "vector-action-unprotect": "Cambiar a protección",
+       "vector-view-create": "Crear",
+       "vector-view-edit": "Editar",
+       "vector-view-history": "Ver o historial",
+       "vector-view-view": "Ler",
+       "vector-view-viewsource": "Ver o código fonte",
+       "vector-more-actions": "Máis"
+}
diff --git a/skins/Vector/i18n/gom-deva.json b/skins/Vector/i18n/gom-deva.json
new file mode 100644 (file)
index 0000000..044d43c
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Darshan kandolkar",
+                       "Pooja tople",
+                       "Sanket.prabhu26",
+                       "Supriya kankumbikar"
+               ]
+       },
+       "vector-action-addsection": "माथाळो दियात",
+       "vector-action-delete": "काडून उडयात",
+       "vector-action-move": "दुसरेकडे व्हरात",
+       "vector-action-protect": "राख",
+       "vector-view-create": "निर्माण कर",
+       "vector-view-edit": "बदल",
+       "vector-view-history": "इतिहास पळेयात",
+       "vector-view-view": "वाचचें",
+       "vector-view-viewsource": "उगम पळेयात"
+}
diff --git a/skins/Vector/i18n/gom-latn.json b/skins/Vector/i18n/gom-latn.json
new file mode 100644 (file)
index 0000000..37a3117
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Isidore Dantas",
+                       "The Discoverer"
+               ]
+       },
+       "vector-action-addsection": "Vixoi zodd",
+       "vector-action-delete": "Kadd",
+       "vector-action-move": "Zago bodol",
+       "vector-action-protect": "Rakh",
+       "vector-view-create": "Roch",
+       "vector-view-edit": "Sudar",
+       "vector-view-history": "Itihas polloi",
+       "vector-view-view": "Vach",
+       "vector-view-viewsource": "Mull polloi",
+       "vector-more-actions": "Anik"
+}
diff --git a/skins/Vector/i18n/grc.json b/skins/Vector/i18n/grc.json
new file mode 100644 (file)
index 0000000..c22ebf1
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Crazymadlover",
+                       "Omnipaedista"
+               ]
+       },
+       "vector-action-addsection": "Θέμα προστιθέναι",
+       "vector-action-delete": "Σβεννύναι",
+       "vector-action-move": "Κινεῖν",
+       "vector-action-protect": "Φυλάττειν",
+       "vector-action-undelete": "Ἀποκαθιστάναι",
+       "vector-action-unprotect": "Ἄλλαξον τὴν φύλαξιν",
+       "vector-view-create": "Ποιεῖν",
+       "vector-view-edit": "Μεταγράφειν",
+       "vector-view-history": "Ἱστορίαν ὁρᾶν",
+       "vector-view-view": "Ἀναγνῶναι",
+       "vector-view-viewsource": "Ὁρᾶν τὴν πηγήν"
+}
diff --git a/skins/Vector/i18n/gsw.json b/skins/Vector/i18n/gsw.json
new file mode 100644 (file)
index 0000000..90b3e73
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Als-Holder"
+               ]
+       },
+       "vector-action-addsection": "Abschnitt zuefiege",
+       "vector-action-delete": "Lesche",
+       "vector-action-move": "Verschiebe",
+       "vector-action-protect": "Schitze",
+       "vector-action-undelete": "Widerhärstelle",
+       "vector-action-unprotect": "Syteschutz ändere",
+       "vector-view-create": "Aalege",
+       "vector-view-edit": "Bearbeite",
+       "vector-view-history": "Versionsgschicht",
+       "vector-view-view": "Läse",
+       "vector-view-viewsource": "Quälltext aaluege"
+}
diff --git a/skins/Vector/i18n/gu.json b/skins/Vector/i18n/gu.json
new file mode 100644 (file)
index 0000000..6d7dc1d
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Aritra",
+                       "Ashok modhvadia",
+                       "Dsvyas"
+               ]
+       },
+       "vector-action-addsection": "નવી ચર્ચા",
+       "vector-action-delete": "રદ કરો",
+       "vector-action-move": "ખસેડો",
+       "vector-action-protect": "સુરક્ષિત કરો",
+       "vector-action-undelete": "રદ કરેલું પાછું વાળો",
+       "vector-action-unprotect": "સુરક્ષા બદલો",
+       "vector-view-create": "બનાવો",
+       "vector-view-edit": "ફેરફાર કરો",
+       "vector-view-history": "ઇતિહાસ જુઓ",
+       "vector-view-view": "વાંચો",
+       "vector-view-viewsource": "સ્રોત જુઓ"
+}
diff --git a/skins/Vector/i18n/guc.json b/skins/Vector/i18n/guc.json
new file mode 100644 (file)
index 0000000..e69fac5
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Maor X"
+               ]
+       },
+       "vector-action-delete": "Ojuichajaa",
+       "vector-action-move": "Ansülaa",
+       "vector-action-protect": "Eisalajaa",
+       "vector-view-create": "Akumajaa",
+       "vector-view-edit": "Anaataa",
+       "vector-view-history": "Achikii a'wanajaayamaajatü",
+       "vector-view-view": "Aashaje'eraa",
+       "vector-view-viewsource": "Anüliaa eejeetülee"
+}
diff --git a/skins/Vector/i18n/gv.json b/skins/Vector/i18n/gv.json
new file mode 100644 (file)
index 0000000..9be429f
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "MacTire02",
+                       "Shimmin Beg"
+               ]
+       },
+       "vector-action-addsection": "Cur cooish noa rish",
+       "vector-action-delete": "Scryss",
+       "vector-action-move": "Scugh",
+       "vector-action-protect": "Coadee",
+       "vector-action-undelete": "Jee-scryss",
+       "vector-action-unprotect": "Caghlaa coadey",
+       "vector-view-create": "Croo",
+       "vector-view-edit": "Reagh",
+       "vector-view-history": "Jeeagh er shennaghys",
+       "vector-view-view": "Lhaih",
+       "vector-view-viewsource": "Jeeagh er bun"
+}
diff --git a/skins/Vector/i18n/ha.json b/skins/Vector/i18n/ha.json
new file mode 100644 (file)
index 0000000..77e4975
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "vector-action-delete": "Soke",
+       "vector-action-move": "Gusarwa",
+       "vector-action-protect": "A kare",
+       "vector-view-create": "Ƙirƙira"
+}
diff --git a/skins/Vector/i18n/hak.json b/skins/Vector/i18n/hak.json
new file mode 100644 (file)
index 0000000..ed0c0cb
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Anson2812",
+                       "Jetlag"
+               ]
+       },
+       "vector-action-addsection": "加入話題",
+       "vector-action-delete": "刪除",
+       "vector-action-move": "移動",
+       "vector-action-protect": "保護",
+       "vector-action-undelete": "恢復",
+       "vector-action-unprotect": "更改保護",
+       "vector-view-create": "建立",
+       "vector-view-edit": "編寫",
+       "vector-view-history": "查看歷史",
+       "vector-view-view": "閱讀",
+       "vector-view-viewsource": "查看源碼"
+}
diff --git a/skins/Vector/i18n/haw.json b/skins/Vector/i18n/haw.json
new file mode 100644 (file)
index 0000000..98e2919
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kolonahe"
+               ]
+       },
+       "vector-action-addsection": "Hoʻohui kumuhana",
+       "vector-action-delete": "Holoi",
+       "vector-action-move": "E hoʻoneʻe",
+       "vector-action-protect": "E hoʻomalu",
+       "vector-action-undelete": "Holoiʻole",
+       "vector-action-unprotect": "E hoʻololi i ka hoʻomalu",
+       "vector-view-create": "Haku",
+       "vector-view-edit": "Hoʻololi",
+       "vector-view-history": "Nānā i ka mōʻaukala",
+       "vector-view-view": "Heluhelu",
+       "vector-view-viewsource": "Nānā i ke kumu"
+}
diff --git a/skins/Vector/i18n/he.json b/skins/Vector/i18n/he.json
new file mode 100644 (file)
index 0000000..08a9023
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Amire80",
+                       "Rotemliss"
+               ]
+       },
+       "skinname-vector": "וקטור",
+       "vector.css": "/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Vector בלבד */",
+       "vector.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Vector */",
+       "vector-action-addsection": "הוספת נושא",
+       "vector-action-delete": "מחיקה",
+       "vector-action-move": "העברה",
+       "vector-action-protect": "הגנה",
+       "vector-action-undelete": "ביטול מחיקה",
+       "vector-action-unprotect": "שינוי הגנה",
+       "vector-view-create": "יצירה",
+       "vector-view-edit": "עריכה",
+       "vector-view-history": "הצגת היסטוריה",
+       "vector-view-view": "קריאה",
+       "vector-view-viewsource": "הצגת מקור",
+       "vector-more-actions": "עוד"
+}
diff --git a/skins/Vector/i18n/hi.json b/skins/Vector/i18n/hi.json
new file mode 100644 (file)
index 0000000..5b5f56b
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Siddhartha Ghai",
+                       "आलोक",
+                       "रोहित रावत"
+               ]
+       },
+       "vector-action-addsection": "विषय जोड़ें",
+       "vector-action-delete": "हटाएँ",
+       "vector-action-move": "स्थानांतरण करें",
+       "vector-action-protect": "सुरक्षित करें",
+       "vector-action-undelete": "हटाना वापस लें",
+       "vector-action-unprotect": "सुरक्षा बदलें",
+       "vector-view-create": "बनाएँ",
+       "vector-view-edit": "सम्पादन",
+       "vector-view-history": "इतिहास देखें",
+       "vector-view-view": "पढ़ें",
+       "vector-view-viewsource": "स्रोत देखें"
+}
diff --git a/skins/Vector/i18n/hif-latn.json b/skins/Vector/i18n/hif-latn.json
new file mode 100644 (file)
index 0000000..df37b3e
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Girmitya",
+                       "Thakurji"
+               ]
+       },
+       "vector-action-addsection": "Topic jorro",
+       "vector-action-delete": "Mitao",
+       "vector-action-move": "Naam badlo",
+       "vector-action-protect": "Bachao",
+       "vector-action-undelete": "Pahile jaise karo",
+       "vector-action-unprotect": "Surakchha ke badlo",
+       "vector-view-create": "Banao",
+       "vector-view-edit": "Badlo",
+       "vector-view-history": "Itihaas dekho",
+       "vector-view-view": "Parrho",
+       "vector-view-viewsource": "Source dekho"
+}
diff --git a/skins/Vector/i18n/hil.json b/skins/Vector/i18n/hil.json
new file mode 100644 (file)
index 0000000..304f8ac
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Anjoeli9806"
+               ]
+       },
+       "vector-action-addsection": "Magdugang sang topiko",
+       "vector-action-delete": "Panason",
+       "vector-action-move": "Saylohon",
+       "vector-action-protect": "Pangapinan",
+       "vector-action-undelete": "Dulaon ang pagpanas",
+       "vector-action-unprotect": "Ilisan ang pagpangapin",
+       "vector-view-create": "Himuon",
+       "vector-view-edit": "Ilisan",
+       "vector-view-history": "Lantawon ang kasaysayan",
+       "vector-view-view": "Magbasa",
+       "vector-view-viewsource": "Lantawon ang ginhalinan"
+}
diff --git a/skins/Vector/i18n/hr.json b/skins/Vector/i18n/hr.json
new file mode 100644 (file)
index 0000000..1887ee5
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ex13",
+                       "Tivek"
+               ]
+       },
+       "vector-action-addsection": "Dodaj temu",
+       "vector-action-delete": "Izbriši",
+       "vector-action-move": "Premjesti",
+       "vector-action-protect": "Zaštiti",
+       "vector-action-undelete": "Vrati",
+       "vector-action-unprotect": "Promijeni zaštitu",
+       "vector-view-create": "Započni",
+       "vector-view-edit": "Uredi",
+       "vector-view-history": "Vidi stare izmjene",
+       "vector-view-view": "Čitaj",
+       "vector-view-viewsource": "Vidi izvor"
+}
diff --git a/skins/Vector/i18n/hrx.json b/skins/Vector/i18n/hrx.json
new file mode 100644 (file)
index 0000000..0a45056
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Paul Beppler"
+               ]
+       },
+       "vector-action-addsection": "Abschnitt hinzufüche",
+       "vector-action-delete": "Lösche",
+       "vector-action-move": "Verschiebe",
+       "vector-action-protect": "Schütz",
+       "vector-action-undelete": "Wiederherstelle",
+       "vector-action-unprotect": "Seiteschutz ännre",
+       "vector-view-create": "Erstell",
+       "vector-view-edit": "Beoorbeite",
+       "vector-view-history": "Versionsgeschicht",
+       "vector-view-view": "Lese",
+       "vector-view-viewsource": "Quelltext oonzeiche"
+}
diff --git a/skins/Vector/i18n/hsb.json b/skins/Vector/i18n/hsb.json
new file mode 100644 (file)
index 0000000..a46105c
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Michawiki"
+               ]
+       },
+       "vector-action-addsection": "Temu přidać",
+       "vector-action-delete": "wušmórnyć",
+       "vector-action-move": "přesunyć",
+       "vector-action-protect": "škitać",
+       "vector-action-undelete": "Wobnowić",
+       "vector-action-unprotect": "Škit wotstronić",
+       "vector-view-create": "Wutworić",
+       "vector-view-edit": "Wobdźěłać",
+       "vector-view-history": "Stawizny",
+       "vector-view-view": "Čitać",
+       "vector-view-viewsource": "Žórło sej wobhladać",
+       "vector-more-actions": "Wjace"
+}
diff --git a/skins/Vector/i18n/hsn.json b/skins/Vector/i18n/hsn.json
new file mode 100644 (file)
index 0000000..99d8dec
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "YulouCN"
+               ]
+       },
+       "vector-view-edit": "增改",
+       "vector-view-history": "履歷",
+       "vector-view-view": "讀"
+}
diff --git a/skins/Vector/i18n/ht.json b/skins/Vector/i18n/ht.json
new file mode 100644 (file)
index 0000000..f71167a
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Boukman",
+                       "Internoob",
+                       "Masterches"
+               ]
+       },
+       "vector-action-addsection": "Ajoute yon sijè",
+       "vector-action-delete": "Efase",
+       "vector-action-move": "Chanje non",
+       "vector-action-protect": "Pwoteje",
+       "vector-action-undelete": "Retabli",
+       "vector-action-unprotect": "Pa pwoteje",
+       "vector-view-create": "Kreye",
+       "vector-view-edit": "Modifye",
+       "vector-view-history": "Gade istorik",
+       "vector-view-view": "Li",
+       "vector-view-viewsource": "Wè kòd tèks sa a"
+}
diff --git a/skins/Vector/i18n/hu-formal.json b/skins/Vector/i18n/hu-formal.json
new file mode 100644 (file)
index 0000000..4c9fcad
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Tacsipacsi"
+               ]
+       },
+       "vector-action-addsection": "Új téma nyitása",
+       "vector-action-delete": "Törlés",
+       "vector-action-move": "Átnevezés",
+       "vector-action-protect": "Lapvédelem",
+       "vector-action-undelete": "Visszaállítás",
+       "vector-action-unprotect": "Védelem módosítása",
+       "vector-view-create": "Létrehozás",
+       "vector-view-edit": "Szerkesztés",
+       "vector-view-history": "Laptörténet",
+       "vector-view-view": "Olvasás",
+       "vector-view-viewsource": "A lap forrása"
+}
diff --git a/skins/Vector/i18n/hu.json b/skins/Vector/i18n/hu.json
new file mode 100644 (file)
index 0000000..a144ece
--- /dev/null
@@ -0,0 +1,26 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bdamokos",
+                       "Dani",
+                       "Dj",
+                       "Misibacsi",
+                       "Tacsipacsi",
+                       "Tgr"
+               ]
+       },
+       "vector.css": "/* Az ide elhelyezett CSS hatással lesz a Vector felület használóira */",
+       "vector.js": "/* A Vector felületet használó szerkesztők számára betöltendő JavaScriptek */",
+       "vector-action-addsection": "Új téma nyitása",
+       "vector-action-delete": "Törlés",
+       "vector-action-move": "Átnevezés",
+       "vector-action-protect": "Lapvédelem",
+       "vector-action-undelete": "Visszaállítás",
+       "vector-action-unprotect": "Védelem módosítása",
+       "vector-view-create": "Létrehozás",
+       "vector-view-edit": "Szerkesztés",
+       "vector-view-history": "Laptörténet",
+       "vector-view-view": "Olvasás",
+       "vector-view-viewsource": "A lap forrása",
+       "vector-more-actions": "Több"
+}
diff --git a/skins/Vector/i18n/hy.json b/skins/Vector/i18n/hy.json
new file mode 100644 (file)
index 0000000..f8b322d
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Teak",
+                       "Vadgt",
+                       "Xelgen"
+               ]
+       },
+       "skinname-vector": "Սովորական",
+       "vector-action-addsection": "Ավելացնել քննարկում",
+       "vector-action-delete": "Ջնջել",
+       "vector-action-move": "Տեղափոխել այս էջը",
+       "vector-action-protect": "Պաշտպանել",
+       "vector-action-undelete": "Վերականգնել",
+       "vector-action-unprotect": "Փոխել պաշտպանումը",
+       "vector-view-create": "Ստեղծել",
+       "vector-view-edit": "Խմբագրել",
+       "vector-view-history": "Դիտել պատմությունը",
+       "vector-view-view": "Կարդալ",
+       "vector-view-viewsource": "Դիտել ելատեքստը"
+}
diff --git a/skins/Vector/i18n/ia.json b/skins/Vector/i18n/ia.json
new file mode 100644 (file)
index 0000000..c1281fc
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "McDutchie"
+               ]
+       },
+       "vector-skin-desc": "Version moderne de MonoBook con aspecto rejuvenescite e multe meliorationes de usabilitate.",
+       "vector.css": "/* Le CSS placiate hic afficera le usatores del apparentia Vector */",
+       "vector.js": "/* Omne JavaScript hic se executara pro le usatores del apparentia Vector */",
+       "vector-action-addsection": "Adder topico",
+       "vector-action-delete": "Deler",
+       "vector-action-move": "Renominar",
+       "vector-action-protect": "Proteger",
+       "vector-action-undelete": "Restaurar",
+       "vector-action-unprotect": "Cambiar protection",
+       "vector-view-create": "Crear",
+       "vector-view-edit": "Modificar",
+       "vector-view-history": "Vider historia",
+       "vector-view-view": "Leger",
+       "vector-view-viewsource": "Vider texto fonte",
+       "vector-more-actions": "Plus"
+}
diff --git a/skins/Vector/i18n/id.json b/skins/Vector/i18n/id.json
new file mode 100644 (file)
index 0000000..3116632
--- /dev/null
@@ -0,0 +1,26 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Arifin.wijaya",
+                       "Bennylin",
+                       "Farras",
+                       "Iwan Novirion",
+                       "Rex"
+               ]
+       },
+       "skinname-vector": "Vektor",
+       "vector.css": "/* CSS nan ado di siko diterapkan pado kulik Vektor. */",
+       "vector.js": "/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Vector */",
+       "vector-action-addsection": "Bagian baru",
+       "vector-action-delete": "Hapus",
+       "vector-action-move": "Pindahkan",
+       "vector-action-protect": "Lindungi",
+       "vector-action-undelete": "Pembatalan penghapusan",
+       "vector-action-unprotect": "Ubah perlindungan",
+       "vector-view-create": "Buat",
+       "vector-view-edit": "Sunting",
+       "vector-view-history": "Versi terdahulu",
+       "vector-view-view": "Baca",
+       "vector-view-viewsource": "Lihat sumber",
+       "vector-more-actions": "Lainnya"
+}
diff --git a/skins/Vector/i18n/ie.json b/skins/Vector/i18n/ie.json
new file mode 100644 (file)
index 0000000..259b88b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Makuba",
+                       "Renan"
+               ]
+       },
+       "vector.css": "/* CSS colocat ci va afectar usatores de pelle Vector */",
+       "vector.js": "/* Alquel JavaScript ci va esser cargat por usatores que usa li pelle Vector */",
+       "vector-action-addsection": "Adjunter tema",
+       "vector-action-delete": "Deleter",
+       "vector-action-move": "Mover",
+       "vector-action-protect": "Gardar",
+       "vector-action-undelete": "Restituer",
+       "vector-action-unprotect": "Desgardar",
+       "vector-view-create": "Crear",
+       "vector-view-edit": "Redacter",
+       "vector-view-history": "Historie de versiones",
+       "vector-view-view": "Leer",
+       "vector-view-viewsource": "Vider fonte"
+}
diff --git a/skins/Vector/i18n/ig.json b/skins/Vector/i18n/ig.json
new file mode 100644 (file)
index 0000000..66e93cc
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ukabia"
+               ]
+       },
+       "vector-action-addsection": "Tinyé Okwu",
+       "vector-action-delete": "Kàcha",
+       "vector-action-move": "Páfụ",
+       "vector-action-protect": "Cẹdolu",
+       "vector-action-undelete": "Á gbàkashikwà",
+       "vector-action-unprotect": "Nchẹdo mgbanwe",
+       "vector-view-create": "Ké",
+       "vector-view-edit": "Mèzi",
+       "vector-view-history": "Zí ịta",
+       "vector-view-view": "Gụ́",
+       "vector-view-viewsource": "Zi mkpurụ"
+}
diff --git a/skins/Vector/i18n/ike-latn.json b/skins/Vector/i18n/ike-latn.json
new file mode 100644 (file)
index 0000000..ab22a4a
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "vector-view-edit": "Suqusiqpaa"
+}
diff --git a/skins/Vector/i18n/ilo.json b/skins/Vector/i18n/ilo.json
new file mode 100644 (file)
index 0000000..817c75f
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Lam-ang",
+                       "Saluyot"
+               ]
+       },
+       "vector-action-addsection": "Agnayon ti topiko",
+       "vector-action-delete": "Ikkaten",
+       "vector-action-move": "Iyalis",
+       "vector-action-protect": "Salakniban",
+       "vector-action-undelete": "Isubli ti inikkat",
+       "vector-action-unprotect": "Sukatan ti salaknib",
+       "vector-view-create": "Agaramid",
+       "vector-view-edit": "Urnosen",
+       "vector-view-history": "Kitaen ti pakasaritaan",
+       "vector-view-view": "Basaen",
+       "vector-view-viewsource": "Kitaen ti taudan",
+       "vector-more-actions": "Adu pay"
+}
diff --git a/skins/Vector/i18n/inh.json b/skins/Vector/i18n/inh.json
new file mode 100644 (file)
index 0000000..e50a3ec
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Amire80",
+                       "Sapral Mikail"
+               ]
+       },
+       "vector-action-addsection": "БӀагал тӀатоха",
+       "vector-action-delete": "ДӀадаккха",
+       "vector-action-move": "ЦӀи хувца",
+       "vector-action-protect": "Лораде",
+       "vector-action-undelete": "Юхаоттаде",
+       "vector-action-unprotect": "Лорам хувца",
+       "vector-view-create": "Кхолларле",
+       "vector-view-edit": "Хувцам",
+       "vector-view-history": "Искар",
+       "vector-view-view": "Дешар",
+       "vector-view-viewsource": "Зембакхама бӀаргтассам"
+}
diff --git a/skins/Vector/i18n/io.json b/skins/Vector/i18n/io.json
new file mode 100644 (file)
index 0000000..3bfec4d
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Malafaya"
+               ]
+       },
+       "vector-action-addsection": "Adjuntar topiko",
+       "vector-action-delete": "Efacar",
+       "vector-action-move": "Movar",
+       "vector-action-protect": "Protektar",
+       "vector-action-undelete": "Rekuperar",
+       "vector-action-unprotect": "Desprotektar",
+       "vector-view-create": "Krear",
+       "vector-view-edit": "Redaktar",
+       "vector-view-history": "Vidar versionaro",
+       "vector-view-view": "Lektar",
+       "vector-view-viewsource": "Vidar fonto"
+}
diff --git a/skins/Vector/i18n/is.json b/skins/Vector/i18n/is.json
new file mode 100644 (file)
index 0000000..dc54f1b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Friðrik Bragi Dýrfjörð",
+                       "Maxí",
+                       "Snævar",
+                       "Ævar Arnfjörð Bjarmason"
+               ]
+       },
+       "vector-action-addsection": "Bæta við umræðu",
+       "vector-action-delete": "Eyða",
+       "vector-action-move": "Færa",
+       "vector-action-protect": "Vernda",
+       "vector-action-undelete": "Hætta við eyðingu",
+       "vector-action-unprotect": "Breyta verndunarstigi",
+       "vector-view-create": "Skapa",
+       "vector-view-edit": "Breyta",
+       "vector-view-history": "Breytingaskrá",
+       "vector-view-view": "Lesa",
+       "vector-view-viewsource": "Sýna frumkóða"
+}
diff --git a/skins/Vector/i18n/it.json b/skins/Vector/i18n/it.json
new file mode 100644 (file)
index 0000000..1598efe
--- /dev/null
@@ -0,0 +1,26 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Beta16",
+                       "Darth Kule",
+                       "Gianfranco",
+                       "Melos",
+                       "Pietrodn"
+               ]
+       },
+       "vector-skin-desc": "Versione moderna del MonoBook con un'aspetto nuovo e molti miglioramenti dell'usabilità",
+       "vector.css": "/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Vector */",
+       "vector.js": "/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin Vector */",
+       "vector-action-addsection": "Aggiungi discussione",
+       "vector-action-delete": "Cancella",
+       "vector-action-move": "Sposta",
+       "vector-action-protect": "Proteggi",
+       "vector-action-undelete": "Ripristina",
+       "vector-action-unprotect": "Cambia la protezione",
+       "vector-view-create": "Crea",
+       "vector-view-edit": "Modifica",
+       "vector-view-history": "Cronologia",
+       "vector-view-view": "Leggi",
+       "vector-view-viewsource": "Visualizza sorgente",
+       "vector-more-actions": "Altro"
+}
diff --git a/skins/Vector/i18n/izh.json b/skins/Vector/i18n/izh.json
new file mode 100644 (file)
index 0000000..ab41111
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Aig mest ei varasta"
+               ]
+       },
+       "vector-view-view": "Lukkiia"
+}
diff --git a/skins/Vector/i18n/ja.json b/skins/Vector/i18n/ja.json
new file mode 100644 (file)
index 0000000..7bfa57e
--- /dev/null
@@ -0,0 +1,27 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Fryed-peach",
+                       "Marine-Blue",
+                       "Penn Station",
+                       "Shirayuki",
+                       "Whym",
+                       "青子守歌"
+               ]
+       },
+       "skinname-vector": "ベクター",
+       "vector.css": "/* ここに記述したCSSはベクター外装の利用者に影響します */",
+       "vector.js": "/* ここにあるすべてのJavaScriptは、ベクター外装を使用している利用者に対して読み込まれます */",
+       "vector-action-addsection": "話題追加",
+       "vector-action-delete": "削除",
+       "vector-action-move": "移動",
+       "vector-action-protect": "保護",
+       "vector-action-undelete": "復元",
+       "vector-action-unprotect": "保護再設定",
+       "vector-view-create": "作成",
+       "vector-view-edit": "編集",
+       "vector-view-history": "履歴表示",
+       "vector-view-view": "閲覧",
+       "vector-view-viewsource": "ソースを閲覧",
+       "vector-more-actions": "その他"
+}
diff --git a/skins/Vector/i18n/jam.json b/skins/Vector/i18n/jam.json
new file mode 100644 (file)
index 0000000..cf84305
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Hazard-SJ",
+                       "Yocahuna"
+               ]
+       },
+       "vector-action-addsection": "Ad tapik",
+       "vector-action-delete": "Diliit",
+       "vector-action-move": "Muuv",
+       "vector-action-protect": "Protek",
+       "vector-action-undelete": "Andiliit",
+       "vector-action-unprotect": "Neu protektian",
+       "vector-view-create": "Kriet",
+       "vector-view-edit": "Hedit",
+       "vector-view-history": "Vyuu ischri",
+       "vector-view-view": "Riid",
+       "vector-view-viewsource": "Vyuu Suos"
+}
diff --git a/skins/Vector/i18n/jbo.json b/skins/Vector/i18n/jbo.json
new file mode 100644 (file)
index 0000000..bc1f172
--- /dev/null
@@ -0,0 +1,17 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gleki"
+               ]
+       },
+       "vector-action-addsection": "jmina la'e se casnu",
+       "vector-action-delete": "vimcu",
+       "vector-action-move": "stika lo cmene",
+       "vector-action-protect": "bandu",
+       "vector-view-create": "zbasu",
+       "vector-view-edit": "stika",
+       "vector-view-history": "lo ckupau citri",
+       "vector-view-view": "tcidu",
+       "vector-view-viewsource": "cpacu lo krasi",
+       "vector-more-actions": "ji'a"
+}
diff --git a/skins/Vector/i18n/jv.json b/skins/Vector/i18n/jv.json
new file mode 100644 (file)
index 0000000..7af6b95
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Pras"
+               ]
+       },
+       "vector-action-addsection": "Tambah topik",
+       "vector-action-delete": "Busak",
+       "vector-action-move": "Pindhahna",
+       "vector-action-protect": "Reksa",
+       "vector-action-undelete": "Batalna pambusakan",
+       "vector-action-unprotect": "Owahi pangreksan",
+       "vector-view-create": "Gawé",
+       "vector-view-edit": "Sunting",
+       "vector-view-history": "Sajarah kaca",
+       "vector-view-view": "Waca",
+       "vector-view-viewsource": "Pirsani sumber"
+}
diff --git a/skins/Vector/i18n/ka.json b/skins/Vector/i18n/ka.json
new file mode 100644 (file)
index 0000000..a08fe71
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Alsandro",
+                       "David1010",
+                       "გიორგიმელა"
+               ]
+       },
+       "skinname-vector": "ვექტორული",
+       "vector.css": "/* აქ ჩასმული CSS გამოყენებული იქნება ვექტორული გაფორმების თემაში */",
+       "vector-action-addsection": "თემის ჩამატება",
+       "vector-action-delete": "წაშლა",
+       "vector-action-move": "გადატანა",
+       "vector-action-protect": "დაცვა",
+       "vector-action-undelete": "აღდგენა",
+       "vector-action-unprotect": "დაცვის შეცვლა",
+       "vector-view-create": "შექმნა",
+       "vector-view-edit": "რედაქტირება",
+       "vector-view-history": "ისტორია",
+       "vector-view-view": "შემოწმებული სტატია",
+       "vector-view-viewsource": "წყაროს ხილვა",
+       "vector-more-actions": "მეტი"
+}
diff --git a/skins/Vector/i18n/kaa.json b/skins/Vector/i18n/kaa.json
new file mode 100644 (file)
index 0000000..1518526
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Atabek"
+               ]
+       },
+       "vector-action-addsection": "Tema qosıw",
+       "vector-action-delete": "O'shiriw",
+       "vector-action-move": "Ko'shiriw",
+       "vector-action-protect": "Qorg'aw",
+       "vector-action-undelete": "Qayta tiklew",
+       "vector-action-unprotect": "Qorg'awdı o'zgertiw",
+       "vector-view-create": "Jaratıw",
+       "vector-view-edit": "O'zgertiw",
+       "vector-view-history": "Tariyxın ko'riw",
+       "vector-view-view": "Oqıw",
+       "vector-view-viewsource": "Deregin ko'riw"
+}
diff --git a/skins/Vector/i18n/kab.json b/skins/Vector/i18n/kab.json
new file mode 100644 (file)
index 0000000..f233083
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mmistmurt"
+               ]
+       },
+       "vector-action-addsection": "Rnud ameggay",
+       "vector-action-delete": "Mḥu",
+       "vector-action-move": "Smimeḍ",
+       "vector-action-protect": "Mmesten",
+       "vector-action-undelete": "Uɣaled",
+       "vector-action-unprotect": "Beddel amesten",
+       "vector-view-create": "Snulfu",
+       "vector-view-edit": "Ẓẓiẓreg",
+       "vector-view-history": "Ẓeṛ amazray",
+       "vector-view-view": "Ɣer",
+       "vector-view-viewsource": "Ẓer aɣbalu"
+}
diff --git a/skins/Vector/i18n/kbd-cyrl.json b/skins/Vector/i18n/kbd-cyrl.json
new file mode 100644 (file)
index 0000000..efd893e
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bogups",
+                       "Тамэ Балъкъэрхэ"
+               ]
+       },
+       "vector-action-addsection": "Теухугъуэ щӀэуэ щӀэдзэн",
+       "vector-action-delete": "Ихын",
+       "vector-action-move": "ЦӀэр хъуэжын",
+       "vector-action-protect": "Хъумэн",
+       "vector-action-undelete": "ЗыфӀэгъэувэжын",
+       "vector-action-unprotect": "Хъумэныр техыжын",
+       "vector-view-create": "ЩӀын",
+       "vector-view-edit": "Гъэтэрэзын",
+       "vector-view-history": "Тхыдэм еплъын",
+       "vector-view-view": "Еджэн",
+       "vector-view-viewsource": "КъызхэкӀам еплъын"
+}
diff --git a/skins/Vector/i18n/kg.json b/skins/Vector/i18n/kg.json
new file mode 100644 (file)
index 0000000..f88430a
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Rkupsala"
+               ]
+       },
+       "vector-action-delete": "Kufwa",
+       "vector-action-move": "Nata",
+       "vector-action-protect": "Keba",
+       "vector-view-create": "Tunga",
+       "vector-view-edit": "Soba",
+       "vector-view-history": "Tala bansoba",
+       "vector-view-view": "Tânga"
+}
diff --git a/skins/Vector/i18n/khw.json b/skins/Vector/i18n/khw.json
new file mode 100644 (file)
index 0000000..a0ceaca
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Rachitrali"
+               ]
+       },
+       "vector-action-addsection": "نوغ موضوع",
+       "vector-action-delete": "بوغاوے",
+       "vector-action-move": "منتقل کورے",
+       "vector-action-protect": "محفوظ کورے",
+       "vector-action-undelete": "اچی انگیے",
+       "vector-action-unprotect": "غیر محفوظ",
+       "vector-view-create": "ساوزاوے",
+       "vector-view-edit": "ایڈٹ کورے",
+       "vector-view-history": "تاریخچہ",
+       "vector-view-view": "راوے",
+       "vector-view-viewsource": "مسودہ"
+}
diff --git a/skins/Vector/i18n/ki.json b/skins/Vector/i18n/ki.json
new file mode 100644 (file)
index 0000000..30f6a5f
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Stephenwanjau"
+               ]
+       },
+       "vector-action-delete": "Futa"
+}
diff --git a/skins/Vector/i18n/kiu.json b/skins/Vector/i18n/kiu.json
new file mode 100644 (file)
index 0000000..3d2c3cc
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mirzali"
+               ]
+       },
+       "vector-action-addsection": "Mewzu ilawe ke",
+       "vector-action-delete": "Bestere",
+       "vector-action-move": "Bere",
+       "vector-action-protect": "Bısevekne",
+       "vector-action-undelete": "Esterıtene peyser bıcê",
+       "vector-action-unprotect": "Rake",
+       "vector-view-create": "Vıraze",
+       "vector-view-edit": "Bıvurne",
+       "vector-view-history": "Tarixi basne",
+       "vector-view-view": "Bıwane",
+       "vector-view-viewsource": "Çımey bıvêne"
+}
diff --git a/skins/Vector/i18n/kk-cyrl.json b/skins/Vector/i18n/kk-cyrl.json
new file mode 100644 (file)
index 0000000..1970fa0
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Arystanbek",
+                       "Daniyar",
+                       "GaiJin",
+                       "Kaztrans"
+               ]
+       },
+       "vector-action-addsection": "Тақырып қосу",
+       "vector-action-delete": "Жою",
+       "vector-action-move": "Атауын өзгерту",
+       "vector-action-protect": "Қорғау",
+       "vector-action-undelete": "Жоймау",
+       "vector-action-unprotect": "Қорғанысты өзгерту",
+       "vector-view-create": "Бастау",
+       "vector-view-edit": "Өңдеу",
+       "vector-view-history": "Өңделу тарихы",
+       "vector-view-view": "Оқу",
+       "vector-view-viewsource": "Қайнарын қарау",
+       "vector-more-actions": "Тағы"
+}
diff --git a/skins/Vector/i18n/kl.json b/skins/Vector/i18n/kl.json
new file mode 100644 (file)
index 0000000..6a3d7b1
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Iketsi",
+                       "Qaqqalik"
+               ]
+       },
+       "vector-action-addsection": "Imm. nutaaq",
+       "vector-action-move": "Nuuguk",
+       "vector-view-create": "Pilersiguk",
+       "vector-view-edit": "Aaqqissoruk",
+       "vector-view-history": "Oqalutt.",
+       "vector-view-view": "Takuuk",
+       "vector-view-viewsource": "Toqqavia takuuk"
+}
diff --git a/skins/Vector/i18n/km.json b/skins/Vector/i18n/km.json
new file mode 100644 (file)
index 0000000..6827117
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "គីមស៊្រុន",
+                       "វ័ណថារិទ្ធ"
+               ]
+       },
+       "skinname-vector": "វ៉ិចទ័រ​​",
+       "vector.css": "/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Vector */",
+       "vector-action-addsection": "បន្ថែម​ប្រធានបទ​",
+       "vector-action-delete": "លុបចោល",
+       "vector-action-move": "ប្តូរទីតាំង",
+       "vector-action-protect": "ការពារ",
+       "vector-action-undelete": "ឈប់លុបចោល",
+       "vector-action-unprotect": "ប្ដូរការការពារ",
+       "vector-view-create": "បង្កើត​",
+       "vector-view-edit": "កែប្រែ​",
+       "vector-view-history": "មើល​ប្រវត្តិ​",
+       "vector-view-view": "អាន",
+       "vector-view-viewsource": "មើល​កូដ"
+}
diff --git a/skins/Vector/i18n/kn.json b/skins/Vector/i18n/kn.json
new file mode 100644 (file)
index 0000000..aae7272
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ktkaushik",
+                       "Nayvik",
+                       "VASANTH S.N."
+               ]
+       },
+       "vector-action-addsection": "ವಿಷಯ ಸೇರಿಸಿ",
+       "vector-action-delete": "ಅಳಿಸು",
+       "vector-action-move": "ಸ್ಥಳಾಂತರಿಸಿ",
+       "vector-action-protect": "ಸಂರಕ್ಷಿಸು",
+       "vector-action-undelete": "ಅಳಿಸಬೇಡ",
+       "vector-action-unprotect": "ರಕ್ಷಣೆಯನ್ನು ಬದಲಾವಣೆ",
+       "vector-view-create": "ಸೃಷ್ಟಿಸು",
+       "vector-view-edit": "ಸಂಪಾದಿಸಿ",
+       "vector-view-history": "ಇತಿಹಾಸವನ್ನು ನೋಡಿ",
+       "vector-view-view": "ಓದು",
+       "vector-view-viewsource": "ಆಕರ ವೀಕ್ಷಿಸು"
+}
diff --git a/skins/Vector/i18n/ko.json b/skins/Vector/i18n/ko.json
new file mode 100644 (file)
index 0000000..038f342
--- /dev/null
@@ -0,0 +1,25 @@
+{
+       "@metadata": {
+               "authors": [
+                       "ITurtle",
+                       "Kwj2772",
+                       "아라"
+               ]
+       },
+       "skinname-vector": "벡터",
+       "vector-skin-desc": "모노북 스킨을 사용할 때 사용자 인터페이스를 향상합니다",
+       "vector.css": "/* 이 CSS 설정은 벡터 스킨을 사용하는 사용자에게 적용됩니다 */",
+       "vector.js": "/* 이 자바스크립트 설정은 벡터 스킨을 사용하는 사용자에게 적용됩니다 */",
+       "vector-action-addsection": "새 주제",
+       "vector-action-delete": "삭제",
+       "vector-action-move": "옮기기",
+       "vector-action-protect": "보호",
+       "vector-action-undelete": "삭제 취소",
+       "vector-action-unprotect": "보호 설정 바꾸기",
+       "vector-view-create": "만들기",
+       "vector-view-edit": "편집",
+       "vector-view-history": "역사 보기",
+       "vector-view-view": "읽기",
+       "vector-view-viewsource": "원본 보기",
+       "vector-more-actions": "더 보기"
+}
diff --git a/skins/Vector/i18n/koi.json b/skins/Vector/i18n/koi.json
new file mode 100644 (file)
index 0000000..1753f44
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Enye Lav"
+               ]
+       },
+       "vector-action-delete": "Чышкыны",
+       "vector-view-view": "Лыддьöтны"
+}
diff --git a/skins/Vector/i18n/krc.json b/skins/Vector/i18n/krc.json
new file mode 100644 (file)
index 0000000..cdb2f55
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Iltever",
+                       "Къарачайлы"
+               ]
+       },
+       "skinname-vector": "Вектор",
+       "vector-action-addsection": "Джангы тема къош",
+       "vector-action-delete": "Кетер",
+       "vector-action-move": "Атын ауушдур",
+       "vector-action-protect": "Джакъла",
+       "vector-action-undelete": "Къайтар",
+       "vector-action-unprotect": "Джакълауну тюрлендир",
+       "vector-view-create": "Къура",
+       "vector-view-edit": "Тюрлендир",
+       "vector-view-history": "Тарихи",
+       "vector-view-view": "Окъу",
+       "vector-view-viewsource": "Кодха къара",
+       "vector-more-actions": "Энтда"
+}
diff --git a/skins/Vector/i18n/kri.json b/skins/Vector/i18n/kri.json
new file mode 100644 (file)
index 0000000..056a9e5
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Protostar"
+               ]
+       },
+       "vector-action-addsection": "Add tòpik",
+       "vector-action-delete": "Delet",
+       "vector-action-move": "Muf",
+       "vector-action-protect": "Protèkt",
+       "vector-view-create": "Kreat",
+       "vector-view-edit": "Chenj",
+       "vector-view-history": "Luk historia",
+       "vector-view-view": "Rid",
+       "vector-view-viewsource": "Luk dhi sòrs"
+}
diff --git a/skins/Vector/i18n/ks-arab.json b/skins/Vector/i18n/ks-arab.json
new file mode 100644 (file)
index 0000000..68c34ad
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       "vector-view-edit": "تَرتیٖب دِیُن",
+       "vector-view-view": "پَرُن"
+}
diff --git a/skins/Vector/i18n/ksh.json b/skins/Vector/i18n/ksh.json
new file mode 100644 (file)
index 0000000..7d91fae
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Purodha"
+               ]
+       },
+       "skinname-vector": "Vektor",
+       "vector.css": "/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Vector“ */",
+       "vector.js": "/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch \"Vector\" jescheck */",
+       "vector-action-addsection": "Ne neue Afschnet onge draan!",
+       "vector-action-delete": "Fottschmiiße!",
+       "vector-action-move": "Ömnänne!",
+       "vector-action-protect": "Schöze!",
+       "vector-action-undelete": "Zerökholle!",
+       "vector-action-unprotect": "Schoz ändere!",
+       "vector-view-create": "Neu Schriive!",
+       "vector-view-edit": "Ändere!",
+       "vector-view-history": "Versione zeije!",
+       "vector-view-view": "Lesse!",
+       "vector-view-viewsource": "Wikitex aanlooere!"
+}
diff --git a/skins/Vector/i18n/ku-latn.json b/skins/Vector/i18n/ku-latn.json
new file mode 100644 (file)
index 0000000..90e0706
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ferhengvan",
+                       "Gomada"
+               ]
+       },
+       "vector-action-addsection": "Mijarekê lê zêde bike",
+       "vector-action-delete": "Jê bibe",
+       "vector-action-move": "Nav biguherîne",
+       "vector-action-protect": "Biparêze",
+       "vector-action-undelete": "Jê nebe",
+       "vector-action-unprotect": "Parastinê rake",
+       "vector-view-create": "Çêke",
+       "vector-view-edit": "Biguherîne",
+       "vector-view-history": "Dîrokê bibîne",
+       "vector-view-view": "Bixwîne",
+       "vector-view-viewsource": "Çavkaniyan bibîne"
+}
diff --git a/skins/Vector/i18n/kv.json b/skins/Vector/i18n/kv.json
new file mode 100644 (file)
index 0000000..d3df069
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Comp1089"
+               ]
+       },
+       "vector-action-move": "Ним вежны",
+       "vector-view-edit": "Вежны",
+       "vector-view-view": "Лыддьыны"
+}
diff --git a/skins/Vector/i18n/kw.json b/skins/Vector/i18n/kw.json
new file mode 100644 (file)
index 0000000..4a2975c
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kernoweger",
+                       "Kw-Moon",
+                       "Nrowe"
+               ]
+       },
+       "vector-action-addsection": "Keworra testen",
+       "vector-action-delete": "Dilea",
+       "vector-action-move": "Gwaya",
+       "vector-action-protect": "Difres",
+       "vector-action-undelete": "Disdhilea",
+       "vector-action-unprotect": "Chanjya difresans",
+       "vector-view-create": "Gwruthyl",
+       "vector-view-edit": "Chanjya",
+       "vector-view-history": "Gweles an istori",
+       "vector-view-view": "Redya",
+       "vector-view-viewsource": "Gweles an bennfenten"
+}
diff --git a/skins/Vector/i18n/ky.json b/skins/Vector/i18n/ky.json
new file mode 100644 (file)
index 0000000..e536d9b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Chorobek",
+                       "Growingup",
+                       "Ztimur",
+                       "Викиней"
+               ]
+       },
+       "vector-action-addsection": "Тема кошуу",
+       "vector-action-delete": "Өчүрүү",
+       "vector-action-move": "Аталышын өзгөртүү",
+       "vector-action-protect": "Коргоо",
+       "vector-action-undelete": "Калыбына келтирүү",
+       "vector-action-unprotect": "Коргоону өзгөртүү",
+       "vector-view-create": "Түзүү",
+       "vector-view-edit": "Оңдоо",
+       "vector-view-history": "Тарыхын кароо",
+       "vector-view-view": "Окуу",
+       "vector-view-viewsource": "Кайнарын кароо"
+}
diff --git a/skins/Vector/i18n/la.json b/skins/Vector/i18n/la.json
new file mode 100644 (file)
index 0000000..2cc4ad2
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "UV"
+               ]
+       },
+       "vector-action-addsection": "Partem novam addere",
+       "vector-action-delete": "Delere",
+       "vector-action-move": "Movere",
+       "vector-action-protect": "Protegere",
+       "vector-action-undelete": "Restituere",
+       "vector-action-unprotect": "Protectionem mutare",
+       "vector-view-create": "Creare",
+       "vector-view-edit": "Recensere",
+       "vector-view-history": "Historiam inspicere",
+       "vector-view-view": "Legere",
+       "vector-view-viewsource": "Fontem inspicere",
+       "vector-more-actions": "Plus"
+}
diff --git a/skins/Vector/i18n/lad.json b/skins/Vector/i18n/lad.json
new file mode 100644 (file)
index 0000000..729ec48
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Universal Life"
+               ]
+       },
+       "vector-action-addsection": "Ajustar sujeto",
+       "vector-action-delete": "Efassar",
+       "vector-action-move": "Taşirear",
+       "vector-action-protect": "Guadrar",
+       "vector-action-undelete": "Traer atrás",
+       "vector-action-unprotect": "Trocar proteksyon",
+       "vector-view-create": "Criar",
+       "vector-view-edit": "Trocar",
+       "vector-view-history": "Ver la istoria",
+       "vector-view-view": "Meldar",
+       "vector-view-viewsource": "Ver su manadero"
+}
diff --git a/skins/Vector/i18n/lb.json b/skins/Vector/i18n/lb.json
new file mode 100644 (file)
index 0000000..77c512d
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Robby"
+               ]
+       },
+       "vector-action-addsection": "Sujet derbäisetzen",
+       "vector-action-delete": "Läschen",
+       "vector-action-move": "Réckelen",
+       "vector-action-protect": "Spären",
+       "vector-action-undelete": "Restauréieren",
+       "vector-action-unprotect": "Spär änneren",
+       "vector-view-create": "Uleeën",
+       "vector-view-edit": "Änneren",
+       "vector-view-history": "Versioune weisen",
+       "vector-view-view": "Liesen",
+       "vector-view-viewsource": "Quellcode weisen",
+       "vector-more-actions": "Méi"
+}
diff --git a/skins/Vector/i18n/lez.json b/skins/Vector/i18n/lez.json
new file mode 100644 (file)
index 0000000..d132626
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Lezgia",
+                       "Migraghvi",
+                       "Namik",
+                       "Soul Train"
+               ]
+       },
+       "vector-action-addsection": "Тема алава авун",
+       "vector-action-delete": "Алудун",
+       "vector-action-move": "ТӀвар эхцигун",
+       "vector-action-protect": "Хуьн",
+       "vector-action-undelete": "ТуькӀуьр хъувун",
+       "vector-action-unprotect": "Хуьн дегишарун",
+       "vector-view-create": "ТуькӀуьрун",
+       "vector-view-edit": "Дуьзарин",
+       "vector-view-history": "Тарихдиз килигун",
+       "vector-view-view": "КӀелун",
+       "vector-view-viewsource": "Чешме къалурун"
+}
diff --git a/skins/Vector/i18n/lg.json b/skins/Vector/i18n/lg.json
new file mode 100644 (file)
index 0000000..4282900
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kizito"
+               ]
+       },
+       "vector-action-addsection": "Tandikawo emboozi endala",
+       "vector-action-delete": "Gyawo olupapula luno",
+       "vector-action-move": "Simbuliza",
+       "vector-action-protect": "Ssiba",
+       "vector-action-undelete": "Zawo",
+       "vector-action-unprotect": "Kyusa ebikugizo",
+       "vector-view-create": "Lukolewo",
+       "vector-view-edit": "Kyusa",
+       "vector-view-history": "Ennanda ya fayiro eno",
+       "vector-view-view": "Soma",
+       "vector-view-viewsource": "Kebera obulambike obw'ennono obw'olupapula luno"
+}
diff --git a/skins/Vector/i18n/li.json b/skins/Vector/i18n/li.json
new file mode 100644 (file)
index 0000000..8fe7e26
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ooswesthoesbes"
+               ]
+       },
+       "vector-action-addsection": "Voog köpke toe",
+       "vector-action-delete": "Ewegsjaffe",
+       "vector-action-move": "Verplaats",
+       "vector-action-protect": "Besjirm",
+       "vector-action-undelete": "Plaats trök",
+       "vector-action-unprotect": "Anger beveiliging",
+       "vector-view-create": "Maak aan",
+       "vector-view-edit": "Bewirk",
+       "vector-view-history": "Bekiek de gesjiedenis",
+       "vector-view-view": "Laes",
+       "vector-view-viewsource": "Bekiek bróntèks"
+}
diff --git a/skins/Vector/i18n/lij.json b/skins/Vector/i18n/lij.json
new file mode 100644 (file)
index 0000000..e73547c
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gastaz",
+                       "Giromin Cangiaxo"
+               ]
+       },
+       "vector-action-addsection": "Azónzi discusción",
+       "vector-action-delete": "Scancella",
+       "vector-action-move": "Mescia",
+       "vector-action-protect": "Protezi",
+       "vector-action-undelete": "Recuppera",
+       "vector-action-unprotect": "Cangia a proteçion",
+       "vector-view-create": "Crea",
+       "vector-view-edit": "Càngia",
+       "vector-view-history": "Fanni védde a Stöia",
+       "vector-view-view": "Lêzi",
+       "vector-view-viewsource": "Veddi a sorgénte"
+}
diff --git a/skins/Vector/i18n/liv.json b/skins/Vector/i18n/liv.json
new file mode 100644 (file)
index 0000000..68518e5
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Warbola"
+               ]
+       },
+       "vector-action-addsection": "Pangid jūrõ tēma",
+       "vector-action-delete": "Kištāntõgid jarā",
+       "vector-action-move": "Vīž jarā",
+       "vector-action-protect": "Kaitsõmi",
+       "vector-view-create": "Lūo",
+       "vector-view-edit": "Redigīer",
+       "vector-view-history": "Nägţ istōrijõ",
+       "vector-view-view": "Vaņ",
+       "vector-view-viewsource": "Vaņ ovāt tekstõ"
+}
diff --git a/skins/Vector/i18n/lmo.json b/skins/Vector/i18n/lmo.json
new file mode 100644 (file)
index 0000000..a5c8624
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Insübrich",
+                       "Ninonino"
+               ]
+       },
+       "vector-action-addsection": "Giunta argument",
+       "vector-action-delete": "Scancela",
+       "vector-action-move": "Sposta",
+       "vector-action-protect": "Prutegg",
+       "vector-action-undelete": "Recüpera",
+       "vector-action-unprotect": "Càmbia la protesiù",
+       "vector-view-create": "Crea",
+       "vector-view-edit": "Mudifega",
+       "vector-view-history": "Varda la storia",
+       "vector-view-view": "Legg",
+       "vector-view-viewsource": "Varda el codes",
+       "vector-more-actions": "Amò"
+}
diff --git a/skins/Vector/i18n/ln.json b/skins/Vector/i18n/ln.json
new file mode 100644 (file)
index 0000000..5fb4011
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Eruedin",
+                       "Moyogo"
+               ]
+       },
+       "vector-action-addsection": "Kobakisa mpɔ̂",
+       "vector-action-delete": "Kolímwisa",
+       "vector-action-move": "Kobóngola nkómbó",
+       "vector-action-protect": "Kobátela",
+       "vector-action-undelete": "Kolímwisa tɛ̂",
+       "vector-action-unprotect": " Kobátela tɛ̂",
+       "vector-view-create": "Kokela",
+       "vector-view-edit": "Kobɔngisa",
+       "vector-view-history": "Komɔ́nisa mokóló",
+       "vector-view-view": "Kotánga",
+       "vector-view-viewsource": "Komɔ́nisa mosólo"
+}
diff --git a/skins/Vector/i18n/lrc.json b/skins/Vector/i18n/lrc.json
new file mode 100644 (file)
index 0000000..8f6f09a
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mogoeilor"
+               ]
+       },
+       "vector-action-addsection": "موضوع اضاف بكيد",
+       "vector-action-delete": "حذف بكيد",
+       "vector-action-move": "جاوه جا بوئيت",
+       "vector-action-protect": "حمايت بكيد",
+       "vector-action-undelete": "حذف نبيئني",
+       "vector-action-unprotect": "حمايت آلشت بكيد",
+       "vector-view-create": "راس كردن",
+       "vector-view-edit": "ويرايشت",
+       "vector-view-history": "ديئن ويرگار",
+       "vector-view-view": "حنن",
+       "vector-view-viewsource": "سرچشمه نه بوينيت"
+}
diff --git a/skins/Vector/i18n/lt.json b/skins/Vector/i18n/lt.json
new file mode 100644 (file)
index 0000000..40886a8
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Garas",
+                       "Homo",
+                       "Matasg",
+                       "Perkunas"
+               ]
+       },
+       "skinname-vector": "Vektorinė",
+       "vector-action-addsection": "Pridėti temą",
+       "vector-action-delete": "Ištrinti",
+       "vector-action-move": "Pervardyti",
+       "vector-action-protect": "Užrakinti",
+       "vector-action-undelete": "Atkurti",
+       "vector-action-unprotect": "Keisti apsaugą",
+       "vector-view-create": "Kurti",
+       "vector-view-edit": "Redaguoti",
+       "vector-view-history": "Istorija",
+       "vector-view-view": "Skaityti",
+       "vector-view-viewsource": "Žiūrėti kodą"
+}
diff --git a/skins/Vector/i18n/ltg.json b/skins/Vector/i18n/ltg.json
new file mode 100644 (file)
index 0000000..d89d6df
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Dark Eagle"
+               ]
+       },
+       "vector-action-addsection": "Dalikt padaļu",
+       "vector-action-delete": "Iztreit",
+       "vector-action-move": "Puorceļt",
+       "vector-action-protect": "Apsorguot",
+       "vector-action-unprotect": "Puormeit apsardzeibu",
+       "vector-view-edit": "Pataiseit",
+       "vector-view-history": "Viesture",
+       "vector-view-view": "Vērtīs"
+}
diff --git a/skins/Vector/i18n/lus.json b/skins/Vector/i18n/lus.json
new file mode 100644 (file)
index 0000000..4f270de
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "RMizo"
+               ]
+       },
+       "vector-action-addsection": "Thupui belhna",
+       "vector-action-delete": "Paihna",
+       "vector-action-move": "Sawnna",
+       "vector-action-protect": "Venhimna",
+       "vector-action-undelete": "Lak kir lehna",
+       "vector-action-unprotect": "Venhimna dinhmun tidanglam rawh",
+       "vector-view-create": "Siamna",
+       "vector-view-edit": "Siamţhatna",
+       "vector-view-history": "Hunhlui-chanchin",
+       "vector-view-view": "Chhiarna",
+       "vector-view-viewsource": "A hnar enna"
+}
diff --git a/skins/Vector/i18n/luz.json b/skins/Vector/i18n/luz.json
new file mode 100644 (file)
index 0000000..0670bfd
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "علی ساکی لرستانی"
+               ]
+       },
+       "vector-view-history": "دیئن تاریخچه",
+       "vector-view-view": "هوندن"
+}
diff --git a/skins/Vector/i18n/lv.json b/skins/Vector/i18n/lv.json
new file mode 100644 (file)
index 0000000..697d1eb
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Marozols",
+                       "Papuass"
+               ]
+       },
+       "vector-action-addsection": "Jauna sadaļa",
+       "vector-action-delete": "Dzēst",
+       "vector-action-move": "Pārvietot",
+       "vector-action-protect": "Aizsargāt",
+       "vector-action-undelete": "Atjaunot",
+       "vector-action-unprotect": "Mainīt aizsardzību",
+       "vector-view-create": "Izveidot",
+       "vector-view-edit": "Labot",
+       "vector-view-history": "Hronoloģija",
+       "vector-view-view": "Skatīt",
+       "vector-view-viewsource": "Aplūkot kodu"
+}
diff --git a/skins/Vector/i18n/lzh.json b/skins/Vector/i18n/lzh.json
new file mode 100644 (file)
index 0000000..6b6ae38
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Justincheng12345"
+               ]
+       },
+       "skinname-vector": "動力",
+       "vector.css": "/* 此之 CSS 用於動力面之簿也 */",
+       "vector.js": "/* 此之JavaScript將載於用動力面之簿 */",
+       "vector-action-addsection": "入題",
+       "vector-action-delete": "刪",
+       "vector-action-move": "遷",
+       "vector-action-protect": "緘",
+       "vector-action-undelete": "覽刪",
+       "vector-action-unprotect": "啟",
+       "vector-view-create": "立",
+       "vector-view-edit": "纂",
+       "vector-view-history": "覽史",
+       "vector-view-view": "閱",
+       "vector-view-viewsource": "覽源"
+}
diff --git a/skins/Vector/i18n/lzz.json b/skins/Vector/i18n/lzz.json
new file mode 100644 (file)
index 0000000..3563816
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bombola",
+                       "Ceas08",
+                       "Erdemaslancan"
+               ]
+       },
+       "vector-action-delete": "Jili",
+       "vector-action-move": "Tori",
+       "vector-action-protect": "İçvi",
+       "vector-view-create": "dokʼidi",
+       "vector-view-edit": "Doktiri",
+       "vector-view-view": "İǩitxi"
+}
diff --git a/skins/Vector/i18n/mai.json b/skins/Vector/i18n/mai.json
new file mode 100644 (file)
index 0000000..068e67d
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ggajendra",
+                       "Umeshberma"
+               ]
+       },
+       "skinname-vector": "सदिश",
+       "vector-action-addsection": "विचार-बिन्दु जोड़ू",
+       "vector-action-delete": "मेटाउ",
+       "vector-action-move": "घसकाउ",
+       "vector-action-protect": "रक्षण करू",
+       "vector-action-undelete": "आपस लाउ",
+       "vector-action-unprotect": "सुरक्षा बदलू",
+       "vector-view-create": "बनाउ",
+       "vector-view-edit": "सम्पादन करू",
+       "vector-view-history": "इतिहास देखू",
+       "vector-view-view": "पढ़ू",
+       "vector-view-viewsource": "जड़ि देखू"
+}
diff --git a/skins/Vector/i18n/map-bms.json b/skins/Vector/i18n/map-bms.json
new file mode 100644 (file)
index 0000000..1a08582
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "StefanusRA"
+               ]
+       },
+       "vector-action-addsection": "Nambah topik",
+       "vector-action-delete": "Busek",
+       "vector-action-move": "Pindah",
+       "vector-action-protect": "Reksa",
+       "vector-action-undelete": "Batalna pambusakan",
+       "vector-action-unprotect": "Owahi pangreksan",
+       "vector-view-create": "Gawe",
+       "vector-view-edit": "Sunting",
+       "vector-view-history": "Sajarah kaca",
+       "vector-view-view": "Waca",
+       "vector-view-viewsource": "Deleng sumbere"
+}
diff --git a/skins/Vector/i18n/mdf.json b/skins/Vector/i18n/mdf.json
new file mode 100644 (file)
index 0000000..91787fc
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Numulunj pilgae"
+               ]
+       },
+       "vector-action-addsection": "Поладомс мезень колга корхтамс",
+       "vector-action-delete": "Нардамс",
+       "vector-action-move": "Шашфтомс",
+       "vector-action-protect": "Араламс",
+       "vector-action-undelete": "Мърдафтомс",
+       "vector-action-unprotect": "Араламать полафтомс",
+       "vector-view-create": "Тиемс",
+       "vector-view-edit": "Петнемс",
+       "vector-view-history": "История няфтемс",
+       "vector-view-view": "Морафтомс",
+       "vector-view-viewsource": "Лисьма няфтемс"
+}
diff --git a/skins/Vector/i18n/mg.json b/skins/Vector/i18n/mg.json
new file mode 100644 (file)
index 0000000..5c51602
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Jagwar"
+               ]
+       },
+       "vector-action-addsection": "Hanampy lohahevitra",
+       "vector-action-delete": "Fafana",
+       "vector-action-move": "Hanolo anarana",
+       "vector-action-protect": "Arovy",
+       "vector-action-undelete": "Avereno",
+       "vector-action-unprotect": "Hanala ny fiarovana",
+       "vector-view-create": "Foronona",
+       "vector-view-edit": "Hanova",
+       "vector-view-history": "Hijery ny tantara",
+       "vector-view-view": "Hamaky",
+       "vector-view-viewsource": "Hijery fango"
+}
diff --git a/skins/Vector/i18n/mhr.json b/skins/Vector/i18n/mhr.json
new file mode 100644 (file)
index 0000000..efe9d4b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Azim",
+                       "Sergey Ivanov",
+                       "Сай",
+                       "Санюн Вадик"
+               ]
+       },
+       "vector-action-addsection": "У ӱжашым тӱҥалаш",
+       "vector-action-delete": "Шӧраш",
+       "vector-action-move": "Лӱмым вашталташ",
+       "vector-action-protect": "Тӧрлатымаш деч аралаш",
+       "vector-action-undelete": "Шӧрымым пӧртылаш",
+       "vector-action-unprotect": "Оролым вашталташ",
+       "vector-view-create": "Ышташ",
+       "vector-view-edit": "Тӧрлаташ",
+       "vector-view-history": "Эртымгорным ончалаш",
+       "vector-view-view": "Лудаш",
+       "vector-view-viewsource": "Тӱҥалтыш текстым ончалаш"
+}
diff --git a/skins/Vector/i18n/mi.json b/skins/Vector/i18n/mi.json
new file mode 100644 (file)
index 0000000..0a59489
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Piwaiwaka"
+               ]
+       },
+       "vector-view-view": "Tirohia"
+}
diff --git a/skins/Vector/i18n/mic.json b/skins/Vector/i18n/mic.json
new file mode 100644 (file)
index 0000000..3079089
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Amqui"
+               ]
+       },
+       "vector-action-move": "Ejigliwsit",
+       "vector-view-create": "Etlitoq",
+       "vector-view-view": "Egiljet"
+}
diff --git a/skins/Vector/i18n/min.json b/skins/Vector/i18n/min.json
new file mode 100644 (file)
index 0000000..bf5a735
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Iwan Novirion",
+                       "Luthfi94",
+                       "VoteITP"
+               ]
+       },
+       "skinname-vector": "Vektor",
+       "vector-action-addsection": "Bagian baru",
+       "vector-action-delete": "Hapuih",
+       "vector-action-move": "Pindahkan",
+       "vector-action-protect": "Linduangkan",
+       "vector-action-undelete": "Pambatalan pangapuihan",
+       "vector-action-unprotect": "Tuka palinduangan",
+       "vector-view-create": "Buek",
+       "vector-view-edit": "Suntiang",
+       "vector-view-history": "Riwayaik",
+       "vector-view-view": "Baco",
+       "vector-view-viewsource": "Caliak sumber"
+}
diff --git a/skins/Vector/i18n/mk.json b/skins/Vector/i18n/mk.json
new file mode 100644 (file)
index 0000000..1f883ae
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bjankuloski06",
+                       "Brest"
+               ]
+       },
+       "skinname-vector": "Векторско",
+       "vector-skin-desc": "Современа верзија на рувото МоноБук со свеж изглед и многу подобрувања на употребливоста",
+       "vector.css": "/* Тука поставениот CSS се однесува на корисниците на рувото „Векторско“ */",
+       "vector.js": "/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Векторско“ */",
+       "vector-action-addsection": "Додај тема",
+       "vector-action-delete": "Избриши",
+       "vector-action-move": "Премести",
+       "vector-action-protect": "Заштити",
+       "vector-action-undelete": "Врати",
+       "vector-action-unprotect": "Измени заштита",
+       "vector-view-create": "Создај",
+       "vector-view-edit": "Уреди",
+       "vector-view-history": "Историја",
+       "vector-view-view": "Читај",
+       "vector-view-viewsource": "Извор",
+       "vector-more-actions": "Повеќе"
+}
diff --git a/skins/Vector/i18n/ml.json b/skins/Vector/i18n/ml.json
new file mode 100644 (file)
index 0000000..6ca34a1
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Anoopan",
+                       "Praveenp"
+               ]
+       },
+       "skinname-vector": "വെക്റ്റർ",
+       "vector.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. വെക്റ്റർ ദൃശ്യരൂപത്തിനു ബാധകമായിരിക്കും*/",
+       "vector.js": "/*ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് വെക്റ്റർ ദൃശ്യരൂപം ഉപയോഗിക്കുന്ന ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും*/",
+       "vector-action-addsection": "വിഷയം ചേർക്കുക",
+       "vector-action-delete": "മായ്ക്കുക",
+       "vector-action-move": "തലക്കെട്ട് മാറ്റുക",
+       "vector-action-protect": "സം‌രക്ഷിക്കുക",
+       "vector-action-undelete": "മായ്ക്കപ്പെട്ടത് പുനഃസ്ഥാപിക്കുക",
+       "vector-action-unprotect": "സംരക്ഷണത്തിൽ മാറ്റംവരുത്തുക",
+       "vector-view-create": "സൃഷ്ടിക്കുക",
+       "vector-view-edit": "തിരുത്തുക",
+       "vector-view-history": "നാൾവഴി കാണുക",
+       "vector-view-view": "വായിക്കുക",
+       "vector-view-viewsource": "മൂലരൂപം കാണുക",
+       "vector-more-actions": "കൂടുതൽ"
+}
diff --git a/skins/Vector/i18n/mn.json b/skins/Vector/i18n/mn.json
new file mode 100644 (file)
index 0000000..ceeafaf
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Chinneeb",
+                       "MongolWiki",
+                       "Wisdom"
+               ]
+       },
+       "vector-action-addsection": "Сэдэв нэмэх",
+       "vector-action-delete": "Устгах",
+       "vector-action-move": "Зөөх",
+       "vector-action-protect": "Хамгаалах",
+       "vector-action-undelete": "Үл устгах",
+       "vector-action-unprotect": "Хамгаалалтаа солих",
+       "vector-view-create": "Үүсгэх",
+       "vector-view-edit": "Засварлах",
+       "vector-view-history": "Түүх",
+       "vector-view-view": "Унших",
+       "vector-view-viewsource": "Кодыг харах"
+}
diff --git a/skins/Vector/i18n/mnc.json b/skins/Vector/i18n/mnc.json
new file mode 100644 (file)
index 0000000..60434d5
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Minggantu"
+               ]
+       },
+       "vector-action-delete": "Dabgire",
+       "vector-action-move": "Guribure",
+       "vector-action-protect": "Karmara",
+       "vector-view-create": "Ilibure",
+       "vector-view-edit": "banjibume arara",
+       "vector-view-history": "ere šu wen i suduri be baicara",
+       "vector-view-view": "hūlara",
+       "vector-view-viewsource": "da šu wen be baicara"
+}
diff --git a/skins/Vector/i18n/mr.json b/skins/Vector/i18n/mr.json
new file mode 100644 (file)
index 0000000..ab7e322
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kaajawa",
+                       "V.narsikar"
+               ]
+       },
+       "skinname-vector": "सदिश",
+       "vector-action-addsection": "विषय जोडा",
+       "vector-action-delete": "वगळा",
+       "vector-action-move": "स्थानांतरण",
+       "vector-action-protect": "सुरक्षित करा",
+       "vector-action-undelete": "वगळलेले पुनर्स्थापित करा",
+       "vector-action-unprotect": "सुरक्षितता बदला",
+       "vector-view-create": "तयार करा",
+       "vector-view-edit": "संपादन",
+       "vector-view-history": "इतिहास पहा",
+       "vector-view-view": "वाचा",
+       "vector-view-viewsource": "स्रोत पहा",
+       "vector-more-actions": "अधिक"
+}
diff --git a/skins/Vector/i18n/mrj.json b/skins/Vector/i18n/mrj.json
new file mode 100644 (file)
index 0000000..72b93b4
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Amdf"
+               ]
+       },
+       "vector-action-delete": "Карангдаш",
+       "vector-action-move": "Лӹмӹм вашталташ",
+       "vector-action-protect": "Ӹшӹклӓш",
+       "vector-view-create": "Ӹштӓш",
+       "vector-view-edit": "Тӧрлӹмӓш",
+       "vector-view-history": "Историм анжымаш",
+       "vector-view-view": "Лыдмаш",
+       "vector-view-viewsource": "Сек пӹтӓриш кодым анжалаш"
+}
diff --git a/skins/Vector/i18n/ms.json b/skins/Vector/i18n/ms.json
new file mode 100644 (file)
index 0000000..2795e44
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Anakmalaysia",
+                       "Aurora",
+                       "Pizza1016"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector.css": "/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Vector */",
+       "vector-action-addsection": "Buka topik",
+       "vector-action-delete": "Hapus",
+       "vector-action-move": "Pindah",
+       "vector-action-protect": "Lindung",
+       "vector-action-undelete": "Nyahhapus",
+       "vector-action-unprotect": "Ubah perlindungan",
+       "vector-view-create": "Cipta",
+       "vector-view-edit": "Sunting",
+       "vector-view-history": "Lihat sejarah",
+       "vector-view-view": "Baca",
+       "vector-view-viewsource": "Lihat sumber"
+}
diff --git a/skins/Vector/i18n/mt.json b/skins/Vector/i18n/mt.json
new file mode 100644 (file)
index 0000000..32c9f1a
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Chrisportelli"
+               ]
+       },
+       "vector-action-addsection": "Żid diskussjoni",
+       "vector-action-delete": "Ħassar",
+       "vector-action-move": "Mexxi",
+       "vector-action-protect": "Ipproteġi",
+       "vector-action-undelete": "Irkupra",
+       "vector-action-unprotect": "Biddel il-protezzjoni",
+       "vector-view-create": "Oħloq",
+       "vector-view-edit": "Editja",
+       "vector-view-history": "Ara l-kronoloġija",
+       "vector-view-view": "Aqra",
+       "vector-view-viewsource": "Ara s-sors"
+}
diff --git a/skins/Vector/i18n/mui.json b/skins/Vector/i18n/mui.json
new file mode 100644 (file)
index 0000000..173eda0
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mahali syarifuddin"
+               ]
+       },
+       "vector-view-view": "Baco",
+       "vector-view-viewsource": "Jingok sumber"
+}
diff --git a/skins/Vector/i18n/my.json b/skins/Vector/i18n/my.json
new file mode 100644 (file)
index 0000000..5cc7802
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Lionslayer",
+                       "Myanmars"
+               ]
+       },
+       "vector-action-addsection": "အကြောင်းအရာအသစ် ထပ်ထည့်ရန်",
+       "vector-action-delete": "ဖျက်​ပါ​",
+       "vector-action-move": "ရွှေ့ပါ",
+       "vector-action-protect": "ထိမ်း​သိမ်း​ပါ​",
+       "vector-action-undelete": "မဖျက်တော့ရန်",
+       "vector-action-unprotect": "ကာကွယ်ခြင်းကို ပြောင်းလဲရန်",
+       "vector-view-create": "စတင်ရေးသားရန်",
+       "vector-view-edit": "ပြင်ရန်",
+       "vector-view-history": "ရာဇဝင်ကြည့်ရန်",
+       "vector-view-view": "ဖတ်ရန်",
+       "vector-view-viewsource": "ရင်းမြစ်ကို ကြည့်ရန်"
+}
diff --git a/skins/Vector/i18n/myv.json b/skins/Vector/i18n/myv.json
new file mode 100644 (file)
index 0000000..723d5dd
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Botuzhaleny-sodamo"
+               ]
+       },
+       "vector-action-addsection": "Поладомс мезде кортамс",
+       "vector-action-delete": "Нардамс",
+       "vector-action-move": "Печтевтемс",
+       "vector-action-protect": "Аравтомс ванстомас",
+       "vector-action-undelete": "Вельмевтемс нардазенть",
+       "vector-action-unprotect": "Полавтомс ванстоманзо",
+       "vector-view-create": "Теемс-Шкамс",
+       "vector-view-edit": "Витнемс-петнемс",
+       "vector-view-history": "Ваномс юронзо-путовксонзо",
+       "vector-view-view": "Ловномс",
+       "vector-view-viewsource": "Ваномс косто саезь"
+}
diff --git a/skins/Vector/i18n/mzn.json b/skins/Vector/i18n/mzn.json
new file mode 100644 (file)
index 0000000..cf18634
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mjbmr",
+                       "محک"
+               ]
+       },
+       "vector-action-addsection": "ترنه گپ بزوئن",
+       "vector-action-delete": "پاک هاکردن",
+       "vector-action-move": "دکش هاکردن",
+       "vector-action-protect": "زلفن بزوئن",
+       "vector-action-undelete": "دباره بنویشته بیّن",
+       "vector-action-unprotect": "زلفن عوض هاکردن",
+       "vector-view-create": "بساتن",
+       "vector-view-edit": "دچی‌ین",
+       "vector-view-history": "تاریخچه ره بَدی‌ین",
+       "vector-view-view": "بخوندستن",
+       "vector-view-viewsource": "ونه منبع ره هارشائن"
+}
diff --git a/skins/Vector/i18n/nah.json b/skins/Vector/i18n/nah.json
new file mode 100644 (file)
index 0000000..adf8c21
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ricardo gs"
+               ]
+       },
+       "vector-action-delete": "Ticpolōz",
+       "vector-action-move": "Ticzacāz",
+       "vector-action-protect": "Ticquīxtīz",
+       "vector-view-create": "Ticchīhuāz",
+       "vector-view-edit": "Ticpatlāz",
+       "vector-view-history": "Tlahcuilōlli tlahcuilōlloh",
+       "vector-view-view": "Tāmapōhuaz",
+       "vector-view-viewsource": "Tiquittāz in mēyalli"
+}
diff --git a/skins/Vector/i18n/nan.json b/skins/Vector/i18n/nan.json
new file mode 100644 (file)
index 0000000..f1b9045
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ianbu"
+               ]
+       },
+       "vector-action-addsection": "Ke chi̍t-ê toān-lo̍h",
+       "vector-action-delete": "Thâi",
+       "vector-action-move": "Sóa khì",
+       "vector-action-protect": "Pó-hō·",
+       "vector-action-undelete": "chhú-siau thâi tiàu",
+       "vector-action-unprotect": "kái pó-hō·",
+       "vector-view-create": "Khai-sí siá",
+       "vector-view-edit": "Siu-kái",
+       "vector-view-history": "khoàⁿ le̍k-sú",
+       "vector-view-view": "Tha̍k",
+       "vector-view-viewsource": "Khoàⁿ goân-sú lōe-iông",
+       "vector-more-actions": "閣看"
+}
diff --git a/skins/Vector/i18n/nap.json b/skins/Vector/i18n/nap.json
new file mode 100644 (file)
index 0000000..862f197
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Chelin"
+               ]
+       },
+       "vector-action-addsection": "Aggiunge chiacchierata",
+       "vector-action-delete": "Scancèlla",
+       "vector-action-move": "Spusta",
+       "vector-action-protect": "Prutegge",
+       "vector-action-undelete": "Ripristina",
+       "vector-action-unprotect": "Càgna prutezzione",
+       "vector-view-create": "Cria",
+       "vector-view-edit": "Càgna",
+       "vector-view-history": "Vere cronologgia",
+       "vector-view-view": "Legge",
+       "vector-view-viewsource": "Vere sorgente"
+}
diff --git a/skins/Vector/i18n/nb.json b/skins/Vector/i18n/nb.json
new file mode 100644 (file)
index 0000000..bae61b5
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Danmichaelo",
+                       "Event",
+                       "Nghtwlkr"
+               ]
+       },
+       "vector-action-addsection": "Nytt emne",
+       "vector-action-delete": "Slett",
+       "vector-action-move": "Flytt",
+       "vector-action-protect": "Beskytt",
+       "vector-action-undelete": "Gjenopprett",
+       "vector-action-unprotect": "Endre beskyttelse",
+       "vector-view-create": "Opprett",
+       "vector-view-edit": "Rediger",
+       "vector-view-history": "Vis historikk",
+       "vector-view-view": "Les",
+       "vector-view-viewsource": "Vis kilden",
+       "vector-more-actions": "Mer"
+}
diff --git a/skins/Vector/i18n/nds-nl.json b/skins/Vector/i18n/nds-nl.json
new file mode 100644 (file)
index 0000000..be846db
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Servien"
+               ]
+       },
+       "vector-action-addsection": "Niej onderwarp",
+       "vector-action-delete": "Vortdoon",
+       "vector-action-move": "Herneumen",
+       "vector-action-protect": "Beveiligen",
+       "vector-action-undelete": "Weerummeplaotsen",
+       "vector-action-unprotect": "Beveiliging wiezigen",
+       "vector-view-create": "Anmaken",
+       "vector-view-edit": "Bewarken",
+       "vector-view-history": "Geschiedenisse bekieken",
+       "vector-view-view": "Lezen",
+       "vector-view-viewsource": "Brontekste bekieken",
+       "vector-more-actions": "Meer"
+}
diff --git a/skins/Vector/i18n/nds.json b/skins/Vector/i18n/nds.json
new file mode 100644 (file)
index 0000000..99145b0
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Slomox",
+                       "Zylbath"
+               ]
+       },
+       "vector-action-addsection": "Thema tofögen",
+       "vector-action-delete": "Wegdoon",
+       "vector-action-move": "Schuven",
+       "vector-action-protect": "Schulen",
+       "vector-action-undelete": "Wedderhalen",
+       "vector-action-unprotect": "Siedenschuul ännern",
+       "vector-view-create": "Opstellen",
+       "vector-view-edit": "Ännern",
+       "vector-view-history": "Historie bekieken",
+       "vector-view-view": "Lesen",
+       "vector-view-viewsource": "Borntext bekieken"
+}
diff --git a/skins/Vector/i18n/ne.json b/skins/Vector/i18n/ne.json
new file mode 100644 (file)
index 0000000..443becb
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bhawani Gautam",
+                       "RajeshPandey",
+                       "सरोज कुमार ढकाल"
+               ]
+       },
+       "skinname-vector": "भेक्टर",
+       "vector.css": "/* यहाँ राखिएको CSS ले भेक्टर स्किनको प्रयोगकर्ताहरुलाई प्रभावित गर्ने छ  */",
+       "vector-action-addsection": "विषय थप्नुहोस",
+       "vector-action-delete": "हटाउने",
+       "vector-action-move": "सार्ने",
+       "vector-action-protect": "सुरक्षित गर्ने",
+       "vector-action-undelete": "हटाएको रद्द गर्ने",
+       "vector-action-unprotect": "सुरक्षा परिवर्तन गर्ने",
+       "vector-view-create": "सृजना गर्ने",
+       "vector-view-edit": "सम्पादन",
+       "vector-view-history": "इतिहास हेर्ने",
+       "vector-view-view": "पढ्ने",
+       "vector-view-viewsource": "स्रोत हेर्ने"
+}
diff --git a/skins/Vector/i18n/new.json b/skins/Vector/i18n/new.json
new file mode 100644 (file)
index 0000000..f972066
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Eukesh"
+               ]
+       },
+       "vector-action-move": "संकादिसँ",
+       "vector-view-create": "दयेकादिसँ",
+       "vector-view-edit": "सम्पादन",
+       "vector-view-history": "इतिहास स्वयादिसँ",
+       "vector-view-view": "ब्वनादिसँ"
+}
diff --git a/skins/Vector/i18n/nl.json b/skins/Vector/i18n/nl.json
new file mode 100644 (file)
index 0000000..5e8ad90
--- /dev/null
@@ -0,0 +1,26 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Calak",
+                       "Romaine",
+                       "SPQRobin",
+                       "Siebrand",
+                       "Troefkaart"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Vector */",
+       "vector.js": "/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Vector gebruiken */",
+       "vector-action-addsection": "Kopje toevoegen",
+       "vector-action-delete": "Verwijderen",
+       "vector-action-move": "Hernoemen",
+       "vector-action-protect": "Beveiligen",
+       "vector-action-undelete": "Terugplaatsen",
+       "vector-action-unprotect": "Beveiliging wijzigen",
+       "vector-view-create": "Aanmaken",
+       "vector-view-edit": "Bewerken",
+       "vector-view-history": "Geschiedenis weergeven",
+       "vector-view-view": "Lezen",
+       "vector-view-viewsource": "Brontekst bekijken",
+       "vector-more-actions": "Meer"
+}
diff --git a/skins/Vector/i18n/nn.json b/skins/Vector/i18n/nn.json
new file mode 100644 (file)
index 0000000..6fd99f1
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gunnernett",
+                       "Njardarlogar"
+               ]
+       },
+       "vector-action-addsection": "Nytt emne",
+       "vector-action-delete": "Slett",
+       "vector-action-move": "Flytt",
+       "vector-action-protect": "Vern",
+       "vector-action-undelete": "Gjenopprett",
+       "vector-action-unprotect": "Endra vern",
+       "vector-view-create": "Opprett",
+       "vector-view-edit": "Endre",
+       "vector-view-history": "Sjå historikken",
+       "vector-view-view": "Les",
+       "vector-view-viewsource": "Sjå kjelda",
+       "vector-more-actions": "Meir"
+}
diff --git a/skins/Vector/i18n/nov.json b/skins/Vector/i18n/nov.json
new file mode 100644 (file)
index 0000000..66ad923
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Malafaya"
+               ]
+       },
+       "vector-action-delete": "Ekarta",
+       "vector-view-edit": "Modifika",
+       "vector-view-view": "Lekte"
+}
diff --git a/skins/Vector/i18n/nrm.json b/skins/Vector/i18n/nrm.json
new file mode 100644 (file)
index 0000000..4c332f2
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "WikiEoFrEn"
+               ]
+       },
+       "vector-view-create": "Criyaer",
+       "vector-view-edit": "Amendaer",
+       "vector-view-view": "Luure"
+}
diff --git a/skins/Vector/i18n/nso.json b/skins/Vector/i18n/nso.json
new file mode 100644 (file)
index 0000000..ea729e7
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mohau"
+               ]
+       },
+       "vector-action-addsection": "Lokela sererwa",
+       "vector-action-delete": "Phumula",
+       "vector-action-move": "Huduša",
+       "vector-action-protect": "Lota",
+       "vector-view-create": "Hlola",
+       "vector-view-edit": "Fetola",
+       "vector-view-history": "Laetša histori",
+       "vector-view-view": "Bala",
+       "vector-view-viewsource": "Lebelela mothopo"
+}
diff --git a/skins/Vector/i18n/oc.json b/skins/Vector/i18n/oc.json
new file mode 100644 (file)
index 0000000..2aa517e
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Boulaur",
+                       "Cedric31"
+               ]
+       },
+       "vector.css": "/* Lo CSS plaçat aicí afectarà los utilizaires de l’abilhatge Vector */",
+       "vector.js": "/* Tot JavaScript aicí serà cargat amb las paginas accedidas pels utilizaires de l’abilhatge Vector unicament. */",
+       "vector-action-addsection": "Apondre un subjècte",
+       "vector-action-delete": "Suprimir",
+       "vector-action-move": "Tornar nomenar",
+       "vector-action-protect": "Protegir",
+       "vector-action-undelete": "Restablir",
+       "vector-action-unprotect": "Suprimir la proteccion",
+       "vector-view-create": "Crear",
+       "vector-view-edit": "Modificar",
+       "vector-view-history": "Veire l'istoric",
+       "vector-view-view": "Legir",
+       "vector-view-viewsource": "Veire la font"
+}
diff --git a/skins/Vector/i18n/or.json b/skins/Vector/i18n/or.json
new file mode 100644 (file)
index 0000000..289cc3c
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Jnanaranjan Sahu",
+                       "Psubhashish"
+               ]
+       },
+       "vector-action-addsection": "ନୂଆ ଯୋଡ଼ନ୍ତୁ",
+       "vector-action-delete": "ଲିଭାଇବେ",
+       "vector-action-move": "ଘୁଞ୍ଚାଇବେ",
+       "vector-action-protect": "କିଳିବେ",
+       "vector-action-undelete": "ଲିଭାଇବେ ନାହିଁ",
+       "vector-action-unprotect": "କିଳିବେ ନାହିଁ",
+       "vector-view-create": "ତିଆରି କରନ୍ତୁ",
+       "vector-view-edit": "ସମ୍ପାଦନା (Edit)",
+       "vector-view-history": "ଇତିହାସ",
+       "vector-view-view": "ପଢ଼ନ୍ତୁ",
+       "vector-view-viewsource": "ସୋର୍ସ ଦେଖନ୍ତୁ"
+}
diff --git a/skins/Vector/i18n/os.json b/skins/Vector/i18n/os.json
new file mode 100644 (file)
index 0000000..a178289
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Amikeco",
+                       "Bouron"
+               ]
+       },
+       "vector-action-addsection": "Нæуæг ныхас бакæнын",
+       "vector-action-delete": "Схафын",
+       "vector-action-move": "Ном ивын",
+       "vector-action-protect": "Сæхгæнын",
+       "vector-action-undelete": "Рацаразын",
+       "vector-action-unprotect": "Ивын хъахъхъæд",
+       "vector-view-create": "Скæнын",
+       "vector-view-edit": "Ивын",
+       "vector-view-history": "Истори",
+       "vector-view-view": "Кæсын",
+       "vector-view-viewsource": "Код кæсын"
+}
diff --git a/skins/Vector/i18n/pa.json b/skins/Vector/i18n/pa.json
new file mode 100644 (file)
index 0000000..5f15399
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Aalam",
+                       "Babanwalia",
+                       "Raj Singh",
+                       "TariButtar"
+               ]
+       },
+       "vector-action-addsection": "ਵਿਸ਼ਾ ਜੋੜੋ",
+       "vector-action-delete": "ਹਟਾਓ",
+       "vector-action-move": "ਭੇਜੋ",
+       "vector-action-protect": "ਸੁਰੱਖਿਆ",
+       "vector-action-undelete": "ਹਟਾਉਣਾ-ਵਾਪਸ",
+       "vector-action-unprotect": "ਸੁਰੱਖਿਆ ਬਦਲੋ",
+       "vector-view-create": "ਬਣਾਓ",
+       "vector-view-edit": "ਸੋਧੋ",
+       "vector-view-history": "ਅਤੀਤ ਵੇਖੋ",
+       "vector-view-view": "ਪੜ੍ਹੋ",
+       "vector-view-viewsource": "ਸਰੋਤ ਵੇਖੋ"
+}
diff --git a/skins/Vector/i18n/pam.json b/skins/Vector/i18n/pam.json
new file mode 100644 (file)
index 0000000..09afda5
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Katimawan2005",
+                       "Val2397"
+               ]
+       },
+       "vector-action-addsection": "Dagdagan ing pisasabian",
+       "vector-action-delete": "Buran",
+       "vector-action-move": "Iyalis",
+       "vector-action-protect": "Protectan/kambilan",
+       "vector-action-undelete": "Isubli/iurung ya pangabura",
+       "vector-action-unprotect": "Idayu ya panga-protecta",
+       "vector-view-create": "Maglalang",
+       "vector-view-edit": "Alilan",
+       "vector-view-history": "Lawen ya ing amlat",
+       "vector-view-view": "Basan",
+       "vector-view-viewsource": "Lawen ya ing pikuanan"
+}
diff --git a/skins/Vector/i18n/pbb.json b/skins/Vector/i18n/pbb.json
new file mode 100644 (file)
index 0000000..9ddeada
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sahaquiel9102"
+               ]
+       },
+       "vector-action-delete": "Cjũcj",
+       "vector-action-move": "Quẽese'j",
+       "vector-action-protect": "Pjupj",
+       "vector-view-edit": "Yu'ptjej",
+       "vector-view-view": "Lẽeĩ"
+}
diff --git a/skins/Vector/i18n/pcd.json b/skins/Vector/i18n/pcd.json
new file mode 100644 (file)
index 0000000..57af67e
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Geoleplubo"
+               ]
+       },
+       "vector-action-addsection": "Rajouter un sujeut",
+       "vector-action-delete": "Défacer",
+       "vector-action-move": "Canger ch'nom",
+       "vector-action-protect": "Garantir",
+       "vector-action-undelete": "N'poin défacher",
+       "vector-action-unprotect": "Canger l'garantie",
+       "vector-view-create": "Créer",
+       "vector-view-edit": "Éditer",
+       "vector-view-history": "Vir l'histoère",
+       "vector-view-view": "Lire",
+       "vector-view-viewsource": "Vir l'source"
+}
diff --git a/skins/Vector/i18n/pdc.json b/skins/Vector/i18n/pdc.json
new file mode 100644 (file)
index 0000000..a3903b2
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Xqt"
+               ]
+       },
+       "vector-action-delete": "Verwische",
+       "vector-action-move": "Ziehe",
+       "vector-action-protect": "Schitze",
+       "vector-view-create": "Schtaerte",
+       "vector-view-edit": "Ennere",
+       "vector-view-history": "Gschicht zeige",
+       "vector-view-view": "Lese"
+}
diff --git a/skins/Vector/i18n/pfl.json b/skins/Vector/i18n/pfl.json
new file mode 100644 (file)
index 0000000..419eb4e
--- /dev/null
@@ -0,0 +1,17 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Manuae"
+               ]
+       },
+       "vector-action-addsection": "Abschnidd dzufiesche",
+       "vector-action-delete": "Lesche",
+       "vector-action-move": "Vaschiewe",
+       "vector-action-protect": "Schidze",
+       "vector-action-undelete": "Zriggbringe",
+       "vector-view-create": "Õleesche",
+       "vector-view-edit": "Drõ schaffe",
+       "vector-view-history": "Dadaigschischd",
+       "vector-view-view": "Lese",
+       "vector-view-viewsource": "Gwelltegschd zaische"
+}
diff --git a/skins/Vector/i18n/pi.json b/skins/Vector/i18n/pi.json
new file mode 100644 (file)
index 0000000..cc57f67
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Hemant wikikosh1"
+               ]
+       },
+       "vector-view-create": "रचेतु"
+}
diff --git a/skins/Vector/i18n/pih.json b/skins/Vector/i18n/pih.json
new file mode 100644 (file)
index 0000000..81fb2fc
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "AmaryllisGardener"
+               ]
+       },
+       "vector-view-history": "View histrei"
+}
diff --git a/skins/Vector/i18n/pl.json b/skins/Vector/i18n/pl.json
new file mode 100644 (file)
index 0000000..d0faf4d
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Matma Rex",
+                       "Sp5uhe"
+               ]
+       },
+       "skinname-vector": "Wektor",
+       "vector.css": "/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Wektor */",
+       "vector.js": "/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Wektor */",
+       "vector-action-addsection": "Dodaj temat",
+       "vector-action-delete": "Usuń",
+       "vector-action-move": "Przenieś",
+       "vector-action-protect": "Zabezpiecz",
+       "vector-action-undelete": "Odtwórz",
+       "vector-action-unprotect": "Zmień zabezpieczenie",
+       "vector-view-create": "Utwórz",
+       "vector-view-edit": "Edytuj",
+       "vector-view-history": "Wyświetl historię",
+       "vector-view-view": "Czytaj",
+       "vector-view-viewsource": "Tekst źródłowy",
+       "vector-more-actions": "Więcej"
+}
diff --git a/skins/Vector/i18n/pms.json b/skins/Vector/i18n/pms.json
new file mode 100644 (file)
index 0000000..79627b0
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Borichèt"
+               ]
+       },
+       "vector-action-addsection": "Gionté n'argoment",
+       "vector-action-delete": "Scancelé",
+       "vector-action-move": "Tramudé",
+       "vector-action-protect": "Protege",
+       "vector-action-undelete": "Arcuperé",
+       "vector-action-unprotect": "Cangé la protession",
+       "vector-view-create": "Creé",
+       "vector-view-edit": "Modifiché",
+       "vector-view-history": "Smon-e la stòria",
+       "vector-view-view": "Lese",
+       "vector-view-viewsource": "Vëdde la sorgiss"
+}
diff --git a/skins/Vector/i18n/pnb.json b/skins/Vector/i18n/pnb.json
new file mode 100644 (file)
index 0000000..601f513
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Arslan",
+                       "Khalid Mahmood"
+               ]
+       },
+       "vector-action-addsection": "مضمون پاؤ",
+       "vector-action-delete": "مکاؤ",
+       "vector-action-move": "ٹرو",
+       "vector-action-protect": "بچاؤ",
+       "vector-action-undelete": "واپس لیاؤ",
+       "vector-action-unprotect": "تبدیلی بچاؤ",
+       "vector-view-create": "بناؤ",
+       "vector-view-edit": "لکھو",
+       "vector-view-history": "تریخ وکھاؤ",
+       "vector-view-view": "پڑھو",
+       "vector-view-viewsource": "ویکھو"
+}
diff --git a/skins/Vector/i18n/pnt.json b/skins/Vector/i18n/pnt.json
new file mode 100644 (file)
index 0000000..1e5ecad
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Omnipaedista",
+                       "Sinopeus",
+                       "ZaDiak"
+               ]
+       },
+       "vector-action-delete": "Σβήσον",
+       "vector-action-move": "Ετεροχλάεμαν",
+       "vector-action-protect": "Ασπάλιγμαν",
+       "vector-action-undelete": "Κλώσιμον",
+       "vector-action-unprotect": "Άνοιγμαν",
+       "vector-view-create": "Ποίσον",
+       "vector-view-edit": "Άλλαξον",
+       "vector-view-history": "Τερέστεν ιστορίαν",
+       "vector-view-view": "Δεάβασον",
+       "vector-view-viewsource": "Τερέστεν κωδικόν"
+}
diff --git a/skins/Vector/i18n/ppl.json b/skins/Vector/i18n/ppl.json
new file mode 100644 (file)
index 0000000..1c80fd8
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "A R King"
+               ]
+       },
+       "vector-action-addsection": "Yankwik temaj",
+       "vector-action-delete": "Shikishti",
+       "vector-action-move": "Shikijkwani",
+       "vector-action-undelete": "Shalkwepa",
+       "vector-view-create": "Shikchiwa",
+       "vector-view-edit": "Shikpata",
+       "vector-view-history": "Ken mupatak",
+       "vector-view-view": "Shiamatachia",
+       "vector-view-viewsource": "Shikita ne codigoj"
+}
diff --git a/skins/Vector/i18n/prg.json b/skins/Vector/i18n/prg.json
new file mode 100644 (file)
index 0000000..dfd71db
--- /dev/null
@@ -0,0 +1,17 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Nertiks",
+                       "Peteris"
+               ]
+       },
+       "vector-action-delete": "Āupausinais",
+       "vector-action-move": "Prapīdais",
+       "vector-action-protect": "Kūnsteis",
+       "vector-action-unprotect": "Etkūnteis",
+       "vector-view-create": "Teīkeis",
+       "vector-view-edit": "Redigīs",
+       "vector-view-history": "Enwaidinnais istōrijan",
+       "vector-view-view": "Skaitāis",
+       "vector-view-viewsource": "Enwaidinnais appun"
+}
diff --git a/skins/Vector/i18n/ps.json b/skins/Vector/i18n/ps.json
new file mode 100644 (file)
index 0000000..2ccb265
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ahmed-Najib-Biabani-Ibrahimkhel"
+               ]
+       },
+       "skinname-vector": "وېکټور",
+       "vector.css": "/* د CSS هره بڼه چې دلته ځای پر ځای کېږي هغه به د وېکټور د پوښ ټولو کارنانو لپاره کار کوي */",
+       "vector.js": "/* د جاوا هر يو سکرېپټ چې دلته ځای پر ځای کېږي هغه به د وېکټور د پوښ ټولو کارنانو لپاره کار کوي */",
+       "vector-action-addsection": "سرليکونه ورگډول",
+       "vector-action-delete": "ړنگول",
+       "vector-action-move": "لېږدول",
+       "vector-action-protect": "ژغورل",
+       "vector-action-undelete": "ناړنگول",
+       "vector-action-unprotect": "ژغورنه بدلول",
+       "vector-view-create": "جوړول",
+       "vector-view-edit": "سمول",
+       "vector-view-history": "پېښليک کتل",
+       "vector-view-view": "لوستل",
+       "vector-view-viewsource": "سرچينه کتل"
+}
diff --git a/skins/Vector/i18n/pt-br.json b/skins/Vector/i18n/pt-br.json
new file mode 100644 (file)
index 0000000..db47675
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Cainamarques",
+                       "Diego Queiroz",
+                       "Giro720",
+                       "Helder.wiki",
+                       555
+               ]
+       },
+       "vector.js": "/* Qualquer JavaScript aqui colocado afetará os usuários do skin Vector */",
+       "vector-action-addsection": "Adicionar tópico",
+       "vector-action-delete": "Eliminar",
+       "vector-action-move": "Mover",
+       "vector-action-protect": "Proteger",
+       "vector-action-undelete": "Restaurar",
+       "vector-action-unprotect": "Alterar a proteção",
+       "vector-view-create": "Criar",
+       "vector-view-edit": "Editar",
+       "vector-view-history": "Ver histórico",
+       "vector-view-view": "Ler",
+       "vector-view-viewsource": "Ver código-fonte",
+       "vector-more-actions": "Mais"
+}
diff --git a/skins/Vector/i18n/pt.json b/skins/Vector/i18n/pt.json
new file mode 100644 (file)
index 0000000..9882289
--- /dev/null
@@ -0,0 +1,28 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Crazymadlover",
+                       "Giro720",
+                       "Hamilton Abreu",
+                       "Malafaya",
+                       "Vitorvicentevalente",
+                       "Waldir"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector-skin-desc": "Versão moderna do MonoBook com um visual fresco e várias melhorias de usabilidade",
+       "vector.css": "/* Código CSS colocado aqui afectará os utilizadores do tema Vector */",
+       "vector.js": "/* Código Javascript colocado aqui será carregado para utilizadores do tema Vector */",
+       "vector-action-addsection": "Adicionar&nbsp;tópico",
+       "vector-action-delete": "Eliminar",
+       "vector-action-move": "Mover",
+       "vector-action-protect": "Proteger",
+       "vector-action-undelete": "Restaurar",
+       "vector-action-unprotect": "Alterar protecção",
+       "vector-view-create": "Criar",
+       "vector-view-edit": "Editar",
+       "vector-view-history": "Ver histórico",
+       "vector-view-view": "Ler",
+       "vector-view-viewsource": "Ver fonte",
+       "vector-more-actions": "Mais"
+}
index ad42fa4..fea395b 100644 (file)
@@ -1,8 +1,16 @@
 {
        "@metadata": {
-               "authors": []
+               "authors": [
+                       "Darth Kule",
+                       "EugeneZelenko",
+                       "Lloffiwr",
+                       "Shirayuki",
+                       "Umherirrender",
+                       "Matma Rex"
+               ]
        },
        "skinname-vector": "{{optional}}",
+       "vector-skin-desc": "{{desc|what=skin|name=Vector|url=https://www.mediawiki.org/wiki/Skin:Vector}}",
        "vector.css": "{{optional}}",
        "vector.js": "{{optional}}",
        "vector-action-addsection": "Used in the Vector skin. See for example {{canonicalurl:Talk:Main_Page|useskin=vector}}",
diff --git a/skins/Vector/i18n/qu.json b/skins/Vector/i18n/qu.json
new file mode 100644 (file)
index 0000000..789fd27
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "AlimanRuna"
+               ]
+       },
+       "vector-action-addsection": "Allwiyta yapay",
+       "vector-action-delete": "Qulluy",
+       "vector-action-move": "Astay",
+       "vector-action-protect": "Amachay",
+       "vector-action-undelete": "Qullusqata paqarichiy",
+       "vector-action-unprotect": "Amachayta wakinchay",
+       "vector-view-create": "Kamariy",
+       "vector-view-edit": "Llamk'apuy",
+       "vector-view-history": "Wiñay kawsayta qhaway",
+       "vector-view-view": "Ñawiriy",
+       "vector-view-viewsource": "Pukyu qillqata qhaway",
+       "vector-more-actions": "Aswan"
+}
diff --git a/skins/Vector/i18n/qug.json b/skins/Vector/i18n/qug.json
new file mode 100644 (file)
index 0000000..306f4ae
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sylvain2803"
+               ]
+       },
+       "vector-action-addsection": "Shuk mushuk rimanakuyta kallarina",
+       "vector-action-delete": "Pichana",
+       "vector-action-move": "Apakuna",
+       "vector-action-protect": "Harkana",
+       "vector-action-undelete": "Kutin wacharichina",
+       "vector-action-unprotect": "Harkayta shukchina",
+       "vector-view-create": "Kamarina",
+       "vector-view-edit": "Killkana",
+       "vector-view-history": "Wiñay kawsayta rikuna",
+       "vector-view-view": "Killkakatina",
+       "vector-view-viewsource": "Pukyu killkata rikuna"
+}
diff --git a/skins/Vector/i18n/rap.json b/skins/Vector/i18n/rap.json
new file mode 100644 (file)
index 0000000..b1f644c
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Clerc",
+                       "MJohnsson"
+               ]
+       },
+       "vector-action-delete": "horo'i",
+       "vector-view-edit": "Haka titika"
+}
diff --git a/skins/Vector/i18n/rgn.json b/skins/Vector/i18n/rgn.json
new file mode 100644 (file)
index 0000000..784b8c5
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "vector-action-addsection": "Zonta una cjacarèda",
+       "vector-action-delete": "Scanzèla",
+       "vector-action-move": "Chèmbia nòm",
+       "vector-action-protect": "Metti-j una pruteziò",
+       "vector-action-undelete": "Armett a post",
+       "vector-action-unprotect": "Sbloca"
+}
diff --git a/skins/Vector/i18n/rif.json b/skins/Vector/i18n/rif.json
new file mode 100644 (file)
index 0000000..44de1de
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "MoubarikBelkasim"
+               ]
+       },
+       "vector-action-move": "Smuṭṭi",
+       "vector-view-create": "Seɣnu",
+       "vector-view-edit": "Ẓṛeg",
+       "vector-view-history": "Ẓeṛ amezruy",
+       "vector-view-view": "Ɣeṛ"
+}
diff --git a/skins/Vector/i18n/rm.json b/skins/Vector/i18n/rm.json
new file mode 100644 (file)
index 0000000..83ce427
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gion-andri"
+               ]
+       },
+       "vector-action-addsection": "Agiuntar chapitel",
+       "vector-action-delete": "Stizzar",
+       "vector-action-move": "Spustar",
+       "vector-action-protect": "Bloccar",
+       "vector-action-undelete": "Restituir",
+       "vector-action-unprotect": "Midar la protecziun",
+       "vector-view-create": "Crear",
+       "vector-view-edit": "Modifitgar",
+       "vector-view-history": "Cronologia",
+       "vector-view-view": "Leger",
+       "vector-view-viewsource": "Mussar il code"
+}
diff --git a/skins/Vector/i18n/rmf.json b/skins/Vector/i18n/rmf.json
new file mode 100644 (file)
index 0000000..9865a50
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Szonja"
+               ]
+       },
+       "vector-action-addsection": "Tilja topikos",
+       "vector-action-delete": "Tšuu nikki",
+       "vector-action-undelete": "Tšuu paale",
+       "vector-view-create": "Luona",
+       "vector-view-edit": "Muoka",
+       "vector-view-history": "Sik histores",
+       "vector-view-view": "Draba",
+       "vector-view-viewsource": "Sik navasiinako koodos"
+}
diff --git a/skins/Vector/i18n/ro.json b/skins/Vector/i18n/ro.json
new file mode 100644 (file)
index 0000000..96725c0
--- /dev/null
@@ -0,0 +1,25 @@
+{
+       "@metadata": {
+               "authors": [
+                       "AdiJapan",
+                       "Danutz",
+                       "Firilacroco",
+                       "Minisarm",
+                       "Strainu"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector.css": "/* CSS plasate aici vor afecta utilizatorii stilului Vector */",
+       "vector-action-addsection": "Mesaj nou",
+       "vector-action-delete": "Ștergere",
+       "vector-action-move": "Redenumire",
+       "vector-action-protect": "Protejare",
+       "vector-action-undelete": "Recuperare",
+       "vector-action-unprotect": "Modificare protecție",
+       "vector-view-create": "Creare",
+       "vector-view-edit": "Modificare",
+       "vector-view-history": "Istoric",
+       "vector-view-view": "Lectură",
+       "vector-view-viewsource": "Sursă pagină",
+       "vector-more-actions": "Mai mult"
+}
diff --git a/skins/Vector/i18n/roa-tara.json b/skins/Vector/i18n/roa-tara.json
new file mode 100644 (file)
index 0000000..c5721e7
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Joetaras"
+               ]
+       },
+       "skinname-vector": "Vettore",
+       "vector.css": "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Vettore */",
+       "vector.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Vettore */",
+       "vector-action-addsection": "Aggiunge 'na discussiona",
+       "vector-action-delete": "Scangille",
+       "vector-action-move": "Spuèste",
+       "vector-action-protect": "Protegge",
+       "vector-action-undelete": "Repristine",
+       "vector-action-unprotect": "Cange 'a protezione",
+       "vector-view-create": "Ccreje",
+       "vector-view-edit": "Cange",
+       "vector-view-history": "Vide 'u cunde",
+       "vector-view-view": "Ligge",
+       "vector-view-viewsource": "Vide 'u sorgende"
+}
diff --git a/skins/Vector/i18n/ru.json b/skins/Vector/i18n/ru.json
new file mode 100644 (file)
index 0000000..cd344b9
--- /dev/null
@@ -0,0 +1,28 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ignatus",
+                       "JenVan",
+                       "Kaganer",
+                       "Nemo bis",
+                       "Okras",
+                       "Александр Сигачёв"
+               ]
+       },
+       "skinname-vector": "Векторное",
+       "vector-skin-desc": "Современная версия MonoBook с обновлённым оформлением и многими улучшениями в юзабилити",
+       "vector.css": "/* Размещённый здесь CSS будет применяться к векторной теме оформления  */",
+       "vector.js": "/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Vector */",
+       "vector-action-addsection": "Добавить тему",
+       "vector-action-delete": "Удалить",
+       "vector-action-move": "Переименовать",
+       "vector-action-protect": "Защитить",
+       "vector-action-undelete": "Восстановить",
+       "vector-action-unprotect": "Изменить защиту",
+       "vector-view-create": "Создание",
+       "vector-view-edit": "Править",
+       "vector-view-history": "История",
+       "vector-view-view": "Читать",
+       "vector-view-viewsource": "Просмотр разметки",
+       "vector-more-actions": "Ещё"
+}
diff --git a/skins/Vector/i18n/rue.json b/skins/Vector/i18n/rue.json
new file mode 100644 (file)
index 0000000..2147f80
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gazeb"
+               ]
+       },
+       "vector-action-addsection": "Придати тему",
+       "vector-action-delete": "Вымазати",
+       "vector-action-move": "Переменовати",
+       "vector-action-protect": "Всокотити",
+       "vector-action-undelete": "Обновити",
+       "vector-action-unprotect": "Змінити замок",
+       "vector-view-create": "Створити",
+       "vector-view-edit": "Едітовати",
+       "vector-view-history": "Видїти історію",
+       "vector-view-view": "Чітати",
+       "vector-view-viewsource": "Видїти код"
+}
diff --git a/skins/Vector/i18n/rup.json b/skins/Vector/i18n/rup.json
new file mode 100644 (file)
index 0000000..3b0ba68
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "D'AroemenenZullenNiVergaan"
+               ]
+       },
+       "vector-action-addsection": "Dimândari nauâ",
+       "vector-view-history": "Veḑ istoricu"
+}
diff --git a/skins/Vector/i18n/rw.json b/skins/Vector/i18n/rw.json
new file mode 100644 (file)
index 0000000..d151c2d
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Vogone"
+               ]
+       },
+       "vector-action-move": "Imura",
+       "vector-view-edit": "Hindura",
+       "vector-view-history": "Reba amateka",
+       "vector-view-view": "Soma"
+}
diff --git a/skins/Vector/i18n/ryu.json b/skins/Vector/i18n/ryu.json
new file mode 100644 (file)
index 0000000..ee1d2c1
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kyoww"
+               ]
+       },
+       "vector-view-edit": "直すん",
+       "vector-view-view": "読むん"
+}
diff --git a/skins/Vector/i18n/sa.json b/skins/Vector/i18n/sa.json
new file mode 100644 (file)
index 0000000..610ba3e
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "NehalDaveND",
+                       "Shubha"
+               ]
+       },
+       "vector-action-addsection": "विषयः योज्यताम्",
+       "vector-action-delete": "अपाक्रियताम्",
+       "vector-action-move": "शीर्षकं परिवर्त्यताम्",
+       "vector-action-protect": "संरक्ष्यताम्",
+       "vector-action-undelete": "नापाकृतं",
+       "vector-action-unprotect": "संरक्षणं परिवर्तयतु",
+       "vector-view-create": "सृज्यताम्",
+       "vector-view-edit": "सम्पाद्यताम्",
+       "vector-view-history": "इतिहासः दृश्यताम्",
+       "vector-view-view": "पठ्यताम्",
+       "vector-view-viewsource": "स्रोतः दृश्यताम्"
+}
diff --git a/skins/Vector/i18n/sah.json b/skins/Vector/i18n/sah.json
new file mode 100644 (file)
index 0000000..9d44db5
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "HalanTul"
+               ]
+       },
+       "vector-action-addsection": "Тиэмэ эбии",
+       "vector-action-delete": "Сот",
+       "vector-action-move": "Аатын уларыт",
+       "vector-action-protect": "Уларыйбат гын",
+       "vector-action-undelete": "Төннөр",
+       "vector-action-unprotect": "Көмүскэлин уларыт",
+       "vector-view-create": "Ай",
+       "vector-view-edit": "Уларыт",
+       "vector-view-history": "Устуоруйатын көрүү",
+       "vector-view-view": "Ааҕыы",
+       "vector-view-viewsource": "Бэлиэлэрин көрүү"
+}
diff --git a/skins/Vector/i18n/sat.json b/skins/Vector/i18n/sat.json
new file mode 100644 (file)
index 0000000..d079721
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Albinus",
+                       "Samar88",
+                       "Srabony90"
+               ]
+       },
+       "vector-action-addsection": "Asol katha joṛaome",
+       "vector-action-delete": "Giḍi",
+       "vector-action-move": "Ocoḱ́me",
+       "vector-action-protect": "Bańcao",
+       "vector-action-undelete": "Bań getgiḍi",
+       "vector-action-unprotect": "Bodol rukhiyạ",
+       "vector-view-create": "Tearme",
+       "vector-view-edit": "So̠mpado̠n",
+       "vector-view-history": "Jạṛ ńelme",
+       "vector-view-view": "Paṛhaḱme",
+       "vector-view-viewsource": "Ńamoḱaḱ ńelme"
+}
diff --git a/skins/Vector/i18n/saz.json b/skins/Vector/i18n/saz.json
new file mode 100644 (file)
index 0000000..a3a6ded
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "MooRePrabu"
+               ]
+       },
+       "vector-view-view": "ꢗꢾꢮ꣄ꢣꢶ"
+}
diff --git a/skins/Vector/i18n/sc.json b/skins/Vector/i18n/sc.json
new file mode 100644 (file)
index 0000000..e7876a6
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Andria",
+                       "Marzedu",
+                       "Via maxima"
+               ]
+       },
+       "vector-action-addsection": "Giunghe cuntierra",
+       "vector-action-delete": "Cantzella",
+       "vector-action-move": "Move",
+       "vector-action-protect": "Ampara",
+       "vector-action-undelete": "Recùpera",
+       "vector-view-create": "Crea",
+       "vector-view-edit": "Acontza",
+       "vector-view-history": "Càstia istòria",
+       "vector-view-view": "Leghe",
+       "vector-view-viewsource": "Càstia mitza",
+       "vector-more-actions": "Prus"
+}
diff --git a/skins/Vector/i18n/scn.json b/skins/Vector/i18n/scn.json
new file mode 100644 (file)
index 0000000..a9483c4
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gmelfi",
+                       "Melos"
+               ]
+       },
+       "vector-action-addsection": "Agghiunci argumentu",
+       "vector-action-delete": "Elìmina",
+       "vector-action-move": "Sposta",
+       "vector-action-protect": "Pruteggi",
+       "vector-action-undelete": "Riprìstina",
+       "vector-action-unprotect": "Cancia la prutizzioni",
+       "vector-view-create": "Crea",
+       "vector-view-edit": "Cancia",
+       "vector-view-history": "Talìa a storia",
+       "vector-view-view": "Leggi",
+       "vector-view-viewsource": "Talìa la fonti",
+       "vector-more-actions": "Àutri cosi"
+}
diff --git a/skins/Vector/i18n/sco.json b/skins/Vector/i18n/sco.json
new file mode 100644 (file)
index 0000000..acf5387
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Avicennasis",
+                       "John Reid",
+                       "Omnipaedista"
+               ]
+       },
+       "vector-action-addsection": "Eik topic",
+       "vector-action-delete": "Delyte",
+       "vector-action-move": "Muiv",
+       "vector-action-protect": "Fend",
+       "vector-action-undelete": "Ondelyte",
+       "vector-action-unprotect": "Chynge protection",
+       "vector-view-create": "Ceaut",
+       "vector-view-edit": "Eedit",
+       "vector-view-history": "See histerie",
+       "vector-view-view": "Read",
+       "vector-view-viewsource": "See Soorce"
+}
diff --git a/skins/Vector/i18n/sd.json b/skins/Vector/i18n/sd.json
new file mode 100644 (file)
index 0000000..04a5370
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "vector-action-delete": "ڊاھيو",
+       "vector-action-move": "چوريو",
+       "vector-action-protect": "تحفظيو",
+       "vector-action-unprotect": "اڻتحفظيو",
+       "vector-view-create": "سرجيو",
+       "vector-view-edit": "سنواريو",
+       "vector-view-viewsource": "ڪوڊ ڏسو"
+}
diff --git a/skins/Vector/i18n/sdc.json b/skins/Vector/i18n/sdc.json
new file mode 100644 (file)
index 0000000..c843931
--- /dev/null
@@ -0,0 +1,17 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Felis",
+                       "Jun Misugi"
+               ]
+       },
+       "vector-action-addsection": "Aggiungì oggettu",
+       "vector-action-delete": "Canzella",
+       "vector-action-move": "Ippustha",
+       "vector-action-protect": "Pruteggì",
+       "vector-view-create": "Cria",
+       "vector-view-edit": "Mudifigga",
+       "vector-view-history": "Vèdi isthòria",
+       "vector-view-view": "Leggi",
+       "vector-view-viewsource": "Vèdi fonti"
+}
diff --git a/skins/Vector/i18n/sdh.json b/skins/Vector/i18n/sdh.json
new file mode 100644 (file)
index 0000000..2f4523f
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Paraw2"
+               ]
+       },
+       "vector-action-addsection": "بابەت تازە بدە سەری",
+       "vector-action-delete": "بسڕەوە",
+       "vector-action-move": "جیوەجی بکە",
+       "vector-action-protect": "بپیەرێزەێ",
+       "vector-view-create": "درسکردن",
+       "vector-view-edit": "وێراشتەێ بکە",
+       "vector-view-history": "دیرۆکەگەی بۊن",
+       "vector-view-view": "بخوەنە",
+       "vector-view-viewsource": "سەرچاوەگەێ بۊن"
+}
diff --git a/skins/Vector/i18n/se.json b/skins/Vector/i18n/se.json
new file mode 100644 (file)
index 0000000..bb0a900
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gálaniitoluodda",
+                       "Jeblad",
+                       "Trondtr"
+               ]
+       },
+       "vector-action-addsection": "Lasit fáttá",
+       "vector-action-delete": "Sihko",
+       "vector-action-move": "Sirdde",
+       "vector-action-protect": "Suodjal",
+       "vector-action-undelete": "Máhcat",
+       "vector-action-unprotect": "Rievdat suodjaleami",
+       "vector-view-create": "Álggat",
+       "vector-view-edit": "Rievdat",
+       "vector-view-history": "Geahča historjjá",
+       "vector-view-view": "Loga",
+       "vector-view-viewsource": "Geahča gáldokoda"
+}
diff --git a/skins/Vector/i18n/sg.json b/skins/Vector/i18n/sg.json
new file mode 100644 (file)
index 0000000..2f65834
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mdkidiri"
+               ]
+       },
+       "vector-action-addsection": "Zîa mbênî lilö daä",
+       "vector-action-delete": "Lungûla",
+       "vector-action-move": "Sanzêe ïrï",
+       "vector-action-protect": "Funga",
+       "vector-action-undelete": "Kîri na nî",
+       "vector-action-unprotect": "Sanzêe fungä",
+       "vector-view-create": "Seka",
+       "vector-view-edit": "Sepe",
+       "vector-view-history": "Tanda mbai nî",
+       "vector-view-view": "Dîko",
+       "vector-view-viewsource": "Fa ligbî nî"
+}
diff --git a/skins/Vector/i18n/sgs.json b/skins/Vector/i18n/sgs.json
new file mode 100644 (file)
index 0000000..7b2591c
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Hugo.arg"
+               ]
+       },
+       "vector-action-addsection": "Pridietė tema",
+       "vector-action-delete": "Trintė",
+       "vector-action-move": "Parvadintė",
+       "vector-action-protect": "Ožrakintė",
+       "vector-action-undelete": "Atkortė",
+       "vector-action-unprotect": "Keistė apsauga",
+       "vector-view-create": "Sokortė",
+       "vector-view-edit": "Taisītė",
+       "vector-view-history": "Veizietė istuorėjė",
+       "vector-view-view": "Skaitītė",
+       "vector-view-viewsource": "Veizietė kuoda"
+}
diff --git a/skins/Vector/i18n/sh.json b/skins/Vector/i18n/sh.json
new file mode 100644 (file)
index 0000000..21e6153
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "OC Ripper"
+               ]
+       },
+       "vector-action-addsection": "Dodaj temu",
+       "vector-action-delete": "Brisanje",
+       "vector-action-move": "Preusmjeri",
+       "vector-action-protect": "Zaštiti",
+       "vector-action-undelete": "Vrati obrisano",
+       "vector-action-unprotect": "Promijeni zaštitu",
+       "vector-view-create": "Napravi",
+       "vector-view-edit": "Uredi",
+       "vector-view-history": "Pregled historije",
+       "vector-view-view": "Čitaj",
+       "vector-view-viewsource": "Vidi izvor (source)"
+}
diff --git a/skins/Vector/i18n/shi.json b/skins/Vector/i18n/shi.json
new file mode 100644 (file)
index 0000000..10f48d8
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Dalinanir"
+               ]
+       },
+       "vector-action-addsection": "Zayd amli",
+       "vector-action-delete": "Ḥiyd",
+       "vector-action-move": "Smmatti",
+       "vector-action-protect": "Ḥbu",
+       "vector-action-undelete": "Rard may mayḥiydn",
+       "vector-action-unprotect": "Ḥiyd aḥbu",
+       "vector-view-create": "Skert",
+       "vector-view-edit": "Ara",
+       "vector-view-history": "Mel amzruy",
+       "vector-view-view": "ɣr",
+       "vector-view-viewsource": "Ẓr asagm"
+}
diff --git a/skins/Vector/i18n/shn.json b/skins/Vector/i18n/shn.json
new file mode 100644 (file)
index 0000000..c2cea6a
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Saiddzone"
+               ]
+       },
+       "vector-action-protect": "ႁေႉၵင်ႈ",
+       "vector-view-create": "သၢင်ႈ",
+       "vector-view-edit": "မူၼ်ႉမႄး",
+       "vector-view-history": "တူၺ်းပိုၼ်း",
+       "vector-view-view": "လူတူၺ်း",
+       "vector-view-viewsource": "တူၺ်း ငဝ်ႈငႃႇ"
+}
diff --git a/skins/Vector/i18n/si.json b/skins/Vector/i18n/si.json
new file mode 100644 (file)
index 0000000..640874f
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Thushara",
+                       "දසනැබළයෝ",
+                       "පසිඳු කාවින්ද",
+                       "සුරනිමල"
+               ]
+       },
+       "vector-action-addsection": "මාතෘකාව එක්කරන්න",
+       "vector-action-delete": "මකන්න",
+       "vector-action-move": "ගෙනයන්න",
+       "vector-action-protect": "ආරක්‍ෂණය",
+       "vector-action-undelete": "මකාදැමීම අවලංගු කරන්න",
+       "vector-action-unprotect": "ආරක්ෂණ තත්වය වෙනස් කරන්න",
+       "vector-view-create": "තනන්න",
+       "vector-view-edit": "සංස්කරණය",
+       "vector-view-history": "ඉතිහාසය නරඹන්න",
+       "vector-view-view": "කියවන්න",
+       "vector-view-viewsource": "මූලාශ්‍රය නරඹන්න",
+       "vector-more-actions": "තවත්"
+}
diff --git a/skins/Vector/i18n/sk.json b/skins/Vector/i18n/sk.json
new file mode 100644 (file)
index 0000000..06bf290
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Helix84",
+                       "Rudko",
+                       "Sudo77(new)"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector.css": "/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Vector */",
+       "vector.js": "/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Vector */",
+       "vector-action-addsection": "Pridať tému",
+       "vector-action-delete": "Zmazať",
+       "vector-action-move": "Presunúť",
+       "vector-action-protect": "Zamknúť",
+       "vector-action-undelete": "Obnoviť",
+       "vector-action-unprotect": "Zmeniť stav ochrany",
+       "vector-view-create": "Vytvoriť",
+       "vector-view-edit": "Upraviť",
+       "vector-view-history": "Zobraziť históriu",
+       "vector-view-view": "Čítať",
+       "vector-view-viewsource": "Zobraziť zdroj",
+       "vector-more-actions": "Viac"
+}
diff --git a/skins/Vector/i18n/sl.json b/skins/Vector/i18n/sl.json
new file mode 100644 (file)
index 0000000..85e8574
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Dbc334",
+                       "Smihael",
+                       "Yerpo"
+               ]
+       },
+       "vector-action-addsection": "Dodaj temo",
+       "vector-action-delete": "Izbriši",
+       "vector-action-move": "Prestavi",
+       "vector-action-protect": "Zaščiti",
+       "vector-action-undelete": "Vrni",
+       "vector-action-unprotect": "Spremeni zaščito",
+       "vector-view-create": "Ustvari",
+       "vector-view-edit": "Uredi",
+       "vector-view-history": "Zgodovina",
+       "vector-view-view": "Preberi",
+       "vector-view-viewsource": "Izvorno besedilo",
+       "vector-more-actions": "Več"
+}
diff --git a/skins/Vector/i18n/sli.json b/skins/Vector/i18n/sli.json
new file mode 100644 (file)
index 0000000..e394c5e
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Przemub",
+                       "Schläsinger",
+                       "Timpul",
+                       "Äberlausitzer"
+               ]
+       },
+       "vector-action-addsection": "Obschnitt hinzufiega",
+       "vector-action-delete": "Läscha",
+       "vector-action-move": "Verschieba",
+       "vector-action-protect": "Schützen",
+       "vector-action-undelete": "Wiederherstella",
+       "vector-action-unprotect": "Freigahn",
+       "vector-view-create": "Erstella",
+       "vector-view-edit": "Bearbeita",
+       "vector-view-history": "Versionsgeschichte",
+       "vector-view-view": "Lessa",
+       "vector-view-viewsource": "Quelltext siehn"
+}
diff --git a/skins/Vector/i18n/sly.json b/skins/Vector/i18n/sly.json
new file mode 100644 (file)
index 0000000..deb6741
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "ZQheert"
+               ]
+       },
+       "vector-action-delete": "Lelei",
+       "vector-action-move": "Palettei",
+       "vector-view-create": "Bua'",
+       "vector-view-edit": "edi'",
+       "vector-view-view": "Bacai",
+       "vector-view-viewsource": "Tilingi assala'na"
+}
diff --git a/skins/Vector/i18n/so.json b/skins/Vector/i18n/so.json
new file mode 100644 (file)
index 0000000..1362fd8
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Maax"
+               ]
+       },
+       "vector-action-addsection": "Hadal ku dar",
+       "vector-action-delete": "Tirtir",
+       "vector-action-move": "Wareeji",
+       "vector-action-protect": "Difaac",
+       "vector-action-undelete": "Ha tirtirin",
+       "vector-action-unprotect": "Bedel difaacida",
+       "vector-view-create": "Sameey",
+       "vector-view-edit": "Wax ka bedel",
+       "vector-view-history": "Itusi taariikhda",
+       "vector-view-view": "Akhri",
+       "vector-view-viewsource": "Itusi xogta"
+}
diff --git a/skins/Vector/i18n/sq.json b/skins/Vector/i18n/sq.json
new file mode 100644 (file)
index 0000000..fcc3434
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Dasius",
+                       "GretaDoci",
+                       "MicroBoy",
+                       "Mikullovci11",
+                       "Olsi"
+               ]
+       },
+       "vector-action-addsection": "Shto një temë",
+       "vector-action-delete": "Grise",
+       "vector-action-move": "Zhvendose",
+       "vector-action-protect": "Mbroje",
+       "vector-action-undelete": "Anullo fshirjen",
+       "vector-action-unprotect": "Ndrysho mbrojtjen",
+       "vector-view-create": "Krijo",
+       "vector-view-edit": "Redakto",
+       "vector-view-history": "Shiko historikun",
+       "vector-view-view": "Lexo",
+       "vector-view-viewsource": "Shiko tekstin",
+       "vector-more-actions": "Më tepër..."
+}
diff --git a/skins/Vector/i18n/sr-ec.json b/skins/Vector/i18n/sr-ec.json
new file mode 100644 (file)
index 0000000..e33b69c
--- /dev/null
@@ -0,0 +1,25 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Milicevic01",
+                       "Rancher",
+                       "Жељко Тодоровић",
+                       "Михајло Анђелковић"
+               ]
+       },
+       "skinname-vector": "Векторско",
+       "vector.css": "/* CSS постављен овде ће утицати на све кориснике теме „Векторско“ */",
+       "vector.js": "/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Векторско“ */",
+       "vector-action-addsection": "Додај тему",
+       "vector-action-delete": "Обриши",
+       "vector-action-move": "Премести",
+       "vector-action-protect": "Заштити",
+       "vector-action-undelete": "Врати",
+       "vector-action-unprotect": "Промени заштиту",
+       "vector-view-create": "Направи",
+       "vector-view-edit": "Уреди",
+       "vector-view-history": "Историја",
+       "vector-view-view": "Читај",
+       "vector-view-viewsource": "Изворни код",
+       "vector-more-actions": "Више"
+}
diff --git a/skins/Vector/i18n/sr-el.json b/skins/Vector/i18n/sr-el.json
new file mode 100644 (file)
index 0000000..38f17ad
--- /dev/null
@@ -0,0 +1,25 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Michaello",
+                       "Milicevic01",
+                       "Rancher",
+                       "Жељко Тодоровић"
+               ]
+       },
+       "skinname-vector": "Vektorsko",
+       "vector.css": "/* CSS postavljen ovde će uticati na sve korisnike teme „Vektorsko“ */",
+       "vector.js": "/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Vektorsko“ */",
+       "vector-action-addsection": "Dodaj temu",
+       "vector-action-delete": "Obriši",
+       "vector-action-move": "Premesti",
+       "vector-action-protect": "Zaštiti",
+       "vector-action-undelete": "Vrati",
+       "vector-action-unprotect": "Promeni zaštitu",
+       "vector-view-create": "Napravi",
+       "vector-view-edit": "Uredi",
+       "vector-view-history": "Istorija",
+       "vector-view-view": "Čitaj",
+       "vector-view-viewsource": "Izvorni kod",
+       "vector-more-actions": "Više"
+}
diff --git a/skins/Vector/i18n/ss.json b/skins/Vector/i18n/ss.json
new file mode 100644 (file)
index 0000000..44a5edf
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sibande"
+               ]
+       },
+       "vector-action-addsection": "Ngeta sihloko",
+       "vector-action-move": "Khweshisa",
+       "vector-view-create": "Create",
+       "vector-view-edit": "Hlela",
+       "vector-view-history": "Bona umlandvo",
+       "vector-view-view": "Fundza"
+}
diff --git a/skins/Vector/i18n/stq.json b/skins/Vector/i18n/stq.json
new file mode 100644 (file)
index 0000000..1e2da5a
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Pyt"
+               ]
+       },
+       "vector-action-addsection": "Ousnit bietouföigje",
+       "vector-action-delete": "Läskje",
+       "vector-action-move": "Ferskuuwe",
+       "vector-action-protect": "Skutsje",
+       "vector-action-undelete": "Wierhäärstaale",
+       "vector-action-unprotect": "Siedenskuts annerje",
+       "vector-view-create": "Moakje",
+       "vector-view-edit": "Beoarbaidje",
+       "vector-view-history": "Versionsgeskichte",
+       "vector-view-view": "Leese",
+       "vector-view-viewsource": "Wältext bekiekje"
+}
diff --git a/skins/Vector/i18n/su.json b/skins/Vector/i18n/su.json
new file mode 100644 (file)
index 0000000..d8a780a
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kandar"
+               ]
+       },
+       "vector-action-addsection": "Jieun jejer anyar",
+       "vector-action-delete": "Hapus",
+       "vector-action-move": "Pindahkeun",
+       "vector-action-protect": "Konci",
+       "vector-action-undelete": "Bolaykeun ngahapus",
+       "vector-action-unprotect": "Robah protéksi",
+       "vector-view-create": "Jieun",
+       "vector-view-edit": "Édit",
+       "vector-view-history": "Témbongkeun jujutan",
+       "vector-view-view": "Baca",
+       "vector-view-viewsource": "Témbongkeun sumber"
+}
diff --git a/skins/Vector/i18n/sv.json b/skins/Vector/i18n/sv.json
new file mode 100644 (file)
index 0000000..930bbce
--- /dev/null
@@ -0,0 +1,27 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Martinwiss",
+                       "Najami",
+                       "Skalman",
+                       "WikiPhoenix",
+                       "Lokal Profil"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector-skin-desc": "Modern version av MonoBook med ett nytt utseende och flera användarvänlighetsförbättringar",
+       "vector.css": "/* CSS som skrivs här kommer att påverka alla användare av skalet Vector */",
+       "vector.js": "/* JavaScript här kommer att laddas för dem som använder skalet Vector */",
+       "vector-action-addsection": "Nytt ämne",
+       "vector-action-delete": "Radera",
+       "vector-action-move": "Flytta",
+       "vector-action-protect": "Skrivskydda",
+       "vector-action-undelete": "Återställ",
+       "vector-action-unprotect": "Ändra skydd",
+       "vector-view-create": "Skapa",
+       "vector-view-edit": "Redigera",
+       "vector-view-history": "Visa historik",
+       "vector-view-view": "Visa",
+       "vector-view-viewsource": "Visa källa",
+       "vector-more-actions": "Mer"
+}
diff --git a/skins/Vector/i18n/sw.json b/skins/Vector/i18n/sw.json
new file mode 100644 (file)
index 0000000..cb511ba
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Lloffiwr",
+                       "Muddyb Blast Producer"
+               ]
+       },
+       "vector-action-addsection": "Weka mada",
+       "vector-action-delete": "Futa",
+       "vector-action-move": "Hamisha",
+       "vector-action-protect": "Linda",
+       "vector-action-undelete": "Rudisha",
+       "vector-action-unprotect": "Badilisha ulinzi",
+       "vector-view-create": "Anzisha",
+       "vector-view-edit": "Hariri",
+       "vector-view-history": "Fungua historia",
+       "vector-view-view": "Soma",
+       "vector-view-viewsource": "Tazama msimbo"
+}
diff --git a/skins/Vector/i18n/szl.json b/skins/Vector/i18n/szl.json
new file mode 100644 (file)
index 0000000..9e8c106
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Britscher",
+                       "Gaj777",
+                       "Przemub"
+               ]
+       },
+       "vector-action-addsection": "Nowo tajla",
+       "vector-action-delete": "Wyćepej",
+       "vector-action-move": "Przećep",
+       "vector-action-protect": "Zawrzij",
+       "vector-action-undelete": "Wćep",
+       "vector-action-unprotect": "Uodymkńij",
+       "vector-view-create": "Stwůrz",
+       "vector-view-edit": "Sprowjej",
+       "vector-view-history": "Uobocz gyszichta",
+       "vector-view-view": "Czytej",
+       "vector-view-viewsource": "Zdrzůdłowy tekst"
+}
diff --git a/skins/Vector/i18n/ta.json b/skins/Vector/i18n/ta.json
new file mode 100644 (file)
index 0000000..21f8501
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mayooranathan",
+                       "Shanmugamp7",
+                       "Surya Prakash.S.A.",
+                       "TRYPPN"
+               ]
+       },
+       "vector-action-addsection": "தலைப்பைச் சேர்",
+       "vector-action-delete": "நீக்குக",
+       "vector-action-move": "நகர்த்தவும்",
+       "vector-action-protect": "காக்கவும்",
+       "vector-action-undelete": "நீக்கத்தை நிறுத்து",
+       "vector-action-unprotect": "காப்பை மாற்று",
+       "vector-view-create": "உருவாக்கவும்",
+       "vector-view-edit": "தொகு",
+       "vector-view-history": "வரலாற்றைக் காட்டவும்",
+       "vector-view-view": "படிக்கவும்",
+       "vector-view-viewsource": "மூலத்தைக் காட்டவும்"
+}
diff --git a/skins/Vector/i18n/tcy.json b/skins/Vector/i18n/tcy.json
new file mode 100644 (file)
index 0000000..0001fe5
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "NamwikiTL",
+                       "VASANTH S.N."
+               ]
+       },
+       "vector-action-addsection": "ವಿಷಯ ಸೇರಾಲೆ",
+       "vector-action-delete": "ದೆತ್ತ್ ಪಾಡ್ಲೆ",
+       "vector-action-move": "ಸ್ಥಳಾಂತರ ಮಲ್ಪುಲೆ",
+       "vector-action-protect": "ಸ೦ರಕ್ಷಿಸಾಲೆ",
+       "vector-action-undelete": "ಮಾಜಾವಡೆ",
+       "vector-action-unprotect": "ಬದಲಾವಣೆನ್ ರಕ್ಷಿಸಾಲೆ",
+       "vector-view-create": " ಸುರು ಮಲ್ಪುಲೆ",
+       "vector-view-edit": "ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ",
+       "vector-view-history": "ಇತಿಹಾಸೊನು ತೂಲೆ",
+       "vector-view-view": "ಓದ್ಲೇ",
+       "vector-view-viewsource": "ಮೂಲೊನು ತೂಲೆ"
+}
diff --git a/skins/Vector/i18n/te.json b/skins/Vector/i18n/te.json
new file mode 100644 (file)
index 0000000..f32d90e
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Chaduvari",
+                       "Kiranmayee",
+                       "Praveen Illa",
+                       "Ravichandra",
+                       "Veeven"
+               ]
+       },
+       "skinname-vector": "వెక్టర్",
+       "vector-action-addsection": "విషయాన్ని చేర్చు",
+       "vector-action-delete": "తొలగించు",
+       "vector-action-move": "తరలించు",
+       "vector-action-protect": "సంరక్షించు",
+       "vector-action-undelete": "తొలగింపును రద్దుచెయ్యి",
+       "vector-action-unprotect": "సంరక్షణను మార్చు",
+       "vector-view-create": "సృష్టించు",
+       "vector-view-edit": "సవరించు",
+       "vector-view-history": "చరిత్రను చూడండి",
+       "vector-view-view": "చదువు",
+       "vector-view-viewsource": "మూలాన్ని చూపించు",
+       "vector-more-actions": "మరిన్ని"
+}
diff --git a/skins/Vector/i18n/tet.json b/skins/Vector/i18n/tet.json
new file mode 100644 (file)
index 0000000..0cc9b82
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "MF-Warburg"
+               ]
+       },
+       "vector-action-protect": "Proteje",
+       "vector-view-create": "Kria",
+       "vector-view-edit": "Edita",
+       "vector-view-history": "Haree istória",
+       "vector-view-view": "Lee"
+}
diff --git a/skins/Vector/i18n/tg-cyrl.json b/skins/Vector/i18n/tg-cyrl.json
new file mode 100644 (file)
index 0000000..ede0347
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ibrahim"
+               ]
+       },
+       "vector-action-addsection": "Иловаи унвон",
+       "vector-action-delete": "Ҳазф",
+       "vector-action-move": "Кӯчонидан",
+       "vector-action-protect": "Муҳофизат",
+       "vector-action-undelete": "Эҳё",
+       "vector-action-unprotect": "Тағйири муҳофизат",
+       "vector-view-create": "Эҷод",
+       "vector-view-edit": "Вироиш",
+       "vector-view-history": "Намоиши таърих",
+       "vector-view-view": "Хондан",
+       "vector-view-viewsource": "Намоиши манбаъ"
+}
diff --git a/skins/Vector/i18n/tg-latn.json b/skins/Vector/i18n/tg-latn.json
new file mode 100644 (file)
index 0000000..1ecb038
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Liangent"
+               ]
+       },
+       "vector-action-addsection": "Ilovai unvon",
+       "vector-action-delete": "Hazf",
+       "vector-action-move": "Kūconidan",
+       "vector-action-protect": "Muhofizat",
+       "vector-action-undelete": "Ehjo",
+       "vector-action-unprotect": "Ba dar ovardan az muhofizat",
+       "vector-view-create": "Eçod",
+       "vector-view-edit": "Viroiş",
+       "vector-view-history": "Namoişi ta'rix",
+       "vector-view-view": "Xondan",
+       "vector-view-viewsource": "Namoişi manba'"
+}
diff --git a/skins/Vector/i18n/th.json b/skins/Vector/i18n/th.json
new file mode 100644 (file)
index 0000000..ae4b838
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Horus",
+                       "Octahedron80",
+                       "Woraponboonkerd"
+               ]
+       },
+       "skinname-vector": "เวกเตอร์",
+       "vector.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินเวกเตอร์ */",
+       "vector.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินเวกเตอร์ */",
+       "vector-action-addsection": "เพิ่มหัวข้อ",
+       "vector-action-delete": "ลบ",
+       "vector-action-move": "เปลี่ยนชื่อ",
+       "vector-action-protect": "ล็อก",
+       "vector-action-undelete": "กู้คืน",
+       "vector-action-unprotect": "เปลี่ยนการล็อก",
+       "vector-view-create": "สร้าง",
+       "vector-view-edit": "แก้ไข",
+       "vector-view-history": "ดูประวัติ",
+       "vector-view-view": "อ่าน",
+       "vector-view-viewsource": "ดูโค้ด",
+       "vector-more-actions": "เพิ่มเติม"
+}
diff --git a/skins/Vector/i18n/tk.json b/skins/Vector/i18n/tk.json
new file mode 100644 (file)
index 0000000..f11da23
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Hanberke"
+               ]
+       },
+       "vector-action-addsection": "Tema goş",
+       "vector-action-delete": "Öçür",
+       "vector-action-move": "Adyny üýtget",
+       "vector-action-protect": "Goraga al",
+       "vector-action-undelete": "Öçürmäni yzyna al",
+       "vector-action-unprotect": "Goragy üýtget",
+       "vector-view-create": "Döret",
+       "vector-view-edit": "Üýtget",
+       "vector-view-history": "Taryhy gör",
+       "vector-view-view": "Oka",
+       "vector-view-viewsource": "Çeşmäni gör"
+}
diff --git a/skins/Vector/i18n/tl.json b/skins/Vector/i18n/tl.json
new file mode 100644 (file)
index 0000000..2a0495d
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "AnakngAraw",
+                       "Sky Harbor"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector.css": "/* Ang inilagay na CSS dito ay makakaapekto sa mga tagagamit ng pabalat na Vector */",
+       "vector.js": "/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na Vector */",
+       "vector-action-addsection": "Magdagdag ng paksa",
+       "vector-action-delete": "Burahin",
+       "vector-action-move": "Ilipat",
+       "vector-action-protect": "Ipagsanggalang",
+       "vector-action-undelete": "Alisin ang pagbubura",
+       "vector-action-unprotect": "Baguhin ang pagsasanggalang",
+       "vector-view-create": "Likhain",
+       "vector-view-edit": "Baguhin",
+       "vector-view-history": "Tingnan ang kasaysayan",
+       "vector-view-view": "Basahin",
+       "vector-view-viewsource": "Tingnan ang pinagmulan"
+}
diff --git a/skins/Vector/i18n/tly.json b/skins/Vector/i18n/tly.json
new file mode 100644 (file)
index 0000000..a809d5e
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Гусейн"
+               ]
+       },
+       "vector-action-addsection": "Мывзу зијод кардеј",
+       "vector-action-delete": "Рәдд кардеј",
+       "vector-action-move": "Номи дәгиш кардеј",
+       "vector-action-protect": "Мыдофијә кардеј",
+       "vector-action-undelete": "Бәрпо кардеј",
+       "vector-action-unprotect": "Мыдофијә дәгиш кардеј",
+       "vector-view-create": "Офәјеј",
+       "vector-view-edit": "Сәрост кардеј",
+       "vector-view-history": "Тарых",
+       "vector-view-view": "Һандемон",
+       "vector-view-viewsource": "Дијә кардеј"
+}
diff --git a/skins/Vector/i18n/tpi.json b/skins/Vector/i18n/tpi.json
new file mode 100644 (file)
index 0000000..182aa9a
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Iketsi",
+                       "Wantok"
+               ]
+       },
+       "vector-action-delete": "Rausim",
+       "vector-action-move": "Surikim",
+       "vector-action-protect": "Tambuim",
+       "vector-view-create": "Kirapim",
+       "vector-view-edit": "Senisim",
+       "vector-view-history": "Ol senis",
+       "vector-view-view": "Rit",
+       "vector-view-viewsource": "Lukim as tok"
+}
diff --git a/skins/Vector/i18n/tr.json b/skins/Vector/i18n/tr.json
new file mode 100644 (file)
index 0000000..da041a9
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Arystanbek",
+                       "Emperyan",
+                       "Joseph",
+                       "Stultiwikia",
+                       "Vito Genovese"
+               ]
+       },
+       "vector-action-addsection": "Konu ekle",
+       "vector-action-delete": "Sil",
+       "vector-action-move": "Taşı",
+       "vector-action-protect": "Koru",
+       "vector-action-undelete": "Silinmeyi geri al",
+       "vector-action-unprotect": "Korumayı değiştir",
+       "vector-view-create": "Oluştur",
+       "vector-view-edit": "Düzenle",
+       "vector-view-history": "Geçmişi gör",
+       "vector-view-view": "Oku",
+       "vector-view-viewsource": "Kaynağı gör",
+       "vector-more-actions": "Diğer"
+}
diff --git a/skins/Vector/i18n/tru.json b/skins/Vector/i18n/tru.json
new file mode 100644 (file)
index 0000000..1949f25
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ariyo"
+               ]
+       },
+       "vector-action-addsection": "Maḥat Fusoqo ḥaṭo",
+       "vector-action-delete": "Slag",
+       "vector-action-move": "Mtaxar",
+       "vector-action-protect": "Mastar",
+       "vector-view-create": "Xlaq",
+       "vector-view-edit": "Mşaḥlaf",
+       "vector-view-history": "Maktabzabno",
+       "vector-view-view": "Qray",
+       "vector-view-viewsource": "Maḥway li aMabu³e."
+}
diff --git a/skins/Vector/i18n/ts.json b/skins/Vector/i18n/ts.json
new file mode 100644 (file)
index 0000000..c00b029
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Thuvack"
+               ]
+       },
+       "vector-action-addsection": "Veka nholoko ya mhaka",
+       "vector-action-delete": "Sula",
+       "vector-action-move": "Yi sa kunwana",
+       "vector-action-protect": "Sirhelela",
+       "vector-action-undelete": "Cinca kusula",
+       "vector-action-unprotect": "Cinca kusirhelela",
+       "vector-view-create": "Tumbuluxa",
+       "vector-view-edit": "Lulamisa",
+       "vector-view-history": "Languta matimu",
+       "vector-view-view": "Hlaya",
+       "vector-view-viewsource": "Languta xihlovo"
+}
diff --git a/skins/Vector/i18n/tt-cyrl.json b/skins/Vector/i18n/tt-cyrl.json
new file mode 100644 (file)
index 0000000..606fbe3
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Don Alessandro",
+                       "Rinatus",
+                       "Ильнар",
+                       "Рашат Якупов"
+               ]
+       },
+       "skinname-vector": "Сызымлы",
+       "vector-action-addsection": "Яңа тема өстәү",
+       "vector-action-delete": "Бетерү",
+       "vector-action-move": "Күчерү",
+       "vector-action-protect": "Яклау",
+       "vector-action-undelete": "Кайтару",
+       "vector-action-unprotect": "Яклауны үзгәртү",
+       "vector-view-create": "Төзү",
+       "vector-view-edit": "Үзгәртү",
+       "vector-view-history": "Тарихын карау",
+       "vector-view-view": "Уку",
+       "vector-view-viewsource": "Чыганагын карау"
+}
diff --git a/skins/Vector/i18n/tt-latn.json b/skins/Vector/i18n/tt-latn.json
new file mode 100644 (file)
index 0000000..140768b
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Don Alessandro"
+               ]
+       },
+       "skinname-vector": "Sızımlı",
+       "vector-action-addsection": "Yaña tema östäw",
+       "vector-action-delete": "Beterü",
+       "vector-action-move": "Küçerü",
+       "vector-action-protect": "Yaqlaw",
+       "vector-action-undelete": "Qaytaru",
+       "vector-action-unprotect": "Yaqlawnı beterü",
+       "vector-view-create": "Tözü",
+       "vector-view-edit": "Üzgärtü",
+       "vector-view-history": "Tarixın qaraw",
+       "vector-view-view": "Uqu",
+       "vector-view-viewsource": "Çığanağın qaraw"
+}
diff --git a/skins/Vector/i18n/tyv.json b/skins/Vector/i18n/tyv.json
new file mode 100644 (file)
index 0000000..fbfb8e9
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Agilight",
+                       "Sborsody"
+               ]
+       },
+       "skinname-vector": "Вектор",
+       "vector-action-addsection": "Кол сөстү немелээри",
+       "vector-action-delete": "Ырадыры",
+       "vector-action-move": "Шимчээри",
+       "vector-action-protect": "Камгалаары",
+       "vector-action-undelete": "Эгидер",
+       "vector-action-unprotect": "Камгалалды өскертири",
+       "vector-view-create": "Чаяары",
+       "vector-view-edit": "Эдер",
+       "vector-view-history": "Төөгүнү көөрү",
+       "vector-view-view": "Номчуур",
+       "vector-view-viewsource": "Дөзү бижиин көөрү"
+}
diff --git a/skins/Vector/i18n/tzm.json b/skins/Vector/i18n/tzm.json
new file mode 100644 (file)
index 0000000..ed7ef13
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Moha",
+                       "Tifinaghes"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector-action-addsection": "ⵔⵏⵓ ⴰⵙⵏⵜⵍ",
+       "vector-action-delete": "ⵓⴽⵓⵙ",
+       "vector-action-move": "ⵙⵎⵓⵜⵜⵉ",
+       "vector-action-undelete": "ⵙⵙⵓⵖⴰⵍ ⵓⴽⵓⵙ",
+       "vector-action-unprotect": "ⴱⴷⴷⴻⵍ ⵜⴰⵙⵜⴰⵏⵜ",
+       "vector-view-create": "ⴰⵔⴰ",
+       "vector-view-edit": "ⴱⴷⴷⴻⵍ",
+       "vector-view-history": "ⵥⵕ ⴰⵎⵣⵔⵓⵢ",
+       "vector-view-view": "ⵖⵔ",
+       "vector-view-viewsource": "ⵥⵕ ⴰⵖⴱⴰⵍⵓ"
+}
diff --git a/skins/Vector/i18n/udm.json b/skins/Vector/i18n/udm.json
new file mode 100644 (file)
index 0000000..a126329
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Andrewboltachev"
+               ]
+       },
+       "vector-action-addsection": "Выль темаез ватсано",
+       "vector-action-delete": "Быдтоно",
+       "vector-action-move": "Мукет интые выжтыны",
+       "vector-action-protect": "Утьыны",
+       "vector-view-create": "Кылдытоно",
+       "vector-view-edit": "Тупатоно",
+       "vector-view-history": "История",
+       "vector-view-view": "Лыдӟоно",
+       "vector-view-viewsource": "Кодзэ учкыны"
+}
diff --git a/skins/Vector/i18n/ug-arab.json b/skins/Vector/i18n/ug-arab.json
new file mode 100644 (file)
index 0000000..00bf7df
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Arlin",
+                       "Sahran",
+                       "Tel'et"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector.css": "/* CSS placed here will affect users of the Vector skin */",
+       "vector.js": "/* Any JavaScript here will be loaded for users using the Vector skin */",
+       "vector-action-addsection": "يېڭى تېما قوش",
+       "vector-action-delete": "ئۆچۈر",
+       "vector-action-move": "يۆتكە",
+       "vector-action-protect": "قوغدا",
+       "vector-action-undelete": "ئەسلىگە قايتۇر",
+       "vector-action-unprotect": "قوغداش ئۆزگەرت",
+       "vector-view-create": "قۇر",
+       "vector-view-edit": "تەھرىر",
+       "vector-view-history": "تارىخ كۆرسەت",
+       "vector-view-view": "ئوقۇ",
+       "vector-view-viewsource": "مەنبەنى كۆرسەت"
+}
diff --git a/skins/Vector/i18n/uk.json b/skins/Vector/i18n/uk.json
new file mode 100644 (file)
index 0000000..5bf9d24
--- /dev/null
@@ -0,0 +1,29 @@
+{
+       "@metadata": {
+               "authors": [
+                       "AS",
+                       "Ahonc",
+                       "Base",
+                       "Calak",
+                       "Dim Grits",
+                       "NickK",
+                       "Prima klasy4na",
+                       "Тест"
+               ]
+       },
+       "skinname-vector": "Векторне",
+       "vector.css": "/* Розміщений тут CSS-код буде використаний в темі оформлення Векторне */",
+       "vector.js": "/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують векторну тему оформлення */",
+       "vector-action-addsection": "Додати тему",
+       "vector-action-delete": "Вилучити",
+       "vector-action-move": "Перейменувати",
+       "vector-action-protect": "Захистити",
+       "vector-action-undelete": "Відновити",
+       "vector-action-unprotect": "Зміна захисту",
+       "vector-view-create": "Створити",
+       "vector-view-edit": "Редагувати",
+       "vector-view-history": "Переглянути історію",
+       "vector-view-view": "Читати",
+       "vector-view-viewsource": "Переглянути код",
+       "vector-more-actions": "Більше"
+}
diff --git a/skins/Vector/i18n/ur.json b/skins/Vector/i18n/ur.json
new file mode 100644 (file)
index 0000000..595477e
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Calak",
+                       "Istabani",
+                       "Noor2020",
+                       "Tahir mq",
+                       "محبوب عالم"
+               ]
+       },
+       "vector-action-addsection": "نیا موضوع",
+       "vector-action-delete": "حذف کرو",
+       "vector-action-move": "منتقل کرو",
+       "vector-action-protect": "محفوظ کرو",
+       "vector-action-undelete": "بحال",
+       "vector-action-unprotect": "تحفظ میں تبدیلی",
+       "vector-view-create": "تخلیق",
+       "vector-view-edit": "ترمیم",
+       "vector-view-history": "تاریخ",
+       "vector-view-view": "مطالعہ",
+       "vector-view-viewsource": "مسودہ",
+       "vector-more-actions": "زیادہ"
+}
diff --git a/skins/Vector/i18n/uz.json b/skins/Vector/i18n/uz.json
new file mode 100644 (file)
index 0000000..ee75d39
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Abdulla",
+                       "Arystanbek",
+                       "Casual",
+                       "CoderSI",
+                       "Sociologist"
+               ]
+       },
+       "skinname-vector": "Vektor",
+       "vector-action-addsection": "Mavzu qoʻshish",
+       "vector-action-delete": "O‘chirish",
+       "vector-action-move": "Ko‘chirish",
+       "vector-action-protect": "Himoyalash",
+       "vector-action-undelete": "Tiklash",
+       "vector-action-unprotect": "Himoyalashni oʻzgartirish",
+       "vector-view-create": "Yaratish",
+       "vector-view-edit": "Tahrirlash",
+       "vector-view-history": "Tarix",
+       "vector-view-view": "Mutolaa",
+       "vector-view-viewsource": "Manbasini koʻrish",
+       "vector-more-actions": "Yana"
+}
diff --git a/skins/Vector/i18n/vec.json b/skins/Vector/i18n/vec.json
new file mode 100644 (file)
index 0000000..9622828
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Alunardon90",
+                       "Candalua",
+                       "Frigotoni",
+                       "GatoSelvadego",
+                       "Vajotwo"
+               ]
+       },
+       "vector-action-addsection": "Zonta discusion",
+       "vector-action-delete": "Scanseła",
+       "vector-action-move": "Sposta",
+       "vector-action-protect": "Protezi",
+       "vector-action-undelete": "Recupera",
+       "vector-action-unprotect": "Canbia ła protesion",
+       "vector-view-create": "Crea",
+       "vector-view-edit": "Canbia",
+       "vector-view-history": "Varda ła storia",
+       "vector-view-view": "Lezi",
+       "vector-view-viewsource": "Varda el testo"
+}
diff --git a/skins/Vector/i18n/vep.json b/skins/Vector/i18n/vep.json
new file mode 100644 (file)
index 0000000..00f876c
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Игорь Бродский"
+               ]
+       },
+       "vector-action-addsection": "Ližada tem",
+       "vector-action-delete": "Čuta poiš",
+       "vector-action-move": "Udesnimitada",
+       "vector-action-protect": "Kaita",
+       "vector-action-undelete": "Pördutada",
+       "vector-action-unprotect": "Toižetada kaičend",
+       "vector-view-create": "Säta",
+       "vector-view-edit": "Redaktiruida",
+       "vector-view-history": "Kacta istorii",
+       "vector-view-view": "Lugeda",
+       "vector-view-viewsource": "Kacta purtkehe"
+}
diff --git a/skins/Vector/i18n/vi.json b/skins/Vector/i18n/vi.json
new file mode 100644 (file)
index 0000000..04becc3
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Minh Nguyen",
+                       "Vinhtantran",
+                       "Withoutaname"
+               ]
+       },
+       "skinname-vector": "Vectơ",
+       "vector.css": "/* Mã CSS đặt ở đây sẽ ảnh hưởng đến thành viên sử dụng giao diện Vectơ */",
+       "vector.js": "/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng giao diện Vectơ */",
+       "vector-action-addsection": "Thêm chủ đề",
+       "vector-action-delete": "Xóa",
+       "vector-action-move": "Di chuyển",
+       "vector-action-protect": "Khóa",
+       "vector-action-undelete": "Phục hồi",
+       "vector-action-unprotect": "Đổi mức khóa",
+       "vector-view-create": "Tạo",
+       "vector-view-edit": "Sửa đổi",
+       "vector-view-history": "Xem lịch sử",
+       "vector-view-view": "Đọc",
+       "vector-view-viewsource": "Xem mã nguồn",
+       "vector-more-actions": "Khác"
+}
diff --git a/skins/Vector/i18n/vls.json b/skins/Vector/i18n/vls.json
new file mode 100644 (file)
index 0000000..c2b841c
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "@metadata": {
+               "authors": [
+                       "DasRakel"
+               ]
+       },
+       "vector-action-delete": "Wegdoen",
+       "vector-action-move": "Ernoemn",
+       "vector-view-create": "Anmoakn",
+       "vector-view-edit": "Bewerkn",
+       "vector-view-history": "Geschiedenisse bekykn",
+       "vector-view-view": "Leezn",
+       "vector-view-viewsource": "Brontekst bekykn"
+}
diff --git a/skins/Vector/i18n/vmf.json b/skins/Vector/i18n/vmf.json
new file mode 100644 (file)
index 0000000..439e93a
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Silvicola"
+               ]
+       },
+       "vector.css": "/* CSS hiir beâjflusd nôr dii Vector-schelfn. Wen'd ale uf ôômôôl beâjflusn wilsch, muâsch an MediaWiki:Common.css was ändârn. */",
+       "vector-action-addsection": "Ân najn abschnid ôôfangn",
+       "vector-action-delete": "Leschn",
+       "vector-action-move": "Umdaafn",
+       "vector-action-protect": "Schidsn",
+       "vector-action-undelete": "Leschn riggängich machn",
+       "vector-action-unprotect": "Schuds ufgeebn",
+       "vector-view-create": "Ôôleechn",
+       "vector-view-edit": "Bearbajdn",
+       "vector-view-history": "Wärsjoonsfolche",
+       "vector-view-view": "Leesn",
+       "vector-view-viewsource": "Gwäl-dhägsd ôôgugn"
+}
diff --git a/skins/Vector/i18n/vo.json b/skins/Vector/i18n/vo.json
new file mode 100644 (file)
index 0000000..1bd3042
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Malafaya"
+               ]
+       },
+       "vector-action-addsection": "Lüükön yegädi",
+       "vector-action-delete": "Moükön",
+       "vector-action-move": "Topätükön",
+       "vector-action-protect": "Jelön",
+       "vector-action-undelete": "Sämoükön",
+       "vector-action-unprotect": "Votükön jeli",
+       "vector-view-create": "Jafön",
+       "vector-view-edit": "Redakön",
+       "vector-view-history": "Logön jenotemi",
+       "vector-view-view": "Reidön",
+       "vector-view-viewsource": "Logön fonäti"
+}
diff --git a/skins/Vector/i18n/vot.json b/skins/Vector/i18n/vot.json
new file mode 100644 (file)
index 0000000..7bdc92d
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Paivud"
+               ]
+       },
+       "vector-action-addsection": "Vassõn teema",
+       "vector-action-delete": "Pühi",
+       "vector-action-move": "Liikut",
+       "vector-action-protect": "Varjaa",
+       "vector-view-create": "Loo cülci",
+       "vector-view-edit": "Muuttaa",
+       "vector-view-history": "Istori",
+       "vector-view-view": "Lukõa",
+       "vector-view-viewsource": "Lähtekoodi"
+}
diff --git a/skins/Vector/i18n/vro.json b/skins/Vector/i18n/vro.json
new file mode 100644 (file)
index 0000000..a6c3c06
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Võrok"
+               ]
+       },
+       "vector-action-addsection": "Vahtsõ teema ülespandminõ",
+       "vector-action-delete": "Kistudaq ärq",
+       "vector-action-move": "Nõstaq ümbre",
+       "vector-action-protect": "Kaidsaq",
+       "vector-action-undelete": "Tiiq tagasi",
+       "vector-action-unprotect": "Muudaq kaidsõt",
+       "vector-view-create": "Luuq",
+       "vector-view-edit": "Toimõndaq",
+       "vector-view-history": "Näütäq aoluku",
+       "vector-view-view": "Loeq",
+       "vector-view-viewsource": "Kaeq lätteteksti"
+}
diff --git a/skins/Vector/i18n/wa.json b/skins/Vector/i18n/wa.json
new file mode 100644 (file)
index 0000000..0401884
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Srtxg"
+               ]
+       },
+       "vector-action-addsection": "Radjouter on sudjet",
+       "vector-action-delete": "Disfacer",
+       "vector-action-move": "Displaecî",
+       "vector-action-protect": "Protedjî",
+       "vector-action-undelete": "Rapexhî",
+       "vector-action-unprotect": "Candjî l' protedjaedje",
+       "vector-view-create": "Ahiver",
+       "vector-view-edit": "Candjî",
+       "vector-view-history": "Vey l' istwere",
+       "vector-view-view": "Lére",
+       "vector-view-viewsource": "Vey côde sourdant"
+}
diff --git a/skins/Vector/i18n/war.json b/skins/Vector/i18n/war.json
new file mode 100644 (file)
index 0000000..8b2f958
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Harvzsf",
+                       "JinJian"
+               ]
+       },
+       "vector-action-addsection": "Igdugang hin himangrawon",
+       "vector-action-delete": "Para-a",
+       "vector-action-move": "Balhina",
+       "vector-action-protect": "Panalipda",
+       "vector-action-undelete": "Igbalik an ginpara",
+       "vector-action-unprotect": "Liwani an panalipod",
+       "vector-view-create": "Himo-a",
+       "vector-view-edit": "Igliwat",
+       "vector-view-history": "Kitaa an kaagi",
+       "vector-view-view": "Basaha",
+       "vector-view-viewsource": "Kitaa an ginkuhaan",
+       "vector-more-actions": "Damo pa"
+}
diff --git a/skins/Vector/i18n/wo.json b/skins/Vector/i18n/wo.json
new file mode 100644 (file)
index 0000000..5d248d1
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ibou"
+               ]
+       },
+       "vector-action-addsection": "Yokkuw tëriit",
+       "vector-action-delete": "Far",
+       "vector-action-move": "Tuddewaat",
+       "vector-action-protect": "Aar",
+       "vector-action-undelete": "Delloowaat",
+       "vector-action-unprotect": "Aaradi",
+       "vector-view-create": "Sos",
+       "vector-view-edit": "Soppi",
+       "vector-view-history": "Wone jaar-jaaram",
+       "vector-view-view": "Jàng",
+       "vector-view-viewsource": "Wone gongikuwaayam"
+}
diff --git a/skins/Vector/i18n/wuu.json b/skins/Vector/i18n/wuu.json
new file mode 100644 (file)
index 0000000..dade0ff
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Benojan"
+               ]
+       },
+       "vector-action-addsection": "加話題",
+       "vector-action-delete": "刪",
+       "vector-action-move": "移",
+       "vector-action-protect": "保",
+       "vector-action-undelete": "弗刪",
+       "vector-action-unprotect": "换保护状态",
+       "vector-view-create": "建",
+       "vector-view-edit": "编",
+       "vector-view-history": "望页史",
+       "vector-view-view": "读",
+       "vector-view-viewsource": "望源码"
+}
diff --git a/skins/Vector/i18n/xal.json b/skins/Vector/i18n/xal.json
new file mode 100644 (file)
index 0000000..b57aad7
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Huuchin"
+               ]
+       },
+       "vector-action-addsection": "Төриг немх",
+       "vector-action-delete": "Һарһх",
+       "vector-action-move": "Көндәх",
+       "vector-action-protect": "Харсх",
+       "vector-action-undelete": "Һарһх биш",
+       "vector-action-unprotect": "Харсх биш",
+       "vector-view-create": "Бүтәх",
+       "vector-view-edit": "Чиклх",
+       "vector-view-history": "Тууҗин хәләвр",
+       "vector-view-view": "Умшлһн",
+       "vector-view-viewsource": "Темдгллһнә хәләвр"
+}
diff --git a/skins/Vector/i18n/xh.json b/skins/Vector/i18n/xh.json
new file mode 100644 (file)
index 0000000..8cea054
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "vector-view-edit": "Tshintsha"
+}
diff --git a/skins/Vector/i18n/xmf.json b/skins/Vector/i18n/xmf.json
new file mode 100644 (file)
index 0000000..47cee05
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kilavagora",
+                       "Lika2672",
+                       "Machirkholi"
+               ]
+       },
+       "vector-action-addsection": "თემაშ მიშაძინა",
+       "vector-action-delete": "ლასუა",
+       "vector-action-move": "გინოღალა",
+       "vector-action-protect": "თხილუა",
+       "vector-view-create": "დორსხუაფა",
+       "vector-view-edit": "რედაქტირაფა",
+       "vector-view-history": "ისტორიაშ ძირაფა",
+       "vector-view-view": "კითხირი",
+       "vector-view-viewsource": "ქიძირე წყუ"
+}
diff --git a/skins/Vector/i18n/yi.json b/skins/Vector/i18n/yi.json
new file mode 100644 (file)
index 0000000..16907ad
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Joystick",
+                       "פוילישער"
+               ]
+       },
+       "skinname-vector": "וועקטאר",
+       "vector-skin-desc": "מאדערנע ווערסיע פון מאנאבוק מיט פרישן אויסזען און א סך באניצער־פריינדלעכקייט פארבעסערונגען",
+       "vector.css": "/* CSS געשטעלט דא ווירקט נאר אויפן וועקטאר סקין */",
+       "vector-action-addsection": "צושטעלן טעמע",
+       "vector-action-delete": "אויסמעקן",
+       "vector-action-move": "באַוועגן",
+       "vector-action-protect": "שיצן",
+       "vector-action-undelete": "מבטל זיין אויסמעקן",
+       "vector-action-unprotect": "ענדערונג באַשיצונג",
+       "vector-view-create": "שאַפֿן",
+       "vector-view-edit": "רעדאַקטירן",
+       "vector-view-history": "ווײַזן היסטאָריע",
+       "vector-view-view": "לייענען",
+       "vector-view-viewsource": "ווײַזן מקור",
+       "vector-more-actions": "נאך"
+}
diff --git a/skins/Vector/i18n/yo.json b/skins/Vector/i18n/yo.json
new file mode 100644 (file)
index 0000000..e26e68b
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Demmy"
+               ]
+       },
+       "vector-action-addsection": "Àfikún orí-ọ̀rọ̀",
+       "vector-action-delete": "Ìparẹ́",
+       "vector-action-move": "Ìyípòdà",
+       "vector-action-protect": "Àbò",
+       "vector-action-undelete": "Ìmúkúrò ìparẹ́",
+       "vector-action-unprotect": "Ìyípadà àbò",
+       "vector-view-create": "Ṣ'èdá",
+       "vector-view-edit": "Àtúnṣe",
+       "vector-view-history": "Wo ìtàn",
+       "vector-view-view": "Àwòkà",
+       "vector-view-viewsource": "Wo àmìọ̀rọ̀"
+}
diff --git a/skins/Vector/i18n/yue.json b/skins/Vector/i18n/yue.json
new file mode 100644 (file)
index 0000000..3aa2309
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ktchankt",
+                       "Waihorace"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector.css": "/* 響呢度放 CSS 碼去改用戶用嘅域達畫面 */",
+       "vector.js": "/* 響每一次個頁面載入時,用域達畫面嘅用戶都會載入呢度任何嘅JavaScript */",
+       "vector-action-addsection": "加主題",
+       "vector-action-delete": "剷走",
+       "vector-action-move": "搬",
+       "vector-action-protect": "保護",
+       "vector-action-undelete": "取消剷走",
+       "vector-action-unprotect": "改保護",
+       "vector-view-create": "開",
+       "vector-view-edit": "改",
+       "vector-view-history": "睇吓歷史",
+       "vector-view-view": "閱",
+       "vector-view-viewsource": "睇吓原始碼",
+       "vector-more-actions": "更多"
+}
diff --git a/skins/Vector/i18n/za.json b/skins/Vector/i18n/za.json
new file mode 100644 (file)
index 0000000..72bd20d
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Biŋhai"
+               ]
+       },
+       "vector-action-delete": "Ca",
+       "vector-action-move": "Daen",
+       "vector-action-protect": "Bauj",
+       "vector-view-create": "Laeb",
+       "vector-view-edit": "gaij",
+       "vector-view-history": "Cazyawj lizsij"
+}
diff --git a/skins/Vector/i18n/zea.json b/skins/Vector/i18n/zea.json
new file mode 100644 (file)
index 0000000..d0f9aab
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ooswesthoesbes"
+               ]
+       },
+       "vector-action-addsection": "Voeg kopje toe",
+       "vector-action-delete": "Wissen",
+       "vector-action-move": "Verschuuf",
+       "vector-action-protect": "Bescherm",
+       "vector-action-undelete": "Plaets truhhe",
+       "vector-action-unprotect": "Beveiligienge anpass'n",
+       "vector-view-create": "Anmaeken",
+       "vector-view-edit": "Bewerk",
+       "vector-view-history": "Geschiedenisse bekiek'n",
+       "vector-view-view": "Lezen",
+       "vector-view-viewsource": "Brontekst bekieken"
+}
diff --git a/skins/Vector/i18n/zh-hans.json b/skins/Vector/i18n/zh-hans.json
new file mode 100644 (file)
index 0000000..8e3536f
--- /dev/null
@@ -0,0 +1,26 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Hydra",
+                       "Liangent",
+                       "Liuxinyu970226",
+                       "Xiaomingyan",
+                       "Cwek"
+               ]
+       },
+       "vector-skin-desc": "提供清新的外观和许多可用性改进的现代版MonoBook",
+       "vector.css": "/* 放置于这里的CSS将影响使用Vector皮肤的用户 */",
+       "vector.js": "/* 这里的任何JavaScript将为使用Vector皮肤的用户加载 */",
+       "vector-action-addsection": "添加话题",
+       "vector-action-delete": "删除",
+       "vector-action-move": "移动",
+       "vector-action-protect": "保护",
+       "vector-action-undelete": "还原",
+       "vector-action-unprotect": "更改保护",
+       "vector-view-create": "创建",
+       "vector-view-edit": "编辑",
+       "vector-view-history": "查看历史",
+       "vector-view-view": "阅读",
+       "vector-view-viewsource": "查看源代码",
+       "vector-more-actions": "更多"
+}
diff --git a/skins/Vector/i18n/zh-hant.json b/skins/Vector/i18n/zh-hant.json
new file mode 100644 (file)
index 0000000..3e67c21
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Cwlin0416",
+                       "Justincheng12345",
+                       "Liuxinyu970226",
+                       "Mark85296341"
+               ]
+       },
+       "vector.css": "/* 此 CSS 會影響使用 Vector 介面外觀的使用者 */",
+       "vector.js": "/* 此 JavaScript 會用於使用 Vector 介面外觀使用者 */",
+       "vector-action-addsection": "加入主題",
+       "vector-action-delete": "刪除",
+       "vector-action-move": "移動",
+       "vector-action-protect": "保護",
+       "vector-action-undelete": "取消刪除",
+       "vector-action-unprotect": "變更保護",
+       "vector-view-create": "建立",
+       "vector-view-edit": "編輯",
+       "vector-view-history": "檢視歷史",
+       "vector-view-view": "閱讀",
+       "vector-view-viewsource": "檢視原始碼",
+       "vector-more-actions": "更多"
+}
diff --git a/tests/.gitignore b/tests/.gitignore
new file mode 100644 (file)
index 0000000..eb56bcc
--- /dev/null
@@ -0,0 +1,4 @@
+# Puppet-managed dependencies for browser tests
+.bundle
+.gem
+.ruby-version
diff --git a/tests/browser/Gemfile b/tests/browser/Gemfile
new file mode 100755 (executable)
index 0000000..3c28d7a
--- /dev/null
@@ -0,0 +1,8 @@
+#ruby=ruby-2.1.2
+#ruby-gemset=core
+
+source "https://rubygems.org"
+
+gem "chunky_png"
+gem "mediawiki_api"
+gem "mediawiki_selenium"
diff --git a/tests/browser/Gemfile.lock b/tests/browser/Gemfile.lock
new file mode 100644 (file)
index 0000000..6ec2493
--- /dev/null
@@ -0,0 +1,81 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    builder (3.2.2)
+    childprocess (0.5.3)
+      ffi (~> 1.0, >= 1.0.11)
+    chunky_png (1.3.1)
+    cucumber (1.3.15)
+      builder (>= 2.1.2)
+      diff-lcs (>= 1.1.3)
+      gherkin (~> 2.12)
+      multi_json (>= 1.7.5, < 2.0)
+      multi_test (>= 0.1.1)
+    data_magic (0.19)
+      faker (>= 1.1.2)
+      yml_reader (>= 0.3)
+    diff-lcs (1.2.5)
+    domain_name (0.5.19)
+      unf (>= 0.0.5, < 1.0.0)
+    faker (1.3.0)
+      i18n (~> 0.5)
+    faraday (0.9.0)
+      multipart-post (>= 1.2, < 3)
+    faraday-cookie_jar (0.0.6)
+      faraday (>= 0.7.4)
+      http-cookie (~> 1.0.0)
+    ffi (1.9.3)
+    gherkin (2.12.2)
+      multi_json (~> 1.3)
+    headless (1.0.2)
+    http-cookie (1.0.2)
+      domain_name (~> 0.5)
+    i18n (0.6.9)
+    json (1.8.1)
+    mediawiki_api (0.1.2)
+      faraday (~> 0.9, >= 0.9.0)
+      faraday-cookie_jar (~> 0.0, >= 0.0.6)
+    mediawiki_selenium (0.2.25)
+      cucumber (~> 1.3, >= 1.3.10)
+      headless (~> 1.0, >= 1.0.1)
+      json (~> 1.8, >= 1.8.1)
+      page-object (~> 1.0)
+      rest-client (~> 1.6, >= 1.6.7)
+      rspec-expectations (~> 2.14, >= 2.14.4)
+      syntax (~> 1.2, >= 1.2.0)
+    mime-types (2.3)
+    multi_json (1.10.1)
+    multi_test (0.1.1)
+    multipart-post (2.0.0)
+    page-object (1.0)
+      page_navigation (>= 0.9)
+      selenium-webdriver (>= 2.42.0)
+      watir-webdriver (>= 0.6.9)
+    page_navigation (0.9)
+      data_magic (>= 0.14)
+    rest-client (1.6.7)
+      mime-types (>= 1.16)
+    rspec-expectations (2.99.1)
+      diff-lcs (>= 1.1.3, < 2.0)
+    rubyzip (1.1.4)
+    selenium-webdriver (2.42.0)
+      childprocess (>= 0.5.0)
+      multi_json (~> 1.0)
+      rubyzip (~> 1.0)
+      websocket (~> 1.0.4)
+    syntax (1.2.0)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.6)
+    watir-webdriver (0.6.10)
+      selenium-webdriver (>= 2.18.0)
+    websocket (1.0.7)
+    yml_reader (0.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  chunky_png
+  mediawiki_api
+  mediawiki_selenium
diff --git a/tests/browser/README.mediawiki b/tests/browser/README.mediawiki
new file mode 100644 (file)
index 0000000..8921fb6
--- /dev/null
@@ -0,0 +1,64 @@
+Purpose:
+
+The purpose of these tests is to validate that a newly installed (or updated, or hacked, or whatever) mediawiki instance presents to the user a set of expected features, regardless of what language the wiki is in, or where it is installed, or what extensions it might have.
+
+The tests are based on the basic definition of a wiki, a website where anyone
+
+* can read a page
+* can create a page
+* can edit a page
+* can link one page to another page
+
+Install:
+
+Ruby 1.9.3 or higher is required
+Firefox browser is required
+
+cd /tests/browser
+gem update --system
+gem install bundler
+bundle install
+
+Run the tests:
+
+Edit the environment_variables file with appropriate values for your wiki
+$source environment_variables (example shown in bash shell)
+
+bundle exec cucumber features/
+
+Note that the acceptance tests will create three pages in your wiki entitled "Editing Test Page", "Link Source Test Page", and "Link Target Test Page".  These pages may be deleted at any time.  If you wish to re-run the tests at any time, these test pages will be re-created or reset to their original contents at the time that the tests run.
+
+For more information about running Selenium tests please see
+https://github.com/wikimedia/mediawiki-selenium
+
+Details:
+
+create_account.feature
+* Checks three different ways to arrive on page allowing the user to create an account
+
+create_and_follow_wiki_link.feature:
+* uses the mediawiki API to create a link target page
+* uses the mediawiki API to create a link source page
+* navigates a browser to the link source page
+* clicks the link in that page to the link target page
+* validates that the browser has in fact followed the link to the target page correctly
+
+edit_page.feature:
+* uses the mediawiki API to create an editable page on the wiki
+* navigates a browser to the page
+* clicks the Edit button to invoke the basic editor
+* edits the page with a particular string containing a static part and also a quasi-unique random part
+* saves the edited page
+* checks that the saved page contains the particular string with which the page was edited
+
+main_page.feature:
+* navigates a browser to the default landing page of the wiki
+* checks for the View History link on the landing page
+* checks for the full set of of sidebar links that should exist on every mediawiki wiki
+
+view_history.feature
+* similar to edit_page.feature but checks for an older version of the edited page
+
+Notes:
+
+Tested on beta labs hewiki, dewiki, enwiki, and on a local installation of mediawiki
\ No newline at end of file
diff --git a/tests/browser/environment_variables b/tests/browser/environment_variables
new file mode 100644 (file)
index 0000000..25c4577
--- /dev/null
@@ -0,0 +1,5 @@
+export MEDIAWIKI_URL=http://localhost/wiki/
+export MEDIAWIKI_API_URL=http://localhost/w/api.php
+export MEDIAWIKI_USER=Selenium_user
+export MEDIAWIKI_PASSWORD=Selenium_password
+export BROWSER=firefox
diff --git a/tests/browser/features/create_account.feature b/tests/browser/features/create_account.feature
new file mode 100644 (file)
index 0000000..d6745ad
--- /dev/null
@@ -0,0 +1,12 @@
+@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @phantomjs @test2.wikipedia.org
+Feature: Create account
+
+  Scenario Outline: Go to Create account page
+    Given I go to Create account page at <path>
+    Then form has Create account button
+
+  Examples:
+    | path                          |
+    | Special:CreateAccount         |
+    | Special:UserLogin/signup      |
+    | Special:UserLogin?type=signup |
diff --git a/tests/browser/features/create_and_follow_wiki_link.feature b/tests/browser/features/create_and_follow_wiki_link.feature
new file mode 100644 (file)
index 0000000..90e062d
--- /dev/null
@@ -0,0 +1,9 @@
+@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @phantomjs @test2.wikipedia.org
+Feature: Create Page With Wiki Link
+
+  Scenario: Create Page With Wiki Link
+    Given I create page "Link Target Test Page" with content "Link Target Test Page"
+      And I go to the "Link Source Test Page" page with content "This is a [[Link Target Test Page|link to the test target page]] right here."
+    When I click the Link Target link
+    Then I should be on the Link Target Test Page
+      And the page content should contain "Link Target Test Page"
\ No newline at end of file
diff --git a/tests/browser/features/edit_page.feature b/tests/browser/features/edit_page.feature
new file mode 100644 (file)
index 0000000..ef9991a
--- /dev/null
@@ -0,0 +1,9 @@
+@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @phantomjs @test2.wikipedia.org
+Feature: Edit Page
+
+  Scenario: Create and edit page
+    Given I go to the "Editing Test Page" page with content "This is a page to test editing"
+    When I click Edit
+      And I edit the page with "Edited and a random string"
+      And I save the edit
+    Then the edited page content should contain "Edited and a random string"
diff --git a/tests/browser/features/main_page_links.feature b/tests/browser/features/main_page_links.feature
new file mode 100644 (file)
index 0000000..561fe53
--- /dev/null
@@ -0,0 +1,19 @@
+@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @phantomjs @test2.wikipedia.org
+Feature: Main Page View History Links
+
+  Background:
+  Given I open the main wiki URL
+
+  Scenario: Main Page View History links exist
+    Then I should see a link for View History
+
+  Scenario: Main Page Sidebar Links
+    Then I should see a link for Recent changes
+      And I should see a link for Random page
+      And I should see a link for Help
+      And I should see a link for What links here
+      And I should see a link for Related changes
+      And I should see a link for Special pages
+      And I should see a link for Printable version
+      And I should see a link for Permanent link
+      And I should see a link for Page information
\ No newline at end of file
diff --git a/tests/browser/features/preferences.feature b/tests/browser/features/preferences.feature
new file mode 100644 (file)
index 0000000..1a958bb
--- /dev/null
@@ -0,0 +1,60 @@
+#
+# This file is subject to the license terms in the LICENSE file found in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
+# qa-browsertests, including this file, may be copied, modified, propagated, or
+# distributed except according to the terms contained in the LICENSE file.
+#
+# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
+#
+@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @login @phantomjs @test2.wikipedia.org
+Feature: Preferences
+
+  Scenario: Preferences Appearance
+    Given I am logged in
+    When I navigate to Preferences
+      And I click Appearance
+    Then I can select skins
+      And I can select image size
+      And I can select thumbnail size
+      And I can select Threshold for stub link
+      And I can select underline preferences
+      And I have advanced options checkboxes
+      And I can click Save
+      And I can restore default settings
+      And I can select date format
+      And I can see time offset section
+      And I can see local time
+      And I can select my time zone
+
+
+  Scenario: Preferences Editing
+    Given I am logged in
+    When I navigate to Preferences
+      And I click Editing
+    Then I can select edit area font style
+      And I can select section editing via edit links
+      And I can select section editing by right clicking
+      And I can select section editing by double clicking
+      And I can select to prompt me when entering a blank edit summary
+      And I can select to warn me when I leave an edit page with unsaved changes
+      And I can select show edit toolbar
+      And I can select show preview on first edit
+      And I can select show preview before edit box
+      And I can select live preview
+
+
+  Scenario: Preferences User profile
+    Given I am logged in
+    When I navigate to Preferences
+      And I click User profile
+    Then I can see my Basic informations
+      And I can change my language
+      And I can change my gender
+      And I can see my signature
+      And I can change my signature
+      And I can see my email
+      And I can click Save
+      And I can restore default settings
diff --git a/tests/browser/features/step_definitions/create_account_steps.rb b/tests/browser/features/step_definitions/create_account_steps.rb
new file mode 100644 (file)
index 0000000..7fa2984
--- /dev/null
@@ -0,0 +1,18 @@
+#
+# This file is subject to the license terms in the LICENSE file found in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
+# qa-browsertests, including this file, may be copied, modified, propagated, or
+# distributed except according to the terms contained in the LICENSE file.
+#
+# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
+#
+Given(/^I go to Create account page at (.+)$/) do |path|
+  visit(CreateAccountPage, :using_params => {:page_title => path})
+end
+
+Then(/^form has Create account button$/) do
+  on(CreateAccountPage).create_account_element.should exist
+end
diff --git a/tests/browser/features/step_definitions/create_and_follow_wiki_link_steps.rb b/tests/browser/features/step_definitions/create_and_follow_wiki_link_steps.rb
new file mode 100644 (file)
index 0000000..ba41f7f
--- /dev/null
@@ -0,0 +1,28 @@
+Given(/^I go to the "(.+)" page with content "(.+)"$/) do |page_title, page_content|
+  @wikitext = page_content
+  on(APIPage).create page_title, page_content
+  step "I am on the #{page_title} page"
+end
+
+Given(/^I am on the (.+) page$/) do |article|
+  article = article.gsub(/ /, '_')
+  visit(ZtargetPage, :using_params => {:article_name => article})
+end
+
+Given(/^I create page "(.*?)" with content "(.*?)"$/) do |page_title, page_content|
+  on(APIPage).create page_title, page_content
+end
+
+
+When(/^I click the Link Target link$/) do
+  on(ZtargetPage).link_target_page_link
+end
+
+Then(/^I should be on the Link Target Test Page$/) do
+  @browser.url.should match /Link_Target_Test_Page/
+end
+
+Then(/^the page content should contain "(.*?)"$/) do |content|
+  on(ZtargetPage).page_content.should match content
+end
+
diff --git a/tests/browser/features/step_definitions/edit_page_steps.rb b/tests/browser/features/step_definitions/edit_page_steps.rb
new file mode 100644 (file)
index 0000000..5af097b
--- /dev/null
@@ -0,0 +1,16 @@
+When(/^I click Edit$/) do
+  on(MainPage).edit_link
+end
+
+When(/^I edit the page with "(.*?)"$/) do |edit_content|
+  on(EditPage).edit_page_content_element.send_keys(edit_content + @random_string)
+end
+
+When(/^I save the edit$/) do
+  on(EditPage).save_button
+end
+
+Then(/^the edited page content should contain "(.*?)"$/) do |content|
+  on(MainPage).page_content.should match(content + @random_string)
+end
+
diff --git a/tests/browser/features/step_definitions/main_page_links_steps.rb b/tests/browser/features/step_definitions/main_page_links_steps.rb
new file mode 100644 (file)
index 0000000..c76fd2b
--- /dev/null
@@ -0,0 +1,47 @@
+Given(/^I open the main wiki URL$/) do
+  visit(MainPage)
+end
+
+Then(/^I should see a link for View History$/) do
+  on(MainPage).view_history_link_element.should be_visible
+end
+
+Then(/^I should see a link for Edit$/) do
+  on(MainPage).edit_link_element.should be_visible
+end
+
+Then(/^I should see a link for Recent changes$/) do
+  on(MainPage).recent_changes_link_element.should be_visible
+end
+
+Then(/^I should see a link for Random page$/) do
+  on(MainPage).random_page_link_element.should be_visible
+end
+
+Then(/^I should see a link for Help$/) do
+  on(MainPage).help_link_element.should be_visible
+end
+
+Then(/^I should see a link for What links here$/) do
+  on(MainPage).what_links_here_link_element.should be_visible
+end
+
+Then(/^I should see a link for Related changes$/) do
+  on(MainPage).related_changes_link_element.should be_visible
+end
+
+Then(/^I should see a link for Special pages$/) do
+  on(MainPage).special_pages_link_element.should be_visible
+end
+
+Then(/^I should see a link for Printable version$/) do
+  on(MainPage).printable_version_link_element.should be_visible
+end
+
+Then(/^I should see a link for Permanent link$/) do
+  on(MainPage).permanent_link_link_element.should be_visible
+end
+
+Then(/^I should see a link for Page information$/) do
+  on(MainPage).page_information_link_element.should be_visible
+end
diff --git a/tests/browser/features/step_definitions/preferences_appearance_steps.rb b/tests/browser/features/step_definitions/preferences_appearance_steps.rb
new file mode 100644 (file)
index 0000000..0046af6
--- /dev/null
@@ -0,0 +1,85 @@
+#
+# This file is subject to the license terms in the LICENSE file found in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
+# qa-browsertests, including this file, may be copied, modified, propagated, or
+# distributed except according to the terms contained in the LICENSE file.
+#
+# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
+#
+When(/^I click Appearance$/) do
+  visit(PreferencesPage).appearance_link_element.when_present.click
+end
+
+When(/^I navigate to Preferences$/) do
+  visit(PreferencesPage)
+end
+
+Then(/^I can click Save$/) do
+  on(PreferencesPage).save_button_element.should exist
+end
+
+Then(/^I can restore default settings$/) do
+  on(PreferencesAppearancePage).restore_default_link_element.should exist
+end
+
+Then(/^I can see local time$/) do
+  on(PreferencesAppearancePage).local_time_span_element.should exist
+end
+
+Then(/^I can see time offset section$/) do
+  on(PreferencesAppearancePage).time_offset_table_element.should be_visible
+end
+
+Then(/^I can select date format$/) do
+  on(PreferencesAppearancePage) do |page|
+    page.no_preference_radio_element.should exist
+    page.mo_day_year_radio_element.should exist
+    page.day_mo_year_radio_element.should exist
+    page.year_mo_day_radio_element.should exist
+    page.iso_8601_radio_element.should exist
+  end
+end
+
+Then(/^I can select image size$/) do
+  on(PreferencesAppearancePage).size_select_element.should exist
+end
+
+Then(/^I can select my time zone$/) do
+  on(PreferencesAppearancePage) do |page|
+    page.time_offset_select_element.should exist
+    page.other_offset_element.should exist
+  end
+end
+
+Then(/^I can select skins$/) do
+  on(PreferencesAppearancePage) do |page|
+    page.cologne_blue_element.should exist
+    page.modern_element.should exist
+    page.monobook_element.should exist
+    page.vector_element.should exist
+  end
+end
+
+Then(/^I can select Threshold for stub link$/) do
+  on(PreferencesAppearancePage).threshold_select_element.should exist
+end
+
+Then(/^I can select thumbnail size$/) do
+  on(PreferencesAppearancePage).thumb_select_element.should exist
+end
+
+Then(/^I can select underline preferences$/) do
+  on(PreferencesAppearancePage).underline_select_element.should exist
+end
+
+Then(/^I have advanced options checkboxes$/) do
+  on(PreferencesAppearancePage) do |page|
+    page.hidden_categories_check_element.should exist
+    page.auto_number_check_element.should exist
+  end
+end
+
+
diff --git a/tests/browser/features/step_definitions/preferences_editing_steps.rb b/tests/browser/features/step_definitions/preferences_editing_steps.rb
new file mode 100644 (file)
index 0000000..ad29a74
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# This file is subject to the license terms in the LICENSE file found in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
+# qa-browsertests, including this file, may be copied, modified, propagated, or
+# distributed except according to the terms contained in the LICENSE file.
+#
+# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
+#
+When(/^I click Editing$/) do
+  visit(PreferencesPage).editing_link_element.when_present.click
+end
+
+Then(/^I can select edit area font style$/) do
+  on(PreferencesEditingPage).edit_area_font_style_select_element.when_present.should exist
+end
+
+Then(/^I can select live preview$/) do
+  on(PreferencesEditingPage).live_preview_check_element.when_present.should exist
+end
+
+Then(/^I can select section editing by double clicking$/) do
+  on(PreferencesEditingPage).edit_section_double_click_check_element.when_present.should exist
+end
+
+Then(/^I can select section editing by right clicking$/) do
+  on(PreferencesEditingPage).edit_section_right_click_check_element.when_present.should exist
+end
+
+Then(/^I can select section editing via edit links$/) do
+  on(PreferencesEditingPage).edit_section_edit_link_element.when_present.should exist
+end
+
+Then(/^I can select show edit toolbar$/) do
+  on(PreferencesEditingPage).show_edit_toolbar_check_element.when_present.should exist
+end
+
+Then(/^I can select show preview before edit box$/) do
+  on(PreferencesEditingPage).preview_on_top_check_element.when_present.should exist
+end
+
+Then(/^I can select show preview on first edit$/) do
+  on(PreferencesEditingPage).preview_on_first_check_element.when_present.should exist
+end
+
+Then(/^I can select to prompt me when entering a blank edit summary$/) do
+  on(PreferencesEditingPage).forced_edit_summary_check_element.when_present.should exist
+end
+
+Then(/^I can select to warn me when I leave an edit page with unsaved changes$/) do
+  on(PreferencesEditingPage).unsaved_changes_check_element.when_present.should exist
+end
diff --git a/tests/browser/features/step_definitions/preferences_user_profile_steps.rb b/tests/browser/features/step_definitions/preferences_user_profile_steps.rb
new file mode 100644 (file)
index 0000000..529af66
--- /dev/null
@@ -0,0 +1,43 @@
+#
+# This file is subject to the license terms in the LICENSE file found in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
+# qa-browsertests, including this file, may be copied, modified, propagated, or
+# distributed except according to the terms contained in the LICENSE file.
+#
+# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
+#
+When(/^I click User profile$/) do
+  visit(PreferencesPage).user_profile_link_element.when_present.click
+end
+
+Then(/^I can change my gender$/) do
+  on(PreferencesUserProfilePage) do |page|
+    page.gender_undefined_radio_element.should exist
+    page.gender_male_radio_element.should exist
+    page.gender_female_radio_element.should exist
+  end
+end
+
+Then(/^I can change my language$/) do
+  on(PreferencesUserProfilePage).lang_select_element.should exist
+end
+
+Then(/^I can change my signature$/) do
+  on(PreferencesUserProfilePage).signature_field_element.should exist
+end
+
+Then(/^I can see my Basic informations$/) do
+  on(PreferencesUserProfilePage).basic_info_table_element.should exist
+end
+
+Then(/^I can see my email$/) do
+  on(PreferencesUserProfilePage).email_table_element.should exist
+end
+
+Then(/^I can see my signature$/) do
+  on(PreferencesUserProfilePage).signature_table_element.should exist
+end
+
diff --git a/tests/browser/features/step_definitions/view_history_steps.rb b/tests/browser/features/step_definitions/view_history_steps.rb
new file mode 100644 (file)
index 0000000..1ecc008
--- /dev/null
@@ -0,0 +1,8 @@
+When(/^I click View History$/) do
+  on(ViewHistoryPage).view_history_link
+end
+
+Then(/^I should see a link to a previous version of the page$/) do
+  on(ViewHistoryPage).old_version_link_element.should be_visible
+end
+
diff --git a/tests/browser/features/support/env.rb b/tests/browser/features/support/env.rb
new file mode 100644 (file)
index 0000000..4ffef5e
--- /dev/null
@@ -0,0 +1,2 @@
+require "mediawiki_selenium"
+require "mediawiki_api"
diff --git a/tests/browser/features/support/hooks.rb b/tests/browser/features/support/hooks.rb
new file mode 100644 (file)
index 0000000..85309f3
--- /dev/null
@@ -0,0 +1,2 @@
+# Needed for cucumber --dry-run -f stepdefs
+require 'page-object'
diff --git a/tests/browser/features/support/modules/url_module.rb b/tests/browser/features/support/modules/url_module.rb
new file mode 100644 (file)
index 0000000..6c329e8
--- /dev/null
@@ -0,0 +1,10 @@
+module URL
+  def self.url(name)
+    if ENV["MEDIAWIKI_URL"]
+      mediawiki_url = ENV["MEDIAWIKI_URL"]
+    else
+      mediawiki_url = "http://127.0.0.1:80/w/index.php"
+    end
+    "#{mediawiki_url}#{name}"
+  end
+end
diff --git a/tests/browser/features/support/pages/create_account_page.rb b/tests/browser/features/support/pages/create_account_page.rb
new file mode 100644 (file)
index 0000000..380bccb
--- /dev/null
@@ -0,0 +1,19 @@
+#
+# This file is subject to the license terms in the LICENSE file found in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
+# qa-browsertests, including this file, may be copied, modified, propagated, or
+# distributed except according to the terms contained in the LICENSE file.
+#
+# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
+#
+class CreateAccountPage
+  include PageObject
+
+  include URL
+  page_url URL.url("<%=params[:page_title]%>")
+
+  button(:create_account, id: "wpCreateaccount")
+end
diff --git a/tests/browser/features/support/pages/edit_page.rb b/tests/browser/features/support/pages/edit_page.rb
new file mode 100644 (file)
index 0000000..594ac73
--- /dev/null
@@ -0,0 +1,7 @@
+class EditPage
+  include PageObject
+
+  text_area(:edit_page_content, id: "wpTextbox1")
+  button(:save_button, id: "wpSave")
+
+end
\ No newline at end of file
diff --git a/tests/browser/features/support/pages/main_page.rb b/tests/browser/features/support/pages/main_page.rb
new file mode 100644 (file)
index 0000000..7d96c2b
--- /dev/null
@@ -0,0 +1,19 @@
+class MainPage
+  include PageObject
+
+  include URL
+  page_url URL.url("")
+
+  a(:edit_link, href: /action=edit/)
+  li(:help_link, id: "n-help")
+  div(:page_content, id: "content")
+  li(:page_information_link, id: "t-info")
+  li(:permanent_link_link, id: "t-permalink")
+  a(:printable_version_link, href: /printable=yes/)
+  li(:random_page_link, id: "n-randompage")
+  li(:recent_changes_link, id: "n-recentchanges")
+  li(:related_changes_link, id: "t-recentchangeslinked")
+  li(:special_pages_link, id: "t-specialpages")
+  a(:view_history_link, href: /action=history/)
+  li(:what_links_here_link, id: "t-whatlinkshere")
+end
\ No newline at end of file
diff --git a/tests/browser/features/support/pages/preferences_appearance_page.rb b/tests/browser/features/support/pages/preferences_appearance_page.rb
new file mode 100644 (file)
index 0000000..e7b64cd
--- /dev/null
@@ -0,0 +1,42 @@
+#
+# This file is subject to the license terms in the LICENSE file found in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
+# qa-browsertests, including this file, may be copied, modified, propagated, or
+# distributed except according to the terms contained in the LICENSE file.
+#
+# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
+#
+class PreferencesAppearancePage
+  include PageObject
+
+  include URL
+  page_url URL.url("Special:Preferences#mw-prefsection-rendering")
+
+  checkbox(:auto_number_check, id: "mw-input-wpnumberheadings")
+  checkbox(:collapse_sidebar_vector_check, id: "mw-input-wpvector-collapsiblenav")
+  radio_button(:cologne_blue, id: "mw-input-wpskin-cologneblue")
+  radio_button(:day_mo_year_radio, id: "mw-input-wpdate-dmy")
+  checkbox(:dont_show_aft_check, id: "mw-input-wparticlefeedback-disable")
+  checkbox(:exclude_from_experiments_check, id: "mw-input-wpvector-noexperiments")
+  checkbox(:hidden_categories_check, id: "mw-input-wpshowhiddencats")
+  radio_button(:iso_8601_radio, id: "mw-input-wpdate-ISO_8601")
+  span(:local_time_span, id: "wpLocalTime")
+  radio_button(:mo_day_year_radio, id: "mw-input-wpdate-mdy")
+  radio_button(:modern, id: "mw-input-wpskin-modern")
+  radio_button(:monobook, id: "mw-input-wpskin-monobook")
+  radio_button(:no_preference_radio, id: "mw-input-wpdate-default")
+  text_field(:other_offset, id: "mw-input-wptimecorrection-other")
+  a(:restore_default_link, href: /reset/)
+  select_list(:size_select, id: "mw-input-wpimagesize")
+  select_list(:threshold_select, id: "mw-input-wpstubthreshold")
+  select_list(:time_offset_select, id: "mw-input-wptimecorrection")
+  table(:time_offset_table, id: "mw-htmlform-timeoffset")
+  select_list(:thumb_select, id: "mw-input-wpthumbsize")
+  select_list(:underline_select, id: "mw-input-wpunderline")
+  radio_button(:vector, id: "mw-input-wpskin-vector")
+  radio_button(:year_mo_day_radio, id: "mw-input-wpdate-ymd")
+end
+
diff --git a/tests/browser/features/support/pages/preferences_editing_page.rb b/tests/browser/features/support/pages/preferences_editing_page.rb
new file mode 100644 (file)
index 0000000..aed9c41
--- /dev/null
@@ -0,0 +1,28 @@
+#
+# This file is subject to the license terms in the LICENSE file found in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
+# qa-browsertests, including this file, may be copied, modified, propagated, or
+# distributed except according to the terms contained in the LICENSE file.
+#
+# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
+#
+class PreferencesEditingPage
+  include PageObject
+
+  include URL
+  page_url URL.url("Special:Preferences#mw-prefsection-rendering")
+
+  select_list(:edit_area_font_style_select, id: "mw-input-wpeditfont")
+  checkbox(:edit_section_double_click_check, id: "mw-input-wpeditondblclick")
+  checkbox(:edit_section_edit_link, id: "mw-input-wpeditsectiononrightclick")
+  checkbox(:edit_section_right_click_check, id: "mw-input-wpeditsectiononrightclick")
+  checkbox(:forced_edit_summary_check, id: "mw-input-wpforceeditsummary")
+  checkbox(:live_preview_check, id: "mw-input-wpuselivepreview")
+  checkbox(:preview_on_first_check, id: "mw-input-wppreviewonfirst")
+  checkbox(:preview_on_top_check, id: "mw-input-wppreviewontop")
+  checkbox(:show_edit_toolbar_check, id: "mw-input-wpshowtoolbar")
+  checkbox(:unsaved_changes_check, id: "mw-input-wpuseeditwarning")
+end
diff --git a/tests/browser/features/support/pages/preferences_page.rb b/tests/browser/features/support/pages/preferences_page.rb
new file mode 100644 (file)
index 0000000..919ba27
--- /dev/null
@@ -0,0 +1,22 @@
+#
+# This file is subject to the license terms in the LICENSE file found in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
+# qa-browsertests, including this file, may be copied, modified, propagated, or
+# distributed except according to the terms contained in the LICENSE file.
+#
+# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
+#
+class PreferencesPage
+  include PageObject
+
+  include URL
+  page_url URL.url("Special:Preferences")
+
+  a(:appearance_link, id: "preftab-rendering")
+  a(:editing_link, id: "preftab-editing")
+  a(:user_profile_link, id: "preftab-personal")
+  button(:save_button, id: "prefcontrol")
+end
diff --git a/tests/browser/features/support/pages/preferences_user_profile_page.rb b/tests/browser/features/support/pages/preferences_user_profile_page.rb
new file mode 100644 (file)
index 0000000..28e10b9
--- /dev/null
@@ -0,0 +1,28 @@
+#
+# This file is subject to the license terms in the LICENSE file found in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
+# qa-browsertests, including this file, may be copied, modified, propagated, or
+# distributed except according to the terms contained in the LICENSE file.
+#
+# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
+# qa-browsertests top-level directory and at
+# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
+#
+class PreferencesUserProfilePage
+  include PageObject
+
+  include URL
+  page_url URL.url("Special:Preferences#mw-prefsection-personal")
+
+  table(:basic_info_table, id: "mw-htmlform-info")
+  link(:change_password_link, text: "Change password")
+  table(:email_table, id: "mw-htmlform-email")
+  radio_button(:gender_female_radio, id: "mw-input-wpgender-male")
+  radio_button(:gender_male_radio, id: "mw-input-wpgender-female")
+  radio_button(:gender_undefined_radio, id: "mw-input-wpgender-unknown")
+  select_list(:lang_select, id: "mw-input-wplanguage")
+  checkbox(:remember_password_check, id: "mw-input-wprememberpassword")
+  text_field(:signature_field, id: "mw-input-wpnickname")
+  table(:signature_table, id: "mw-htmlform-signature")
+end
diff --git a/tests/browser/features/support/pages/view_history_page.rb b/tests/browser/features/support/pages/view_history_page.rb
new file mode 100644 (file)
index 0000000..6689598
--- /dev/null
@@ -0,0 +1,7 @@
+class ViewHistoryPage
+  include PageObject
+
+  a(:view_history_link, href: /action=history/)
+  a(:old_version_link, href: /oldid=/)
+
+end
\ No newline at end of file
diff --git a/tests/browser/features/support/pages/ztargetpage.rb b/tests/browser/features/support/pages/ztargetpage.rb
new file mode 100644 (file)
index 0000000..c1f46ec
--- /dev/null
@@ -0,0 +1,7 @@
+class ZtargetPage < MainPage
+  include URL
+  page_url URL.url("<%=params[:article_name]%>")
+  include PageObject
+
+  a(:link_target_page_link, text: "link to the test target page")
+end
\ No newline at end of file
diff --git a/tests/browser/features/view_history.feature b/tests/browser/features/view_history.feature
new file mode 100644 (file)
index 0000000..7b42639
--- /dev/null
@@ -0,0 +1,11 @@
+@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @phantomjs @test2.wikipedia.org
+Feature: View History
+
+  Scenario: Edit page and view history
+    Given I go to the "History Test Page" page with content "This is a page that will have history"
+    When I click Edit
+      And I edit the page with "Edited and a random string"
+      And I save the edit
+      And the edited page content should contain "Edited and a random string"
+      And I click View History
+    Then I should see a link to a previous version of the page
\ No newline at end of file
index 63c3d01..69fda8d 100644 (file)
@@ -27,7 +27,10 @@ module.exports = function ( grunt ) {
                        all: [
                                '<%= jshint.all %>',
                                // Auto-generated file with JSON (double quotes)
-                               '!tests/qunit/data/mediawiki.jqueryMsg.data.js'
+                               '!tests/qunit/data/mediawiki.jqueryMsg.data.js',
+                               // Skip functions are stored as script files but wrapped in a function when
+                               // executed. node-jscs trips on the would-be "Illegal return statement".
+                               '!resources/src/*-skip.js'
 
                        // Exclude all files ignored by jshint
                        ].concat( grunt.file.read( '.jshintignore' ).split( '\n' ).reduce( function ( patterns, pattern ) {
index 7e7c42f..6c8a401 100644 (file)
@@ -145,6 +145,7 @@ class ParserTest {
 
                $this->hooks = array();
                $this->functionHooks = array();
+               $this->transparentHooks = array();
                self::setUp();
        }
 
@@ -152,6 +153,7 @@ class ParserTest {
                global $wgParser, $wgParserConf, $IP, $messageMemc, $wgMemc,
                        $wgUser, $wgLang, $wgOut, $wgRequest, $wgStyleDirectory, $wgEnableParserCache,
                        $wgExtraNamespaces, $wgNamespaceAliases, $wgNamespaceProtection, $wgLocalFileRepo,
+                       $wgExtraInterlanguageLinkPrefixes,
                        $parserMemc, $wgThumbnailScriptPath, $wgScriptPath,
                        $wgArticlePath, $wgScript, $wgStylePath, $wgExtensionAssetsPath,
                        $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType, $wgLockManagers;
@@ -222,6 +224,9 @@ class ParserTest {
                if ( $wgStyleDirectory === false ) {
                        $wgStyleDirectory = "$IP/skins";
                }
+               // "extra language links"
+               // see https://gerrit.wikimedia.org/r/111390
+               array_push( $wgExtraInterlanguageLinkPrefixes, 'mul' );
 
                self::setupInterwikis();
        }
@@ -275,6 +280,11 @@ class ParserTest {
                                        'iw_api' => '',
                                        'iw_wikiid' => '',
                                        'iw_local' => 1 ),
+                               'mul' => array(
+                                       'iw_url' => 'http://wikisource.org/wiki/$1',
+                                       'iw_api' => '',
+                                       'iw_wikiid' => '',
+                                       'iw_local' => 1 ),
                        );
                        if ( array_key_exists( $prefix, $testInterwikis ) ) {
                                $iwData = $testInterwikis[$prefix];
@@ -528,6 +538,10 @@ class ParserTest {
                        $parser->setFunctionHook( $tag, $callback, $flags );
                }
 
+               foreach ( $this->transparentHooks as $tag => $callback ) {
+                       $parser->setTransparentTagHook( $tag, $callback );
+               }
+
                wfRunHooks( 'ParserTestParser', array( &$parser ) );
 
                return $parser;
@@ -1523,6 +1537,29 @@ class ParserTest {
                return true;
        }
 
+       /**
+        * Steal a callback function from the primary parser, save it for
+        * application to our scary parser. If the hook is not installed,
+        * abort processing of this file.
+        *
+        * @param string $name
+        * @return bool True if function hook is present
+        */
+       public function requireTransparentHook( $name ) {
+               global $wgParser;
+
+               $wgParser->firstCallInit(); // make sure hooks are loaded.
+
+               if ( isset( $wgParser->mTransparentTagHooks[$name] ) ) {
+                       $this->transparentHooks[$name] = $wgParser->mTransparentTagHooks[$name];
+               } else {
+                       echo "   This test suite requires the '$name' transparent hook extension, skipping.\n";
+                       return false;
+               }
+
+               return true;
+       }
+
        /**
         * Run the "tidy" command on text if the $wgUseTidy
         * global is true
index c447a44..e4d9324 100644 (file)
@@ -87,12 +87,6 @@ Template:tbl-end
 |}
 !! endarticle
 
-!! article
-Template:!
-!! text
-|
-!! endarticle
-
 !! article
 Template:echo
 !! text
@@ -1093,6 +1087,59 @@ Non-html5 tags should be accepted
 </p>
 !! end
 
+## a,rtc not permitted
+## i,b,br omitted
+!! test
+Text-level semantic html elements in wikitext
+!! wikitext
+<em>text</em>
+<strong>text</strong>
+<small>text</small>
+<s>text</s>
+<cite>text</cite>
+<q>text</q>
+<dfn>text</dfn>
+<abbr>text</abbr>
+<data>text</data>
+<time>text</time>
+<code>text</code>
+<var>text</var>
+<samp>text</samp>
+<kbd>text</kbd>
+<sub>text</sub>
+<u>text</u>
+<mark>text</mark>
+<ruby><rb>明日<rp>(</rp><rt>Ashita</rt><rp>)</rp></rb></ruby>
+<bdi>text</bdi>
+<bdo>text</bdo>
+<span>text</span>
+<wbr />
+!! html
+<p><em>text</em>
+<strong>text</strong>
+<small>text</small>
+<s>text</s>
+<cite>text</cite>
+<q>text</q>
+<dfn>text</dfn>
+<abbr>text</abbr>
+<data>text</data>
+<time>text</time>
+<code>text</code>
+<var>text</var>
+<samp>text</samp>
+<kbd>text</kbd>
+<sub>text</sub>
+<u>text</u>
+<mark>text</mark>
+<ruby><rb>明日<rp>(</rp><rt>Ashita</rt><rp>)</rp></rb></ruby>
+<bdi>text</bdi>
+<bdo>text</bdo>
+<span>text</span>
+<wbr />
+</p>
+!! end
+
 !! test
 Non-word characters don't terminate tag names (bug 17663, 40670, 52022)
 !! wikitext
@@ -1223,6 +1270,16 @@ parsoid
 </p>
 !! end
 
+!! test
+Properly escape nowiki when combined with other wiki markup
+!! options
+parsoid=html2wt
+!! wikitext
+<nowiki>* &lt;/nowiki&gt;</nowiki> tag
+!! html
+<p>* &lt;/nowiki&gt; tag</p>
+!! end
+
 ###
 ### Comments
 ###
@@ -4458,6 +4515,16 @@ Parenthesis in external links, w/ transclusion or comment
 <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
 
+!! test
+Replace invalid link targets when serializing
+!! options
+parsoid=html2wt
+!! html
+<a rel="mw:WikiLink" href="./]] foo [[bar">Manual</a>
+!! wikitext
+[[MediaWiki:Badtitletext|Manual]]
+!! end
+
 ###
 ### Quotes
 ###
@@ -5185,6 +5252,23 @@ Table cell with a single comment
 
 !! end
 
+!! test
+Table-cell after a comment-only-empty-line
+!! wikitext
+{|
+|a
+<!--c1-->
+<!--c2-->| b
+|}
+!! html/parsoid
+<table>
+<tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'>a</td>
+<!--c1-->
+<!--c2--><td data-parsoid='{"autoInsertedEnd":true}'> b</td></tr>
+</tbody></table>
+
+!! end
+
 # The expected HTML structure in this test is debatable. The PHP parser does
 # not parse this kind of table at all. The main focus for Parsoid is on
 # round-tripping, so this output is ok for now. TODO: revisit!
@@ -5349,6 +5433,54 @@ foo
 </tbody></table>
 !!end
 
+!! test
+Strip unsupported table tags
+!! options
+parsoid=html2wt
+!! html
+<table>
+<thead>
+<tr>
+<th>Month</th>
+<th>Savings</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>January</td>
+<td>$100</td>
+</tr>
+<tr>
+<td>February</td>
+<td>$80</td>
+</tr>
+</tbody>
+<tfoot>
+<tr>
+<td>Sum</td>
+<td>$180</td>
+</tr>
+</tfoot>
+</table>
+!! wikitext
+{|
+
+!Month
+!Savings
+
+|January
+|$100
+
+|-
+|February
+|$80
+
+|Sum
+|$180
+
+|}
+!! end
+
 ###
 ### Internal links
 ###
@@ -6275,6 +6407,16 @@ Blah blah blah
 </p>
 !! end
 
+!! test
+"Extra" interlanguage links (bug 32189 / gerrit 111390)
+!! wikitext
+Blah blah blah
+[[mul:Multilingual]]
+!! html
+<p>Blah blah blah
+</p>
+!! end
+
 !! test
 Parsoid-specific test: Wikilinks with &nbsp; should RT properly
 !! options
@@ -15134,6 +15276,37 @@ image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
 
 !! end
 
+!! test
+Gallery with link that has fragment
+!! wikitext
+<gallery>
+image:foobar.jpg|link=Main_Page
+image:foobar.jpg|link=Main_Page#section
+image:foobar.jpg|link=Main Page#section|caption
+</gallery>
+!! html
+<ul class="gallery mw-gallery-traditional">
+               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="gallerytext">
+                       </div>
+               </div></li>
+               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="gallerytext">
+                       </div>
+               </div></li>
+               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="gallerytext">
+<p>caption
+</p>
+                       </div>
+               </div></li>
+</ul>
+
+!! end
+
 !! test
 Gallery with wikitext inside caption
 !! wikitext
         b</p>
 !! end
 
+!! test
+2. Leading whitespace in non-indent-pre contexts should not be escaped
+!! options
+parsoid
+!! wikitext
+foo <ref>''a''
+ b</ref>
+!! html
+<p>foo <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"&lt;i data-parsoid=&#39;{\"dsr\":[9,14,2,2]}&#39;>a&lt;/i>\n b"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+!! end
+
+!! test
+3. Leading whitespace in indent-pre suppressing contexts should not be escaped
+!! options
+parsoid
+!! wikitext
+<blockquote>
+ a
+ <span>b</span>
+ c
+</blockquote>
+!! html
+<blockquote>
+<p>
+ a
+ <span>b</span>
+ c</p>
+</blockquote>
+!! end
+
+!! test
+4. Leading whitespace in indent-pre suppressing contexts should not be escaped
+!! options
+parsoid
+!! wikitext
+ [[File:Foobar.jpg|thumb|caption]]
+!! html
+!! html/parsoid
+ <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+!! end
+
 #### --------------- Behavior Switches --------------------
 !! test
 1. Valid behavior switches should be escaped
 parsoid=html2wt
 !! wikitext
 <nowiki>__TOC__</nowiki>
+''<nowiki>__TOC__</nowiki>''
 !! html
 __TOC__
+<i>__TOC__</i>
 !! end
 
 !! test
@@ -19768,6 +19984,20 @@ Indented block & table
  </tbody></table>
 !!end
 
+!! test
+Indent and comment before table row
+!! wikitext
+{|
+ <!--hi-->|-
+ | there
+|}
+!! html/parsoid
+<table data-parsoid='{}'>
+ <!--hi--><tbody data-parsoid='{}'><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
+ <td data-parsoid='{"autoInsertedEnd":true}'> there</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)
@@ -20439,21 +20669,21 @@ foo
 !! end
 
 !! test
-Strip leading whitespace when handling indent-pre inducing tags
+Nowiki-wrap leading whitespace when handling indent-pre inducing tags
 !! options
 parsoid=html2wt
 !! wikitext
 foo
-<span>bar</span>
+<nowiki> </nowiki><span>bar</span>
 
 <span>foo2
-</span>bar2
+<nowiki> </nowiki></span>bar2
 
 <div>foo</div>
-<span>bar</span>
+<nowiki> </nowiki><span>bar</span>
 
 <div>
-<span>foo</span>
+<nowiki> </nowiki><span>foo</span>
 </div>
 !! html
 <p>foo</p>
index 53b944d..c9184e8 100644 (file)
@@ -245,6 +245,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        $GLOBALS[$key] = $value;
                }
                $this->mwGlobals = array();
+               RequestContext::resetMain();
 
                $phpErrorLevel = intval( ini_get( 'error_reporting' ) );
 
index b07c013..ae069ea 100644 (file)
@@ -76,6 +76,7 @@ class ArticleTest extends MediaWikiTestCase {
         * @covers Article::getAutosummary
         */
        public function testStaticFunctions() {
+               $this->hideDeprecated( 'Article::selectFields' );
                $this->hideDeprecated( 'Article::getAutosummary' );
                $this->hideDeprecated( 'WikiPage::getAutosummary' );
                $this->hideDeprecated( 'CategoryPage::getAutosummary' ); // Inherited from Article
index 5032dc1..af834f8 100644 (file)
@@ -28,7 +28,11 @@ class WfParseUrlTest extends MediaWikiTestCase {
                parent::setUp();
 
                $this->setMwGlobals( 'wgUrlProtocols', array(
-                       '//', 'http://', 'file://', 'mailto:',
+                       '//',
+                       'http://',
+                       'https://',
+                       'file://',
+                       'mailto:',
                ) );
        }
 
@@ -36,11 +40,9 @@ class WfParseUrlTest extends MediaWikiTestCase {
         * @dataProvider provideURLs
         */
        public function testWfParseUrl( $url, $parts ) {
-               $partsDump = var_export( $parts, true );
                $this->assertEquals(
                        $parts,
-                       wfParseUrl( $url ),
-                       "Testing $url parses to $partsDump"
+                       wfParseUrl( $url )
                );
        }
 
@@ -67,6 +69,14 @@ class WfParseUrlTest extends MediaWikiTestCase {
                                        'host' => 'example.org',
                                )
                        ),
+                       array(
+                               'https://example.org',
+                               array(
+                                       'scheme' => 'https',
+                                       'delimiter' => '://',
+                                       'host' => 'example.org',
+                               )
+                       ),
                        array(
                                'http://id:key@example.org:123/path?foo=bar#baz',
                                array(
index 9889b08..4d62cc7 100644 (file)
@@ -91,6 +91,7 @@ class LinkerTest extends MediaWikiLangTestCase {
         */
        public function testFormatComment( $expected, $comment, $title = false, $local = false ) {
                $this->setMwGlobals( array(
+                       'wgScript' => '/wiki/index.php',
                        'wgArticlePath' => '/wiki/$1',
                        'wgWellFormedXml' => true,
                ) );
index f595d2d..cae0e52 100644 (file)
@@ -2,6 +2,7 @@
 
 /**
  * @group Database
+ * @group RequestContext
  */
 class RequestContextTest extends MediaWikiTestCase {
 
@@ -53,6 +54,11 @@ class RequestContextTest extends MediaWikiTestCase {
                                'USER-AGENT' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0'
                        )
                );
+               // importScopedSession() sets these variables
+               $this->setMwGlobals( array(
+                       'wgUser' => new User,
+                       'wgRequest' => new FauxRequest,
+               ) );
                $sc = RequestContext::importScopedSession( $sinfo ); // load new context
 
                $info = $context->exportSession();
index 91399be..e642177 100644 (file)
@@ -80,4 +80,62 @@ class MWDebugTest extends MediaWikiTestCase {
                        "Only one deprecated warning per function should be kept"
                );
        }
+
+       /**
+        * @covers MWDebug::appendDebugInfoToApiResult
+        */
+       public function testAppendDebugInfoToApiResultXmlFormat() {
+               $request = $this->newApiRequest(
+                       array( 'action' => 'help', 'format' => 'xml' ),
+                       '/api.php?action=help&format=xml'
+               );
+
+               $context = new RequestContext();
+               $context->setRequest( $request );
+
+               $apiMain = new ApiMain( $context );
+
+               $result = new ApiResult( $apiMain );
+               $result->setRawMode( true );
+
+               MWDebug::appendDebugInfoToApiResult( $context, $result );
+
+               $this->assertInstanceOf( 'ApiResult', $result );
+               $data = $result->getData();
+
+               $expectedKeys = array( 'mwVersion', 'phpVersion', 'gitRevision', 'gitBranch',
+                       'gitViewUrl', 'time', 'log', 'debugLog', 'queries', 'request', 'memory',
+                       'memoryPeak', 'includes', 'profile', '_element' );
+
+               foreach( $expectedKeys as $expectedKey ) {
+                       $this->assertArrayHasKey( $expectedKey, $data['debuginfo'], "debuginfo has $expectedKey" );
+               }
+
+               $xml = ApiFormatXml::recXmlPrint( 'help', $data );
+
+               // exception not thrown
+               $this->assertInternalType( 'string', $xml );
+       }
+
+       /**
+        * @param string[] $params
+        * @param string $requestUrl
+        *
+        * @return FauxRequest
+        */
+       private function newApiRequest( array $params, $requestUrl ) {
+               $request = $this->getMockBuilder( 'FauxRequest' )
+                       ->setMethods( array( 'getRequestURL' ) )
+                       ->setConstructorArgs( array(
+                               $params
+                       ) )
+                       ->getMock();
+
+               $request->expects( $this->any() )
+                       ->method( 'getRequestURL' )
+                       ->will( $this->returnValue( $requestUrl ) );
+
+               return $request;
+       }
+
 }
index bb5e398..2b4d60d 100644 (file)
@@ -291,6 +291,41 @@ class CSSMinTest extends MediaWikiTestCase {
                                '@import url(//localhost/styles.css?query=yes)',
                                '@import url(//localhost/styles.css?query=yes)',
                        ),
+                       array(
+                               'Simple case with comments before url',
+                               'foo { prop: /* some {funny;} comment */ url(bar.png); }',
+                               'foo { prop: /* some {funny;} comment */ url(http://localhost/w/bar.png); }',
+                       ),
+                       array(
+                               'Simple case with comments after url',
+                               'foo { prop: url(red.gif)/* some {funny;} comment */ ; }',
+                               'foo { prop: url(http://localhost/w/red.gif?timestamp)/* some {funny;} comment */ ; }',
+                       ),
+                       array(
+                               'Embedded file with comment before url',
+                               'foo { /* @embed */ background: /* some {funny;} comment */ url(red.gif); }',
+                               "foo { background: /* some {funny;} comment */ url($red); background: /* some {funny;} comment */ url(http://localhost/w/red.gif?timestamp)!ie; }",
+                       ),
+                       array(
+                               'Embedded file with comments inside and outside the rule',
+                               'foo { /* @embed */ background: url(red.gif) /* some {foo;} comment */; /* some {bar;} comment */ }',
+                               "foo { background: url($red) /* some {foo;} comment */; background: url(http://localhost/w/red.gif?timestamp) /* some {foo;} comment */!ie; /* some {bar;} comment */ }",
+                       ),
+                       array(
+                               'Embedded file with comment outside the rule',
+                               'foo { /* @embed */ background: url(red.gif); /* some {funny;} comment */ }',
+                               "foo { background: url($red); background: url(http://localhost/w/red.gif?timestamp)!ie; /* some {funny;} comment */ }",
+                       ),
+                       array(
+                               'Rule with two urls, each with comments',
+                               '{ background: /*asd*/ url(something.png); background: /*jkl*/ url(something.png); }',
+                               '{ background: /*asd*/ url(http://localhost/w/something.png); background: /*jkl*/ url(http://localhost/w/something.png); }',
+                       ),
+                       array(
+                               'Sanity check for offending line from jquery.ui.theme.css (bug 60077)',
+                               '.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, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(http://localhost/w/images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }',
+                       ),
                );
        }
 
index b81c973..d36697e 100644 (file)
@@ -155,26 +155,6 @@ class MagicVariableTest extends MediaWikiTestCase {
                $this->assertUnPadded( 'revisionmonth1', $month );
        }
 
-       /**
-        * Rough tests for {{SERVERNAME}} magic word
-        * Bug 31176
-        * @group Database
-        * @dataProvider provideDataServernameFromDifferentProtocols
-        */
-       public function testServernameFromDifferentProtocols( $server ) {
-               $this->setMwGlobals( 'wgServer', $server );
-
-               $this->assertMagic( 'localhost', 'servername' );
-       }
-
-       public static function provideDataServernameFromDifferentProtocols() {
-               return array(
-                       array( 'http://localhost/' ),
-                       array( 'https://localhost/' ),
-                       array( '//localhost/' ), # bug 31176
-               );
-       }
-
        ############### HELPERS ############################################
 
        /** assertion helper expecting a magic output which is zero padded */
index d322e47..4c72d1c 100644 (file)
@@ -25,6 +25,7 @@ class NewParserTest extends MediaWikiTestCase {
        public $savedGlobals = array();
        public $hooks = array();
        public $functionHooks = array();
+       public $transparentHooks = array();
 
        //Fuzz test
        public $maxFuzzTestLength = 300;
@@ -147,6 +148,10 @@ class NewParserTest extends MediaWikiTestCase {
                # proper precedence when resolving links. (bug 51680)
                $tmpGlobals['wgExtraNamespaces'] = array( 100 => 'MemoryAlpha' );
 
+               # "extra language links"
+               # see https://gerrit.wikimedia.org/r/111390
+               $tmpGlobals['wgExtraInterlanguageLinkPrefixes'] = array( 'mul' );
+
                //DjVu support
                $this->djVuSupport = new DjVuSupport();
 
@@ -945,6 +950,12 @@ class NewParserTest extends MediaWikiTestCase {
                return isset( $wgParser->mFunctionHooks[$name] );
        }
 
+       public function requireTransparentHook( $name ) {
+               global $wgParser;
+               $wgParser->firstCallInit(); // make sure hooks are loaded.
+               return isset( $wgParser->mTransparentTagHooks[$name] );
+       }
+
        //Various "cleanup" functions
 
        /**
diff --git a/tests/phpunit/includes/specials/SpecialMIMESearchTest.php b/tests/phpunit/includes/specials/SpecialMIMESearchTest.php
new file mode 100644 (file)
index 0000000..e7bb35c
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+class SpecialMIMESearchTest extends MediaWikiTestCase {
+
+       /** @var MIMESearchPage */
+       private $page;
+
+       function setUp() {
+               $this->page = new MIMESearchPage;
+               $context = new RequestContext();
+               $context->setTitle( Title::makeTitle( NS_SPECIAL, 'MIMESearch' ) );
+               $context->setRequest( new FauxRequest() );
+               $this->page->setContext( $context );
+
+               parent::setUp();
+       }
+
+       /**
+        * @dataProvider providerMimeFiltering
+        * @param $par String subpage for special page
+        * @param $major String Major mime type we expect to look for
+        * @param $minor String Minor mime type we expect to look for
+        */
+       function testMimeFiltering( $par, $major, $minor ) {
+               $this->page->run( $par );
+               $qi = $this->page->getQueryInfo();
+               $this->assertEquals( $qi['conds']['img_major_mime'], $major );
+               if ( $minor !== null ) {
+                       $this->assertEquals( $qi['conds']['img_minor_mime'], $minor );
+               } else {
+                       $this->assertArrayNotHasKey( 'img_minor_mime', $qi['conds'] );
+               }
+               $this->assertContains( 'image', $qi['tables'] );
+       }
+
+       function providerMimeFiltering() {
+               return array(
+                       array( 'image/gif', 'image', 'gif' ),
+                       array( 'image/png', 'image', 'png' ),
+                       array( 'application/pdf', 'application', 'pdf' ),
+                       array( 'image/*', 'image', null ),
+                       array( 'multipart/*', 'multipart', null ),
+               );
+       }
+}
index ea2d28c..4f6c411 100644 (file)
@@ -51,7 +51,7 @@ class SpecialPreferencesTest extends MediaWikiTestCase {
                # Do the call, should not spurt a fatal error.
                $special = new SpecialPreferences();
                $special->setContext( $context );
-               $special->execute( array() );
+               $this->assertNull( $special->execute( array() ) );
        }
 
 }
index a4ef06d..ef670df 100644 (file)
@@ -573,11 +573,30 @@ class LanguageTest extends LanguageClassesTestCase {
         * @covers Language::sprintfDate
         */
        public function testSprintfDate( $format, $ts, $expected, $msg ) {
+               $ttl = null;
                $this->assertEquals(
                        $expected,
-                       $this->getLang()->sprintfDate( $format, $ts ),
+                       $this->getLang()->sprintfDate( $format, $ts, null, $ttl ),
                        "sprintfDate('$format', '$ts'): $msg"
                );
+               if ( $ttl ) {
+                       $dt = new DateTime( $ts );
+                       $lastValidTS = $dt->add( new DateInterval( 'PT' . ( $ttl - 1 ) . 'S' ) )->format( 'YmdHis' );
+                       $this->assertEquals(
+                               $expected,
+                               $this->getLang()->sprintfDate( $format, $lastValidTS, null ),
+                               "sprintfDate('$format', '$ts'): TTL $ttl too high (output was different at $lastValidTS)"
+                       );
+               } else {
+                       // advance the time enough to make all of the possible outputs different (except possibly L)
+                       $dt = new DateTime( $ts );
+                       $newTS = $dt->add( new DateInterval( 'P1Y1M8DT13H1M1S' ) )->format( 'YmdHis' );
+                       $this->assertEquals(
+                               $expected,
+                               $this->getLang()->sprintfDate( $format, $newTS, null ),
+                               "sprintfDate('$format', '$ts'): Missing TTL (output was different at $newTS)"
+                       );
+               }
        }
 
        /**
index a034031..d2e7f6e 100644 (file)
@@ -465,6 +465,22 @@ class TestFileIterator implements Iterator {
                                        continue;
                                }
 
+                               if ( $this->section == 'endtransparenthooks' ) {
+                                       $this->checkSection( 'transparenthooks' );
+
+                                       foreach ( explode( "\n", $this->sectionData['transparenthooks'] ) as $line ) {
+                                               $line = trim( $line );
+
+                                               if ( $line ) {
+                                                       $delayedParserTest->requireTransparentHook( $line );
+                                               }
+                                       }
+
+                                       $this->clearSection();
+
+                                       continue;
+                               }
+
                                if ( $this->section == 'end' ) {
                                        $this->checkSection( 'test' );
                                        // "input" and "result" are old section names allowed
@@ -601,6 +617,7 @@ class DelayedParserTest {
        /** Initialized on construction */
        private $hooks;
        private $fnHooks;
+       private $transparentHooks;
 
        public function __construct() {
                $this->reset();
@@ -613,6 +630,7 @@ class DelayedParserTest {
        public function reset() {
                $this->hooks = array();
                $this->fnHooks = array();
+               $this->transparentHooks = array();
        }
 
        /**
@@ -641,6 +659,14 @@ class DelayedParserTest {
                        }
                }
 
+               # Trigger delayed transparent hooks. Any failure will make us abort
+               foreach ( $this->transparentHooks as $hook ) {
+                       $ret = $parserTest->requireTransparentHook( $hook );
+                       if ( !$ret ) {
+                               return false;
+                       }
+               }
+
                # Delayed execution was successful.
                return true;
        }
@@ -663,6 +689,15 @@ class DelayedParserTest {
                $this->fnHooks[] = $fnHook;
        }
 
+       /**
+        * Similar to ParserTest object but does not run anything
+        * Use unleash() to really execute the hook function
+        * @param string $fnHook
+        */
+       public function requireTransparentHook( $hook ) {
+               $this->transparentHooks[] = $hook;
+       }
+
 }
 
 /**
index d7bf453..c611dc3 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -387,9 +387,17 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath
        $thumb = false;
        $errorHtml = false;
 
+       // guard thumbnail rendering with PoolCounter to avoid stampedes
+       // expensive files use a separate PoolCounter config so it is possible to set up a global limit on them
+       if ( $file->isExpensiveToThumbnail() ) {
+               $poolCounterType = 'FileRenderExpensive';
+       } else {
+               $poolCounterType = 'FileRender';
+       }
+
        // Thumbnail isn't already there, so create the new thumbnail...
        try {
-               $work = new PoolCounterWorkViaCallback( 'FileRender', sha1( $file->getName() ),
+               $work = new PoolCounterWorkViaCallback( $poolCounterType, sha1( $file->getName() ),
                        array(
                                'doWork' => function() use ( $file, $params ) {
                                        return $file->transform( $params, File::RENDER_NOW );